The ladder diagram describing the 0-RTT exchange is simple enough, as seen in this extract:
Client Server ClientHello + KeyShare + EarlyDataIndication ^ (Certificate*) 0-RTT | (CertificateVerify*) Data | (Finished) v (Application Data*) (end_of_early_data) --------> The text indicates that client auth and application data messages are protected by "keys derived from the static secret." But then, hidden in section 7.2 is an interesting twist -- too different keys are supposed to be derived from the static secret, one for 0-RTT handshake, another for 0-RTT Application. If I understand correctly, the Certificate, CertificateVerify and Client Finished message would be protected with the "0-RTT Handshake" key, and the Application data and end-of-early data message would be protected with the "0-RTT Application" key. I assume that there is a good reason for this extra complexity, even if it eludes me. But I worry a bit about what that would do when we start working on DTLS 1.3. UDP messages can arrive out of order. Yes, there is a message number, but the record layer is not necessarily well positioned to interpret it -- the certificate and verify message are optional, so when a record layer receives packet #3 before packet #2, it does not know whether this is a CertificateVerify message (handshake key) or an application message (application key). Yes, there are solutions, yes, it can be managed, but are we sure that this particular bit of complexity is worth it? And if it worth it, can we add a description of the key switching logic in section 6.2.2? -- Christian Huitema _______________________________________________ TLS mailing list TLS@ietf.org https://www.ietf.org/mailman/listinfo/tls