什么时候使用破坏的哈希函数是安全的?

时间:2010-05-22 19:27:49

标签: security hash cryptography message-digest

使用像SHA-256这样的安全散列函数是微不足道的,并且继续使用MD5来保证安全性是鲁莽行为。但是,我希望更好地理解哈希函数漏洞的一些复杂性。

碰撞已generated for MD4 and MD5。根据NIST,MD5不是安全散列函数。它只需要239 operations to generate a collision,永远不应该是used for passwords。然而,SHA-1容易受到similar collision attack的影响,其中在2 69 操作中可以发现碰撞,而蛮力是2 80 。没有人生成SHA-1冲突和NIST still lists SHA-1 as a secure message digest function

那么什么时候使用破坏的哈希函数是安全的?即使功能被破坏,它仍然可以“足够大”。 According to Schneier易受冲突攻击的哈希函数仍可用作HMAC。我相信这是因为HMAC的安全性取决于其密钥,并且在获得此密钥之前无法找到冲突。一旦你在HMAC中使用了密钥,它就已经坏了,所以这是一个没有实际意义的问题。哈希函数漏洞会破坏HMAC的安全性?

让我们进一步了解这个属性。如果密码前面加盐,那么使用像MD4这样的非常弱的消息摘要是否可以安全地使用密码?请记住,MD4和MD5攻击是攻击的前缀,如果预先添加了盐,则攻击者无法控制消息的前缀。如果盐真的是一个秘密,并且攻击者不知道,那么它是否附加在密码上是否重要?假设攻击者在获得整个消息之前无法生成冲突,这是否安全?

您是否知道在不引入漏洞的情况下可以在安全上下文中使用损坏的哈希函数的其他情况?

(请发布支持证据,因为它太棒了!)

6 个答案:

答案 0 :(得分:26)

答案 1 :(得分:4)

唯一一次使用破坏的哈希函数是安全的,当碰撞的后果是无害的或无关紧要的时候,例如将文件分配给文件系统上的存储桶时。

答案 2 :(得分:2)

当你不在乎它是否安全时。

说真的,在几乎所有语言中使用安全散列函数都不需要额外的努力,并且性能影响可以忽略不计,所以我不明白你为什么不这样做。

[实际阅读问题后编辑]

  

根据Schneier的说法,易受攻击攻击的哈希函数仍然可以用作HMAC。我相信这是因为HMAC的安全性取决于其密钥,并且在获得此密钥之前无法找到冲突。

实际上,这主要是因为能够为哈希生成冲突并不一定能帮助您为hash-of-a-hash生成冲突(结合H​​MAC使用的XORing)。

  

如果在密码中附加了盐,那么使用非常弱的消息摘要(如md4)来安全吗?

不,如果散列有preimage attack,则允许您将数据添加到输入中。例如,如果散列是H(pass + salt),我们需要一个preimage攻击,它允许我们找到pass H(pass2 + salt) = H(pass + salt)

过去曾发生过追加攻击,所以我确信可以进行前置攻击。

答案 3 :(得分:2)

下载站点使用MD5哈希作为校验和来确定文件在下载过程中是否已损坏,并且我会说破坏的哈希足够用于此目的。

让我们说MITM决定修改文件(例如zip存档或exe)。现在,攻击者必须做两件事 -

  1. 查找哈希冲突并从中创建修改后的文件
  2. 确保新创建的文件 是有效的exe或zip存档
  3. 使用破坏的哈希值,1更容易一些。但是确保碰撞同时满足文件的其他已知属性在计算上太昂贵了。

    这完全是我自己的答案,我可能非常错误。

答案 4 :(得分:0)

答案完全取决于你使用它的目的。如果你需要防止某人在几毫秒内发生碰撞,我就不必担心如果你需要在几十年内阻止某人发生碰撞。

你实际上试图解决什么问题?

答案 5 :(得分:0)

使用MD4之类的东西担心密码的大部分担心与目前已知的攻击有关,而不是一旦分析到碰撞生成很容易的事实,它通常被认为是相当多的很可能有人能够利用这些知识来创建一个原像攻击 - 当这种情况发生时,基本上所有可能的哈希函数都会变得脆弱。