MD5碰撞是否容易发生?

3
这个页面看来,每秒可以进行50亿个哈希操作。这是否意味着导致碰撞并不困难?如果我想创建一个特定MD5或SHA1的文件需要多长时间?
根据我的计算(使用2^160),仍然需要很长时间,但听说对于破解160位SHA1哈希值并非需要2^160次尝试。

1
http://th.informatik.uni-mannheim.de/people/lucks/HashCollisions/ - Casey
是的,那让我感到困惑。而且它似乎是在2005年发生的。尽管SHA等哈希值不同,但这两个文件的MD5值是相同的。 - user34537
为什么这会让人感到困惑呢?整个重点在于MD5允许在完全不同的输入上发生碰撞;当SHA是完全不同的算法时,为什么它会对相同的文件有相同的缺陷呢? - Casey
1
为了举例说明,假设我创建了自己的哈希算法,它只返回文件中的字节数。你可以看到这样很容易产生冲突,但是没有理由期望与我的哈希算法发生冲突的项会与MD5或SHA发生冲突。 - Casey
3
至少在2008年时,答案毫无疑问是肯定的,需要“几个小时”的时间。为了以戏剧化的方式突出这一点,请参见Nostradamus Attack on PS3,其中通过制作十二个不同获胜者名字但所有文件的哈希值都相同的文件来“预测”2008年美国总统选举的获胜者。 - Iwillnotexist Idonotexist
显示剩余2条评论
1个回答

0
如果每秒钟可以进行50亿次哈希运算,那么你大约需要花费452,112,268,518,518,518,518,520年才能创建或“反向”一个哈希值(所以最好趁年轻开始)

这个假设背后的数学原理

  • MD5哈希有2^128种可能的组合
  • 每秒钟进行50亿次哈希运算意味着秒数= 2^128 / (5 * 10^9)
  • 这大约是10^30秒
  • 这大约是452,112,268,518,518,518,518,520年

结论:你需要3万亿台计算机,从宇宙大爆炸开始,到今天才能得到你的MD5哈希值。

暴力破解和密码学

在密码学方面,暴力破解永远不是答案。一旦使用它,就意味着加密算法不够强大,即没有足够的位数。这就发生在DES上,它只有56位密钥-这显然是不够的。

此外,请注意,256位不是128位的“两倍”!实际上,256位是128位的2^128倍。

2^256 / 2^128 = 2^128

如何制造MD5碰撞!

使用暴力破解,你永远无法得到任何结果!无论你有多少台电脑。唯一的选择是通过数学攻击算法。

全世界的加密分析师和数学家都在研究这个问题。

他们通过破解算法,在合理的时间内创建了一个MD5碰撞。不要问我他们是如何做到的,但以下是一个例子:

d131dd02c5e6eec4 693d9a0698aff95c 2fcab58712467eab 4004583eb8fb7f89
55ad340609f4b302 83e488832571415a 085125e8f7cdc99f d91dbdf280373c5b
d8823e3156348f5b ae6dacd436c919c6 dd53e2b487da03fd 02396306d248cda0
e99f33420f577ee8 ce54b67080a80d1e c69821bcb6a88393 96f9652b6ff72a70

与以下文本具有相同的MD5:

d131dd02c5e6eec4 693d9a0698aff95c 2fcab50712467eab4004583eb8fb7f89
55ad340609f4b302 83e4888325f1415a085125e8f7cdc99f d91dbd7280373c5b
d8823e3156348f5b ae6dacd436c919c6 dd53e23487da03fd02396306d248cda0
e99f33420f577ee8 ce54b67080280d1ec69821bcb6a88393 96f965ab6ff72a70

一个漏洞:彩虹表

所以你无法反向哈希,但是有像 md5cracker 这样的彩虹表。它们拥有一个大型的字符串(通常是密码)和它们的哈希的数据库。因此,如果您使用简单的密码,可以在那里查找哈希值。

尝试查找此哈希值:

如果您在数据库中存储密码的MD5值,最好将其添加一个盐。例如,不要使用md5(password),而是使用md5("salt1234" + password)。或者更好的方法是,为每个用户使用不同的盐,这样没有人可以看到哪些用户共享相同的密码。
结论:请注意,即使您无法反向哈希,但仍然可以查找哈希值,对于上述未加盐的哈希值来说,这很容易。
黑客电影及其行动通常依赖于暴力破解,但这并不是真相!

1
它们的md5不相同。我将您的字符串粘贴到md5哈希编码器中,得到不同的md5哈希值。 - pavel_orekhov
这些是以十六进制表示的字节,而不是字符串。 - bytecode77
不,这些是字符串,应该按原样粘贴到MD5哈希编码器中,问题是 - 你包含了空格。 - pavel_orekhov

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