OpenSSL :: HMAC #hexdigest(使用MD5)vs Digest :: MD5#hexdigest有什么区别和/或优势?难道你不能只使用Digest :: MD5#hexdigest(KEY + DATA)或考虑加密弱吗?
答案 0 :(得分: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的串联。
这意味着如果你给我Digest::MD5#hexdigest(KEY + DATA)
,那么我可以在不知道KEY的情况下计算Digest::MD5#hexdigest(KEY + DATA + OTHER_DATA)
是什么。您可以使用SHA1
如果你做了
Digest::MD5.hexdigest(DATA+KEY)
然后MD5中的任何已知冲突都很容易用于制作具有相同HMAC值的消息。
显然
Digest::MD5.hexdigest(KEY+DATA+KEY)
即使使用了两个不同的按键,也可能存在缺陷。 HMAC旨在缓解所有这些攻击。