質問

アプリケーションの実行の間に暗号化されたデータ(いくつかの小さな文字列)を保存する必要があります。ユーザーがアプリケーションを起動するたびにパスフレーズを提供するのは望ましくありません。つまり結局、暗号化キーを安全に保存することになります。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top