淺析文件透明加密技術(shù)

計(jì)算機(jī)已成為現(xiàn)代人類生活、辦公等必不可少的設(shè)備之一。我們會(huì)把重要信息以文件的形式存儲(chǔ)在計(jì)算機(jī)中,所以就需要對(duì)這些文件進(jìn)行加密保護(hù)。目前的加密方法很多,但大部分都是用戶態(tài)的密碼加密,操作繁瑣且加密效果不理想。本文介紹了兩種區(qū)別于前者的透明加密方法:鉤子透明加密和過(guò)濾驅(qū)動(dòng)透明加密,并對(duì)梁兩種方法進(jìn)行了比較。

一 文件透明加密技術(shù)簡(jiǎn)介

文件透明加密技術(shù)是近些年針對(duì)企業(yè)文件保密需求應(yīng)運(yùn)而生的一種文件加密技術(shù),區(qū)別于常見的文件密碼加密。所謂透明,是指對(duì)用戶而言加密解密過(guò)程不會(huì)被察覺(jué),當(dāng)用戶打開或編輯受保護(hù)文件時(shí),系統(tǒng)將自動(dòng)對(duì)未加密的文件進(jìn)行加密,對(duì)已加密的文件解密。文件在硬盤上以密文形式存儲(chǔ),在內(nèi)存中則為明文。一旦改變使用環(huán)境,由于無(wú)法獲得自動(dòng)解密服務(wù)而無(wú)法打開,從而達(dá)到保護(hù)文件內(nèi)容的目的。

透明加密解密技術(shù)是與操作系統(tǒng)緊密結(jié)合的一種技術(shù),Windows允許程序設(shè)計(jì)人員在內(nèi)核和用戶兩個(gè)級(jí)別操作文件。因此,加密進(jìn)程就可以在這兩個(gè)層次截獲文件讀寫操作,嵌入自己的加密算法進(jìn)行加解密,通過(guò)應(yīng)用級(jí)的截獲采用API HOOK(俗稱鉤子)技術(shù),成為鉤子透明加密。內(nèi)核級(jí)采用文件過(guò)濾驅(qū)動(dòng),稱驅(qū)動(dòng)加密。兩者的加密層次如下圖所示。

淺析文件透明加密技術(shù)

 

淺析文件透明加密技術(shù)

1 鉤子透明加密技術(shù)

早期的透明加密的技術(shù)手段大多是通過(guò)API 鉤子技術(shù)進(jìn)行,其工作方式為靜態(tài)加密和重定向,基本思想為鉤子程序攔截到受保護(hù)文件的打開操作,先將已加密的文件拷貝到一個(gè)臨時(shí)目錄中,然后告訴驅(qū)動(dòng)程序把這個(gè)文件隱藏起來(lái),然后解密這個(gè)文件,并將這個(gè)臨時(shí)文件返回給打開文件的進(jìn)程,這樣打開的就是磁盤上的一個(gè)明文文件,用戶程序可以進(jìn)行正常的處理,這里文件是進(jìn)行了整體的拷貝并解密;在文件關(guān)閉時(shí),鉤子攔截到以后,將那個(gè)明文的臨時(shí)文件加密,然后再拷貝回來(lái)覆蓋掉原文件。

簡(jiǎn)單的講,就是打開文件時(shí),將加密文件的副本拷貝到隱蔽位置,然后把這個(gè)文件解密、打開,保存時(shí)再把臨時(shí)文件加密后覆蓋原文件。這種加密實(shí)質(zhì)上是通過(guò)臨時(shí)文件來(lái)實(shí)現(xiàn)的,為了確保明文和密文之間的一致性,必須在每次用戶存盤或者系統(tǒng)自動(dòng)存盤的時(shí)候,對(duì)整個(gè)文件進(jìn)行一次整體加密和并復(fù)制到用戶文件原來(lái)存儲(chǔ)的位置,因此效率較低,且由于在計(jì)算機(jī)上保存了完整的明文文件,只要跟蹤到臨時(shí)文件所在位置即可能泄密,此外,文件在打開和存儲(chǔ)過(guò)程中需要多次復(fù)制,效率損失很大,Hook API 的方式對(duì)于一些程序不能夠完美的支持,兼容性有待考證。

由于文件映射的存在,在應(yīng)用層進(jìn)行動(dòng)態(tài)加密比較困難,雖然原理上有一定的可行性,但是其加密效率、兼容性、可移植性、穩(wěn)定性較之于內(nèi)核層的過(guò)濾驅(qū)動(dòng)加密要差很多,好處在于開發(fā)難度較小, 網(wǎng)絡(luò)操作能力強(qiáng)。

2 過(guò)濾驅(qū)動(dòng)透明加密技術(shù)

2.1 驅(qū)動(dòng)技術(shù)簡(jiǎn)介

過(guò)濾驅(qū)動(dòng)加密技術(shù)是基于Win2dows 的文件系統(tǒng)過(guò)濾驅(qū)動(dòng)( IFS) 技術(shù),工作在Windows 的內(nèi)核層。它是目前炙手可熱的一門技術(shù),其特點(diǎn)是技術(shù)門檻較高,需要深入理解Win2dows 系統(tǒng)內(nèi)核,開發(fā)過(guò)程中稍有不慎就會(huì)破壞系統(tǒng)內(nèi)核,因此核心技術(shù)僅被少數(shù)幾家實(shí)力雄厚的公司所掌握。

文件過(guò)濾驅(qū)動(dòng)是把文件作為一種設(shè)備來(lái)處理的一種虛擬驅(qū)動(dòng),Windows NT 系統(tǒng)內(nèi)核采用堆棧式可擴(kuò)展驅(qū)動(dòng)模型[1 ] ,原則上可以在任何一個(gè)層次上加載自己的過(guò)濾驅(qū)動(dòng),但是加載的層次不同,開發(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)域都有著非常廣泛的應(yīng)用。

過(guò)濾驅(qū)動(dòng)中幾種非常重要的概念包括驅(qū)動(dòng)對(duì)象、設(shè)備對(duì)象、設(shè)備堆棧、I/ O 堆棧,驅(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è)備, I/ O 棧用來(lái)記錄穿越設(shè)備堆棧時(shí)的操作屬性, 操作的對(duì)象為IRP ( I/ O Request Pack2age) , IRP 包由系統(tǒng)的某個(gè)組件創(chuàng)建,類似于Windows應(yīng)用程序的“消息”概念,要處理某種數(shù)據(jù)只需要把IRP 包傳送到相應(yīng)驅(qū)動(dòng)的相應(yīng)派遣函數(shù)中。

2.2 加密的基本思想

在Windows NT 內(nèi)核操作系統(tǒng)中,應(yīng)用程序的一次數(shù)據(jù)請(qǐng)求的過(guò)程如圖2 所示[4 ] :只有在無(wú)緩存或者FAST I/ O 不可用的情況下才在硬盤上讀取數(shù)據(jù),因此只用攔截IRP —> Flags 為IRP- NOCACHE(表示I/O 請(qǐng)求從存儲(chǔ)的媒介而不是高速緩存中讀取數(shù)據(jù)) 、IRP- PAGING- IO(表示此時(shí)執(zhí)行內(nèi)存頁(yè)的I/ O 操作)和IRP- SYNCHRONOUS- PAGING- IO(表示內(nèi)存頁(yè)需要同步更新,此標(biāo)志也是由內(nèi)存管理器使用) 的數(shù)據(jù)包,對(duì)于寫數(shù)據(jù)的IRP 包,在其分發(fā)例程中嵌入加密算法完成加密動(dòng)作,而對(duì)于讀數(shù)據(jù)的IRP 包,在IRP包的完成例程中嵌入解密算法,對(duì)得到的數(shù)據(jù)進(jìn)行解密處理。

2.3 寫數(shù)據(jù)加密的實(shí)現(xiàn)

在用戶寫受保護(hù)的文件時(shí),文件加解密客戶端能透明地對(duì)文件寫入的內(nèi)容進(jìn)行加密。加密文件判別模塊判別出此文件為受保護(hù)文件后,將密鑰傳遞給加解密過(guò)濾驅(qū)動(dòng),并由過(guò)濾驅(qū)動(dòng)完成寫操作。為了使過(guò)濾驅(qū)動(dòng)能夠加密對(duì)文件的寫操作,需要攔截IRP- MJ -WRITE 和IRP- MJ - DEVICE- CONTROL 兩種IRP。當(dāng)應(yīng)用層進(jìn)程調(diào)用API :DeviceIOControl 時(shí),向系統(tǒng)發(fā)出IRP- MJ - DEVICE- CONTROL ,過(guò)濾驅(qū)動(dòng)可以通過(guò)處理此IRP 獲得傳遞給驅(qū)動(dòng)的加密密鑰,進(jìn)而在攔截IRP- MJ - WRITE 的例程中進(jìn)行加密。

2.4 讀數(shù)據(jù)解密的實(shí)現(xiàn)

在用戶讀受保護(hù)的文件時(shí),文件加解密客戶端能透明地對(duì)讀出的原始內(nèi)容進(jìn)行解密。加密文件判別器判別出此文件為受保護(hù)文件后,將密鑰傳遞給加解密過(guò)濾驅(qū)動(dòng),并由過(guò)濾驅(qū)動(dòng)完成讀操作。和寫操作類似,需要攔截IRP- MJ - WRITE 和IRP- MJ - DEVICECONTROL兩種IRP。IRP- MJ - DEVICE- CONTROL例程的用途和實(shí)現(xiàn)方式和加密時(shí)相同。過(guò)濾驅(qū)動(dòng)攔截IRP- MJ - READ 的例程中進(jìn)行加密。IRP- MJ - READ例程的實(shí)現(xiàn)需要利用完成例程,在完成例程中完成加解密過(guò)程。

二 兩種加密技術(shù)比較

以上兩種加密技術(shù)由于工作在不同的層面,從應(yīng)用效果、開發(fā)難度上各有特點(diǎn)。表1 從各方面進(jìn)行了簡(jiǎn)單比較。

淺析文件透明加密技術(shù)

三 小結(jié)

鉤子透明加密和過(guò)濾驅(qū)動(dòng)加密是目前兩種主流的透明加密方法,二者的區(qū)別在于截獲文件操作的位置不同,比較而言過(guò)濾驅(qū)動(dòng)加密效果更好,但是實(shí)現(xiàn)的難度也相當(dāng)?shù)拇?在安全領(lǐng)域具有很高的研究?jī)r(jià)值和實(shí)用價(jià)值。