【发布时间】:2020-12-22 06:47:43
【问题描述】:
我想知道是否可以解释为什么 SHA512 是优于 MD5 的散列算法的原因或资源链接。
【问题讨论】:
标签: cryptography md5 hash sha512
我想知道是否可以解释为什么 SHA512 是优于 MD5 的散列算法的原因或资源链接。
【问题讨论】:
标签: cryptography md5 hash sha512
这取决于您的用例。你不能笼统地宣称“优越”。 (我的意思是,是的,在某些情况下你可以,但严格来说,你真的不能)。
但也有MD5被破解的地方:
现在,SHA-512 是一种SHA-2 Family 哈希算法。 SHA-1 现在有点被认为是“嗯”,我会忽略它。然而,SHA-2 对它的攻击相对较少。维基百科主要讨论的是a reduced-round preimage attack,这意味着如果你以非常错误的方式使用 SHA-512,我可以破解它。显然,您不太可能以这种方式使用它,但攻击只会变得更好,而且它是一个很好的跳板,可以进行更多研究以破解 SHA-512,就像破解 MD5 一样。
但是,在所有可用的 Hash 函数中,SHA-2 系列目前是最强的,也是考虑到通用性、分析和安全性的最佳选择。 (但不一定速度。如果你在嵌入式系统中,你需要执行一个完整的其他分析。)
【讨论】:
MD5 密码破解已经有一段时间了。这基本上意味着通常由哈希算法保证的某些属性不再成立。例如,可以在比输出长度可能需要的时间短得多的时间内找到哈希冲突。
SHA-512(SHA-2 系列哈希函数之一)目前足够安全,但在可预见的未来可能不会太长。这就是 NIST 发起 SHA-3 竞赛的原因。
通常,您希望散列算法是单向函数。他们将一些输入映射到一些输出。通常输出是固定长度的,从而提供原始输入的“摘要”。常见的属性是,例如输入的微小变化会导致输出的巨大变化(这有助于检测篡改),并且该函数不容易可逆。对于后一个属性,输出的长度有很大帮助,因为它为碰撞攻击的复杂性提供了理论上限。但是,设计或实施中的缺陷通常会降低攻击的复杂性。一旦知道了这些,就该评估是否仍在使用散列函数。如果攻击复杂性下降得足够远,实际攻击很容易在没有专门计算设备的情况下进入人们的范围。
注意:我在这里只讨论了一种攻击。现实更微妙,但也更难把握。由于哈希函数非常常用于验证文件/消息的完整性,因此冲突可能是最容易理解和遵循的。
【讨论】:
这里有几点没有解决,我觉得这是因为对哈希是什么、它是如何工作的以及使用 Rainbow 或任何其他方法成功攻击它们需要多长时间缺乏了解目前为人所知...
从数学上讲,如果您对哈希和油门尝试加盐(即使是 1 秒),MD5 不会“损坏”,您的安全性将与攻击者慢慢向您的 1 英尺实心钢投掷时一样“损坏”带木勺的墙:
这需要几千年,到那时所有参与的人都将死去;还有更重要的事情需要担心。
如果您在第 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 会发生什么,并且您不了解真正的实际差异,那么您仍然可能会被黑客入侵,这有意义吗?
【讨论】:
【讨论】:
MD5 有可能发生冲突 (http://www.mscs.dal.ca/~selinger/md5collision/),并且网上有许多 MD5 彩虹表用于反向密码查找并可供下载。
【讨论】:
它需要一个更大的字典来向后映射,并且碰撞的可能性更低。
【讨论】:
很简单,MD5坏了;)(见Wikipedia)
Bruce Schneier 写道,“我们已经知道 MD5 是一个损坏的哈希函数”并且“没有人应该再使用 MD5”了。
【讨论】: