Cbc

密碼塊連結密文更改

  • September 19, 2018

我是密碼學的新手。我教授的幻燈片說,CBC 的“缺點:更改的密文只影響兩個塊”。但是,由於我們在加密之前將前一個塊中的密文與目前明文進行異或;在我看來,如果我改變一個密文塊,之後的每個密文塊都會改變。我不明白為什麼這種連鎖反應只會影響兩個區塊。

一種方法是簡單地查看 CBC 解密的通常說明並按照箭頭進行操作。這是來自維基百科的圖:

CBC解密

想像一下,您更改了第一個密文塊。按照箭頭查看明文中將更改的內容:只有兩個塊。

我們也可以用數學公式來做到這一點:CBC模式加密可以描述如下,其中 $ P_n $ 和 $ C_n $ 是 $ n $ th明文和密文塊,分別為:

$$ C_n = Enc(P_n \oplus C_{n-1}) $$ (隨著IV扮演的角色 $ C_0 $ )

因此

$$ P_n = Dec(C_n) \oplus C_{n-1} $$ 結果,如果你改變 $ C_n $ 很清楚 $ P_n $ 和 $ P_{n+1} $ 會受到影響但不會 $ P_{n+2} $ 和下一個街區。

如果您想在實踐中看到這一點,您可能需要進行密碼挑戰,直到挑戰 17。

你知道CBC 模式解密是如何工作的,對吧?所以假設你想解密 $ n $ - 消息中的明文塊。為了能夠做到這一點,您需要知道哪些密文塊?如果其中一個密文塊被改變,比如翻轉其中一個位,會發生什麼?如果任何其他密文塊被更改,會發生什麼?

我建議在這一點上停下來,看看你的教科書(或課程幻燈片,甚至只是上面連結的維基百科頁面),並在進一步閱讀之前嘗試自己弄清楚。這是一個有用的教育練習。


好的,你想清楚了嗎?如果是的話,讓我們看看我的看待它的方式是否與你的一致。如果沒有,請繼續閱讀。

在CBC加密中,每個密文塊是根據相應的明文塊和前一個密文塊(或IV,對於第一個塊)計算的。這意味著如果某個明文塊被更改,該更改將(很自然地)導致相應的密文塊發生更改,這確實也會影響到它之後的下一個密文塊,以此類推一直到消息的末尾.

然而,在 CBC解密中,每個明文塊都是基於相應的密文塊以及前一個密文塊來計算的。 不是前一個明文塊,而是兩個相鄰的密文塊。所以改變 $ n $ -th 密文塊將導致然後 $ n $ -th 和 $ n+1 $ -th 明文塊進行更改,但更改不會進一步傳播,因為其他明文塊都不依賴於任何這些更改的塊。

這種不對稱的一個後果是 CBC 解密可以很容易地並行完成,而 CBC 加密必然是一個不能顯著並行化的串列過程。

另一個後果是修改 CBC 密文塊只會更改其中兩個明文塊,而其他所有內容保持不變。此外,由於 $ n $ -th 密文塊和 $ n+1 $ -th明文塊是通過一個簡單的非密鑰異或操作,通過翻轉一些位來改變密文塊將改變下面的明文塊,即使不知道密鑰的攻擊者也很容易預測。因此,如果攻擊者可以修改密文,則 CBC 模式加密具有足夠的延展性以允許實際攻擊。


對於視覺化,來自 Wikipedia 的這些圖表可能很有用:

CBC模式加密圖。

CBC模式解密圖。

上圖中的箭頭顯示了輸入數據(以及對它的任何更改)如何通過 CBC 加密和解密過程傳播到輸出。

如果您查看第一個(加密)圖中的特定明文塊並按照其中的箭頭,您可以看到它們連接到所有後續密文塊。

但是,如果您從第二個(解密)圖中的特定密文塊開始,您會發現其中的箭頭只指向兩個明文塊,而沒有進一步。並且,從密文塊到兩個明文塊的路徑中只有一個通過塊密碼;另一個沒有,這意味著任何更改沿該路徑從密文傳播到明文的方式不以任何方式依賴於分組密碼密鑰。

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