SHA512与Blowfish和Bcrypt

我在看哈希算法,但找不到答案。

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

    更新:

    我想澄清一下,我理解哈希和加密之间的区别。 是什么促使我以这种方式提出这个问题是本文, 作者将bcrypt称为“自适应哈希” https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2007/ 7月/够了,用最彩虹表,什么,你需要到专门关于安全密码的方案/

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


    只要说bcrypt或SHA-512(在像PBKDF2这样的合适算法的情况下)是否足够好就足够了。 答案是肯定的,要么算法足够安全,以至于通过实施漏洞发生违规,而不是密码分析。

    如果你坚持知道哪个“更好”,SHA-512已经得到了NIST和其他人的深入评论。 这很好,但是有一些缺陷已经被认识到,虽然现在不能被利用,但却导致了SHA-3竞争新的散列算法。 另外,请记住哈希算法的研究比密码算法的研究“更新”,并且密码学者仍然在研究它们。

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


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

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

    如果有人提供密码来存储密码表中存储的值,则会对其进行身份验证。 特别是,由于散列函数的不可逆性,假设用户不是攻击者,它已经掌握了散列并将其反转为找到工作密码。

    现在考虑bcrypt。 它使用Blowfish加密魔术字符串,使用密码中的“派生”密钥。 之后,当用户输入密码时,再次导出密钥,并且如果通过用该密钥加密产生的密文匹配存储的密文,则用户被认证。 密文存储在“密码”表中,但派生密钥从不存储。

    为了在这里破解密码,攻击者必须从密文中恢复密钥。 这被称为“已知明文”攻击,因为攻击知道已加密的魔法字符串,但不知道使用的密钥。 Blowfish已经被广泛研究,并且还没有发现可以让攻击者用一个已知明文找到密钥的攻击。

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

    假设彩虹桌已经被合理使用盐所阻碍,任何真正不可逆转的功能都会将攻击者减少到反复试验。 攻击者可以进行试验的速度取决于不可逆“散列”算法的速度。 如果使用哈希函数的单次迭代,攻击者可以使用价值1000美元的设备每秒进行数百万次试用,在几个月内测试所有密码长达8个字符。

    然而,如果摘要输出被“反馈”数千次,那么在该硬件上测试同一组密码需要数百年的时间。 Bcrypt通过在其密钥派生例程内迭代获得相同的“密钥加强”效果,并且像PBKDF2这样的合适的基于散列的方法可以做同样的事情; 在这方面,这两种方法是相似的。

    因此,我对bcrypt的推荐源于以下假设:1)Blowfish与SHA-2哈希函数系列具有类似的审查水平,2)密码分析方法比哈希函数的密码分析方法更好。


    我同意埃里克森的回答,但有一点需要注意:出于密码验证的目的,bcrypt远远好于SHA-512的单次迭代 - 仅仅因为它慢得多。 如果你不明白为什么慢速在这个特定的游戏中是一个优势,请阅读你链接到的文章(向下滚动到“速度正是你不想在密码散列函数中使用的。”)。

    您当然可以通过迭代数千次来构建SHA-512密码哈希算法,就像PHK的MD5算法一样。 Ulrich Drepper为glibc的crypt()做了这件事。 但是,如果您已经有可用的经过测试的bcrypt实现,则没有特别的理由要这样做。


    Blowfish不是哈希算法。 这是一种加密算法。 这意味着你可以使用河豚加密一些东西,然后你可以将它解密为纯文本。

    SHA512是一种哈希算法。 这意味着(在理论上)一旦你对输入进行哈希处理,你就无法再获得原始输入。

    它们是两种不同的东西,旨在用于不同的任务。 对于“河豚比SHA512更好吗?”没有“正确的”答案吗? 你可能会问:“苹果比袋鼠更好吗?”

    如果你想阅读更多的话题,这里有一些链接:

  • 河豚
  • SHA512
  • 链接地址: http://www.djcxy.com/p/21567.html

    上一篇: SHA512 vs. Blowfish and Bcrypt

    下一篇: How can I generate an MD5 hash?