2016-11-21 7 views
0

私はクライアント/サーバアプリケーションで暗号化にAESを使用しています。AES暗号化キーをC++で安全に保存する方法は?

現在のところ、クライアントとサーバーの両方でハードコードされた静的な対称キーを定義しました。

実行可能ファイルを逆/逆アセンブルすることでキーを取得するのが難しくないので、これは本当に安全ではないと感じています。

一方、Diffie-Hellmanのような鍵交換がどのように問題を解決するのかは分かりません。鍵はクライアント上のメモリに格納され、何らかの方法で(おそらく)抽出できるためです。

鍵の暗号化や難読化を含むすべてが安全でないところはどこからでも読んでいます。しかし、それはどうやって安全に行われますか?

+0

非対称暗号化アルゴリズムを使用します。これは、各部分が他の部分の秘密鍵を知らないことを意味します。それは純粋な数学です。 – jweyrich

+0

@jweyrichこれは逆アセンブルによる重要な発見を防ぐつもりはありませんか? –

+4

@jweyrichこれは、ネットワーク上の人がキーを見つけ出すのを妨げるだけですが、マシンにアクセスできる人は見つけられません。 – user66875

答えて

-3

は、128バイトまたは256バイト固定のキーサイズです。はいの場合、キーデータの構造を定義することができます。バイナリモードで開いているファイルに格納します。

「いいえ」の場合、キーのサイズをファイルに保存し、キーデータを保存する必要があります。

+0

あなたはOPの質問に答えませんでした:「しかし、それはどうやって安全ですか?」 – jweyrich

6

暗号化ではソフトウェアをユーザーから保護できません。

ユーザーがコードを実行する権限を持っている場合、彼はオペコードを表示し、コード内のすべての情報を検出する特権を持っています。

暗号化は、他のユーザーからユーザーを保護することができます。

おそらく、ユースケースを再検討する必要があります。ここで実際に達成しようとしていることは何ですか?

私たちは独自のプロトコルストリームを保護しようとしているのですか、またはユーザーのIDとデータを保護していますか?

前者の場合、弁護士(および深いポケット)が必要です。後者の場合、よく実装された公開鍵/秘密鍵の暗号化で十分です。