根据维基百科的说法,CMAC是基于CMAC的一种变体,并弥补了其中的一些安全缺陷。然而,对于这两种算法之间的区别,我找不到一个简单明了的解释,所以我想在这里问一问:
CMAC和CBC-MAC有什么不同,为什么?
发布于 2014-01-12 12:20:49
对于可变长度的消息,CBC-MAC的问题在于,应用于单个块消息的CBC-MAC实质上相当于一个甲骨文,用于按对手选择的值计算分组密码。而神谕让对手破坏了这个计划。
考虑第一个CMAC,它仅限于包含大量块的消息。然后,CMAC和CMAC之间的区别是,CMAC用一个秘密值对最后一个块进行xors --您可以称它为一个调整--(小心地)从密钥派生出来,然后再应用分组密码。这确保了对最终块的处理与其他块不同,这就意味着敌手不再有根据自己选择的值来评估块密码的预言。

为了使CMAC能够处理不包含大量块的消息,CMAC (仔细地)派生了第二个秘密值。CMAC首先对消息进行填充,使其包含大量的块,然后在应用分组密码之前,将第二个秘密与最终(填充)块进行连接。
通过总是填充消息可以避免这种额外的复杂性,但是不这样做,CMAC为所有可能的消息中的一小部分节省了一个分组密码评估。
秘密值是通过将块密码应用于全零块,然后将比特值(有时将比特串到低阶比特以得到有限域乘法)来导出的。
https://crypto.stackexchange.com/questions/12860
复制相似问题