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