見えるセキュリティ
TLS 0-RTT — データの早期送信
TLS 0-RTT EARLY DATA
この概念とは?
TLS 0-RTTは、接続準備の返事を待たずに、データを先に送る仕組みです。この教材では、前回の接続で得た再開情報を使う例を見ます。
「0」は、最初のデータを送るまでに、TLSの返事を待つ往復が不要という意味です。通信が0秒で終わるわけではなく、ハンドシェイクはその後も続きます。
- THEME
- crypto
- KIND
- protocol
- REVIEW
- self-reviewed ·
再開情報を使い、Serverの返事より先にデータを送る流れ
前回の接続で早期送信の条件を受け取っている例です。STEP 2と3の間ではServerの返事を待ちません。図は受け入れられる場合を示します。
前回の接続
Client内
Ticket・PSK・早期送信条件を保存済みServer内
Ticketに対応するPSKを利用可能相手へ送る通信はない
前回からの準備済み状態を提示。Ticket発行や秘密の送信は再演しない。
STEP 1 まで表示しています。続きは「次へ」で追加します。
- Clientから送る
- Serverから送る
- 端点内の処理には通信矢印を付けない
縦の間隔・動く速さは実際の処理時間ではありません。STEPは学習上の区切りで、パケット数や往復数とは別です。
STEP 01 / 6
前回の再開情報を用意する
STEP 1 / 6: 前回の再開情報を用意する
Clientは、前回の接続で保存したTicketと再開用の秘密を使います。今回は、早期送信の条件も受け取っている例です。
このSTEPで押さえること
Ticketは再開情報の目印で、PSKとは別です。前回に早期送信が許され、アプリも利用を選び、送信量が条件内に収まる例です。Serverの保存方式は限定しません。
技術的な詳細を見る
前回のNewSessionTicketで早期送信が許され、Clientのアプリケーションも早期送信を利用し、送信量がmax_early_data_sizeの範囲に収まる例です。前回の接続は成立済みとし、Ticketの発行過程は「TLSセッション再開」で扱います。Ticketは再開情報の目印であり、再開用の秘密(PSK)とは別です。Serverが対応するPSKを利用するための管理方式は、データベース方式や暗号化Ticket方式のいずれかに限定しません。 この教材ではPSKによる再開に新しいECDHEを併用するpsk_dhe_keを選びます。External PSK、HelloRetryRequest(HRR)、クライアント証明書認証、QUICは主フローに含めません。
この概念の要点
要点
「早く送れる」と「接続準備が終わる」は別
早期データを送った後も、接続準備は続きます。早く送り始められても、通信や処理がその場で完了するわけではありません。
要点
早期データは拒否されることもある
早期送信を試しても、Serverが受け入れるとは限りません。早期データだけを拒否し、通常の接続準備を続ける場合もあります。再送するかは、接続準備の完了後にアプリケーション側で判断します。受入拡張が返らず拒否された場合はEndOfEarlyDataを送りません。HRRや致命的な検証エラーまで、すべて通常の再開へ成功するとは扱いません。
注意
暗号化されていても、繰り返し送られることがある
ここでいうリプレイは、記録されたデータを別の接続で送り直すことです。同じ依頼を繰り返し受けると、アプリケーションの処理が重複するおそれがあります。暗号化だけでは、この問題への対策になりません。HTTPのGETであっても処理に副作用があれば安全とは限らず、早期送信の可否は処理内容を踏まえて判断します。425 Too EarlyはHTTPの応答で、TLS自体の早期データ拒否とは別です。
注意
通常のデータと同じ保護があるとは限らない
早期データについて、TLSは前方秘匿性を保証しません。将来、再開用の秘密が漏れた場合、記録されていた早期データを守れないおそれがあります。前方秘匿性は、後から秘密が漏れても、過去に記録された通信内容を守る性質です。後続の通信で新しい鍵共有を行っても、すでに送った早期データの保護を後から強めるものではありません。
要点
用途に合わせて使う
0-RTTは、速くするために何でも送ってよい仕組みではありません。利用するアプリケーションの仕様で、安全な使い方や拒否・再送への対応が定められていることが前提です。教材上の注意例は、同じ依頼で購入や送金が重複する処理です。実在サービスの挙動を述べるものではなく、何度実行しても結果が同じになるようにするだけで全リスクを解消できる、という意味でもありません。
理解確認
参考資料
- RFCThe Transport Layer Security (TLS) Protocol Version 1.3
RFC 9846IETF / 0-RTTの規範上の条件・受入と拒否・鍵・保護の限界(§2.3、§4.3.9–4.3.11、§4.5.3、§4.6、§4.7.1、§7.1–7.3、§8、Appendix F.5)
- RFCExample Handshake Traces for TLS 1.3
RFC 8448IETF / Ticketと再開0-RTTの通信例。規範ではなく実例として参照(§3、§4)
- RFCUsing Early Data in HTTP
RFC 8470IETF / HTTPの処理・再送・副作用と425 Too Early(§2–3、§5.2)
- RFCRecommendations for Secure Use of TLS and DTLS
RFC 9325IETF / アプリケーションプロトコルごとの0-RTT使用条件(§3.10)