【问题标题】:How is bcrypt more future proof than increasing the number of SHA iterations?bcrypt 如何比增加 SHA 迭代次数更具未来性?
【发布时间】:2011-10-11 02:12:30
【问题描述】:

我一直在研究 bcrypt 哈希,当然,该方案的一大好处是“适应性”。但是,与简单地增加对 SHA-1 哈希进行的迭代次数相比,它如何变得更具适应性?比如说,不是 SHA-1 对一个值进行 1000 次散列,而是将其增加到 10,000 次迭代。这不是达到同样的目标吗?是什么让 bcrypt 更具适应性?

【问题讨论】:

    标签: security hash cryptography bcrypt


    【解决方案1】:

    您的替代方案有点未指定。您没有说如何将密码和盐结合到您的哈希方案中。以错误的方式执行此操作可能会导致漏洞。 bcrypt(和其他标准 KDF)的优势在于它的明确性。

    如果您在常见的 HMAC-SHA1 模式下查看 PBKDF2,它与您的建议非常相似。

    【讨论】:

      【解决方案2】:

      基本上就是这样。您可以迭代任何哈希函数。有些哈希函数比其他的要好,所以要谨慎选择。

      例如,MD5 现在被认为是损坏的,属于一类哈希函数,会遭受某些基于前缀的攻击和生日攻击。

      bcrypt 是一个很好的经验法则,因为它可以正确处理一些事情(例如盐),如果您使用另一个函数,则必须明确实现这些事情。

      【讨论】:

      • 我不认为 MD5 因众所周知的密钥派生功能而损坏。无论如何,如果您故意尝试减慢暴力破解,则使用 MD5(这是一个非常快速的哈希函数)进行密钥派生是没有意义的,除非对使用有严重限制,例如SHA-256 或 SHA-512。
      【解决方案3】:

      我认为“自适应性”与实际加密无关,而是 bcrypt 是一种自适应哈希:随着时间的推移,它可以变得越来越慢,因此它仍然能够抵抗针对哈希的特定蛮力搜索攻击和盐。

      (部分引用自http://en.wikipedia.org/wiki/Bcrypt

      【讨论】:

      • 这甚至不能远程回答问题。
      【解决方案4】:

      正如另一个答案中所述,迭代哈希函数的机制非常重要,因为它可能会意外地削弱算法或仍然无法防止一些时间-内存权衡攻击。

      这就是为什么 PBKDF2 是你的朋友。在RFC 2898 中有详细说明。 PBKDF2 也是面向未来的,因为它不依赖于特定的哈希算法。例如,当 NIST 最终确定 SHA3 时,可以将 MD5 换成 SHA3。

      此外,对面向未来的能力略有了解。只要您要保护的密码是“between 8 and 56 characters”,Bcrypt 就可以工作。如果您的未来出于某种原因需要更长的密码短语,请记住一个重要的问题。

      【讨论】:

      • 您的链接指向 bcypt 程序而不是 bcrypt KDF。
      • 是的,这是一个与 KDF 无关的切线注释(它依赖于名称上的 bcrypt,而不是密码)。它旨在指出理解 KDF 中使用的哈希/加密算法以及 KDF 本身如何工作的重要性。真的,这个问题让我想起了几年前关于 Unix crypt、8 个字符限制和关于 AOL 的故事:voices.washingtonpost.com/securityfix/2007/05/…
      【解决方案5】:

      使用哈希函数进行多次迭代有一些微妙之处,因为必须涉及某种“加盐”,并且因为现有的哈希函数并不像希望的那样“随机”;所以必须小心,在这种情况下你最终会得到PBKDF2。 PBKDF2 是为密钥派生而设计的,这与密码散列并不完全相同,但事实证明它也很擅长。

      bcrypt 与 PBKDF2-with-SHA-1 相比具有(轻微的)优势,因为 bcrypt 源自 Blowfish 分组密码。进行多次迭代的目的是使密码处理速度变慢,尤其是对攻击者而言变慢。我们容忍该功能对于正常、诚实的系统来说是缓慢的,因为它阻止了广泛的密码猜测。但是攻击者可能会使用正常系统不使用的硬件,例如programmable GPU,它极大地促进了非常适合这种硬件的计算。 Blowfish 和 bcrypt 使用基于 RAM 的查找表(在处理过程中修改的表);这样的表对于通用 CPU 来说很容易处理,但在 GPU 上就很麻烦了;因此,bcrypt 在某种程度上阻碍了攻击者使用 GPU 进行的处理增强。这是一个好处,它使得 bcrypt 比 PBKDF2 更适合密码存储。

      【讨论】:

        【解决方案6】:

        两者的替代方案是scrypt。与 bcrypt 不同的是,它不使用有点不寻常的河豚密码,而是使用任何标准的哈希函数,而且它专门设计为难以在专用硬件上实现,因为内存和时间效率都很低。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-05-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-18
          • 2013-10-29
          • 1970-01-01
          相关资源
          最近更新 更多