Block-Cipher

為什麼 CBC 需要 MAC?

  • September 25, 2016

我同意對於某些加密系統或操作模式,MAC 是必不可少的。

最好的例子可能是流密碼(因此也是 OFB 或 CTR 模式下的塊密碼),它允許攻擊者任意翻轉密文中的位,從而在解密後在明文中的相同位置翻轉位。

但是,不知何故,我一直認為這不適用於某些合理操作模式下的“現代”分組密碼,例如 AES-CBC。由於密文中的位和明文中的位之間沒有明確的關係,我認為任何小的修改都會導致完全不同的明文。

考慮到這一點,我認為只需將明文與一些簡單的校驗和連接起來就足夠了,以檢查這種篡改;對我來說,加密雜湊甚至都沒有必要。

但實際上,AES-CBC 的幾乎所有合理應用似乎也都在使用 MAC,所以我幾乎可以肯定我的推理中存在錯誤。

要了解為什麼 CBC 模式仍然需要 MAC 來保證消息完整性,首先回顧一下 CBC 模式解密的工作原理:

$$ P_i = D_K(C_i) \oplus C_{i-1} $$ 這裡, $ D_K $ 表示使用密鑰進行分組密碼解密 $ K $ , 和 $ C_i $ 和 $ P_i $ 表示 $ i $ -th 密文和明文塊。

現在,考慮如果您修改加密消息以替換會發生什麼 $ C_i $ 和 $ C_i’ = C_i \oplus X $ 對於一些 $ i $ . 現在,對應的明文塊 $ P_i’ $ 會出現亂碼,因為 $ D_K(C_i’) $ 通常不會有可預測的相似之處 $ D_K(C_i) $ . 然而,下一個明文塊 $ P_{i+1}’ $ 現在將成為

$$ P_{i+1}’ = D_K(C_{i+1}) \oplus C_i’ = D_K(C_{i+1}) \oplus C_i \oplus X = P_{i+1} \oplus X. $$ 因此,即使使用 CBC 模式,您仍然可以翻轉任何給定明文塊中的任意位,前提是您不介意前一個明文塊出現亂碼。這是否實際可行取決於明文應該是什麼,但假設它不是通常是不安全的。

當然,由於亂碼塊通常基本上是隨機的,並且攻擊者無法預測,因此簡單的非加密校驗和可以檢測到這種修改似乎是合理的。但是,攻擊者能夠預測並非完全不可信 $ D_K(C_i’) $ , 因此 $ P_i’ $ :例如,如果攻擊者可以訪問一些已知的密文/明文消息對,這會為他們提供一堆塊,其圖像在 $ D_K $ 是已知的。如果他們選擇 $ C_i’ $ 成為這樣的街區之一,他們將能夠預測 $ P_i’ $ ,如果他們也能猜出原始明文塊 $ P_i $ ,他們可能能夠欺騙許多非加密校驗和。

(特別是,如果 IV 與消息一起發送 - 通常是這樣 - 翻轉第一個明文塊中的位特別容易通過翻轉 IV 中的相應位來完成。因此,對於第一個塊,CBC 模式只是與 CTR 或 OFB 一樣具有延展性。)

所有這一切的底線是,如果你想保護你的消息的完整性,你需要使用一種實際上被設計成可證明不可延展的加密模式。除了經典分組密碼模式和 MAC 的通用組合外,還存在幾種專門為此目的設計的認證加密模式。

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