アリスとボブが秘密の暗号鍵を共有したい!でも、誰かに盗み見られる可能性のある通信路しかない...
そんな時に使えるのが、DH鍵共有です。
まず、アリスとボブは2つの数字pとgを決めます。これは公開情報なので、誰でも見ることができます。(ただし、pは大きな素数、gは g^x mod p が生成する値が十分に多い必要があります)
次に、アリスとボブはそれぞれ秘密の数字を選びます:
- アリスは数字a(これは誰にも教えません)
- ボブは数字b(これも誰にも教えません)
そして、それぞれが計算をします:
アリス:A = g^a mod p (この結果だけを公開します)
ボブ:B = g^b mod p (この結果だけを公開します)
アリスは受け取ったBを使って:K = B^a mod p を計算
ボブは受け取ったAを使って:K = A^b mod p を計算
すると、なんと!二人とも同じ数字K = g^(ab) mod p を手に入れることができます。
この数字Kこそが、二人だけが知っている共有の秘密鍵になるのです。
でも、なぜこれは安全なのでしょうか?
その秘密は「離散対数問題」という数学的な特徴にあります:
- g^xという計算は簡単にできます(コンピュータでも高速に計算可能)
- でも、g^xの結果からxを求めるのは、途方もなく難しいのです
(現代のスーパーコンピュータを使っても、非現実的な時間がかかります)
つまり、通信を盗み見た人は:
- 公開値p, g
- アリスの計算結果A = g^a mod p
- ボブの計算結果B = g^b mod p
これらすべてを見ることができますが、それでも共有鍵K = g^(ab) mod pを求めることはできないのです!
この方法により、アリスとボブは誰かに盗み見られる可能性のある通信路でも、安全に秘密の鍵を共有することができます。現代のインターネットセキュリティの重要な基盤となっているのです。