0

OpenSSL::HMAC#hexdigest(使用 MD5)与 Digest::MD5#hexdigest 有什么区别和/或优势?你不能只使用 Digest::MD5#hexdigest(KEY + DATA) 还是认为加密弱?

4

1 回答 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 回答