TLS/SSLとHTTPSハンドシェイク完全攻略|暗号スイート・PFS・TLS 1.3徹底解説
Webセキュリティの最前線であり、支援士・応用情報・基本情報の午前・午後を問わず出題されるのが「TLS(Transport Layer Security)/ HTTPS通信」です。
ハンドシェイクの往復手順、共通鍵と公開鍵の使い分け、暗号スイートの表記の意味、「PFS(前方秘匿性:Perfect Forward Secrecy)」がなぜ重要なのか、そして最新のTLS 1.3で何が廃止・改善されたのかを体系的に理解しましょう。
1. TLSハンドシェイクの基本手順(TLS 1.2 vs TLS 1.3)
TLSは、トランスポート層(TCP)の上で「通信相手の認証」「通信内容の暗号化(機密性)」「改ざん検知(完全性)」を提供するプロトコルです。データ通信を高速な「共通鍵暗号」で行うため、事前のハンドシェイクで安全に鍵を共有します。
- ClientHello: クライアントが対応可能なTLSバージョン、暗号スイート一覧、乱数(Client Random)、SNI(Server Name Indication)等をサーバに送信。
- ServerHello: サーバが使用するTLSバージョンと暗号スイートを選択し、サーバ乱数とともに返信。
- サーバ証明書・鍵交換パラメータの送信: サーバがディジタル証明書と鍵交換パラメータ(ECDHE公開鍵など)をクライアントに送付。
- 暗号化パラメータ確定(Finished): 双方が算出したプリマスターシークレットから共通のセッション鍵(暗号化鍵・MAC鍵)を生成し、暗号化通信へ移行。
比較項目 | TLS 1.2 | TLS 1.3(現在の標準) |
|---|---|---|
ハンドシェイク往復数 | 2-RTT(完了まで2往復必要) | 1-RTT(1往復で完了)/ 0-RTT(再開時即座に送信) |
鍵交換方式 | RSA鍵交換、DH、ECDHEなど混在 | ECDHE / DHE のみ(RSA鍵交換や静的DHは完全廃止) |
前方秘匿性 (PFS) | 設定次第(RSA鍵交換ではPFSなし) | 【必須要件】常にPFSが保証される |
暗号化アルゴリズム | CBCモードやRC4、3DESなど脆弱な暗号が含まれていた | AEAD(AES-GCM、ChaCha20-Poly1305等)のみに厳選 |
2. PFS(前方秘匿性:Perfect Forward Secrecy)とは?
IPA試験で非常に高い頻度で記述・選択肢に登場するのが「PFS(前方秘匿性)」の概念です。
- 従来のRSA鍵交換の弱点: サーバの秘密鍵で暗号化されたプリマスターシークレットを復号する方式では、攻撃者が過去の暗号化通信ログをすべて保存していた場合、将来サーバの秘密鍵が1回でも盗まれると、「過去に遡ってすべての通信が解読されてしまう」という致命的な弱点がありました。
- ECDHEによる解決: セッション毎に一時的な鍵ペア(Ephemeral Key)を生成して鍵交換を行うため、将来サーバの長期秘密鍵が漏洩しても、過去の通信を解読することは数学的に不可能となります。この性質をPFSと呼びます。
3. HSTS(HTTP Strict Transport Security)の役割
HSTSとは、Webサーバがブラウザに対して「以後のアクセスはすべてHTTPS(暗号化通信)のみで行い、HTTPでの接続を試みないこと」を指示するセキュリティヘッダ(Strict-Transport-Security)です。初回HTTPアクセス時のSSL Stripping攻撃(暗号化解除攻撃)や偽の証明書警告の無視を防止します。
4. 午後記述式試験(SC・AP)で使える得点キーワード・記述テンプレート
【定番記述フレーズ①(PFSの定義と効果)】 「サーバの秘密鍵が漏洩しても、過去に記録された暗号化通信が解読されない性質。」(38字)
【定番記述フレーズ②(TLS 1.3の鍵交換)】 「静的RSA鍵交換を廃止し、PFSを提供するECDHE鍵交換のみを採用する。」(37字)
【定番記述フレーズ③(HSTSの目的)】 「ブラウザにHTTPS通信を強制し、通信の平文へのダウングレード攻撃を防ぐ。」(37字)
【定番記述フレーズ④(SNIの役割)】 「TLS接続開始時に接続先ホスト名を通知し、単一IPで複数証明書を運用可能にする。」(40字)