Encryption

如果密鑰已知,可以解密 CBC 密文,但不知道 IV?

  • April 16, 2020

假設有一個在 CBC 模式下使用 AES 加密的二進製文件(即使用密鑰和初始化向量)。如果知道密鑰,但不知道 IV,那麼完全解密文件是否容易?

有多難?

使用 CBC(密碼塊連結)模式,在加密之前,每個塊與前一個塊的密文進行異或運算,以隨機化塊密碼的輸入(並避免使用相同的密鑰對同一塊進行兩次加密,因為這會給出相同的輸出,並告訴攻擊者一些關於明文的資訊)。由於第一個塊沒有前一個塊,這裡將使用初始化向量。

在解密時,我們將塊密碼應用於每個密文塊,然後將結果與前一個密文塊(或第一個塊的初始化向量)進行異或。

由於所有密文塊都是已知的,並且我們擁有密鑰,因此我們可以可靠地解密除第一個塊之外的所有內容,即使沒有給出或給出錯誤的初始化向量。

對於第一個塊,我們實際上根本沒有任何資訊,沒有初始化向量,除了它與任何其他塊具有相同的長度(AES 為 16 字節):通過提供擬合 IV 可以達到每 16 字節的明文. 幸運的是(或不幸的是,取決於您的觀點),在許多文件格式中,前一些字節是固定的(或幾乎是固定的,或者可以根據文件的其餘部分猜測)。

因此,對於 CBC 模式,如果攻擊者知道密鑰,秘密初始化向量幾乎不會提供任何保護。

這通常適用:協議依賴於密鑰是秘密的,而初始化向量通常可以是公開的,甚至通常與密文一起傳輸。

在 CTR 模式下,一個秘密初始化向量(稱為“nonce”)實際上將有助於保持明文的秘密 - 但如果攻擊者甚至可以猜到一個明文塊(並且具有相應的密文塊),他可以(給定鍵)計算相應的計數器值,並由此計算隨機數。不要讓攻擊者擁有密鑰。

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