Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security SHA512对河豚和Bcrypt_Security_Encryption_Passwords_Hash - Fatal编程技术网

Security SHA512对河豚和Bcrypt

Security SHA512对河豚和Bcrypt,security,encryption,passwords,hash,Security,Encryption,Passwords,Hash,我正在研究散列算法,但找不到答案 Bcrypt使用河豚 河豚比MD5好 问:但是河豚比鲨鱼好吗 谢谢 更新: 我想澄清一下,我理解散列和加密之间的区别。促使我这样问的是,作者将bcrypt称为“自适应哈希” 由于bcrypt是基于Blowfish的,所以我认为Blowfish是一种散列算法。如果它像答案所指出的那样是加密,那么在我看来,它不应该出现在本文中。更糟糕的是,他认为bcrypt是最好的。 现在让我困惑的是phpass类(我相信用于密码哈希)使用bcrypt(即blowfish,即加

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

  • Bcrypt使用河豚
  • 河豚比MD5好
  • 问:但是河豚比鲨鱼好吗
谢谢

更新:

我想澄清一下,我理解散列和加密之间的区别。促使我这样问的是,作者将bcrypt称为“自适应哈希”

由于bcrypt是基于Blowfish的,所以我认为Blowfish是一种散列算法。如果它像答案所指出的那样是加密,那么在我看来,它不应该出现在本文中。更糟糕的是,他认为bcrypt是最好的。
现在让我困惑的是phpass类(我相信用于密码哈希)使用bcrypt(即blowfish,即加密)。根据你们告诉我的这个新信息(河豚是加密),这个类听起来是错误的。我错过什么了吗

河豚不是散列算法。这是一种加密算法。这意味着你可以用blowfish加密一些东西,然后再把它解密回纯文本

SHA512是一种哈希算法。这意味着(理论上)一旦对输入进行散列,就无法再次获取原始输入

它们是两种不同的东西,设计用于不同的任务。“河豚比袋鼠好吗?”没有“正确”的答案,你不妨问“苹果比袋鼠好吗?”

如果您想阅读更多有关该主题的内容,请访问以下链接:


    • 河豚并不比MD5或SHA512好,因为它们有不同的用途。MD5和SHA512是散列算法,Blowfish是加密算法。两个完全不同的加密函数。

      只需说明bcrypt或SHA-512(在PBKDF2等适当算法的上下文中)是否足够好。答案是肯定的,这两种算法都足够安全,可以通过实现缺陷而不是密码分析导致漏洞

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

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


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

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

      如果有人提供的密码散列到密码表中存储的值,则对其进行身份验证。特别是,由于散列函数的不可逆性,我们假设用户不是获得散列并将其反转以查找有效密码的攻击者

      现在考虑BCRIPT。它使用Blowfish加密一个神奇的字符串,使用一个从密码“派生”的密钥。稍后,当用户输入密码时,将再次导出密钥,如果使用该密钥加密生成的密文与存储的密文匹配,则将对用户进行身份验证。密文存储在“password”表中,但从未存储派生密钥

      为了破坏这里的加密,攻击者必须从密文中恢复密钥。这称为“已知明文”攻击,因为该攻击知道已加密的魔法字符串,但不知道使用的密钥。已经对河豚进行了广泛的研究,目前还不知道有哪种攻击会让攻击者通过一个已知的明文找到密钥

      因此,就像基于不可逆算法的密码摘要一样,bcrypt从密码、salt和成本因素中产生不可逆输出。它的优势在于河豚对已知明文攻击的抵抗力,这类似于对摘要算法的“第一次图像前攻击”。因为它可以用来代替哈希算法来保护密码,所以bcrypt本身被混淆地称为“哈希”算法

      假设rainbow表已被正确使用salt阻止,任何真正不可逆的函数都会减少攻击者的尝试和错误。攻击者进行试验的速度取决于不可逆“散列”算法的速度。如果使用散列函数的一次迭代,攻击者可以使用1000美元左右的设备每秒进行数百万次尝试,并在几个月内测试所有长达8个字符的密码

      然而,如果摘要输出被“反馈”数千次,那么在该硬件上测试同一组密码将需要数百年的时间。Bcrypt通过在其密钥派生例程中进行迭代来实现相同的“密钥增强”效果,而一个合适的基于哈希的方法(如PBKDF2)也实现了同样的效果;在这方面,这两种方法是相似的

      因此,我对bcrypt的推荐源于a