TLS セキュリティの仕組みと面接頻出ポイント
問題¶
How does TLS ensure secure communication between client and server?
解答¶
TLS は「鍵交換 → 認証 → 暗号化通信」の3ステップで安全な通信を確立する。
解説¶
TLS ハンドシェイクの流れ(TLS 1.3)¶
Client Server
| |
|-- ClientHello ─────────────> | (対応暗号スイート, ランダム値)
| |
|<── ServerHello ─────────── | (選択した暗号スイート)
|<── Certificate ──────────── | (サーバー証明書)
|<── CertificateVerify ──── | (証明書の署名)
|<── Finished ───────────── |
| |
|── Finished ────────────── >|
| |
|<══ 暗号化された通信開始 ══>|
鍵交換の仕組み¶
# ECDHE (Elliptic Curve Diffie-Hellman Ephemeral)
1. クライアント・サーバーそれぞれが一時的な鍵ペアを生成
Client: a(秘密鍵), A = g^a mod p(公開鍵)
Server: b(秘密鍵), B = g^b mod p(公開鍵)
2. 公開鍵を交換する(平文でOK)
3. 共有秘密鍵を算出
Client: B^a mod p = g^(ab) mod p
Server: A^b mod p = g^(ab) mod p
→ 同じ値になる(Pre-Master Secret)
4. Pre-Master Secret からセッション鍵を導出
Master Secret → Application Data Keys
サーバー認証の仕組み¶
証明書チェーン検証:
ブラウザ (Root CA 信頼)
└── Root CA が署名した Intermediate CA
└── Intermediate CA が署名した Server Certificate
└── サーバーが保持する秘密鍵
検証手順:
1. 証明書の有効期限を確認
2. ドメイン名が証明書の CN/SANs と一致するか確認
3. 証明書チェーンを Root CA まで辿って署名を検証
4. CRL/OCSP で失効していないか確認
TLS 1.2 vs TLS 1.3 の比較¶
| 項目 | TLS 1.2 | TLS 1.3 |
|---|---|---|
| ハンドシェイク往復 | 2-RTT | 1-RTT |
| 0-RTT 再開 | 不可 | 可能(PSK使用) |
| 鍵交換 | RSA も使用可能(前方秘匿性なし) | ECDHE のみ(前方秘匿性あり) |
| 古い暗号スイート | RC4, 3DES 等が使用可能 | 廃止(AES-GCM, ChaCha20 のみ) |
| 証明書暗号化 | 平文 | 暗号化(中間者が見れない) |
前方秘匿性(Forward Secrecy)とは¶
# 前方秘匿性なし(RSA 鍵交換)の危険性:
過去の通信を録音 → 将来秘密鍵が漏れる → すべての過去通信が復号可能
# 前方秘匿性あり(ECDHE):
各セッションで一時鍵を使用 → セッションキーは捨てられる → 秘密鍵が漏れても
過去の通信は復号不可
面接でのポイント¶
- TLS と SSL の違いを言えること(SSL は廃止、TLS 1.2/1.3 が現役)
- ハンドシェイクの流れを大まかに説明できること(鍵交換 → 認証 → セッション鍵生成)
- HTTPS が TLS + HTTP であることを知っていること
- 前方秘匿性(Forward Secrecy)の概念を説明できると加点
- TLS 1.3 の改善点(1-RTT、古い暗号廃止)を説明できると高評価
- 証明書チェーンの検証プロセスを説明できるとさらに加点