基于文件系統(tǒng)過(guò)濾驅(qū)動(dòng)的Windows文件加密技術(shù)研究_第1頁(yè)
基于文件系統(tǒng)過(guò)濾驅(qū)動(dòng)的Windows文件加密技術(shù)研究_第2頁(yè)
基于文件系統(tǒng)過(guò)濾驅(qū)動(dòng)的Windows文件加密技術(shù)研究_第3頁(yè)
基于文件系統(tǒng)過(guò)濾驅(qū)動(dòng)的Windows文件加密技術(shù)研究_第4頁(yè)
基于文件系統(tǒng)過(guò)濾驅(qū)動(dòng)的Windows文件加密技術(shù)研究_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、操作系統(tǒng)中與文件和目錄相關(guān)的子系統(tǒng)被稱為文件系統(tǒng)。Windows FSD(文件系統(tǒng)驅(qū)動(dòng)程序)體系結(jié)構(gòu)Windows 2000/XP的FSD(File System Driver,文件系統(tǒng)驅(qū)動(dòng)程序)分為本地FSD和遠(yuǎn)程FSD。本地FSD:允許用戶訪問(wèn)本地計(jì)算機(jī)上的數(shù)據(jù)本地FSD負(fù)責(zé)向I/O管理器注冊(cè)自己,當(dāng)開(kāi)始訪問(wèn)某個(gè)卷時(shí),I/O管理器調(diào)用FSD來(lái)進(jìn)行卷識(shí)別。完成卷識(shí)別后,本地FSD創(chuàng)建一個(gè)設(shè)備對(duì)象以表示所裝載的文件系統(tǒng)。I/O管理器通過(guò)卷參數(shù)塊(VPB)在存儲(chǔ)管理器創(chuàng)建的卷設(shè)備對(duì)象和FSD創(chuàng)建的卷設(shè)備對(duì)象之間建立連接。此連接將I/O管理器的I/O請(qǐng)求轉(zhuǎn)交給FSD設(shè)備對(duì)象。遠(yuǎn)程FSD:允許用戶通

2、過(guò)網(wǎng)絡(luò)訪問(wèn)遠(yuǎn)程計(jì)算機(jī)上的數(shù)據(jù)。由兩部分組成:客戶端FSD和服務(wù)器端FSD??蛻舳薋SD首先接收來(lái)自應(yīng)用程序的I/O請(qǐng)求,并轉(zhuǎn)換為網(wǎng)絡(luò)文件系統(tǒng)協(xié)議命令,然后通過(guò)網(wǎng)絡(luò)發(fā)送給服務(wù)器端FSD。服務(wù)器端FSD監(jiān)聽(tīng)網(wǎng)絡(luò)命令,接收網(wǎng)絡(luò)文件系統(tǒng)協(xié)議命令并轉(zhuǎn)交給本地FSD去執(zhí)行。FSD與文件系統(tǒng)操作Windows文件系統(tǒng)的有關(guān)操作都是通過(guò)FSD完成的:顯示文件I/O:應(yīng)用程序通過(guò)I/O接口函數(shù)如CreateFile,ReadFile,WriteFile等來(lái)訪問(wèn)文件。高速緩存延遲寫(xiě):此線程定期對(duì)高速緩存中已被修改的頁(yè)面進(jìn)行寫(xiě)操作。高速緩存提前讀:此線程負(fù)責(zé)提前讀數(shù)據(jù)。內(nèi)存臟頁(yè)寫(xiě):此線程定期清洗緩沖區(qū)。內(nèi)存缺頁(yè)處理

3、FAT32 Windows 2000/XP通過(guò)WinntSystem32DriversFastfat.sys提供FAT(File Allocation Table,文件分配表)文件系統(tǒng)驅(qū)動(dòng)程序。FAT32文件分配表簇標(biāo)識(shí)擴(kuò)充為32位,主要應(yīng)用于Windows 9x和Windows Me中。優(yōu)點(diǎn):1)具有強(qiáng)大的尋址能力,能比FAT16更有效的管理磁盤(pán);2)根目錄下的文件數(shù)目不受最多256的限制;3)引導(dǎo)記錄擴(kuò)展為包含重要數(shù)據(jù)結(jié)構(gòu)的備份,因而分區(qū)不易受單點(diǎn)的錯(cuò)誤影響;4)支持長(zhǎng)文件名格式。缺點(diǎn):同樣不支持系統(tǒng)容錯(cuò)特性和內(nèi)部安全特性。NTFS(New Technology File System)N

4、TFS優(yōu)點(diǎn)支持文件系統(tǒng)數(shù)據(jù)的可恢復(fù)性、安全性、數(shù)據(jù)冗余和數(shù)據(jù)容錯(cuò);具有其他高級(jí)特性:多數(shù)據(jù)流、完全支持Unicode、通用索引機(jī)制、動(dòng)態(tài)壞簇重新映射(熱修復(fù))、完全支持POSIX(可移植操作系統(tǒng)接口)、支持文件數(shù)據(jù)的壓縮、日志記錄、支持用戶磁盤(pán)限額、硬鏈接與軟鏈接(硬鏈接允許從多個(gè)路徑指向同一文件和目錄,軟鏈接允許重定向一個(gè)目錄)、鏈接跟蹤、加密、碎片整理等。1 NTFS可恢復(fù)性支持NTFS通過(guò)日志記錄來(lái)實(shí)現(xiàn)文件系統(tǒng)的可恢復(fù)性。所有改變文件系統(tǒng)的子操作在磁盤(pán)上運(yùn)行之前,先被記錄在日志文件中。在恢復(fù)階段,NTFS根據(jù)記錄在日志文件中的文件操作信息,對(duì)那些部分完成的事務(wù)進(jìn)行重做或撤銷,以保證磁盤(pán)上

5、文件系統(tǒng)的一致性。這種技術(shù)稱為“預(yù)寫(xiě)日志記錄”。2 NTFS壞簇恢復(fù)支持Windows 2000/XP卷管理功能分別通過(guò)用于基本磁盤(pán)的FtDisk和用于動(dòng)態(tài)磁盤(pán)的LDM(Logical Disk Manager)的卷管理工具來(lái)實(shí)現(xiàn)壞簇的修復(fù)。NTFS在運(yùn)行時(shí)動(dòng)態(tài)收集有關(guān)壞簇的資料,并存儲(chǔ)在系統(tǒng)文件中,而在應(yīng)用程序環(huán)境中不必知道壞簇的存在。當(dāng)扇區(qū)發(fā)生錯(cuò)誤時(shí),容錯(cuò)驅(qū)動(dòng)程序給NTFS發(fā)出該扇區(qū)是壞的的通知,NTFS將分配一個(gè)新簇來(lái)取代壞扇區(qū)中的簇,并將數(shù)據(jù)復(fù)制到新簇中,NTFS將標(biāo)記該壞扇區(qū)并不再使用它。3 NTFS安全性支持NTFS把文件和目錄看成對(duì)象和對(duì)象的集合,文件和目錄對(duì)象都帶有安全描述符,

6、并作為文件的一部分存儲(chǔ)在磁盤(pán)上。進(jìn)程在打開(kāi)對(duì)象句柄前驗(yàn)證該進(jìn)程是否具有足夠的權(quán)限。NTFS支持加密文件系統(tǒng)(EFS),以阻止非授權(quán)用戶訪問(wèn)加密文件。NTFS FSD(文件系統(tǒng)驅(qū)動(dòng)程序)I/O管理器將I/O請(qǐng)求送交NTFS FSD執(zhí)行。應(yīng)用程序通過(guò)NTFS FSD創(chuàng)建和存取文件。步驟如下:首先檢查使用權(quán)限,看是否合法用戶的請(qǐng)求;然后I/O管理器將文件句柄轉(zhuǎn)換為文件對(duì)象指針;最后NTFS通過(guò)文件對(duì)象指針來(lái)獲得磁盤(pán)上的文件。NTFS磁盤(pán)結(jié)構(gòu)1 卷NTFS是以卷為基礎(chǔ)的。卷建立在磁盤(pán)分區(qū)之上。分區(qū)是磁盤(pán)的基本組成部分,是一個(gè)能夠被格式化和單獨(dú)使用的邏輯單元。當(dāng)以NTFS格式來(lái)格式化磁盤(pán)分區(qū)時(shí)就創(chuàng)建了N

7、TFS卷。一個(gè)磁盤(pán)可以有多個(gè)卷,一個(gè)卷也可以由多個(gè)磁盤(pán)組成。Windows 2000/XP常使用FAT卷和NTFS卷。一個(gè)36GB硬盤(pán)的三種磁盤(pán)配置的實(shí)例如下:NTFS卷NTFS卷1NTFS卷2FAT卷NTFS卷C:(36GB)C:(18GB)D:(18GB)C:(12GB)D:(24GB)2 簇NTFS與FAT一樣,使用簇作為磁盤(pán)空間分配和回收的基本單位。即一個(gè)文件占用若干個(gè)整簇,而最后一簇的剩余空間不再使用。在內(nèi)部,NTFS僅引用簇,而不知道磁盤(pán)扇區(qū)的大小。這樣使NTFS保持了與物理扇區(qū)大小的獨(dú)立性,能夠?yàn)椴煌笮〉拇疟P(pán)選擇合適的簇。卷上簇的大?。ǚQ為簇因子)是用戶使用Format命令或其

8、他格式化程序格式化卷時(shí)確定的,它隨著卷的大小而不同,但都為物理扇區(qū)的整數(shù)倍。簇的定位可使用邏輯簇號(hào)(LCN)和虛擬簇號(hào)(VCN)LCN對(duì)卷中所有的簇從頭到尾進(jìn)行簡(jiǎn)單編號(hào)。簇因子乘以LCN可獲得卷上的物理字節(jié)偏移量,從而得到物理磁盤(pán)地址。VCN對(duì)屬于特定文件的簇從0到m編號(hào),以便引用文件中的數(shù)據(jù)。VCN不要求在物理上連續(xù),可以映射到卷上任何號(hào)碼的LCN。3 主控文件表(MFT)在NTFS中,卷中存放的所有數(shù)據(jù),包括用于定位和恢復(fù)文件的數(shù)據(jù)結(jié)構(gòu)、引導(dǎo)程序數(shù)據(jù)和記錄整個(gè)卷的分配狀態(tài)的位圖(NTFS元數(shù)據(jù)),都包含在一個(gè)稱為主控文件表(MFT)的文件中。MFT是NTFS卷結(jié)構(gòu)的核心,是NTFS最重要的

9、系統(tǒng)文件。MFT以文件記錄數(shù)組實(shí)現(xiàn),每個(gè)文件大小為1KB,卷上每個(gè)文件(包括MFT本身)都有一行MFT記錄。4 文件引用號(hào)NTFS卷中的文件是通過(guò)稱為“文件引用號(hào)”的64位值來(lái)標(biāo)識(shí)的。文件引用號(hào)由文件號(hào)(低48位)和文件順序號(hào)(高16位)組成。文件號(hào)對(duì)應(yīng)文件在MFT中的位置順序號(hào)隨文件記錄的重用而增加,從而使得NTFS能完成內(nèi)部的一致性檢查。5 文件記錄NTFS不是將文件僅僅視為一個(gè)文本庫(kù)或二進(jìn)制數(shù)據(jù),而是將文件作為許多屬性/屬性值的集合來(lái)處理。除數(shù)據(jù)屬性外,其他文件屬性包括文件名、文件時(shí)間標(biāo)記、文件擁有者等。6 文件名NTFS和FAT路徑中的每個(gè)文件名/目錄名長(zhǎng)度可達(dá)255個(gè)字節(jié),可以包含U

10、nicode字符、多個(gè)句點(diǎn)和空格。MS-DOS不能正確識(shí)別Win32的文件名,因此NTFS自動(dòng)生成8字符(加3字符擴(kuò)展名)以內(nèi)的MS-DOS文件名。POSIX子系統(tǒng)需要Windows NT支持的所有應(yīng)用程序環(huán)境中最大的名字空間,因此,NTFS的名字空間等于POSIX的名字空間。POSIX子系統(tǒng)可以創(chuàng)建在Win32和MS-DOS中不可見(jiàn)的名稱。7 常駐屬性和非常駐屬性若文件的屬性值能直接存放在MFT中時(shí),該屬性稱為常駐屬性。小文件或小目錄的所有屬性均可在MFT中常駐。如果屬性值直接存放在MFT中,則NTFS只需訪問(wèn)磁盤(pán)一次即可獲得數(shù)據(jù);而FAT文件系統(tǒng)必須先在FAT表中查找文件,再讀出連續(xù)分配的

11、單元,才能找到文件數(shù)據(jù)。8 文件名索引在NTFS中,文件目錄僅僅是文件名的一個(gè)索引。即為了便于快速訪問(wèn)而用一種特殊的方式組織起來(lái)的文件名的集合。要?jiǎng)?chuàng)建一個(gè)目錄,NTFS應(yīng)對(duì)目錄中文件的文件名屬性進(jìn)行索引。9 數(shù)據(jù)壓縮NTFS壓縮功能可以對(duì)單個(gè)文件、整個(gè)目錄或卷上的整個(gè)目錄樹(shù)進(jìn)行壓縮。NTFS壓縮只能在用戶數(shù)據(jù)上執(zhí)行,而不能在文件系統(tǒng)元數(shù)據(jù)上執(zhí)行。Win32中的GetVolumeInformation函數(shù)可以判斷一個(gè)卷是否已被壓縮; GetCompressedFileSize函數(shù)可得到一個(gè)文件的實(shí)際壓縮大小;DeviceIoControl函數(shù)可檢查或改變一個(gè)文件或目錄的壓縮設(shè)置。數(shù)據(jù)壓縮可減少磁

12、盤(pán)使用空間,但每次解壓縮需要大量數(shù)據(jù)運(yùn)算。如果要拷貝一個(gè)壓縮文件,過(guò)程是解壓縮、拷貝、重新壓縮拷貝的文件。藍(lán)屏和損壞的根源:暴力清除加密文件緩存的緩存,在文件過(guò)濾器中截獲非緩存的讀取,由進(jìn)程的不同來(lái)決定是否解密,從而實(shí)現(xiàn)不同的進(jìn)程讀取相同的加密文件,得到截然相反的明文和密文。國(guó)內(nèi)透明加密市場(chǎng)的現(xiàn)狀:現(xiàn)有的驅(qū)動(dòng)透明加密普遍存在損壞文件、性能降低、兼容性差等諸多問(wèn)題。乃至不少的廠商在宣傳中都不再?gòu)?qiáng)調(diào)軟件的功能和特色,只要突出穩(wěn)定、不破壞文件就能獲得不錯(cuò)的市場(chǎng)回報(bào)。 文件過(guò)濾驅(qū)動(dòng)的工作原理在基于NT內(nèi)核的Windows操作系統(tǒng)中,文件系統(tǒng)驅(qū)動(dòng)程序是I/O子系統(tǒng)的一個(gè)組件,它為用戶提供在磁盤(pán)等非易失性

13、存儲(chǔ)介質(zhì)上存取數(shù)據(jù)的服務(wù)。NT的I/O管理器支持分層驅(qū)動(dòng)程序模型,每個(gè)IRP( I/O請(qǐng)求包)的處理分別經(jīng)過(guò)各層驅(qū)動(dòng)程序,直到某層驅(qū)動(dòng)程序完成這個(gè)請(qǐng)求。因此第三方開(kāi)發(fā)的驅(qū)動(dòng)程序就有機(jī)會(huì)插入到這個(gè)層次結(jié)構(gòu)中,截獲和處理來(lái)自上層的操作請(qǐng)求,這種驅(qū)動(dòng)程序稱為過(guò)濾驅(qū)動(dòng)程序。文件系統(tǒng)過(guò)濾驅(qū)動(dòng)程序是針對(duì)文件系統(tǒng)而言的。I/O管理器根據(jù)用戶的文件操作請(qǐng)求構(gòu)造IRP發(fā)送到文件系統(tǒng)驅(qū)動(dòng)程序,文件系統(tǒng)驅(qū)動(dòng)程序把相應(yīng)于文件系統(tǒng)的操作轉(zhuǎn)換為相應(yīng)于存儲(chǔ)設(shè)備驅(qū)動(dòng)程序的操作,并通過(guò)I/O管理器來(lái)調(diào)用存儲(chǔ)設(shè)備驅(qū)動(dòng)程序。文件系統(tǒng)過(guò)濾驅(qū)動(dòng)程序可以在請(qǐng)求發(fā)送到目標(biāo)設(shè)備前截取并處理它,從而實(shí)現(xiàn)控制文件系統(tǒng)操作的目的。加解密過(guò)程采用的

14、是DES算法。DES加密算法是分組加密算法,明文以64位單位分成塊。64位數(shù)據(jù)在64位密鑰的控制下,經(jīng)過(guò)初始變換后,進(jìn)行16輪加密迭代:64位數(shù)據(jù)被分成左右兩半部分,每部分32位,密鑰與右半部分相結(jié)合,然后再與左半部分相結(jié)合,結(jié)果作為新的右半部分;結(jié)合前的右半部分作為新的左半部分。這一系列步驟組成一輪。這種輪換要重復(fù)16次。最后一輪之后,再進(jìn)行初始置換的逆置換,就得到了64位的密文。 解密是加密的逆過(guò)程 DES的加密過(guò)程可分為加密處理,加密變換和子密鑰生成幾個(gè)部分組成。 加密處理過(guò)程 初始變換。加密處理首先要對(duì)64位的明文按初始換位表IP進(jìn)行變換。 加密處理。上述換位處理的輸出,中間要經(jīng)過(guò)16

15、輪加密變換。初始換位的64位的輸出作為下一次的輸入,將64位分為左、右兩個(gè)32位,分別記為L(zhǎng)0和R0,從L0、R0到L16、R16,共進(jìn)行16輪加密變換。最后換位。進(jìn)行16輪的加密變換之后,將L16和R16合成64位的數(shù)據(jù), 再按最后換位表進(jìn)行IP-1的換位,得到64位的密文。 加密變換過(guò)程 通過(guò)重復(fù)某些位將32位的右半部分按照擴(kuò)展換位表擴(kuò)展為48位,而56位的密鑰先移位然后通過(guò)選擇其中的某些位減少至48位,48位的右半部分通過(guò)異或操作和48位的密鑰結(jié)合,并分成6位的8個(gè)分組,通過(guò)8個(gè)S-盒將這48位替代成新的32位數(shù)據(jù),再將其置換一次。這些S-盒輸入6位,輸出4位。以此類推。 子密鑰生成過(guò)程

16、 密鑰通常表示為64位的自然數(shù),首先通過(guò)壓縮換位PC-1去掉每個(gè)字節(jié)的第8位,用作奇偶校驗(yàn),因此,密鑰去掉第8、16、2464位減至56位,所以實(shí)際密鑰長(zhǎng)度為56位,而每輪要生成48位的子密鑰。 輸入的64位密鑰,首先通過(guò)壓縮換位得到56位的密鑰,每層分成兩部分,上部分28位為C0,下部分為D0。C0和D0依次進(jìn)行循環(huán)左移操作生成了C1和D1,將C1和D1合成56位,再通過(guò)壓縮換位PC-2輸出48位的子密鑰K1,再將C1和D1進(jìn)行循環(huán)左移和PC-2壓縮換位,得到子密鑰K2.以此類推,得到16個(gè)子密鑰。加解密功能的實(shí)現(xiàn)在FileFiherDeviceIoControl()中,用戶管理程序注入的U

17、SBKey中的加密密鑰保存在加密密鑰結(jié)構(gòu)filter_key中,并根據(jù)輸入緩沖區(qū)的大小判斷密鑰是否得到了更新,如果更新則將其分別保存。加密密鑰的結(jié)構(gòu)如下: struct filter_key UNICODE_STRING USBKey;/表示注入的加密密鑰 UNICODE_STRING newUSBKey;/表示注入的新更新的加密密鑰 UNICODE_STRING protectedkey;/表示保存在安全文件夾擴(kuò)展屬性中的加密密鑰 UNICODE_STRING newprotectedkey;/表示安全文件夾擴(kuò)展屬性中新更新的加密密鑰 ; 在讀寫(xiě)卷的處理例程中將加密密鑰取出來(lái),然后與解密后的

18、存儲(chǔ)在安全文件夾擴(kuò)展屬性中的加密密鑰異或后生成加密算法的密鑰K。采用改進(jìn)的基于CBC的加密模式,文件被分成一個(gè)個(gè)64 bit的分組,設(shè)Pi是第i個(gè)分組的明文,Ci為第i個(gè)分組的密文,KI為第i個(gè)加密密鑰口令K0=K,假定C0為一個(gè)預(yù)定的64 bit的固定值。對(duì)于第一個(gè)分組,加密密鑰Kt為C0與K0的異或值,然后用IDEA算法加密明文分組P1與C0的異或值得到密文分組C1;第二分組的加密密鑰K2為C1與K1的異或值,用IDEA算法加密明文分組P2與C1的異或值得到密文分組C2。按照這種方法依次對(duì)所有分組用IDEA算法加密。然后把這些加密后的分組傳遞給文件系統(tǒng)驅(qū)動(dòng)程序,再通過(guò)移動(dòng)存儲(chǔ)介質(zhì)驅(qū)動(dòng)程序?qū)?/p>

19、入安全文件夾。解密過(guò)程與之相反.加密算法需要保護(hù)的文件存入安全目錄中,采用兩種加密算法對(duì)文件進(jìn)行加密。文件內(nèi)容用對(duì)稱加密算法加密,實(shí)行每個(gè)文件不同密鑰方式,密鑰隨機(jī)生成;生成的密鑰用非對(duì)稱加密算法加密,使用用戶公鑰加密后保存到同一個(gè)目錄中專用密鑰文件里;用戶私鑰保存于U盤(pán)中。使用安全目錄中文件時(shí),插入密鑰U盤(pán),過(guò)濾驅(qū)動(dòng)程序用私鑰先解密加密密鑰,得到文件密鑰并自動(dòng)進(jìn)行加解密處理。用戶取走私鑰U盤(pán),入侵者不能得到安全目錄中明文數(shù)據(jù)。用戶設(shè)置共享目錄時(shí),用共享者公鑰加密指定共享文件的文件密鑰,存入密鑰文件中。共享用戶訪問(wèn)共享文件時(shí),過(guò)濾驅(qū)動(dòng)程序把共享者加密密鑰取出,與共享文件一起傳給共享者。共享者得

20、到密文文件和密鑰后,插入自己私鑰U盤(pán)得到文件明文。密鑰管理 為了兼顧安全性和效率,文件保護(hù)方案采用兩種加密算法:對(duì)稱加密算法和非對(duì)稱加密算法。對(duì)稱加密算法安全性相對(duì)較低,但加密速度較快;非對(duì)稱加密算法安全性較高,但速度較慢。文件內(nèi)容用對(duì)稱算法加密。為了增強(qiáng)安全性,采用每個(gè)文件一密鑰方式,文件密鑰由算法隨機(jī)生成,并通過(guò)增加密鑰長(zhǎng)度提高破解密鑰的難度。文件密鑰的安全至關(guān)重要,為了安全地保護(hù)文件密鑰及方便地管理文件密鑰,用非對(duì)稱算法加密文件密鑰。非對(duì)稱算法需要一對(duì)密鑰:公鑰和私鑰。用戶公鑰用來(lái)加密文件密鑰,得到的加密密鑰保存在與文件同一目錄的密鑰文件中;用戶私鑰經(jīng)加密后保存于U盤(pán)中,以備解密加密密鑰

21、之用。密鑰文件存放加密密鑰,一條加密密鑰信息包括文件名、所有者、共享者、加密密鑰等內(nèi)容。密鑰文件存放在安全目錄中,每個(gè)目錄(包括子目錄)一個(gè)。通常情況下,密鑰文件不能被創(chuàng)建、修改或刪除。設(shè)置安全目錄或創(chuàng)建安全目錄子目錄時(shí)自動(dòng)生成密鑰文件;解除或刪除安全目錄及其子目錄時(shí)刪除密鑰文件;設(shè)置或解除共享目錄、復(fù)制或移動(dòng)文件到安全目錄以及在安全目錄中創(chuàng)建新文件時(shí)修改密鑰文件。所有這些操作在過(guò)濾驅(qū)動(dòng)程序中控制,并需要文件所有者插入私鑰U盤(pán)才能完成。應(yīng)用程序讀文件時(shí),過(guò)濾驅(qū)動(dòng)程序截獲密文后,從密鑰文件中取出文件對(duì)應(yīng)的加密密鑰,從用戶私鑰U盤(pán)中讀出并解密私鑰,再用用戶私鑰解密加密密鑰,得到文件密鑰后解密密文并

22、傳向上層應(yīng)用程序。應(yīng)用程序?qū)懳募r(shí),過(guò)濾驅(qū)動(dòng)程序截獲明文后,從密鑰文件取出加密密鑰,從用戶私鑰U盤(pán)中讀出并解密私鑰,再用用戶私鑰解密加密密鑰,得到文件密鑰后加密明文并傳向下層驅(qū)動(dòng);若是新建文件的寫(xiě)入,則首先生成文件密鑰,用文件密鑰加密明文的同時(shí),利用用戶公鑰加密文件密鑰并保存于密鑰文件中。為提高效率,文件密鑰可以緩存一段時(shí)間,具體時(shí)間由文件所有者設(shè)置。密鑰存儲(chǔ) 密鑰的安全是整個(gè)系統(tǒng)的關(guān)鍵。在加密模塊中,使用了3層密鑰結(jié)構(gòu):USBKey中的加密密鑰用來(lái)合成加解密文件時(shí)使用的密鑰,即私人密鑰;內(nèi)核模式下非分頁(yè)內(nèi)存中的密鑰用來(lái)加密需要保存在安全文件夾擴(kuò)展屬性中的加密密鑰,即大群組的共享密鑰;保存在安

23、全文件夾擴(kuò)展屬性中的加密密鑰用來(lái)合成加解密文件時(shí)的密鑰,即小群組的共享密鑰。密鑰大小均為128 bit。 文件的加解密密鑰分為兩部分:私人密鑰由USBKey產(chǎn)生,并在初始化USBKey配置文件時(shí)保存在其文件中;小群組密鑰采用IDEA加密算法加密后保存在安全文件夾的擴(kuò)展屬性中,大群組密鑰保存在內(nèi)核模式的非分頁(yè)內(nèi)存中。 密鑰更新 因?yàn)槊荑€在整個(gè)系統(tǒng)中有著舉足輕重的作用,因此當(dāng)密鑰不再使用或者被惡意者竊取后,應(yīng)能及時(shí)地回收。由于其他兩個(gè)密鑰均為群組的共享密鑰,所以通常對(duì)USBKey中的加密密鑰進(jìn)行更新,只需生成新的加密密鑰,設(shè)置一個(gè)更新標(biāo)志,用戶管理程序檢查更新標(biāo)志,如果為1,就將新舊加密密鑰都傳遞

24、給驅(qū)動(dòng)程序,驅(qū)動(dòng)程序先將新iHDn密密鑰分別保存,再用舊的加密密鑰解密所有文件,然后再用新的加密密鑰加密就可以了。最后用戶管理程序?qū)SBKey中的新的加密密鑰替代舊的加密密鑰,并將新加密密鑰字段徹底刪除,同時(shí)將更新標(biāo)志設(shè)為0。 透明加密技術(shù) 透明加密技術(shù)是與windows緊密結(jié)合的一種技術(shù),它工作于windows的底層。通過(guò)監(jiān)控應(yīng)用程序?qū)ξ募牟僮?,在打開(kāi)文件時(shí)自動(dòng)對(duì)密文進(jìn)行解密,在寫(xiě)文件時(shí)自動(dòng)將內(nèi)存中的明文加密寫(xiě)入存儲(chǔ)介質(zhì)。從而保證存儲(chǔ)介質(zhì)上的文件始終處于加密狀態(tài)。監(jiān)控windows打開(kāi)(讀)、保存(寫(xiě))可以在windows操作文件的幾個(gè)層面上進(jìn)行。現(xiàn)有的32位CPU定義了4種(03)特權(quán)

25、級(jí)別,或稱環(huán)(ring)。其中0級(jí)為特權(quán)級(jí),3級(jí)是最低級(jí)(用戶級(jí))。運(yùn)行在0級(jí)的代碼又稱內(nèi)核模式,3級(jí)的為用戶模式。常用的應(yīng)用程序都是運(yùn)行在用戶模式下,用戶級(jí)程序無(wú)權(quán)直接訪問(wèn)內(nèi)核級(jí)的對(duì)象,需要通過(guò)API函數(shù)來(lái)訪問(wèn)內(nèi)核級(jí)的代碼,從而達(dá)到最終操作存儲(chǔ)在各種介質(zhì)上文件的目的。 為了實(shí)現(xiàn)透明加密的目的,透明加密技術(shù)必須在程序讀寫(xiě)文件時(shí)改變程序的讀寫(xiě)方式。使密文在讀入內(nèi)存時(shí)程序能夠識(shí)別,而在保存時(shí)又要將明文轉(zhuǎn)換成密文。Window 允許編程者在內(nèi)核級(jí)和用戶級(jí)對(duì)文件的讀寫(xiě)進(jìn)行操作。內(nèi)核級(jí)提供了虛擬驅(qū)動(dòng)的方式,用戶級(jí)提供Hook API的方式。因此,透明加密技術(shù)也分為API HOOK廣度和VDM(Windo

26、ws Driver Model)內(nèi)核設(shè)備驅(qū)動(dòng)方式兩種技術(shù)。API HOOK俗稱鉤子技術(shù),VDM俗稱驅(qū)動(dòng)技術(shù)。驅(qū)動(dòng)加密技術(shù) 驅(qū)動(dòng)加密技術(shù)基于windows的文件系統(tǒng)(過(guò)濾)驅(qū)動(dòng)(IFS)技術(shù),工作在windows的內(nèi)核層。我們?cè)诎惭b計(jì)算機(jī)硬件時(shí),經(jīng)常要安裝其驅(qū)動(dòng),如打印機(jī)、U盤(pán)的驅(qū)動(dòng)。文件系統(tǒng)驅(qū)動(dòng)就是把文件作為一種設(shè)備來(lái)處理的一種虛擬驅(qū)動(dòng)。當(dāng)應(yīng)用程序?qū)δ撤N后綴文件進(jìn)行操作時(shí),文件驅(qū)動(dòng)會(huì)監(jiān)控到程序的操作,并改變其操作方式,從而達(dá)到透明加密的效果。 驅(qū)動(dòng)加密技術(shù)與應(yīng)用程序無(wú)關(guān),他工作于windows API函數(shù)的下層。當(dāng)API函數(shù)對(duì)指定類型文件進(jìn)行讀操作時(shí),系統(tǒng)自動(dòng)將文件解密;當(dāng)進(jìn)入寫(xiě)操作時(shí),自動(dòng)將

27、明文進(jìn)行加密。由于工作在受windows保護(hù)的內(nèi)核層,運(yùn)行速度更快,加解密操作更穩(wěn)定。 但是,驅(qū)動(dòng)加密要達(dá)到文件保密的目的,還必須與用戶層的應(yīng)用程序打交道。通知系統(tǒng)哪些程序是合法的程序,哪些程序是非法的程序。驅(qū)動(dòng)透明加密工作在內(nèi)核層。 數(shù)據(jù)文件受到威脅的分類:數(shù)據(jù)文件安全問(wèn)題主要有:(1)數(shù)據(jù)文件被破壞;(2)數(shù)據(jù)文件被竊取。 數(shù)據(jù)文件被破壞是指存儲(chǔ)在計(jì)算機(jī)上的數(shù)據(jù)文件不能正常使用,可能包括的情況有數(shù)據(jù)文件被刪除、數(shù)據(jù)文件被篡改等,也可能包括計(jì)算機(jī)硬盤(pán)被破壞。這種情況下有可能是因?yàn)榈卣?、洪水等自然?zāi)害或者戰(zhàn)爭(zhēng)存儲(chǔ)數(shù)據(jù)文件的計(jì)算機(jī)硬盤(pán)被徹底報(bào)廢,也可能是人為原因的故意破壞。數(shù)據(jù)文件被破壞的情況可

28、以通過(guò)數(shù)據(jù)備份在一定程度上來(lái)解決,并且現(xiàn)在這種技術(shù)和產(chǎn)品都已經(jīng)很成熟。通過(guò)把數(shù)據(jù)備份到其它存儲(chǔ)介質(zhì)、遠(yuǎn)程服務(wù)器等方式,即使數(shù)據(jù)遭到破壞,依然可以進(jìn)行恢復(fù),因此不對(duì)這個(gè)方面問(wèn)題進(jìn)行討論。 數(shù)據(jù)文件被竊取是指存儲(chǔ)在某個(gè)受控計(jì)算機(jī)的受控文件失控,主要可以分為硬件上直接盜竊磁盤(pán)和軟件上通過(guò)復(fù)制數(shù)據(jù)文件來(lái)實(shí)現(xiàn)的。對(duì)于直接盜竊硬盤(pán)這種暴力的方式,主要需要加強(qiáng)對(duì)計(jì)算機(jī)安放環(huán)境的安全保衛(wèi)。而對(duì)于軟件層面的竊取行為,首先可以把它分為兩類:外部入侵和內(nèi)部人員泄密。外部入侵主要是指通過(guò)網(wǎng)絡(luò)入侵到存儲(chǔ)關(guān)鍵數(shù)據(jù)文件的計(jì)算機(jī)上,竊取數(shù)據(jù)文件;內(nèi)部人員泄密是指能夠通過(guò)合法途徑訪問(wèn)到數(shù)據(jù)文件的人非法地把文件轉(zhuǎn)移給其他沒(méi)有權(quán)限

29、訪問(wèn)這些文件的人。防御外部入侵也是一門很復(fù)雜的技術(shù),這個(gè)主要不在本文中研究,詳細(xì)的內(nèi)容可以參見(jiàn)一些關(guān)于入侵檢測(cè)和入侵防御的資料。除了防止外部入侵以外,可以通過(guò)把數(shù)據(jù)文件加密的方法使得即使文件被竊取,破譯密碼后才能使用,這也能在很大程度上對(duì)外部入侵竊取文件的危害減輕。相對(duì)于外部的黑客入侵而言,內(nèi)部人員泄密造成的后果更為嚴(yán)重,也更加不容易預(yù)防。因?yàn)閮?nèi)部人員知道哪些數(shù)據(jù)最為重要的,重要的數(shù)據(jù)在什么地方,并且在擁有足夠權(quán)限的基礎(chǔ)上可以通過(guò)合法的手段將數(shù)據(jù)竊取,而不被發(fā)覺(jué)。要防止這些潛在危險(xiǎn)的存在,僅僅通過(guò)嚴(yán)格的權(quán)限控制或者人事管理是解決不了問(wèn)題的,設(shè)計(jì)不出一套方案,能夠在不確定每個(gè)人都是可靠的前提下,

30、保證數(shù)據(jù)文件的絕對(duì)安全。所以,需要選擇數(shù)據(jù)文件加密的方法,即使數(shù)據(jù)文件被轉(zhuǎn)移到失控,也能通過(guò)密碼對(duì)文件產(chǎn)生一定程度的保護(hù)。 通過(guò)對(duì)數(shù)據(jù)文件受到的威脅分類可知,對(duì)存儲(chǔ)在磁盤(pán)上的數(shù)據(jù)文件進(jìn)行加密,可以對(duì)防止數(shù)據(jù)文件通過(guò)外部入侵和內(nèi)部泄密上有一定的作用,也是所有方法中成本較低,安全性較高的方法。 文件加密目標(biāo):就是通過(guò)對(duì)存儲(chǔ)在計(jì)算機(jī)硬盤(pán)上的數(shù)據(jù)文件進(jìn)行加密,保證數(shù)據(jù)文件都是以密文的形式存儲(chǔ)在硬盤(pán)上。即使文件被竊取,對(duì)加密文件的破解也能成為關(guān)鍵文件泄密的主要屏障。 這種加密是建立在不會(huì)消耗太多的用戶體驗(yàn)和效率的基礎(chǔ)上的,稱為透明加解密。在用戶體驗(yàn)方面,計(jì)算機(jī)的用戶完全感受不到這種加密的存在,密文文件在

31、被加載到內(nèi)存的過(guò)程中自動(dòng)的解密,在從內(nèi)存保存到硬盤(pán)的過(guò)程中自動(dòng)被加密。這種設(shè)計(jì)讓用戶完全接觸不到加解密的過(guò)程,一方面減輕了用戶的負(fù)擔(dān),讓用戶不必參與到復(fù)雜的加解密的過(guò)程中;另一方面,減少用戶的參與也減少了用戶在參與過(guò)程中泄密的可能,讓有泄密想法的用戶根本插不上手。在效率方面,主要對(duì)效率影響的因素是加解密過(guò)程,不同的加解密算法將會(huì)有不同的強(qiáng)度,但是越強(qiáng)的算法通常時(shí)間、資源消耗越大,選擇合適的算法進(jìn)行加解密操作一方面不要犧牲太多的時(shí)間和資源,另一方面又具有較強(qiáng)的安全性也是本文需要考慮的問(wèn)題。 要達(dá)到的目標(biāo)是對(duì)所有離開(kāi)受控計(jì)算機(jī)的文件都是加密文件。如果有人企圖通過(guò)竊取計(jì)算機(jī)硬盤(pán)、通過(guò)網(wǎng)絡(luò)竊取文件、通

32、過(guò)可移動(dòng)設(shè)備竊取文件,即使成功,得到的也是加密的文件,雖然不能保證這些加密文件不被破解,但破解密碼成本相對(duì)較高,可以有效的保護(hù)文件。在讀寫(xiě)文件的透明加解密的操作,在復(fù)制文件的加解密的過(guò)程。保證存在硬盤(pán)的數(shù)據(jù)均為密文,從計(jì)算機(jī)考出的文件也是被加密的文件。這么操作的目的和意義就是把物理竊取、網(wǎng)絡(luò)入侵、內(nèi)部泄密的情況最終都?xì)w結(jié)到密碼破解,即使得到受控?cái)?shù)據(jù)文件的話也需要進(jìn)行復(fù)雜的密碼破譯的工作。并且根據(jù)不同的文件受控級(jí)別,可以設(shè)置不同的密碼強(qiáng)度。在沒(méi)有辦法保證數(shù)據(jù)文件絕對(duì)安全、不被竊取的情況下,實(shí)行密碼保護(hù)也許是最優(yōu)的選擇了。 文件存取相關(guān)的原理可以描述如下:應(yīng)用程序調(diào)用kernel32.dll 提供

33、的Windows API,kernel32.dll 中的Windows API調(diào)用kernel32.dll 中的 Native API,或者由應(yīng)用程序直接調(diào)用ntdll.dll提供的Native API,發(fā)出一個(gè)請(qǐng)求操作。I/O 管理器接收到上層傳來(lái)的I/O 請(qǐng)求,通過(guò)構(gòu)造輸入輸出請(qǐng)求包IRP(I/O Request Package) 來(lái)描述這個(gè)請(qǐng)求,然后向下傳遞給文件系統(tǒng)驅(qū)動(dòng)、存儲(chǔ)設(shè)備驅(qū)動(dòng)做后續(xù)處理,低層驅(qū)動(dòng)處理完畢后把結(jié)果依次向上返回,最后經(jīng)過(guò)I/O 管理器,把結(jié)果返回給API 函數(shù)的返回值。 文件透明加密技術(shù)是近些年針對(duì)企業(yè)文件保密需求應(yīng)運(yùn)而生的一種文件加密技術(shù),區(qū)別于常見(jiàn)的文件 密碼加

34、密。所謂透明,是指對(duì)用戶而言加解密過(guò)程不會(huì)被覺(jué)察,當(dāng)用戶打開(kāi)或編輯受保護(hù)文件時(shí),系統(tǒng)將自 動(dòng)對(duì)未加密的文件進(jìn)行加密,對(duì)已加密的文件解密。 文件在硬盤(pán)上以密文形式存儲(chǔ),在內(nèi)存中則為明文,一 旦改變使用環(huán)境,由于無(wú)法獲得自動(dòng)解密服務(wù)而無(wú)法打開(kāi),從而達(dá)到保護(hù)文件內(nèi)容的目的。 透明加解密技術(shù)是與操作系統(tǒng)緊密結(jié)合的一種技術(shù),wjndows允許程序設(shè)計(jì)人員在內(nèi)核和用戶兩個(gè)級(jí)別操作文件,因此,加密進(jìn)程就可以在這兩個(gè)層次截獲文件讀寫(xiě)操作,嵌入自己的加密算法進(jìn)行加解密,通常應(yīng)用級(jí)別的截獲采用API H0()K(俗稱鉤子)技術(shù),稱為鉤子透明加密,內(nèi)核級(jí)采用文件過(guò)濾驅(qū)動(dòng),稱驅(qū)動(dòng)加密。 過(guò)濾驅(qū)動(dòng)加密技術(shù)是基于wind

35、ows的文件系統(tǒng)過(guò)濾驅(qū)動(dòng)(IFN)技術(shù),工作在Windows的內(nèi)核層。它是 目前炙手可熱的一門技術(shù),其特點(diǎn)是技術(shù)門檻較高,需要深入理解windows系統(tǒng)內(nèi)核,開(kāi)發(fā)過(guò)程中稍有不慎就會(huì)破壞系統(tǒng)內(nèi)核,因此核心技術(shù)僅被少數(shù)幾家實(shí)力雄厚的公司所掌握。文件過(guò)濾驅(qū)動(dòng)是把文件作為一種設(shè)備來(lái)處理的一種虛擬驅(qū)動(dòng),Windows N F系統(tǒng)內(nèi)核采用堆棧式可擴(kuò)展驅(qū)動(dòng)模型,原則上可以在任何一個(gè)層次上加載自己的過(guò)濾驅(qū)動(dòng),但是加載的層次不同,開(kāi)發(fā)的難度和應(yīng)用價(jià)值也不同,現(xiàn)在的技術(shù)主要還是加載在文件系統(tǒng)驅(qū)動(dòng)的上層,這樣就可以充分利用并擴(kuò)充文件系統(tǒng)的現(xiàn)有功能,該技術(shù)在病毒實(shí)時(shí)監(jiān)控與防護(hù)、數(shù)據(jù)備份與還原以及文件訪問(wèn)控制等領(lǐng)域 都

36、有著非常廣泛的應(yīng)用。 過(guò)濾驅(qū)動(dòng)中幾種非常重要的概念包括驅(qū)動(dòng)對(duì)象、設(shè)備對(duì)象、設(shè)備堆棧、I0堆棧,驅(qū)動(dòng)對(duì)象標(biāo)示驅(qū)動(dòng)程序,設(shè)備對(duì)象記錄加載的設(shè)備,一個(gè)驅(qū)動(dòng)對(duì)象可以有多個(gè)設(shè)備對(duì)象構(gòu)成設(shè)備對(duì)象鏈表,設(shè)備堆棧用于記錄所有驅(qū)動(dòng)程序的設(shè)備,IO棧用來(lái)記錄穿越設(shè)備堆棧時(shí)的操作屬性,操作的對(duì)象為IRP(IO Request Package),IRP包由系統(tǒng)的某個(gè)組件創(chuàng)建,類似于Windows 應(yīng)用程序的“消息”概念,要處理某種數(shù)據(jù)只需要把IRP包傳送到相應(yīng)驅(qū)動(dòng)的相應(yīng)派遣函數(shù)中。 加密的基本思想:在Windows NT內(nèi)核操作系統(tǒng)中,應(yīng)用程序的一次數(shù)據(jù)請(qǐng)求的過(guò)程:只有在無(wú)緩存或者FAST IO不可用的情況下才在硬盤(pán)

37、上讀取數(shù)據(jù),因此只用攔截IRP_H>F1agS為IRPNOCA 砸(表示IO請(qǐng)求從存儲(chǔ)的媒介而不是高速緩存中讀取數(shù)據(jù))、 IRPPAGINGIO(表示此時(shí)執(zhí)行內(nèi)存頁(yè)的IO操作)和IRPSYNCHRONOUSPAGING10(表示內(nèi)存頁(yè) 需要同步更新,此標(biāo)志也是由內(nèi)存管理器使用)的數(shù)據(jù)包,對(duì)于寫(xiě)數(shù)據(jù)的IRP包,在其分發(fā)例程中嵌入加密算法完成加密動(dòng)作,而對(duì)于讀數(shù)據(jù)的IRP包,在IRP包的完成例程中嵌入解密算法,對(duì)得到的數(shù)據(jù)進(jìn)行解密處理。 在文件系統(tǒng)驅(qū)動(dòng)層進(jìn)行加密處理,就是驅(qū)動(dòng)層的透明加解密技術(shù)。在正常的Windows NT系統(tǒng)上多出了一個(gè)加密單元,這個(gè)加密單元主要處理文件系統(tǒng)的一些操作,進(jìn)行

38、加解密。微軟的 NTFS的EFS 就是一個(gè)這樣的系統(tǒng),因?yàn)槲募到y(tǒng)擁有以文件或目錄的粒度訪問(wèn)文件的能力,所以加密文件系統(tǒng)能夠靈活的控制加密的范圍,根據(jù)特定的文件類型判斷是否進(jìn)行加密和解密。但是微軟的這個(gè)系統(tǒng)只能在NTFS文件系統(tǒng)基礎(chǔ)上的,不支持FAT和NTFS的較低版本,不具有系統(tǒng)通用性。并且 EFS 是微軟自己的產(chǎn)品,而對(duì)于第三方來(lái)說(shuō),在很多驅(qū)動(dòng)程序沒(méi)有文檔化的情況下,開(kāi)發(fā)這樣的一個(gè)透明加解密的難度可想而知。并且驅(qū)動(dòng)層程序的設(shè)計(jì)本身就很復(fù)雜,所以在本文中,并沒(méi)有采用這種透明加解密的方法。 寫(xiě)數(shù)據(jù)加密的實(shí)現(xiàn):在用戶寫(xiě)受保護(hù)的文件時(shí),文件加解密客戶端能透明地對(duì)文件寫(xiě)入的內(nèi)容進(jìn)行加密。加密文件判別

39、模 塊判別出此文件為受保護(hù)文件后,將密鑰傳遞給加解密過(guò)濾驅(qū)動(dòng),并由過(guò)濾驅(qū)動(dòng)完成寫(xiě)操作。為了使過(guò)濾驅(qū)動(dòng)能夠加密對(duì)文件的寫(xiě)操作,需要攔截IRPMJWRITE和IRPMJDEVICECONTROL兩種IRP。當(dāng)應(yīng)用層進(jìn)程調(diào)用API:DeviceIntrol時(shí),向系統(tǒng)發(fā)出IRPMJDEVICECONTROL,過(guò)濾驅(qū)動(dòng)可以通過(guò)處理此IRP獲得傳遞給驅(qū)動(dòng)的加密密鑰,進(jìn)而在攔截IRPMJWRITE的例程中進(jìn)行加密。 下面將分別介紹這兩個(gè)例程的實(shí)現(xiàn)。 (1)處理IRPMJDEVICECONTROL例程。 首先獲得應(yīng)用層程序在1RP中攜帶的輸人數(shù)據(jù)其操作代碼,如果攜帶了傳遞密鑰的操作代碼,例程將存儲(chǔ)密鑰,并直接

40、完成此IRP,否則將IRP交給底層驅(qū)動(dòng)處理。 偽代碼如下: NTSrATUS EneryptDeviceControl(IN PDEVICEOBJECT De, viceObiectIN PIRP Irp) PVOID inputBufer; ULONG inputBufferLength; Irp一>loStatusSmtus=STATUSSUCCESS; Irp一>loStamsInformation=O: icntrolCode=irpStack一>ParametersDevicelc2ontro1IoControlCode; inputBufer=Irp一>As

41、sociaredlrpSystemBufer; inputBuferLength=irpStack一>ParametersDeviceloContro1InputBufferLength; if(icControlCode=INPUTKEY) SetKey(inputBuffer);將輸入的加密密鑰保存起來(lái) IoCompleteRequest(Irp,IONOINCREMENT);完成此IRP Return STATUSSUCCESS: 接下來(lái)將1RP繼續(xù)下發(fā)傳遞給下層的驅(qū)動(dòng)處理 (2)處理IRPMJWRITE例程。 需要區(qū)分IRI 攜帶數(shù)據(jù)的兩種方式,由MDL結(jié)構(gòu)指定或直接包含數(shù)據(jù)的指

42、針。 其實(shí)現(xiàn)的偽代碼如下: NTSTATUS EncryptWrite(IN PDEVI("一OBJECF)e ce( ect,lNPIRPIrp) 完成初始化的工作 PIOSTACKLOCATION irpsp=loGetCurrentIrl5tackLocation (Irp); switch(irpsp一>MinorFunction) case IRPMNN0RMAI: ifIrp一>MdlAddmss!=NULL) 4斷寫(xiě)的數(shù)據(jù)是否是在MDL結(jié)構(gòu)中 產(chǎn)生一個(gè)新的MDL結(jié)構(gòu),將其指向一個(gè)加密后的數(shù)據(jù)庫(kù),并將Irp一>MdlAddress指針指向新的MDL結(jié)構(gòu)

43、else buffer=Irp一>UserBuffer; Encrypt(buffer,GetKey();力密所寫(xiě)的數(shù)據(jù) i 供它的必要操作 讀數(shù)據(jù)解密的實(shí)現(xiàn) :在用戶讀受保護(hù)的文件時(shí),文件加解密客戶端能透明地對(duì)讀出的原始內(nèi)容進(jìn)行解密。加密文件判別器判別出此文件為受保護(hù)文件后,將密鑰傳遞給加解密過(guò)濾驅(qū)動(dòng),并由過(guò)濾驅(qū)動(dòng)完成讀操作,和寫(xiě)操作類似,需要攔截IRPMJWRITE和IRP一一DEVIC,E CONTROL兩種IRP。IRPMJDEVICECONTROl 例程的用途和實(shí)現(xiàn)方式和加密時(shí)相同。過(guò)濾驅(qū)動(dòng)攔截 IRPMJREAD的例程中進(jìn)行加密。IRPIvtJREAD 例程的實(shí)現(xiàn)需要利用完成

44、例程,在完成例程中完成加解密過(guò)程。 下面將介紹這個(gè)例程的實(shí)現(xiàn)。 NTSrATUS EncryptWrite(IN PDEVICEOBJECT DeviceOt,iec。 IN PIRPIrp) 初始化操作 KdnitializeEvent(&waitEvent,Notifica,ionEvent,F(xiàn)ALSE); loCopyCurrentIrpStackk ati_ToNext(1rp); loSetCompletionRoutine(hP,EncryptReadCompletion, &waitEvem,TRUE,TRUE,TRUE);設(shè)置完成例程 status=loCallDriver(devExt一>AttachedToDeviceObject,Irp); if(STATUSPENDI

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論