请解释一下:
我通过 AES-CCM 用 8 字节 MAC 加密了 1 字节纯文本。结果长度为 9 字节。
我以为 AES 是 16 字节的分组密码,所以结果必须有 24 字节长,但事实并非如此。
这绝对不是我的代码中的错误,因为 RFC 3610 中的示例与我的情况非常相似(31 字节数据 + 8 字节 MAC 导致 39 字节输出)。
CCM是一种经过身份验证的模式,结合了用于加密的CTR模式和用于身份验证的CBC-MAC。由于加密是使用流式模式 CTR 完成的,因此密文将与明文完全相同。
对于 CCM 模式,nonce(初始化向量)必须是唯一的,否则可能会丢失使用具有相同密钥的相同随机数的所有消息的机密性。为了加密某些内容,您需要使用全局已知的消息计数器作为随机数,或者生成随机随机数并希望您以前没有生成过它(128位分组密码的机会非常小)。随机数不应该是秘密的,因此您可以将其附加到密文前面。密文的完整长度为:
nonceLength + plaintextLength + tagLength
CCM模式的另一个问题是CBC-MAC的使用,这在今天被认为是严重破坏的。