Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 什么是;尚未找到此哈希方法的冲突;什么意思?_Security_Hash - Fatal编程技术网

Security 什么是;尚未找到此哈希方法的冲突;什么意思?

Security 什么是;尚未找到此哈希方法的冲突;什么意思?,security,hash,Security,Hash,我的意思是我不需要寻找实际的碰撞,知道它们的存在。如果没有碰撞,那么如何获得固定长度的结果?这就是为什么我不理解人们声称“md5不安全”的意思!有人发现了碰撞,或者类似的 我能想到的唯一一件事是,冲突搜索只查找字典中的单词,例如:如果“dog”和“house”共享相同的散列,在我看来,这将是一种愚蠢的散列方法。它还可以查找长度

我的意思是我不需要寻找实际的碰撞,知道它们的存在。如果没有碰撞,那么如何获得固定长度的结果?这就是为什么我不理解人们声称“md5不安全”的意思!有人发现了碰撞,或者类似的

我能想到的唯一一件事是,冲突搜索只查找字典中的单词,例如:如果“dog”和“house”共享相同的散列,在我看来,这将是一种愚蠢的散列方法。它还可以查找长度
我完全错了吗?

正如你所知,冲突是指两个不同的东西(例如文档)散列到同一个值的情况

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

  • 使用可能的散列值的大型域,以及
  • 使用一种散列算法,该算法的特性是试错法接近生成具有给定散列的文档的最佳方式
如果这两个标准都满足,那么有人能够为给定文档制造冲突的概率就非常小。这足以使(例如)使用数字签名更改文档内容变得不切实际

问题在于,聪明的人已经找到了一种(或多种)比反复试验快得多的方法来创建MD5签名冲突的文档。因此,他们可以击败数字签名和类似的MD5使用来提供安全性

跟进

此引语来自:

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


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

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-诀窍在于用一份修改过的文档替换它,该文档会说出你想要它说的话,利用文档格式中固有的冗余来调整签名。