Security 什么是;尚未找到此哈希方法的冲突;什么意思?
我的意思是我不需要寻找实际的碰撞,知道它们的存在。如果没有碰撞,那么如何获得固定长度的结果?这就是为什么我不理解人们声称“md5不安全”的意思!有人发现了碰撞,或者类似的 我能想到的唯一一件事是,冲突搜索只查找字典中的单词,例如:如果“dog”和“house”共享相同的散列,在我看来,这将是一种愚蠢的散列方法。它还可以查找长度Security 什么是;尚未找到此哈希方法的冲突;什么意思?,security,hash,Security,Hash,我的意思是我不需要寻找实际的碰撞,知道它们的存在。如果没有碰撞,那么如何获得固定长度的结果?这就是为什么我不理解人们声称“md5不安全”的意思!有人发现了碰撞,或者类似的 我能想到的唯一一件事是,冲突搜索只查找字典中的单词,例如:如果“dog”和“house”共享相同的散列,在我看来,这将是一种愚蠢的散列方法。它还可以查找长度
我完全错了吗?正如你所知,冲突是指两个不同的东西(例如文档)散列到同一个值的情况 显然,对于安全哈希算法来说,冲突在理论上总是可能的。但安全哈希的安全性来自:
- 使用可能的散列值的大型域,以及
- 使用一种散列算法,该算法的特性是试错法接近生成具有给定散列的文档的最佳方式
我不完全理解这一点,但它看起来像是一个生成具有(不同)有意义内容和相同签名的文件的方法。MD5是一个128位哈希,因此有2^128个可能的哈希。如果散列是完美的,那么理论上需要大约2^64次不同的散列尝试才能找到冲突(并且必须存储所有2^64次,因为每个新的散列都需要与以前的所有值进行比较)。地球上没有2^64位的存储空间,所以你会很安全 对MD5的攻击允许使用明显少于2^64个哈希和明显少于128 x 2^64位的存储来发现冲突。这就是为什么MD5被认为是坏的
目前还没有针对全强度SHA-1的类似攻击,但预计这类攻击将在几年内公之于众。实际上,这不是关于是否发现了一个样本,而是关于一种方法。这些可以基于某些属性“如果您散列长度为N的值,以…结尾,等等。您将得到相同的散列”(愚蠢的示例),或者基于某些算法“具有此散列/值,这就是使用相同散列获得新值的方式” 碰撞当然总是存在的,但有趣的问题是如何找到它们。我不确定你所引用的声明的来源,但我很确定它实际上意味着“对于这种散列方法,还没有找到找到找到碰撞的实用方法” 例如,当您看到SHA-256哈希的“未找到冲突”时。你是对的,理论上存在碰撞,可能已经发生了没有人注意到的SHA-256碰撞,但这是无关的 为了偶然发现冲突,MD5哈希平均需要18次5百万次的哈希尝试,SHA-256哈希平均需要340次未经验证的尝试,这已经解决了生日问题 正如vy32所说,计算、存储和比较这么多散列在计算上是不可行的。所以,为了找到碰撞,你需要一种比随机试错法快很多数量级的方法。如果存在用于安全散列的这种方法,则至少就一般的抗冲突性而言,散列被视为已破坏
因此,说“有人在这个xxxbit散列中发现了冲突”实际上是“为这个散列找到了一个查找冲突的实用方法,使它不安全”的同义词。另一种选择是一个大规模的不太可能发生的事件,并且会以另一种方式报告。将一个文档(原始文档,很有用)替换为另一个文档(可能是非常随机和无意义的,其唯一有用的属性是它可以通过哈希检查)会有什么结果??受害者将得到一份损坏的文档,而不是一份“修改过的”文档(例如,我正在考虑合同)@HappyDeveloper-诀窍在于用一份修改过的文档替换它,该文档会说出你想要它说的话,利用文档格式中固有的冗余来调整签名。