34

我想知道我是否可以解释为什么 SHA512 是优于 MD5 的散列算法的原因或资源链接。

4

7 回答 7

65

这取决于您的用例。你不能笼统地宣称“优越”。(我的意思是,是的,在某些情况下你可以,但严格来说,你真的不能)。

但也有MD5被破解的地方:

  1. 对于初学者:MD5 是旧的,而且很常见。上面有很多彩虹桌,而且很容易找到。因此,如果您正在对密码进行哈希处理(没有加盐 - 你真丢脸!) - 使用 md5 - 你最好不要对它们进行哈希处理,它们很容易找到。即使你真的用简单的盐散列。
  2. 其次,MD5 作为加密散列函数不再安全(事实上,正如 Forked One 所指出的,它甚至不再被视为加密散列函数)。您可以生成散列到相同值的不同消息。因此,如果您有一个带有 MD5 哈希的 SSL 证书,我可以生成一个重复的证书,说明我想要什么,它会产生相同的 hash。这通常是人们说 MD5 被“损坏”时的意思——像这样的事情。
  3. 第三,与消息类似,您还可以生成散列到相同值的不同文件 ,因此使用 MD5 作为文件校验和是“损坏的”。

现在,SHA-512 是一种SHA-2 系列哈希算法。SHA-1 现在有点被认为是“嗯”,我会忽略它。然而,SHA-2 对它的攻击相对较少。维基百科主要讨论的是减少轮次原像攻击,这意味着如果你以非常错误的方式使用 SHA-512,我可以破解它。显然,您不太可能以这种方式使用它,但攻击只会变得更好,这是一个很好的跳板,可以进行更多研究以破解 SHA-512,就像破解 MD5 一样。

但是,在所有可用的 Hash 函数中,SHA-2 系列是目前最强的,也是考虑到通用性、分析性和安全性的最佳选择。(但不一定是速度。如果您在嵌入式系统中,则需要执行其他分析。)

于 2010-01-22T14:18:28.080 回答
11

MD5 已经被密码破解了很长一段时间了。这基本上意味着通常由哈希算法保证的某些属性不再成立。例如,可以在比输出长度可能需要的时间短得多的时间内找到哈希冲突。

SHA-512(SHA-2 系列哈希函数之一)目前足够安全,但在可预见的未来可能不会太长。这就是 NIST 发起 SHA-3 竞赛的原因。

通常,您希望哈希算法是单向的职能。他们将一些输入映射到一些输出。通常输出是固定长度的,从而提供原始输入的“摘要”。常见的属性是,例如输入的微小变化会导致输出的巨大变化(这有助于检测篡改),并且该函数不容易逆转。对于后一个属性,输出的长度有很大帮助,因为它为碰撞攻击的复杂性提供了理论上限。但是,设计或实施中的缺陷通常会降低攻击的复杂性。一旦知道了这些,就该评估是否仍在使用散列函数。如果攻击复杂性下降得足够远,实际攻击很容易进入没有专门计算设备的人的范围内。

注意:我在这里只讨论了一种攻击。现实更微妙,但也更难把握。由于散列函数非常常用于验证文件/消息的完整性,因此冲突可能是最容易理解和遵循的。

于 2010-01-22T14:17:09.650 回答
7

这里有几点没有解决,我觉得这是因为缺乏对哈希是什么、它是如何工作的以及成功攻击它们需要多长时间的理解,使用彩虹或任何其他目前已知的方法男人...

从数学上讲,如果您对哈希和油门尝试进行加盐(即使是 1 秒),MD5 不会“损坏”,您的安全性将与攻击者用木勺子:

这将需要数千年,到那时,所有参与其中的人都将死去;还有更重要的事情需要担心。

如果您在第 20 次尝试之前锁定他们的帐户……问题就解决了。在你的墙上击中 20 次 = 0.0000000001% 的几率他们通过了。从字面上看,你实际上是耶稣的可能性更大。

你想错了。

同样重要的是要注意,由于散列是“其他东西的(小)唯一ID”,绝对任何散列函数都将容易受到冲突的影响。

当您增加位空间时,您会降低碰撞率,但也会增加 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”或“密码”这样的错误密码)并且有很多用户,那么您将被黑客入侵。如果你给它们加盐,即使你使用 MD5,你也不是。

考虑到 MD5 使用 128 位(HEX 中 32 字节,二进制中 16 字节),而 SHA 512 仅是空间的 4 倍,但实际上通过为您提供 2^384 个更多可能的 ID 来消除冲突率......使用 SHA-512,每个时间。

但是,如果您担心使用 MD5 会发生什么,并且您不了解真正的实际差异,那么您仍然可能会被黑客入侵,有意义吗?

于 2016-06-28T18:38:30.310 回答
2

读这个

然而,已经证明 MD5 不耐碰撞

有关碰撞的更多信息在这里

于 2010-01-22T14:16:40.997 回答
1

MD5 有可能发生冲突(http://www.mscs.dal.ca/~selinger/md5collision/),并且有许多 MD5 彩虹表用于在网络上进行反向密码查找并可供下载。

于 2010-01-22T14:17:56.517 回答
0

它需要一个更大的字典来向后映射,并且碰撞的可能性更低。

于 2010-01-22T14:11:25.320 回答
0

很简单,MD5 坏了;)(见维基百科

Bruce Schneier 写道,“我们已经知道 MD5 是一个损坏的哈希函数”并且“没有人应该再使用 MD5”。

于 2010-01-22T14:17:41.373 回答