2

標準の .Net SignedXml クラスを使用してライセンス xml ファイルに署名する C# WPF アプリケーションを作成しました。公開鍵と秘密鍵を xml 文字列として抽出できます。署名アプリケーション用に秘密鍵をローカルに安全に隠しておくことができますが、リモートの署名チェック アプリケーション (ライブラリ) で必要な公開鍵はどうでしょうか? 考慮されるオプション:

  • KeyContainer: 署名とチェックが 2 つの別々の環境で行われるため、ダメです。
  • ハードコーディング: チェック ライブラリで公開鍵を xml 文字列としてハードコーディングします。公開鍵が秘密ではないことはわかっていますが、ハッカーが鍵を自分のものに置き換えないようにするにはどうすればよいですか? 私はライブラリに署名できますが、ライブラリを使用してアプリケーションを改ざんする可能性があります....
4

2 に答える 2

3

アプリと一緒に配布する標準のデジタル証明書に公開鍵を入れます。その後、証明書の整合性は Windows によって保証され、証明書が変更されたかどうかがわかります。

もちろん、ハードウェアと Windows 自体の両方が潜在的な攻撃者の制御下にあるため、特定のマシンの侵害を実際に防ぐことはできません。

これは、私が配布していたプログラムの例です。プログラムがライセンスの観点からアクティブ化されると、ハードウェア ハッシュが Web サービスに送信されました。これにより、ハードウェア ハッシュを含む自己署名証明書が返され、プログラムが開始されるたびにそれがチェックされました。証明書が何らかの方法で変更された場合、プログラムは停止します。

于 2012-06-27T11:50:07.823 に答える
1

私は公開鍵を inetpub ディレクトリの外のディレクトリに置きました。秘密鍵をコンピュータから移動した場合、公開鍵を置き換えて復号化できなくなる最悪の事態が発生しますが、通知を受けることはできます。何かが起こったことを知るために解読できないとき。

しかし、誰かがあなたのファイルを変更できた場合、この 1 つのファイルが変更されただけで、より大きな問題が発生します。

アップデート:

おっと、これが WPF プログラムであることを見逃していました。残念ながら、できる最善のことは、秘密鍵を公開鍵とは別に持つことです。そうすれば復号化できますが、ハッカーが公開鍵を変更すると、アプリケーションは正しく機能しなくなります。

これは、公開/秘密鍵を使用して、自分だけが暗号化できることを確認する利点の 1 つです。

もう 1 つのオプションは、Web サーバーから公開鍵をフェッチすることですが、誰かがアプリケーションをだまして間違ったサーバーにアクセスさせる可能性があるという点で同じ問題があり、完全な証拠ではなく、ユーザーがインターネットに接続している必要があり、ユーザーを一意に識別する必要があります。

于 2012-06-27T11:50:00.207 に答える