Cbc-Mac
為什麼只有長度前置才能提高 CBC-MAC 的安全性
我知道長度前置提高了 CBC-MAC 的安全性。但是,在其他地方(中間、結尾或消息的任何其他部分)插入長度會不會同樣好?畢竟,即使是長度也是由底層密碼塊處理的。
好吧,讓我們嘗試一下,看看偽造消息有多難。
假設為了說明的目的,每個字元都是一個塊,並且數字代表長度指示部分。讓我們首先將長度指示器放在末尾。所以,
XXXXXXX7
表示一條 7 塊消息,末尾帶有“7”指示符。也可以這麼說,
$ _{MAC}( $ XXXXXXX7 $ ) = M_0 $
表示該 7 塊消息的 MACing,並帶有生成的標籤 $ M_0 $ .
鍛造有多難?這很容易。您需要做的就是請求三個消息的 MAC,如下所示:
- $ _{MAC}( $ AAAAA5BBB9 $ ) = M_1 $
請注意消息中間的“5”。對於第一個 MAC,這只是請求消息的一部分——只有末尾的“9”被長度附加算法添加以指示消息的總長度。
$ _{MAC}( $ AAAAA5 $ ) = M_2 $
$ _{MAC}( $ 中交五 $ ) = M_3 $
然後異或 $ M_2 $ 和 $ M_3 $ :
$ M_2 \oplus M_3 = D $
然後讓 $ E = B \oplus D $ ,現在您可以輕鬆地為未從 MAC Oracle 請求的新消息偽造標籤:
$ _{MAC}( $ CCCCC5EBB9 $ ) = M_1 $
請注意,如果長度指示符位於消息中除了開頭之外的任何位置,則同樣的邏輯適用。