1

c/c++ で記述された Web サービスがあります。今日まで、ユーザーのパスワードは単に MD5 でハッシュされ、DB に保存されていました。このアルゴリズムがまったく安全でないことは明らかです。

Web サービスは 1 つのスレッド化されたアプリケーションです。平均して、ユーザーから毎秒約 100 パケット (100p/s) を受信します。それらのいくつかは認証パケットです。

私は bcrypt と salt について読みましたが、実際にはこの手法をまったく使用していません。セキュリティ上の理由から、bcrypt が生成するハッシュが MD5 よりも遅いという事実も明らかです。この方法でパスワードの暗号化と認証パケットのチェックに bcrypt または scrypt を使用すると、サービスが大幅に遅くなるでしょうか?

4

1 に答える 1

1

攻撃ベクトルが遅くなれば、セキュリティは向上します。これを常に心に留めておいてください。

ソルティングとハッシュについては、常にソルティングを使用し、優れたエントロピー ジェネレーターを使用して、ハッシュ関数を数回実行することをお勧めします。

なぜ塩漬け?

パスワードから直接ハッシュを使用すると、ハッシュとパスワードの 1 対 1 の表現 (最良の場合) が得られます。ソルティング (具体的には、少なくとも 32 ビットのエントロピーを持つ強力なソルト) は、辞書攻撃を阻止します。ソルトのエントロピーが低いか、ビット数が少ない場合、ソルト化およびハッシュ化されたパスワードが盗まれると、レインボー テーブルで攻撃される傾向があります。

なぜ丸めるのですか?

丸め (bcrypt のように、ハッシュ関数の複数のラウンドを適用する) は、フィードバック ハッシュを追加しますが、さらに重要なことに、カスタマイズされたレインボー テーブルを構築するためのコストが追加されます。ハッシュする前にパスワードをソルトしないと、丸めは何もしません。

なぜ減速するのですか?

一部のサイトでは、無効な資格情報を入力するたびに指数関数的なバックオフ時間が発生することがわかります。これは、ボットによるブルート フォース パスワードの使用を禁止するためです。サーバーが重要なデータを保持している場合は、常に指数バックオフを実行してください。

一般的な情報として、bcrypt1000 ラウンドのハッシュを行うため、低速です。

于 2012-08-29T17:34:27.350 に答える