Diffie-Hellman鍵交換の計算方法

投稿日: 更新日:

Diffie-Hellman鍵交換とは

ディフィー・ヘルマンと読みます。

鍵配送問題を解決する手法です。盗聴者に知られても大丈夫な数を交換することにより、共通の鍵を作りだします。

アルゴリズム

ウサギとアリスが鍵交換する場面を考えます。

  1. ウサギが大きな素数PPと生成元GGを送信します。
    生成元については後から説明します。
  2. ウサギは1AP21 \leqq A \leqq P-2の範囲で整数AAをランダムに選びます。
  3. アリスは1BP21 \leqq B \leqq P-2の範囲で整数BBをランダムに選びます。
  4. ウサギはアリスにGAmodPG^A \mod Pという数を送信します。
  5. アリスはウサギにGBmodPG^B \mod Pという数を送信します。
  6. ウサギは送られた数と自身の数AA(GBmodP)AmodP(G^B \mod P)^A \mod Pを計算する。
  7. アリスは送られた数と自身の数BB(GAmodP)BmodP(G^A \mod P)^B \mod Pを計算する。

PPは非常に大きな素数であることが望ましいです。

Diffie-Hellmanのアルゴリズム

生成元について

生成元とは、x1,...,xp1modPx^1, ..., x^{p-1} \mod Pの値がすべて異なるxxのことです。

素数P=5P = 5としてGamodPG^a \mod Pを考えます。

GamodPG^a \mod Pの値を表にまとめました

G \ a1234
11111
22431
33421
44141

G=2,3G = 2, 3の時GamodPG^a \mod Pの値がすべて異なっています。したがって、P=5P=5の時の生成元は2,32, 3であることが分かります。

実際に計算する

1. PPGGを決める

今回はP=11P = 11とします。 生成元は2,6,7,82,6,7,8といくつかあります。今回はG=7G = 7とします。

2. AAを決める

1AP21 \leqq A \leqq P-2の範囲からAAを選びます。
1A91 \leqq A \leqq 9なので、A=2A = 2とします。

3. BBを決める

1BP21 \leqq B \leqq P-2の範囲からBBを選びます。
1B91 \leqq B \leqq 9なので、B=9B = 9とします

4. GAmodPG^A \mod Pを求める

計算します。

72mod11=57^2 \mod 11 = 5

5. GBmodPG^B \mod Pを求める

計算します。

79mod11=87^9 \mod 11 = 8

6. (GBmodP)AmodP(G^B \mod P)^A \mod Pを求める

GBmodPG^B \mod Pは手順(5)で求めたのでその値を使います。

82mod11=98^2 \mod 11 = 9

7. (GAmodP)BmodP(G^A \mod P)^B \mod Pを求める

GAmodPG^A \mod Pは手順(4)で求めたのでその値を使います。

59mod11=95^9 \mod 11 = 9

手順(6)、(7)で求めた値が一致しています!
共通鍵を生成することができました😄

なぜ盗聴者は鍵を盗めないのか?

通信を盗聴したときに得られる情報は以下の4つです。

P,G,GAmodP,GBmodPP, G, G^A \mod P, G^B \mod P

これらの情報から鍵であるGA×BmodPG^{A \times B} \mod Pを容易に計算できるでしょうか?

GAmodPG^A \mod PからAAが求まれば手順(6)のようにして秘密鍵を計算できますが、実際には難しいことが知られています。

離散対数問題と言ってGxmodPG^x \mod Pからxxを効率よく計算するアルゴリズムはまだ見つかっていません。
離散対数問題の難しさがこの鍵交換アルゴリズムの強度となります。

参考文献

結城浩(2015)暗号技術入門 第3版

書いた人

profile_image

お茶の葉

物理とプログラミングが好きな人