Cbc
密碼區塊鏈續初始化向量
假設 Alice 和 Bob 之間的通信會話(在我的例子中是客戶端和伺服器)。Alice 使用安全隨機生成器生成密鑰和 IV,以便在 CBC 模式下與 AES 一起使用。
Alice 通過“安全通道”(正在使用 RSA)將密鑰(和 IV)與使用這些參數加密的消息一起發送給 Bob。
Bob 對消息進行解密,並希望將消息發回,顯然使用相同的接收到的會話密鑰。當我使用頻寬受限的通道工作時,節省的每個字節都是一個勝利。
鑑於這是 CBC 的工作方式,Bob 可以使用最後一個 AES 密文塊作為其傳輸的初始化向量嗎?
如果不是,為什麼不呢?如果是這樣,假設一個完美的無損通道,我可以繼續使用這種方法進行連結嗎?
額外的問題:如果它有效,是否可以將其應用於其他塊模式?
鑑於這是 CBC 的工作方式,Bob 可以使用最後一個 AES 密文塊作為其傳輸的初始化向量嗎?
這有一個已知的漏洞;如果攻擊者可以說服 Bob(或 Alice,在她的下一條消息中)以攻擊者選擇的塊開始回复消息,那麼攻擊者可以使用它來形成加密預言機(然後可以使用該加密預言機解密低-熵明文塊)。
這對 CBC 本身來說不是問題。它假設 Alice(或 Bob)預先選擇消息,然後將其提供給 CBC 模式加密引擎。攻擊者應用此漏洞需要送出的明文塊取決於前一個密文塊;由於在選擇塊時中間連結值是未知的,因此這不適用。但是,在您的情況下,攻擊者可能能夠看到整個先前的加密塊,因此將最後一個密文塊重用為下一個 IV 可能會導致此問題。
根據 Alice 和 Bob 形成消息的方式,這可能不適用於您的案例;然而,無論如何避免這種可能性似乎是謹慎的。
有幾種方法可以解決這個問題:
- 以一種依賴於 Alice 和 Bob 都知道(但顯然攻擊者不知道)的密鑰的方式生成下一個 IV;例如,消息的 IV $ n $ 可能通過 $ \text{AES}_k(n) $
- 使用最後一個密文塊,但以某種方式處理它(以依賴於密鑰的方式);例如,設置 $ IV = \text{AES}_k( \text{LastCiphertextBlock} ) $
至於其他分組密碼模式如何工作,這取決於實際模式。