How to make absolutely original salt for every user?
Is it better to use time()
function in PHP?
4 に答える
多くの場合、uniqid(mt_rand(), true)
ランダム ソルトを生成するには単純な方法で十分です。Blowfish と組み合わせると、非常に優れたパスワード ハッシュが得られます。
/dev/urandom
代替は、またはなどの疑似ランダム ソースopenssl_pseudo_random_bytes()
です。(放射性劣化に基づいて) ランダム データを生成するサービスもあります。
この行を使用して、php で強力なソルトを生成します
$salt = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));
非ランダムの代わりにランダムなソルトを使用することを検討してください..おそらく、この記事で何か役に立つものを見つけるでしょうhttp://www.gregboggs.com/php-blowfish-random-salted-passwords/
この記事もご覧ください http://codahale.com/how-to-safely-store-a-password/
1 つのアプローチは、すべてのユーザーに固有のソルトを生成し、そのソルトを DB にも格納することです。
別の良いアプローチは、パスワードのハッシュを生成するアルゴリズムが、ソルトを秒以上計算しなければならないというものです。ハッシュ アルゴリズムが複雑になればなるほど、DB をハッキングしようとする人が直面する問題が増えます。
PHP の関数を使用microtime()
して、秒単位ではなくマイクロ秒単位で数値を生成できます。これにより、ユーザーが別のユーザーと同等のソルトを持つことはほとんど不可能になります。この数値にユーザーの ID を掛けることもできます。
おそらく、md5(uniqid())
アプリケーションのソルトには a で十分です。
編集: 関数で more_entropy パラメータについて言及するのを忘れていましたuniqid()
。関数が同じマイクロ秒で 2 回実行された場合でも、同じ文字列になる可能性が低くなるため、編集された関数は次のようになります。
$salt = md5(uniqid($user_id, TRUE));