
ディフィー・ヘルマン(DH)鍵交換[注1 ]は、公開チャネル上で対称暗号鍵を安全に生成する数学的手法であり、ラルフ・マークルが考案し、ホイットフィールド・ディフィーとマーティン・ヘルマンにちなんで名付けられた最初のプロトコルの1つです。[ 1 ] DHは、暗号学の分野で実装された公開鍵交換の最も初期の実用的な例の1つです。1976年にディフィーとヘルマンによって発表されたこれは、秘密鍵とそれに対応する公開鍵のアイデアを提案した最も初期の公に知られている研究です。
従来、二者間の安全な暗号化通信には、信頼できる宅配業者によって運ばれる紙の鍵リストなど、何らかの安全な物理的手段を用いて鍵を交換する必要がありました。ディフィー・ヘルマン鍵交換方式では、互いのことを全く知らない二者が、安全でないチャネル上で共同で秘密鍵を確立することができます。この鍵は、その後の通信を共通鍵暗号方式で暗号化するために使用できます。
Diffie–Hellmanは、さまざまなインターネットサービスのセキュリティ確保に使用されています。しかし、2015年10月に発表された研究によると、当時多くのDHインターネットアプリケーションで使用されていたパラメータは、一部の国のセキュリティ機関など、資金力のある攻撃者による侵害を防ぐには十分強力ではなかったことが示唆されています。[ 2 ]
この方式は1976年にウィットフィールド・ディフィーとマーティン・ヘルマンによって発表されたが[ 3 ] 、 1997年には、イギリスの通信情報機関であるGCHQのジェームズ・H・エリス[ 4 ] 、クリフォード・コックス、マルコム・J・ウィリアムソンが、1969年に公開鍵暗号方式を実現する方法を示していたことが明らかになった[ 5 ] 。 [ 6 ]
Diffie-Hellman鍵交換自体は認証なしの鍵合意プロトコルですが、さまざまな認証プロトコルの基盤となり、Transport Layer Securityのエフェメラルモード(暗号スイートによってEDHまたはDHEと呼ばれる)で前方秘匿性を提供するために使用されます。前方秘匿性はエフェメラル鍵の使用によって実現されます。鍵合意が完了すると秘密鍵は破棄されるため、後で漏洩する心配がありません。エフェメラル鍵は、Diffie-Hellman交換に適した公開鍵と秘密鍵のペアを計算コストが低く作成できるため、実用的です。
この方法に続いて、非対称アルゴリズムを用いた公開鍵暗号方式であるRSA暗号システムが開発された。
1977年に発行され現在はパブリックドメインとなっている米国特許4200770 [ 7 ]には、このアルゴリズムが記載されている。発明者としてヘルマン、ディフィー、マークルが挙げられている。
2006年、ヘルマンは、公開鍵暗号の発明におけるラルフ・マークルの貢献を称え、このアルゴリズムをディフィー・ヘルマン・マークル鍵交換と呼ぶことを提案し(ヘルマン、2006年)、次のように記した。
このシステムはその後、ディフィー・ヘルマン鍵交換として知られるようになりました。このシステムは、ディフィーと私が論文で最初に記述したもので、マークルが開発した概念である公開鍵配布システムであるため、名前を関連付けるのであれば「ディフィー・ヘルマン・マークル鍵交換」と呼ぶべきです。この小さな説教壇が、公開鍵暗号の発明におけるマークルの同等の貢献を認識する取り組みの一助となることを願っています。[ 8 ]

ディフィー・ヘルマン鍵交換は、2者間で共有される秘密鍵を確立し、公開ネットワーク上でデータを交換するための秘密通信に利用できます。公開鍵交換の概念を、非常に大きな数字の代わりに色を使って例えると分かりやすいでしょう。
このプロセスは、アリスとボブの2人が、秘密にする必要のない任意の開始色を公に合意することから始まります。この例では、色は黄色です。また、それぞれが秘密の色(この例では赤とシアン)を選び、それを他の人には教えません。このプロセスの重要な部分は、アリスとボブがそれぞれ自分の秘密の色とお互いに共有している色を混ぜ合わせ、それぞれオレンジベージュと水色の混合色を作り、それを公に交換することです。最後に、それぞれが相手から受け取った色と自分の秘密の色を混ぜ合わせます。その結果、最終的な色の混合色(この例では黄褐色)が、相手の最終的な色の混合色と全く同じになります。
第三者がやり取りを傍受した場合、共通の色(黄色)と最初の混合色(オレンジベージュと水色)しか分からず、最後の秘密の色(黄褐色)を突き止めるのは非常に困難です。この例えを、色ではなく大きな数値を用いた現実のやり取りに当てはめると、この判定は計算コストが高く、現代のスーパーコンピュータでも実用的な時間内に計算することは不可能です。
最も単純でオリジナルの実装[ 3 ]は、後にRFC 7919 [ 9 ]で有限体ディフィー・ヘルマンとして形式化され、 pを法とする整数の乗法群を使用します。ここでpは素数、gはpを法とする原始根です。潜在的な脆弱性を防ぐため、少なくとも2048ビットの長さの素数を使用することが推奨されます。これにより、離散対数を計算して共有秘密を漏洩しようとする攻撃者の難易度が上がります。これらの2つの値は、結果として得られる共有秘密が1からp -1までの任意の値をとることができるように、このように選択されています。以下に、非秘密の値を青、秘密の値を赤で示したプロトコルの例を示します。
アリスとボブはどちらも同じ値に到達しました。なぜなら、mod pの下では、
より具体的には、
aとbだけが秘密に保たれます。その他の値 ( p、g、g a mod p、g b mod p ) はすべて平文で送信されます。この方式の強みは、 p、g、 g a mod p、g b mod pの情報だけでは、既知の古典的なアルゴリズムではg ab mod p = g ba mod pを計算するのに非常に長い時間がかかるという事実にあります。このように計算は容易だが逆関数を求めるのが難しい関数は、一方向関数と呼ばれます。アリスとボブは共有秘密を計算したら、それを暗号鍵として使用し、同じオープンな通信チャネルを介してメッセージを送信できます。この鍵はアリスとボブだけが知っています。
もちろん、n mod 23の結果は 23 通りしかないため、この例を安全にするには、a、b、pの値をはるかに大きくする必要があります。ただし、 pが少なくとも 600 桁の素数である場合、最も速く既知のアルゴリズムを使用する最速の現代のコンピュータでも、g、p、g a mod pだけが与えられた場合、aを見つけることはできません。このような問題は、離散対数問題と呼ばれます。[ 2 ] g a mod pの計算はモジュラーべき乗として知られており、大きな数でも効率的に実行できます。gは必ずしも大きくなくてもよく、実際には通常、小さな整数 (2、3、... など) であることに注意してください。
下の図は、誰が何を知っているかを示しています。ここでも、秘密でない値は青色、秘密の値は赤色で示されています。ここでは、イブは盗聴者です。彼女はアリスとボブの間で送受信される内容を監視しますが、通信内容を変更することはありません。
ここで、sは共有秘密鍵であり、アリスとボブの両方に知られていますが、イブには知られていません。イブがABを計算することは役に立たないことに注意してください。AB はg a + b mod pに等しくなります。
注:アリスがボブの秘密鍵を解読するのは困難であるべきであり、ボブがアリスの秘密鍵を解読するのも困難であるべきである。アリスがボブの秘密鍵を解読するのが容易である場合(またはその逆の場合)、盗聴者であるイブは、自身の秘密鍵/公開鍵ペアを置き換え、ボブの公開鍵を自身の秘密鍵に代入し、偽の共有秘密鍵を生成してボブの秘密鍵を解読し(そしてそれを使って共有秘密鍵を解読する)、ボブの秘密鍵を解読することができる。イブは、ボブの秘密鍵を解読しやすくするような公開鍵/秘密鍵ペアを選択しようとするかもしれない。
プロトコルのより一般的な説明は次のとおりです。[ 10 ]
アリスとボブはどちらも、共有秘密鍵として使用できる群要素g ab = g baを所有しています。群Gは、 g、g a、g bが与えられたときにg abを決定する効率的なアルゴリズムが存在しない限り、安全な通信に必要な条件を満たします。
例えば、楕円曲線ディフィー・ヘルマンプロトコルは、G の要素を n を法とする整数としてではなく、楕円曲線上の点として表現する変種です。超楕円曲線 を使用する変種も提案されています。超特異同種鍵交換は、量子コンピュータに対して安全になるように設計されたディフィー・ヘルマン変種ですが、2022 年 7 月に破られました。[ 11 ]
使用される鍵は、一時的な鍵または静的(長期)鍵のいずれかですが、これらを混合することも可能で、いわゆる半静的DHと呼ばれます。これらのバリアントは特性が異なるため、使用例も異なります。多くのバリアントの概要といくつかの議論については、たとえばNIST SP 800-56Aを参照してください。[ 12 ]基本的なリスト:
NIST SP 800-56Aに示されているように、1つの鍵合意の中で一時的な鍵と静的な鍵を組み合わせて使用することで、より高いセキュリティを提供することは可能ですが、それらを単一のDH鍵交換に組み合わせることも可能であり、その場合はトリプルDH(3-DH)と呼ばれます。
1997年にサイモン・ブレイク=ウィルソン、ドン・ジョンソン、アルフレッド・メネゼスによって一種のトリプルDHが提案され[ 13 ] 、 2005年にC.クドラとKGパターソンによって改良され[ 14 ]、安全であることが示されました。
アリスとボブの長期秘密鍵はそれぞれaとbで表され、公開鍵はAとB、さらに一時的な鍵ペアは ( x , X ) と ( y , Y ) である。プロトコルは次のようになる。
長期公開鍵は何らかの方法で転送する必要があります。これは、事前に別の信頼できるチャネルで行うか、匿名性を維持するために部分的な鍵合意を使用して公開鍵を暗号化することができます。このような詳細、およびサイドチャネル保護や明示的な鍵確認などのその他の改善、早期メッセージ、追加のパスワード認証については、たとえば米国特許「鍵合意とオプションの認証のための高度なモジュール式ハンドシェイク」を参照してください。[ 15 ]
X3DHは、当初シグナルプロトコルで使用されるダブルラチェットアルゴリズムの一部として提案されました。このプロトコルは前方秘匿性と暗号否認性を提供します。楕円曲線上で動作します。[ 16 ]
このプロトコルでは、5 つの公開鍵を使用します。アリスは、ID 鍵 IK Aと一時鍵 EK Aを持っています。ボブは、ID 鍵 IK B、署名付き事前鍵 SPK B、およびワンタイム事前鍵 OPK Bを持っています。[ 16 ]ボブはまず 3 つの鍵をサーバーに公開し、アリスはそれをダウンロードして署名を検証します。次にアリスはボブとの交換を開始します。[ 16 ] OPK はオプションです。[ 16 ]
Diffie–Hellman鍵合意は、2人の参加者のみが共有する鍵の交渉に限定されません。合意プロトコルを繰り返し実行し、中間データ(それ自体は秘密にしておく必要はありません)を交換することで、任意の数のユーザーが合意に参加できます。たとえば、アリス、ボブ、キャロルは、すべての演算を法pとして、次のようにDiffie–Hellman合意に参加できます。
盗聴者はg a mod p、g b mod p、g c mod p、g ab mod p、g ac mod p、およびg bc mod pを見ることができたが、これらの組み合わせを使用してg abc mod pを効率的に再現することはできない。
この仕組みをより大規模なグループに拡張するには、2つの基本原則に従う必要があります。
これらの原則により、参加者が鍵に貢献する順序を選択するためのさまざまな選択肢が残されています。最も単純で明白な解決策は、N人の参加者を円形に配置し、N個の鍵を円周に沿って回転させ、最終的にすべての鍵がN人の参加者全員によって貢献され(最終的にはその鍵の所有者によって貢献される)、各参加者がN個の鍵に貢献する(最終的には自分の鍵によって貢献される)というものです。ただし、これにはすべての参加者がN回のモジュラべき乗演算を実行する必要があります。
より望ましい順序を選択し、鍵を複製できるという事実を利用することで、分割統治法を用いて各参加者が実行するモジュラべき乗の回数をlog 2 ( N ) + 1に減らすことが可能です。ここでは、8 人の参加者の場合についてその方法を示します。
この操作が完了すると、すべての参加者は秘密のg abcdefghを所有することになりますが、各参加者は単純な円形配置で想定される 8 回のモジュラーべき乗ではなく、4 回のモジュラーべき乗しか実行していないことになります。
Gとgが適切に選択されていれば、このプロトコルは盗聴者に対して安全であると考えられています。特に、グループGの位数は大きくなければなりません。特に、同じグループが大量のトラフィックに使用される場合はなおさらです。盗聴者は、g abを取得するためにDiffie-Hellman問題を解く必要があります。これは、位数が十分に大きいグループでは現在困難であると考えられています。離散対数問題を解く効率的なアルゴリズムがあれば、 aまたはbを計算してDiffie-Hellman問題を解くことが容易になり、このシステムや他の多くの公開鍵暗号システムが安全ではなくなります。特性の小さい体では、安全性が低下する可能性があります。[ 17 ]
Gの位数は、 Pohlig–Hellman アルゴリズムを使用してaまたはbを取得することを防ぐために、大きな素因数を持つ必要があります。このため、Gの位数が2 とqでしか割り切れないため、安全素数と呼ばれるSophie Germain 素数qがp = 2 q + 1の計算に使用されることがあります。場合によっては、 GではなくGの位数qの部分群を生成するようにgが選択され、 g aのルジャンドル記号がaの最下位ビットを決して明らかにしないようにします。このような選択を使用するプロトコルの例としては、IKEv2 があります。[ 18 ]
生成元gは、多くの場合、2のような小さな整数です。離散対数問題のランダムな自己還元性により、小さなgは同じ群の他の生成元と同等の安全性を持ちます。
アリスとボブが、出力が完全にランダムではなく、ある程度予測可能な乱数発生器を使用する場合、盗聴ははるかに容易になる。
元の説明では、Diffie–Hellman 交換だけでは通信当事者の認証は行われず、中間者攻撃に対して脆弱である可能性があります。マロリー (中間者攻撃を実行するアクティブな攻撃者) は、アリスとボブの 2 つの異なる鍵交換を確立し、ボブに対してアリスになりすまし、ボブに対してアリスになりすますことで、両者の間でやり取りされるメッセージを復号化してから再暗号化することができます。マロリーは最初から中間者であり続け、アリスとボブが通信するたびにメッセージを積極的に復号化および再暗号化する必要があることに注意してください。鍵が生成され、アリスとボブ間の暗号化された会話が既に始まっている後にマロリーが到着した場合、攻撃は成功しません。マロリーが不在の場合、アリスとボブはマロリーの存在を知ることになります。彼らは、自分たちのプライベートな会話がチャネル内の誰かによって傍受され、復号化されていたことを知ることになります。ほとんどの場合、マロリーが両方の交換で同じ鍵を使用していたとしても、マロリーの秘密鍵を入手するのに役立ちません。
この種の攻撃を防ぐには、通信当事者間の認証を行う方法が一般的に必要となる。ディフィー・ヘルマン鍵交換方式の派生版であるSTSプロトコルなどが、こうした攻撃を回避するために用いられることがある。
2021 年に公開されたCVE ( CVE -2002-20001 ) では、一時的な鍵を使用するプロトコルのバリアントに対する D(HE)at 攻撃と呼ばれるサービス拒否攻撃(DoS) が明らかにされました。 [ 19 ]この攻撃は、Diffie–Hellman 鍵交換では、攻撃者が実際には公開鍵ではない任意の数値を送信できるため、被害者側でコストのかかるモジュラべき乗計算がトリガーされることを悪用します。別の CVE の公開では、Diffie–Hellman 鍵交換の実装では、モジュラべき乗計算を不必要にコストが高くする可能性のある長い秘密指数 ( CVE-2022-40735 )を使用する可能性があること、または長い指数を使用した鍵計算と同様のリソース要件を持つピアの公開鍵を不必要にチェックする可能性があること ( CVE-2024-41996 ) が明らかにされました。[21]攻撃者は、両方の脆弱性を同時に悪用することができます。
離散対数問題を解くのに一般的に最も効果的な数体篩アルゴリズムは、4つの計算ステップから構成されます。最初の 3 つのステップは、有限対数を求める特定の数ではなく、群 G の位数のみに依存します。[ 22 ]インターネット トラフィックの多くは、位数が 1024ビット以下の少数の群のいずれかを使用していることが判明しています。 [ 2 ]最も一般的な群の数体篩の最初の 3 つのステップを事前に計算することで、攻撃者は、最初の 3 つのステップよりもはるかに計算コストの低い最後のステップを実行するだけで、特定の対数を取得できます。Logjam攻撃はこの脆弱性を利用して、位数が 512 ビットの素数である群の使用を許可しているさまざまなインターネット サービスを侵害しました。これは、いわゆるエクスポート グレードです。著者は、単一の 512 ビット素数のデータを事前に計算するために、1週間にわたって数千の CPU コアを必要としました。それが終わると、2つの18コアIntel Xeon CPUを使用して、個々の対数を約1分で解くことができた。[ 2 ]
Logjam攻撃の背後にいる著者らの推定によると、1024ビット素数の離散対数問題を解くために必要なはるかに困難な事前計算には、1億ドル程度の費用がかかり、これは米国国家安全保障局(NSA)のような大規模な国家情報機関の予算内に十分収まる。Logjamの著者らは、広く再利用されている1024ビットDH素数に対する事前計算が、NSAが現在の暗号の大部分を破ることができるという流出したNSA文書の主張の背後にあると推測している。 [ 2 ]
これらの脆弱性を回避するために、Logjamの著者らは、同様の攻撃が知られていない楕円曲線暗号の使用を推奨している。それができない場合は、Diffie–Hellman群の位数pを少なくとも2048 ビットにすることを推奨している。2048ビット素数に必要な事前計算は、1024ビット素数の場合よりも10⁹倍難しいと推定している。 [ 2 ]
量子コンピュータは、素因数分解問題、離散対数問題、周期探索問題を解くためのショアのアルゴリズムを用いて、RSA、有限体DH、楕円曲線DH鍵交換プロトコルなどの公開鍵暗号方式を破ることができる。 2023年には、量子耐性のあるCRYSTALS-Kyberプロトコルと、従来の楕円曲線X25519プロトコルを組み合わせた、ポスト量子版のDiffie-Hellmanアルゴリズムが提案された。
ディフィー・ヘルマン鍵交換に基づく公開鍵暗号方式が提案されている。最初の方式はエルガマル暗号である。より現代的な方式としては、統合暗号方式(IES)がある。
前方秘匿性を実現するプロトコルは、セッションごとに新しい鍵ペアを生成し、セッション終了時にそれらを破棄します。ディフィー・ヘルマン鍵交換は、鍵生成が高速であるため、このようなプロトコルでよく用いられます。
アリスとボブがパスワードを共有する場合、中間者攻撃を防ぐために、パスワード認証鍵合意(PK)方式のディフィー・ヘルマン鍵交換方式を使用することがあります。シンプルな方式の一つは、 sのハッシュ値を連結し、チャネルの両端でそれぞれ独立して計算されたパスワードと比較することです。この方式の特徴は、攻撃者が各反復処理で相手側に対して特定のパスワードしかテストできないため、比較的弱いパスワードでも高いセキュリティが確保される点です。この方式は、ITU-T勧告X.1035に記載されており、 G.hnホームネットワーク規格で採用されています。
そのようなプロトコルの一例として、セキュアリモートパスワードプロトコルが挙げられる。
Diffie-Hellmanは公開鍵インフラストラクチャの一部としても使用でき、ボブがメッセージを暗号化してアリスだけが復号できるようにすることが可能です。この場合、ボブがアリスの公開鍵を信頼できる知識として持っていること以外に、両者の間に事前の通信は必要ありません。アリスの公開鍵はボブはアリスにメッセージを送るために、ランダムにbを選び、アリスに送ります。(暗号化されていない)メッセージと、共通鍵で暗号化されたメッセージアリスだけが共通鍵を特定し、メッセージを復号できるのは、彼女だけが(秘密鍵を)持っているからである。また、事前に共有された公開鍵は中間者攻撃を防ぐ。
実際には、Diffie-Hellmanはこのように使用されることはなく、RSAが主流の公開鍵アルゴリズムとなっています。これは主に歴史的および商業的な理由によるもので、具体的には、RSA Securityが鍵署名のための認証局を設立し、それがVerisignとなったためです。前述のように、Diffie-Hellmanは証明書の署名に直接使用することはできません。しかし、ElGamalおよびDSA署名アルゴリズムは数学的にDiffie-Hellmanと関連しており、MQV、STS、およびインターネットプロトコル通信を保護するためのIPsecプロトコルスイートのIKEコンポーネントも同様です。
1975年8月受理、1977年9月改訂
{{cite book}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク)