SHA-2和SHA-3哈希算法有什么区别?

21

我知道SHA-224、SHA-256、SHA-384和SHA-512都是SHA-2哈希函数家族的一部分。但现在还有一个新的SHA-3哈希算法。

请问你能告诉我SHA-2和SHA-3之间的区别吗?何时以及为什么应该使用SHA-3?SHA-3实际包含哪些安全哈希算法?


2
@xuinkrbin,这很遗憾,因为这个问题不属于本论坛的主题 - 这个问题最好在crypto.stackexchange上提问。请注意,我们现在已经有一个答案了,不能再添加其他答案。所以即使Ilmari的回答还不错,它也永远不会成为谷歌上有用的搜索结果。但是我已经删除了我的相当冒犯的话语。 - Maarten Bodewes
1
对我来说很有用。 :-) - 700 Software
1个回答

36

SHA-3,也称作Keccak(在其成为NIST SHA-3比赛的获胜者之前拥有的原名),是一种全新的哈希算法,与SHA-1和SHA-2没有任何关系。

事实上,NIST选择Keccak作为SHA-3比赛的获胜者之一,其中一个声明的原因是它与现有的SHA-1/2算法不同。据称,这种不同使它更好地补充了现有的SHA-2算法(仍被NIST视为安全并推荐使用),同时也降低了未来密码分析突破会危及SHA-2和SHA-3安全性的可能性。

对于一些背景知识,SHA-3哈希函数比赛最初由NIST于2007年宣布,此前一些新的密码分析攻击曾对SHA-1的安全性提出质疑。虽然当时对SHA-1的攻击主要是理论探讨,但人们担心进一步完善这些技术可能会导致SHA-1面临实际的碰撞攻击,并且相似设计的SHA-2也可能受到同样的攻击。因此,NIST决定举办一次比赛,以选择SHA-2的后继者,并将其命名为SHA-3。

然而,尽管SHA-1在2017年最终发生了真实世界的碰撞攻击(详见此处),但对SHA-2的担心攻击并未出现。现今普遍认为,破解SHA-2不会像10年前那么容易,因此SHA-2的所有变种在可预见的未来仍被认为是安全的。然而,由于NIST承诺在2012年选择SHA-3,并且由于许多人花费了相当多的时间和精力提交和评估新的哈希函数,而且决赛中有一些真正不错的设计,如果毕竟没有选择任何一个作为获胜者,那将是一件遗憾的事情。因此,NIST决定选择Keccak作为SHA-3,并将其推荐为SHA-2哈希函数的替代选项(而非后继者)。
这意味着,如果您想要一个安全且标准化的哈希函数,可以选择SHA-2或SHA-3。如果您感到非常焦虑,甚至可能希望同时使用两者,并设计您的加密系统使其保持安全,即使其中一个哈希函数被破解。

6
如果你不知道该怎么做,同时使用两个哈希函数可能会有些危险。当然,这取决于你想要达到什么效果。 - Maarten Bodewes
2
有什么危险吗?(不确定这里可能存在的潜在问题...) - Laoujin
2
我不是密码分析专家,但我认为“危险”可能意味着碰撞sha3(sha2(X))比碰撞sha2(X)或sha3(X)更容易,或者可能意味着提供sha2(X)和sha3(X)可能会泄漏有关X的更多信息,使得猜测X更容易。 - Tshirtman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接