如果密鑰只使用一次,具有可預測 IV 的 CBC 模式可以嗎?
最近有人告訴我,如果密鑰僅用於加密一次,則使用具有可預測(例如全 0)IV 的 CBC 模式是相當安全的。我已經經歷了幾個針對具有可預測 IV 的 CBC 模式的選擇明文攻擊範例,並且似乎他們假設用於攻擊者加密文本的密鑰與用於被攻擊者加密文本的密鑰相同. 此外,在這種情況下,攻擊者無法控制整個加密的純文字,只能控制其中的一小部分。
那麼,這個人是否正確,是否只使用一次加密密鑰就可以使用可預測的 IV 保險箱,還是存在我沒有看到的問題?
那麼,這個人是否正確,是否只使用一次加密密鑰就可以使用可預測的 IV 安全?
是的,他是對的。
這種攻擊通過攻擊者獲得 CBC 模式的密文來進行,並希望驗證特定明文塊的明文內容。為此,他計算分組密碼的輸入是否正確(以及相應的輸出),並在此基礎上創建一個明文消息,該消息使用可預測的 IV 將該輸入發送到分組密碼. 然後,他要求使用相同的密鑰對該明文消息進行加密。如果相應的密文消息具有預期的輸出塊,那麼他就知道他的猜測是正確的。
如果我們只加密一條消息,那麼他就不能執行這種攻擊——他可以學習原始密文,但是他不能要求用相同的密鑰對第二條消息進行加密。
現在,如果加密器獲取整個明文並對其進行整體加密,並且將完整的密文發送給接收者(和對手),這將成立。如果你以增量方式執行 CBC 模式,例如,你獲取明文的第一部分,加密,發送出去,然後獲取明文的第二部分,然後加密,那麼這是不安全的 - 如果攻擊者可以監聽密文的第一部分,然後(基於此)修改明文的第二部分,他可以實施“可預測的 IV”攻擊——即使它看起來不像你正在發送第二個 IV,因為CBC模式是如何工作的,你實際上是。
此外,在這種情況下,攻擊者無法控制整個加密的純文字,只能控制其中的一小部分。
沒關係 - 即使攻擊者擁有任意控制權,它仍然是安全的。例如,如果對手可以指定除一位之外的整個消息,他仍然無法了解那一位是什麼。
那麼,這個人是否正確,是否只使用一次加密密鑰就可以使用可預測的 IV 安全?
不,他至少在學術上是不正確的。在某些情況下實際上。
這是因為所謂的多目標攻擊。假設 $ b $ -位鍵,和 $ k $ 使用隨機密鑰(因此 $ k $ 已知公共(或選擇的)第一個塊的密文) $ P_0 $ 明文(例如有效載荷的相同開頭),存在具有預期成本的所謂多目標攻擊 $ 2^{b-1}/k $ 恢復一個完整明文的加密,即 $ k $ 比隨機 IV 快幾倍。這種攻擊只是列舉密鑰,加密已知的固定 $ \text{IV}\oplus P_0 $ ,並在所有第一個密文塊的表中搜尋結果(可以優化為僅花費一次記憶體訪問的成本)。
即使滿足*“已知的公共(或選擇的)第一個明文塊”*條件,這種攻擊在實踐中對於隨機 128 位或更大的密鑰也很少是災難,即使對於非常大的密鑰也是如此 $ k $ (在某些實際情況下,這將是數百萬,例如會話密鑰)。這是因為儲存和訪問必要的表實際上具有不可忽略的成本(投資和電力)。很難想像我們對使用 ASIC 的攻擊者失去了超過 20 位的安全性,這是通過蠻力對 128 位密鑰進行此類攻擊的最合理方法。但是,如果密鑰確定性地從密碼中派生出來,那麼問題可能是毀滅性的,甚至有上千個密碼被使用。