TLSのしくみ — https の錠前の裏側

アドレスバーの🔒。あれが点いているとき、ブラウザとサーバは数百ミリ秒のあいだに握手(ハンドシェイク)を交わしています。ここまで学んだ鍵交換・証明書と署名・共通鍵暗号の3つが合流し、盗聴もなりすましも改ざんもできない通信路が立ち上がる — その瞬間をアニメーションで追いかけます。

1. TLSが守る3つのこと

インターネットの通信は、途中のルータや Wi-Fi を素通りします。何も守らなければ、パスワードもカード番号も丸見えです。TLS(Transport Layer Security、旧称 SSL)は、この裸の通信路に3つの保証を与えます — ① 認証(本当に本物のサーバか)、② 機密性(盗聴されない)、③ 完全性(改ざんされない)。

下のボタンで TLS を切り替えて、盗聴者に何が見えるかを比べてください。

TLS ON / OFF — 盗聴者に何が見えるか
ブラウザとサーバのあいだをデータが流れ、途中に盗聴者がいます。OFF だと中身(パスワード)がそのまま読めてしまいます。ON にすると同じデータが暗号化され、盗聴者にはランダムな文字列にしか見えません。通信路には錠前がかかります。
POINT — 「s」は Secure の s http と https の違いは、通信の上に TLS の層が1枚入るかどうかだけ。TLS は特定のサイト専用の技術ではなく、HTTP・メール・VoIP などあらゆる通信に下から敷ける汎用の暗号層です。だからブラウザの🔒は「このページの通信路が TLS で守られている」ことを表します。

2. ハンドシェイク — 錠前ができるまでの数往復

暗号化を始めるには、まず共通の鍵と相手が本物だという確信が要ります。それを数回のやりとりで用意するのがハンドシェイクです。ClientHello から始まり、サーバの証明書と鍵交換をはさんで、最後に両者が「準備OK(Finished)」を確認したら、暗号化されたデータ通信が始まります。

下のシーケンス図を1ステップずつ進めて、メッセージが行き来し、最後に錠前が閉じるまでを見てください。

TLSハンドシェイク — ブラウザとサーバの握手
左=ブラウザ、右=サーバ。①あいさつと乱数交換 → ②サーバが証明書を提示(ブラウザが検証)→ ③鍵交換で共有秘密を各自計算 → ④Finished で相互確認 → ⑤錠前が閉じ、暗号化通信が開始。以降のデータはすべて共通鍵で暗号化されます。
ClientHello → ServerHello + 証明書 → 鍵交換 → Finished → 🔒 暗号化データ 最新の TLS 1.3 では往復が減り、多くの場合わずか1往復(1-RTT)で鍵ができる。図は流れを分かりやすく分解したもの

3. 3つの部品が合流する

ハンドシェイクの中身を分解すると、これまでのレッスンがそのまま部品になっています。鍵交換が盗聴されずに共有秘密をつくり(機密性の材料)、証明書と署名が「その相手は本物か」を保証し(認証)、できあがった共有鍵を使う共通鍵暗号が大量のデータを高速に守ります(機密性・完全性)。3つが噛み合って初めて安全な通信路になります。

下のデモで証明書の検証を「失敗」に切り替えて、認証が欠けると何が起きるかを確かめてください。

3部品の合流 — 鍵交換 × 認証 × 共通鍵暗号
上の3つの部品が中央のセキュアチャネルに合流します。OK なら共有鍵ができ、データが暗号化されて流れます。失敗に切り替えると、鍵交換だけでは「相手が誰か」を確かめられず、中間者が割り込む隙が生まれる — だから認証(証明書)が不可欠だとわかります。
注意 — 鍵交換だけでは「なりすまし」を防げない 鍵交換は「盗聴」は防げても、相手が本物かは保証しません。証明書による認証が欠けると、通信相手にこっそり割り込む中間者(MITM)の隙が生まれます。ここで扱うのは防御を理解するための原理であって、攻撃手順ではありません。自分のシステム以外への通信の盗聴・改ざんは犯罪です(不正アクセス禁止法・電気通信事業法などで処罰されます)。

4. なぜハイブリッド — 公開鍵は遅く、共通鍵は速い

ここで素朴な疑問。「最初から全部を公開鍵暗号で送ればいいのでは?」答えは速度です。公開鍵暗号は鍵配送の問題を解ける代わりにとても重く、大量データには向きません。そこで TLS は、重い公開鍵暗号は最初の鍵づくり(ハンドシェイク)だけに使い、以降の本文は軽い共通鍵暗号で流す。これがハイブリッド暗号です。

ハイブリッド暗号 — データ量が増えるほど効いてくる
上のバー=もし全部を公開鍵暗号で送ったら。下のバー=TLS方式(ハンドシェイクだけ公開鍵、本文は共通鍵)。データ量を増やすと、上は際限なく伸びるのに、下は最初のわずかな握手コスト+ごく軽い本文でほぼ横ばい。だから実用になります。
POINT — 役割分担が効いている 公開鍵暗号:鍵配送問題を解く(初対面でも安全に鍵を共有できる)。ただし重い。
共通鍵暗号:とても速い。ただし事前に鍵の共有が必要。
TLS は前者で鍵をつくり、後者で本文を運ぶ。互いの弱点を補い合う、見事な組み合わせです。

5. まとめ — 3つの技術が https に合流する

一歩先へ — TLS 1.3 と前方秘匿性(PFS) 現行の TLS 1.3(2018年〜)は、危険な古い方式を大胆に切り捨て、ハンドシェイクを1往復まで短縮し、再接続では0-RTTすら可能にした。鍵交換には毎回使い捨ての鍵を使う前方秘匿性を標準化 — こうすると、たとえ将来サーバの秘密鍵が漏れても、過去に録画された通信は復号できない。さらに証明書検証・失効確認(前レッスンの PKI)も毎回走る。次は「攻撃と防御」で、この仕組みを狙う手口と、それを守る側の視点を学びます。