【问题标题】:What is the best way to securely store password (hashes)安全存储密码(哈希)的最佳方法是什么
【发布时间】:2012-06-23 14:32:00
【问题描述】:
现在很多网站都被黑了,密码哈希被盗了。
即使是像 LinkedIn 这样的大网站也没有安全地存储他们的密码(只有 md5)。
现在我的问题是,什么是足够安全的哈希密码方法?
目前我正在使用这个:
sha512(sha512(sha512(password) + salt));
这样够安全吗?
【问题讨论】:
标签:
security
hash
saltedhash
【解决方案1】:
很难说哪个最好,但安全的赌注是 BCrypt 算法。
BCrypt 并不是最好的算法;但是,对于大多数用例来说,它就足够了,而且它与基本的 hash-and-salt 方法一样容易实现,甚至更容易。 BCrypt 的不同之处在于,它不是更典型的 SHA-* 算法,而是利用 Blowfish 算法,该算法具有并行速度慢得多的优势。由于用户一次登录,这使得将测试大量密码的攻击者更难击败算法。
更多:http://davismj.me/blog/bcrypt/
【解决方案2】:
hash_hmac('sha512', $data , $key);
会很棒。 $key 最好使用至少 60 个字符作为盐。
【解决方案3】:
像现在这样使用 salt 确实可以提高安全性,我强烈建议为每个用户使用随机 salt。恕我直言,您对用户密码进行哈希处理的时间越多(您可以通过在每次哈希之前添加盐来提高安全性),它就越安全。我使用 for 循环重复 256 次来散列密码,这可能被认为在接下来的几年中可以防止暴力破解。
有点离题,但我建议也要注意会话劫持(例如重新生成 ssid 等...)
【解决方案5】:
是的,这已经足够安全了。我个人认为最后一次 sha512 调用是无用的,但我知道意见不同。
当然,只要无法使用蛮力策略猜出密码,这是安全的。如果用户选择 4 个字母的密码或他们妻子的名字,那么再多的哈希也无法保护您。