我试图理解AES-CCM和AES-CCM*之间的区别(如IEEE802.15.4™-2011,附件B所定义)。我看到对L和M有更多的限制,M=0也被允许:
最大消息长度为2^16 = 64K (自L=2以来)是否正确?是不是太短了?
由于允许使用M=0,所以M的编码是完全不同的。计算中还有其他不同之处吗?
可变长度的消息是安全的吗?多么?
发布于 2021-10-13 21:15:44
由IEEE 802.15.4-2011定义的CCM*是RFC 3610定义的CCM的推广。其推广是,RFC 3610允许标记长度M {4、6、8、10、12、14、16}编码在值为0的3位字段M‘中,CCM*也允许标记长度M=0,并使用标记长度字段中的值M'=0对其进行编码。
CCM的其他规范具有稍微不同的约束条件。例如,NIST允许对16字节头进行不同的格式化。
消息长度字段的长度L可以在2到8之间。在这方面,RFC 3610和CCM*之间没有差别。
允许零长度标签使CCM*成为一种对偶族算法:具有非空标记的CCM*是一个AEAD算法,而带有空标记的CCM*是一个未经认证的密码。
CCM*如802.15.4 LR-WPAN协议中所使用的,具有其他限制,这些限制在IEEE 802.15.4-2011的§B.3.2中列举:底层分组密码为AES,明文长度以2个字节编码,身份验证标记长度为{0、4、8、16}之一。这些限制只适用于802.15.4中的使用,而不适用于CCM*。
由于明文长度以2字节编码,所以明文长度不能超过65535字节。对于某些应用程序来说,这一限制过于严格,但对于802.15.4帧来说,这是非常好的,而802.15.4帧受底层物理传输的限制。最大的大小取决于传输,我不知道最大容量传输是什么,但是维基百科声明“大多数IEEE802.15.4 PHYs只支持127个字节的帧”。
(类似地,RFC 5116为CCM指定了一个12字节的值,这意味着L=3,这对于TLS协议来说很好,因为它的记录大小字段本身是一个3-八进制字段。)
关于安全性,802.15.4节B.4.3对此进行了讨论,我将在这里总结相关要点。CCM的原始安全证明假定给定键的标记长度是固定的。CCM*允许使用相同密钥的不同标记长度,这有一个已知的弱点(罗格威和瓦格纳--对CCM的批判,第3.4节)。CCM*通过确保加密掩码依赖于身份验证标记长度( CCM的一般定义没有要求,但RFC 3610和CCM* do)来避免这一弱点。
https://crypto.stackexchange.com/questions/33501
复制相似问题