2

この暗号学全体を飲み込むのは大変ですが、本当に興味深いので、最近それについて読んでいます。

私の質問は、blowfish を使用してパスワードをハッシュして保存することについてです。塩が必要なことはわかっていますが、どうすればいいのかよくわかりません。いくつか質問があります。

  1. 私が読んだ多くのチュートリアルでは、一見ランダムに「oidsjf03」のようなものを思いつき、それをすべてのソルトに使用しているように見えます。彼らはキーボードをマッシュするだけですか、それとも何ですか?

  2. また、各パスワードには一意のハッシュが必要であるということもよく読みました。そのため、保存するパスワードごとに個別のソルトを生成します。それなら、どこかに保管しなければなりません。しかし、どこで?ユーザーの行にエントリとして保存するだけで、データベースが侵害された場合、そのソルトでレインボーテーブルを生成することはできませんか?

    パスワードごとにレインボーテーブルを生成する必要があり、フグを使用すると各ハッシュを作成するのに時間がかかるため、これは実用的ではないので、これは実行可能ではないと言うのは正しいでしょうか?

  3. ユーザーごとに固有のものを用意することがなぜそれほど重要なのですか? フグを使用していて、データベースが侵害され、salt もキャプチャされたとします。ハッカーはレインボー テーブルを作成してパスワードをテストすることができますが、ハッシュのラウンド数が多いと、たとえば、パスワードごとに 0.1 秒かかる場合があります。10 億のエントリを含むレインボー テーブルを作成する場合、作成に 1 億秒 (または約 3 年) かかります。

    一意のソルトを使用し、たとえば 1000 個のパスワードがあった場合、1000 個のレインボー テーブルを作成する必要があり、時間は 3000 年に増加します。これが理由ですか?保存されたパスワードごとに時間がかかりますか?

  4. ハッシュ用にこのソルトをどのように生成しますか? PHPのuniqid()機能は十分ですか、それとも派手なことをする必要がありますか?

  5. 本当に完全なクラスなどを作成する必要がありますか、それとも単純な関数を作成できますか?

  6. 最後に、phpass については、そのセキュリティと、ユーザーが自分でエラーを起こす可能性を回避する方法について、多く言及されていると聞きました。これは本当に推奨される方法ですか?

4

2 に答える 2

4

1- 私が読んだ多くのチュートリアルでは、一見ランダムに「oidsjf03」のようなものを思いつき、それをすべてのソルトに使用しています。彼らはキーボードをマッシュするだけですか、それとも何ですか?

すべてに同じ塩を使うのは悪い考えです。限目。

2-各パスワードには一意のハッシュが必要であるということもたくさん読みました。そのため、保存するパスワードごとに個別のソルトを生成します。それなら、どこかに保管しなければなりません。しかし、どこで?ユーザーの行にエントリとして保存するだけで、データベースが侵害された場合、そのソルトでレインボーテーブルを生成することはできませんか?

ソルトはハッシュの一部です。レインボー テーブルは、同じソルトを持つ複数のユーザーがいる場合にのみ機能します。しかし、それらはすべてユニークですよね?したがって、ハッシュで保存しても問題ありません。#3も同様です。

4- ハッシュ用にこのソルトをどのように生成しますか? PHPのuniqid()機能は十分ですか、それとも派手なことをする必要がありますか?

PHP 5.5 では、パスワード ハッシュ関数が PHP に直接組み込まれています。それまでの間、前述のリンクを参照してください。コメントには、これらの関数と前方互換性があり、PHP >= 5.3.7 で利用可能な Github プロジェクトへのリンクがあります。

6- 最後に、phpass については、そのセキュリティと、ユーザーが自分でエラーを起こす可能性を回避する方法について、多く言及されていると聞きました。これは本当に推奨される方法ですか?

組み込みの PHP 関数は、セキュリティの脆弱性が判明した場合に常に最新の状態に保たれるため、より優れています。代わりにそれらを使用します。ただし、phpass は非常に優れた代替手段です。

于 2013-02-20T23:25:15.207 に答える
0

上記の回答に加えて、DB brcause にハッシュを使用してソルトを保存できます。これは、DB が侵害された場合、攻撃者がソルト アルゴリズムを知る必要があるためです。hash($pass.$salt) や hash(hash($pass).$salt) などのように。

于 2013-02-20T23:37:20.903 に答える