喻崇仁,牛中盈,楊嘉偉,田 鵬
(1.中國航天科工集團第二研究院七〇六所,北京100854;2.中國航天科工集團第二研究院院科技委,北京100854)
當前,容災系統利用遠程復制技術將生產中心數據備份到異地備份中心,有效確保了業務數據的抗毀性,由于數據是以明文形式存儲,并且生產中心通過廣域網發送給異地備份中心的數據也是明文,這就給不法分子竊取機密數據創造了條件[1,2]。
本文設計了一種面向容災的堆疊式數據透明加密框架,采用虛擬化技術,結合堆疊式文件系統分層開發思想,在系統容災層之上構建了數據加密層,并在數據加密層虛擬設備驅動程序中完成了對數據自動加解密操作,實現了容災系統中數據的加密存儲和在網絡中加密傳輸,有效保護了數據的機密性。設計了一個數據并行加密機制p-dmcrypt(parallel dm-crypt),在驅動程序中實現了對數據并行加密處理,有效提高了數據整體加密速率。
從加密實現的層次來看,當前存儲系統中數據加密方式主要有應用程序層加密、存儲介質層加密、文件系統層加密和設備驅動層加密。
應用程序層加密是通過加密工具軟件對數據進行加密。該方式對用戶不透明,進行加解密操作時都需要用戶手動輸入密鑰,使用起來較為繁瑣,用戶一旦忘記密鑰,被加密的文件將永遠無法讀取。此外,在數據加密過程中系統產生的緩存文件內包含了大量明文數據,容易被攻擊者竊取。
存儲介質層加密是基于硬盤扇區的加密,對整個硬盤所有bit位都進行加密。該方式能夠提供最高安全等級并且對用戶透明,但由于加密數據量大,造成系統性能開銷大,不適用于需要進行大規模數據訪問的存儲系統。
文件系統層加密是將加解密功能集成到文件系統中,開發加密文件系統。該方式支持文件粒度的加密,能夠指定對哪些文件加密,對哪些文件不加密,并且對文件系統包括元數據在內的所有信息進行加密[3],具有很高的安全性。但該方式通常是在修改固定版本的文件系統或操作系統源碼基礎上實現的,如TCFS修改了NFS內核代碼,且僅適用Linux 2.2.17及以前的操作系統版本,NCryptfs修改了Linux內核中的目錄緩存和進程管理程序[4],TransCrypt修改了底層文件系統的超級塊結構并向內核中加入了對非對稱密碼算法的支持[5]等,因此該方式具有可移植性差的弊端。
設備驅動層加密是在磁盤空間中劃分出一部分空間作為虛擬分區,該分區只有具有合法權限的用戶才能進行訪問,虛擬分區的驅動程序在處理I/O 請求過程中利用加解密模塊對請求數據進行透明加/解密操作。本文就是在設備驅動層對數據進行加解密操作,該方式雖然不能指定對哪些數據不進行加密處理,但在系統的性能和安全性上得到了很好的平衡,相對于開發加密文件系統,該方式實現起來較為容易并且可移植性強。
在設計系統的加密框架過程中,本文借鑒了堆疊式文件系統的開發思想,并且利用了device mapper[6]虛擬化技術。堆疊式文件系統采用模塊化設計和增量式開發方式,通過在虛擬文件系統和底層文件系統之間插入多個獨立開發的層 (layer)來構建復雜的文件服務,層與層之間相互獨立,任何層都可以添加新的服務,已有的層自動適應并支持這些功能[7]。新增的層可以很容易的從一個文件系統堆棧中添加和刪除,具有良好的擴展性。device mapper是Linux 2.6內核中內置的一種從邏輯設備到物理設備的映射機制,通過該機制可以靈活管理系統中所有真實或虛擬的塊設備,利用device mapper中的3 個對象 (mapped device、mapping table和target device)和target driver插件一起能夠構成一個可迭代的設備樹,在target driver插件中可以實現用戶自定義功能。
在此基礎上,本文設計了一種面向容災的堆疊式數據透明加密框架,如圖1所示,框架中以新建虛擬卷的形式在虛擬卷設備驅動中實現了系統新增的自定義功能,使系統具備了良好的擴展性。

圖1 面向容災的堆疊式數據加密框架
(1)生產中心部署情況
該加密框架在生產中心的邏輯卷上建立了容災卷和加密卷兩個虛擬設備,以實現向生產中心添加容災層和數據加密層的目的,容災層和數據加密層之間相互獨立,每層實現單一的數據容災或加密功能。
數據加密層:該層提供的數據加密功能在加密驅動程序中實現。當加密驅動接收到寫請求時,先把請求數據進行加密處理,然后把該寫請求轉發給下層容災卷;當接收到讀請求時,直接把該請求轉發給下層容災卷進行處理,對于容災卷返回的數據,先進行解密處理,再傳遞給上一層。
容災層:該層提供的數據容災功能在容災驅動程序中實現。當容災驅動接收到寫請求時,會把請求數據寫入下層邏輯卷的同時將數據通過網絡發送給遠程備份中心;當接收到讀請求時,直接把該請求轉發給下層邏輯卷進行處理,之后把下層邏輯卷返回的數據傳遞給上層加密卷。由于該層處于數據加密層之下,該層接收到的寫請求數據都是經過加密處理后的數據,因此發送給遠程備份中心的都是密文數據。
(2)備份中心部署情況
該加密框架在備份中心的邏輯卷上建立了虛擬容災卷,以實現向備份中心添加容災層的目的。
容災層:與生產中心的容災層對于寫請求的處理方法不同,備份中心的容災層在接收到生產中心發來的數據后,首先構造對應的寫請求,然后把請求數據寫入下層邏輯卷。
當生產中心因自然災害或計算機軟硬件故障造成本地數據不可用時,我們需要根據備份中心的數據進行災后數據恢復。由于存儲在備份中心邏輯卷中的數據都是密文,因此要先在備份中心邏輯卷上建立加密卷,加密密鑰與當初在生產中心創建加密卷使用的密鑰一致,之后才能從邏輯卷中讀取出明文數據。
Linux內核中內置了dm-crypt[8]加密機制,該機制通過在邏輯卷上創建虛擬設備,在虛擬設備驅動程序中實現數據加密功能。驅動程序內部采用單線程操作,對于接收到的每個讀寫請求順序執行解密/加密操作,處理流程如圖2所示。由于在數據加解密過程中通常需要進行大量復雜的運算,故該過程會對系統的IO 吞吐率會造成很大影響。本文在參考分析dm-crypt加密機制的基礎上,設計了一個數據并行加密機制p-dm-crypt,在加密驅動程序中實現了對數據加密的并行處理,有效降低了數據加密操作對系統寫性能的影響。該機制主要針對數據加密系統寫性能較差的缺點,在加密驅動程序中對寫請求采用多線程并行執行,對讀請求依然采用單線程順序執行,具體的寫請求處理流程如圖3所示。

圖2 dm-crypt機制中讀寫請求處理流程

圖3 p-dm-crypt中寫請求處理流程
加密驅動模塊在被加載到內核時會創建n個寫請求處理線程,并把線程都置于睡眠狀態,當驅動程序截獲到寫請求時,把請求加入到全局鏈表wbio_list中并喚醒所有寫請求處理線程,寫請求處理線程首先從wbio_list中取出一個寫請求,調用數據加密函數對請求數據進行加密處理,之后把該寫請求轉發給下一層進行處理。
本文實現了一個具有數據透明加密功能的容災原型系統,并對系統性能進行了測試。測試平臺包括兩臺PC 機(intel 2.66GHz處理器,4GB DDR3內存,希捷1TB硬盤,OS為Red hat Linux 2.6.18),兩臺磁盤陣列 (intel 2.93GHz處理器,4GB DDR3 內存,5 塊希捷1TB 硬盤),一臺千兆以太網交換機。在搭建測試環境時,一臺磁盤陣列對應一臺PC 機,在磁盤陣列上新建一個raid5[9,10]邏輯卷,并以iscsi target[11,12]形式分配給對應PC機用作本地邏輯卷,兩臺PC機中一臺部署生產中心軟件,一臺部署備份中心軟件。
實驗1:測試加密驅動程序中寫請求處理線程的最優個數。使用10個dd線程同時向系統加密卷的不同位置寫入數據,隨著加密驅動中寫請求處理線程數不斷增加,系統聚合寫帶寬測試結果如圖4所示。
從圖4可以看出,在加密驅動中寫線程數從1增加到4的過程中,系統聚合寫帶寬隨著寫線程數的增加而增加,但在寫線程超過4個以后,系統聚合寫帶寬隨著寫線程數的增加而減小。這是因為采用多線程并行加密數據理論上能夠提升數據整體加密速率,提高系統的寫性能,但是隨著線程數的增加,CPU 調度處理開銷會不斷增大,當寫線程超過4個時,系統的寫性能反而因CPU 調度處理開銷過大而下降。由測試結果可知,加密驅動程序中寫請求處理線程的最優個數為4個。

圖4 加密驅動中最優寫線程數測試結果
實驗2:測試使用p-dm-crypt加密機制的原型系統較使用dm-crypt加密機制的系統在寫性能方面的優劣。在測試時,p-dm-crypt加密驅動中寫請求處理線程數設置為4,每次測試都使用10個dd線程同時向系統加密卷的不同位置寫入數據,采用兩種加密機制的系統聚合寫帶寬測試結果見表1,其中每個測試結果為5次測試的平均值。

表1 系統聚合寫帶寬測試結果/ (MB/s)
從表1可以看出,使用p-dm-crypt機制的系統寫帶寬普遍比使用dm-crypt機制的系統高,這是因為在dm-crypt機制中對數據加密操作使用單線程順序處理,加密時間開銷較大,而在p-dm-crypt機制中采用了多線程技術,對數據加密操作實現了并行處理,減少了總體加密時間開銷,降低了加密操作對系統性能的影響。通過計算不同bs大小下采用不同加密機制的系統寫帶寬比值可知,采用p-dm-crypt機制的系統寫性能較采用dm-crypt機制提升了18%左右。
本文針對容災系統中保護數據機密性的需求,設計了一種面向容災的堆疊式數據透明加密框架,通過在虛擬容災卷之上構建虛擬加密卷,在虛擬加密卷的驅動程序中實現了對數據自動加解密操作,確保了容災系統中數據的加密存儲和在網絡中的加密傳輸。針對數據加解密操作時間開銷大,影響系統IO 吞吐率的問題,設計了一個數據并行加密機制p-dm-crypt,在加密驅動程序中實現了對數據的并行加密處理,提高了數據整體加密速率。在原型系統上的測試結果表明,相比于使用dm-crypt加密機制的系統,使用p-dm-crypt的系統在寫性能方面提升了18%。
當前系統采用軟件加密方式對數據進行加密,雖然p-dm-crypt加密機制提高了數據加密的速率,但與硬件加密速率相比還有一定差距,下一步工作是在系統中使用硬件加密方式,并針對I/O 級小數據塊加密速率慢的問題,采用合并請求的預處理方式來提升系統加密效率,即在加密驅動程序中首先將多個寫請求數據合并,把合并后的數據提交給加密卡進行加密處理,待加密完成后將密文拆分給對應的寫請求,之后把寫請求順序轉發給容災層。
[1]Tipton H F,Krause M.Information security management handbook [M].Boca Raton:CRC Press,2012:163-166.
[2]Omar H Alhazmi,Yashwant K Malaiya.assessing disaster re-covery alternatives:On-site,collocation or cloud [C]//23rd IEEE International Symposium on Software Reliability Engineering Workshops,2012:19-20.
[3]Modi D,Agrawalla R K,Moona R.TransCryptDFS:A secure distributed encrypting file system [C]//International Congress on Ultra Modern Telecommunications and Control Systems and Workshops,2010:187-194.
[4]KANG Xiaowen.Research of key technologies for backup of disaster tolerant data based on virtual storage [D].Zhengzhou:PLA Information Engineering University,2009 (in Chinese).[康瀟文.基于虛擬存儲的容災數據備份關鍵技術研究 [D].鄭州:解放軍信息工程大學,2009.]
[5]HE Lianyue,LIAO Xiangke,FU Songling.KSEFS:A serveroriented encrypted file system supporting cypertext sharing [J].Computer Engineering &Science,2011,33 (7):1-5 (in Chinese).[何連躍,廖湘科,付松齡.KSEFS:支持加密共享的服務器加密文件系統[J].計算機工程與科學,2011,33 (7):1-5.]
[6]Maclean L.Understanding device-mapper in Linux 2.6kernel[EB/OL].[2010-01-06].http://www.askmaclean.com/understanding-device-mapper-in-linux-2-6-kernel.html.
[7]PEI Canhao,XIE Changsheng,HUANG Jianzhong.Kernel-level cryptographic file system based on read/write optimization [J].Computer Engineering,2010,36 (15):137-139 (in Chinese).[裴燦浩,謝長生,黃建忠.基于讀寫優化的內核級加密文件系統[J].計算機工程,2010,36 (15):137-139.]
[8]Morris J.Linux kernel security overview [C]//Kernel Conference Australia Brisbane,2009.
[9]Thomasian A,Xu J.RAID level selection for heterogeneous disk arrays[J].Cluster Computing,2011,14 (2):115-127.
[10]Saeed T.Raid5recovery in a high availability object based file system:U.S.Patent 8,458,515 [P].2013-06-04.
[11]Wang J,Yao X,Mitchell C,et al.A new hierarchical data cache architecture for iSCSI storage server [J].IEEE Transactions on Computers,2009,58 (4):433-447.
[12]Lindgren K,Lynn J,Spry A J.Methods for defining and naming iSCSI targets using volume access and security policy:U.S.Patent 7,568,216 [P].2009-07-28.