深入剖析EFS

2021-09-05 06:13:37 字數 3606 閱讀 9892

[摘要]efs是encrypting file system,加密檔案系統的縮寫。本文詳細介紹了efs的加密方法及其原理。

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]

檔案被加密後,只有可以從ddf或是drf中解密出fek的使用者才可以訪問檔案.這種機制和一般的安全機制不同並意 味著要想訪問檔案,除了要有訪問這個檔案的權力外還必須擁有被使用者的公有密匙加密過的fek.只有使用私有密匙解密檔案的使用者才可以訪問檔案.這樣的話會有乙個問題:就是乙個可以訪問檔案的使用者可把檔案加密之後,檔案真正的擁有者卻不能訪問檔案.解決這個問題的辦法:使用者加密檔案的時候只建立乙個檔案解密塊data decryption field(ddf),但是隻後他可以增加附加使用者到密匙佇列.這種情況下,efs簡單地把fek用想給其他使用者訪問權的使用者的私有密匙加密.然後用這些使用者的公有密匙加密fek,新增加的ddf和第乙個ddf放在一起(這些新增加的使用者對檔案只有訪問的權力).

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

[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]

下面是乙個詳細的efs屬性的例子.

[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 - 加上安全識別符號字首.

得到的資料夾就是:

粉紅色:公有密匙特性

黃色:私有密匙全域性唯一識別符號(同時被當作容器名字).當efs從cryptoapi provider中獲取裝置環境的時候使用這個名字.如果$efs屬性只有乙個ddf,容器的名字可以從$efs中計算出來.但是當更多的使用者加入這個檔案的時候(就會有更多的ddf和drf),私有密匙全域性唯一識別符號並不是儲存所有的使用者,其它的必須從基於公有密匙儲存特性的證書中恢復.

紅色:加密提供器的名字(microsoft base cryptographic provider v.1.0)

綠色:使用者的名稱,ddf和drf的所有者.

藍色:加密後的fek.通常fek是128位的,但是被1024位的rsa密匙加密後,長度變成1024位.

深入剖析EFS

摘要 efs是encrypting file system,加密檔案系統的縮寫。本文詳細介紹了efs的加密方法及其原理。mrcool mrcool at zhinet.com efs是encrypting file system,加密檔案系統的縮寫,他可以被應用在windows 2000以上的作業系...

PGA深入剖析

pga pga系統全域性區 program global area 程序全域性區 process global area pga是乙個記憶體區域,該區域包含了一些與某個特定伺服器程序相關的資料和控制資訊,每個程序都有自己的私有pga區,所以這塊區域只能被其所屬程序進入,而不能被其他程序訪問,所以在p...

epoll LT ET 深入剖析

epoll lt et 深入剖析 epoll事件有兩種模型 level triggered lt 水平觸發 socket接收緩衝區不為空 有資料可讀 讀事件一直觸發 socket傳送緩衝區不滿 可以繼續寫入資料 寫事件一直觸發 符合思維習慣,epoll wait返回的事件就是socket的狀態 ed...