✨ 「静的DH」の問題:長期鍵が漏れると過去の通信も解読される
元々のDH法では、サーバーが長期間同じ DH パラメータ(A=g^a mod p の「a」)を使い続けることがありました。これを静的DH(Static DH)といいます。
😱 静的DHの危険性(NSAの懸念)
スノーデン文書の分析から、NSAが盗聴した暗号通信を長期保存し、将来長期鍵を入手できれば過去の全通信を解読する「Harvest Now, Decrypt Later」戦略を持っていることが示唆されました。静的DHはこの攻撃に脆弱です。
🔸 前方秘匿性(PFS):今日の鍵漏洩が過去を守る
前方秘匿性(Perfect Forward Secrecy = PFS)とは、「長期の秘密鍵が将来漏洩しても、過去の通信セッションは解読できない」という性質です。
実現方法:一時的DH鍵(Ephemeral DH)の使用
- 接続ごとに使い捨ての DH 秘密鍵(a)を新たに生成
- セッション終了後に一時鍵を破棄
- 長期証明書の秘密鍵が漏れても、破棄済みの一時鍵は手に入らない→過去のセッションは解読不能
| 方式 | 前方秘匿性 | TLS 1.2 | TLS 1.3 |
|---|---|---|---|
| 静的RSA鍵交換 | ❌ なし | 使用可能 | 廃止 |
| DHE(一時的有限体DH) | ✅ あり | 使用可能 | 可能(非主流) |
| ECDHE(一時的楕円曲線DH) | ✅ あり | 使用可能 | ✅ 主推奨方式 |
🔸 TLS 1.3のKey Schedule:ECDHEから複数の鍵を導出
TLS 1.3ではECDHEで生成された共有秘密から、以下の複数のセッション鍵をHKDFで導出します:
ECDHE共有秘密
→ HKDF-Extract → ハンドシェイク鍵(認証に使用)
→ HKDF-Expand → アプリケーション通信鍵(実データの暗号化に使用)
→ HKDF-Expand → 再開鍵(セッション再接続の効率化に使用)
このように一つの共有秘密から目的別の複数の鍵を安全に導出することで、鍵の用途分離が実現しています。
🔸 Signalプロトコル:二重ラチェット(Double Ratchet)
WhatsApp・SignalのE2EEに使われているSignalプロトコルはDH法をさらに発展させた二重ラチェットアルゴリズムを使います(LINEはECDHベースの独自プロトコル「Letter Sealing」を採用):
- DHラチェット:メッセージのやり取りごとに新しいECDHE鍵を生成・破棄
- 対称鍵ラチェット(KDF Chain):失われたメッセージの前後のメッセージを解読できない
- 結果:過去のメッセージも将来のメッセージも漏洩しない(「破損の孤立化」)
📌 まとめ
- 静的DH:長期鍵漏洩で過去の全通信が解読されるリスク
- 前方秘匿性(PFS):セッションごとに使い捨て鍵で「過去の通信を守る」
- ECDHE:楕円曲線の一時的DHでTLS 1.3の唯一の鍵交換方式
- TLS 1.3ではHKDFで用途別の複数鍵を安全に導出(Key Schedule)
- 双方向ラチェット(Signalプロトコル)がECDHEをさらに発展させたE2EEの最前線
