Skip to content

Commit

Permalink
Merge pull request #2947 from nharper/tls-saved-state
Browse files Browse the repository at this point in the history
Describe interaction between QUIC and TLS regarding saved 0-RTT state
  • Loading branch information
martinthomson committed Oct 15, 2019
2 parents 8b86d0b + 635ab6c commit d94db41
Showing 1 changed file with 32 additions and 8 deletions.
40 changes: 32 additions & 8 deletions draft-ietf-quic-tls.md
Expand Up @@ -278,13 +278,14 @@ components:
protection being called out specially.

~~~
+------------+ +------------+
| |<- Handshake Messages ->| |
| |<---- 0-RTT Keys -------| |
| |<--- Handshake Keys-----| |
| QUIC |<---- 1-RTT Keys -------| TLS |
| |<--- Handshake Done ----| |
+------------+ +------------+
+------------+ +------------+
| |<---- Handshake Messages ----->| |
| |<- Validate 0-RTT parameters ->| |
| |<--------- 0-RTT Keys ---------| |
| QUIC |<------- Handshake Keys -------| TLS |
| |<--------- 1-RTT Keys ---------| |
| |<------- Handshake Done -------| |
+------------+ +------------+
| ^
| Protect | Protected
v | Packet
Expand Down Expand Up @@ -358,10 +359,12 @@ levels fit into the handshake process.

## Interface to TLS

As shown in {{schematic}}, the interface from QUIC to TLS consists of three
As shown in {{schematic}}, the interface from QUIC to TLS consists of four
primary functions:

- Sending and receiving handshake messages
- Processing stored transport and application state from a resumed session
and determining if it is valid to accept early data
- Rekeying (both transmit and receive)
- Handshake state updates

Expand Down Expand Up @@ -659,6 +662,27 @@ A client MAY attempt to send 0-RTT again if it receives a Retry or Version
Negotiation packet. These packets do not signify rejection of 0-RTT.


## Validating 0-RTT Configuration

When a server receives a ClientHello with the "early_data" extension, it has to
decide whether to accept or reject early data from the client. Some of this
decision is made by the TLS stack (e.g., checking that the cipher suite being
resumed was included in the ClientHello; see Section 4.2.10 of {{!TLS13}}). Even
when the TLS stack has no reason to reject early data, the QUIC stack or the
application protocol using QUIC might reject early data because the
configuration of the transport or application associated with the resumed
session is not compatible with the server's current configuration.

QUIC requires additional transport state to be associated with a 0-RTT session
ticket. One common way to implement this is using stateless session tickets and
storing this state in the session ticket. Application protocols that use QUIC
might have similar requirements regarding associating or storing state. This
associated state is used for deciding whether early data must be rejected. For
example, HTTP/3 ({{QUIC-HTTP}}) settings determine how early data from the
client is interpreted. Other applications using QUIC could have different
requirements for determining whether to accept or reject early data.


## HelloRetryRequest

In TLS over TCP, the HelloRetryRequest feature (see Section 4.1.4 of {{!TLS13}})
Expand Down

0 comments on commit d94db41

Please sign in to comment.