重複の可能性:
PHPパスワードの安全なハッシュとソルト
次のコードを使用して、パスワードをハッシュおよび保存します。
$salt=uniqid(mt_rand(), false);
hash('sha512',$pass+$salt);
私たちの時代には安全ですか?いいえの場合、どのソリューションが優れていますか?crypt()
この目的に適していますか、それとも古すぎますか?
重複の可能性:
PHPパスワードの安全なハッシュとソルト
次のコードを使用して、パスワードをハッシュおよび保存します。
$salt=uniqid(mt_rand(), false);
hash('sha512',$pass+$salt);
私たちの時代には安全ですか?いいえの場合、どのソリューションが優れていますか?crypt()
この目的に適していますか、それとも古すぎますか?
塩でハッシュするのが良いです。ただし、ハッシュアルゴリズムを複数回適用する必要があります(数百が適切な球場です)。
この方法でハッシュ関数を「ストレッチ」しても、ハッシュが強化されることはありませんが、ブルートフォース攻撃が遅くなります。
http://en.wikipedia.org/wiki/Key_stretching#Hash_based_key_stretching
ハッシュをブルートフォース攻撃しにくくするには、計算時間を長くします。sha512
は暗号化ハッシュ関数であり、速度が最適化されています。ユーザーを認証するときにパスワードをハッシュするのは1回だけなので、時間をかけることを恐れないでください。
攻撃者は何百万ものハッシュを計算するので、ハッシュ関数に0.1s
ハッシュごとに取得させてみませんか?速度が大幅に低下することはありませんが、ブルートフォース攻撃は実行不可能になります。
そうは言っても、外に出て独自のハッシュ関数を記述してこれを行う代わりに、次のようにします。
hash = sha512(password)
for i in range(10000):
hash = sha512(hash) + salt
return hash
を使用するのようなテスト済みソリューションphpass
を使用しますbcrypt
。
これの使用方法によって異なりますが、クレジットカードの詳細や銀行の詳細を保存するには十分ではありませんが(ハッシュするわけではありません!)、特に使用している場合は、Webサイトのパスワードに十分なIMOになります。ソルトとそれは512ハッシュです。