截至2011年,哪种哈希算法最适合用于消息摘要?

4

当我谷歌这个问题时,我对答案有些矛盾,因为这些算法不断改进,新的漏洞被发现,新的问题也随之出现......很多关于使用哪种算法的建议都过时了,或者是从旧时代保留下来的想法。

我想在这里非常清楚:我不是在谈论密码。我正在谈论消息摘要,而不是加密哈希。

我本可以使用md5作为消息摘要的第一个选择(它就在名称中),但我记得它与更现代的算法相比存在更多的冲突。那么,是什么让这些更新的算法更适合用于文件或短字符串的消息摘要呢?

所以我的问题是,应该使用什么现代消息摘要算法?

2个回答

2
从这个角度来看,根据您所处理的数据量,SHA1应该可以胜任 - 如果您将处理更大量的数据,则SHA-2算法(如SHA-256)可能更适合,因为SHA1中的碰撞风险由于其算法中的缺陷而上升,但在处理较小量的数据时并不是非常严重。
MD5已被证明对碰撞过于脆弱,因为曾经有攻击SSL证书使用MD5创建伪造的SSL证书,因此我建议远离它。此外,根据您的应用程序,如果FIPS 140合规性很重要,则MD5不符合要求。
相比MD5,SHA1更理想,因为MD5使用起来存在风险,而SHA1在大多数常见情况下的性能比SHA-2好。 SHA-2算法并不慢 - 但它具有优势。然而,SHA1略微存在风险,因为您可能已经锁定了自己的使用 - 如果开始发现碰撞,可能很难更改,因此最好一开始就投资于SHA-2算法。使用SHA-256而不是SHA-1的惩罚非常小,具体取决于您将如何使用SHA算法。SHA-2算法产生比SHA1更大的输出,但有减少碰撞机会的好处。
那么哪个是正确的?这取决于您所寻找的内容和您的用例。希望现在您可以做出决定。

2
如果有疑问,使用SHA-256。其他的SHA-2函数也可以使用; 但是,SHA-384和SHA-512在小型(仅32位)平台上可能会遭受非常重要的性能下降。这对于某些特定应用程序可能很重要。
对于非安全相关的用途(例如哈希表中的第一次索引或意外的、非恶意的数据更改检测——你可以使用CRC),请考虑MD4,它是MD5的前身。MD4比MD5更容易被攻击,但实现更简单(代码更短)而且更快(实际上,在某些ARM平台上,它的速度比CRC32还要快)。

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