Encryption

在 AES-CBC 中重用 IV 會削弱它嗎?

  • July 21, 2021

據稱, Rsynccrypto使用了 AES-CBC 的一個扭曲:如果明文的最後幾個字節滿足條件*,則停止,填充目前塊並在重用 IV 時從文件中的目前位置開始加密新塊。更好的例子可能是虛擬碼:

if (trigger(buffer, i)) {
 encrypt_next_block(buffer, i);
 init_encryption(iv);
} else if(is_block_boundary(i)) {
 encrypt_next_block(buffer, i)
}

你可以在這裡查看程式碼

這會以某種方式削弱加密嗎?如果是這樣,怎麼做?

** 確切的條件是最後 8196 字節的總和 mod 4096 等於 0。*

我們甚至不必仔細分析其 CBC 模式的變體。rsyncrypto 的網頁說明了一切:

此修改確保兩個幾乎相同的文件,例如更改之前和之後的相同文件,當使用 rsyncrypto 和相同密鑰加密時,將產生幾乎相同的加密文件

無論他們在做什麼(重用 IV 等),並假設他們實際上成功實現了既定目標,他們顯然會洩露一些關於明文的相似性資訊。所以:是的,它們削弱了 CBC 模式,當正確使用時,它不會洩露任何關於明文(長度除外)的資訊。


關於 CBC 的特定變體:CBC 維護一個塊到塊的連結值。最初,連結值設置為 IV,對於後續塊,連結值是密文塊。顯然,當滿足某個條件時,它們會將連結值重置為原始 IV。

眾所周知,在 CBC 模式下重用 IV 會洩漏明文公共前綴的長度。換句話說,如果第一個 $ k $ 塊 $ M $ 和 $ M’ $ 是相同的,那麼第一個 $ k $ 塊 $ \textsf{CBC}_k(IV,M) $ 和 $ \textsf{CBC}_k(IV,M’) $ 將是相同的。有可能表明這是唯一泄露的明文資訊。(這是假設隨機 IV;如果對手可以預測/選擇 IV,則可能會洩露更多資訊)。

同樣的推理也適用於這個 CBC 變體。假設 IV 僅用於一種加密(但連結值可能會在該加密期間重置為該 IV),密文會在任何這些“IV-reset”步驟之後洩漏公共前綴。因此,查看密文並看到塊 12、13、14 等於塊 22、23、24 的竊聽者可以得出結論,明文塊 11 和 21 一定導致了 IV 重置,並且另外明文塊 12、13、14 等於明文塊 22,23,24。

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