質問

そのため、DPAPIを使用して対称キーを保存しようとしています。すべてが順調で素晴らしいですが、エントロピーをどうするか?これは質問に答えました ここ 本当に十分な洞察を提供しません。それは滑りやすい斜面のように思えます - 私はマシンストアを使用してエントロピーを保存することができますが、それから誰かがそれに到達するのを防ぐものは何ですか?注:ユーザースコープを使用して現在のキーを保存しています。

私の質問は、DPAPIを使用してエントロピーを保存する最良の方法は何ですか?

役に立ちましたか?

解決

地元で保管するものはすべて妥協することができます。しかし、それをより困難にするためにあなたがとることができる手順があります。上にドキュメントがあります パスワードの処理 あなたが見渡すことを検討するかもしれないこと。エントロピーキーは、アプリケーションに固有のパスワードと考えています。

私はあなたのエントロピーをあなたと呼ぶつもりです , 、機能的には追加のキーであるためです。

あなたがやりたくないのは、暗号化されていない形式でキーをローカルに保存することです。代わりに、キーを暗号化するか、別の賢明なソースから導き出します。もちろん、キーを暗号化する場合は、それを暗号化するために使用されるキーを保存する必要がありますが、多くの場合、この間接の単一層はほとんどの挑戦者を阻止するのに十分です。

それがあなたの鍵を導き出すことの利点です。他の一定のデータのハッシュとして導き出すことができます(アプリケーションの改訂で変更されないものである必要があります)。ハッシュを導き出すときの1つのトリックは、ハッシュを他の一定の値(GUIDまたは大きな乱数など)と組み合わせることで、他の誰かが既知のハッシュアルゴリズムを組み合わせてキーを取得できないようにすることです。これは、独自のハッシュアルゴリズムを作成するためのはるかに優れた代替手段です(数学の博士号を取得していない限り、これは決してすべきではありません)。

ある時点で、アプリケーションで何らかのキーハードコード化されたものが必要になります。このキーは、ハッシュ内の他のデータと組み合わせてエントロピーキーを作成するか、エントロピーキーを復号化するために使用されます。既存のキーを復号化するための古いキーを維持する限り、アプリケーションの新しい改訂により、実際にキー変更を行うことができます。次に、新しいキーまたはメソッドを使用して再クリップできます。

最高のセキュリティが必要な場合は、エントロピーキーをコンピューターから保存できます。これには、インターネット接続とSSL証明書が必要になりますが、それらのキーは、発見されるためにローカルにどこにも持続することはありません。これを行うために、より堅牢なチャレンジ応答システムをセットアップして、リクエスト認証が毎回異なるため、キーはSSL暗号化を介して配信され、傍受できないようにします。キーが使用されると、破棄されます。もちろん、これは、ローカルセキュアストレージにDPAPIを使用している多くのシナリオの目的を打ち負かします。

あなたが何をするにしても、それは妥協されることに留意してください - それは、誰かがローカルマシンとその上に保存されているデータに完全にアクセスできるときに常に起こります。それに対する解決策は、古い亀裂が機能しなくなるように方法を十分に変更する更新をリリースし続けることです。これにより、亀裂の分布は、適切なバージョン用のものを見つけるのが難しいため、価値が低くなります。

他のヒント

まず、元の投稿の質問に対処しましょう。エントロピーは、永続的なストレージに使用される場合は、ユーザーの権限および/またはアプリケーションの権限の下で保存する必要があるという事実に要約されます。アプリケーションに保存されているキーを使用して、永続的なストアで情報を暗号化することができますが、この暗号化キーに悪意のあるアプリケーションがアクセスできると思います。ですから、コメントで言及したシナリオから保護する手段があるとは感じていません。しかし、あなたが言ったことがエントロピーの使用を意図していることを考えると、私はそれがあなたの問題を解決するのに役立つとは感じません。

実際の問題は、クライアントアプリケーションとサーバーの間に安全な通信チャネルを確立しているように聞こえます。デザインでは、通信を暗号化するために使用されるキーを交換しています。この問題を解決するためにカスタムコードを使用しようとすると、追加のセキュリティの脆弱性につながると思います。

そのすべてを考えると、機密情報を取得するために使用されるWCF(Windows Communication Foundation)サービスを作成することをお勧めします。明らかにすべての情報を取得するために使用される可能性がありますが、変化の最小量は、サービスを機密情報に限定することです。

WCFを使用すると、クライアントとサーバーの両方を設定して、安全なチャネルを使用できます。 WCFには、サーバーへの安全な通信チャネルを確立するための多くのオプションがあります。

<wsHttpBinding>
    <binding>
        <security mode="Transport">
            <transport clientCredentialType="Windows" />
        </security>
    </binding>
</wsHttpBinding>

安全なチャネルを取得すると、CCデータへのアクセスなど、他の問題の多くが簡単になります。そのデータが安全なチャネルで送信されると、チャネルセキュリティではなく承認の問題になります。

見る 方法:安全なセッションを作成します 多くのための。

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