Encryption

在 AES 中使用相同的 IV 是否類似於首先不使用 IV?

  • March 24, 2019

因此,如果我了解 IV 如何與 AES 一起使用,我應該為每條消息生成不同的 IV,因為僅使用一個密鑰,如果消息被加密兩次(這不安全),我將獲得相同的加密,因此我們使用IV 是某種鹽(一些隨機字節添加到加密消息中,因此具有相同值的 2 條消息不會具有相同的加密)。

現在我的問題是,對我的所有消息使用相同的 IV 與根本不使用 IV 相同嗎?還是稍微好一點?

讓我看看我是否可以為你澄清事情。

一方面,IV 與 AES 沒有特別的關係。AES 是從 128 位值到 128 位值的鍵控可逆變換;這就是它所能做的。現在,如果您碰巧有一個 128 位值,您希望將其“加密”為 128 位密文,那麼您可以按原樣使用 A​​ES。

但是,我們通常想要除此之外的其他事情;我們可能有不完全是 128 位長的明文;我們可能想要非確定性加密(所以如果我們加密相同的值兩次,我們這樣做並不明顯);我們可能還需要對密文進行完整性檢查。

為了讓我們做這些事情,我們使用了一種操作模式;這是一種使用 AES(或其他分組密碼)來執行這些更普遍有用的操作的結構。正是這些操作模式可能(並非全部)需要靜脈注射。

目前最流行的操作模式是CBC和GCM;他們對 IV 的要求也非常不同。

因此,在這種情況下,我將回答您的問題:

我應該為每個 msg 生成不同的 IV,因為如果消息被加密兩次,我將獲得相同的加密

這不是完整的故事。是的,如果您使用相同的 IV、相同的消息和相同的密鑰(以及 GCM 的相同 AAD),您將獲得相同的密文,但這不是全部原因。

對於CBC,如果使用相同的IV,有兩個潛在的問題;一是你會洩露這兩個明文是如何相關的。例如,如果兩個明文的前 16 個字節相同,而後 16 個字節不同,這對攻擊者來說是顯而易見的。另一個是如果攻擊者可以預測IV(如果你重複使用相同的IV,他可以),並且如果他可以引入自己的明文(在某些情況下可能會發生),那麼他可以使用加密操作作為oracle(從而推導出由相同密鑰加密的低熵明文塊的值)。

對於 GCM,如果使用相同的 IV,則存在兩個不同的潛在問題(兩者都嚴重得多);一方面,他可以推斷出兩個明文的按位異或(這通常足以讓他推斷出這些明文)。更糟糕的是,它允許攻擊者推斷內部身份驗證值,從而允許他修改密文(以及由此產生的明文)而不被檢測到。

現在我的問題是,對我的所有消息使用相同的 IV 與根本不使用 IV 是一樣的嗎?還是稍微好一點?

好吧,對於這兩種模式,您都沒有“不使用 IV”的選項;當您執行 CBC 或 GCM 操作時,必須有一個 IV(對於 GCM,您可以有一個零長度的 IV;這與“沒有 IV”不太一樣)。

而且,你沒有問,但我還是會陳述一般智慧:

  • 對於 CBC 模式,IV 對於對手來說確實應該是不可預測的。現在,您可以每次隨機選擇它,或者您可以使用(例如)具有相同密鑰的 AES 加密操作來生成它(攻擊者無法預測,因為他沒有密鑰);兩者都有效。
  • 對於 GCM 模式,IV 是否對對手來說是可預測的並不重要。關鍵是你每次都使用不同的。如果您可以管理一個計數器(例如,如果您重新啟動程序,您將選擇一個新密鑰),那麼對於您的第一條消息使用 IV=0,對於您的第二條消息使用 IV=1,等等,是顯而易見的方法。

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