ユーザーが暗号化されたコンテンツをダウンロードできる WPF アプリがあり、このコンテンツをオフラインで復号化する機能を提供したいと考えています。キーをダウンロードして DPAPI を使用して保存するという考えですが、エントロピー パラメータに問題があります。
ハードコーディング/保存せずに DPAPI 関数に一貫して使用するエントロピーを生成する方法はありますか?
ありがとうトニー
DPAPIの使用中にオプションのエントロピーを安全に保存することから
ローカルに保存するものはすべて危険にさらされる可能性があります。しかし、それをより困難にするためにあなたが取ることができるステップがあります。パスワードの処理に関するドキュメントがあり、確認することを検討してください。エントロピーキーをアプリケーションに固有のパスワードと見なします。
機能的には追加のキーであるため、エントロピーをキーと呼びます。
やりたくないのは、暗号化されていない形式でキーをローカルに保存することです。代わりに、キーを暗号化するか、別の非自明なソースからキーを取得する必要があります。もちろん、キーを暗号化する場合は、暗号化に使用したキーを保存する必要がありますが、多くの場合、この1層の間接参照で、ほとんどの挑戦者を思いとどまらせることができます。
それはあなたの鍵を引き出すことの利点でしょう。他の定数データのハッシュとして導出できます(アプリケーションのリビジョンによって変更されないものである必要があります)。ただし、ハッシュを導出する際の1つのトリックは、ハッシュを他の定数値(GUIDや大きな乱数など)と組み合わせて、他の誰かが既知のハッシュアルゴリズムを組み合わせてキーを取得できないようにすることです。これは、独自のハッシュアルゴリズムを作成するよりもはるかに優れた代替手段です(数学の博士号を取得していない限り、絶対に実行しないでください)。
ある時点で、アプリケーションにハードコーディングされたある種のキーが必要になります。このキーは、ハッシュ内の他のデータと組み合わせてエントロピーキーを作成するか、エントロピーキーを復号化するために使用されます。既存のキーを復号化するために古いキーを保持している限り、実際には、アプリケーションの新しいリビジョンでキーを変更できます。次に、新しいキーまたはメソッドを使用して再暗号化できます。
最高のセキュリティが必要な場合は、エントロピーキーをコンピュータから保存できます。これにはインターネット接続とSSL証明書が必要ですが、それらのキーがローカルのどこにも保持されて検出されることはありません。これを行うには、より堅牢なチャレンジレスポンスシステムをセットアップして、リクエスト認証が毎回異なるようにし、キーがSSL暗号化を介して配信されるため、傍受されないようにすることができます。キーが使用されると、それは破棄されます。もちろん、この種の方法では、ローカルの安全なストレージにDPAPIを使用している多くのシナリオの目的が損なわれます。
何をするにしても、それが危険にさらされることに注意してください。これは、誰かがローカルマシンとそこに保存されているデータに完全にアクセスできる場合に常に発生します。その解決策は、古いクラックが機能しなくなるほどメソッドを変更する更新をリリースし続けることです。これにより、適切なバージョンのクラックを見つけることが困難になるため、クラックの配布の価値が低下します。
場合によっては、使用法によって便利なエントロピー値が提供されることがあります。たとえば、Web サイトのパスワードを暗号化する場合 (ブラウザーが行うように)、エントロピー値は Web サイトの URL である可能性があります。