【问题标题】:Difference between OpenSSL::HMAC#hexdigest vs Digest::MD5#hexdigest in ruby?ruby 中 OpenSSL::HMAC#hexdigest 与 Digest::MD5#hexdigest 之间的区别?
【发布时间】:2012-07-06 07:26:44
【问题描述】:

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

【问题讨论】:

    标签: ruby openssl md5


    【解决方案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 旨在缓解所有这些攻击。

    【讨论】:

      猜你喜欢
      • 2014-05-28
      • 2018-11-09
      • 1970-01-01
      • 2017-08-16
      • 1970-01-01
      • 2015-07-09
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      相关资源
      最近更新 更多