0-RTT Handshakes was inspired by the QUIC Protocol
0-RTT Handshakes is part of the replacement of TLS Session Resumption
The client uses the PSK to authenticate the server and to encrypt the early data.
As shown in below, the 0-RTT data is just added to the 1-RTT Handshake in the first flight. The rest of the handshake uses the same messages as for a 1-RTT handshake with PSK resumption.
Client Server ClientHello + early_data + key_share* + psk_key_exchange_modes + pre_shared_key (Application Data*) --------> ServerHello + pre_shared_key + key_share* {EncryptedExtensions} + early_data* {Finished} <-------- [Application Data*] (EndOfEarlyData) {Finished} --------> [Application Data] <-------> [Application Data] + Indicates noteworthy extensions sent in the previously noted message. * Indicates optional or situation-dependent messages/extensions that are not always sent. () Indicates [messages] protected using [keys] derived from client_early_traffic_secret. {} Indicates [messages] protected using [keys] derived from a [sender]_handshake_traffic_secret. [] Indicates [messages] protected using [keys] derived from [sender]_application_traffic_secret_N
IMPORTANT NOTE: The security properties for 0-RTT data are weaker than those for other kinds of TLS data. Specifically:
0-RTT Handshakes data cannot be duplicated within a connection (i.e., the server will not process the same data twice for the same connection) and an attacker will not be able to make 0-RTT data appear to be 1-RTT data (because it is protected with different keys.) Appendix E.5 contains a description of potential attacks and Section 8 describes mechanisms which the server can use to limit the impact of replay.