2010-12-31 8 views
2

私はクライアントとサーバーが私の実行可能ファイルであるC++クライアント/サーバーアプリケーションを持っています。クライアントとサーバーの間で接続するたびに、そのセッションの新しい暗号化キーを生成し、このセッションキーを送信し、クライアントとサーバーの両方に組み込まれた静的キーを使用してこのセッションキーを暗号化します。アプリケーションでキーを非表示にする方法は?

ただし、実行可能ファイルで文字列を実行すると、静的キーが表示されます。

クライアントとサーバーアプリケーションで埋め込み静的キーを非表示にして、簡単に抽出できないようにして、誰かがセッションキーをデコードできるようにするにはどうすればいいですか?

+0

SSH ... –

答えて

5

キーを交換する彼の方法は、クライアントが偽物者ではなく有効であることを「確実に」保証します。ちょうどD-Hを使って鍵を安全に交換することはできません。同じ機能を得るためには、彼はPKIシステムを実装する必要があります。 SSL/TLSはこの目的のために作られました。この目的のために必要なのはその下にあります。

サーバー用のCAを作成し、クライアント証明書に署名して、その証明者であることを確認する必要があります。

+0

+1を指摘するためにD-HはMITMの影響を受けやすく、PKIを示唆しています。 – jweyrich

+0

私は "保証"が好きではありません...彼の方法は壊れている暗号ですが、あなたが意味することを知っています。彼が望む方法はMITMへの抵抗を保証するものです。 –

+0

@Ninefingers私はそれがqoutesに確実性を置く理由に同意します。私は実際に何が起こるのかというより彼の意図を示すために違った言葉を述べるべきです。私は+ 1を感謝します。 –

5

鍵を隠そうとしない(一般に不可能な)この問題に対する解決法があります。たとえば、Diffie-Hellman key exchangeを使用すると、クライアントとサーバーは、新しい秘密セッションキーをネゴシエートすることなく、ネゴシエートできます。

0

したがって、秘密(実行可能ファイルのキー)を隠すことを計画しています。これは、メソッドの秘密を知っていれば元に戻すことができない難しい方法です。その方法の秘密を知っていれば元に戻すことができる新しいスーパーシークレットメソッドです。隠す必要のある別の秘密を必要とする別の秘密のメソッドで隠す必要があります。

これは「問題のオーバーフロー」です。私はあなたがこのようにそれを解決しないことを見ることができることを願っています。コンピュータごとに鍵を生成し(ssh/sshdはこれを行います)、それらを保護します。上記の同じ問題が実際に適用されます。なぜなら、私はそのキーを取得するとまだゲームですが、この方法ではあなたのソリューションにコード化しないので、妥協したキーを修正する方がはるかに簡単です。

関連する問題