Diffie-Hellman鍵交換とは
ディフィー・ヘルマンと読みます。
鍵配送問題を解決する手法です。盗聴者に知られても大丈夫な数を交換することにより、共通の鍵を作りだします。
アルゴリズム
ウサギとアリスが鍵交換する場面を考えます。
- ウサギが大きな素数Pと生成元Gを送信します。
 生成元については後から説明します。
- ウサギは1≦A≦P−2の範囲で整数Aをランダムに選びます。
- アリスは1≦B≦P−2の範囲で整数Bをランダムに選びます。
- ウサギはアリスにGAmodPという数を送信します。
- アリスはウサギにGBmodPという数を送信します。
- ウサギは送られた数と自身の数Aで(GBmodP)AmodPを計算する。
- アリスは送られた数と自身の数Bで(GAmodP)BmodPを計算する。
Pは非常に大きな素数であることが望ましいです。

生成元について
生成元とは、x1,...,xp−1modPの値がすべて異なるxのことです。
例
素数P=5としてGamodPを考えます。
GamodPの値を表にまとめました
G=2,3の時GamodPの値がすべて異なっています。したがって、P=5の時の生成元は2,3であることが分かります。
実際に計算する
1. PとGを決める
今回はP=11とします。
生成元は2,6,7,8といくつかあります。今回はG=7とします。
2. Aを決める
1≦A≦P−2の範囲からAを選びます。
1≦A≦9なので、A=2とします。
3. Bを決める
1≦B≦P−2の範囲からBを選びます。
1≦B≦9なので、B=9とします
4. GAmodPを求める
計算します。
72mod11=5
5. GBmodPを求める
計算します。
79mod11=8
6. (GBmodP)AmodPを求める
GBmodPは手順(5)で求めたのでその値を使います。
82mod11=9
7. (GAmodP)BmodPを求める
GAmodPは手順(4)で求めたのでその値を使います。
59mod11=9
手順(6)、(7)で求めた値が一致しています!
共通鍵を生成することができました😄
なぜ盗聴者は鍵を盗めないのか?
通信を盗聴したときに得られる情報は以下の4つです。
P,G,GAmodP,GBmodP
これらの情報から鍵であるGA×BmodPを容易に計算できるでしょうか?
GAmodPからAが求まれば手順(6)のようにして秘密鍵を計算できますが、実際には難しいことが知られています。
離散対数問題と言ってGxmodPからxを効率よく計算するアルゴリズムはまだ見つかっていません。
離散対数問題の難しさがこの鍵交換アルゴリズムの強度となります。
参考文献
結城浩(2015)暗号技術入門 第3版