web-dev-qa-db-ja.com

C#でのデータ暗号化とキー管理

どのルートを取るべきか、長所と短所は何ですか、より安全です。

  1. AESキーを生成し、それでデータを暗号化してから、RSAでAESキーを暗号化し、暗号化されたデータと暗号化されたAESキーをファイルに保存し、RSAキーペアをKeyContainerに保存します。

  2. または、DPAPI ProtectedDataクラスを使用してデータを暗号化し、ファイルに保存してから、ProtectedData.Protect()で使用したエントロピーをどこかに格納します。(RSAで暗号化したり、RSAキーペアをKeyContainerに格納したり、データを含むファイルへの暗号化されたエントロピー?)

11
user2032

アルゴリズムを自分で選択すると、おそらくより強力な暗号化が得られる可能性がありますが(3DESを使用するためにDPAPIが使用されていますが、それでも7の場合は不明です)、暗号化システムの最も弱い部分はほとんど常に鍵管理になります。 (まともなアルゴリズムを使用しており、3DESでも完全に壊れていないと仮定します)。

DPAPIを使用すると、キーの管理についてまったく心配する必要がなくなります(そもそもDPAPIでキーを保護する以外は)。 @Thomasは詳細な応答でジャンプすることを確信していますが、通常、私の答えはDPAPIで行くことです。

8
AviD

AES、それともDPAPI?それはあなたのアーキテクチャに依存します。

たとえば、ステートレスで販売可能な、負荷分散されたWebサイトが必要な場合は、Cookie /セッションの暗号化にDPAPIを使用しないでください。その場合、ユースケースに応じて、ユーザーセッションを単一のホストに効果的に制限しています。

DPAPIとRSAに関しては、これに興味があるかもしれません MSDN記事ホワイトペーパー そしてこれ DPAPIの秘密鍵に関する質問

0