暗号化の基礎

Diffie-Hellman鍵交換 でぃふぃーへるまんかぎこうかん

公開鍵暗号鍵交換プロトコルTLS/SSL離散対数問題共通鍵前方秘匿性
Diffie-Hellman鍵交換について教えて

簡単に言うとこんな感じ!

「秘密を教え合わずに、2人だけが知る秘密を作る」魔法みたいな仕組みだよ!インターネットで安全に通信するとき、こっそり暗号の鍵を決めるために使われてるんだ。盗み見されても大丈夫なのがすごいところ!


Diffie-Hellman鍵交換とは

Diffie-Hellman鍵交換(DH鍵交換) とは、事前に秘密情報を共有していない2者が、盗聴される可能性のある通信経路上でも安全に共通の秘密鍵を生成できる暗号プロトコルです。1976年にホイットフィールド・ディフィーとマーティン・ヘルマンが発表し、現代の暗号技術の礎となりました。

重要なのは「鍵を交換しているのに、鍵そのものは一度も通信路を流れない」という点です。互いに公開情報をやり取りするだけで、最終的に2人だけが同じ秘密の値を手にできる仕組みになっています。これはHTTPS(Webの安全な通信)やVPN、SSHなど、日常的に使われる多くのセキュリティ技術の根幹を支えています。

ビジネスの観点では、「なぜWebサイトのURLが https:// で始まると安全なのか」という問いへの本質的な答えのひとつがこのDH鍵交換にあります。契約書のやり取りや社内システムへのアクセスなど、企業活動における安全な通信の土台となっている非常に重要な概念です。


Diffie-Hellman鍵交換の仕組み

「ペンキ混ぜ」で理解するDH鍵交換

数学が難しくても大丈夫。まずは「ペンキの色混ぜ」の比喩で理解しましょう。

ステップAliceとBobの操作ポイント
①公開色を決める2人で「黄色」を共通の出発色として決める盗聴者にも見える
②秘密色を選ぶAliceは「赤」、Bobは「青」をこっそり選ぶ絶対に教えない
③混ぜて交換AliceはAが「黄+赤=オレンジ」を送る。BobはBが「黄+青=緑」を送る混ぜた色を公開
④もう一度混ぜるAliceは受け取った「緑+赤」、Bobは「オレンジ+青」どちらも茶色になる!
⑤共通秘密の完成2人とも同じ「茶色(共通鍵)」を持った盗聴者は再現できない

盗聴者には「黄色」「オレンジ」「緑」しか見えません。混ぜた色から元の色を分離することは(数学的に)極めて困難なため、秘密が守られるのです。

数学的な仕組み(概要)

実際には「ペンキ」の代わりに離散対数問題という数学的難問を利用しています。

公開パラメータ: 素数 p、生成元 g(盗聴者にも見える)

Alice:  秘密値 a を選ぶ → A = g^a mod p を送信
Bob:    秘密値 b を選ぶ → B = g^b mod p を送信

共通鍵:
  Aliceが計算: B^a mod p = g^(ab) mod p
  Bobが計算:   A^b mod p = g^(ab) mod p
  → 2人とも同じ値になる!

g^ab mod p の値は2人にしか計算できません。盗聴者は AB を知っていても、ab を求めるには「離散対数問題」を解く必要があり、これは現代のコンピュータでも現実的な時間では不可能です。

主なDHのバリエーション

種類特徴主な用途
DHE(Ephemeral DH)通信のたびに鍵を生成。前方秘匿性ありTLS 1.3推奨
ECDHE楕円曲線を使った高速・軽量版HTTPS、現代のTLS
DH(静的)固定鍵を使う。前方秘匿性なし旧式。現在は非推奨

歴史と背景

  • 1976年 — Whitfield DiffieとMartin Hellmanが論文「New Directions in Cryptography」を発表。「公開された通信路で秘密鍵を共有できる」という概念を初めて実証し、暗号の歴史を変えた
  • 1977年 — RSA暗号が発表され、DH鍵交換と並ぶ公開鍵暗号の柱となる
  • 1990年代 — インターネットの普及とともにSSL/TLSに組み込まれ、HTTPS通信の基盤として世界中に広まる
  • 2002年 — DiffieとHellmanはチューリング賞(コンピュータ科学のノーベル賞)を2015年に受賞(業績の重要性が改めて評価)
  • 2013年 — Snowdenによる監視プログラム暴露を機に、前方秘匿性(DHE/ECDHE)の重要性が再認識される
  • 2018年 — TLS 1.3が標準化され、静的DHが廃止。DHEまたはECDHEが必須となる

DH鍵交換とTLS/HTTPSの関係

Webブラウザで https:// にアクセスしたとき、裏側ではDH鍵交換が動いています。その流れを図解します。

ブラウザ (Alice) Webサーバー (Bob) 盗聴されても安全な通信路 ① 公開パラメータ(p,g)を共有 サーバーが提案、ブラウザが承認 ② ブラウザが秘密値 a を選ぶ A = g^a mod p を計算して送信 ③ サーバーが秘密値 b を選ぶ B = g^b mod p を計算して送信 ④ AとBを交換(盗聴者も見える) でも a と b はわからない ⑤ B^a mod p を計算 → 共通鍵 = g^(ab) mod p ⑤ A^b mod p を計算 → 共通鍵 = g^(ab) mod p ⑥ 2人だけが同じ共通鍵を持った! 以後この鍵でHTTPS通信を暗号化

前方秘匿性(PFS: Perfect Forward Secrecy)とは

DHEやECDHEが重要視される理由のひとつが前方秘匿性です。

方式通信ごとに鍵が変わる?サーバー秘密鍵が漏れたら?現在の推奨
静的DH❌ 固定過去の通信もすべて復号される⚠️ 非推奨
DHE / ECDHE✅ 毎回新しい過去の通信は守られる✅ 推奨

「録画しておいて後で解読しよう」という攻撃(録音攻撃)に対して、DHEは強い耐性を持ちます。


関連する規格・RFC

規格・RFC番号内容
RFC 2631Diffie-Hellman鍵共有のCMS(暗号メッセージ構文)での使用方法
RFC 3526IKE(Internet Key Exchange)で使用するための標準DHグループ(素数の仕様)
RFC 7919TLSにおける有限体DHE(ffdhe)の標準化。安全なパラメータを規定
RFC 8446TLS 1.3の標準仕様。DHEまたはECDHEによる鍵交換を必須化

関連用語

  • 公開鍵暗号 — 公開鍵と秘密鍵のペアを使った暗号方式の総称
  • TLS/SSL — HTTPS通信を実現する暗号プロトコル。DH鍵交換を内部で使用する
  • RSA暗号 — DH鍵交換と並ぶ代表的な公開鍵暗号。素因数分解の難しさを利用
  • 楕円曲線暗号(ECC) — ECDHEの基盤。少ない計算量で強い暗号強度を実現
  • 共通鍵暗号 — DH鍵交換で決めた鍵を使って実際のデータを暗号化する方式
  • HTTPS — TLSで保護されたHTTP通信。URLが https:// で始まる
  • 前方秘匿性(PFS) — 過去の通信記録を将来の鍵漏洩から守る性質
  • PKI(公開鍵基盤) — 公開鍵の正当性を証明する仕組み全体