Pgp

對 PGP 的選擇密文攻擊仍然可能嗎?

  • May 20, 2016

2002 年的一篇論文(pdf) 中,Jallad 等人利用分組密碼在 PGP 下使用的 CFB 模式描述了對 PGP 的選擇密文攻擊。這是一次毀滅性的攻擊。

這種攻擊在 2016 年仍然可行還是 PGP 做出了改變?

RFC 4880、OpenPGP(已被 2002 年更新的 RFC 2440 取代)包含關於安全考慮的一章,其中還討論了 Jallad 等人描述的解密 oracle 攻擊:

2002 年夏末,Jallad、Katz 和 Schneier 發表了對 OpenPGP 協議及其一些實現的有趣攻​​擊

$$ JKS02 $$. 在這種攻擊中,攻擊者修改消息並將其發送給使用者,然後使用者將錯誤解密的消息返回給攻擊者。因此,攻擊者將使用者用作隨機預言機,並且通常可以解密消息。 壓縮數據可以改善這種攻擊。錯誤解密的數據幾乎總是以能夠擊敗攻擊的方式解壓縮。但是,這不是一個嚴格的修復程序,並且會留下一些小漏洞。例如,如果一個實現在加密之前沒有壓縮消息(可能是因為它知道它已經被壓縮),那麼該消息是易受攻擊的。由於這種偶然性——修改攻擊可以被解壓縮錯誤阻止——實現應該將解壓縮錯誤視為安全問題,而不僅僅是數據問題。

這種攻擊可以通過使用修改檢測來擊敗,前提是該實現不會讓使用者天真地將數據返回給攻擊者。實現必須將 MDC 故障視為安全問題,而不僅僅是數據問題。

在任何一種情況下,實現都可以允許使用者訪問錯誤的數據,但如果數據返回給發送者,必須警告使用者潛在的安全問題。

雖然這種攻擊有點模糊,需要一組特殊的環境來創建它,但它仍然非常嚴重,因為它允許某人欺騙使用者來解密消息。因此,重要的是:

  1. 實施者將 MDC 錯誤和解壓縮失敗視為安全問題。
  2. 實施者以應有的速度實施修改檢測並鼓勵其傳播。
  3. 使用者以應有的速度遷移到支持修改檢測的實現。

因此,引入了 OpenPGP 數據包“Sym. Encrypted Integrity Protected Data Packet (Tag 18)”“Modification Detection Code Packet (Tag 19)”,共同形成了一個修改檢測系統(這是 Jallad 等提出的緩解措施)人):

非規範性解釋

創建 MDC 系統(稱為數據包 18 和 19)是為了提供一種完整性機制,該機制不如簽名強,但比裸 CFB 加密強。

CFB 加密的一個限制是,對密文的破壞會破壞受影響的密碼塊和後面的塊。此外,如果從 CFB 加密塊的末尾刪除數據,則無法檢測到該刪除。(另請注意,CBC 模式也有類似的限制,但從模組前面刪除的數據是不可檢測的。)

$$ … $$

至少 GnuPG 預設使用這些數據包,您可以通過gpg --list-packets或進行驗證pgpdump

$ echo "foo" | gpg --recipient a4ff2279 --encrypt | pgpdump
Old: Public-Key Encrypted Session Key Packet(tag 1)(524 bytes)
   New version(3)
   Key ID - 0xCC73B287A4388025
   Pub alg - RSA Encrypt or Sign(pub 1)
   RSA m^e mod n(4093 bits) - ...
       -> m = sym alg(1 byte) + checksum(2 bytes) + PKCS-1 block type 02
New: Symmetrically Encrypted and MDC Packet(tag 18)(63 bytes)
   Ver 1
   Encrypted data [sym alg is specified in pub-key encrypted session key]
       (plain text + MDC SHA1(20 bytes))

在 GnuPG 中,您可以通過選項強制使用新數據包--force-mdc(也可以在 中永久應用gpg.conf)。來自man gpg

通過修改檢測程式碼強制使用加密。這始終與較新的密碼(塊大小大於 64 位的密碼)一起使用,或者如果所有接收者密鑰都在其功能標誌中指示 MDC 支持。

引用自:https://crypto.stackexchange.com/questions/35431