目前,SHA256是强密码散列的事实上的标准吗?

从我看到的更多利用它的站点中,我想答案是肯定的,但我想听听这里的社区对此有何评论以及发生的原因。

评论

我在您的问题中将“已加密”更改为“加密”-如果您真的想加密哈希,则不仅需要哈希函数。

#1 楼

是的,SHA-256当前是事实上的标准。 “原因”是MD5和SHA-1不安全,剩下的唯一经过广泛研究和部署且没有人发现对它有重大攻击的算法就是SHA-256。 (也有SHA-512,但人们似乎认为它是过大的杀伤力。)

人们不确定是否有人会在不久的将来发现对SHA-256的有效攻击。正是这种恐惧促使SHA-3竞争。

您还应该考虑使用通用的长度扩展防御,例如Ferguson和Schneier设计的“ SHA-256d”。 SHA256d(x)= SHA256(SHA256(x))。如果您不使用通用的长度扩展防御,则必须考虑在使用哈希函数的每个位置进行长度扩展攻击的后果。这些注意事项可能很棘手,如果您误解了某些情况,则有时可能会导致安全漏洞。这就是为什么每次使用哈希函数时都使用通用的长度扩展防御更为安全的原因。
如果出于某种原因您不想使用SHA-256,并且您不想想要使用新的哈希函数(例如SHA-3候选对象),那么您也可以考虑使用Tiger。它的区别在于它是服务时间最长的哈希函数之一,没有已知的实际攻击方法。但是,它已经受了重伤(即不切实际但理论上很重要的攻击),因此我认为SHA-256比Tiger更安全。如果效率很重要,那么Tiger将比SHA-256,SHA-1或任何SHA-3决赛入围者在64位硬件上更快。它没有内置的通用长度扩展防御,但是您当然可以定义Tigerd(x)= Tiger(Tiger(x))。

我也认为目前的SHA-3决赛入围者很可能是安全的:http://ehash.iaik.tugraz.at/wiki/The_SHA-3_Zoo。当然,它们比SHA-256更新得多,但是它们的设计都充分理解了MD5和SHA-1中的缺陷,并且已经接受了近三年的严格审查。它们都带有通用的长度扩展防御。我最喜欢的是Blake和Skein,它们比Intel / AMD芯片上的SHA-256快。不幸的是,所有SHA-3候选对象都比ARM芯片上的SHA-256慢。

不要使用MD5或SHA-1。拜托。

评论


$ \ begingroup $
SHA-256d不是一个好主意,它有一些小缺点。您应该对内部和外部哈希使用不同的前缀,例如SHA-256(1 || SHA-256(0 || m)),或者仅使用具有固定密钥的HMAC-SHA-256。
$ \ endgroup $
– CodesInChaos
13年8月8日在8:13

$ \ begingroup $
对以前的评论有疑问:SHA-256d中的“弱点”吗?
$ \ endgroup $
– Tobias Kienzler
2013年12月5日上午8:53

#2 楼

要补充到@poncho的答案:SHA-256是Merkle-Damgård的结构,与SHA-1和MD5十分相似,但是内部操作更多。首次发布对MD5的攻击时,有人担心它们可能会扩展到类似的哈希函数,并且确实适用于SHA-1,但成功率却低得多(攻击仍然是理论上的,没有发生实际冲突计算)。 NIST决定发起一场公开比赛,以标准化称为SHA-3的新功能。内部原因未披露,但通常假设他们希望替换SHA-2,以防SHA-2损坏(“ SHA-2”是SHA-224,SHA-256,SHA-384和SHA的统称。 -512)。

SHA-2没有损坏。似乎在2008年之后,在破坏SHA-1或SHA-2方面的所有进展都已停止。这是因为SHA-2本质上是强大的,还是因为所有合适的研究人员都在忙于SHA-3候选对象。

一旦选择了SHA-3并发布了标准(应新的SHA-3将在2012年底发生),这将成为SHA-256的重要替代产品(或者我们希望,SHA-256在大多数32位架构上仍将比新的SHA-3更快)。同时,SHA-256是所有新设计的推荐哈希函数。

#3 楼

是的,目前,SHA256实际上是事实上的标准强密码哈希(唯一真正的竞争者是SHA384 / SHA512)。据我所知,其原因是它被认为缺乏替代品。当Wang女士发布攻击信息时,她设法破坏了大多数哈希函数。从那时起,已经发布了许多哈希函数。但是,由于她的攻击,人们变得谨慎了。 SHA256和SHA512是由知道自己在做什么的人精心设计的。还对SHA256和SHA512进行了一些分析。这似乎比那里的任何其他设计都要好(至少,直到宣布AHS获奖者为止)。

评论


$ \ begingroup $
请问王女士的论文吗?
$ \ endgroup $
–安德鲁(Andrew)
2011年10月2日,下午6:48

$ \ begingroup $
我猜这是“如何破坏MD5和其他哈希函数”(citeseerx.ist.psu.edu/viewdoc/…)
$ \ endgroup $
– Mikeikeazo
2011年10月2日,11:31