TLSハンドシェイクとは?~セキュアな通信の鍵を握る仕組みを解説~
TLS(Transport Layer Security)は、インターネット上でデータを暗号化して安全に通信するためのプロトコルです。TLSハンドシェイクは、その通信を開始する際に行われる鍵交換などの処理で、通信の信頼性と安全性を確保する要となる重要なプロセスです。
🔐 TLSハンドシェイクの目的
TLSハンドシェイクは、クライアント(例:ブラウザ)とサーバが安全に通信するために、次のような処理を行います:
- 暗号化方式(暗号スイート)の合意
- サーバの証明書(公開鍵)の確認
- 共通鍵の生成(鍵交換)
- セッションの整合性チェック
📶 TLS1.2までのハンドシェイクの流れ
- ClientHello:クライアントがTLSバージョン、対応暗号スイート、乱数などを送信
- ServerHello:サーバがTLSバージョン、暗号スイートの選択、サーバ証明書などを返す
- ServerHelloDone:サーバ側の初期送信完了
- ClientKeyExchange:クライアントがプリマスタシークレット(共通鍵の材料)を送信
- ChangeCipherSpec:以降の通信が暗号化されることを通知
- Finished:これまでのハンドシェイクが改ざんされていないか確認するデータを送信
※共通鍵は、公開鍵暗号方式(例:RSA、DH)により共有されます。
⚙️ TLS1.3での主な変更点
TLS1.3では、セキュリティ強化と高速化のため、以下のような改善が行われました:
- 暗号スイートの簡素化(RSA暗号や古い鍵交換方式の廃止)
- ハンドシェイク回数の削減(1-RTT化)
- 再接続時の0-RTT(即時通信)対応
これにより、TLS1.3では「ClientHello → ServerHello」の段階で、ほぼ全ての鍵交換と証明が完了します。
🛡️ 試験対策ポイント(支援士試験)
- TLS1.2と1.3の違いを整理しておく
- 公開鍵暗号による鍵交換と共通鍵暗号の使い分けを理解する
- 証明書の役割(なりすまし防止や改ざん検知)を説明できるようにする
- TLSを利用する代表的プロトコル(HTTPS、IMAPSなど)を覚える
📝 まとめ
TLSハンドシェイクは、安全な通信の出発点です。攻撃者による盗聴や改ざんを防ぐために、どのように共通鍵を安全に共有するかがカギとなります。試験では技術的理解だけでなく、なぜこの仕組みが必要かという視点も重要になります。
TLS1.3の仕様変更も頻出ですので、従来との違いを押さえておきましょう。