20

私が知りたいのは、構成ファイルで接続文字列を暗号化するための明確なアプローチです。ここに私の質問があります:

  1. マシンレベルの暗号化を使用すると、私のサーバーにアクセスする人は、接続文字列の内容を読み取る小さな .Net プログラムを作成できませんか?

  2. エンタープライズ環境のユーザー マシンにアプリケーションを展開していて、アプリケーションの構成ファイルに接続文字列が含まれている場合、自分のアプリケーションだけがそれを復号化できるようにするにはどうすればよいですか? このシナリオは、ClickOnce 展開シナリオで特に興味深いものです。パブリッシャーサーバーで暗号化されていない構成を保存し、アプリが初めてダウンロード、インストール、実行されるときにマシンレベルで暗号化する人々について読んだことがあります。これは私には非常に間違っているように思えます.接続文字列が保護されずにワイヤを通過し、ダウンロードとアプリケーションの実行の間の短い時間、保護されずに座っています.

  3. 公開鍵と秘密鍵を取得し、アプリに署名し、構成ファイルをキーで暗号化できますか? ユーザーがそれを実行すると、署名付きアプリケーションからのみ復号化が可能になりますか?

  4. 私は ClickOnce を使用しているので、暗号化された機密情報をコードに含めたり埋め込んだりすることができます。これは、バージョン # が変更されない限り ClickOnce が変更を検出しないためです。したがって、接続文字列を変更して再コンパイルする必要がある場合、app.config のポイントはミュートされます。サーバー、クライアント、およびその間で接続文字列を保護するために、構成ファイルを使用する以外に、他にどのようなアプローチをとればよいでしょうか?

4

4 に答える 4

13
  1. はい。マシン キーで暗号化されたシークレットは、マシン キーにアクセスできる任意のプロセスで復号化できます。ユーザー キーで暗号化されたシークレットは、同じユーザーによって開始された任意のプロセスで復号化できます。
  2. これは不可能です。反対の主張はすべてヘビ油です。アプリケーションには、何かを復号化するためのシークレットが必要です。アプリケーション内に秘密を隠すための既知のスキームはありません。さまざまな難読化スキームがありますが、完全なものはありません。あなたができる最善のことは、バーを上げることです。
  3. いいえ。アプリケーションが何かを復号化するための秘密鍵を持っている場合はポイント 2 に戻るか、アプリケーションが公開鍵を持っている場合は誰でも同じ秘密を復号化できるため、基本的に構成の検証を行います。 (改ざんされていません)が、構成は秘密ではありません。
  4. アプリケーションに埋め込まれたシークレットを安全にデプロイすることはできません。保護された資産 (シークレット) がそれだけの価値がある場合、ハッカーはそれを取得します。

暗号化インフラストラクチャは、現在のユーザーの秘密を他のユーザーから保護するように設計されています。アプリケーションを使用するユーザーからアプリケーションの秘密を保護するようには設計されていません。あなたが求めているのは暗号化ではなく DRM であり、答えを得るには DRM インフラストラクチャを調べる必要があります。DRM APIに関するマネージ ライブラリについては知りません。

于 2009-05-21T23:54:56.390 に答える
0

Gustavoはこれを実装できるかもしれません(これはログインベースの私のアプリケーションの私の計画です)。

ユーザーが.Netアプリにクレデンシャルを入力します。クレデンシャルは.phpサーバー側アプリケーションに渡されます。このアプリケーションは、クレデンシャルを使用してデータベースにログインし、キーを取得して.Netアプリに返します。次に、キーは.Netアプリのハードコードされた暗号化された接続文字列で使用され、データベースへの完全なアクセスを許可します。

于 2012-05-10T14:56:39.680 に答える