用於任意長度消息的 CBC-MAC
Katz/Lindell 建議對基本 CBC-MAC 方案進行以下修改以處理可變長度消息(第 125 頁):
我們採樣兩個統一的獨立鍵 $ k_1, k_2\in {0,1}^n $ . 然後驗證消息 $ m $ ,我們首先計算基本的 CBC-MAC $ m $ 使用 $ k_1 $ 並呼叫結果標籤 $ t $ . 然後我們讓輸出標籤為 $ t’ = F_{k_2}(t) $ .
我的問題是為什麼我們需要使用兩個鍵?也就是說,如果我們計算輸出標籤,為什麼該方案不安全 $ t’ $ 使用 $ F_{k_1} $ ?
也就是說,如果我們計算輸出標籤,為什麼該方案不安全 $ t’ $ 使用 $ F_{k_1} $ ?
計算 $ F_{k_1}( \text{CBCMAC}_{k_1}(M)) $ 正好等價於接受填充消息 $ M $ ,向其附加一個全零塊,然後在其上執行 CBC-MAC(無填充操作)。
以下是攻擊者如何利用它來破壞 MAC 方案,考慮到所有送出給 CBC-MAC 的消息在末尾都有一個全 0 塊的限制:
首先,求 $ a = \text{CBCMAC}_k(M_1 || 0) $ , 和 $ b = \text{CBCMAC}_k(M_2 || 0) $
那麼,我們知道 $ \text{CBCMAC}_k(M_1 || 0 || u || 0) $ 和 $ \text{CBCMAC}_k(M_2 || 0 || u\oplus a \oplus b || 0) $ 是相同的(對於任何單個塊 $ u $ ); 發生這種情況是因為,當兩個 MAC 在 $ u $ 或者 $ u \oplus a \oplus b $ 塊,然後都將其內部狀態設置為 $ u \oplus a $ ,並且所有其他處理在該點之後都是相同的。
因此,攻擊者要求一個,然後他知道另一個的 MAC。