Cbc-Mac

短於 128 位的消息的 CMAC

  • December 3, 2015

RFC4493描述了 AES-CMAC 的生成和長度 > sizeof(aes128_key) 的消息的填充。但是我需要為一系列短於 16 字節的消息生成 CMAC。

所以我想問一下是否可行:

  • 用 0 填充 M0 到 16 個字節
  • 使用建議的填充填充 M_last(第一位 1,其他位 0)

因為消息總是 M0 || 固定大小的M1,還需要生成子密鑰嗎?還是可以用固定值代替?

親切的問候

AES-CMAC 是為任何長度的消息定義的。

如果您有小於塊大小的非空消息,則該算法可以簡化為以下內容:

(K1,K2) := Generate_Subkey(K);
n := ceil(len/const_Bsize);
M_last := padding(M_n) XOR K2; 
X := const_Zero;
Y := M_last XOR X;
T := AES-128(K,Y);
return T;

您不需要派生一些非標準的方式來填充您的消息。


您應該注意,len/const_Bsize在 RFC 中是浮點除法。C 實現做了這個不使用浮點除法的小技巧:n = (length+15) / 16;.

無恥的外掛:我有一個 AES-CMAC 的 JavaScript 實現,你可以玩:線上 AES-CMAC 計算器

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