0

我从这篇文章http://codahale.com/how-to-safely-store-a-password/中读到它说使用盐甚至不能安全地抵御 GPU 暴力攻击。我不想在几周内被黑客入侵并解密密码......所以我阅读了更多内容,但解决方案是bcrypt我不想实施phpass class,我喜欢 SHA-512。

但是,如果可以在 sha-512 中添加轮数以减慢 GPU 攻击速度……那该怎么做呢?轮次是否意味着迭代?

你如何添加回合来减慢sha512?

4

2 回答 2

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 脚本放在一起时,他才能破解您的密码。在任何情况下,如果黑客拥有您的脚本,他就可以破解您数据库中的任何密码,因为他知道您用于散列密码的方案。

于 2012-03-28T17:53:49.657 回答
0

增加 SHA512 的轮数并不意味着使用相同的散列函数迭代已经散列的值。这实际上可以减少给定的安全性,因为在第一次哈希之后,您的新“密码”具有减少的字符集。请参阅security.stackexchange上的此链接,其中部分解释了原因。

我建议不要“滚动你自己的”密码保护功能。而是使用经过深入研究和审查的解决方案,例如PHPass

在他们的网站上还有一篇写得很好且深入的文章,解释了密码散列和创建的安全含义。

于 2012-03-28T17:42:29.203 回答