http://en.wikipedia.org/wiki/CMAC
http://www.rfc-archive.org/getrfc.php?rfc=4493
有两个键K1和K2。除了消息1与10^127 (1和127个0)不同之外,还有其他原因吗?
如果消息携带长度(并且长度也是CMAC-ed whit消息),是否存在仅使用一个随机生成的K的安全漏洞?
发布于 2010-08-17 23:04:48
我不认为这与已知的明文攻击有关,我也不同意对称密码容易受到攻击。密码安全的条件之一是它在KPA、CPA (选择明文攻击)和CCA (选择密文攻击)下是安全的。
除非我没有理解你的问题,是的,你仍然需要这两个子键。当一个块不是一个完整的块时,使用K2。。K1和K2不是随机生成的,而是从K派生的。您不想生成这些子密钥有什么原因吗?
基于链接模式的验证码存在许多弱点。可以证明,CBC-MAC只对固定大小的消息是安全的。对于最后一个块被填充的可变长度消息,安全性完全失败。
您可以阅读XCBC论文以了解攻击是如何工作的:
作为一个简单的示例,请注意,给定一个块消息X的CBC MAC,假设T= CBCEK (X ),对手立即知道两个块消息X || (X^T)的CBC MAC,因为这又是T。
1
发布于 2010-08-17 23:03:45
首先,AES-CMAC中实际上只有一个密钥K-它是您必须生成的唯一密钥,以解决您的最后一个问题,这在规范中有明确的说明:
AES子密钥生成算法Generate_Subkey()采用密钥K,这正是
-128的密钥。
你的另一个问题-为什么我们需要从K生成K1和K2 -有点难以回答,但实际上有一个非常简单的解释:消除消息身份验证中的任何歧义。
为了说明,假设我们取自维基文章中的二进制密钥: K1 =0101and K2 = 0111。现在让我们使用消息M=0101011。因为M不是由完整的块(3比特而不是4比特)组成的,所以我们必须填充它。现在我们有M‘=01010111。
要生成此消息的MAC,我们只需将密钥XOR:
M' = 0101 0111
K1 = 0101
K2 = 0111
MAC = 0000 0000如果我们在这两种情况下都使用了K1,那么我们将使用以下过程:
M' = 0101 0111
K1 = 0101
K1 = 0101
MAC = 0000 0010这一切都很好,但请注意当我们尝试为M'‘= 0101 0111生成MAC时会发生什么(即,未填充的消息M'’与填充的消息M‘相同)。
M'' = 0101 0111
K1 = 0101
K1 = 0101
MAC = 0000 0010我们已经从两个不同的消息生成了相同的MAC!第二个密钥的使用(它具有一些数论属性,防止它在问题上与K1“相似”)防止了这样的歧义。
发布于 2010-08-17 22:49:27
我认为对称密码很容易受到明文攻击,至少在过去是这样。而且,由于您做了明文(填充模式)的一部分,因此您不希望泄露有关密钥的信息。如果您能以这种方式提取密钥的一些位,您就可以暴力破解最后一个块,但所有其他块都保持安全(至少在这种KP攻击下),因为它们是通过K1加密的。
为了克服同样的问题,基于块的密码通常在各种模式下运行,请参阅:http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation。我不知道为什么在CMAC的设计中没有考虑这个显而易见的解决方案。
https://stackoverflow.com/questions/3503204
复制相似问题