Mac

不知道密鑰的 MAC 攻擊

  • April 27, 2018

不需要發現密鑰的 MAC 攻擊是可能的。考慮以下 MAC 算法。讓 $ M=(X_1\mathbin|\dots\mathbin|X_m) $ 是被視為 64 位塊的串聯的消息 $ X_i $ . 然後定義: $ \Delta(M) = X_1 \oplus\dots\oplus X_m $ 和 $ C_k(M) = E_k[\Delta(M)] $ 在哪裡 $ \oplus $ 是異或運算,加密算法是ECB模式下的DES。因此密鑰長度為 56,MAC 長度為 64 位。

攻擊者如何在不知道加密密鑰的情況下破壞系統?

嘗試解決此類更簡單問題的一種方法是將它們寫成方程並對其進行代數。在這種情況下,讓我們從您的評論中獲取此聲明和答案:

對手現在可以連接新消息,其中包括 $ Y_1 || \dots || Y_m $ 與原始 MAC 形成一個消息,該消息將被接收者接受為真實的。

所以這就是說以下等式是正確的:

$$ C_k(Y_1 || \dots || Y_m) = C_k(X_1 || \dots || X_m) $$ 但這是真的嗎?我們可以測試這一點的一種方法是使用方程定律(如在代數中)一遍又一遍地重寫這個定律,看看它是否與我們可以獨立判斷為真的其他方程具有相同的真值。

通過應用定義 $ C_k(M) = E_k(\Delta(M)) $ 在第一個方程的兩邊,我們得到:

$$ E_k(\Delta(Y_1 || \dots || Y_m)) = E_k(\Delta(X_1 || \dots || X_m)) $$ 並且由於函式 $ E_k $ 是分組密碼,它有一個逆 $ D_k $ ,通過適用於雙方,我們可以得到:

$$ \Delta(Y_1 || \dots || Y_m) = \Delta(X_1 || \dots || X_m) $$ 應用定義 $ \Delta(M) $ 雙方我們得到:

$$ Y_1 \oplus \dots \oplus Y_m = X_1 \oplus \dots \oplus X_m $$ 因此,您在評論中引用的攻擊取決於這樣一個事實,即它必須以某種方式使這個等式成立。您的評論將攻擊解釋為這樣(我已更正了一個符號錯誤):

對手可以通過替換來攻擊系統 $ X_1 || \dots || X_{m-1} $ 具有任何所需的值 $ Y_1 || \dots || Y_{m-1} $ 並更換 $ X_m $ 和 $ Y_m $ 在哪裡 $ Y_m $ 計算如下: $ Y_m = Y_1 \oplus \dots \oplus Y_{m−1} \oplus \Delta(M) $ .

讓我們試著用它代替 $ Y_m $ 在等式中:

$$ Y_1 \oplus \dots \oplus Y_{m-1} \oplus (Y_1 \oplus \dots \oplus Y_{m−1} \oplus \Delta(M)) = X_1 \oplus \dots \oplus X_m $$ XOR 是一種運算,其中每個元素都是它自己的逆運算,所以 $ Y_i \oplus Y_i = 0 $ 這是身份元素。它也是一個關聯和交換操作,所以在這個等式的左邊我們可以取消所有的 $ Y_i $ 條款,我們得到:

$$ \Delta(M) = X_1 \oplus \dots \oplus X_m $$ 這只不過是定義 $ \Delta(M) $ ,我們被認為是一個前提。因此,您引用的技術可以保證偽造消息及其標籤不同於 $ M $ . 更糟糕的是,它允許對手選擇他們喜歡的任何值 $ Y_1 $ 至 $ Y_{m-1} $ .


簡短而直覺的總結是,這個 MAC 的問題在於 $ \Delta(M) $ 它將純文字消息塊與 XOR 相結合,給了攻擊者太多的自由度。給定任何消息 $ M $ , 攻擊者計算很簡單 $ \Delta(M) $ ,以及他們可以計算消息的許多方法 $ M’ $ 這樣 $ M ≠ M’ $ 但 $ \Delta(M) = \Delta(M’) $ . 由於 MAC 只是確定性加密 $ \Delta(M) $ ,這保證了成功的偽造。

MAC方案通過加密消息塊的異或來提供標籤,這很容易偽造,因為您可以使用消息和標籤進行異或操作,然後選擇任何其他具有用於調整異或值的塊的消息消息與原始消息的 XOR 值相同。

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