7

私は .Net MVC 4 Web アプリケーションでの認証を担当していますが、パスワードのハッシュ、保存、および認証に関して問題が発生しました。

現在、2 つのソルト、1 つの動的 (ユーザーごと)、1 つの静的 (Web アプリ定数)、および強力なハッシュ関数を使用する予定です。

ユーザー名とパスワードを含む単純な User テーブルがあるとします。

  • ユーザーごとのソルトをユーザー テーブルの列に保存しますか?

私の心配は、そうすることで、ユーザー名のみを使用して、Web アプリケーションのメモリ内のデータベースからユーザーを取得する必要があることです。それが問題になる可能性のあるある種の攻撃はありますか? 理想的には、これをワンステップ/ワン SQL リクエスト認証にしたいと思います。

心配しすぎですか?ワンステップ認証を行うことができる「ユーザーごと」のソルトに代わるものはありますか?

4

2 に答える 2

4

ソルトはパスワード ハッシュと一緒に保存できるため、ユーザーごとではなくパスワードごとにソルトを作成できます。パスワード ハッシュ関数 (BCrypt や PBKDF2 のようなスロー キー導出関数) では、ソルト クリアテキストをパスワード ハッシュの一部として返すのが一般的です。これは、ソルトとハッシュを単一のデータベース フィールドに一緒に格納できることを意味します。

入力されたパスワードを検証するには、まずパスワード ハッシュを (ユーザー名または電子メールを使用して) 検索する必要があります。次に、関数は保存されたパスワード ハッシュから使用されたソルトを抽出し、それを使用してハッシュを比較します。それは実際にあなたの質問に答えるはずです.データベースには通常、パスワードをハッシュするための適切な機能がないため、SQLクエリ内で検証を行うことはできません.検証はコードで行われます.

2 番目のソルトは実際にはペッパーと呼ばれます。このサーバー側のシークレットを追加する最善の方法は、既にハッシュされたパスワードをこのシークレットで暗号化することです。ハッシュとは対照的に、これは双方向の暗号化であり、必要になった場合にキーを交換できるようにします。

于 2013-07-09T16:26:45.940 に答える