SHA1 在 PBKDF2 中用作散列函数是不是仍然安全?
Posted
技术标签:
【中文标题】SHA1 在 PBKDF2 中用作散列函数是不是仍然安全?【英文标题】:Is SHA1 still secure for use as hash function in PBKDF2?SHA1 在 PBKDF2 中用作散列函数是否仍然安全? 【发布时间】:2011-06-23 18:13:48 【问题描述】:由于 SHA1 的密码分析取得了重大进展,因此应该逐步淘汰它以支持 SHA2 (wikipedia)。
然而,作为 PBKDF2 中的底层哈希函数,它基本上用作 PRNG。因此,使用 SHA1 作为 PBKDF2 的哈希应该仍然是安全的,对吧?
【问题讨论】:
【参考方案1】:对 SHA1 的攻击引起了很多公众的骚动,使得构造与不同消息具有相同哈希值的消息成为可能。对于每个散列函数,这当然总是可能的(原则上),因为散列函数的输出位比输入位少。但是,这通常不太可能是偶然发生的,故意这样做在计算上应该是不可行的。
从“确保消息完整性”的角度来看,这可以看作是一场灾难。
另一方面,为了生成随机数,这完全没有关系。
【讨论】:
【参考方案2】:当前已知的 SHA-1 弱点在 HMAC 中使用时不会对其安全性产生任何影响,在 PBKDF2 中使用时更是如此。就此而言,MD5 也可以(但不是 MD4)。
但是,SHA-1 对公共关系不利:如果您在 2011 年使用 SHA-1,那么您必须准备好为自己的选择辩护。另一方面,SHA-256 是一个很好的“默认函数”,没有人会质疑它。
在 PBKDF2 中没有性能问题(PBKDF2 包含一个“迭代计数”,旨在使其完全符合需要的速度),因此这里没有理由更喜欢 SHA-1 而不是 SHA-256。但是,如果您有一个现有使用 PBKDF2-with-SHA-1 的已部署系统,则无需立即“修复”它。
【讨论】:
Stack Crypto也有很好的解释。简而言之,密码冲突并不是一件坏事,它只是意味着恶意用户(或有效用户)可以使用几个不同的密码登录,而不是他们可以恢复到原来的“真实”密码。【参考方案3】:当然。如果您想生成更多的密钥材料,SHA-256 或更大的可能会更有效。 但是 PBKDF2-HMAC-SHA1 很好。标准 HMAC 的使用也没有受到影响,但在这种情况下,原则上更长的哈希值更安全。
【讨论】:
以上是关于SHA1 在 PBKDF2 中用作散列函数是不是仍然安全?的主要内容,如果未能解决你的问题,请参考以下文章
Java、PHP 和 Objective-C 中的 pbkdf2 pkcs5 兼容散列
我可以通过加盐现有的 MD5 散列并使用 Scrypt 或 PBKDF2 HMACSHA256 散列结果来提高 MD5 散列密码的安全性吗?