私は現在、パスワードがユーザーから取得され、データベース (SQL サーバー) に保存される ac# mvc Web アプリケーションを作成しています。パスワードをハッシュする方法が必要です。
Data Protection API (DPAPI) を使用することが推奨されています。私はそれに慣れておらず、インターネットでの調査から、それに関する情報はほとんどありません。
詳細については、誰かが方向を示すことができますか? または、設定方法や操作方法などの概要を教えてください。
私は現在、パスワードがユーザーから取得され、データベース (SQL サーバー) に保存される ac# mvc Web アプリケーションを作成しています。パスワードをハッシュする方法が必要です。
Data Protection API (DPAPI) を使用することが推奨されています。私はそれに慣れておらず、インターネットでの調査から、それに関する情報はほとんどありません。
詳細については、誰かが方向を示すことができますか? または、設定方法や操作方法などの概要を教えてください。
データ保護 API は、主に、ユーザー資格情報の下で暗号化キーとシークレットを保護するために使用されます。ハッシュ化されたパスワードをデータベースに保存する場合、DAPI は実際には必要ありません。
ASP.NET メンバーシップ プロバイダーは、ソルトを使用したパスワードのハッシュなど、ユーザーの管理に使用されます。残念ながら、ハッシュ化されたパスワードを返すだけの方法はないようです。したがって、追加の機能が必要ない場合は、CodeFirst メンバーシップ プロバイダーなどから関連するコードを抽出する価値があるかもしれません(ソースの Crypto.cs を参照してください)。コード)。ここでの利点は、このメンバーシップ プロバイダーが PBKDF2 を使用してハッシュを導出することです。これは、ラウンド数が与えられたブルート フォース攻撃に対してより耐性があります。これは、 StackOverflow自体が使用するメソッドでもあります。
.Net には、 ProtectedDataと呼ばれる DPAPI のラッパー クラスがあります。使い方はとても簡単で、含まれている静的メソッドは と の 2 つだけProtect
ですUnprotect
。ハウツー記事はこちら. Protect を呼び出すときに選択したスコープに応じて、ログインしているユーザーの資格情報またはマシンの資格情報を使用して暗号化を行うため、DPAPI はキーを必要としません。暗号化されたデータをデータベースに保存する場合は、常に同じ Windows ユーザー アカウントまたはマシンを使用する必要があります (これも暗号化の範囲によって異なります)。そうしないと、データを復号化できなくなります。したがって、アプリケーションによっては、この API が最適でない場合があります。分散アプリケーションではなく、単一のマシンでローカル暗号化を行うことを主な目的としています。