Aes

CMAC 生成:如果輸入有效載荷長度未按 16 字節對齊,可能的副作用是什麼?

  • February 27, 2020

在尋找答案時,我了解到 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

在 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-CMAC 中的填充案例圖像AES-CMAC 最後一個塊未與 AES PRF 的 16 字節對齊

如果最後一個塊對齊(在 AES 作為 PRF 的情況下為 16 個字節),則將該塊的輸出與 $ K_2 $ . 標籤是用相同的鍵在異或輸出上計算的 $ K $ .

請查看無襯墊案例的圖片。用於塊對齊數據的 AES-CMAC

注:引自 Dan Boneh 教授。

引用自:https://crypto.stackexchange.com/questions/54943