2008-08-29 19 views
8

設定ファイルを実行可能ファイルにバインドしたいとします。私は実行可能ファイルの中にファイルのMD5ハッシュを格納することでこれをしたいと思います。これにより、実行可能ファイル以外のユーザーはファイルを変更できなくなります。実行ファイルに.Netの情報を保存する方法

本質的に、誰かがプログラムの外でこのファイルを変更すると、プログラムはそれを再びロードすることができなくなります。

EDIT:プログラムはクレジットカード情報を処理するため、設定を変更するとセキュリティリスクが発生する可能性があります。このソフトウェアは、多数のクライアントに配布されます。理想的には、クライアントは実行可能ファイルに直接結びついた構成を持つ必要があります。これにより、ハッカーが偽の設定を取得できなくなることが期待されます。

設定はまだ編集可能である必要がありますが、個々のコピーをコンパイルすることはオプションではありません。


これは動的であることが重要です。そのため、構成が変更されると、構成ファイルにハッシュを結びつけることができます。

答えて

11

を検証するときに、より良い解決策は、MD5を格納することである。このconstの文字列を参照することができます... MD5ハッシュを保持しているのconst文字列を作成し、アプリにそれをコンパイル設定ファイルに保存します。しかし、MD5の設定ファイルの代わりに、固定GUIDのような秘密の「キー」値をMD5に含めてください。

次に、そのMD5を削除して、ファイル(秘密鍵を含む)を再ハッシュするだけです。 MD5が同じなら、誰もそれを修正しなかった。これにより、誰かがあなたの秘密鍵を知らないので、MD5を修正して再適用することができなくなります。

これは、キーやMD5が格納されている場所をプログラムに簡単にトラッキングできるため、非常に弱い解決策です(あなたが示唆しているように)。

もっと良い解決策は、公開鍵システムを使用して構成ファイルに署名することです。これは、ローカルマシンに秘密鍵を格納する必要があるため、やはり弱いです。ローカルPCに含まれているほとんどのものは、十分な労力でバイパスできます。

本当に実行可能ファイルに情報を格納したいのであれば(これは私が推奨しません)、EXEの最後に追加してみてください。それは通常安全です。実行可能プログラムを変更すると、ウイルスのように動作し、ほとんどのオペレーティングシステムのセキュリティがあなたを止めようとします。あなたのプログラムがProgram Filesディレクトリにあり、設定ファイルがApplication Dataディレクトリにあり、そのユーザが非管理者(XPまたはVistaの場合)としてログインしている場合、EXEを更新することはできません。

更新:あなたは、ユーザーのコンピュータ上のキーを(保存されている場合は、非対称暗号化を使用している場合、私は気にしない、RSAや量子暗号は、あなたがは、あなたのルートない限り、それをすべてWeb経由で行う必要があります実行時にCPU上のレジスタを検査している場合でも、ユーザーはキーを見つけることができます。適度なレベルのセキュリティしか購入していないので、単純なものに固執してください。変更を防ぐために私が提案した解決策が最高です。読み込みを防止し、それを暗号化し、ローカルに鍵を保管している場合は、AES Rijndaelを使用してください。

更新:代わりに、FixedGUID/SecretKeyをインストール時に生成し、レジストリのどこかに秘密に格納することもできます。または、ハードウェア構成から使用するたびに生成することもできます。それからあなたはもっと複雑になってきています。適度なレベルのハードウェアを変更できるようにするには、6種類のシグネチャを使用し、構成ファイルを6回ハッシュします。上記のGUID(グローバルまたはインストール時に生成された)のように、2つ目のシークレット値を組み合わせます。次に、ハッシュを別々に確認することを確認します。 6人中3人(またはあなたの寛容が何であれ)があれば、それを受け入れます。次回は、新しいハードウェア構成でハッシュします。これにより、時間の経過とともにハードウェアをゆっくりと交換し、まったく新しいシステムを得ることができます。 。 。多分それは弱点でしょう。それはすべてあなたの許容に来る。より厳しい公差に基づいたバリエーションがあります。

更新:クレジットカードシステムの場合、実際のセキュリティを考慮する必要があります。 セキュリティおよび暗号化コンサルタントのサービスを保持する必要があります。より多くの情報を交換する必要があります。彼らはあなたの特定のニーズとリスクを分析する必要があります。

また、.NETでセキュリティを確保するには、まず最初に本当に良い.NET obfuscator(just Google it)を起動する必要があります。 .NETアセンブリは、簡単に分解してソースコードを入手し、すべての秘密を読む方法です。壊れたレコードのようには聞こえませんが、ユーザーのシステムのセキュリティに依存するものは、最初から根本的に欠陥があります。

+0

C++で書かれていても、シークレットを送信/保管すると、盗難される危険があります(これはここの重要な部分です)。ここで適切なセキュリティを達成する唯一の確実な方法は、秘密を送信しないことです。おそらく、ユーザとあなたの秘密鍵が使用される何らかの2種類の暗号化が必要になるでしょう。 Jimは言ったように、適切なセキュリティアナリストと専門家のアドバイスが必要です。 – Gregory

-2

ちょうどあなたのアプリは、その後だけで、設定ファイル

1

純粋な好奇心の中で、ファイルが変更された場合、ファイルをロードしたくない理由は何ですか?

実行可能ファイルにコンパイルされたすべての設定情報を保持するだけではどうですか?なぜ外部ファイルを気にするのですか?

編集

私は、これはクレジットカード情報番組であることについて、あなたの編集をお読みください。それは非常に興味深い挑戦です。

私は、そのセキュリティレベルではかなりの主要な暗号化が必要だと思いますが、暗号の秘密を単に抽出できないような方法でその種の処理については何も知らない実行可能ファイルから。

何らかの種類のオンラインソースに対して認証されていますか?

1

アシメトリックキー暗号化を使用して、コンフィギュレーションファイルをどこに格納していても、実行ファイル内に暗号化することをお勧めします。

私が正しく覚えていれば、RSAは変種の1つです。それの説明については

、ストア

Wikipediaの Public-key cryptographyあなたの実行ファイルで、「読み」キーを参照し、自分自身に「書き込み」キーを保持します。ですから、誰もあなたが設定を変更することはできません。

これは、の利点があります:彼らは、キーを「書く」していない限り、理由の任意の変更がします壊れ

  • が、だれが、それは彼らが「読み」キーを知っている場合でも、完全に設定を変更することはできませんもう一方の鍵を計算するには時間がかかります。
  • 変更保証。
  • これは難しいことではありません。最近、利用可能なライブラリがたくさんあります。本当に長いキーを生成できる多くのキー生成プログラムもあります。

適切に実装する方法についていくつかの調査を行いますか。

関連する問題