本發(fā)明涉及內(nèi)存頁面加解密
技術領域:
,特別是涉及一種linux操作系統(tǒng)內(nèi)存頁面即時加解密方法和系統(tǒng)。
背景技術:
:為了保護數(shù)據(jù)在磁盤中的安全,人們設計和實現(xiàn)的文件加密技術。為了保護數(shù)據(jù)在通信網(wǎng)絡中的安全,數(shù)據(jù)被加密后再發(fā)送。然而,由于處理器處理的需求,在內(nèi)存中的數(shù)據(jù)始終以明文形式存在,這就給攻擊者提供了便利。自然的,人們希望存在能夠直接處理密文的處理器。但是目前并不存在這樣的商用處理器,而且由于使用者查看和編輯的需求,有的秘密信息必須以明文形式展示給使用者。目前,諸如linux等主流商用操作系統(tǒng)并不支持對內(nèi)存頁面進行加密。由于現(xiàn)有處理器都無法訪問處于密文狀態(tài)的數(shù)據(jù)或指令,使得在內(nèi)存中的頁面均處于明文狀態(tài)。這就給攻擊者竊取用戶的敏感信息提供了方便。一旦攻擊者進入操作系統(tǒng),就可以通過掃描內(nèi)存來查找感興趣的敏感信息,從而繞開文件加密、通信加密等安全手段。為了減少內(nèi)存數(shù)據(jù)泄露的風險,一種典型的方法是操作系統(tǒng)在內(nèi)存中“鎖”住存有秘密的內(nèi)存頁面,避免頁面被換到磁盤,但是內(nèi)存數(shù)據(jù)仍然是明文,存在被竊取的風險。內(nèi)存數(shù)據(jù)的安全問題急待解決。針對這一問題,存在一些解決方案。從硬件上來看,典型的有aegis和xomos。兩者的核心思想類似,都是在處理器層面上尋求解決方案。就aegis而言,它希望存在一個具備數(shù)據(jù)加解密和完整性驗證功能的處理器,所有指令和數(shù)據(jù)在離開處理器之后,均被加密并生成完整性指紋,當處理器處理密文狀態(tài)的指令和數(shù)據(jù)時,會首先完成完整性驗證和解密操作,續(xù)而再完成具體的操作。這樣,明文狀態(tài)的數(shù)據(jù)和指令就始終處于處理器內(nèi)部,攻擊者只有進入處理器才能竊取信息,而這無疑增加了攻擊者的難度。然而遺憾的是,雖然aegis和xomos的影響巨大,但是它們都僅僅是實驗室成果,并沒有得到市場的廣泛認可。一些軟件的解決方案主要是利用新的特權軟件,典型的是虛擬機監(jiān)控器。由于虛擬機客戶機運行在虛擬機監(jiān)控器之上,只有通過虛擬機監(jiān)控器才能訪問硬件,所以在虛擬機監(jiān)控器上可以截獲操作系統(tǒng)對內(nèi)存硬件的一切訪問。這樣就可以實現(xiàn):訪問前解密、訪問后加密的目的,典型的案例如sp3,其系統(tǒng)架構如圖1所示,此時,操作系統(tǒng)不再與硬件直接交互,而是由虛擬機監(jiān)控器完成與硬件的交互,操作系統(tǒng)需要經(jīng)過虛擬機監(jiān)控器才能訪問硬件。sp3就是在虛擬機監(jiān)控器層面增加安全機制來實現(xiàn)對內(nèi)存頁面訪問操作的控制。不被處理器訪問的內(nèi)存頁面均以密文形式存在,只有在處理器訪問時才會解密供處理器使用。但是這樣的方案最明顯的限制是必須依賴虛擬機監(jiān)控器的支持,而虛擬機監(jiān)控器本身就消耗了系統(tǒng)的性能開銷,從而極大的影響了系統(tǒng)的整體性能。其次,操作系統(tǒng)內(nèi)核安全性往往仍然影響了機制本身的可信,由于安全解決方案力求對操作系統(tǒng)透明,在不修改操作系統(tǒng)的前提下達到安全目的,這就使得安全解決方案不夠徹底,惡意操作系統(tǒng)內(nèi)核仍然可能竊取秘密數(shù)據(jù)。技術實現(xiàn)要素:針對秘密信息在內(nèi)存中始終以明文狀態(tài)存在的問題,在不過多損耗計算機性能以及不依賴特殊硬件的前提下,本發(fā)明提供一種linux操作系統(tǒng)內(nèi)存頁面即時加解密方法和系統(tǒng),在頁面訪問前解密,在頁面訪問后加密,從而減少秘密數(shù)據(jù)的暴露時間,使秘密信息主要以密文的形式存在于內(nèi)存中,從而減少秘密信息泄漏的風險。為了實現(xiàn)上述目的,本發(fā)明采用以下的技術方案:本發(fā)明提供一種linux操作系統(tǒng)內(nèi)存頁面即時加解密方法,包括以下步驟:步驟1,頁面標識頁面標識包括保護頁面標識和受限狀態(tài)標識;保護頁面標識用于操作系統(tǒng)識別需要保護的頁面,分為動態(tài)實時頁面標識和靜態(tài)預頁面標識兩種情況;受限狀態(tài)標識用于操作系統(tǒng)識別保護頁面的明密文狀態(tài);步驟2,頁面解密處理器在訪問某個地址之前,檢查目標地址所在頁面是否在內(nèi)存中,即缺頁檢查,如果目標地址所在頁面在內(nèi)存中,操作系統(tǒng)檢查處理器所要訪問地址所在頁面是否為受限頁面,如果處理器所要訪問地址所在頁面為受限頁面,那么處理器無法直接訪問,操作系統(tǒng)發(fā)出訪問受限頁面中斷,將受限頁面轉(zhuǎn)換為非受限頁面,完成對受限頁面的解密操作;步驟3,頁面加密在內(nèi)核中增設頁面加密服務例程,由該頁面加密服務例程周期性檢查和批量加密非受限頁面,即定時對所有非受限頁面進行檢查,如果存在非受限頁面長時間不被處理器所訪問,再對其進行加密,將其轉(zhuǎn)換為受限頁面。進一步地,所述步驟1中動態(tài)實時頁面標識是指進程根據(jù)需要動態(tài)向操作系統(tǒng)申請保護頁面,以便存儲秘密信息,動態(tài)實時頁面標識是由申請保護頁面的函數(shù)接口ppmalloc和取消保護頁面的函數(shù)接口ppfree實現(xiàn)的,具體為:ppmalloc是在傳統(tǒng)c庫函數(shù)malloc的基礎上增加了頁面標識功能,具體來說,ppmalloc首先利用傳統(tǒng)的malloc函數(shù)申請相應的存儲空間,然后利用新增系統(tǒng)調(diào)用ppset來標識malloc函數(shù)申請的頁面;ppfree是在傳統(tǒng)c庫函數(shù)free的基礎上增加了頁面標識功能,其目的是取消ppmalloc函數(shù)所申請的保護頁面;ppset系統(tǒng)調(diào)用根據(jù)所給的首地址以及存儲空間范圍大小,標識所涵蓋的頁面為保護頁面或者取消保護頁面的標識。進一步地,所述步驟1中靜態(tài)預頁面標識是指在程序裝入內(nèi)存前就提前對需要保護的秘密數(shù)據(jù)所在頁框進行標識,具體為:對linux操作系統(tǒng)的elf文件格式進行解析,將秘密數(shù)據(jù)所在位置進行標識,并將標識結(jié)果存儲于附屬的標識文件,當ppexec系統(tǒng)調(diào)用裝載程序時,將標識文件裝載入內(nèi)核形成標識數(shù)據(jù);為了標識進程對應的頁表中相應的標志字,增加缺頁中斷服務程序的工作內(nèi)容,要求缺頁中斷在裝載頁面的同時也更新頁面對應頁表項的標志字。進一步地,所述步驟2中訪問受限頁面中斷的具體工作流程為:步驟2.1,中斷服務程序讀取產(chǎn)生中斷的目標地址,查獲目標地址所在頁面所對應的頁表項;步驟2.2,中斷服務程序讀取目標頁面的內(nèi)容,對其進行解密,將受限頁面轉(zhuǎn)換為非受限頁面;步驟2.3,中斷服務程序查獲目標頁面所對應的頁表項的標志字,更新該頁面對應頁表項的標志字,當中斷服務程序返回后,處理器直接訪問該頁面。進一步地,所述步驟3中頁面加密服務例程周期性檢查和批量加密非受限頁面的具體過程為:內(nèi)核維護一個非受限頁面單鏈表,當受限頁面轉(zhuǎn)換為非受限頁面后,內(nèi)核將在非受限頁面單鏈表中增加一個新的節(jié)點,記錄新增加非受限頁面的基本信息,頁面加密服務例程周期性檢查該單鏈表,檢查頁表項以及頁面訪問信息,得到待加密非受限頁面集,頁面加密服務例程將加密待處理的非受限頁面轉(zhuǎn)換為受限頁面,然后更新對應頁面的頁表項標志字,最后從非受限頁面單鏈表中刪除該節(jié)點。進一步地,所述頁面加密服務例程采用最近最久未使用算法來篩選待處理的非受限頁面集,最近最久未使用是指從若干頁面中挑選最近一段時間最久沒有使用的頁面。本發(fā)明還提供一種linux操作系統(tǒng)內(nèi)存頁面即時加解密系統(tǒng),包括用戶接口和內(nèi)核,用戶接口經(jīng)過系統(tǒng)調(diào)用向內(nèi)核提出服務請求,所述內(nèi)核包括頁面標識單元、頁面加密單元和頁面解密單元;頁面標識單元,用于標識需要保護的頁面或者取消需要保護的頁面;頁面加密單元,用于頁面暫時不被訪問時,對保護頁面進行加密操作;頁面解密單元,用于在頁面被處理器訪問時,及時對保護頁面進行解密操作。進一步地,所述頁面標識單元包括保護頁面標識單元和受限狀態(tài)標識單元;保護頁面標識單元用于操作系統(tǒng)識別需要保護的頁面;受限狀態(tài)標識單元用于操作系統(tǒng)識別保護頁面的明密文狀態(tài)。與現(xiàn)有技術相比,本發(fā)明具有以下優(yōu)點:本發(fā)明在不依賴特殊硬件以及虛擬機監(jiān)控器支持,通過改造linux操作系統(tǒng)內(nèi)核,在不過多犧牲系統(tǒng)整體性能的原則和影響處理器訪問頁面內(nèi)容的前提下,為進程提供頁面粒度的加解密服務,使被保護的頁面只有處理器訪問前以及訪問后一定時間內(nèi)呈明文狀態(tài),從而減少內(nèi)存中秘密數(shù)據(jù)暴露的風險。附圖說明圖1是引入sp3的系統(tǒng)架構框圖;圖2是本發(fā)明一種linux操作系統(tǒng)內(nèi)存頁面即時加解密方法的流程示意圖;圖3是現(xiàn)有技術頁面內(nèi)的秘密信息始終以明文形式存在的工作原理圖;圖4是本發(fā)明頁面內(nèi)的秘密信息處于明密文狀態(tài)的工作原理圖;圖5是動態(tài)實時頁面標識流程示意圖;圖6是實施例一x86處理器使用的頁表項;圖7是靜態(tài)預頁面標識流程示意圖;圖8是訪問受限頁面中斷流程示意圖;圖9是頁面加密服務例程工作流程圖;圖10是本發(fā)明一種linux操作系統(tǒng)內(nèi)存頁面即時加解密系統(tǒng)的結(jié)構示意圖;圖11是非受限頁面與受限頁面狀態(tài)轉(zhuǎn)換示意圖。具體實施方式為了便于理解,對本發(fā)明中出現(xiàn)的部分名詞作以下解釋說明:局部性原理:所謂局部性原理是指處理器存取數(shù)據(jù)或指令時,往往總是集中于一小片連續(xù)區(qū)域。由于局部性原理及性能考慮,本發(fā)明并不會在頁面數(shù)據(jù)被使用后立即加密,而是待處理器一定時間內(nèi)不再訪問該頁面后再進行加密。lru算法:lru是leastrecentlyused的縮寫,即最近最久未使用,可用于頁面置換算法,當內(nèi)存無法容納新的頁面時,系統(tǒng)將從現(xiàn)有頁面中選取最近最久沒有使用的頁面,將其替換出內(nèi)存,用于容納新的頁面。本發(fā)明也將借鑒lru算法,將長時間不再訪問的受保護的頁面加密。保護頁面:需要操作系統(tǒng)保護的進程頁面。從效率來看,進程所屬頁面并不需要都保護,只有少量存儲于敏感信息(如用戶口令)的頁面才需要保護,這些需要保護的頁面稱為保護頁面。普通頁面:不需要操作系統(tǒng)保護的進程頁面。普通頁面是相對保護頁面而言,是進程不包含秘密信息的頁面。受限頁面:保護頁面存在受限和非受限兩種狀態(tài),處于受限狀態(tài)的保護頁面也簡稱受限頁面,受限頁面是頁面數(shù)據(jù)處于密文狀態(tài)的保護頁面。非受限頁面:處于非受限狀態(tài)的保護頁面簡稱非受限頁面,非受限頁面是頁面數(shù)據(jù)處于明文狀態(tài)的保護頁面。訪問受限頁面中斷:當處理器在訪問數(shù)據(jù)或指令時,若發(fā)現(xiàn)所要訪問的指令或數(shù)據(jù)處于密文狀態(tài),操作系統(tǒng)便產(chǎn)生訪問受限頁面中斷信號,并喚醒相應的中斷服務例程,將受限頁面轉(zhuǎn)換為非受限頁面。此中斷是本發(fā)明要求linux操作系統(tǒng)新增加的中斷。頁面加密服務例程:頁面加密服務例程根據(jù)最近最久未使用原則,周期性檢查非受限頁面的訪問情況,并加密符合要求的非受限頁面,將其轉(zhuǎn)換為受限頁面,頁面加密服務例程是本發(fā)明要求linux操作系統(tǒng)新增加的內(nèi)核成分。下面結(jié)合附圖和實施例,對本發(fā)明的具體實施方式作進一步詳細描述:實施例一,由于執(zhí)行、編輯和查看的需要,計算機中的指令和數(shù)據(jù)都是以明文形式存在于內(nèi)存。這使得攻擊者可以直接竊取內(nèi)存中的用戶秘密數(shù)據(jù)(如:銀行口令),從而繞開困難的安全措施。有必要對含有秘密信息的頁面進行保護。不過,想要完全避免秘密信息以明文形式暴露于內(nèi)存中是不現(xiàn)實的,這是因為目前主流商用處理器都無法直接處理密文形式的指令與數(shù)據(jù)。本發(fā)明擬構建內(nèi)存頁面粒度的加解密算法,從而減少秘密信息在內(nèi)存以明文形式存在的時間,當處理器訪問這些需要保護的信息時,這些信息以明文形式存在,當處理器不再訪問這些信息時,系統(tǒng)及時將其轉(zhuǎn)換為密文。本發(fā)明將內(nèi)存頁面分為普通頁面和保護頁面兩類。所謂保護頁面是指含有秘密信息、需要操作系統(tǒng)保護的頁面。保護頁面存在受限和非受限兩種狀態(tài),操作系統(tǒng)根據(jù)處理器處理請求及時完成保護頁面在受限狀態(tài)與非受限狀態(tài)之間轉(zhuǎn)換。保護頁面的受限狀態(tài)是指頁面所含信息為密文狀態(tài),保護頁面的非受限狀態(tài)是指頁面所含信息為明文狀態(tài)。處理器能夠直接訪問非受限頁面,但是無法直接訪問受限頁面。為了支持處理器對保護頁面的訪問,操作系統(tǒng)在處理器訪問保護頁面時,解密保護頁面的內(nèi)容,將頁面從受限狀態(tài)轉(zhuǎn)變?yōu)榉鞘芟逘顟B(tài)。當處理器暫時不再訪問該頁面,操作系統(tǒng)加密保護頁面的內(nèi)容,將頁面從非受限狀態(tài)轉(zhuǎn)變?yōu)槭芟逘顟B(tài)。通過這種方法可以減少秘密信息在內(nèi)存中以明文形式存在的時間。如圖3所示,在傳統(tǒng)操作系統(tǒng)內(nèi)部,頁面內(nèi)的秘密信息始終以明文形式存在。攻擊者在任何一個時間點都可以從內(nèi)存中直接竊取秘密信息。引入本發(fā)明以后,如圖4所示,秘密信息只有處理器訪問前后處于明文狀態(tài)。具體來說,在秘密信息裝入內(nèi)存且處理器未訪問前,秘密信息所在頁面處于受限狀態(tài)。在處理器訪問期間,頁面內(nèi)容被解密,處于非受限狀態(tài)。在處理器不再訪問該頁面時,頁面又轉(zhuǎn)換為受限狀態(tài)。如圖2所示,本發(fā)明提供的一種linux操作系統(tǒng)內(nèi)存頁面即時加解密方法,包括以下步驟:步驟1,頁面標識頁面標識的目的在于識別保護頁面以及頁面的受限狀態(tài)。頁面標識單元與用戶接口和系統(tǒng)調(diào)用協(xié)調(diào)工作,以便用戶標識所需要保護的對象。頁面標識包括保護頁面標識以及受限狀態(tài)標識兩個方面。保護頁面標識的目的在于操作系統(tǒng)識別需要保護的頁面,分為動態(tài)實時標識和靜態(tài)預標識兩種情況。受限狀態(tài)標識的目的是為了便于操作系統(tǒng)識別保護頁面的明密文狀態(tài),以便決定是否加解密。動態(tài)實時頁面標識是指進程根據(jù)需要動態(tài)向操作系統(tǒng)申請保護頁面,以便存儲秘密信息。為了實現(xiàn)動態(tài)實時頁面標識,如圖5所示,本發(fā)明向程序設計人員提供申請保護頁面的函數(shù)接口ppmalloc(即protectedpagemalloc的簡寫)以及取消保護頁面的函數(shù)接口ppfree(即protectedpagefree)。ppmalloc是在傳統(tǒng)c庫函數(shù)malloc的基礎上增加了頁面標識功能。具體來說,ppmalloc首先利用傳統(tǒng)的malloc函數(shù)申請相應的存儲空間,然后利用新增系統(tǒng)調(diào)用ppset來標識malloc函數(shù)申請的頁面??紤]到安全性以及l(fā)inux操作系統(tǒng)寫時復制機制,本發(fā)明在頁面標識前,強制向新分配的存儲空間寫入隨機數(shù),從而使操作系統(tǒng)立即為ppmalloc申請的存儲空間分配具體的頁面。類似的ppfree是與傳統(tǒng)c庫函數(shù)free基礎上增加了頁面標識功能,其目的是取消ppmalloc函數(shù)所申請的保護頁面。ppset系統(tǒng)調(diào)用是本發(fā)明在linux操作系統(tǒng)內(nèi)核中新增加的系統(tǒng)調(diào)用,它將根據(jù)所給的首地址以及存儲空間范圍大小,標識所涵蓋的頁面為保護頁面,或者取消這些保護頁面的標識。本發(fā)明利用頁表項的空閑位來記錄頁面是否為保護頁面以及受限狀態(tài)此類頁面屬性。在利用x86處理器尋址過程中將使用頁表項,而頁表項共32位,如圖6所示,其中前20位為物理地址的高20位,用于定位一個物理頁框,后12位包含多種頁面屬性,例如r/w位用于表明頁面的讀、寫和執(zhí)行權限。頁表項中預留了3個比特給進程所使用,它們是第9、10和11位。這3比特的空閑位可以表示8種狀態(tài),足夠滿足頁面標識需求。需要說明的是:本發(fā)明所使用的頁面標注只是針對x86處理器,其它處理器略有不同。本發(fā)明利用頁表項的第9位和第10位標識當前頁面是否為保護頁面以及保護頁面是否處于受限狀態(tài)。第9位用于標識保護頁面的狀態(tài),用y表示。當y=1表明當前頁面為受限頁面,當y=0表明當前頁面為非受限頁面。第10位用于標識保護頁面,用z表示。當z=1表示當前頁面為保護頁面,當z=0表示當前頁面為普通頁面。當z=0時,位y的值沒有實際含義。狀態(tài)位z和y的詳細解釋見表1。z=1z=0y=1受限頁面普通頁面y=0非受限頁面普通頁面表1狀態(tài)位z和y的解釋靜態(tài)預頁面標識是指在程序裝入內(nèi)存前就提前對需要保護的秘密數(shù)據(jù)所在頁框進行標識,其工作流程如圖7所示。為了不對linux操作系統(tǒng)的elf可執(zhí)行文件格式進行修改,本發(fā)明采用其它輔助工具對elf文件格式進行解析,將秘密數(shù)據(jù)所在位置進行標識,并將標識結(jié)果存儲于附屬的標識文件。本發(fā)明對exec系統(tǒng)調(diào)用進行修改,形成新的ppexec系統(tǒng)調(diào)用。當ppexec系統(tǒng)調(diào)用裝載程序時,也將標識文件裝載入內(nèi)核形成標識數(shù)據(jù)。在linux操作系統(tǒng)中,進程所屬頁面將逐漸裝載入內(nèi)存。為了標識進程對應的頁表中相應的標志字,本發(fā)明增加缺頁中斷服務程序的工作流程,要求缺頁中斷在裝載頁面的同時也更新頁面對應頁表項的標志字。靜態(tài)預頁面標識的一種極端情況是全進程標識,即標識進程所有頁面為保護頁面。從安全性來看,全進程標識無疑增加了安全性,但是安全性的增加的代價是性能開銷的增加。由于所有指令和數(shù)據(jù)大多時候均處于密文狀態(tài),為此必將導致頻繁的加解密操作。為了提高效率,本發(fā)明根據(jù)局部性原理,將不會在指令和數(shù)據(jù)被使用完立即加密,從而避免將短時間會再次訪問的指令或數(shù)據(jù)再次加密,但是這不能從根本上減少全進程標識所帶來的性能開銷。理想情況下,應該有針對性標識需要保護的秘密數(shù)據(jù)。步驟2,頁面解密為了實現(xiàn)及時解密受限頁面,本發(fā)明擬在內(nèi)核中增加訪問受限頁面中斷。在linux操作系統(tǒng)中,進程會通過查找線性區(qū)等中間過程,最終查找頁表項來獲得頁面屬性信息,明確線性地址是否合法、頁面是否在內(nèi)存等情況,以決定最終是否訪問該地址。在引入本發(fā)明后,linux操作系統(tǒng)將增加一項檢查內(nèi)容:處理器所要訪問地址所在頁面是否為受限頁面。如果處理器所要訪問地址所在頁面為受限頁面,那么處理器不能直接處理處于密文的指令和數(shù)據(jù),操作系統(tǒng)發(fā)出訪問受限頁面中斷。圖8顯示了訪問受限頁面中斷產(chǎn)生的時機。處理器在訪問某個地址前,勢必需要檢查目標地址所在區(qū)域的合法性,如訪問權限、是否位于內(nèi)存等。為了及時截獲處理器對受限頁面的訪問,本發(fā)明構造“偽缺頁”,即頁面已經(jīng)裝入物理內(nèi)存,但是頁表項標志字顯示該頁面為受限頁面且未裝入內(nèi)存,這樣處理器訪問時將產(chǎn)生缺頁中斷。linux缺頁中斷服務程序?qū)⑼瓿梢幌盗械臋z查,本發(fā)明增加“偽缺頁”檢查項。操作系統(tǒng)結(jié)合頁表項標志字可以判定當前異常是否是“偽缺頁”,如果是“偽缺頁”則實際意味處理器訪問了受限頁面,就喚醒訪問受限頁面中斷服務程序。圖8顯示了訪問受限頁面中斷服務程序主要完成以下三個工作。首先,中斷服務程序讀取產(chǎn)生中斷的目標地址,查獲目標地址所在頁面所對應的頁表項。產(chǎn)生中斷的目標地址可以由內(nèi)核在中斷產(chǎn)生前寫入指定處理器寄存器,而后由中斷服務程序讀取。其次,中斷服務程序讀取目標頁面的內(nèi)容,對其進行解密,將受限頁面轉(zhuǎn)換為非受限頁面。最后,中斷服務程序會查獲目標頁面所對應的頁表項的標志字,將y置為0,表明當前保護頁面的狀態(tài)已經(jīng)由受限轉(zhuǎn)變?yōu)榉鞘芟?,當中斷服務程序返回后,處理器可以直接訪問該頁面。根據(jù)頁面的加解密算法復雜程度,決定訪問受限頁面中斷服務程序是否分為下半部和下半部。在linux內(nèi)核中,為了讓中斷服務程序完成盡可能多且必要的任務,同時也希望及時響應中斷,所以將中斷服務程序分為上半部和下半部。上半部強調(diào)執(zhí)行效率和時效性,下半部則執(zhí)行沒有嚴格時間限制的部分功能。當加解密算法較為復雜,耗時過多時,可以將其放入下半部執(zhí)行,以保證操作系統(tǒng)的運行效率。頁面加解密算法的一個基本要求是:加解密后的數(shù)據(jù)流長度不發(fā)生變化,以保證解密后的頁面內(nèi)容可以正好覆蓋加密后的頁面內(nèi)容?;谝莆患拇嫫鞯男蛄忻艽a算法就是一種典型的頁面加解密算法:以每個頁面首地址作為移位寄存器的初始向量,保護移位寄存器結(jié)構不被泄漏,產(chǎn)生足夠加解密頁面內(nèi)容的隨機數(shù)流加解密目標頁面。本發(fā)明不對頁面加解密算法作強制要求。步驟3,頁面加密為了及時將非受限頁面轉(zhuǎn)變?yōu)槭芟揄撁?,本發(fā)明在內(nèi)核中增設頁面加密服務例程,由該服務例程周期性加密非受限頁面。當處理器訪問完非受限頁面,一種理想的情況是立即對其進行加密。然而,處理器訪問的指令和數(shù)據(jù)往往集中于一小塊連續(xù)區(qū)域,很有可能在少數(shù)幾個頁面來回訪問,如果采用處理器不再訪問頁面就立即加密的策略,就會導致這幾個頁面被反復加解密,從而產(chǎn)生極大的性能開銷。故而,本發(fā)明采用周期性檢查和批量加密的策略,即定時對所有非受限頁面進行檢查,如果存在非受限頁面已經(jīng)長時間不被處理器所訪問,再對其進行加密,將其轉(zhuǎn)變?yōu)槭芟揄撁?。為了避免掃描整個頁表來查找需要加密的非受限頁面,內(nèi)核維護一個非受限頁面鏈表,如圖9所示。當受限頁面轉(zhuǎn)變?yōu)榉鞘芟揄撁婧?,?nèi)核將在非受限頁表單鏈表中增加一個新的節(jié)點,記錄新增加非受限頁面的基本信息。由于受限頁面只能經(jīng)過訪問受限頁面中斷服務程序才能轉(zhuǎn)變?yōu)榉鞘芟揄撁?,所以將由訪問受限頁面中斷服務程序完成非受限頁面單鏈表節(jié)點的增加工作。頁面加密服務例程周期性檢查該單鏈表,快速檢查頁表項以及頁面訪問信息,最終得到加密非受限頁面集。頁面加密服務例程將加密待處理的非受限頁面,將其轉(zhuǎn)換為受限頁面;然后更新對應頁面的頁表項標志字,表明保護頁面的狀態(tài)發(fā)生變化;最后從非受限頁面單鏈表中刪除該節(jié)點。頁面加密服務例程采用最近最久未使用(lru:leastrecentlyused)算法來篩選待處理的非受限頁面集。所謂最近最久未使用是指從若干頁面中挑選最近一段時間最久沒有使用的頁面,一種經(jīng)典的用法是頁面置換。本發(fā)明將其用于決定哪些非受限頁面需要加密,以便最近可能會被處理器再次使用的頁面不被加密,而已經(jīng)長時間不被處理器所訪問的頁面則及時加密,以減少秘密數(shù)據(jù)暴露的時間。本發(fā)明將借助linux操作系統(tǒng)基于最近最久未使用頁面置換算法來獲取最近最久未使用信息。頁面加密服務例程的檢查周期是一個需要綜合平衡的因子。如果頁面加密服務例程檢查周期過短,可能會造成處理器還需要訪問的非受限頁面被加密,從而導致系統(tǒng)性能開銷過大。如果頁面加密服務例程檢查周期過長,可能會造成秘密數(shù)據(jù)在內(nèi)存中存活時間過長,安全風險增加。如圖10所示,本發(fā)明還提供一種linux操作系統(tǒng)內(nèi)存頁面即時加解密系統(tǒng),包括用戶接口和內(nèi)核,用戶接口經(jīng)過系統(tǒng)調(diào)用向內(nèi)核提出服務請求,所述內(nèi)核包括頁面標識單元、頁面加密單元和頁面解密單元;頁面標識單元,用于標識需要保護的頁面或者取消需要保護的頁面;頁面加密單元,用于頁面暫時不被訪問時,對保護頁面進行加密操作;頁面解密單元,用于在頁面被處理器訪問時,及時對保護頁面進行解密操作。其中,頁面標識單元包括保護頁面標識單元和受限狀態(tài)標識單元;保護頁面標識單元用于操作系統(tǒng)識別需要保護的頁面;受限狀態(tài)標識單元用于操作系統(tǒng)識別保護頁面的明密文狀態(tài)。非受限頁面與受限頁面的狀態(tài)轉(zhuǎn)換如圖11所示。第一步,當處理器訪問受限頁面時,由于受限頁面內(nèi)的數(shù)據(jù)處于密文狀態(tài),處理器無法直接訪問,產(chǎn)生系統(tǒng)中斷,由頁面解密單元提供服務。第二步,頁面解密單元完成對受限頁面的解密操作,受限頁面轉(zhuǎn)換為非受限頁面。第三步,處理器訪問非受限頁面,完成指定的業(yè)務工作。第四步,頁面加密單元定時檢查是否存在長時間未用的非受限頁面,如果有則對其進行加密,將非受限頁面轉(zhuǎn)換為受限頁面。之所以不在處理器訪問完頁面立即將非受限頁面轉(zhuǎn)換為受限頁面,是考慮到處理器可能在不久的將來再次訪問該頁面,頻繁的對頁面實施加解密將極大的影響系統(tǒng)的整體效率,故而本發(fā)明采用定時檢查、批量加密的方式完成非受限頁面向受限頁面的轉(zhuǎn)換。以上所示僅是本發(fā)明的優(yōu)選實施方式,應當指出,本發(fā)明并不限定操作系統(tǒng)所使用的頁面加密算法。適用于本發(fā)明的頁面加密算法至少應該有兩個準則:加解密后數(shù)據(jù)長度不發(fā)生變化,加解密速度足夠快。本發(fā)明提及可以使用的基于移位寄存器的序列密碼,但也不排除其它密碼算法。典型的如使用aes分組加密算法作為頁面加解密算法,內(nèi)核維護一個主密鑰,并為每個進程生成一個私有密鑰,內(nèi)核為每個進程使用其私用密鑰完成頁面加解密操作。當前第1頁12