より安全な鍵生成方法Diffie-Hellman
先にキー配布の問題についてお話しましたが、この世界はとても危険です。誤って通信回線を聞いてしまった場合、この安全でない回線を介してキーを渡すにはどうすればよいでしょうか。
ここでは、Diffie-Hellman鍵交換アルゴリズムを紹介します。このアルゴリズムは、1976年にWhitfield DiffieとMartin Hellmanが共同で発明したアルゴリズムです。
このアルゴリズムにより、2つのパーティは共通の情報を交換して共有キーを生成するだけで済みます。すごいですか?
具体的な手順を見てみましょう。
上の図はDiffie-Hellman鍵交換アルゴリズムです。xがyにメッセージを送信する場合、上記のアルゴリズムを使用すると、次の手順が必要になります。
- 2つの共有素数GとPを生成し、xとyでこれら2つの数を共有します。
Pは非常に大きな素数、GはPのジェネレーターです(ジェネレーターのパワーは1〜P-1の数値と1対1で対応しています)。
これら2つの数値GとPは、秘密にしておく必要はありません。盗まれても関係ありません。
- xは乱数xを生成しますが、これはxだけが知ることができます。Aは1からP-2までの整数です。
- yは乱数yを生成します。これはyだけが知ることができます。Bは1からP-2までの整数です。
- x はG A mod Pの結果をyに送信します。結果は機密ではありません
- y はG B mod Pの結果をxに送信します。結果は機密ではありません
- x手順5の結果と乱数Aを使用して、最終的な共有キーを計算します(G B mod P)A mod P = G A * B mod P
- y及び最終的な共有鍵(G計算するステップB 4の結果を使用して乱数A MOD P)B MOD P G = A * B MOD Pを
6と7で計算された最終的なキーは同じであることがわかります。
次に、Diffie-Hellmanアルゴリズムのセキュリティについて説明します。
このアルゴリズムでは、外部に公開される変数はP、G、GA A mod PおよびG B mod Pです。
これらの4つの変数に基づいて最終的なG A * B mod P を生成することは非常に困難です。
この問題には離散対数問題が含まれており、解決するのは非常に困難です。したがって、Diffie-Hellmanアルゴリズムは非常に安全であると考えることができます。
詳細については、http://www.flydean.com/diffie-hellman/をご覧ください。