【问题标题】:is Hash(password + salt) Fine [duplicate]是哈希(密码+盐)罚款[重复]
【发布时间】:2012-12-14 09:21:05
【问题描述】:

可能重复:
Secure hash and salt for PHP passwords

假设salt是随机的,高熵,长字符串,hash是sha512或者bcrypt为什么hash(password + perUserSalt) 被认为不够用?

这个问题是在阅读了 PHP 的新 password hashing API RFC 之后产生的,作者在其中指出

Hash(password + salt) = 不行

【问题讨论】:

  • 我听说过类似的说法,所以我一直使用hmac_hash()。不知道说实话哪个更好:S
  • 这个问题很直接。为什么作者认为hash(pw, salt)不好。引用的问题没有回答这个问题。
  • 因为sha512 的计算速度非常快。您是否阅读过该 wiki 页面的参考资料部分?都在那里。
  • 将密码视为单向街道。它们只会进入您的机器,而不是其他方式。
  • 谢谢@Jack。我已经阅读了参考资料,现在为 brutefore 的速度音乐会击中了我。你能发表你的评论作为答案吗?

标签: php hash passwords salt bcrypt


【解决方案1】:

许多年前,通常使用这样的哈希密码来保存在数据库中,例如:

$hashedPassword = MD5($password . $salt);

硬件变得更快,已知的快速哈希函数(如 MD5、SHA-1 以及 SHA-512)可能会被暴力破解太快。如今 [2012] 可以使用普通硬件计算大约 8 Giga MD5 values,以暴力破解包含 500'000 个单词的整个英语词典,您只需要几分之一毫秒!

这就是发明 BCrypt 和 PBKDF2 等密钥派生函数的原因。它们有一个成本参数并多次重复散列(成本因素决定了迭代次数)。 每次迭代都会使用原始盐来计算一个新的哈希值,这就是为什么你必须将盐单独传递给函数并且之前不能连接它:

$hashedPassword = Bcrypt($password, $salt);

链接的文章要么是想解释现在单个哈希计算是不够的,要么是想表明在将盐传递给哈希函数之前不能将盐与密码连接。

【讨论】:

  • 感谢您的回答。应该用, 替换+。无论如何,如果散列函数是sha512,您的答案将如何变化。为什么它被认为不够安全?
  • @Alex - 为未来的读者重写了答案。
猜你喜欢
  • 2011-12-06
  • 1970-01-01
  • 2015-10-24
  • 2015-05-27
  • 2012-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多