SHA512比MD5更优秀的原因

34

我想知道是否可以提供理由或链接资源,解释为什么SHA512是比MD5更优秀的哈希算法。

7个回答

66
这取决于您的使用情况。您不能广泛宣称“优越性”。(我的意思是,在某些情况下,您可以这样做,但严格来说,实际上不行)。但是有一些领域已经破解了MD5:1.首先:MD5很老,也很常见。有很多彩虹表可以破解它,并且它们很容易找到。因此,如果您使用md5对密码进行散列(没有盐-真可耻!),那么您可能就不需要对其进行散列,因为它们非常容易找到。即使您使用简单的盐进行散列也是如此。2.其次,MD5作为加密哈希函数不再安全(事实上,它甚至不再被认为是加密哈希函数,因为Forked One指出)。您可以生成不同的消息,这些消息哈希到相同的值。因此,如果您拥有具有MD5哈希的SSL证书,我可以生成一个重复的证书,以我想要的方式进行说明,该证书会生成相同的哈希。当人们说MD5已经“破解”时,通常是指这种情况。3.第三,与消息类似,您还可以生成不同的文件 哈希到相同的值,因此使用MD5作为文件校验和已经“破解”。
现在,SHA-512是SHA-2家族哈希算法之一。SHA-1如今被认为不太好用了,我们将忽略它。相比之下,SHA-2受到的攻击相对较少。维基百科提到的主要攻击是简化回合预像攻击,这意味着如果你以极其错误的方式使用SHA-512,我可以破解它。显然,你不太可能以那种方式使用它,但攻击只会变得更好,因此探索如何以同样的方式破解SHA-512是一个很好的起点,就像MD5被破解一样。
然而,在所有可用的哈希函数中,SHA-2家族目前是最强大的选择,也是考虑到普及性、分析和安全性的最佳选择。(但并非一定速度最快。如果你使用嵌入式系统,需要进行全面分析。)

7
“因为你可以生成不同的消息,其哈希值相同。”这就是为什么它不再被视为加密哈希函数的原因,因为它不再满足所有要求(http://en.wikipedia.org/wiki/Cryptographic_hash_function)。 - BlueRaja - Danny Pflughoeft

11

MD5已经在密码学上被破解了相当长的一段时间。这基本上意味着散列算法通常保证的某些属性不再适用。例如,可能会比输出长度潜在需要的时间更快地找到哈希冲突。

SHA-512(散列函数家族之一)目前是足够安全的,但在可预见的未来可能不再安全。这就是为什么NIST开始了SHA-3竞赛的原因。

通常,您希望哈希算法是单向函数。它们将某些输入映射到某些输出。通常,输出具有固定的长度,从而提供原始输入的“摘要”。常见的属性是例如,输入中的小变化会产生输出中的大变化(这有助于检测篡改),并且该函数不容易被反转。对于后者特性,输出长度非常有帮助,因为它为碰撞攻击的复杂度提供了理论上界。然而,设计或实现上的缺陷通常会导致攻击的复杂度降低。一旦它们被发现,就是评估是否仍然使用哈希函数的时候了。如果攻击复杂度降低足够多,则实际攻击很容易落入没有专门计算设备的人的范围。

注意:我在这里只讨论一种攻击方式。现实情况要复杂得多,但也更难理解。由于哈希函数非常常用于验证文件/消息的完整性,因此碰撞问题可能是最容易理解和遵循的。


2
请注意,SHA-512是SHA-2系列算法之一。(解释对SHA-3的引用。) - yfeldblum

9

这里有几个问题没有得到解决,我感觉是因为对哈希的理解不够深入,不知道它是如何工作的以及使用虹表或其他目前已知的方法成功攻击哈希需要多长时间...

从数学上讲,如果你加盐并限制尝试次数(即使只有1秒),MD5就不会被“破解”,你的安全性与攻击者用木勺慢慢敲打你的1英尺实心钢墙时一样“破解”:

这将需要数千年的时间,到那时每个人都已经死了;还有更重要的事情需要担心。

如果他们在第20次尝试时锁定他们的账户...问题解决了。你的墙上有20个痕迹= 0.0000000001%的机会他们通过了。你成为耶稣的统计概率更高。

You're thinking about it wrong.

需要翻译的内容:

同样需要注意的是,由于哈希是“某事物的(小)唯一标识”,因此任何哈希函数都容易发生碰撞。

增加位空间可以减少碰撞率,但也会增加 ID 的大小和计算时间。

让我们进行一个小小的思想实验...

如果 SHA-2 存在,它将为其他某些东西提供 4 种可能的唯一 ID...00、01、10 和 11。显然,它会产生碰撞。你看到问题了吗?哈希只是你试图识别的东西的生成 ID。

MD5 实际上非常擅长根据输入随机选择一个数字。SHA 在这方面并没有更好;SHA 只是拥有更大的 ID 空间。

所使用的方法只占碰撞不太可能发生的原因的0.1%。真正的原因是更大的位空间。

这是 SHA-256 和 SHA-512 更不易发生碰撞的唯一原因;因为它们使用了更大的唯一 ID 空间。

实际使用SHA-256和SHA-512生成哈希的方法确实更好,但差别不大;如果它们的ID位数较少,则同样会受到彩虹攻击,而使用SHA-256和SHA-512,文件甚至密码可能具有相同的ID,只是因为它使用更多的位数,这种情况发生的可能性要小得多。
“真正的问题在于如何实现您的安全性。”
如果允许自动攻击每秒命中认证端点1,000次,那么您将被入侵。 如果限制每3秒尝试1次,并在第10次尝试后锁定帐户24小时,那么您就不会被入侵。
如果存储未经盐处理的密码(盐只是添加到生成器的秘密,使其更难以识别不良密码,例如“31337”或“password”),并且有很多用户,则您将被黑客攻击。 如果加盐,即使使用MD5,您也不会被攻击。
考虑到MD5使用128位(十六进制中的32个字节,在二进制中为16个字节),而SHA 512仅是4倍的空间,但通过提供2^384个更多的可能ID几乎消除了冲突比率...每次都选择SHA-512。

但是,如果你担心使用MD5会发生什么事情,而且你不理解真正的、实际的差异,那么你仍然可能会被黑客攻击,明白吗?


1
我看到《啥也不懂和更蠢的人》,我点赞了。但事实证明,这是一个非常好的答案。 - Joshua Pinter


1

0

需要一个更大的字典来进行反向映射,并且碰撞的几率较低。


0

很简单,MD5 已经被破解了 ;) (参见维基百科)

Bruce Schneier 提到这次攻击时说:“我们已经知道 MD5 是一个破损的哈希函数”,“现在没人应该再使用 MD5 了。”


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