AES-CCM 加密信息长度

AES-CCM encrypted message length

请解释一下:

我用 8 字节的 AES-CCM 加密了 1 字节的纯文本 MAC。 结果是 9 个字节长。

我以为 AES 是 16 字节的块密码,所以结果必须是 24 字节长,但事实并非如此。

这绝对不是我代码中的错误,因为 RFC 3610 中的示例与我的情况非常相似(31 字节数据 + 8 字节 MAC 导致 39 字节输出)。

CCM 是一种身份验证模式,结合了用于加密的 CTR 模式和用于身份验证的 CBC-MAC。由于加密是使用streaming mode CTR完成的,密文将与明文一样长。

随机数(初始化向量)必须对于 CCM 模式是唯一的,否则使用相同随机数和相同密钥的所有消息可能会失去机密性。为了加密某些东西,您将需要使用全球已知的消息计数器作为随机数,或者生成一个随机随机数并希望您之前没有生成它(128 位块密码的机会很小)。随机数不应该是秘密的,因此您可以将其添加到密文中。密文的全长为:

nonceLength + plaintextLength + tagLength

CCM模式的另一个问题是CBC-MAC的使用,现在算是破烂严重了