Encryption

使用 CBC 時的完整性

  • September 26, 2021

我們有一個要使用 CBC 加密的正文,我們在該正文的兩側添加一個已知文本塊。newBody = body + knownBlock 現在我們使用雙方都知道的密鑰對 newBody 進行加密,然後我們將加密的文本通過電線傳輸給 B 人。 cipherText = encrypt_using_cbc(newBody) 如果人 b 解密 cipherText 並獲得相同的最後一個塊,他能信任他解密的數據(數據完整性)?

不會。破壞 CBC 加密消息中的塊的中間人可以在下一個塊中“重新排列”。

讓 $ E $ 是塊加密函式。讓 $ P_1, P_2, P_3 $ 是三個數據塊。CBC加密 $ P_1 || P_2 || P_3 $ 與 IV $ C_0 $ 是 $ C_0 || C_1 || C_2 || C_3 $ 在哪裡 $$ \begin{align} C_1 &= E(P_1 \oplus C_0) \ C_2 &= E(P_2 \oplus C_1) \ C_3 &= E(P_3 \oplus C_2) \ \end{align} $$ 讓 $ M $ 是一個非零塊。讓我們在第二個明文塊中插入這個擾動: $ C_2 = E((P_2 \oplus M) \oplus (C_1 \oplus M)) $ . 發送密文 $ (C_1 \oplus M) || C_2 || C_3 $ . 它解密為 $ P’_1 || (P_2 \oplus M) || P_3 $ . “校驗值” $ P_3 $ 是相同的,但前兩個塊已損壞。攻擊者可以在不知道密鑰或任何其他明文/密文對的情況下對已知明文塊應用任意更改,只要他們不介意以他們無法控制的方式破壞前一個塊。

在最後一個塊中使用數據的散列也不安全

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