.Netを使用した暗号化データの永続的ストレージ
-
03-07-2019 - |
質問
アプリケーションの実行の間に暗号化されたデータ(いくつかの小さな文字列)を保存する必要があります。ユーザーがアプリケーションを起動するたびにパスフレーズを提供するのは望ましくありません。つまり結局、暗号化キーを安全に保存することになります。
RSACryptoServiceProviderを調べてPersistentKeyInCspを使用していましたが、どのように機能するのかわかりません。アプリケーションの実行またはマシンの再起動の間、キーコンテナは永続的ですか? 「はい」の場合、ユーザー固有か、マシン固有か。つまり暗号化されたデータをユーザーの移動プロファイルに保存する場合、ユーザーが別のコンピューターにログオンしている場合にデータを復号化できますか?
上記が機能しない場合、私のオプションは何ですか(移動プロファイルを処理する必要があります)。
解決
Data Protection API(DPAPI)は、まさにあなたが望むことをします。マシンまたは(より良い)ユーザーの資格情報を暗号化キーとして使用して、任意のデータの対称暗号化を提供します。キーの管理について心配する必要はありません。 Windowsがそれを処理します。ユーザーがパスワードを変更すると、Windowsはユーザーの新しいパスワードを使用してデータを再暗号化します。
DPAPIは、System.Security.Cryptography.ProtectedDataクラスを使用して.NETで公開されます。
byte[] plaintextBytes = GetDataToProtect();
byte[] encodedBytes = ProtectedData.Protect(plaintextBytes, null, DataProtectionScope.CurrentUser);
Protectメソッドの2番目のパラメーターは、オプションのエントロピーバイト配列で、追加のアプリケーション固有の「シークレット」として使用できます。
復号化するには、ProtectedData.Unprotect呼び出しを使用します。
byte[] encodedBytes = GetDataToUnprotect();
byte[] plaintextBytes = ProtectedData.Unprotect(encodedBytes, null, DataProtectionScope.CurrentUser);
DPAPIは、ローミングプロファイル(こちらで説明)で正しく機能しますが、必要です。暗号化されたデータを場所(ネットワーク共有、IsolatedStorage IsolatedStorageScopeで保存) .Roaming など)、さまざまなマシンがアクセスできます。
詳細については、MSDNのProtectedDataクラスを参照してください。 DPAPIホワイトペーパーこちらに、これまで以上に多くの情報が記載されています。
他のヒント
DPAPIアプローチに追加したい。
ユーザーストアアプローチを自分で実装していませんが、特定のユーザーのデータを暗号化および復号化するユーザーストアアプローチに関するマイクロソフトのドキュメントがあります。
マシンストアを使用してDPAPIを使用しました。あなたがやりたいことと合う場合にそれを説明します。 Windowsサービスを使用してWindowsユーザープロファイルを読み込み、そのユーザーのパスワードを使用してデータを暗号化しました。
補足として、DPAPIはTriple-DESを使用しますが、これは(AESよりも)やや弱いかもしれませんが、どのタイプの保護を探しているのかわかりません。
Windowsデータ保護 http://msdn.microsoft.com/en-us/library/ms995355。 aspx