security - SHA512 与 Blowfish 和 Bcrypt

标签 security encryption passwords hash

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center为指导。




8年前关闭。




我正在研究散列算法,但找不到答案。

  • Bcrypt 使用 Blowfish
  • 河豚优于 MD5
  • 问:但是 Blowfish 比 SHA512 更好吗?

  • 谢谢..

    更新:

    我想澄清一下,我理解散列和加密之间的区别。促使我以这种方式提问的原因是 this article , 作者将 bcrypt 称为“自适应散列”

    由于 bcrypt 基于 Blowfish,因此我认为 Blowfish 是一种散列算法。如果答案已经指出它是加密,那么在我看来它不应该在本文中占有一席之地。更糟糕的是,他得出的结论是 bcrypt 是最好的。
    现在让我感到困惑的是 phpass 类(我相信用于密码散列)使用 bcrypt(即河豚,即加密)。根据你们告诉我的这个新信息(河豚是加密),这门课听起来不对。我错过了什么吗?

    最佳答案

    可以说 bcrypt 或 SHA-512(在适当的算法(如 PBKDF2)的上下文中)是否足够好就足够了。答案是肯定的,任何一种算法都足够安全,以至于漏洞将通过实现缺陷而不是密码分析发生。

    如果你坚持要知道哪个“更好”,SHA-512 已经得到了 NIST 和其他人的深入审查。这很好,但已经认识到缺陷,虽然现在无法利用,但导致了新哈希算法的 SHA-3 竞争。另外,请记住,哈希算法的研究比密码的研究“更新”,密码学家仍在学习它们。

    尽管 bcrypt 整体上没有像 Blowfish 本身那样受到严格审查,但我相信基于具有易于理解的结构的密码为其提供了一些基于哈希的身份验证所缺乏的固有安全性。此外,使用普通 GPU 作为攻击基于 SHA-2 的哈希的工具更容易;由于其内存要求,优化 bcrypt 需要更专业的硬件,如带有一些板载 RAM 的 FPGA。

    注意:bcrypt 是一种内部使用 Blowfish 的算法。它本身不是一种加密算法。它用于不可逆转地模糊密码,就像散列函数用于执行“单向散列”一样。

    加密散列算法被设计为无法逆转。换句话说,仅给定散列函数的输出,应该“永远”找到将产生相同散列输出的消息。事实上,找到任何两条产生相同哈希值的消息在计算上应该是不可行的。与密码不同,散列函数不使用 key 参数化;相同的输入将始终产生相同的输出。

    如果有人提供了一个密码,该密码对存储在密码表中的值进行了哈希处理,则他们将通过身份验证。特别是,由于散列函数的不可逆性,假设用户不是掌握散列并将其反转以找到有效密码的攻击者。

    现在考虑 bcrypt。它使用 Blowfish 加密魔法字符串,使用从密码“派生”的 key 。稍后,当用户输入密码时,再次推导出 key ,如果使用该 key 加密产生的密文与存储的密文匹配,则用户通过身份验证。密文存储在“密码”表中,但从不存储派生 key 。

    为了破解这里的密码,攻击者必须从密文中恢复 key 。这称为“已知明文”攻击,因为该攻击知道已加密的魔法字符串,但不知道使用的 key 。 Blowfish 已被广泛研究,目前还没有已知的攻击可以让攻击者找到具有单个已知明文的 key 。

    因此,就像基于加密摘要的不可逆算法一样,bcrypt 根据密码、盐和成本因素产生不可逆的输出。它的优势在于 Blowfish 对已知明文攻击的抵抗力,这类似于对摘要算法的“第一次原像攻击”。由于它可以用来代替散列算法来保护密码,因此 bcrypt 被混淆地称为“散列”算法本身。

    假设彩虹表因正确使用盐而受阻,任何真正不可逆的功能都会使攻击者进行反复试验。攻击者进行试验的速度取决于不可逆“散列”算法的速度。如果使用散列函数的单次迭代,攻击者可以使用成本约为 1000 美元的设备每秒进行数百万次试验,在几个月内测试所有长达 8 个字符的密码。

    然而,如果摘要输出被“反馈”数千次,则在该硬件上测试同一组密码将需要数百年的时间。 Bcrypt 通过在其 key 派生例程中进行迭代来实现相同的“ key 强化”效果,而像 PBKDF2 这样的基于哈希的适当方法也可以做同样的事情;在这方面,这两种方法是相似的。

    因此,我对 bcrypt 的建议源于以下假设:1) Blowfish 与 SHA-2 散列函数系列的审查级别相似,2) 密码的密码分析方法比散列函数的密码分析方法开发得更好。

    关于security - SHA512 与 Blowfish 和 Bcrypt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1561174/

    相关文章:

    java - Chrome 中的随机 ERR_SSL_FALLBACK_BEYOND_MINIMUM_VERSION

    python - 官方 Python GPG 签名 key - 它在哪里? -GPG : using RSA key FC624643487034E5

    algorithm - hash解密,可以用什么算法

    security - 密码中应该允许空格字符吗?

    c - 从内存中删除敏感信息

    android - 我可以在 Android 上使用最新的 BouncyCaSTLe 提供程序吗?

    c++ - 使用 EVP_* 就地加密/解密

    amazon-web-services - YAML 异常 : Invalid Yaml

    javascript - 无需 JavaScript 的安全用户身份验证

    python - Django "set_password()"函数不工作