web-dev-qa-db-ja.com

負荷分散環境でDPAPIを使用する方法



DPAPIを使用して秘密データを暗号化できます。
Webアプリで使用して、一部のデータを暗号化し、暗号化されたデータをデータベースに保存します。必要に応じてデータを復号化し、UI(Webページ)に表示します。単一のWebサーバーでWebアプリをホストしている場合は、うまく機能します。しかし、問題を負荷分散環境(複数のWebサーバーでWebアプリをホストする)に移行すると発生します。アプリが別のマシンで暗号化したデータを復号化できないため。

インターネットからいくつかの情報を参照していますが、ローミングユーザーアカウントを構成し、そのアカウントでアプリケーションプールを実行する必要があるようです。

DPAPIを使用する理由は、キーの追加の管理作業が含まれないためです。

似たような経験がありますか?どのように問題を解決しますか?または他のいくつかの提案?

8
Robin Xing

セットアップに対して行う必要がある比較的小さな変更が2つあります。

まず最初に、常にUSER_MODEでDPAPIを使用する必要があります。これはDPAPIメソッドへのパラメーターです。
ProtectedDataおよびProtectedMemoryクラスの.Protect()メソッドは、追加のスコープパラメーターを取ります。これは、ProtectedDataDataProtectionScope.CurrentUserに設定する必要があります。または、使用しているProtectedMemoryに応じてMemoryProtectionScope.SameLogonを使用します。)(WINAPI関数を直接呼び出している場合は、使用していないと思いますが、USER_MODEパラメータを直接送信することもできます。代わりに.NETクラス。)

次に、DPAPIクラスを使用して暗号化キーを暗号化する必要があります-notデータを直接。
つまり、単一の暗号化キーを生成し、これをすべてのサーバーに配布して、DPAPIを介してキーを格納するように要求します。 (はい、おそらくこれには小さなユーティリティが必要になります。)
これにより、すべてのキー管理プロセスがはるかに簡単になり、キーが共有されるため、復号化が容易になり、DPAPI暗号化によって保護されます。

6
AviD