【发布时间】:2010-05-22 19:27:49
【问题描述】:
使用像 SHA-256 这样的安全哈希函数是微不足道的,继续使用 MD5 来保证安全是鲁莽的行为。但是,我想更好地理解散列函数漏洞的一些复杂性。
冲突是generated for MD4 and MD5。根据 NIST,MD5 不是一个安全的散列函数。它只需要239 operations to generate a collision,绝不应该是used for passwords。但是 SHA-1 容易受到 similar collision attack 的攻击,其中可以在 269 操作中发现冲突,而暴力破解是 280。没有人产生 SHA-1 冲突和NIST still lists SHA-1 as a secure message digest function。
那么什么时候使用损坏的哈希函数是安全的?即使一个功能被破坏,它仍然可以“足够大”。 According to Schneier 易受碰撞攻击的哈希函数仍然可以用作HMAC。我相信这是因为 HMAC 的安全性取决于其密钥,并且在获得此密钥之前无法找到冲突。一旦你在 HMAC 中使用了密钥,它就已经被破坏了,所以这是一个有争议的问题。哪些哈希函数漏洞会破坏 HMAC 的安全性?
让我们更进一步地了解这个属性。如果在密码前加上盐,那么使用非常弱的消息摘要(如 MD4)作为密码是否会变得安全?请记住,MD4 和 MD5 攻击是前缀攻击,如果添加了盐,那么攻击者将无法控制消息的前缀。如果盐确实是一个秘密,并且不为攻击者所知,那么是否将其附加到密码中是否重要?假设攻击者在获得整个消息之前无法产生冲突是否安全?
您是否知道可以在安全上下文中使用损坏的哈希函数而不引入漏洞的其他情况?
(请发布支持证据,因为它很棒!)
【问题讨论】:
-
关于 HMAC 的维基百科文章 - en.wikipedia.org/wiki/HMAC 说
HMAC with the full version of MD4 can be forged with this knowledge。这份文件 - eprint.iacr.org/2006/187.pdf - 解释了它背后的数学原理,但我并不完全遵循它。也许您可能对此感兴趣。
标签: security hash cryptography message-digest