CMAC 生成:如果輸入有效載荷長度未按 16 字節對齊,可能的副作用是什麼?
在尋找答案時,我了解到 NIST 建議使用 RFC AES-CMAC 4493 來克服有效載荷未按 16 個字節對齊的情況。
如果長度未按 16 個字節對齊,我想知道 AES-CMAC 會導致哪些缺點/不安全。生成的 TAG 值會不會很容易被篡改?
如何以及何時使用 One-Key CBC MAC1 (OMAC1)?這裡 ONE-KEY 代表什麼?(普通 CMAC Gen/Ver - 相同的單個密鑰用於生成和驗證)。
我希望您的意思是由 AES CBC-MAC 引起的缺陷,該缺陷在 AES-CMAC 中得到解決。
AES_CBC MAC 如果與 ISO 填充技術正確使用,則不應導致標籤衝突。
所以 AES-CBC MAC 應該是這樣的。
在 AES-CBC MAC 中,如果最後一個塊不是 16 字節對齊的(將 AES 視為 PRF),則必須對最後一個塊進行填充。應根據 ISO 進行填充(位填充,使用二進制 1 後跟零,例如 $ \texttt{100..00} $ ) 對於 ISO 1 表示填充的開始。如果該塊已經 16 字節對齊,則應連接一個虛擬塊(帶有 ISO 填充)。在此之後,只應計算標籤。
讓我們看看碰撞情況:最後一個塊說 m 是 13 個字節。因此,根據 ISO 填充,塊將變為 $ m|\texttt{100} $ 然後將計算標籤。如果有一個名為的塊怎麼辦 $ m’ $ 以 $ \mathtt{100} $ 作為真實數據,如果沒有添加虛擬 16 字節塊,則標籤將與 $ m|\mathtt{100} $ . 這意味著可以創建碰撞。
根據安全性,兩個不同的數據不應導致具有相同密鑰的相同 MAC。因此它可能變得不安全。
為了克服這個問題,AES-CMAC 中有一個解決方案,如果它已經與 PRF 塊對齊,則無需添加虛擬塊(在這種情況下,它是 AES,然後是 16 字節對齊)。
在 AES CMAC 中有三個密鑰 ( $ K $ , $ K_1 $ 和 $ K_2 $ ). $ K_1 $ 和 $ K_2 $ 來源於 $ K $ . 對於子鍵 ( $ K_1 $ 和 $ K_2 $ ) 生成,請參見第 2.3 節(子密鑰生成算法)。
如果最後一個塊未對齊(在 AES PRF 情況下為 16 個字節),則將最後一個塊填充為 ISO padding 。使用 AES 加密它並使用 XOR 輸出 $ K_1 $ . 標籤是用相同的鍵在異或輸出上計算的 $ K $ .
如果最後一個塊對齊(在 AES 作為 PRF 的情況下為 16 個字節),則將該塊的輸出與 $ K_2 $ . 標籤是用相同的鍵在異或輸出上計算的 $ K $ .
注:引自 Dan Boneh 教授。