はじめに
リビン・テクノロジーズ株式会社では、ネットワークスペシャリストの資格取得を目指す方向けに、隔週でネットワーク講座を行なっています。その講座のセキュリティをテーマにした回で「ディフィー・ヘルマン鍵交換方式」について講義したのですが、十分に説明しきれなかったので、改めて解説記事を書くことにしました。
なぜ「ハイブリッド暗号方式」が使われるのか?
インターネット上でデータを安全に送受信するために、暗号技術は欠かせません。暗号化アルゴリズムには大きく分けて 「共通鍵暗号方式」 と 「公開鍵暗号方式」 の2種類があり、それぞれにトレードオフが存在します。
| 暗号方式 | 長所 | 短所 |
|---|---|---|
|
共通鍵暗号方式 (AES など) |
処理速度が非常に高速。 | 鍵をあらかじめ安全に相手へ共有する手順(鍵配送問題)が難しい。 |
|
公開鍵暗号方式 (RSA など) |
公開鍵を広く配布できるため、事前に鍵を渡しておく必要がない。 | 複雑な数学的計算を伴うため、処理速度が低速(共通鍵の数100〜1,000倍遅い)。 |
大量のデータ(Webページのコンテンツや動画など)を高速に暗号化しつつ、安全に相手へ届けるため、現代の通信では両者の長所を組み合わせた 「ハイブリッド暗号方式」 が採用されています。
ハイブリッド暗号における「公開鍵技術」の役割
ハイブリッド暗号では、役割を以下のように分担します。
- 共通鍵の安全な共有: 「公開鍵暗号の技術(公開鍵と秘密鍵のペアを用いる数学的仕組み)」 を使用して、共通鍵暗号方式の「共通鍵」を安全に共有する。
- データ本体の暗号化: 1 で共有した共通鍵で高速な 「共通鍵暗号方式」 を使用して大量のデータを暗号化する。
共通鍵を共有するための「公開鍵技術のアプローチ」には、大きく分けて以下の2パターンが存在します。
【方式1】 RSA方式(共通鍵を暗号化して送信)
【方式2】 DH鍵交換方式(共通鍵をお互い計算して生成)
現在広く使われている ディフィー・ヘルマン(Diffie-Hellman: DH)鍵交換 は、この【方式2】にあたる公開鍵暗号技術です。
ディフィー・ヘルマン (DH) 鍵交換の具体的な手順
DH鍵交換は、盗聴者が通信をすべて傍受していても、当事者(AliceとBob)だけが同じ共通鍵を計算できる革新的な仕組みです。数学的には「離散対数問題」の難しさに基づいています。
ステップ1: 公開パラメータの準備
全員に見えてもよい数値として、以下を決めます。
- $p$:非常に大きな素数
- $g$:生成元(1以上 $p$ 未満の整数)
ステップ2: 秘密鍵と公開鍵の生成
-
Aliceは秘密の数値 $a$(秘密鍵)をランダムに選ぶ。
Aliceの公開パラメータ $A = g^a \pmod{p}$ を計算し、Bobに送信する。 -
Bobは秘密の数値 $b$(秘密鍵)をランダムに選ぶ。
Bobの公開パラメータ $B = g^b \pmod{p}$ を計算し、Aliceに送信する。
ステップ3: 共通鍵の計算
相手から公開パラメータを受け取ったら、自身の秘密鍵を使って以下の計算を行います。
- Aliceの計算: $K = B^a \pmod{p} = (g^b)^a \pmod{p} = g^{ba} \pmod{p}$
- Bobの計算: $K = A^b \pmod{p} = (g^a)^b \pmod{p} = g^{ab} \pmod{p}$
指数法則により $g^{ba} \equiv g^{ab}$ となるため、通信路上に直接鍵を送ることなく、AliceとBobはまったく同じ値 $K$(ハイブリッド暗号で使う共通鍵)を得ることができます。
なぜ盗聴者に破られないのか?
通信路上を流れるのは $p, g, A, B$ のみです。盗聴者が共通鍵 $K$ を計算するには $a$ または $b$ を知る必要がありますが、$A = g^a \pmod{p}$ から $a$ を求める処理(離散対数問題)は現代の計算機では莫大な時間がかかるため安全です。
前方秘匿性(PFS)を実現できる理由
ハイブリッド暗号でDH鍵交換を使う最大のメリットは、前方秘匿性(PFS : Perfect Forward Secrecy) を提供できる点です。
前方秘匿性(PFS)とは?
「将来、サーバーの固定秘密鍵が漏洩・盗難されたとしても、過去に記録された暗号化通信を復号できない」 というセキュリティ特性です。
RSA鍵暗号化(PFSなし)の危険性
従来のRSAを使ったハイブリッド暗号(【方式1】)では、クライアントが生成した共通鍵を「サーバーの固定公開鍵」で暗号化して送っていました。この場合、悪意のある第三者が通信内容を保存しておけば、将来サーバーの秘密鍵を手に入れた際に、過去のすべての通信を一括復号されてしまうリスクがありました。
DH鍵交換(DHE / ECDHE)がPFSを実現する仕組み
- DH鍵交換(【方式2】)では、セッション(接続)ごとに使い捨ての秘密鍵($a, b$)を一時的(Ephemeral)に生成します。
- 通信が終わると、この一時的な鍵はメモリ上から消去されます。
- そのため、仮に将来サーバーの長期秘密鍵が漏洩したとしても、セッション限りの $a, b$ はどこにも残っていないため、過去の通信を復号することは数学的に不可能です。
現在主流の「楕円曲線ディフィー・ヘルマン(ECDH)」
基本的なDH鍵交換(素数 $p$ と余りを使った計算)は「MODP(Modular Exponentiation)DH」と呼ばれます。現在、HTTPS/TLS 1.3 などで標準的に使われているのは、この仕組みを「楕円曲線」に応用した ECDH(Elliptic Curve Diffie-Hellman)鍵交換 です。
【DH鍵交換の進化】
通常のDH(MODP): 巨大な素数 $p$ と 剰余計算($g^a \pmod{p}$)を利用
↓ 数学構造の応用
楕円曲線DH(ECDH): 楕円曲線上の点の足し算(標的演算)を利用
なぜ ECDH が主流になったのか?
- 通常DH: 有限体上の離散対数問題
- ECDH: 楕円曲線上の離散対数問題
楕円曲線上の問題は解読がより困難であるため、通常DHと比べて圧倒的に短い鍵長で同等以上の安全性を確保できます。
| 安全性レベル | 通常DH(MODP)の鍵長 | ECDHの鍵長 | ビット長比較 |
|---|---|---|---|
| 128ビット相当 (現代の標準規格) | 3,072 ビット | 256 ビット | 約 1/12 のサイズ |
| 256ビット相当 (超高セキュリティ) | 15,360 ビット | 512 ビット | 約 1/30 のサイズ |
鍵長が劇的に短くなることで、計算処理の高速化・パケットサイズの削減・スマホ等の消費電力低減が実現されています。
実プロトコルでの採用例
ハイブリッド暗号の共通鍵生成において、DH鍵交換(および ECDH)は業界標準の基盤技術です。
TLS 1.3
- Web(HTTPS)やHTTP/3の暗号化プロトコルです。TLS 1.3 では従来のRSAによる鍵暗号化が完全廃止され、ハンドシェイク時の共通鍵共有にはDH鍵交換(ECDHE)のみが採用されています。
IPsec (IKE)
- VPN通信等で用いられる IPsec の鍵交換プロトコル「IKE」において、暗号化セッションごとの鍵生成にDHグループが指定されます。
SSH (Secure Shell)
- サーバーへのリモート接続時、クライアントとサーバー間でセッション用共通鍵を安全に生成するために使用されます。
おわりに
ディフィー・ヘルマン鍵交換について、できるだけわかりやすく解説したつもりですが、いかがでしょうか。
わかりづらいところなどありましたら、フィードバックを頂ければと思います。