PDF 加密解析:RC4 vs AES-128 vs AES-256
PDF 加密是套用至 PDF 內容流的密碼學保護,使檔案無密碼無法讀取。PDF 規範在其歷史中支援多個演算法,並非所有都仍安全。本頁解釋每個演算法做什麼、哪個 PDF 版本引入它,以及你今天保護檔案時應選擇哪個。
機制
PDF 加密如何運作
當 PDF 寫入器加密檔案時,它產生隨機的檔案加密金鑰,用此金鑰加密內容流(和檔案中某些其他字串),然後將檔案加密金鑰儲存在由使用者密碼保護的加密字典中。要開啟檔案,檢視器索取密碼、從中衍生金鑰、用此金鑰解密檔案加密金鑰,再用檔案加密金鑰解密內容。
重要後果:密碼不儲存在檔案中。儲存的是用密碼加密的值。要驗證密碼,檢視器嘗試解密此值並將結果與已知明文標記比較。這就是為什麼沒有密碼恢復 — 檔案不包含密碼,只包含被它鎖住的東西。
演算法
RC4 — 過時且已破解
RC4 是 1987 年設計的流加密,在 90 年代廣泛使用(PDF、SSL、WEP)。PDF 1.2 引入 40 位元 RC4;後續版本擴展到 128 位元 RC4。RC4 現在在 PDF 中已過時且對現代安全用途視為已破解。具體而言:
- 40 位元 RC4 在現代硬體上可被暴力輕易破解。
- 128 位元 RC4 無法被暴力破解,但 RC4 有洩漏明文資訊的統計偏差,且已發表多個對 RC4 加密 PDF 的實際攻擊。
- 現代檢視器在某些設定下會警告或拒絕開啟以 RC4 加密的檔案。
不要用 RC4 建立新的加密 PDF。如果你遇到一個,解密它(用密碼)並用 AES-128 或 AES-256 重新加密。
演算法
AES-128 — 強健,廣受支援
AES-128 於 PDF 1.5(2003,Acrobat 6/7)引入。AES 是區塊加密;AES-128 使用 128 位元金鑰。PDF 的 AES 模式使用 CBC,每個字串帶 16 位元組隨機初始化向量。AES-128 沒有針對它的實際攻擊,且廣受所有現代 PDF 檢視器支援。在 AES-256 不可用時是合理預設。
演算法
AES-256 — 當前標準
AES-256 於 PDF 1.6 Extension Level 3(2008,Acrobat 9)引入。它使用 256 位元金鑰,在原始 PDF 1.6 Ext Level 3 設計中用 SHA-256 從密碼衍生金鑰。後續修訂(PDF 2.0 / Extension Level 8)新增更強的金鑰衍生,使用 PBKDF2 搭配多次迭代,使暴力破解困難得多。這有時稱為「AES-256 R6」或「Acrobat X 相容性」。
只要你的工具提供就偏好 AES-256。如果你能在舊和新的金鑰衍生間選擇,選擇新的(基於 PBKDF2)。
歷史
哪個 PDF 版本引入了哪個演算法
- PDF 1.2(1996) — RC4 40 位元。
- PDF 1.3(1999) — RC4 128 位元。
- PDF 1.5(2003) — AES-128(V4,R4)。
- PDF 1.6 Ext Level 3(2008) — AES-256(V5,R5)。
- PDF 2.0 / Ext Level 8(2017) — AES-256 搭配 PBKDF2 金鑰衍生(V5,R6)。
實務
選擇哪個演算法
對新檔案:如果簽署者和收件者檢視器支援,用AES-256 搭配 PBKDF2 金鑰衍生(R6);否則用AES-128。絕不為新檔案選擇 RC4。密碼比演算法更重要:AES-256 上的 6 字元密碼比 AES-128 上的 20 字元隨機密碼弱,因為攻擊面是密碼,非加密。
要開啟舊檔案:任何現代檢視器都能處理三者。如果你控制檔案,解密並用 AES-256 重新加密。
有用的健全檢查:保護 PDF 後,嘗試在與加密所用不同的檢視器中開啟。如果第二個檢視器能無警告開啟,加密大致相容。如果只有原始工具能開啟,你可能用了非標準模式。
IXPDF
IXPDF 目前的加密能力
繼續閱讀