Hash

為什麼plain-hash-then-encrypt 不是安全的 MAC?

  • December 11, 2019

似乎即使在像 SSL 這樣的 MAC-then-encrypt 系統中,也使用了像 HMAC 這樣的東西,而不是普通的雜湊。為什麼?

假設我們使用一些流密碼;那我們為什麼不能使用 $ Encrypt(m | H(m)) $ 作為消息的 MAC-then-encrypted 版本?假設之間沒有不良關係 $ Encrypt $ 和 $ H $ ,可能的弱點是什麼?似乎在這種情況下,我們正在使用秘密密鑰流密碼 keystream 的一部分對雜湊進行加密,並且雜湊是安全的;這不符合理想 MAC 的近似值嗎?

這一定很糟糕,因為似乎沒有安全協議使用它。為什麼?

$ \operatorname{Encrypt}(m|H(m)) $ 不是提供認證的操作模式;在一些非常真實的情況下,偽造是可能的。根據所使用的加密,可以假設只有已知的明文。

這是一個簡單的例子 $ \operatorname{Encrypt} $ 流密碼,包括 CTR 或 OFB模式下的任何分組密碼。Mallory 想要為某些消息偽造一個身份驗證器 $ m $ 他的選擇。

  1. 馬洛里截獲密碼 $ \operatorname{Encrypt}(m_0|H(m_0)) $ 形式的 $ IV|C_0 $ , 和 $ m_0 $ 已知且至少大小為 $ m $ ; $ C_0 $ 是大小 $ m_0|H(m_0) $ 以及後者與密鑰流的異或 $ K $ 的功能 $ IV $ .
  2. 馬洛里計算 $ K $ 作為 $ C_0\oplus(m_0|H(m_0)) $ , 截斷為 $ m|H(m) $ 如果 $ m $ 短於 $ m_0 $ .
  3. 馬洛里計算 $ C=(m|H(m))\oplus K $ .
  4. 馬洛里將密碼替換為 $ IV|C $ ,它將通過接收者的認證檢查,並解密為 $ m $ .

另一個例子:假設 $ \operatorname{Encrypt} $ 是 CBC、CFB 或 OFB 模式下的 AES,具有隨機 $ IV $ ; 和 $ H $ 是 SHA-256。Mallory 想要為某些消息偽造一個身份驗證器 $ m $ 他的選擇,大小 $ s $ 16 字節的塊(AES 的塊大小)。

  1. 馬洛里計算 $ m_1=m|H(m) $ , 的 $ s+2 $ 塊。
  2. 馬洛里設法插入 $ m_1 $ 進入一些資訊 $ m_0|m_1|m_2 $ 由 AES 密鑰的合法持有者發送,該持有者選擇 $ m_0 $ 和 $ m_2 $ , 和 $ m_0 $ 非空且大小是 Mallory 已知的塊大小的倍數。
  3. 馬洛里截獲密碼 $ IV|C $ .
  4. 從 $ C $ 馬洛里比在 $ m_0 $ ; 保持下一個塊,形成 $ \widetilde{IV} $ ; 然後下一個 $ s+2 $ 塊,形成 $ \widetilde{C} $ .
  5. Mallory 將密碼替換為 $ \widetilde{IV}|\widetilde{C} $ ,它將通過接收者的認證檢查,並解密為 $ m $ .

這種情況並不牽強:如果馬洛里能夠在 CD-ROM 映像中選擇某個文件,就像他假裝將宣傳的電影一樣,那麼他可以製作一個經過加密和驗證的假 CD-ROM 映像,它將顯示為真實的 CD-ROM 映像並破譯馬洛里任意選擇的內容。

如果 $ m_0 $ 可以為空(不太現實),一個更簡單的攻擊有效: $ \widetilde{IV} $ 是 $ IV $ , $ \widetilde{C} $ 是第一個 $ s+2 $ 塊 $ C $ .


問題的標題詢問是否 $ \operatorname{Encrypt}(m|H(m)) $ 是一個安全的 MAC,這對於Vulcan意味著 $ \operatorname{Encrypt}(m|H(m)) $ 附加到 $ m $ 清楚地發送。這也不提供身份驗證,並且屈服於上述的瑣碎變體。

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