非主動加密技術

網(wǎng)絡信息化的飛速發(fā)展加快了信息的共享和交流,人們對安全方面的要求也越來越高,信息安全也越來越重要。加密作為提高信息安全的一種手段,被政府、企業(yè)和個人廣泛的采用。美國聯(lián)邦調查局和中國國家信息安全評測認證中心的調查結果均顯示,政府和企業(yè)因信息被竊取所造成的損失超過病毒破壞和黑客攻擊所造成的損失,超過70%以上的安全威脅來自泄密和內部人員犯罪。

如何更有效地防范有目的的信息竊取,全方位地對信息進行安全保護則是各個企業(yè)和單位所面臨的非常重要的問題,非主動加密技術是一種加解密不由信息使用者決定,在系統(tǒng)底層自動實現(xiàn)對信息加密解密的技術,它對于信息使用者來說是透明的。Windows NT內核的操作系統(tǒng)雖然也提供加密方法如NTFS的EFS(Encrypted File System,加密文件系統(tǒng)),但是卻無法有效地避免內部人員泄密,還必須專門對文件系統(tǒng)進行驅動開發(fā)。本文首先說明了非主動加密系統(tǒng)模型,接著介紹了WindowsI/0管理器以及驅動開發(fā)的方法原理,最后給出文件加密解密核心模塊的設計。

一、Windows I/O管理器與驅動開發(fā)

Windows NT內核是基于對象的,驅動程序和內核例程使用的許多數(shù)據(jù)結構都有公共的特征,這些特征由對象管理器集中管理,整個I/O系統(tǒng)是由“包”驅動的,大多數(shù)I/O請求用I/O請求包IRP表示,它從一個I/O系統(tǒng)組件移動到另一個I/O系統(tǒng)組件,I/O管理器創(chuàng)建代表每個I/O操作的IRP,傳遞IRP給正確的驅動程序,并且當此I/O操作完成后處理這個數(shù)據(jù)包;相反,驅動程序接受IRP,執(zhí)行IRP指定的操作并且在完成操作后把IRP返回I/O管理器,或為下一步的處理而通過I/O管理器把它送到另一個驅動程序。I/O管理器和設備驅動程序使用IRP來管理I/O操作,首先,某個內核部件創(chuàng)建一個IRP,該IRP可以讓設備執(zhí)行一個操作,向驅動程序發(fā)送一個命令或者響應驅動程序詢問某些信息的請求;然后I/O管理器把這個IRP發(fā)送到驅動程序的輸出例程上,一般來說,每個驅動程序例程僅執(zhí)行IRP指定的一部分工作,然后返回I/O管理器;最后,某個驅動程序完成該IRP,I/O管理器刪除該IRP并向原始請求者報告結束狀態(tài)。每個影響到設備的操作都使用IRP,通常IRP先被送到設備堆棧的最上層驅動程序,然后逐漸過濾到下面的驅動程序,每一層驅動程序都可以決定如何處理IRP,有時,驅動程序僅僅是向管理器定義了有序的工作框架,在該框架里,I/O請求被提交給設備驅動程序。

Windows NT驅動程序支持分層的設計模型,驅動程序的分層是根據(jù)設備對象堆棧來完成的,處于堆棧最底層的設備對象稱為物理設備對象,簡稱為PDO( Physical Device Object),與其對應的驅動程序稱為總線驅動程序。在設備對象堆棧的中間某處有一個對象稱為功能設備對象,簡稱FDO( Functional De-vice Object),其對應的驅動程序稱為功能驅動程序。在FDO的上面和下面還會有一些過濾器設備對象。位于FDO上面的過下層傳遞該IRP。有時,驅動程序直接處理完該IRP,不再向下傳遞。有時,驅動程序既處理了IRP,又把IRP傳遞下去。這取決于設備以及IRP所攜帶的內容。處于功能驅動程序之上的過濾器驅動程序稱為上層過濾器,其對應的驅動程序稱為上層過濾器驅動程序;位于FDO下面(但仍在PDO之上)的過濾器設備對象稱為下層過濾器,其對應的驅動程序稱為下層過濾器驅動程序。

二、非主動加密系統(tǒng)模型

技術人員在進入相應的應用軟件時,必須通過服務器的實時權限控制系統(tǒng)進行身份認證,取得相應的操作權限。在通過應用軟件進行設計或者文檔的建立、保存后,系統(tǒng)捕獲到該操作,自動在后臺進行加密處理,將明文轉換為密文存盤,當取得相應的權限而需要打開文件時,自動進行解密,將明文信息傳遞給應用程序。在這個過程中加密和解密對用戶是透明的,保存在磁盤的文件都是密文,如圖1所示。

非主動加密技術

在加密算法上,我們采用對稱密鑰算法,這是一種加密和解密都使用相同密鑰的加密算法,不同的密鑰可以產生不同的加密結果,速度相對比較快,適合大文件和數(shù)據(jù)的加密解密。系統(tǒng)的密鑰放在服務器上,當技術人員登陸文件通過身份認證時,服務器會根據(jù)不同的人員和對應的IP給出密鑰(當技術人員需要移動電腦改變IP進入文件時,必須進行單獨說明,否則打開的是密文),ID與IP不匹配不予放行,ID與IP不匹配但又是合法用戶時,須向管理員單獨說明,否則按非法用戶處理。

服務器的全維審查跟蹤還對技術人員復制文件、E - Mail等進行跟蹤,對未授權的復制和郵件等非法操作進行限制和攔截。用戶的密鑰實行服務器內部局域網(wǎng)統(tǒng)一管理,離開內部網(wǎng)絡無法對非法所得的密文進行解密,短期內也無法對脫離系統(tǒng)管理的磁盤文件解密。技術人員需要和外部人員通過內部局域網(wǎng)LAN實現(xiàn),內部管理如圖2所示。

非主動加密技術

在非主動加密中,加密算法采用對稱密碼算法中的DES(Data Encryption Standard),DES密碼算法是一種分組密碼算法,在數(shù)據(jù)加密領域廣泛地被采用,它經受住了長期的各種密碼分析攻擊,仍保持較好的安全性。它使用56位密鑰將64位明文轉換為64位的密文,密鑰長度為64位,其中有8位是奇偶校驗位。在DES算法中,只使用了標準的算術和邏輯運算,其加密和解密速度都很快。

三、透明加密模塊的設計

非主動加密技術系統(tǒng)開發(fā)主要分兩個部分,一部分是用戶態(tài)的開發(fā),這部分開發(fā)相對比較容易,主要是操作界面的設計,此外還包括實時權限控制、身份認證、全維審查跟蹤,工具采用VC++6.0;另一部分是非主動加密部分,為系統(tǒng)核心態(tài)開發(fā),屬于文件系統(tǒng)過濾驅動開發(fā),采用DDK編程實現(xiàn)。全系統(tǒng)的關鍵和重點是核心態(tài)的開發(fā),它直接影響到系統(tǒng)的可靠性、安全性和健壯性,是整個系統(tǒng)性能的關鍵。

下面就給出一個在Windows下具體實現(xiàn)非主動加解密的過程。

非主動加密文件系統(tǒng)過濾驅動屬于上層過濾器,如圖3所示。

非主動加密技術

與其它驅動程序一樣,過濾器驅動也包括Driv-erEntry例程。在DriverEntry里,首先調用函數(shù)ZwCreateFile打開卷根目錄,調用ObReferenceOb-jectByHandle獲得文件句柄,查找它引用的文件對象, ntStatus = ObReferenceObjectByHandle ( ntFileHan-dle, FILE READ DATA, NULL, KemeIMode,8zfileObject, NULL);用fileSysDevice=IoGetRelatedDe-,riceObject( fileObject);取得與之相關的設備對象,調用IoCreateDevice函數(shù)創(chuàng)建一個附屬于文件系統(tǒng)鉤子設備對象,指定過濾驅動程序。調用topAttachDe-rrice=IoAttachDeviceToDeviceStack( hookDevice, fileSys-Device);附屬到該設備,最后開始接收已掛鉤的對象的IRP。這樣,經過驅動程序發(fā)送到HAL的所有請求都會經過過濾器,實現(xiàn)加密解密是在過濾器中通過攔截主功能碼IRP.MJ—READ和IRP—MJ—WRITE來實現(xiàn)的,當加密時,首先保存系統(tǒng)MDL地址,建立內存入口指針,在非分頁內存中分配一段與待寫數(shù)據(jù)大小相同的內存,CompletionCtx=ExAIIo-
cateFromNPagedLookasideList(&gReadWriteCompletionCtxLookAsideList); MyBuffer=ExAllocatePooIWithTag( NonPagedPooI,hpSp 一>Parameters. Write. Length,SFLT—POOL TAG);建立這段內存描述符MDL,更新IRP結構中的Irp一>MdLAddress,使其指向新建立的MDL,

Irp一>MdlAddress=IoAllocateMdl( MyBuffer, Irp-Sp 一>Parameters. Write. Length, FALSE, TRUE,NULL);

拷貝數(shù)據(jù)

RtICopyMemory(MyBtfffer, OldBuffer, Length);

調用加密程序

Encrypt(IrpSp一>FileObject, MyBLd'fer, Length, Irp-Sp一>Parameters. Write. ByteOffset);

設置完成例程

IoSetCompletionRoutine(hp, WriteCompletionRoutine,CompletionCtx, TRUE, TRUE, TRUE);

釋放分配的內存

ExFreeToNPagedLookasideList(&gReadWrite Com-pletionCtxLookAsideList, CompletionCtx);

解密過程與此類似。此外,還需調用RtlInitUni-codeString設置設備名,調用IoCreateDevice函數(shù)創(chuàng)建用于GUI通信的設備,調用IoCreateSymbolicLink創(chuàng)建符號連接,以使設備對象能被Win32應用程序訪問。

小知識之Windows NTMicrosoft Windows NT(New Technology)是Microsoft在1993年推出的面向工作站、網(wǎng)絡服務器和大型計算機的網(wǎng)絡操作系統(tǒng),也可做PC操作系統(tǒng)。