Interactive

Diffie-Hellman鍵交換可視化

AliceとBobは、盗聴者Eveに全通信を見られている前提でも、 誰にも知られていない共有の秘密鍵に合意できます。公開の数 pg の上で それぞれ秘密の指数を選び、実際のmod羃乗計算で同じ値にたどり着く様子を動かして確認できます。 TLSハンドシェイクの鍵交換部分(DHE/ECDHE)を数式レベルで深掘りする1本です。

数字を目で追える最小例。RFC 2631の例と同じ数。

公開(誰でも見える):p = 23g = 5

Alice

A = g^a mod p8(これを相手に送る=Eveにも見える)
Bobから受け取った B19
共有鍵 = B^a mod p2

Bob

B = g^b mod p19(これを相手に送る=Eveにも見える)
Aliceから受け取った A8
共有鍵 = A^b mod p2
一致:AliceとBobは同じ共有鍵 2 にたどり着きました

盗聴者 Eve が経路上で見えるもの

p = 23g = 5A = 8B = 19

Eveはp・g・A・Bをすべて見ても、a や b、共有鍵を計算できません。A = g^a mod p から a を逆算するのが離散対数問題で、pが大きいと現実的な時間では解けないため。 実際のTLS/SSHでは、この p は2048ビット(600桁超)にもなります。

「色の混合」の比喩: 公開色(上のグレー丸)にAliceが自分の秘密色を混ぜて送り、Bobも同様に送り返す。 受け取った混合色にさらに自分の秘密色を混ぜると、2人とも同じ色にたどり着く——しかし混ぜた色から元の秘密色を分離するのは(絵の具では)事実上不可能。 mod羃乗も同じ非対称性を数学的に実現している(一方向は簡単、逆算は困難)。

ここが分かる

  • Alice・Bobはそれぞれ秘密の指数abを選び、g^a mod pg^b mod pだけを相手に送る。秘密の指数そのものは一度も通信路に乗らない。
  • 受け取った相手の値に自分の秘密指数でさらにべき乗すると、(g^b)^a = (g^a)^b = g^ab mod pという指数法則により、2人とも同じ値にたどり着く。
  • Eveはp・g・g^a mod p・g^b mod pをすべて見ても、そこからabを求める(離散対数問題)のはpが大きいと現実的な時間では解けない。「一方向は簡単、逆算は困難」という非対称性が鍵交換の安全性の根拠。