擁有一個塊消息的CBC-MAC,偽造兩個塊的CBC-MAC
整個問題都與 CBC-MAC 有關。
比方說 $ a $ 是一個密碼塊長,攻擊者知道 MAC $ M(a) $ 的 $ a $ ,它是使用隨機密鑰生成的。攻擊者如何在同一個密鑰下偽造兩個塊消息的 MAC?
例如,如果我有 $ M(a) $ ,我可以鍛造嗎 $ M(b||c) $ , 在哪裡 $ b $ 和 $ c $ 都是一個街區嗎?
如果這不可能,是否可以偽造 $ M(a||b) $ 或者 $ M(b||a) $ ?
鑑於剛剛 $ a $ 和 $ M(a) $ , 你可以構造消息 $ a,|,b $ , 在哪裡 $ b = a \oplus M(a) $ ,它給出了相同的 CBC-MAC 輸出 $ M(a,|,b) = M(a) $ 作為 $ a $ 本身。
事實上,我們可以追加塊 $ b $ 在不更改 MAC 值的情況下,盡可能多地發送消息: $ M(a) = M(a,|,b) = M(a,|,b,|,b) = M(a,|,b,|,b,|,b) = \dots $
通過查看CBC-MAC的結構,應該可以看出其工作原理:
如圖所示,類似的消息 $ a,|,b,|,b,|,\dots $ 逐塊處理。第一步,我們加密 $ a \oplus 0 = a $ 使用分組密碼,並獲得 $ M(a) = E_k(a) $ 作為輸出。如果消息在這裡結束,這將是結果 MAC 值。但是,如果消息繼續,下一個塊 $ b $ 與輸出異或 $ M(a) $ 上一步,並再次使用分組密碼進行加密。如果我們選擇 $ b = a \oplus M(a) $ ,那麼分組密碼的輸入將是 $ b \oplus M(a) = a \oplus M(a) \oplus M(a) = a \oplus 0 = a $ 再次,因此輸出也將是 $ E_k(a) = M(a) $ 再次。
歡迎來到 Stackoverflow!
您可能在尋找什麼https://en.wikipedia.org/wiki/CBC-MAC#Security_with_fixed_and_variable-length_messages