為什麼 CBC-MAC 需要無前綴輸入才能成為一個好的 PRF?
在FFX 規範中,有一條關於使用 CBC-MAC 作為輪函式的說明。
安全說明。輪函式 F 的構造方式使得呼叫 CBC-MAC 的輸入集是無前綴的。(如果對於集合中的任何不同的 x,y,x 不是 y 的前綴,則一組字元串是無前綴的。)當在一組前綴上呼叫 CBC-MAC 時,它被認為是一個好的 PRF。免費輸入,假設 AES 是一個很好的 PRP
$$ 23 $$.
為什麼輸入無前綴很重要?引自 Erez Petrank 和 Charles Rackoff,“實時數據源的 CBC MAC”,密碼學雜誌 13(3),2000 年,第 315-338 頁(免費,技術報告,預印本)。
因為具有非無前綴輸入的 CBC-MAC 對存在偽造的抵抗力較弱,這意味著它不是“安全”MAC。更準確地說,當輸入域不是無前綴時,CBC-MAC 很容易與隨機函式(即不是 PRF)區分開來。這是因為攻擊者可以請求消息的 CBC-MAC $ M_0 $ 和 $ M_1 $ ,然後對 MAC 進行異或運算 $ M_0 $ 與第一塊 $ M_1 $ ,從而簡單地構造另一個消息, $ M_2 $ (這樣 $ M_2 = M_0||\overline{M_1} $ , 在哪裡 $ \overline{M_1} $ 是 $ M_1 $ 改變了第一個塊)。 $ M_2 $ 將具有相同的 MAC $ M_1 $ ,這是一個 PRF 應該很難找到的碰撞。注意 $ M_0 $ 是前綴 $ M_2 $ .
CBC-MAC 可以通過以下任一方式變得安全 i) 僅將其用於固定長度的消息(因為沒有長度的消息 $ l $ 可以是任何其他長度消息的前綴 $ l $ ), 或 ii) 總是在前面 $ L_m $ ,消息的長度,到消息並在字元串上使用 CBC-MAC $ L_m || M $ .