加密文件系统

**加密檔案系統**（英語：**Encrypting File System**，縮寫 **EFS**）是微軟 Windows 在 NTFS3.0 中引入的一個功能，它提供檔案系統級加密。此技術使檔案支援透明加密以保護機密資料免受具有物理存取權限的攻擊者侵害。

EFS 從 Windows 2000 起在所有為商業環境開發的 Windows 版本中可用（見下方的「支援的作業系統」一節）。預設情況下，不會有檔案被加密，但使用者可以選擇加密各檔案、各資料夾和各驅動器。有些 EFS 設定可通過 Windows 域環境中的組策略強制執行。

其他作業系統也有提供的加密的檔案系統，但微軟 EFS 與它們不相容。另見加密檔案系統列表。

## 基本想法

很長一段時間以來，作業系統執行在一個沒有檔案加密的系統上，存取檔案不得不只通過作業系統控制的使用者身分驗證和存取控制列表。如果攻擊者取得了電腦的物理存取權，那麼這些障礙都可以被輕易繞過。方法之一就是移除磁碟並將其放在另一個電腦中，用它的作業系統讀取讀取檔案系統，或者從一個可引導光碟重新啟動電腦來讀取檔案系統。

最廣泛的可接受方案是將檔案加密儲存在物理媒介上（磁碟、USB 驅動器、磁帶、光碟等）。

在微軟 Windows 作業系統家族中，EFS 可完成這項舉措，儘管只能在 NTFS 驅動器上。它使用公鑰加密演算法和對稱密鑰加密的組合保證沒有正確的金鑰將極難解密檔案。

但是，EFS 的加密金鑰在實踐中使用使用者帳戶的密碼保護，並因此容易受到大多數密碼攻擊。

## 操作

EFS 使用對稱金鑰加密檔案，這被稱為檔案加密金鑰（File Encryption Key），簡稱 FEK。使用對稱加密演算法是因為加密和解密大量資料時這比使用非對稱金鑰密碼本消耗更少的時間。在不同的作業系統版本和組態上將使用不同的對稱加密演算法，見下面的 Algorithms used by Windows version。FEK（用來加密檔案的對稱金鑰）然後會使用一個與加密檔案的使用者相關聯的公鑰加密，加密的 FEK 將被儲存在加密檔案的 $EFS 可選資料流。要解密該檔案，EFS 組件驅動程式使用匹配 EFS 數位憑證（用於加密檔案）的私鑰解密儲存在 $EFS 流中的對稱金鑰。EFS 組件驅動程式然後使用對稱金鑰來解密該檔案。因為加密和解密操作在 NTFS 底層執行，因此它對使用者及所有應用程式是透明的。

內容要被加密的資料夾會被檔案系統標記為「加密」屬性。EFS 組件驅動程式會檢查此「加密」屬性，這類似 NTFS 中檔案權限的繼承：如果一個資料夾標記為加密，在裡面建立檔案和子資料夾就預設會被加密。在加密檔案移動到一個 NTFS 卷時，檔案會繼續保持加密。但是，在許多情況下，Windows 可能不需詢問使用者就解密檔案。

被複製到另一種檔案系統（如 FAT32）的檔案和資料夾會被解密。最後，加密的檔案使用 SMB/CIFS 協定通過網路複製時，檔案在傳送到網路前會被解密。

避免「複製時解密」的最有效方法是使用支援「原始資料」API 的備份軟體。使用 Raw API（頁面存檔備份，存於網際網路檔案館）的備份軟體會直接複製已加密檔案的流和 $EFS 備用資料流為單個檔案。換句話說，這些檔案以加密形式被「複製」，備份過程中不牽扯解密。

從 Windows Vista 開始，使用者的私鑰可以儲存在智慧卡上；資料恢復代理（DRA）金鑰也可以儲存在智慧卡上。

## 安全性

### 漏洞

在 Windows 2000 的 EFS 中存在兩個重大安全漏洞。在那之後有遭遇不同程度的各種攻擊。

#### 使用原生的 Administrator 帳戶解密檔案

在 Windows 2000 中，原生的 administrator 是預設的「資料恢復代理」，它可以解密任何本地使用者用 EFS 加密的所有檔案。在 Windows 2000 中的 EFS 在沒有「恢復代理」時不能正常運作，所以始終有一個人可以解密使用者已加密的檔案。任何未加入域的 Windows 2000 電腦將容易受到未授權的 EFS 解密，任何能取得本地 Administrator 帳戶權限的人都可以做到，而網際網路上有許多工具可以做到這點。

在 Windows XP 及之後的版本中已經沒有預設的「資料恢復代理」並且不再強制需要它。設定 SYSKEY 為模式 2 或 3（在啟動時鍵入 syskey 或插入相應軟碟）將緩解未經授權的通過本地 Administrator 帳戶解密的風險。這是因為本地使用者密碼進行了雜湊處理，儲存在 SAM 檔案中，並使用 Syskey 加密，而且 Syskey 的值對於無法接觸 Syskey 口令 / 軟碟的離線攻擊者不可用。

#### 通過密碼重設存取私鑰

在 Windows 2000 中，使用者的 RSA 私鑰只儲存在「真正」的加密形式中，但使用者的 RSA 私鑰備份存在更脆弱的保護。如果攻擊者能物理存取 Windows 2000 電腦並重設本地帳戶的密碼，攻擊者可以登入為該使用者（或恢復代理）並獲得可解密所有檔案的 RSA 私鑰的權限。這是因為 RSA 私鑰使用一個 LSA 私鑰加密，而可提升登入到 LocalSystem 的攻擊者可以存取它，取得相關工具並不困難。

在 Windows XP 及之後版本，使用者的 RSA 私鑰使用一個離線公鑰來備份，與該公鑰對應的私鑰儲存在下列位置之一：密碼重設磁碟（如果該 Windows XP 不是一個域成員），活動目錄（如果該 Windows XP 是一個域的成員）。這意味著可以通過 Windows XP 本地系統身分驗證的攻擊者仍無法存取儲存在 PC 硬碟上的解密金鑰。

在 Windows 2000、XP 或更新版本中，使用者的 RSA 私鑰使用使用者的 NTLM 密碼雜湊加使用者名稱雜湊來加密 —— 加鹽的雜湊使得在未獲知使用者密碼的情況下，很難逆轉此過程並得出使用者的私鑰。同樣，將系統模式設定為模式 2 或模式 3（在啟動時鍵入或通過軟碟提供系統金鑰）將緩解此攻擊，因為本地使用者的密碼雜湊儲存在 SAM 檔案中。

### 其他問題

一旦使用者已成功登入，存取他的 EFS 加密檔案的請求都不會要求身分驗證，解密會靜默、透明完成。因此，任何被攻破的使用者密碼都將自動允許存取資料。Windows 可以使用可逆加密儲存使用者帳戶密碼，不過這已不是預設情況；它還可以組態為儲存本地使用者帳戶密碼的 Lan 管理器雜湊，並且這在 Windows XP 和更早版本的原版中是預設行為，這可以被攻擊和更容易攻破。它還儲存本地使用者帳戶密碼的 NTLM 雜湊，如果密碼較弱，這可能使用「彩虹表」輕易攻破（Windows Vista 和之後版本預設不允許弱密碼）。為了避免本地密碼遭受暴力破解，舊版本的 Windows 應該組態為永不儲存 LM 雜湊（在組策略的安全設定部分），當然，更不能啟用自動登入（那會在登錄檔中儲存明文密碼）。此外，使用超過 14 個字元的本地使用者帳戶密碼可避免 Windows 在 SAM 中儲存 LM 雜湊 —— 以及加強對 NTLM 雜湊的暴力攻擊的抵抗性。

當使用 EFS 加密檔案時，即將明文檔案轉換為加密檔案時，明文檔案並不會被擦除，而只是被標記為已刪除（即在檔案系統中標記為「未使用」資料）。這意味著，除非它恰好儲存在一個支援 TRIM 的 SSD 上，從而（或者因其他設定）被儘快覆蓋，否則會容易找回它們。為充分減少對 EFS 這個已知的、非技術性的問題，你應該在資料夾級別組態加密（以便使在這些資料夾中建立檔案時即被加密，而不是被移動和留下一份明文檔案的殘留）。當想要加密單個檔案時，加其複製到一個加密的資料夾或者加密的檔案中，然後有效地擦除原儲存卷。使用者可以使用 Windows Cipher 實用工具（配以 / W 選項）或其他工具來有效擦除磁碟上的可用空間。

任何可以取得管理員權限的人都可以覆蓋、更改 Data Recovery Agent 的組態。這是一個非常嚴重的問題，因為攻擊者可能侵入管理員帳戶並將精心設計的任何 DRA 憑證設定為資料恢復代理，並等待。這有時被稱為雙階段攻擊（two-stage attack），其與 PC 遺失或被盜的風險顯著不同，更突出內部的惡意人士所產生的風險。

當使用者在這種攻擊的第一階段後對檔案加密時，將自動使用指定的 DRA 公鑰加密 FEK。攻擊者只需要以管理員身分存取此電腦，就能對隨後使用 EFS 加密的檔案進行完全存取。即使已使用 Syskey 模式 2 或模式 3，也並不能防止這種攻擊，因為攻擊者可以將加密檔案離線備份並還原到其他地方，然後使用 DRA 的私鑰解密檔案。當然，如果有惡意人員可以物理存取電腦，那麼您也可以考慮所有的安全功能都將失效，因為他們也可以在電腦上安裝 Rootkit、特殊軟體，或者硬體鍵盤記錄器等。在惡意攻擊中，這可能比覆蓋 DRA 策略更為有效和全面。

### 恢復

使用 EFS 加密的檔案只能使用匹配之前所用公鑰的 RSA 私鑰解密。使用者的私鑰副本本質上是使用使用者的登入密碼保護。從 Windows 外的其他作業系統（比如 Linux）存取加密的檔案是不可能的 —— 不只是因為目前沒有第三方的 EFS 組件驅動程式。此外，使用特殊工具重設使用者的登入密碼以解密使用者的私鑰和存取使用者的加密檔案也是不可能的。這也意味著使用者有可能導致資料遺失，如果使用者忘記了自己的密碼並且沒有備份加密金鑰。這成就了一個術語 ——「延遲的資源回收筒」，它表示沒有經驗的使用者使用此功能加密檔案似乎會不可避免的在未來遇到資料遺失。

如果 EFS 組態為使用一個公鑰基礎設施簽發的金鑰，並且 PKI 組態為啟用「金鑰存檔和恢復」，可以先恢復私鑰檔案，然後恢復加密檔案。

### 金鑰

* 使用者密碼（或智慧卡私鑰）：用於生成解密金鑰以解密使用者的 DPAPI 主金鑰
* DPAPI 主金鑰：用於解密使用者的 RSA 私鑰
* RSA 私鑰：用於解密每個檔案的 FEK
* 檔案加密金鑰（FEK）：用於解密 / 加密每個檔案的資料（NTFS 主要流）
* SYSKEY：用於加密快取的域驗證和儲存在 SAM 中的密碼雜湊值

## 支援的作業系統

### Windows

* Windows 2000 專業版、伺服器版、進階伺服器版和資料中心版
* Windows XP 專業版、Tablet PC 版、媒體中心版和 x64 版本
* Windows Server 2003 和 Windows Server 2003 R2，包括 x86 和 x64 版本
* Windows Vista 商業版、企業版和旗艦版
* Windows 7 專業版、企業版和旗艦版
* Windows Server 2008 和 Windows Server 2008 R2
* Windows 8 和 8.1 專業版和企業版
* Windows Server
* Windows 10 專業版、企業版和教育版，在家庭版中不可用。

### 其他作業系統

沒有其他作業系統或檔案系統原生支援 EFS。

## 各 Windows 版本可用的新功能

**Windows XP**

* 客戶端側快取（離線檔案資料庫）加密
* 使用廣域公鑰保護 DPAPI 主金鑰備份
* 自動註冊使用者憑證（包括 EFS 憑證）
* 多使用者（共享）存取加密檔案（在檔案的基礎上），在共享加密檔案時檢查憑證吊銷
* 加密檔案可以用另一種顏色顯示（預設綠色）
* 不再需要強制性的「恢復代理」
* 檔案移動到不支援的檔案系統而可能靜默解密時警告
* 密碼重設盤
* EFS 通過 WebDAV，遠端加密 Active Directory 委派的伺服器

**Windows XP SP1**

* 支援並預設對所有 EFS 加密的檔案使用 AES-256 對稱加密演算法

**Windows XP SP2 + KB 912761（頁面存檔備份，存於網際網路檔案館）**

* 防止註冊自簽章的 EFS 憑證

**Windows Server 2003**

* 數位身分管理服務
* 強制執行 RSA 金鑰最小長度設定，對於註冊自簽章 EFS 憑證

**Windows Vista 和 Windows Server 2008**

* 客戶端側快取（離線檔案）分使用者加密
* 支援在一個 PC/SC 智慧卡上儲存使用者或 DRA（資料恢復）RSA 私鑰
* EFS 金鑰更新精靈
* EFS 金鑰備份提示
* 支援從 PC/SC 智慧卡衍生 DPAPI 主金鑰
* 支援加密 pagefile.sys
* 使用 BitLocker（Windows Vista 企業版或旗艦版提供）保護 EFS 相關的私密資訊
* 組策略控制強制執行：
  * 「文件」資料夾的加密
  * 離線檔案加密
  * 加密檔案的索引
  * 使用 EFS 需要智慧卡
  * 從智慧卡建立一個可快取的使用者金鑰
  * 使用者金鑰建立時顯示金鑰備份通知
  * 指定自動註冊 EFS 憑證時使用的憑證模板

**Windows Server 2008**

* 在 Windows Server 2008 伺服器上註冊的 EFS 自簽章憑證將預設使用 2048 位元 RSA 金鑰長度
* 所有 EFS 模板（使用者和恢復代理憑證）預設使用 2048 位元 RSA 金鑰長度

**Windows 7 和 Windows Server 2008 R2**

* 橢圓曲線密碼學（ECC）。Windows 7 支援 ECC 和 RSA 演算法的混合操作模式保證向下相容
* EFS 自簽章憑證在使用 ECC 時將預設使用 256 位金鑰。
* EFS 在使用自簽章 RSA 憑證時可以組態為使用 1K/2k/4k/8k/16k 位金鑰，使用 ECC 憑證時可以使用 256/384/512 位元金鑰。

## 各 Windows 版本使用的演算法

Windows EFS 支援一系列對稱加密演算法，加密檔案時使用的演算法取決於 Windows 版本：

## 參見

* BitLocker
* 資料保護 API
* 磁碟加密
* 磁碟加密軟體
* eCryptfs
* EncFS
* 檔案系統級加密
* 基於硬體全磁碟加密

## 參考資料

## 延伸閱讀

* Implementing the Encrypting File System in Windows 2000. Microsoft. [2014-12-20]. （原始內容存檔於 2015-07-26）.
* Bragg, Roberta. The Encrypting File System. Microsoft. [2017-04-01]. （原始內容存檔於 2017-02-09）.
* Encrypting File System (Windows Server 2008, Windows Vista). Microsoft. 2009-02-25 [2017-04-01]. （原始內容存檔於 2017-08-26）.
* Encrypting File System in Windows XP and Windows Server 2003. Microsoft. 2003-04-11 [2017-04-01]. （原始內容存檔於 2016-11-30）.
* Network Associates Laboratories. How to Use the Encrypting File System (Windows Server 2003, Windows XP Professional). Microsoft. [2017-04-01]. （原始內容存檔於 2017-07-23）.
* Using Encrypting File System. Windows XP Resource Kit. Microsoft. 2005-11-03 [2017-04-01]. （原始內容存檔於 2017-01-06）.
* Encrypting File System. Windows 2000 Resource Kit. Microsoft. [2017-04-01]. （原始內容存檔於 2017-08-26）.
* How EFS Works. Windows 2000 Resource Kit. Microsoft. [2017-04-01]. （原始內容存檔於 2017-02-05）.