我从这篇文章http://codahale.com/how-to-safely-store-a-password/中读到它说使用盐甚至不能安全地抵御 GPU 暴力攻击。我不想在几周内被黑客入侵并解密密码......所以我阅读了更多内容,但解决方案是bcrypt
我不想实施phpass class
,我喜欢 SHA-512。
但是,如果可以在 sha-512 中添加轮数以减慢 GPU 攻击速度……那该怎么做呢?轮次是否意味着迭代?
你如何添加回合来减慢sha512?
我从这篇文章http://codahale.com/how-to-safely-store-a-password/中读到它说使用盐甚至不能安全地抵御 GPU 暴力攻击。我不想在几周内被黑客入侵并解密密码......所以我阅读了更多内容,但解决方案是bcrypt
我不想实施phpass class
,我喜欢 SHA-512。
但是,如果可以在 sha-512 中添加轮数以减慢 GPU 攻击速度……那该怎么做呢?轮次是否意味着迭代?
你如何添加回合来减慢sha512?
我发现的存储密码的最安全方法之一如下:
<?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 脚本放在一起时,他才能破解您的密码。在任何情况下,如果黑客拥有您的脚本,他就可以破解您数据库中的任何密码,因为他知道您用于散列密码的方案。
增加 SHA512 的轮数并不意味着使用相同的散列函数迭代已经散列的值。这实际上可以减少给定的安全性,因为在第一次哈希之后,您的新“密码”具有减少的字符集。请参阅security.stackexchange上的此链接,其中部分解释了原因。
我建议不要“滚动你自己的”密码保护功能。而是使用经过深入研究和审查的解决方案,例如PHPass。
在他们的网站上还有一篇写得很好且深入的文章,解释了密码散列和创建的安全含义。