什么“没有发现这种散列方法的碰撞”甚至意味着什么?

时间:2010-11-28 02:05:44

标签: security hash

我的意思是我不需要寻找实际的碰撞,知道它们存在。如果没有碰撞,那么你将如何得到固定长度的结果?这就是为什么当他们声称'md5不安全时我不明白人们的意思!有人发现了碰撞!',或类似的东西。

我唯一能想到的是,碰撞搜索只查找词典单词,例如:如果'dog'和'house'共享相同的哈希值,那将是一个愚蠢的哈希方法IMO。它还可以寻找长度<1的字符串。 X,X是5-10之间的东西(人们记得的密码)

我完全错了吗?

4 个答案:

答案 0 :(得分:2)

如您所知,碰撞是两个不同的事物(例如文档)散列到相同值的情况的术语。

显然,对于安全哈希算法,冲突在理论上总是可行的。但安全散列的安全性来自:

  • 使用可能的哈希值的大域,
  • 使用散列算法,该算法具有试验和错误接近生成具有给定散列的文档的最佳方式的属性。

如果满足这两个标准,则某人能够为给定文档制造碰撞的概率非常小。这足以使(例如)用数字签名更改文档的内容是不切实际的。

问题在于,聪明的人已经想出了一种方法(或方法)比创建MD5签名碰撞的文档的试错速度快。因此,他们可以打败数字签名,以及MD5的类似用途来提供安全性。

<强>后续

此引用来自Wikipedia page on MD5

  

MD5只对数据进行一次传递,因此如果可以构造具有相同散列的两个前缀,则可以向两者添加公共后缀,以使得使用它的应用程序更有可能将冲突接受为有效数据。此外,当前的冲突查找技术允许指定任意前缀:攻击者可以创建两个以相同内容开头的冲突文件。所有攻击者需要生成两个冲突文件的是一个模板文件,其中一个128字节的数据块在64字节边界上对齐,可以通过冲突查找算法自由更改。

我并不完全理解这一点,但看起来就像生成具有(不同)有意义内容和相同签名的文件一样。

答案 1 :(得分:2)

MD5是128位散列,因此有2 ^ 128个可能的散列。如果散列是完美的,那么它理论上需要大约2 ^ 64次不同的散列尝试来发现冲突(并且你必须存储所有2 ^ 64,因为每个新散列都需要与所有先前的值进行比较)。这个星球上没有2 ^ 64位的存储空间,所以你会很安全。

对MD5的攻击允许发现的冲突明显少于2 ^ 64个哈希,并且明显少于128 x 2 ^ 64位存储。这就是为什么MD5被认为是破碎的原因。

目前没有类似的攻击可用于全强度SHA-1,但预计此类攻击将在几年内公开发布。

答案 2 :(得分:1)

在实践中,它不是关于是否找到单个样本,而是关于方法。这些可以基于某些属性“如果你散列长度为N的值,以......结尾等等,你会得到相同的散列”(愚蠢的例子),或者基于某种算法“有这个散列/值,这个是如何使用相同的哈希“。

获得新值

碰撞当然会存在,但有趣的问题是如何找到它们。我不确定你引用的那个声明的来源是什么,但我很确定它应该实际意味着“找不到用于这种散列方法的碰撞的实用方法”。

答案 3 :(得分:1)

当您看到SHA-256哈希“找不到冲突”时,例如it really means that no hash collisions have ever been found。理论上存在碰撞是正确的,并且可能已经发生过没有人注意到的SHA-256碰撞,但这是无关紧要的。

为了偶然发现碰撞,你需要平均18次哈希尝试用于MD5哈希,以及340次非法尝试用于SHA-256哈希,已经解决了生日问题。

正如vy32所说,计算不可行的计算,存储和比较这么多哈希。因此,为了找到碰撞,您需要一种比随机试验和误差快一个数量级的方法。如果存在安全散列的这种方法,则认为散列被破坏,至少在一般碰撞阻力方面。

所以,说“有人在这个xxxbit散列中发现了一个碰撞”实际上就是说“找到这个散列的实际碰撞方法,使其不安全”。替代方案是一个在宇宙上不太可能的事件,并将以另一种方式报告。