Cbc-Mac
短於 128 位的消息的 CMAC
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 計算器