付存君
(重慶師范大學(xué) 涉外商貿(mào)學(xué)院,重慶 401520)
基于Windows內(nèi)核過濾驅(qū)動(dòng)的透明加密文件系統(tǒng)的設(shè)計(jì)
付存君
(重慶師范大學(xué) 涉外商貿(mào)學(xué)院,重慶 401520)
摘要:為解決日益突出的信息安全問題,設(shè)計(jì)并實(shí)現(xiàn)了一種文件過濾驅(qū)動(dòng)技術(shù)文件透明加密系統(tǒng)。以Windows操作系統(tǒng)為平臺(tái),以Windows內(nèi)核文件過濾驅(qū)動(dòng)為核心技術(shù)手段,密切結(jié)合Windows內(nèi)核工作原理,實(shí)現(xiàn)文件的透明加密。旨在設(shè)計(jì)透明加密文件系統(tǒng)并且致力于實(shí)際平臺(tái)的研究與開發(fā)。通過實(shí)驗(yàn)測試,加密效果良好。
關(guān)鍵詞:透明加密;過濾驅(qū)動(dòng);文件系統(tǒng)
作者簡介:付存君(1987-),男,重慶巴南人,碩士,助教,研究方向:人工智能。
中圖分類號(hào):TP393.08
文獻(xiàn)標(biāo)識(shí)碼:識(shí)碼:A
文章編號(hào):編號(hào):1008-6390(2015)03-0171-03
所謂的透明加密技術(shù),主要是指在操作系統(tǒng)的文件系統(tǒng)上加以工作的一個(gè)軟件,它能夠向操作系統(tǒng)提供透明的、實(shí)時(shí)的、動(dòng)態(tài)的數(shù)據(jù)加密。
網(wǎng)絡(luò)入侵的不斷深入,使得人們對(duì)安全技術(shù)的要求不斷提高。傳統(tǒng)的定制鉤子程序加密文件在很大程度上不能滿足用戶的需求。因此,基于內(nèi)核的過濾驅(qū)動(dòng)加密系統(tǒng)成為研究熱點(diǎn),本研究采用win7平臺(tái),定制windows內(nèi)核級(jí)的過濾驅(qū)動(dòng)透明加密文件系統(tǒng),以期提高系統(tǒng)安全性。
一、設(shè)備驅(qū)動(dòng)程序簡介和基本結(jié)構(gòu)
驅(qū)動(dòng)程序的開發(fā)和一般的應(yīng)用程序開發(fā)有很大的不同。一般在開發(fā)時(shí)采用的工具Windows DDK(Device Develop Kit),驅(qū)動(dòng)程序通常不會(huì)打印出字符,這需要使用特殊的調(diào)試工具,DbgView和WinDbg是調(diào)試驅(qū)動(dòng)程序的極方便的工具。
驅(qū)動(dòng)程序運(yùn)行一般都是在內(nèi)核的模式,有大量例程構(gòu)成,一個(gè)被動(dòng)的組件。操作系統(tǒng)可以調(diào)用其中提供的例程。當(dāng)用戶模式的程序向操作系統(tǒng)發(fā)出一個(gè)請(qǐng)求之后,windows系統(tǒng)能夠接受該請(qǐng)求,然后將請(qǐng)求從用戶模式發(fā)送到內(nèi)核模式的程序。此時(shí)可以調(diào)用相關(guān)的驅(qū)動(dòng)程序例程提供服務(wù)。
設(shè)備驅(qū)動(dòng)程序的基本結(jié)構(gòu)見圖1。
圖1 設(shè)備驅(qū)動(dòng)程序的基本結(jié)構(gòu)
二、用戶加密模塊的研究
(一)加密簡介
加密模塊的性能影響著透明加密文件系統(tǒng)的安全性,如何制定用戶加密策略、選擇加密算法以及密鑰管理很大程度影響加密系統(tǒng)的安全性和整體性。加密算法分為對(duì)稱加密算法和非對(duì)稱加密算法兩大類,對(duì)稱加密算法主要有數(shù)據(jù)加密標(biāo)準(zhǔn),高級(jí)加密標(biāo)準(zhǔn),其優(yōu)點(diǎn)是加密信息速度快,缺點(diǎn)是容易被破解。目前較為安全的算法是AES-256,即密鑰為256位的高級(jí)加密標(biāo)準(zhǔn)。非對(duì)稱加密算法使用最廣的是RSA算法,其優(yōu)點(diǎn)是安全性高不易被破解,在設(shè)計(jì)系統(tǒng)時(shí),需要考慮各種加密算法的優(yōu)缺點(diǎn)和系統(tǒng)的需要,選擇改進(jìn)的RSA加密算法。
(二)改進(jìn)的RSA加密算法
加解密速度慢是RSA算法顯著的缺陷。設(shè)m為明文m=(m1,m2,…,mk),相應(yīng)c為密文c=(c1,c2,…,ck),則按照RSA算法,有
① 加密運(yùn)算
ci=miemodn,i=1,2,…,k
②解密運(yùn)算
mi=cidmodn,i=1,2,…,k
由上可得,加、解密都需要執(zhí)行k次冪剩余運(yùn)算。
為了提高運(yùn)算速度,也就是要盡可能地減少冪剩余運(yùn)算的次數(shù),可以用加法剩余運(yùn)算。
改進(jìn)的RSA 算法如下:
①加密運(yùn)算
cj=mj+mj-1(modn),j=k,k-1,…,2
c1=m1e(modn)
②解密運(yùn)算
m1=c1d(modn)
mj=cj-mj-1 (modn),j=2,3,…,k
三、過濾驅(qū)動(dòng)的透明加密文件系統(tǒng)實(shí)現(xiàn)
(一)內(nèi)核層與應(yīng)用層交互的設(shè)計(jì)與實(shí)現(xiàn)
過濾驅(qū)動(dòng)程序工作在內(nèi)核狀態(tài),然而應(yīng)用程序工作在用戶態(tài),因此,實(shí)現(xiàn)過濾驅(qū)動(dòng)的透明加密文件系統(tǒng)的部分功能需要在兩者之間進(jìn)行交互。其中主要包含兩個(gè)問題,一是用戶層和內(nèi)核層之間的通信交互,二是用戶層和內(nèi)核層之間共享數(shù)據(jù)。
1.內(nèi)核層與應(yīng)用層通信的設(shè)計(jì)與實(shí)現(xiàn)
設(shè)計(jì)的過濾驅(qū)動(dòng)程序主要是對(duì)文件進(jìn)行加密和解密。為了方便用戶使用,需要有圖形化的應(yīng)用程序。這就造成了應(yīng)用層和內(nèi)核之間進(jìn)行通信的問題。在兩者之間進(jìn)行通信時(shí),可以使用讀、寫函數(shù)。Windows提供的DDK有為內(nèi)核和應(yīng)用層通信提供API,從而能較為方便的進(jìn)行二者通信,應(yīng)用程序可以發(fā)送DeviceIoControl的請(qǐng)求,這種請(qǐng)求是應(yīng)用層和驅(qū)動(dòng)程序交互的必要手段。
通過應(yīng)用層實(shí)現(xiàn)對(duì)驅(qū)動(dòng)層的通信流程見圖2。
2.內(nèi)核層與應(yīng)用層之間數(shù)據(jù)共享的設(shè)計(jì)與實(shí)現(xiàn)
系統(tǒng)設(shè)計(jì)過程中的加密算法實(shí)現(xiàn)在USBKey中,在加解密過程中,為了達(dá)到調(diào)用USBKey內(nèi)部的加解密機(jī)制,需要調(diào)用USBkey提供的相關(guān)接口??墒荱SBKey具有的接口都只是供應(yīng)用層調(diào)用的,而且加解密的時(shí)機(jī)和具體等待解密的數(shù)據(jù)需要由內(nèi)核驅(qū)動(dòng)得到,因此,在應(yīng)用層和內(nèi)核層之間就需要一個(gè)數(shù)據(jù)共享良好的機(jī)制。一般采用在內(nèi)核中申請(qǐng)一塊內(nèi)存區(qū)域作為共享空間,實(shí)現(xiàn)應(yīng)用層和內(nèi)核層之間的數(shù)據(jù)共享通道。
圖2 應(yīng)用層向驅(qū)動(dòng)層通信流程圖
實(shí)現(xiàn)方式見圖3。
圖3 通過共享內(nèi)區(qū)實(shí)現(xiàn)數(shù)據(jù)在解密流程中的傳遞
上述實(shí)現(xiàn)方式是可以作為對(duì)應(yīng)用層加密上的回調(diào),在此過程中沒有采用真正的回調(diào)機(jī)制,因此被調(diào)用者和調(diào)用者之間有必要建立同步機(jī)制。該機(jī)制的建立是可以通過創(chuàng)建應(yīng)用層和驅(qū)動(dòng)程序都能調(diào)用的事件對(duì)象來實(shí)現(xiàn)(見圖4)。
(二)代碼實(shí)現(xiàn)
得到被操作的文件名字,打印相關(guān)操作信息,然后下發(fā)IRP到底層驅(qū)動(dòng)。在下發(fā)IRP到底層驅(qū)動(dòng)處理前,本層驅(qū)動(dòng)必須負(fù)責(zé)設(shè)置下層IO堆棧的內(nèi)容。這樣下一層驅(qū)動(dòng)調(diào)用IoGetCurrentIrpStackLocation()時(shí)能得到相應(yīng)的數(shù)據(jù)。設(shè)置下層IO堆棧的內(nèi)容,一般用兩個(gè)函數(shù)來實(shí)現(xiàn):IoCopyCurrentIrpStackLocationToNext(Irp)
圖4 通過事件對(duì)象實(shí)現(xiàn)應(yīng)用層與內(nèi)核層流程圖
此函數(shù)一般用在本驅(qū)動(dòng)設(shè)置了完成例程時(shí)調(diào)用,把本層IO _STACK_LOCATION 中的參數(shù)copy到下層,但與完成例程相關(guān)的參數(shù)信息例外。因?yàn)楸掘?qū)動(dòng)設(shè)置的完成例程只對(duì)本層驅(qū)動(dòng)有效。IoSkipCurrentIrpStackLocationToNext(Irp)此函數(shù)的作用是直接把本層驅(qū)動(dòng)IO堆棧的內(nèi)容設(shè)置為下層驅(qū)動(dòng)IO堆棧指針的指向。因兩層驅(qū)動(dòng)IO堆棧的內(nèi)容完全一致,省卻copy過程。而在Filemon的處理中,它用了一個(gè)特別的辦法,沒有調(diào)用此兩個(gè)函數(shù),F(xiàn)ilemonHookRoutine函數(shù)體里面有三句代碼:
PIO_STACK_LOCATIONcurrentIrpStack = IoGetCurrentIrpStackLocation(Irp);
PIO_STACK_LOCATIONnextIrpStack = IoGetNextIrpStackLocation(Irp);
*nextIrpStack = *currentIrpStack;//此步設(shè)置了下層驅(qū)動(dòng)的IO_STACK_LOCATION
直接設(shè)置了下層驅(qū)動(dòng)IO堆棧的值。
在FilemonHookRoutine函數(shù)里,用一個(gè)宏實(shí)現(xiàn)了復(fù)雜的獲得攔截到的被操作文件的名字。
(三)功能測試
基于windows系統(tǒng)的透明加密文件系統(tǒng)通過調(diào)試運(yùn)行,已經(jīng)成功加載到win7上??梢詫?duì)圖片、txt、doc等文件進(jìn)行透明加密。通過使用WinHex軟件查看相同文件加密前數(shù)據(jù)以及加密后數(shù)據(jù)并進(jìn)行對(duì)比,加密圖片效果如圖5所示,加密word文檔效果如圖6所示。
圖5(a) 加密前圖片
圖5(b) 加密后圖片
圖6(a) 加密前明文
圖6(b) 加密后密文
四、結(jié)語
研究了在win7系統(tǒng)平臺(tái)的過濾驅(qū)動(dòng)的透明加密文件系統(tǒng),以Windows內(nèi)核文件過濾驅(qū)動(dòng)為核心技術(shù)手段,密切結(jié)合Windows內(nèi)核工作原理,實(shí)現(xiàn)了應(yīng)用層和內(nèi)核層之間的通信,實(shí)現(xiàn)文件的透明加密。實(shí)驗(yàn)證明,這一系統(tǒng)加密效果良好,具有實(shí)用價(jià)值。
參考文獻(xiàn):
[1]鄒家銀,李培峰.透明加解密系統(tǒng)原理與實(shí)現(xiàn)分析[J].計(jì)算機(jī)與現(xiàn)代化,2012(03):85-88.
[2]高漢軍,寇鵬,王麗娜,等.面向虛擬化平臺(tái)的透明加密系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].武漢大學(xué)學(xué)報(bào):理學(xué)版,2010(2):223-226.
[3]龍騰飛,李忠福,李艷芳,等.基于文件過濾驅(qū)動(dòng)的透明加密技術(shù)[J].保密科學(xué)技術(shù),2013(10):31-34.
[4]王全民,何明,苗雨.基于微過濾驅(qū)動(dòng)的文件透明加解密系統(tǒng)的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)安全,2014(3):28-32.
[5]郝榮彬.基于角色和透明加解密技術(shù)的文件訪問控制[J].電腦知識(shí)與技術(shù),2013(28):6259-6261.
[6]金彪,熊金波,姚志強(qiáng),等.基于身份的受控文檔透明加解密方案[J].計(jì)算機(jī)應(yīng)用,2013(11):3235-3238.
[7]李梅.兩種算法的理論分析[J].重慶工商大學(xué)學(xué)報(bào):自然科學(xué)版,2014(5):81-83.
[責(zé)任編輯王南山]