TLSハンドシェイク完全解剖(通信の盗聴はなぜ不可能なのか?) —— カフェの野良Wi-Fiで電波を丸裸にされても、パスワードが絶対に暴かれない数学的物理

2026-11-05 / シリーズ「攻防の物理」第4話 / CyberSecurity, TLS, 暗号技術, ネットワーク, 数学

はじめに:電波が飛び交う空間で、なぜ「ひそひそ話」ができるのか?

街中のカフェで、誰でも接続できる無料Wi-Fi(野良Wi-Fi)にスマートフォンを繋ぎ、クレジットカード番号を入力して買い物をしたとします。

物理的に考えれば、これは狂気の沙汰です。 Wi-Fiは電波——すなわち空気中を伝わる電磁波です。あなたのスマホが送信した電波は、カフェのアクセスポイントだけでなく、隣の席に座っている見知らぬ人物のPCのアンテナにも全く同じ強度で降り注いでいます。 特殊な機材など不要です。無料のパケット解析ソフト(Wiresharkなど)を起動し、電波を無差別に拾う「プロミスキャス・モード」にするだけで、空間を飛んでいるパケットは誰の画面にもそのまま表示されます。

それにもかかわらず、隣の人物があなたのクレジットカード番号やパスワードを盗み見ることは現代の技術では不可能です。 画面に映るのは、人間には決して解読できないランダムなゴミデータ(暗号文)の羅列だけです。

「通信が暗号化されているからだ」と誰もが知っています。 しかし、よく考えてみてください。暗号化して通信するためには、解読するための「合鍵」をサーバーとあなたの間で共有しなければなりません。 もしその合鍵を通信経由でサーバーに送れば、その合鍵自体が電波に乗って隣の人物に傍受されてしまうはずです。

「世界中に筒抜けの空間で、一度も鍵そのものを送ることなく、どうやって二人だけの秘密の合鍵を共有するのか?」

この矛盾を打ち破る暗号数学の奇跡と、現代のWeb(HTTPS)を支える TLS(Transport Layer Security)ハンドシェイク の物理構造を解き明かします。


1. 鍵配送問題のブレイクスルー —— 「色を混ぜると元に戻せない」物理

暗号には大きく分けて2種類あります。

  • 共通鍵暗号(AESなど):暗号化と復号に「同じ鍵」を使う。計算が極めて高速だが、**鍵を安全に相手へ渡す手段(鍵配送問題)**が必要。
  • 公開鍵暗号(RSA、楕円曲線など):暗号化用の「公開鍵」と復号用の「秘密鍵」が分かれている。計算が非常に重いが、鍵を誰にでも配ることができる。

現代のTLSは、両者のいいとこ取りをしたハイブリッド暗号方式を採用しています。 「通信データそのもの」は超高速な共通鍵暗号で暗号化し、そのための「共通鍵(セッションキー)」を作るフェーズで公開鍵暗号の数学を利用します。

そして、その共通鍵生成の心臓部を担うのが、ディフィー・ヘルマン(Diffie-Hellman)鍵交換です。

アナロジー:絵の具の不可逆混合

ディフィー・ヘルマンの基本原理は、「絵の具を混ぜるのは簡単だが、混ざった色から元の絵の具を分離するのは不可能」という物理法則に例えられます。

共有のベース色「黄色」を決める(盗聴者にも筒抜け) あなた:秘密色「赤」を選ぶ 黄色 + 赤 =「オレンジ」を合成 サーバー:秘密色「青」を選ぶ 黄色 + 青 =「緑」を合成 「オレンジ」と「緑」を互いに送信 → 盗聴者は傍受できるが、元の「赤」「青」は分離できない! あなた 受け取った「緑」+ 自分の「赤」= ★「茶色」 サーバー 受け取った「オレンジ」+ 自分の「青」= ★「茶色」 二人とも同じ「茶色(共通鍵)」を入手!盗聴者には「茶色」を再現できない

通信路上を流れたのは、「誰でも知っている黄色」と、「混ぜ合わされたオレンジと緑」だけです。 肝心の秘密色(赤と青)は一度もネットワーク上を通過していません。 したがって、全ての通信を録音・傍受していた盗聴者であっても、二人が手に入れた最終的な「茶色(共有秘密鍵)」を算出することは物理的にできないのです。


2. 現代の数学的実体 —— 楕円曲線ディフィー・ヘルマン(ECDH)

現代のWeb標準(TLS 1.3)では、素数を使った古典的なDH法の代わりに、より高速で鍵長が短く強固な ECDH(Elliptic Curve Diffie-Hellman:楕円曲線ディフィー・ヘルマン) が使われています。

楕円曲線の物理数学:$y^2 = x^3 + ax + b$

楕円曲線暗号の世界では、次のような数式で描かれる美しい対称曲線上の「点の足し算(加算)」を定義します。

基準点 G 秘密の整数 d を掛ける (d × G) 公開点 Q Q = d × G 世界に公開される ❌ d の逆算 離散対数問題 宇宙の寿命でも終わらない 極めて簡単・高速 逆算しようとすると…
  • ベースポイント($G$):世界共通で決められた楕円曲線上の「基準となる点(座標)」。
  • 秘密鍵($d$):各自がサイコロを振ってランダムに選ぶ「ただの巨大な整数(256bitなど)」。
  • 公開鍵($Q$):点 $G$ を自分自身の秘密の数 $d$ 回足し合わせた「曲線上の座標($Q = d \times G$)」。

この演算の決定的な特徴は、**「$d$ から $Q$ を計算するのは一瞬だが、$Q$ と $G$ を知っている状態から元の $d$ を割り出すには、現代のスーパーコンピュータを宇宙の寿命ほど動かしても計算が終わらない(楕円曲線上の離散対数問題)」**という非対称性にあります。

ECDH鍵交換の数学的成立

  1. あなた(クライアント)は秘密鍵 $d_C$ を選び、公開鍵 $Q_C = d_C \times G$ をサーバーへ送る。
  2. サーバーは秘密鍵 $d_S$ を選び、公開鍵 $Q_S = d_S \times G$ をあなたへ送る。
  3. あなたは、受け取ったサーバーの公開鍵に自分の秘密鍵を掛ける: $$S = d_C \times Q_S = d_C \times (d_S \times G)$$
  4. サーバーは、受け取ったあなたの公開鍵に自分の秘密鍵を掛ける: $$S = d_S \times Q_C = d_S \times (d_C \times G)$$

掛け算の順序を入れ替えても結果は等しいため、二人は完全に同一の座標 $S$(共有秘密)に到達します。 盗聴者が得られるのは公開鍵 $Q_C$ と $Q_S$ だけです。秘密鍵 $d_C$ も $d_S$ も持たない第三者が点 $S$ を求めることは、数学的に不可能なのです。

この共有座標 $S$ のX座標の値をハッシュ関数(HKDF)に通して生成されたビット列こそが、このセッションのためだけに作られた**共通鍵(AES-GCMなどの対称鍵)**となります。

触って試す:鍵交換の体験(小さな数でのDH計算)

🔑 鍵交換の体験(小さな数でディフィー・ヘルマン計算)

公開パラメータは、素数 p = 23 と底 g = 5(盗聴者にも筒抜けの情報です)。二人の「秘密の数」をボタンで変えると、公開値の交換と共有秘密の一致が数値で確認できます。実際のECDHは楕円曲線上の点で計算しますが、「秘密は送らず、公開値だけを交換して同じ答えに到達する」という骨格はまったく同じです。

あなたの秘密の数 a:6(相手には絶対に見せない)
サーバーの秘密の数 b:15(あなたには絶対に見せない)
---

3. なぜ古典RSAは駆逐されたのか? —— 前方秘匿性(Forward Secrecy)の物理

古いTLS(TLS 1.2以前)では、長年 RSA鍵交換 が使われていました。 クライアントが勝手に生成した共通鍵を「サーバーのRSA公開鍵」で暗号化してサーバーへ送り、サーバーが自前の「秘密鍵」でそれを開くという、極めて直感的な方式です。

しかし、この方式にはセキュリティ工学上、致命的な欠陥がありました。**「前方秘匿性(Forward Secrecy)の欠如」**です。

国家や攻撃者が、日々の暗号化トラフィックをすべてハードディスクに記録し続ける 5年後、サーバーからマスター秘密鍵が盗み出される(または裁判所の令状で押収) 過去に遡り、記録していた数年分の全ユーザーの通信を一瞬で一括全復号!

サーバーの秘密鍵が1枚漏洩しただけで、**「過去に遡って、これまでに記録された世界中の通信がすべて白日の下に晒される」**という破滅的なリスクを抱えていたのです。

ECDHEの「E」がもたらした革命

これを解決したのが、ECDHE(末尾の「E」は Ephemeral:一時的・使い捨て の意)です。

ECDHEでは、サーバーもクライアントも、通信するたび(TCP接続ごと)にサイコロを振ってその場限りの使い捨て秘密鍵 $d$ を生成します。 通信が終わり、ブラウザを閉じた瞬間に、メモリ上から秘密鍵 $d$ は完全に消去されます。

たとえ10年後にサーバーのハードディスクが物理的に押収され、サーバーの正規の証明書鍵が暴かれたとしても、「その瞬間の使い捨て秘密鍵 $d$」は地球上のどこにも残っていません。 過去の通信を解読することは、物理的にも数学的にも未来永劫不可能なのです。

この圧倒的な安全性の差から、2018年に策定された最新規格 **TLS 1.3 では、RSA鍵交換は完全に規格から追放(廃止)**され、前方秘匿性を持つDHE/ECDHEのみが義務付けられました。


4. 誰と話しているのか? —— 中間者攻撃(MITM)と電子証明書の物理

ECDHによって、盗聴者が鍵を計算できないことは証明されました。 しかし、ここにはもう一つ恐ろしい死角が存在します。**中間者攻撃(MITM: Man-In-The-Middle)**です。

もしカフェの悪意あるWi-Fiルーターが、あなたと銀行サーバーの間に割り込み、「あなたに対しては自分が銀行のフリをし、銀行に対しては自分があなたのフリをして」、別々のECDH鍵交換を二重に成立させたらどうなるでしょうか?

[あなた] ←(偽の暗号鍵A)→ [悪意のルーター(MITM)] ←(偽の暗号鍵B)→ [銀行サーバー]

暗号化自体は完璧に機能しているため、あなたの画面には何のエラーも出ません。しかし、すべてのデータは中間のルーターで一度平文に復号され、盗み見られた後に再暗号化されて銀行へ送られます。

これを防ぐための技術が、公開鍵暗号基盤(PKI)と電子証明書です。

1. ルート認証局(Root CA)— OS・ブラウザ出荷時に最初から組み込まれている デジタル署名 2. 中間認証局(Intermediate CA)— ルートCAの秘密鍵で署名されている デジタル署名 3. サーバー証明書(bank.com)— 中間CAの秘密鍵で署名されている 数学的に検証 4. クライアント(ブラウザ)— 手元の公開鍵で署名チェーンを逆順に検証する
  1. 銀行サーバーは、ECDHの公開鍵と一緒に**「信頼された第三者機関(認証局:CA)の電子署名が入った証明書」**をブラウザへ提示します。
  2. あなたのWindows、Mac、iPhoneのOS内部には、最初から世界的に信頼された認証局の「自己署名ルート証明書」が物理的に組み込まれています。
  3. ブラウザは、内蔵された認証局の公開鍵を使って、送られてきた証明書の電子署名を数学的に検証します。

悪意あるルーターは、銀行のドメイン(bank.com)の正当な証明書に対する偽造署名を作ることができません。 検証に失敗した瞬間、ブラウザは真っ赤な警告画面(「この接続ではプライバシーが保護されません」)を表示し、通信を強制遮断します。


5. TLS 1.3の極限進化 —— ラウンドトリップの物理削減(1-RTT)

安全性が確立された次に人類が直面した壁は、**「通信の遅延(レイテンシ)」**という物理的制約でした。

光が光ファイバーの中を進む速度は秒速約20万kmです。東京とニューヨークを往復するだけでも、物理的に約150ミリ秒の時間が絶対にかかります。

光ファイバーケーブルの断面。被覆を剥がすと、色分けされた細いガラス繊維の束が姿を現す
ハンドシェイクのメッセージが物理的に行き交う光ファイバーケーブル。光はこのガラス繊維の中を秒速約20万kmで進むため、往復の回数そのものが遅延の正体になる。写真:Asurnipal(CC BY-SA 4.0/Wikimedia Commons)
古い TLS 1.2 では、暗号化通信を開始するまでに何回もメッセージを往復させていたため、画面が表示されるまでに体感できる遅れが生じていました。

最新の TLS 1.3 は、このハンドシェイクの手順を極限まで削ぎ落とし、**わずか「1往復(1-RTT)」**で暗号化を確立します。

TLS 1.3 ハンドシェイクの全貌

1. 投機的推測:「どうせサーバーは X25519 を使うだろう」 自分の使い捨て秘密鍵から、公開鍵 Q_Client を即座に生成! クライアント → サーバー:ClientHello + 鍵共有パラメータ(Q_Client) 最初の1通目に、いきなり自分の公開鍵を同封する 2. 使い捨て公開鍵 Q_Server を生成 Q_Client を使って、その場でを計算!以降のメッセージを直ちに暗号化開始 サーバー → クライアント:ServerHello + Q_Server {暗号化:サーバー証明書 + デジタル署名} {暗号化:Finished(ハンドシェイク検証値)} 3. Q_Server を受け取り、手元でを計算 証明書をOS内蔵CAで検証し、署名をチェック! クライアント → サーバー:{暗号化:Finished} + {暗号化:HTTP GET /} サーバー → クライアント:{暗号化:HTTPレスポンス 200 OK} ― わずか1往復で完了!

TLS 1.3が成し遂げた最大のイノベーションは、**「ClientHelloの第1投で、自分のECDH公開鍵をいきなり投げつける」**という大胆な構造転換です。

サーバーは最初のリクエストを受け取ったその瞬間に合鍵を計算できるため、2通目のレスポンス(ServerHello以降)の段階で、すでに証明書や後続データを暗号化して返送します。

暗号化が完了するまでの往復回数は、物理限界である**「1往復(1-RTT)」に圧縮されました。 さらに、過去に一度接続したことのあるサーバーに対しては、前回の秘密情報を再利用して「初手のリクエストから暗号化データを送る(0-RTT:Zero Round-Trip Time)」**ことすら可能になっています。


6. まとめ:数学が築き上げた最強の防壁

電波という「誰にでも届くパケット」が飛び交う空間で、私たちは安全に銀行振込をし、機密情報をやり取りしています。

それは、警察が通信を見張っているからでも、通信会社が善良だからでもありません。 **「どんなに計算能力の高いコンピュータを集めても、楕円曲線の離散対数を逆算することは物理的に不可能である」**という冷徹な数学の絶対性が、あなたのプライバシーを守り抜いているのです。


📝 3行で頭に入る『試験・実務の要点まとめ』

  1. 暗号の奇跡:ECDH鍵交換により、盗聴可能な通信路上に秘密情報を一切流すことなく、通信当事者間だけで同一の共有暗号鍵を数学的に生成できる。
  2. 前方秘匿性(PFS):TLS 1.3では脆弱なRSA鍵交換を全廃し、接続ごとに破棄される使い捨て鍵(ECDHE)を強制することで、将来の秘密鍵漏洩による過去ログ解読を物理的に防ぐ。
  3. 1-RTTの極限性能:ClientHelloの初手で楕円曲線パラメータを推測送信することで、わずか1往復で鍵交換・証明書検証・暗号化トンネル確立を完了させる。

確認クイズ

📝 確認クイズ(3問)