ディフィー・ヘルマンとは何か(目的と位置づけ)
ディフィー・ヘルマン(Diffie–Hellman)は、通信相手と“共通の秘密”(後に暗号鍵として使える値)を、互いに秘密を共有せずに合意するための公開鍵交換です。両者は最初に共通の公開情報(群や生成元など)を決め、その上でそれぞれが秘密値を持ち、公開してよい値をやり取りします。最終的に、両者は相手の公開値と自分の秘密値を組み合わせて、同じ共有秘密を計算できます。
ポイントは、「公開鍵交換=秘密をそのまま送らない」ことと、「共有秘密を作れても、通信相手が本当に意図した相手かは別問題」だという点です。ここで認証がないと、後述する中間者攻撃のリスクが現れます。
仕組み:公開情報・秘密値・共有秘密
典型的な考え方を、抽象化して説明します。共通の数学的対象として有限巡回群(あるいはそれに類する構造)と生成元gを用意し、各当事者は次のように動きます。
- 当事者Aは秘密の整数aを選び、公開値A=g^aを計算します。
- 当事者Bは秘密の整数bを選び、公開値B=g^bを計算します。
- AとBは公開値AとBを互いに送ります。
- Aは受け取ったBを使って共有秘密S=(B)^a = (g^b)^a=g^{ab}を計算します。
- Bも受け取ったAを使って共有秘密S=(A)^b = (g^a)^b=g^{ab}を計算します。
このように、交換したのは“公開してよい値”だけですが、計算結果は一致します。
ただし実際の安全性は、共有秘密そのものではなく「相手の公開値から秘密値(や共有秘密)を推定することが現実的に困難か」という点にあります。そこに関わる代表的な仮定が、離散対数問題(離散対数が難しいこと)です。
制限と注意点:安全性が崩れる条件
ディフィー・ヘルマンは万能ではありません。代表的な制限は次の通りです。
- 認証がないと成立しない(中間者攻撃) DHの“鍵合意”は、相手が本当に意図した当事者かを確かめる仕組みが別に必要です。 認証が無いと、攻撃者が通信経路に割り込み、AとBそれぞれに対して別々の公開値を提示して、結果として攻撃者が両側と異なる共有秘密を作れる状況が起こりえます。
