を検証するときに、より良い解決策は、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アセンブリは、簡単に分解してソースコードを入手し、すべての秘密を読む方法です。壊れたレコードのようには聞こえませんが、ユーザーのシステムのセキュリティに依存するものは、最初から根本的に欠陥があります。
C++で書かれていても、シークレットを送信/保管すると、盗難される危険があります(これはここの重要な部分です)。ここで適切なセキュリティを達成する唯一の確実な方法は、秘密を送信しないことです。おそらく、ユーザとあなたの秘密鍵が使用される何らかの2種類の暗号化が必要になるでしょう。 Jimは言ったように、適切なセキュリティアナリストと専門家のアドバイスが必要です。 – Gregory