在寻找答案时,我知道RFC AES-CMAC 4493是由NIST建议的,以克服如果有效负载没有以16个字节对齐的话。
我想知道,如果长度没有以16字节对齐,那么AES-CMAC会带来哪些缺点/不安全。生成的标记值会很容易被篡改吗?
如何和何时使用单键CBC MAC1 (OMAC1)?这里的单键代表什么?(普通的CMAC Gen/Ver -相同的单键用于生成和验证)。
发布于 2018-01-24 07:35:29
我希望您是指AES CBC-MAC所造成的缺陷,这是在AES-CMAC中解决的.
AES_CBC MAC如果与国际标准化组织填充技术一起正确使用,不应导致标签冲突。
所以AES-CBC MAC应该是这样的。
在AES-CBC MAC中,如果最后一个块未对齐16字节(考虑AES为PRF),则必须对最后一个块进行填充。填充应该基于ISO (位填充,使用二进制填充,后面跟着零,例如\texttt{100..00}),因为ISO 1表示填充的开始。如果块已经对齐了16字节,那么应该连接一个虚拟块(带有ISO填充)。在此之后,只应计算标签。
让我们看看碰撞情况:最后一个块,比如m是13个字节。因此,按照ISO填充,块将变成m\|\texttt{100},然后计算标记。如果有一个称为m'的块,它以\mathtt{100}作为真实数据结尾,如果没有添加虚拟16字节块,那么标记将与m\|\mathtt{100}相同。这意味着可以创建冲突。
根据安全性,两个不同的数据不应导致相同密钥的相同MAC。因此,它可能变得不安全。
为了克服这一问题,在AES-CMAC中有一种解决方案,如果它已经与PRF对齐(在本例中是AES,然后是16字节对齐),则不需要添加虚拟块。
在AES CMAC中有三个键(K、K_1和K_2)。
K_2是从K衍生而来的。有关子项(K_1和K_2 )生成,请参见2.3节(子密钥生成算法)。
如果最后一个块没有对齐(万一AES PRF是16个字节),那么将最后一个块作为ISO填充。用AES和XOR加密它,输出用K_1。标记是在具有相同键K的异或式输出上计算的。
请参阅AES-CMAC中填充盒的图像。
如果最后一个块是对齐的(如果AES为PRF,则为16个字节),则使用K_2对块的输出进行异或。标记是在具有相同键K的异或式输出上计算的。
请参阅非衬垫箱的图片。
注:参考丹·邦纳教授。
https://crypto.stackexchange.com/questions/54943
复制相似问题