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

Diffie-Hellman鍵交換は、二者間で共有秘密を確立し、公開ネットワーク上でデータを交換するための秘密通信に使用できます。公開鍵交換の概念を、非常に大きな数字の代わりに色を使って例えてみましょう。
このプロセスは、まず Alice と Bob の2 人が、秘密にする必要のない任意の開始色に公開で同意することから始まります。この例では、黄色です。各人はまた、自分用に秘密の色を選択します (この場合は赤とシアン)。このプロセスの重要な部分は、Alice と Bob がそれぞれ自分の秘密の色と相互に共有している色を混ぜて、それぞれオレンジがかった黄褐色と水色の混合色を作り、次にこの 2 つの混合色を公開で交換することです。最後に、それぞれがパートナーから受け取った色と自分の秘密の色を混ぜます。その結果、最終的な色の混合色 (この場合は黄褐色) が、パートナーの最終的な色の混合色と同一になります。
第三者がこのやり取りを盗聴した場合、共通色(黄色)と最初の混合色(オレンジ褐色と水色)しか分からず、最終的な秘密色(黄褐色)を割り出すのは非常に困難です。色ではなく大きな数値を用いた現実のやり取りに例えると、この決定には膨大な計算コストがかかります。現代のスーパーコンピュータでさえ、実用的な時間で計算することは不可能です。
プロトコルの最も単純かつオリジナルの実装[ 3 ]は後にRFC 7919 で有限体 Diffie-Hellmanとして形式化され[ 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だけでは見つけることができません。このような問題は離散対数問題と呼ばれています。[ 2 ] g a mod pの計算はモジュラー指数計算として知られており、大きな数でも効率的に行うことができます。g は全く大きくする必要はなく、実際には通常は小さな整数(2、3、... など)であることに注意してください。
下のチャートは、誰が何を知っているかを示しています。ここでも、秘密でない値は青、秘密の値は赤で示されています。ここでイブは盗聴者です。彼女はアリスとボブの間で何が送られてくるかを監視しますが、通信の内容を変更することはありません
|
|
|
sは共有秘密鍵であり、アリスとボブの両方に知られていますが、イヴには知られていません。イヴにとって、 g a + b mod pに等しいABを計算することは役に立たないことに注意してください
注: アリスがボブの秘密鍵を解読することは困難であり、ボブがアリスの秘密鍵を解読することは困難であるべきです。アリスがボブの秘密鍵を解読することが困難でない場合(またはその逆)、盗聴者であるイブは、自身の秘密鍵と公開鍵のペアを置き換え、ボブの公開鍵を自分の秘密鍵に代入し、偽の共有秘密鍵を生成してボブの秘密鍵を解読し(そしてそれを用いて共有秘密鍵を解読し)、盗聴を試みる可能性があります。イブは、ボブの秘密鍵を容易に解読できるような公開鍵と秘密鍵のペアを選択しようとするかもしれません。
このプロトコルのより一般的な説明は次のとおりです。[ 10 ]
アリスとボブは共に、共有秘密鍵として使用できる群元g ab = g baを所有しています。g 、g a 、 g bが与えられた場合にg abを決定する効率的なアルゴリズムが存在しない限り、群Gは安全な通信の必要条件を満たします。
例えば、楕円曲線ディフィー・ヘルマン・プロトコルは、Gの元をnを法とする整数ではなく楕円曲線上の点として表す変種です。超楕円曲線を用いた変種も提案されています。超特異点同型鍵交換は、量子コンピュータに対して安全となるように設計されたディフィー・ヘルマン変種ですが、2022年7月に破られました。 [ 11 ]
使用される鍵は、一時鍵または静的(長期)鍵のいずれかですが、両者を混合した、いわゆる半静的DH(セミスタティックDH)鍵も使用できます。これらのバリエーションはそれぞれ異なる特性を持ち、したがってユースケースも異なります。多くのバリエーションの概要といくつかの議論は、例えばNIST SP 800-56Aに記載されています。[ 12 ]基本的なリスト:
NIST SP 800-56A に示されているように、1 つのキー合意で一時キーと静的キーを使用してセキュリティを強化することは可能ですが、単一の DH キー交換でそれらを組み合わせることも可能です。これはトリプル DH (3-DH) と呼ばれます。
1997年、サイモン・ブレイク=ウィルソン、ドン・ジョンソン、アルフレッド・メネゼスによって、トリプルDHの一種が提案されました[ 13 ] 。これは2005年にC・クドラとK・G・パターソンによって改良され[ 14 ]、安全であることが示されました
アリスとボブの長期秘密鍵はそれぞれaとbで表され、公開鍵はAとB、そして一時鍵ペアは ( x , X ) と ( y , Y ) です。プロトコルは以下のようになります。
| アリス() | ボブ() | |
|---|---|---|
長期公開鍵は何らかの方法で転送する必要があります。これは、事前に別の信頼できるチャネルで行うことも可能ですし、匿名性を維持するために、公開鍵を部分的な鍵合意を用いて暗号化することも可能です。こうした詳細や、サイドチャネル保護や明示的な鍵確認、早期メッセージや追加のパスワード認証といったその他の改良点については、例えば米国特許「鍵合意およびオプションの認証のための高度なモジュラーハンドシェイク」[ 15 ]を参照してください。
X3DHは、 Signalプロトコルで使用されるダブルラチェットアルゴリズムの一部として当初提案されました。このプロトコルは、前方秘匿性と暗号否認性を提供します。楕円曲線上で動作します。[ 16 ]
このプロトコルは5つの公開鍵を使用する。アリスは識別鍵IK Aと一時鍵EK Aを持つ。ボブは識別鍵IK B、署名済み事前鍵SPK B、およびワンタイム事前鍵OPK Bを持つ。[ 16 ]ボブはまず3つの鍵をサーバーに公開し、アリスはそれをダウンロードして署名を検証する。その後、アリスはボブへの交換を開始する。[ 16 ] OPKはオプションである。[ 16 ]
ディフィー・ヘルマン鍵共有は、2人の参加者だけが共有する鍵のネゴシエーションに限定されません。合意プロトコルを繰り返し実行し、中間データ(それ自体は秘密にする必要はありません)を交換することで、任意の数のユーザーが合意に参加できます。例えば、アリス、ボブ、キャロルは、すべての演算をpを法として、次のようにディフィー・ヘルマン鍵共有に参加できます。
盗聴者は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の位数は、 aまたはbを求めるためにPohlig-Hellman アルゴリズムが使用されないように、大きな素因数を持つ必要がある。このため、p = 2 q + 1を計算する際にSophie Germain 素数qが使われることがある。これは安全素数と呼ばれる。なぜなら、 Gの位数は2 とqでしか割り切れないからである。g はGではなくGの位数qの部分群を生成するために選ばれることもある。その場合、g aのルジャンドル記号はaの下位ビットを明らかにすることはない。このような選択を用いるプロトコルとしては、例えばIKEv2がある。[ 18 ]
生成元gは、多くの場合、2 などの小さな整数です。離散対数問題のランダムな自己還元性のため、小さなgは同じグループの他の生成元と同様に安全です。
アリスとボブが、出力が完全にランダムではなく、ある程度予測できる 乱数ジェネレータを使用する場合、盗聴ははるかに簡単になります。
元の説明では、Diffie-Hellman 交換自体は通信当事者の認証を行わないため、中間者攻撃に対して脆弱になる可能性があります。Mallory (中間者攻撃を実行するアクティブな攻撃者) は、1 つは Alice と、もう 1 つは Bob との 2 つの異なる鍵交換を確立し、Bob に対しては Alice になりすまし、Bob に対しては Alice になりすますことで、Mallory が両者の間でやり取りされるメッセージを復号化し、その後再暗号化することができます。Mallory は最初から中間にいて、Alice と Bob が通信するたびにメッセージを復号化および再暗号化し続ける必要があることに注意してください。鍵が生成され、Alice と Bob の間で暗号化された会話がすでに始まっている後に Mallory が到着した場合、攻撃は成功しません。Mallory がいなくなった場合、彼女の以前の存在が Alice と Bob に明らかになってしまいます。2 人は、プライベートな会話がすべてチャネル内の誰かに傍受され、復号化されたことを知ることになります。ほとんどの場合、たとえ両方のやり取りに同じ鍵を使用したとしても、マロリーの秘密鍵を取得するのに役立ちません。
この種の攻撃を防ぐには、通常、通信相手同士を認証する手段が必要です。STSプロトコルなど、Diffie-Hellmanプロトコルの派生型が、この種の攻撃を回避するために使用される場合もあります。
2021年に公開されたCVE (CVE-2002-20001)は、D(HE)at攻撃と呼ばれる、一時鍵を使用するプロトコルバリアントに対するサービス拒否攻撃(DoS)を公開しました。 [ 19 ]この攻撃は、Diffie-Hellman鍵交換により、攻撃者が実際には公開鍵ではない任意の数値を送信できることを悪用し、被害者側で高コストのモジュラー指数計算をトリガーします。別のCVEリリースでは、Diffie-Hellman鍵交換の実装が長い秘密指数(CVE-2022-40735)を使用する可能性があり、これによりモジュラー指数計算が不必要に高コストになる可能性があるか、 [ 20 ]長い指数を使用した鍵計算と同様のリソース要件を持つピアの公開鍵(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攻撃の著者らは、NSAが現在の暗号技術の多くを解読できるというNSAの漏洩文書の主張の背景には、広く再利用されている1024ビットDH素数に対する事前計算があると推測している。[ 2 ]
これらの脆弱性を回避するため、Logjamの著者らは、類似の攻撃方法が知られていない楕円曲線暗号の使用を推奨している。それが不可能な場合は、Diffie-Hellman群の位数pを少なくとも2048ビットにすることを推奨している。著者らは、2048ビットの素数を計算するために必要な事前計算は、1024ビットの素数を計算する場合の10の9乗倍難しいと推定している。[ 2 ]
量子コンピュータは、ショアのアルゴリズムを用いて因数分解問題、離散対数問題、周期探索問題を解くことで、RSA、有限体DH、楕円曲線DH鍵交換プロトコルなどの公開鍵暗号方式を破ることができます。2023年には、耐量子性能を持つDiffie-Hellmanアルゴリズムの派生版が提案され、量子耐性を持つCRYSTALS-Kyberプロトコルと、従来の楕円曲線X25519プロトコルの組み合わせを採用しています。
Diffie-Hellman鍵交換に基づく公開鍵暗号化方式が提案されています。最初の方式はElGamal暗号化です。より現代的な変種はIntegrated Encryption Schemeです
前方秘匿性を実現するプロトコルは、セッションごとに新しい鍵ペアを生成し、セッション終了時にそれらを破棄します。Diffie-Hellman鍵交換は、鍵生成が高速であるため、このようなプロトコルでよく使用されます
アリスとボブがパスワードを共有する場合、中間者攻撃を防ぐために、Diffie-Hellman方式のパスワード認証による鍵共有(PK)形式を使用できます。1つの簡単な方式は、チャネルの両端で独立して計算されたパスワードと連結されたハッシュを比較することです。これらの方式の特徴は、攻撃者が相手との各反復で特定のパスワードを1つだけテストできるため、システムは比較的弱いパスワードでも優れたセキュリティを提供できることです。このアプローチは、 G.hnホームネットワーク標準 で使用されているITU-T勧告X.1035に記載されています
このようなプロトコルの例としては、セキュア リモート パスワード プロトコルがあります。
Diffie–Hellman を公開鍵基盤の一部として使用することも可能であり、これにより Bob が Alice の公開鍵を知っていること以外、事前のやり取りを Bob が行わなくても Alice だけがそのメッセージを復号化できるようになります。Alice の公開鍵は です。Bob は Alice にメッセージを送るために、ランダムなbを選択し、対称鍵 で暗号化したメッセージと共にAlice (暗号化されていないメッセージ) を送ります。Alice だけが対称鍵を決定でき、したがってメッセージを復号化できます。なぜなら Alice だけが (秘密鍵)を持っているからです。事前共有公開鍵は中間者攻撃も防ぎます。
実際には、Diffie-Hellmanはこのような用途には使用されず、RSAが公開鍵アルゴリズムとして主流となっています。これは主に歴史的および商業的な理由によるもので、RSA Securityが鍵署名用の認証局を設立し、それが後にVerisignとなったためです。前述の通り、Diffie-Hellmanは証明書の署名に直接使用することはできません。しかし、ElGamal署名アルゴリズムとDSA署名アルゴリズムは数学的にDiffie-Hellmanと関連しており、MQV、STS、そしてインターネットプロトコル通信のセキュリティ保護を目的としたIPsecプロトコルスイートのIKEコンポーネントも同様です。
1975年8月受領、1977年9月改訂