MSのCryptoAPIを使用するTripleDESなどの対称暗号化アルゴリズムを使用して暗号化された特権情報をディスク上のファイル(.NET構成ファイルを使用しない)に格納するWindows.Formsベースの.NETデスクトップアプリケーションがあります。このファイルは、複数のプログラムの実行/マシンの電源の入れ直しで読み取り/書き込みを行う必要があります。つまり、毎回同じKey/IVを使用します。ここでの明らかな質問は、キー(および場合によってはIV)を保護する方法であり、SOに関するいくつかの質問は、単に「DPAPIを使用する」と言い、ラウンドトリップ暗号化/復号化の簡単な例を示します。
DPAPIの使用方法はすでに知っていますが、別の暗号化スキームに供給されるKey/IVを保護するためにDPAPIを使用することには明らかな問題があるようです。次のコードを検討してください。
TripleDESCryptoServiceProvider^ cryptoprov = gcnew TripleDESCryptoServiceProvider;
cryptoprov->Key = ProtectedData::Unprotect(encryptedKey, salt, DataProtectionScope::CurrentUser);
cryptoprov->IV = ProtectedData::Unprotect(encryptedIV, salt, DataProtectionScope::CurrentUser);
SymmetricAlgorithm派生クラスのKeyとIVを割り当てる必要があるため、攻撃者はこのポイントにブレークポイントを設定するだけで、Key / IVが何であるかを簡単に把握できませんでしたか?
私の質問は次のとおりです。
- キーを保護するためにDPAPIを使用するポイントを逃したことがありますか?どうしますか?
- ファイルの暗号化にDPAPIを使用する必要がありますか?したがって、Key/IVストレージは必要ありません。
- 非対称暗号化用のCspParametersの存在に気づきました。これは本質的に対称よりも優れたオプションですか?(私のシナリオのコンテキスト内で、対称対非対称の完全なものではありません)
ありがとう!