Subject: Re: [TLS] draft-jay-tls-psk-identity-extension-01

From: Raja ashok <[email-masked]>
Date: Wed, 21 Sep 2016 17:46:34 +0000

Hi David & Nikos,

My comments are inlined in below mail, please check it.

-----Original Message-----
From: David Woodhouse [mailto:[email-masked]] 
Sent: 19 September 2016 13:04
To: Nikos Mavrogiannopoulos; Raja ashok; [email-masked]
Subject: Re: draft-jay-tls-psk-identity-extension-01

On Sat, 2016-09-17 at 09:53 +0200, Nikos Mavrogiannopoulos wrote:
> Hello,
>  We were with David implementing the draft-jay-tls-psk-identity-
> extension-01 on openconnect VPN, however we noticed that the latest
> version of TLS 1.3 modified the identity extension in an incompatible
> way. I am not sure if the new format can be used in place of the old
> one. For that we would like to ask what is your plan about it. Would
> you include the new format with some guidance on how to be used under
> tls 1.2, or would you stick to the existing format?

[ashok]  : PSK Identity extension specified in our extension differs from the extension specified in TLS1.3. In TLS1.3 PSK identity extension they are trying to exchange whether its DHE based PSK or not and also authentication mechanism (PSK or cert based authentication), all these things for key_share extension. So that TLS1.3 has PskKeyExchangeModes and PskAuthenticationModes. But I hope these are not required for lower versions (TLS1.2, 1.1 and 1.0). So the extension proposed in this draft is only for usage with TLS1.2, 1.1 and 1.0. And I feel, we can make this as a separate extension to avoid confusion with TLS1.3 extension. If we feel anything needs to be inherited from TLS1.3 extension, we can do it.

A couple of other comments on looking in detail at the draft...

RFC4279 §5.1 says that PSK identities MUST be a character string,
encoded in UTF-8.

But the TLSv1.3 draft doesn't say this anywhere, and in fact in §4.5.1
it seems to suggest that for session resumption, we use a ticket
constructed according to RFC5077 as the PSK identity. Which would
probably be binary.

If TLSv1.3 is going to allow non-UTF8 PSK identities and TLSv1.2 still
doesn't, then it would be useful to clarify precisely what is allowed
in draft-jay-tls-psk-identity-extension.

[ashok] : PSK identity extension specified in this draft also expects the PSK ID as character string in UTF format, similar to RFC 4279. I will update this point in our draft, thanks for reminding me.

Another difference I note between your draft and the current TLSv1.3
draft is that in TLSv1.3, the PreSharedKeyExtension data returned by
the server is just an index in the identities offered by the client;
not a copy of the identifier itself:

   struct {
       select (Handshake.msg_type) {
           case client_hello:
               PskIdentity identities<6..2^16-1>;

           case server_hello:
               uint16 selected_identity;
       }
   } PreSharedKeyExtension;

...
   selected_identity     The server’s chosen identity expressed as a
                         (0-based) index into the identities in the
                         client’s list.

[ashok] : I feel sending the selected ID is better, otherwise while process "server hello" msg, client has to maintain the PSK ID list in the same order in which it sent. Already there was a discussion in TLS1.3 group for sending selected ID instead of index. 

And a final nitpick... replace every instance it "it's" with "its" :)

[ashok] : I will check and fix it. I will upload a revised draft. Thanks for your comments.

-- 
David Woodhouse                            Open Source Technology Centre
[email-masked]                              Intel Corporation

Raja Ashok
HUAWEI TECHNOLOGIES CO.,LTD. 

E-mail: [email-masked]
www.huawei.com
-------------------------------------------------------------------------------------------------------------------------------------
This e-mail and its attachments contain confidential information from HUAWEI, which 
is intended only for the person or entity whose address is listed above. Any use of the 
information contained herein in any way (including, but not limited to, total or partial 
disclosure, reproduction, or dissemination) by persons other than the intended 
recipient(s) is prohibited. If you receive this e-mail in error, please notify the sender by 
phone or email immediately and delete it!

---

From: David Woodhouse <[email-masked]>
Date: Wed, 21 Sep 2016 20:16:15 +0100

On Wed, 2016-09-21 at 17:46 +0000, Raja ashok wrote:
> [ashok]  : PSK Identity extension specified in our extension differs
> from the extension specified in TLS1.3. 

Agreed. I suspect it just makes sense to add a sentence to that effect,
to the draft?

> [ashok] : I feel sending the selected ID is better, otherwise while
> process "server hello" msg, client has to maintain the PSK ID list in
> the same order in which it sent. Already there was a discussion in
> TLS1.3 group for sending selected ID instead of index. 

Yes, I agree. In TLS1.3 it kind of makes sense, because the PSK
identifiers there can be huge — they are the full session ticket from
RFC5077. So it makes some sense to send back only an index. But in
TLS <= 1.2 when you're not (ab)using PSK for session resumption, that
motivation goes away and returning the identity itself seems
reasonable. But again, it's just worth calling out the differences
between TLSv1.3 for clarity.

There is also discussion of supporting only a *single* PSK identity in
TLSv1.3. If that happens, is there a real need for the extension to
permit more than one identity in TLS <= 1.2. 

-- 
dwmw2

---

From: Ilari Liusvaara <[email-masked]>
Date: Wed, 21 Sep 2016 23:00:22 +0300

> permit more than one identity in TLS <= 1.2. 

Is the intended usecase some "IoT"/"embedded" devices? If so, I think
this is *extremely* bad idea.

Those things tend to have very long lifespans, so one shouldn't put
one out except with cutting-edge stuff. Anything less, and there is
substantial risk of it going bad during lifetime.

It would be possible to retrofit an extension to do multiple identites
at once into TLS 1.3 even if baseline TLS 1.3 allows only one, altough
implementing it probably will not be pleasant.[1]

Also, has anyone done security analysis of doing PSK negotiation that
way in TLS 1.2 (someone has clearly done that for TLS 1.3, given
some of the attacks posted)...

[1] E.g. altering hello_finished to be a list, one entry for each
identity, or omitting it entierely for "implicit finished with the
used 0-RTT key before ServerHello" trick I outlined earlier.

(Neither is probably pleasant to implement... The latter is probably
easier if the library architecture is suitable).

-Ilari

---

From: David Woodhouse <[email-masked]>
Date: Wed, 21 Sep 2016 21:33:11 +0100

> implementing it probably will not be pleasant.[1]

Typically I would expect that a given IoT client would still support
only one form of PSK, and offer one identifier. The update model would
be that the server accepts *either* the old or the new keys, and
clients are slowly upgraded to offer the latter. But still only one at
a time?

> easier if the library architecture is suitable).

I had also suggested including a hello_finished only for the first
(preferred) PSK identity. If the server doesn't want that one, it can
send a HelloRetryRequest with a PreSharedKeyExtension indicating which
PSK identity it *does* want.

Or did I miss a reason why that wasn't sufficient and *each*
ClientHello needed to be validated? I confess I've only been looking at
this for the last day or so.

-- 
dwmw2

---

From: Eric Rescorla <[email-masked]>
Date: Wed, 21 Sep 2016 13:36:29 -0700

> PSK identity it *does* want.

I don't see how this is appreciably easier than just having the client
offer one and then
the server HRR.

-Ekr

> _______________________________________________
> TLS mailing list
> [email-masked]
> https://www.ietf.org/mailman/listinfo/tls
>
>

---

From: Ilari Liusvaara <[email-masked]>
Date: Wed, 21 Sep 2016 23:39:15 +0300

> this for the last day or so.

Basically, you need the binder (finished) for whatever PSK you actually
wind up using, or you have attacks in some cases.

So it would technically be possible to have multiple PSK identites,
and use HRR to change the one used (followed by client signaling
finished for that one in new ClientHello).

-Ilari

---

From: David Woodhouse <[email-masked]>
Date: Wed, 21 Sep 2016 21:43:10 +0100

On Wed, 2016-09-21 at 13:36 -0700, Eric Rescorla wrote:
> > 
> I don't see how this is appreciably easier than just having the
> client offer one and then the server HRR.

If I have ten PSK identities I can offer, it may take nine round-trips
before I send the one you want.

If I list them all in my first ClientHello and you *tell* me which one
you want, that's only one more round-trip.

-- 
dwmw2

---

From: Eric Rescorla <[email-masked]>
Date: Wed, 21 Sep 2016 13:49:24 -0700

> you want, that's only one more round-trip.

Is there a real-world use-case where this is relevant?

-Ekr

---

From: David Woodhouse <[email-masked]>
Date: Wed, 21 Sep 2016 21:53:11 +0100

> Is there a real-world use-case where this is relevant?

The number ten might be a little excessive. But there is talk of
multiple sessions being simultaneously for resumption, and multiple PSK
identities in the original meaning of that term.

So I suppose there are certainly use cases where a "HRR and let the
client *guess* what we might like instead" model would lead to more
round-trips than an explicit indication from the server.

-- 
dwmw2