AES-CCM加密消息长度

时间:2016-01-23 12:04:42

标签: aes block-cipher

请解释一下:

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

我认为AES是一个16字节的分组密码,因此结果必须是24字节长,但不是。

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

1 个答案:

答案 0 :(得分:1)

CCM是一种经过身份验证的模式,它将CTR模式加密,并使用CBC-MAC进行身份验证。由于加密是使用streaming mode CTR完成的,因此密文与明文完全一样长。

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

nonceLength + plaintextLength + tagLength

CCM模式的另一个问题是CBC-MAC的使用,现在被视为严重破坏。