見えるセキュリティ
TLSセッション再開
TLS SESSION RESUMPTION
この概念とは?
TLSセッション再開は、前回の接続で得た情報を使って、新しい接続の準備をする仕組みです。以前の情報を活用することで、フルハンドシェイクに比べて接続準備にかかる処理を減らせます。
TLS 1.3とTLS 1.2は、TLSのバージョンです。前回の情報を利用する目的は共通ですが、保存する情報や、新しい接続の鍵を準備する手順には違いがあります。タブを切り替えて、それぞれの流れを確認できます。
- THEME
- crypto
- KIND
- protocol
- REVIEW
- self-reviewed ·
前回の再開情報を使って、新しい接続の鍵を準備する流れ
STEP 1は前回の接続での準備、STEP 2からが今回の新しい接続です。ここでは、Serverの応答を確認してからデータを送る1-RTTの再開を扱います。応答を待たずに早期データを送る0-RTTは、別の教材で扱います。
前回の接続
NewSessionTicketServerからClientへ
前回の接続の鍵で保護された再開案内ClientはTicketを保存し、対応するPSKを端末内で準備する。
STEP 1 まで表示しています。続きは「次へ」で追加します。
- Clientから送る
- Serverから送る
- 端点内の処理には通信矢印を付けない
縦の間隔・動く速さは実際の処理時間ではありません。STEPは学習上の区切りで、パケット数や往復数とは別です。
STEP 01 / 6
前回の接続で、再開情報を準備する
STEP 1 / 6: 前回の接続で、再開情報を準備する
前回の接続で安全に通信できるようになった後、Serverから再開用の案内が届くことがあります。Clientは、再開情報を選ぶための目印「Ticket」を保存し、それに対応する「再開用の秘密(PSK)」を端末内で準備します。TicketとPSKは別の値です。
このSTEPで押さえること
Ticketは再開情報を選ぶ目印で、PSKや通信鍵そのものではありません。ticketとticket_nonceはNewSessionTicket内の別々のフィールドです。
技術的な詳細を見る
NewSessionTicketはpost-handshake messageで、前回の接続のデータ通信用鍵で保護されて送られます。再開のために元の接続が既に閉じている必要はありません。RFC 9846 §4.7.1では、TicketはClientには不透明なLabelで、後続の接続ではPSK identityとして使われます。ticketとticket_nonceはNewSessionTicket内の別々のフィールドです。Ticket自体は暗号鍵ではなく、再開用PSKはresumption secretとticket_nonceからTicketごとに導出されます。Server側はTicketと対応するPSKをDB等で参照できるように管理する方法も、必要な情報を自己暗号化したTicketに持たせる方法も選べるため、この教材では保存方式を限定しません。ここではRFC 9846 Figure 3に沿う代表的な流れを示します。 前回は接続先を適切に確認した接続で、再開情報を利用できるという前提です。本例はpsk_dhe_keと新しいECDHE鍵共有を使う成功経路で、0-RTTの早期データ、HelloRetryRequest、外部PSK、Clientの証明書による認証は扱いません。Ticketには有効期間などの条件があり、保存してあれば必ず再開できるわけではありません。
この概念の要点
要点
前回の情報で、新しい接続を準備する
セッション再開は、以前の接続をそのまま復活させることではありません。保存した再開情報を使い、新しい接続の準備を進めます。
防御
Ticketと秘密情報は別のもの
Ticketは再開情報を選ぶための目印です。再開用のPSKそのものや、データを暗号化する鍵として送るものではありません。
防御
今回の鍵を新しく準備する
このTLS 1.3の例では、再開用のPSKに新しい鍵共有を組み合わせます。方向別に鍵を準備し、接続準備とデータ通信を守ります。
要点
再開しても、最初からデータを送るとは限らない
ここではServerの応答を確認してからデータを送る流れを扱います。早期データを送る0-RTTは、別の教材で確認します。
理解確認
参考資料
- RFCThe Transport Layer Security (TLS) Protocol Version 1.3
RFC 9846IETF / TLS 1.3のPSK再開(§2.2、§4.3.8、§4.3.9、§4.3.11、§4.5.3、§4.7.1、§7.1、§7.3)、TLS 1.2の用語対応(Appendix D)
- RFCThe Transport Layer Security (TLS) Protocol Version 1.2
RFC 5246TLS 1.2のSession ID再開、鍵準備、CCS・Finished、再開の限界(§6.3、§7、§7.1、§7.3、§7.4.1.2–7.4.1.3、§7.4.9、Appendix F.1.4)
- RFCTransport Layer Security (TLS) Session Hash and Extended Master Secret Extension
RFC 7627EMSを使ったセッションの再開条件(§5.3)
- RFCTLS Elliptic Curve Cipher Suites with SHA-256/384 and AES Galois Counter Mode (GCM)
RFC 5289採用したECDHE_RSA・AES-GCM暗号スイート(§3.2)
- RFCAES Galois Counter Mode (GCM) Cipher Suites for TLS
RFC 5288AES-GCMのレコード保護とnonce再利用の禁止(§3、§6.1)
- RFCTransport Layer Security (TLS) Session Resumption without Server-Side State
RFC 5077TLS 1.2にも存在するTicket方式の補足(§3.1)