1

ポータブル PHP パスワード ハッシュ フレームワークを使用してパスワードをハッシュしたいと考えています。しかし、そのデモでは、パスワードのハッシュにソルトが使用されていないことがわかりました。しかし、パスワードをチェックするためにダミーのソルトを使用していますが、これは奇妙で、この考えがまったくわかりません。

$dummy_salt = '$2a$08$1234567890123456789012';

if (isset($dummy_salt) && strlen($hash) < 20)
        $hash = $dummy_salt;

一意のソルトを生成してデータベース内の各ユーザーに保存できる慣習的な方法を使用したい場合、Portable PHP パスワード ハッシュ フレームワークを使用してソルトを生成するにはどうすればよいでしょうか?

これは私がパスワードをハッシュするために使用する関数ですが、sha512 には sha1 と同じ問題があると言われています。ポータブル PHP パスワードハッシュフレームワークのような専門家を信頼するのが賢明です。

function hash_sha512($phrase,&$salt = null)
{
    //$pepper = '!@#$%^&*()_+=-{}][;";/?<>.,';

    if ($salt == '')
    {
        $salt = substr(hash('sha512',uniqid(rand(), true).PEPPER_KEY.microtime()), 0, SALT_LENGTH);
    }
    else
    {
        $salt = substr($salt, 0, SALT_LENGTH);
    }

    return hash('sha512',$salt.PEPPER_KEY.$phrase);
}

何かアイデアがあれば教えてください。ありがとう。

4

1 に答える 1

4

そのページからリンクされているphpassの記事から:

実際のハッシュに加えて、新しいパスワードまたはパスフレーズがハッシュされると、phpass は透過的にランダム ソルトを生成し、ハッシュ タイプ、ソルト、およびパスワード ストレッチング反復回数を、返される「ハッシュ エンコーディング文字列」にエンコードします。phpass が保存されたハッシュに対してパスワードまたはパスフレーズを認証するとき、同様に、「ハッシュ エンコーディング文字列」からハッシュ タイプ識別子、salt、および反復回数を透過的に抽出して使用します。したがって、ソルトとストレッチを自分で行う必要はありません。phpass がこれらを処理します

...だから、例が塩漬けを使用していないことは驚くべきことではありません! コードを過度に味付けしている可能性があります。

ダミー ソルトを使用したコード サンプルは、ユーザーが存在するかどうかに関係なく、ユーザーの検証に同じ時間がかかるようにすることで、タイミング攻撃を防ぐ方法の例です。ユーザー。ユーザーが存在しない場合、使用する保存されたソルトがないため、ダミーのソルトが必要です。

于 2011-01-26T15:05:59.857 に答える