*   Are there any DTLS 1.2 implementations that bind the whole ClientHello?
Schannel binds the entire ClientHello (obviously, excluding the cookie itself).

Cheers,

Andrei

From: David Benjamin <david...@chromium.org>
Sent: Monday, October 21, 2024 12:39 PM
To: <tls@ietf.org> <tls@ietf.org>
Subject: [EXTERNAL] [TLS] DTLS 1.3 PSK binders vs DTLS 1.2 HelloVerifyRequest

Hi all,

Nick noticed a fun (almost?) conflict between DTLS 1.3 PSK binders and DTLS 1.2 
HelloVerifyRequest:

A DTLS 1.2+1.3 client, in possession of a DTLS 1.3 PSK, will send a ClientHello 
with a PSK binder. The server, however, may have since rolled back DTLS 1.3 
support and then might negotiate DTLS 1.2 and then respond with a 
HelloVerifyRequest (not HelloRetryRequest). The client would then resend the 
ClientHello with a new legacy_cookie value, as it's expected to.

Now, a natural implementation would then recompute the PSK binder. It doesn't 
strictly need to, because HelloVerifyRequest is forbidden in DTLS 1.3, so the 
client is already not going to accept a 1.3 ServerHello. But it is simpler to 
recompute it, so you don't need to stash the old value (or include logic to 
serialize a special cookie-less ClientHello).

The question is whether this is allowed by spec and in practice, or will a DTLS 
1.2 server bind the whole extension list into its cookie. RFC 6347, Section 
4.2.1 says the following:

   When responding to a HelloVerifyRequest, the client MUST use the same
   parameter values (version, random, session_id, cipher_suites,
   compression_method) as it did in the original ClientHello.

It's unclear whether that list is a set of examples or the complete list of 
parameters. After all, quite a lot of ClientHello parameters are in the 
extensions list. On the other hand, given that DTLS 1.2 doesn't have a key 
share in here, it's a little unclear to me what benefit there is in binding 
anything other than the random value into this cookie. (Unless the server takes 
any extensions into account when deciding whether to send a cookie?)

Are there any DTLS 1.2 implementations that bind the whole ClientHello? At a 
glance, it looks like OpenSSL does not bind any part of the ClientHello, and 
BoringSSL and NSS never generate DTLS 1.2 cookies in the first place.

My inclination is to say that refreshing the PSK value is fine. The spec 
doesn't say you have to keep the extension list fixed, and this'll only be a 
problem if you have an extension-binding DTLS 1.2 server, deploy DTLS 1.3, mint 
some tickets, and then roll back DTLS 1.3. And then single-use tickets (if you 
implement them) will eventually repair it anyway.

Thoughts?

David
_______________________________________________
TLS mailing list -- tls@ietf.org
To unsubscribe send an email to tls-le...@ietf.org

Reply via email to