【てぃーえるえすはんどしぇいく】

TLSハンドシェイク とは?

最終更新:
💡 暗号通信の「事前準備」

TLSによる通信を始めるために、通信相手の認証や暗号方式の合意、通信を保護する鍵の確立を行う手順。HTTPSなどで使われ、手順はTLSのバージョンや接続条件で異なる。

📌 このページのポイント
TLS 1.3の初回接続の例 クライアント サーバー ClientHello + 鍵共有情報 ServerHello + 鍵共有情報 証明書・署名・Finished (このメッセージ群は暗号化) 証明書・署名を検証 相手の認証を確認 クライアントのFinished 鍵を使ってデータを保護 0-RTTは別の再接続方式。再送攻撃への対策が必要
証明書と鍵共有を使い、追加往復やクライアント認証を省略した例。横矢印はメッセージ、時間は下向き。鍵そのものを送る図ではない。
ひよこ ひよこ
TLSハンドシェイクでは何をするの?
ペンギン先生 ペンギン先生
通信に使う方式を合意し、相手を認証して、通信を保護する鍵を確立するよ。HTTPSは利用例の一つ。図はTLS 1.3でサーバー証明書と鍵共有を使う初回接続の例で、すべてのTLS接続がこの順序という意味ではないんだ
ひよこ ひよこ
TLS 1.3の図はどう読むの?
ペンギン先生 ペンギン先生
ClientHelloで対応する方式や鍵共有用の情報を送り、ServerHelloで選択結果とサーバー側の鍵共有情報が返るよ。その後、暗号化された証明書・署名・Finishedを受けて検証し、クライアントもFinishedを送る。ServerHelloそのものに証明書が入るわけではないんだ
ひよこ ひよこ
共通鍵をそのまま送って交換するの?
ペンギン先生 ペンギン先生
この例では双方が鍵共有の情報から秘密を共有し、通信に使う鍵を導くよ。通信鍵そのものを相手へ送るわけではない。データを保護する方式にはAES-GCMやChaCha20-Poly1305などがあり、AESだけに限られないんだ
ひよこ ひよこ
証明書があれば相手を信用できる?
ペンギン先生 ペンギン先生
証明書の認証経路や、接続したい名前との一致などを確認するよ。さらにCertificateVerifyの署名で対応する秘密鍵を持つことを確かめる。通信相手の認証と、サイトに書かれた内容が正しいかの判断は別なんだ
ひよこ ひよこ
1-RTTや0-RTTなら準備は不要?
ペンギン先生 ペンギン先生
1-RTTは基本的な初回接続に必要な往復の目安で、追加のやり取りが必要になる場合もあるよ。0-RTTは再接続でハンドシェイクの完了前に早期データを送る機能。準備自体は行われ、同じデータを再送される攻撃への対策も必要なんだ
ひよこ ひよこ
TLS 1.3ならアクセス先も隠れるの?
ペンギン先生 ペンギン先生
証明書などは暗号化されるけど、TLS 1.3だけでアクセス先がすべて隠れるわけではないよ。通常のClientHelloのサーバー名や接続先IPは別に考える必要がある。RFC 9325はTLS 1.3を優先しつつ適切なTLS 1.2も扱っていて、古い方式と、適切に構成した1.2は分けて考えるんだ
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「TLSハンドシェイク」って出てきたら「暗号通信の方式・相手・鍵を確認する事前準備」と思えばだいたいOK!
📖 おまけ:英語の意味
「TLS Handshake」 = TLSの握手
💬 Handshakeは握手のこと。通信する双方がやり取りして準備を整える手順を表すよ。TLSはSSLの後継として使われる通信保護のプロトコルなんだ

参考資料

← 用語集にもどる