[摘要]EFS是Encrypting File System,加密檔案系統的縮寫。本文詳細介紹了EFS的加密方法及其原理。
建立時間:2005-06-01 更新時間:2005-06-03
文章屬性:原創
文章送出:mrcool (mrcool_at_zhinet.com)
EFS是Encrypting File System,加密檔案系統的縮寫,他可以被應用在windows 2000以上的作業系統且為NTFS5格式的分區上(windows xp home不支援).
EFS 隻能對存儲在磁盤上的資料進行加密,是一種安全的本地資訊加密服務.EFS使用核心的的檔案加密技術在NTFS卷上存儲加密檔案.
它可以防止那些未經允許的對敏感資料進行實體通路的入侵者(偷取筆記本電腦,硬碟等)
EFS是如何工作的
當一個使用者使用EFS去加密檔案時,必須存在一個公鑰和一個私鑰,如果使用者沒有,EFS服務自動産生一對。對于初級使用者來說,即使他完全不懂加密,也能加密檔案,可以對單個檔案進行加密,也可以對一個檔案夾進行加密,這樣所有寫入檔案夾的檔案将自動被加密。
一旦使用者釋出指令加密檔案或試圖添加一個檔案到一個已加密的檔案夾中,EFS将進行以下幾步:
第一步:NTFS首先在這個檔案所在卷的卷資訊目錄下(這個目錄隐藏在根目錄下面)建立一個叫做efs0.log的日志檔案,當拷貝過程中發生錯誤時利用此檔案進行恢複。
第二步:然後EFS調用CryptoAPI裝置環境.裝置環境使用Microsoft Base Cryptographic Provider 1.0 産生密匙,當打開這個裝置環境後,EFS産生FEK(File Encryption Key,檔案加密密匙).FEK的長度為128位(僅US和Canada),這個檔案使用DESX加密算法進行加密。
第三步: 擷取公有/私有密匙對;如果這個密匙還沒有的話(當EFS第一次被調用時),EFS産生一對新的密匙.EFS使用1024位的RSA算法去加密FEK.
第四步:EFS為目前使用者建立一個資料解密塊Data Decryptong Field(DDF),在這裡存放FEK然後用公有密匙加密FEK.
第五步:如果系統設定了加密的代理,EFS同時會建立一個資料恢複塊Data Recovery Field(DRF),然後把使用修復代理人密匙加密過的FEK放在DRF.每定義一個修復代理人,EFS将會建立一個Data Recovery Agent(DRA).Winxp沒有修復代理人這個功能,是以沒有這一步.,這個區域的目的是為了在使用者解密檔案的中可能解密檔案不可用。這些使用者叫做修復代理人,修復代理人在EDRP(Encryption Data Recovery Policy,加密資料恢複政策)中定義,它是一個域的安全政策。如果一個域的EDRP沒有設定,本地EDRP被使用。在任一種情況下,在一個加密發生時,EDRP必須存在(是以至少有一個修復代理人被定義)。DRF包含使用RSA加密的FEK和修復代理人的公鑰。如果在EDRP清單中有多個修復代理人,FEK必須用每個修復代理人的公鑰進行加密,是以,必須為個修復代理人建立一個DRF。
第六步:包含加密資料、DDF及所有DRF的加密檔案被寫入磁盤。
第七步: 在加密檔案所在的檔案夾下将會建立一個叫做Efs0.tmp的臨時檔案.要加密的内容被拷貝到這個臨時檔案,然後原來的檔案被加密後的資料覆寫.在預設的情況下,EFS使用128位的DESX算法加密檔案資料,但是Windows還允許使用更強大的的168位的3DES算法加密檔案,這是FIPS算法必須打開,因為在預設的情況下它是關閉的.
第八步:在第一步中建立的文本檔案和第七步中産生的臨時檔案被删除。
加密過程圖檔可參考 [url]http://www.ntfs.com/p_w_picpaths/encryption.gif[/url]
檔案被加密後,隻有可以從DDF或是DRF中解密出FEK的使用者才可以通路檔案.這種機制和一般的安全機制不同并意 味着要想通路檔案,除了要有通路這個檔案的權力外還必須擁有被使用者的公有密匙加密過的FEK.隻有使用私有密匙解密檔案的使用者才可以通路檔案.這樣的話會有一個問題:就是一個可以通路檔案的使用者可把檔案加密之後,檔案真正的擁有者卻不能通路檔案.解決這個問題的辦法:使用者加密檔案的時候隻建立一個檔案解密塊Data Decryption Field(DDF),但是隻後他可以增加附加使用者到密匙隊列.這種情況下,EFS簡單地把FEK用想給其他使用者通路權的使用者的私有密匙加密.然後用這些使用者的公有密匙加密FEK,新增加的DDF和第一個DDF放在一起(這些新增加的使用者對檔案隻有通路的權力).
解密的過程和加密的過程是相反的,參考[url]http://www.ntfs.com/p_w_picpaths/decryption.gif[/url]
首先,系統檢測使用者是否具有被EFS使用的私有密匙.如果有的話,系統将會在讀取EFS屬性,同時在DDF對列中尋找目前使用者的DDF.如果DDF找到的話,使用者私有密匙将會在那裡解密出FEK.使用解密出來的FEK,EFS去解密加密的檔案資料.需要注意的是檔案從來不會完全被加密,但是有時候會去加密一些特殊的扇區如果上層子產品要求的話.
EFS組成
EFS由EFS服務、EFS驅動、EFS檔案系統運作庫(FSRTL)和Win32 API。EFS服務作為一個标準系統服務運作,它是Windows 2000本機安全性授權的一部分。它與CryptoAPI接口産生鑰匙、DDF和DRF,EFS驅動就象是NTFS的一部分,它呼叫EFS服務請求鑰匙,DDF和DRF作為需要被建立,一個EFS驅動的組成是EFS FSRTL,它定義了EFS驅動程式能作為NTFS的代表而執行的功能。
EFS和NTFS如何共存
EFS可以被認為除NTFS外的第二層防護,為通路一個被加密的檔案,使用者必須有通路到檔案的NTFS權限。在相關NTFS權限的使用者能看到檔案夾中的檔案,但不能打開檔案除非有相應的解密鑰匙。同樣,一個使用者有相應的鑰匙但沒有相應的NTFS權限也不能通路到檔案。是以一個使用者要能打開加密的檔案,同時需要NTFS權限和解密鑰匙。
然而,NTFS權限可能被大量的方法穿越,包括密碼破解程式、使用者在離開前沒有退出系統或系統内部的NTFSDOS。在NT4.0下,遊戲結束了――硬碟上所有的資料都可以通路了。在Windows 2000下,當一個檔案用EFS加密後,一個未授權的使用者,即使通路到磁盤上的檔案,但也不能通路檔案上資料,因為沒有授權使用者的私鑰。
EFS 屬性
當NTFS加密檔案的時候,它首先會為檔案設定加密标志,然後在存儲DDF和DDR的地方為檔案建立一個$EFS屬性.這個屬性的屬性ID=0x100,它可以被加長,占有0.5k到若幹k的大小,這個大小是由DDF和DRF的數量決定的.
[url]http://www.ntfs.com/p_w_picpaths/efs_header.gif[/url]
下面是一個詳細的EFS屬性的例子.
[url]http://www.raid1.cn/efs/pic/attribute/EFS_example.gif[/url]
紫色:EFS屬性大小
天藍色:電腦安全辨別符和使用者數字.它指定EFS存儲證書的檔案夾.為了得到檔案
夾的名字,EFS會做一些轉換.
5A56B378 1C365429 A851FF09 D040000 - 存儲在$EFS中的資料.
78B3565A 2954361C 09FF15A8 000004D0 - 轉換後的結果.
2025018970-693384732-167712168-1232 - 轉換成十進制.
S-1-5-21-2025018970-693384732-167712168-1232 - 加上安全辨別符字首.
得到的檔案夾就是:
%UserProfile%\ApplicationData\Microsoft\Crypto\RSA\S-1-5-21-2025018970-693384732167712168-1232\
粉紅色:公有密匙特性
×××:私有密匙全局唯一辨別符(同時被當作容器名字).當EFS從CryptoAPI provider中擷取裝置環境的時候使用這個名字.如果$EFS屬性隻有一個DDF,容器的名字可以從$efs中計算出來.但是當更多的使用者加入這個檔案的時候(就會有更多的DDF和DRF),私有密匙全局唯一辨別符并不是儲存所有的使用者,其它的必須從基于公有密匙存儲特性的證書中恢複.
紅色:加密提供器的名字(Microsoft Base Cryptographic Provider v.1.0)
綠色:使用者的名稱,DDF和DRF的所有者.
藍色:加密後的FEK.通常FEK是128位的,但是被1024位的RSA密匙加密後,長度變成1024位.
參考資料: [url]http://www.ntfs.com [url]http://www.nsfocus.net[/url][/url]
歡迎轉載,但請務必保留作者資訊(Mrcool)和源出處(xfocus.net)