Encryption

為什麼具有可預測 IV 的 CBC 被認為對選擇明文攻擊不安全?

  • April 14, 2020

我剛剛了解到,將 CBC 加密與可預測的 IV 一起使用是不安全的。

據我了解,使用某些純文字,然後猜測它使用的 IV,攻擊者可以驗證他猜測的 IV 是否正確。這如何被視為攻擊?

CBC IV 攻擊的作用遠不止於此。

如果我猜出與我以前見過的*任何密文塊相對應的明文,並且可以預測未來的 IV,我可以通過送出一條合適的消息來驗證我的猜測,以使用該 IV 加密。*顯然,如果我知道明文是“是”或“否”,並且只需要找出它是哪一個,那可能會很糟糕。

更具體地說,例如, BEAST 攻擊允許恢復 Web 瀏覽器通過 HTTPS 發送的 cookie。它的工作方式是(或多或少)首先說服瀏覽器發送一個 HTTPS 請求,其中塊邊界位於 cookie 中的第一個未知字節之後(例如,通過調整請求 URL 的長度)並攔截密文.

所以現在你有一個你知道對應的密文塊,比如說,字元串Cookie: secret=X,其中X是一個未知字節。現在您使用 CBC IV 攻擊來測試所有可能的值X並找到正確的值。然後你用一個短一個字節的 URL 重複這個過程,這樣你就得到一個對應於 的密文塊ookie: secret=XY,你現在知道X但還不知道Y。然後繼續重複該過程,直到您逐字節恢復整個 cookie。

有關更多詳細資訊,請參閱相關問題的此答案

如果您的 IV 是可預測的,那麼這與假設您有一個零向量 IV 一樣(不)安全。

零向量 IV 允許您執行所謂的自適應選擇明文攻擊(ACPA)。

為什麼?

假設您有一個在 CBC 模式下工作的加密機制。這意味著,在第一次迭代中 $ IV $ 與您的輸入消息(只有一個塊的大小)進行異或,然後加密。在接下來的迭代中,使用先前加密塊的輸出而不是 $ IV $ .

如果我們可以預測 $ IV $ 那將被使用,然後我們可以 XOR 我們的消息 $ x $ 接著就,隨即 $ IV $ 在將其放入 CBC 事物之前。然後,CBC-thing 將使用相同的(猜測的)異或我們的消息 $ IV $ 再次。

$ (x \oplus IV) \oplus IV = x $

有了這些知識,我們可以推斷出我們的 CBC 模式加密的行為,就好像 IV 不存在或為零向量一樣。

這在您只考慮 CBC 機制的最終輸出很重要的情況下尤其重要或有意義,這是CBC-MAC(使用 CBC 模式中使用的分組密碼構造的 MAC)的情況。

如果您能夠以可預測的方式將一些測試塊發送到某些 MAC 功能 $ IV $ 並收到響應,您可能能夠為特定消息生成有效的 MAC,而無需知道密鑰,也無需送出此消息進行身份驗證。

請注意,MAC 通常僅由密鑰所有者為他批准的消息生成。如果您可以欺騙密鑰所有者為您驗證一些明顯隨機的數據塊,那麼他的 MAC 是可攻擊的。

小例子,我們假設加密函式的塊大小五 (5) 個字元長(用於展示目的):

場景:假設密鑰所有者願意使用他的 CBC-MAC 為您驗證任何奇怪的數據,但在任何情況下他都不想驗證消息“HelloWorld”。因此,攻擊的目標是從密鑰所有者那裡獲得足夠的知識,以便為消息“HelloWorld”生成 MAC。當然不用偷鑰匙或用橡皮管砸他。

以下是它的工作原理:

**1.)**正確猜測 $ IV_1 $ . 這在某種程度上是可選的,見下文。它可能使理解攻擊更容易,但通常 CBC-MAC 會發布使用過的 $ IV $ 和 MAC 一起,因為這兩個參數都需要稍後進行驗證。一個 $ IV $ 因此,如果攻擊者想要中和 $ IV $ ,這就是我們將在步驟 3 中執行的操作。

**2.)**發送字元串 $ s_1 $ =“你好”(與 $ IV_1 $ ) 到 CBC-MAC 函式並接收或讀取生成的加密數據 $ y_1 $ ,在這種情況下也是 MAC $ m_1 $ 為了 $ s_1 $ 萬一 $ IV $ 是零向量或 $ s_1 \oplus IV_1 $ . 如果中和 $ IV $ 這解決了單個塊的加密 $ s_1 $ 沒有任何 $ IV $ .

$ MAC(s_1 \oplus IV_1) = y_1 = m_1 = encrypt_K(s_1) $

或者

$ MAC(s_1) = y_1 = m_1 = encrypt_K(s_1 \oplus IV_1) $

**3.)**猜下一個 $ IV_2 $ . 這真的中和了不需要的 $ IV $ 而是模擬前一個塊的連結,我們實際上沒有。=> 攻擊的核心!

**4.)**發送字元串 $ s_2 $ =“世界”與 $ IV_2 $ 並與 $ m_1 $ 到 CBC-MAC-Function 並接收結果數據 $ y_2 = m_2 $ . 異或 $ s_2 $ 和 $ IV_2 $ 中和了 $ IV $ CBC機制和XORing $ m_1 $ 模擬來自前一個塊“Hello”的密碼塊連結。

$ MAC(s_2 \oplus IV_2 \oplus m_1) = y_2 = m_2 $

**5.)**消息“ HelloWorld ”的 MAC 是 $ m_2 $ 如果 $ IV $ 在驗證時設置為零向量(因為 $ m_1 $ 是“你好”的 MAC,帶有中和的 $ IV $ )。或者,如上所述,如果有人會找到一個零向量 $ IV $ 長相奇特的人不能異或 $ s_1 $ 和 $ IV_1 $ 在步驟 1 中,而是儲存 $ IV_1 $ 供以後在驗證步驟中使用。

記住:塊大小是五個字元,HelloWorld 是兩個塊。

由於 IV 是沿著 MAC 發送以進行驗證,因此攻擊者在不知道密鑰且未將此消息(“ HelloWorld ”)送出給 MAC 函式進行身份驗證的情況下為兩個連接塊(“Hello”、“World”)建構了一個有效的 MAC .

我希望我能為你提供一個關於可預測問題的好例子 $ IV $ 在選擇明文攻擊的情況下。

更新:附帶說明,並準確回答您的問題:您可以驗證猜測的 $ IV $ 通過與測試塊進行異或是正確的 $ IV $ 並將其發送到 CBC 機制。然後用另一個正確猜測的 IV 再次重複該操作。如果兩個結果輸出相等,則猜測的 IV 是正確的。如果不是第一個或第二個或沒有 $ IV $ 被猜對了。

重要的是要理解,尤其是在 CBC-MAC 的情況下, $ IV $ 不是靜態配置,而是機制在每次呼叫時選擇的隨機值。

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