关于文件透明加密解密
生活随笔
收集整理的這篇文章主要介紹了
关于文件透明加密解密
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.windows文件系統概述 硬盤文檔加密系統驅動原理一般有兩種:通過HOOK一些底層的系統內核調用對文件目錄的訪問權限進行控制,在文件系統輸入輸出驅動上層直接建立一個驅動對文件目錄的數據進行加密。由于windows文件系統不是物理設備,其堆棧結構比較特殊,因此文件系統過濾驅動也與一般過濾驅動有一些不同(這一點背景可以參考下楚狂人[1]的文檔和IFS的提供的若干文檔,除了正常的文件接口,還有一種稱為FASTIO),文件系統是針對每一個磁盤卷而不是針對整個磁盤來構造設備堆棧。由于windows文件系統驅動會生成控制設備對象CDO和卷設備對象VDO兩種設備對象,所以文件系統過濾驅動就有兩種對應的過濾設備對象(FiDO)。另外,文件系統過濾驅動也有它自己的控制設備對象CDO,并不附著到任何設備對象上,只是起到一些控制功能,需要處理的IRP(I/O請求包)也會有所不同。因此,一個文件系統過濾驅動相應地包括了三種設備對象。不同版本的windows操作系統,同一設備的設備堆棧對同一IRP的處理在細節上有很多不同,這點我們需要根據不同的系統進行處理。下面以windows XP為例對硬盤文檔加密系統進行一些探討。?2.如何實現數據加解密數據加解密的實現在針對卷設備對象的過濾設備對象中來處理。有一些實際的問題需要考慮,列舉如下:(1)到底對什么文件進行加密?并不是對所有讀寫請求中的數據進行加密,例如不應該對系統文件加密,也不能對根目錄區進行加密,否則會出現一系列問題。因此需要在加密之前對操作的文件對象進行判斷,選擇性的進行加密。這可以通過文件全路徑來進行區分。而需要加解密的文件全路徑存放在一個特殊的文件里,通過后面在文件系統過濾驅動里實現的文件訪問控制來使該文件不能被除了該文件系統過濾驅動以外的任何程序訪問到。這個特殊文件的內容在過濾驅動加載時即會加載一份到權限表緩沖里。(2)如何獲取數據內容?要對數據進行加密,就需要先獲得數據的位置和內容,我們不可能直接對磁盤扇區直接操作,因此需要通過window底下的自定義文件系統驅動獲得。XP中Cache管理部分導致在文件系統或者文件系統過濾驅動程序中,讀和寫操作分為幾種不同的類型:Cached I/O、Non-cached user I/O、Paging I/O。我們可以直接對緩存中的數據進行加密嗎?比如數據更新的發生,文件讀寫的發生,都會直接造成數據的改變,因此對緩存中的數據加密會帶來不少人品問題。所以我們要選用Non-cached user I/O和Paging I/O兩種方式下,因為無論如何最后數據都肯定通過這兩種方式寫到硬盤上。這樣的結果就是:硬盤上的文件數據始終是密文,而緩存中的數據始終是明文。當用一個應用程序把明文讀出來后,明文就一直存在緩沖里,其他程序讀時也能看到明文,能把明文拷貝出去,會成為一個安全問題。解決該問題的方法之一是在關閉文件的時候對緩存進行清空處理。這兩種方式下的數據內容可以在IRP中的MdlAddress結構或者UserBuffer結構中取得。此外,為了解決這個問題,也可以通過自旋鎖的一些設置來解決。(3)加密算法及其密鑰處理對于每一個文件的讀寫,文件系統會產生很多個IRP_MJ_READ請求或者IRP_MJ_WRITE請求,數據也被分成了很多塊。同時由于windows讀文件不一定是順序的, 加密的時候通過IRP中的Write.Length獲取明文長度,如果不夠分組整數倍用全0填充。不過值得注意的是如果在某個IRP中處理的是文件的最后一塊分頁,寫成功的長度IoStatus.Information通常會小于IRP請求的長度Write.Length,這時候再用Write.Length來作為參考進行分組加密的話就會出問題,需要進行特殊處理。在IRP_MJ_READ請求中解密的時候則不存在這個問題可以每次都按照返回的長度即IoStatus.Information來進行解密。基于以上要點規則,在文件系統過濾驅動的IRP_MJ_WRITE分派函數進行加密的流程如下:1)判斷IRP的讀寫方式,只處理以下幾種IRP_NOCACHE、IRP_PAGING_IO和IRP_SYNCHRONOUS_PAGING_IO;2)讀取文件路徑和類型決定是否需要進行加密,不需要則直接把IRP往下層傳,否則執行加密;3)得到Windows傳下來的數據緩沖地址,在內核中分配連續的頁作為一個新的緩沖區保存數據;4)用AES對新的緩沖區中的數據加密;5)設置完成例程,并將IRP原來的參數作為完成函數下文環境變量;6)調用IoCallDriver把密文向下層驅動傳,寫入硬盤;7)在完成例程中設置IRP的MdlAddress及UserBuffer,成功。解密過程與此相同,現在還有一個問題,如何來保存AES算法的密鑰?在底層微軟是沒有提供加密算法的密鑰容器的。這里有一種方法,可以使用動態密鑰,而且可以將此密鑰放在硬盤上面。使用一個RSA公鑰對動態AES密鑰進行加密,再使用時候利用私鑰進行解密,獲得對稱密鑰。而這個可以使用微軟的CryptoAPI和一個USBKEY,私鑰就在USBKEY上,我們只要一個USBKEY就夠了,也就是銀行里面使用的辦法,當然我們還可以使用數字簽名的方法。有朋友會問,那為什么不直接使用RSA或者ECC加密數據呢?那樣會造成在飛機跑道上開拖拉機的后果,速度非常慢。4 Hook一些IRP,實現對文件的進一步控制。實現這些目的的關鍵在于Hook文件系統驅動的一些函數,從IRP中解析出各種目錄操作,然后根據操作系統的不同設置返回值將其攔截即可。并可同時進行日志記錄。創建文件和打開一個文件都于IRP_MJ_Create,所以這里需要區別一下新建文件和文件。當創建一個文件的時候,系統會首先發送一個標FILE_OPEN的請求,并且判斷底層文件系統的返回值,返回成功,則表明文件存在并且已經成功打開,否則如返回結果是NO SUCH FILE,則緊接著創建一個E_OPEN_IF請求,得以將文件創建,所以如果在MJ_Create的Options域當中發現了FILE_CREATE,E_OPEN_IF或者FILE_OVERWRITE_IF的三個標志之一,則是在創建否則就是打開。(2)如果獲取的IRP為IRP_MJ_SET_INFORMATION,獲取與該IRP關聯的IO_STACK_LOCATION結構指針IrpSp(該結構中包含了該IRP的類型代碼和參數信息以及完成函數的地址),然后取出irpSp->Parameters.SetFile.FileInformationClass,若與FileDispositionInformation相等則為刪除操作,若與FileRenameInformation相等則是文件重命名操作。(3)防止拷到U盤之類的方法是查詢該新增卷的設備類型, FILE_REMOVABLE_MEDIA則為移動存儲產生。得到類型以后保存到該卷的過濾設備對象中。當該過濾設備對象得到一個寫請求的IRP時即可判斷是否在將文件拷貝U盤,接下來就是禁止或者允許。
文件系統過濾驅動加密產品,顧名思義是在文件系統過濾驅動中進行透明的加解密,即在應用程序打開文件進行讀寫操作的過程中進行解密和加密,文件系統過濾驅動在磁盤驅動之上。其具體產品形態,主要是目前流行的透明加解密的文檔安全產品。
文件系統過濾驅動加密的優點:1、與傳統的加密工具(如加密文件柜)相比,加解密過程是透明的。這樣帶來的好處是:1)文檔從產生的第一時刻就是自動加密的,避免作者在編寫過程中有意或無意地留下明文,或者后續處理者解密后有意或無意地留下明文,加密帶有一定的強制性。2)加解密過程對用戶透明,這樣就不需要用戶學習如何進行文件加解密。2、與全盤加密相比,文件系統過濾驅動加密產品通常限定特定進程或文件類型的文件操作才透明加解密;不期望的文件操作,例如用戶主動把文件拷貝到USB盤、作為郵件附件發送或者遠程用戶通過文件共享拷走文件、黑客攻破系統后拷走文件等,將得到的是密文。3、與全盤加密相比,文件系統過濾驅動加密產品原則上能夠支持多用戶。
透明加密解密的缺點:1、因為文件系統過濾驅動之上,合法應用程序得到的文件內容是明文,為了防止這些明文通過各種方式“溜走”,就需要對各種可能輸出明文的途徑進行“封堵”。這些途徑按照是否需要編程分為兩大類:1)不需要編程的,利用應用程序已有的功能或者操作系統的功能,例如內容拷貝、鼠標拖拽復制、打印、郵件發送、第三方軟件插件、屏幕錄制等等。2)需要編程的,例如內存讀取、API Hook掛接、窗口消息、定制插件等等。總的來說,各種途徑眾多,防不勝防。各種產品或多或少堵住了其中一些,很難做到萬無一失。2、與傳統的加密工具(如加密文件柜)相比,文件系統過濾驅動加密產品對特定類型的文件進行透明加解密,而不是根據文件是否涉密。假設涉密文件是少數,不涉密文件是多數,這將導致大量的非涉密文件被加密,帶來很大的管理負擔。如果再考慮解密帶出的環節,少量的涉密文件與大量的非涉密文件都要求進行帶出審批,這種管理負擔就極易產生安全漏洞。3、文件系統過濾驅動加密產品通常依賴于操作系統的身份鑒別機制,對于通過操作系統認證的用戶均進行透明加解密,所以操作系統在身份鑒別上的漏洞也就成了文件系統過濾驅動加密產品的漏洞(眾所周知Windows的身份鑒別很容易被突破)。例如,筆記本電腦丟失的案例,文件系統過濾驅動加密產品對于從其它系統啟動試圖竊取硬盤上的數據(如把被保護的硬盤掛到其它機器或者從光驅啟動)提供了較好保護,但是竊賊可以有N種方法破解或者置空用戶密碼而直接進入系統,然后該用戶的所有密文將對他透明解密。4、與第3條類似的是,操作系統在其它方面的漏洞也可能對文件系統過濾驅動加密產品形成致命的破壞。例如,黑客攻破系統的案例,雖然他直接拷貝出去的是密文,但是他控制系統權限后進行遠程控制,在被攻擊主機上本地打開文件,密文將對他透明解密。如果黑客再在本地主機上進行屏幕錄制,就可以把明文轉移出去了。 與50位技術專家面對面20年技術見證,附贈技術全景圖
文件系統過濾驅動加密產品,顧名思義是在文件系統過濾驅動中進行透明的加解密,即在應用程序打開文件進行讀寫操作的過程中進行解密和加密,文件系統過濾驅動在磁盤驅動之上。其具體產品形態,主要是目前流行的透明加解密的文檔安全產品。
文件系統過濾驅動加密的優點:1、與傳統的加密工具(如加密文件柜)相比,加解密過程是透明的。這樣帶來的好處是:1)文檔從產生的第一時刻就是自動加密的,避免作者在編寫過程中有意或無意地留下明文,或者后續處理者解密后有意或無意地留下明文,加密帶有一定的強制性。2)加解密過程對用戶透明,這樣就不需要用戶學習如何進行文件加解密。2、與全盤加密相比,文件系統過濾驅動加密產品通常限定特定進程或文件類型的文件操作才透明加解密;不期望的文件操作,例如用戶主動把文件拷貝到USB盤、作為郵件附件發送或者遠程用戶通過文件共享拷走文件、黑客攻破系統后拷走文件等,將得到的是密文。3、與全盤加密相比,文件系統過濾驅動加密產品原則上能夠支持多用戶。
透明加密解密的缺點:1、因為文件系統過濾驅動之上,合法應用程序得到的文件內容是明文,為了防止這些明文通過各種方式“溜走”,就需要對各種可能輸出明文的途徑進行“封堵”。這些途徑按照是否需要編程分為兩大類:1)不需要編程的,利用應用程序已有的功能或者操作系統的功能,例如內容拷貝、鼠標拖拽復制、打印、郵件發送、第三方軟件插件、屏幕錄制等等。2)需要編程的,例如內存讀取、API Hook掛接、窗口消息、定制插件等等。總的來說,各種途徑眾多,防不勝防。各種產品或多或少堵住了其中一些,很難做到萬無一失。2、與傳統的加密工具(如加密文件柜)相比,文件系統過濾驅動加密產品對特定類型的文件進行透明加解密,而不是根據文件是否涉密。假設涉密文件是少數,不涉密文件是多數,這將導致大量的非涉密文件被加密,帶來很大的管理負擔。如果再考慮解密帶出的環節,少量的涉密文件與大量的非涉密文件都要求進行帶出審批,這種管理負擔就極易產生安全漏洞。3、文件系統過濾驅動加密產品通常依賴于操作系統的身份鑒別機制,對于通過操作系統認證的用戶均進行透明加解密,所以操作系統在身份鑒別上的漏洞也就成了文件系統過濾驅動加密產品的漏洞(眾所周知Windows的身份鑒別很容易被突破)。例如,筆記本電腦丟失的案例,文件系統過濾驅動加密產品對于從其它系統啟動試圖竊取硬盤上的數據(如把被保護的硬盤掛到其它機器或者從光驅啟動)提供了較好保護,但是竊賊可以有N種方法破解或者置空用戶密碼而直接進入系統,然后該用戶的所有密文將對他透明解密。4、與第3條類似的是,操作系統在其它方面的漏洞也可能對文件系統過濾驅動加密產品形成致命的破壞。例如,黑客攻破系統的案例,雖然他直接拷貝出去的是密文,但是他控制系統權限后進行遠程控制,在被攻擊主機上本地打開文件,密文將對他透明解密。如果黑客再在本地主機上進行屏幕錄制,就可以把明文轉移出去了。 與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的关于文件透明加密解密的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: web工作流管理系统开发之十九 工作流系
- 下一篇: 制作GTK+控件