Chr*_*ris 221 security encryption passwords hash
我正在看哈希算法,但找不到答案.
谢谢..
更新:
我想澄清一点,我理解散列和加密之间的区别.是什么促使我这样问这个问题的是这篇文章,作者将bcrypt称为"自适应散列"
由于bcrypt基于Blowfish,因此我认为Blowfish是一种哈希算法.如果它的答案已经指出加密,那么在我看来它应该不会在本文中占有一席之地.更糟糕的是,他总结说bcrypt是最好的.现在让我感到困惑的是phpass类(我相信用于密码哈希)使用bcrypt(即河豚,即加密).根据这些新信息,你们告诉我(河豚是加密),这个类听起来不对.我错过了什么吗?
eri*_*son 318
应该说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)密码的密码分析方法比哈希函数的密码分析方法更好.
caf*_*caf 49
我同意erickson的回答,但有一点需要注意:出于密码认证的目的,bcrypt 远比 SHA-512 的单次迭代好- 只是因为它慢得多.如果你不明白为什么慢速在这个特定的游戏中是一个优势,请阅读你再次链接的文章(向下滚动到" 速度正是你在密码散列函数中不想要的. ").
当然,您可以通过迭代数千次来围绕SHA-512构建安全的密码哈希算法,就像PHK的MD5算法的工作方式一样. 对于glibc的crypt(),Ulrich Drepper正是这样做的.但是,如果您已经有一个经过测试的bcrypt实现,那么没有特别的理由这样做.
Gle*_*len 31
Blowfish不是哈希算法.这是一种加密算法.这意味着您可以使用blowfish加密某些内容,然后您可以将其解密回纯文本.
SHA512是一种散列算法.这意味着(理论上)一旦您对输入进行散列,您就无法再次获得原始输入.
它们是两种不同的东西,旨在用于不同的任务."河豚鱼比SHA512好吗?"没有"正确"的答案. 你不妨问一下"苹果比袋鼠好吗?"
如果你想在这里阅读更多关于这个主题的一些链接: