OpenSSL::HMAC#hexdigest(使用 MD5)与 Digest::MD5#hexdigest 有什么区别和/或优势?你不能只使用 Digest::MD5#hexdigest(KEY + DATA) 还是认为加密弱?
问问题
1669 次
1 回答
1
DATA 和 KEY 的 HMAC-MD5 定义为
MD5( (K xor pad1) + H ((K xor pad2) + DATA )
其中 pad1 和 pad2 是两个固定常数。您可能会做的一些更明显的事情在密码学上很弱。
Digest::MD5.hexdigest(KEY + DATA)
有致命缺陷。考虑 MD5 的工作原理。它将输入分成一定大小的块(md5 为 512 位)并设置一些初始状态 h0、h1、h2、h3。然后它会进行一系列转换,将第一个数据块与初始状态混合,以生成 h0、h1、h2、h3 的新值。然后将第二个数据块与那些数据组合以产生一组新的 h0、h1、h2、h3 等。哈希函数的最终值只是 h0,h1,h2,h3 的串联。
这意味着如果你给我,那么我可以在不知道 KEY 的情况下Digest::MD5#hexdigest(KEY + DATA)
计算出什么。Digest::MD5#hexdigest(KEY + DATA + OTHER_DATA)
你可以用 SHA1 做同样的事情
如果你这样做了
Digest::MD5.hexdigest(DATA+KEY)
那么 MD5 中任何已知的冲突都可以很容易地用于生成具有相同 HMAC 值的消息。
显然
Digest::MD5.hexdigest(KEY+DATA+KEY)
即使使用了两个不同的密钥,也可能存在缺陷。HMAC 旨在缓解所有这些攻击。
于 2012-07-06T08:02:51.120 回答