この暗号学全体を飲み込むのは大変ですが、本当に興味深いので、最近それについて読んでいます。
私の質問は、blowfish を使用してパスワードをハッシュして保存することについてです。塩が必要なことはわかっていますが、どうすればいいのかよくわかりません。いくつか質問があります。
私が読んだ多くのチュートリアルでは、一見ランダムに「oidsjf03」のようなものを思いつき、それをすべてのソルトに使用しているように見えます。彼らはキーボードをマッシュするだけですか、それとも何ですか?
また、各パスワードには一意のハッシュが必要であるということもよく読みました。そのため、保存するパスワードごとに個別のソルトを生成します。それなら、どこかに保管しなければなりません。しかし、どこで?ユーザーの行にエントリとして保存するだけで、データベースが侵害された場合、そのソルトでレインボーテーブルを生成することはできませんか?
パスワードごとにレインボーテーブルを生成する必要があり、フグを使用すると各ハッシュを作成するのに時間がかかるため、これは実用的ではないので、これは実行可能ではないと言うのは正しいでしょうか?
ユーザーごとに固有のものを用意することがなぜそれほど重要なのですか? フグを使用していて、データベースが侵害され、salt もキャプチャされたとします。ハッカーはレインボー テーブルを作成してパスワードをテストすることができますが、ハッシュのラウンド数が多いと、たとえば、パスワードごとに 0.1 秒かかる場合があります。10 億のエントリを含むレインボー テーブルを作成する場合、作成に 1 億秒 (または約 3 年) かかります。
一意のソルトを使用し、たとえば 1000 個のパスワードがあった場合、1000 個のレインボー テーブルを作成する必要があり、時間は 3000 年に増加します。これが理由ですか?保存されたパスワードごとに時間がかかりますか?
ハッシュ用にこのソルトをどのように生成しますか? PHPの
uniqid()
機能は十分ですか、それとも派手なことをする必要がありますか?本当に完全なクラスなどを作成する必要がありますか、それとも単純な関数を作成できますか?
最後に、phpass については、そのセキュリティと、ユーザーが自分でエラーを起こす可能性を回避する方法について、多く言及されていると聞きました。これは本当に推奨される方法ですか?