DPAPIを使用して秘密データを暗号化できます。
Webアプリで使用して、一部のデータを暗号化し、暗号化されたデータをデータベースに保存します。必要に応じてデータを復号化し、UI(Webページ)に表示します。単一のWebサーバーでWebアプリをホストしている場合は、うまく機能します。しかし、問題を負荷分散環境(複数のWebサーバーでWebアプリをホストする)に移行すると発生します。アプリが別のマシンで暗号化したデータを復号化できないため。
インターネットからいくつかの情報を参照していますが、ローミングユーザーアカウントを構成し、そのアカウントでアプリケーションプールを実行する必要があるようです。
DPAPIを使用する理由は、キーの追加の管理作業が含まれないためです。
似たような経験がありますか?どのように問題を解決しますか?または他のいくつかの提案?
セットアップに対して行う必要がある比較的小さな変更が2つあります。
まず最初に、常にUSER_MODE
でDPAPIを使用する必要があります。これはDPAPIメソッドへのパラメーターです。
(ProtectedData
およびProtectedMemory
クラスの.Protect()
メソッドは、追加のスコープパラメーターを取ります。これは、ProtectedData
のDataProtectionScope.CurrentUser
に設定する必要があります。または、使用しているProtectedMemory
に応じてMemoryProtectionScope.SameLogon
を使用します。)(WINAPI関数を直接呼び出している場合は、使用していないと思いますが、USER_MODE
パラメータを直接送信することもできます。代わりに.NETクラス。)
次に、DPAPIクラスを使用して暗号化キーを暗号化する必要があります-notデータを直接。
つまり、単一の暗号化キーを生成し、これをすべてのサーバーに配布して、DPAPIを介してキーを格納するように要求します。 (はい、おそらくこれには小さなユーティリティが必要になります。)
これにより、すべてのキー管理プロセスがはるかに簡単になり、キーが共有されるため、復号化が容易になり、DPAPI暗号化によって保護されます。