我想知道是否可以提供理由或链接资源,解释为什么SHA512是比MD5更优秀的哈希算法。
MD5已经在密码学上被破解了相当长的一段时间。这基本上意味着散列算法通常保证的某些属性不再适用。例如,可能会比输出长度潜在需要的时间更快地找到哈希冲突。
SHA-512(散列函数家族之一)目前是足够安全的,但在可预见的未来可能不再安全。这就是为什么NIST开始了SHA-3竞赛的原因。
通常,您希望哈希算法是单向函数。它们将某些输入映射到某些输出。通常,输出具有固定的长度,从而提供原始输入的“摘要”。常见的属性是例如,输入中的小变化会产生输出中的大变化(这有助于检测篡改),并且该函数不容易被反转。对于后者特性,输出长度非常有帮助,因为它为碰撞攻击的复杂度提供了理论上界。然而,设计或实现上的缺陷通常会导致攻击的复杂度降低。一旦它们被发现,就是评估是否仍然使用哈希函数的时候了。如果攻击复杂度降低足够多,则实际攻击很容易落入没有专门计算设备的人的范围。
注意:我在这里只讨论一种攻击方式。现实情况要复杂得多,但也更难理解。由于哈希函数非常常用于验证文件/消息的完整性,因此碰撞问题可能是最容易理解和遵循的。
这里有几个问题没有得到解决,我感觉是因为对哈希的理解不够深入,不知道它是如何工作的以及使用虹表或其他目前已知的方法成功攻击哈希需要多长时间...
从数学上讲,如果你加盐并限制尝试次数(即使只有1秒),MD5就不会被“破解”,你的安全性与攻击者用木勺慢慢敲打你的1英尺实心钢墙时一样“破解”:
这将需要数千年的时间,到那时每个人都已经死了;还有更重要的事情需要担心。
如果他们在第20次尝试时锁定他们的账户...问题解决了。你的墙上有20个痕迹= 0.0000000001%的机会他们通过了。你成为耶稣的统计概率更高。
需要翻译的内容:同样需要注意的是,由于哈希是“某事物的(小)唯一标识”,因此任何哈希函数都容易发生碰撞。
增加位空间可以减少碰撞率,但也会增加 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,只是因为它使用更多的位数,这种情况发生的可能性要小得多。但是,如果你担心使用MD5会发生什么事情,而且你不理解真正的、实际的差异,那么你仍然可能会被黑客攻击,明白吗?
需要一个更大的字典来进行反向映射,并且碰撞的几率较低。
很简单,MD5 已经被破解了 ;) (参见维基百科)
Bruce Schneier 提到这次攻击时说:“我们已经知道 MD5 是一个破损的哈希函数”,“现在没人应该再使用 MD5 了。”