AESCCM-带密码块链接消息的耦合器。
由于它使用cmac生成标记,这是内部aes-cbc (块密码,需要块大小,可能需要填充),加密是使用AES-CTR (可用作流密码)。
在使用aes-cbc时,AES-CCM是如何表现为一个AEAD流密码的?
而对于AES-GCM的标签生成使用GMAC和加密CTR,这是不依赖于块大小的。因此,这可以用作流密码。
发布于 2019-10-16 13:07:14
您要寻找的属性是流密码的"online“属性。然而,CCM是为预先知道数据大小的分组加密而开发的。因此,CCM缺乏对在线密码的严格在线要求。但是,由于下面的密码仍然使用计数器模式,所以加密本身仍然可以以在线方式分别在每个字节上执行(在大多数实现中,不可能在线执行每比特加密/解密)。
通常,您希望在对任何AEAD密码进行解密之前验证身份验证标记的正确性。这意味着通常不使用基础计数器模式的联机属性。不过,您可以先在网上验证和解密,然后使用两次传递的密文。
此外,如果身份验证标记被认为是密文的一部分--就像大多数库一样--那么在解密过程中,这些库不太可能公开底层计数器模式的在线属性。在确定它们是反模式加密明文或身份验证标记的一部分之前,实现必须缓存至少与身份验证标记中存在的位数相同的位。这意味着在解密期间,缓存始终保持满,直到到达流的末尾。
CCM使用的CMAC(而不是CMAC)需要对数据块进行逐块处理,这通常不被认为是一个问题。无论如何,任何MAC都需要保持状态,并且验证可以简单地在所有数据被处理后进行。请注意,GCM中的GMAC也在128位块上执行乘法。因此,online属性仅考虑用于AEAD模式的密码部分。
结论: CCM尚未被定义为提供在线加密/解密,即使是在线加密/解密,也存在严重的问题。CBC-MAC结构的使用与根本问题几乎没有任何关系。
我希望你正在寻找一个具有更好的在线属性和MAC基于分组密码的AEAD模式,然后看看EAX。EAX基本上是一种使用CTR模式和CMAC认证的标准化方式。
有两个主要缺点:
当然,当涉及到在线解密的时候,你仍然会有所有提到的AEAD密码的一般缺点。
通常,将明文消息分成多个部分(逻辑上的,或者通过定义特定的块大小)更有意义。请注意,您必须将各种标记链接在一起才能完成随机访问,同时能够确认完整的密文的完整性(否则对手可以删除/移动/复制块)。
https://crypto.stackexchange.com/questions/75107
复制相似问题