深入剖析EFS文件加密系統(tǒng)

EFS是Encrypting File System,加密文件系統(tǒng)的縮寫,他可以被應用在windows 2000以上的操作系統(tǒng)且為NTFS5格式的分區(qū)上(windows xp home不支持).

EFS 只能對存儲在磁盤上的數(shù)據(jù)進行加密,是一種安全的本地信息加密服務.EFS使用核心的的文件加密技術在NTFS卷上存儲加密文件.

它可以防止那些未經(jīng)允許的對敏感數(shù)據(jù)進行物理訪問的入侵者(偷取筆記本電腦,硬盤等)

EFS是如何工作的

當一個用戶使用EFS去加密文件時,必須存在一個公鑰和一個私鑰,如果用戶沒有,EFS服務自動產(chǎn)生一對。對于初級用戶來說,即使他完全不懂加密,也能加密文件,可以對單個文件進行加密,也可以對一個文件夾進行加密,這樣所有寫入文件夾的文件將自動被加密。

一旦用戶發(fā)布命令加密文件或試圖添加一個文件到一個已加密的文件夾中,EFS將進行以下幾步:

第一步:NTFS首先在這個文件所在卷的卷信息目錄下(這個目錄隱藏在根目錄下面)創(chuàng)建一個叫做efs0.log的日志文件,當拷貝過程中發(fā)生錯誤時利用此文件進行恢復。

第二步:然后EFS調(diào)用CryptoAPI設備環(huán)境.設備環(huán)境使用Microsoft Base Cryptographic Provider 1.0 產(chǎn)生密匙,當打開這個設備環(huán)境后,EFS產(chǎn)生FEK(File Encryption Key,文件加密密匙).FEK的長度為128位(僅US和Canada),這個文件使用DESX加密算法進行加密。

第三步: 獲取公有/私有密匙對;如果這個密匙還沒有的話(當EFS第一次被調(diào)用時),EFS產(chǎn)生一對新的密匙.EFS使用1024位的RSA算法去加密FEK.

第四步:EFS為當前用戶創(chuàng)建一個數(shù)據(jù)解密塊Data Decryptong Field(DDF),在這里存放FEK然后用公有密匙加密FEK.

第五步:如果系統(tǒng)設置了加密的代理,EFS同時會創(chuàng)建一個數(shù)據(jù)恢復塊Data Recovery Field(DRF),然后把使用恢復代理密匙加密過的FEK放在DRF.每定義一個恢復代理,EFS將會創(chuàng)建一個Data Recovery Agent(DRA).Winxp沒有恢復代理這個功能,所以沒有這一步.,這個區(qū)域的目的是為了在用戶解密文件的中可能解密文件不可用。這些用戶叫做恢復代理,恢復代理在EDRP(Encryption Data Recovery Policy,加密數(shù)據(jù)恢復策略)中定義,它是一個域的安全策略。如果一個域的EDRP沒有設置,本地EDRP被使用。在任一種情況下,在一個加密發(fā)生時,EDRP必須存在(因此至少有一個恢復代理被定義)。DRF包含使用RSA加密的FEK和恢復代理的公鑰。如果在EDRP列表中有多個恢復代理,F(xiàn)EK必須用每個恢復代理的公鑰進行加密,因此,必須為個恢復代理創(chuàng)建一個DRF。

第六步:包含加密數(shù)據(jù)、DDF及所有DRF的加密文件被寫入磁盤。

第七步: 在加密文件所在的文件夾下將會創(chuàng)建一個叫做Efs0.tmp的臨時文件.要加密的內(nèi)容被拷貝到這個臨時文件,然后原來的文件被加密后的數(shù)據(jù)覆蓋.在默認的情況下,EFS使用128位的DESX算法加密文件數(shù)據(jù),但是Windows還允許使用更強大的的168位的3DES算法加密文件,這是FIPS算法必須打開,因為在默認的情況下它是關閉的.

第八步:在第一步中創(chuàng)建的文本文件和第七步中產(chǎn)生的臨時文件被刪除。

加密過程圖片可參考

文件被加密后,只有可以從DDF或是DRF中解密出FEK的用戶才可以訪問文件.這種機制和一般的安全機制不同并意 味著要想訪問文件,除了要有訪問這個文件的權力外還必須擁有被用戶的公有密匙加密過的FEK.只有使用私有密匙解密文件的用戶才可以訪問文件.這樣的話會有一個問題:就是一個可以訪問文件的用戶可把文件加密之后,文件真正的擁有者卻不能訪問文件.解決這個問題的辦法:用戶加密文件的時候只創(chuàng)建一個文件解密塊Data Decryption Field(DDF),但是只后他可以增加附加用戶到密匙隊列.這種情況下,EFS簡單地把FEK用想給其他用戶訪問權的用戶的私有密匙加密.然后用這些用戶的公有密匙加密FEK,新增加的DDF和第一個DDF放在一起(這些新增加的用戶對文件只有訪問的權力).

解密的過程和加密的過程是相反的,參考

首先,系統(tǒng)檢測用戶是否具有被EFS使用的私有密匙.如果有的話,系統(tǒng)將會在讀取EFS屬性,同時在DDF對列中尋找當前用戶的DDF.如果DDF找到的話,用戶私有密匙將會在那里解密出FEK.使用解密出來的FEK,EFS去解密加密的文件數(shù)據(jù).需要注意的是文件從來不會完全被加密,但是有時候會去加密一些特殊的扇區(qū)如果上層模塊要求的話.

EFS組成

EFS由EFS服務、EFS驅(qū)動、EFS文件系統(tǒng)運行庫(FSRTL)和Win32 API。EFS服務作為一個標準系統(tǒng)服務運行,它是Windows 2000安全子系統(tǒng)的一部分。它與CryptoAPI接口產(chǎn)生鑰匙、DDF和DRF,EFS驅(qū)動就象是NTFS的一部分,它呼叫EFS服務請求鑰匙,DDF和DRF作為需要被創(chuàng)建,一個EFS驅(qū)動的組成是EFS FSRTL,它定義了EFS驅(qū)動程序能作為NTFS的代表而執(zhí)行的功能。

EFS和NTFS如何共存

EFS可以被認為除NTFS外的第二層防護,為訪問一個被加密的文件,用戶必須有訪問到文件的NTFS權限。在相關NTFS權限的用戶能看到文件夾中的文件,但不能打開文件除非有相應的解密鑰匙。同樣,一個用戶有相應的鑰匙但沒有相應的NTFS權限也不能訪問到文件。所以一個用戶要能打開加密的文件,同時需要NTFS權限和解密鑰匙。

然而,NTFS權限可能被大量的方法穿越,包括口令破解程序、用戶在離開前沒有退出系統(tǒng)或系統(tǒng)內(nèi)部的NTFSDOS。在NT4.0下,游戲結(jié)束了――硬盤上所有的數(shù)據(jù)都可以訪問了。在Windows 2000下,當一個文件用EFS加密后,一個未授權的用戶,即使訪問到磁盤上的文件,但也不能訪問文件上數(shù)據(jù),因為沒有授權用戶的私鑰。

EFS 屬性

當NTFS加密文件的時候,它首先會為文件設置加密標志,然后在存儲DDF和DDR的地方為文件創(chuàng)建一個$EFS屬性.這個屬性的屬性ID=0x100,它可以被加長,占有0.5k到若干k的大小,這個大小是由DDF和DRF的數(shù)量決定的.

紫色:EFS屬性大小

天藍色:電腦安全標識符和用戶數(shù)字.它指定EFS存儲證書的文件夾.為了得到文件

夾的名字,EFS會做一些轉(zhuǎn)換.

5A56B378 1C365429 A851FF09 D040000 - 存儲在$EFS中的數(shù)據(jù).

78B3565A 2954361C 09FF15A8 000004D0 - 轉(zhuǎn)換后的結(jié)果.

2025018970-693384732-167712168-1232 - 轉(zhuǎn)換成十進制.

S-1-5-21-2025018970-693384732-167712168-1232 - 加上安全標識符前綴.

得到的文件夾就是:

%UserProfile%\ApplicationData\Microsoft\Crypto\RSA\S-1-5-21-2025018970-693384732167712168-1232\

粉紅色:公有密匙特性

黃色:私有密匙全局唯一標識符(同時被當作容器名字).當EFS從CryptoAPI provider中獲取設備環(huán)境的時候使用這個名字.如果$EFS屬性只有一個DDF,容器的名字可以從$efs中計算出來.但是當更多的用戶加入這個文件的時候(就會有更多的DDF和DRF),私有密匙全局唯一標識符并不是保存所有的用戶,其它的必須從基于公有密匙存儲特性的證書中恢復.

紅色:加密提供器的名字(Microsoft Base Cryptographic Provider v.1.0)

綠色:用戶的名稱,DDF和DRF的所有者.

藍色:加密后的FEK.通常FEK是128位的,但是被1024位的RSA密匙加密后,長度變成1024位.

小知識之私有密鑰概念:

私有密鑰(Symmetric Key),又叫對稱密鑰。密鑰加密算法采用同一把密鑰進行加密和解密。它的優(yōu)點是加密和解密速度非??欤荑€的分發(fā)和管理比較困難。信息的發(fā)送者和接收者必須明確同一把密鑰。因此,必須進行密鑰交流,這通常需要其他更安全的信道來傳送密鑰。