我的密码盐需要多长时间,SHA-256是否足够好?

Jar*_*rpi 11 php hash md5 password-protection

我正在创建一个游戏社区网站,我的目标是尽快向公众发布.目前,我正在研究密码和登录.我之前只使用过MD5,但我读过有关密码安全的内容,并且听说盐腌是目前的方法.

这是我的计划:每个用户都有自己独特的12个随机字符(#/¤&etc),存储在users表中.在注册时对盐进行哈希处理(使用SHA-256)和密码,并在登录时重新进行哈希处理.

这听起来怎么样?我可以改进什么吗?我应该选择SHA-512和更长的盐,还是这个呢?

Bil*_*win 17

您对12字节的建议应该是盐的足够长度.这将需要字典攻击来准备2 96个散列密码数据库.总有一天,对于一个破解者而言,这可能是一个微不足道的操作,但我们还有一段距离.

NIST建议SHA256具有足够的密码散列强度,至少目前是这样.

如果您想探索更强大的密码安全方法,请研究密钥强化技术,如PBKDF2,或使用Bcrypt进行自适应散列.但是这些在SQL中没有直接的支持.您必须在应用程序代码中进行散列,然后将散列摘要发布到您的数据库.

对于游戏网站来说,这似乎是安全性过度,但这是一个很好的做法.因为许多用户(不建议)使用与他们的银行登录相同的密码进行游戏登录!您不希望对导致重大损失的身份验证违规行为负责.

  • @DW你是对的,bcrypt或PBKDF2是更强大的解决方案.这就是我在答案中提到它们的原因. (2认同)

car*_*ion 6

更新:

不要使用散列或 HMAC。使用bcryptscrypt. 请参阅http://codahale.com/how-to-safely-store-a-password/

原来的:

不要简单地散列。使用 HMAC。(如果有可用的库,请避免自己进行哈希或加密,因为库受益于专家的输入。)

参考:

  1. http://rdist.root.org/2009/10/29/stop-using-unsafe-keyed-hashes-use-hmac/
  2. https://www.php.net/manual/en/function.hash-hmac.php


Pet*_*ete 3

这可能足以满足您的用例。

但是,可以通过以下方式改进:

  1. 增加盐的大小

  2. 盐不应仅限于一小部分字符

  3. 迭代哈希,例如 1000 次(密钥强化)

看看phpass

  • 我指的是关键强化,例如 PBKDF2(如上面 Bill 提到的)。多次迭代被认为是最佳实践,因为它可以阻止对已知哈希值的暴力攻击 - 攻击者可以访问数据库并想要密码(许多人跨站点重复使用密码)。使用常见的哈希函数执行此操作没有已知的数学弱点。 (4认同)
  • @上校。弹片盐阻止**预先**计算的字典攻击并阻碍彩虹表。多次迭代会阻碍暴力破解——盐值是已知的哈希值,并且单独并不足以阻碍暴力破解。 (4认同)
  • 我没有对你投反对票,但我认为散列哈希不会提供任何实际好处。我读过,如果密钥通过不安全的通道发送,但当通信是在服务器和它的数据库,我有点怀疑它会有帮助。老实说我不知道​​,但我有一种直觉,连续散列会给散列带来噪音,这将使其他人更容易复制和利用。盐可能是最好的方法。 (2认同)
  • “我担心它会增加冲突,从而降低安全性”如果你能用数学来支持这一点,你的直觉将立即在加密社区赢得赞誉:-) (2认同)