我已经阅读了这篇文章http://codahale.com/how-to-safely-store-a-password/,并且说使用盐甚至不能安全地抵御GPU暴力攻击。我不想被黑客攻击并在几周内解密密码...所以我读了更多,解决方案是bcrypt
但是我不想实现phpass class
,我喜欢SHA-512。
但是,如果可以向sha-512添加回合以减缓GPU攻击......怎么办呢?轮次是指迭代吗?
如何添加轮次以减缓sha512?
答案 0 :(得分:0)
增加SHA512的轮次并不意味着使用相同的哈希函数迭代已经哈希的值。这实际上可以降低给定的安全性,因为在第一次散列之后,您的新“密码”具有减少的字符集。请参阅security.stackexchange上的此链接,该链接部分解释了原因。
我建议不要'滚动你自己的'密码保护功能。而是使用经过更好研究和审查的解决方案,例如PHPass。
在他们的网站上也是一篇写得非常好的文章,解释了password hashing and creation的安全隐患。
答案 1 :(得分:0)
我发现存储密码的最安全方法之一是:
<?php
function createPasswordSalt($saltLength = 20) {
return substr(md5(uniqid(rand(), true)), 0, $saltLength);
}
function createPasswordHash($password, $salt = null, $staticKey = null) {
if ($staticKey === null) {
$staticKey = "Some passphrase that will be only in your php script";
}
if ($salt === null) {
$salt = self::createPasswordSalt();
}
return hash_hmac('sha512', $password . $salt, $staticKey);
}
我存储在数据库密码和哈希......
所以这里我使用了多层安全性。如果他将数据库和php脚本放在一起,那么只能破解你的密码。在任何情况下,如果黑客拥有您的脚本,他可以破解您在数据库中拥有的任何密码,因为他知道您用于散列密码的方案。