我期待在哈希算法,但找不到答案。
- Bcrypt使用河豚
- 河豚比MD5更好
- 问:但河豚比SHA512更好?
谢谢..
更新:
我要澄清的是我理解的散列和加密的区别。 是什么促使我要问的问题这种方式这篇文章 , 在这里笔者指的是bcrypt“自适应散列”
由于bcrypt是基于河豚,我被领导认为是河豚散列算法。 如果是因为答案已经指出加密,那么在我看来,像它应该不会有这篇文章的地方。 更糟糕的是,他的结论是bcrypt是最好的。 什么也困惑我现在就是phpass类(用于密码哈希我相信)使用bcrypt(即河豚,即加密)。 基于你们告诉我这个新的信息(河豚是加密),这个类的声音是错误的。 我缺少的东西吗?
它应足以说bcrypt或SHA-512(像PBKDF2合适的算法的情况下)是否足够好 。 答案是肯定的,无论是算法是足够安全的一个缺口将通过实施缺陷,而不是密码分析发生。
如果你一定要知道,这是“更好”,SHA-512有过深入审查通过NIST等。 这是很好的,但缺陷已经认识到,虽然没有可利用的现在,已经导致了新的散列算法的SHA-3的竞争。 另外,请记住,散列算法的研究比密码的“新”,和密码学家还在学习他们。
即使bcrypt作为一个整体一直没有尽可能多的审查作为河豚本身,我认为,是基于一个易于理解的结构的密码赋予它是基于哈希的认证缺乏一些固有的安全性。 此外,它更容易使用的GPU共同作为攻击基于SHA-2哈希值的工具; 因为它的内存需求,优化bcrypt需要更多的专用硬件FPGA像一些板载RAM。
注:bcrypt是使用河豚内部的算法。 这是不是一个加密算法本身。 它是用来不可逆转晦涩的密码,就像散列函数是用来做一个“单向散列”。
加密散列算法被设计成不可能扭转。 换句话说,只给出一个散列函数的输出,它应该采取“永远”地发现,将产生相同的散列输出的消息。 事实上,它应该是计算上不可能找到产生相同的散列值的任何两个消息。 不像密码,散列函数不与关键参数; 相同的输入总是会产生相同的输出。
如果有人提供了散列存储在密码表中的值密码,它们已通过认证。 特别是,由于哈希函数的不可逆性的,它假定用户是不是攻击者,进行了哈希的保持和扭转它来寻找工作的密码。
现在考虑bcrypt。 它采用河豚使用密钥从口令“导出”加密魔术字符串。 稍后,当用户输入一个密码,密钥再次被导出,并且如果通过使用该密钥加密产生的密文的密文存储匹配,则用户被认证。 密文存储在“密码”表,但导出密钥,但不会保存。
在这里为了解读密码,攻击者必须恢复从密文的关键。 这被称为“已知明文”攻击,因为攻击知道已经加密的魔法字符串,但不使用的关键。 河豚已被广泛研究,并没有攻击还不清楚这将允许攻击者找到一个已知明文的关键。
这样,就像不可逆的算法基于加密摘要,bcrypt产生不可逆的输出,从一个密码,盐和成本因素。 它的优势在于河豚的已知明文攻击性,这是类似于一个“第一原像攻击”的摘要算法。 因为它可以代替散列算法来保护密码,bcrypt被混淆的称为“哈希”算法本身。
假设彩虹表已经被正确使用盐的挫败,任何真正的不可逆的功能减少了攻击者尝试和错误。 而且,攻击者可以使试验速度是不可逆的“哈希”算法的速度决定。 如果使用的哈希函数的单次迭代,攻击者可以让数以百万计的试验每秒设备使用的是$ 1000的量级成本,测试所有的密码最多8个字符长几个月。
但是,如果消化输出“反馈”上千次,这将需要数百年来测试相同的一组在该硬件上的密码。 Bcrypt其键导出过程中迭代达到相同的“关键强化”的效果,像PBKDF2适当的基于散列的方法做同样的事情; 在这方面,这两种方法是类似的。
所以,我的bcrypt的建议,从假设1)茎是河豚已审查的SHA-2系列的散列函数的相似程度,以及2)对于密码的密码分析方法比那些散列函数更好的发展。
我同意埃里克森的回答,有一点需要注意:口令认证的目的,bcrypt 远比 SHA-512的单次迭代更好的-只是因为它是慢得多。 如果你不知道为什么缓慢是在这个特定的游戏优势,念你链接到文章再次(向下滚动到“ 速度正是你不想在密码哈希函数的东西。”)。
当然,你可以通过它迭代上千次,就像PHK的方式MD5算法的工作建立一个安全的密码哈希算法各地的SHA-512。 乌利齐·德雷珀确实做到了这个 ,对glibc的公司的crypt()。 有没有特别的理由这样做,不过,如果你已经有了一个测试bcrypt可能的实现方式。
河豚是不是一个哈希算法。 这是一个加密算法。 这是什么意思是,你可以使用加密河豚的东西,再后来就可以解密回明文。
SHA512是散列算法。 这意味着,(理论上),一旦你散列输入你不能再取回原来的输入。
他们是两个不同的东西,设计用于不同的任务。 有没有“正确”的答案为“是河豚比SHA512更好吗?” 你不妨问“是苹果比袋鼠更好吗?”
如果你想阅读一些关于这个专题这里的一些链接:
河豚是不是比MD5或SHA512更好,因为他们的目的不同。 MD5和SHA512被散列算法,河豚是一个加密算法。 两个完全不同的加密功能。
我会建议乌利齐·德雷珀的基于SHA-256 / SHA-512隐窝实现。
我们移植这些算法的Java,你可以找到他们在自由行货版本ftp://ftp.arlut.utexas.edu/java_hashes/ 。
需要注意的是最现代化的(L)Unix系统支持Drepper的算法中的/ etc / shadow文件。
我只是碰到这样的:
http://codahale.com/how-to-safely-store-a-password/
这篇文章的作者可能是错误的?
文章来源: SHA512 vs. Blowfish and Bcrypt [closed]