On Friday, December 11, 2015 08:13:05 pm Christian Huitema wrote:
> I am looking at the specification of the key share extension, section 6.3.2.3 
> of the 1.3 draft. I think that the behavior is somewhat underspecified. The 
> spec says: 
> 
> ...Clients MAY omit this extension from the ClientHello, and in response to 
> this, servers MUST send a HelloRetryRequest requesting use of one of the 
> groups the client offered support for in its "supported_groups" extension. If 
> no common supported group is available, the server MUST produce a fatal 
> "handshake_failure" alert.

There's some cruft in the current draft leftover from ekr and I waffling 
back/forth on whether to omit or send an empty extension when requesting server 
selection. (was pointed out on this list by someone else a couple weeks ago) We 
eventually decided on empty. I have a PR pending review that fixes the merge 
mistakes and clarifies some bits.

https://github.com/tlswg/tls13-spec/pull/349/files

> I am concerned with the hypothetical case in which the client sends a list of 
> groups in the "named group" extension but only sends keys for a subset of 
> these groups in the "key share" extension. For example, a client might 
> propose secp256r1 and secp384r1 in the named group extension, leading the 
> server to select secp256r1, but only provide a key for secp384r1 in the key 
> share extension. The server has two options:
> 
> * produce a fatal handshake failure alert, because no common supported group 
> is available,
> * or, send a HelloRetryRequest requesting use of one of the groups the client 
> offered support for, secp256r1 in the example.
> 
> Which is the correct interpretation? Is one of these behaviors preferred, or 
> are both available?

The latter: HelloRetryRequest is the required response. (See also the PR noted 
above.) The retry mechanism essentially allows key shares to be provided 
on-demand. Servers selecting a group that is supported, but not provided, 
request it via the HelloRetryRequest.

> Also, what is supposed to happen if the client sends an empty Key Share 
> extension?

With the pending changes this is the explicit HelloRetryRequest request case. 
Lack of the extension when offering suites requiring it a fatal 
"missing_extension" alert. (switching to supplying an empty extension when 
requesting a retry makes this simpler)

> Or, if its listed key share extensions list keys for groups that are not 
> indicated in the "named group" extension?

I have a "MUST NOT" for doing that in the pending PR. In order to be thorough, 
I've just amended it with a specific fatal alert to throw. Though other 
mechanisms should catch an attempt to inject a bogus key share, implementations 
not checking for and erroring on unsupported keys here sounds like a recipe for 
badness.


Dave

_______________________________________________
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls

Reply via email to