Interactive
Diffie-Hellman鍵交換可視化
AliceとBobは、盗聴者Eveに全通信を見られている前提でも、 誰にも知られていない共有の秘密鍵に合意できます。公開の数 p・g の上で それぞれ秘密の指数を選び、実際のmod羃乗計算で同じ値にたどり着く様子を動かして確認できます。 TLSハンドシェイクの鍵交換部分(DHE/ECDHE)を数式レベルで深掘りする1本です。
数字を目で追える最小例。RFC 2631の例と同じ数。
公開(誰でも見える):
p = 23g = 5Alice
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 = 19Eveはp・g・A・Bをすべて見ても、a や b、共有鍵を計算できません。A = g^a mod p から a を逆算するのが離散対数問題で、pが大きいと現実的な時間では解けないため。 実際のTLS/SSHでは、この p は2048ビット(600桁超)にもなります。
「色の混合」の比喩: 公開色(上のグレー丸)にAliceが自分の秘密色を混ぜて送り、Bobも同様に送り返す。 受け取った混合色にさらに自分の秘密色を混ぜると、2人とも同じ色にたどり着く——しかし混ぜた色から元の秘密色を分離するのは(絵の具では)事実上不可能。 mod羃乗も同じ非対称性を数学的に実現している(一方向は簡単、逆算は困難)。
ここが分かる
- Alice・Bobはそれぞれ秘密の指数
a・bを選び、g^a mod p・g^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をすべて見ても、そこからaやbを求める(離散対数問題)のはpが大きいと現実的な時間では解けない。「一方向は簡単、逆算は困難」という非対称性が鍵交換の安全性の根拠。