Cbc-Mac
CBC-MAC和CMAC的區別
根據Wikipedia的說法,CMAC 基於 CBC-MAC 的變體,並修復了其中的一些安全缺陷。但是,對於這兩種算法之間的實際差異,我找不到一個簡單而清晰的解釋,所以我想我會在這裡問:
CMAC 與 CBC-MAC 有何不同,為什麼?
用於可變長度消息的 CBC-MAC 的問題在於,應用於單塊消息的 CBC-MAC 本質上相當於一個預言機,用於在對手選擇的值上評估塊密碼。而那個預言機允許對手破壞這個計劃。
考慮第一個 CMAC 限制為由整數塊組成的消息。那麼 CMAC 和 CBC-MAC 之間的區別在於 CMAC 將最終塊與一個秘密值相異 - 你可以稱之為調整 - 在應用分組密碼之前(小心地)從密鑰派生。這確保了最終塊與其他塊的處理方式不同,這反過來意味著對手不再有一個預言機來評估他選擇的值的塊密碼。
為了使 CMAC 對不包含整數塊的消息起作用,CMAC(小心地)導出第二個秘密值。CMAC 首先填充消息,使其包含整數個塊,然後在應用塊密碼之前將第二個秘密與最終(填充的)塊進行異或運算。
這種額外的複雜性可以通過始終填充消息來避免,但如果不這樣做,CMAC 會為所有可能的消息中的很大一部分保存分組密碼評估。
通過將塊密碼應用於全零塊然後移位位值(有時將位異或到低位以獲得有限域乘法)來導出秘密值。