Hi,

I think the idea of a new TLS extension to make TLS 1.3 and EAP-TLS interact 
better is a very promising idea. This would probably take some time to get 
specified and implemented so it is probably a future 
optimization/simplification rather that something EAP-TLS 1.3 should wait for.

An extension that "I do not send any post-handshake messages" would work and 
remove the need for a commitment message.

------------------------------------
NoPostHandShake Extension
------------------------------------

Clients MAY send this extension in ClientHello. It contains no data.

Servers MAY send this extension in EncryptedExtentions. It contains no data.

When the "NoPostHandShake" extension is negotiated, the server MUST NOT send 
any post handshake messages.

-------------------------------------

However, this would also stop the client from doing resumption which is also 
very important. EAP-TLS fragments TLS into a large number of round-trips, and 
database lookup to authorize clients is often slow, so resumption is essential 
to get good performance.

The current Post-Handshake NewSessionTicket is not well-suited for EAP-TLS as 
is introduces the demand for the commitment message as well as introducing an 
extra round-trip. The NewSessionTicket mechanism is both complex and 
inefficient for EAP-TLS. Could a new ticket extension be designed that fits 
EAP-TLS better? Looking quickly it seems like it would be possible. It looks 
like the current NewSessionTicket mechanism was designed with a requirements to 
only use symmetric crypto. This would not be important for EAP-TLS.

The below quickly written suggestion use the same PSK derivation as 
NewSessionTicket, but makes the ticket_nonce a sequence, and use asymmetric 
HPKE encryption for client privacy.

------------------------------------
ImplicitTicket Extension
------------------------------------

Clients MAY send this extension in ClientHello. It contains the following 
structure:

struct {
                uint16 ticket_count_request;
} ImplicitTicketRequest;

With the ImplicitTicketRequest, the client requests ticket_count_request 
implicit tickets.

A server MAY send this extension in EncryptedExtentions. It contains the 
following structure:

struct {
                uint16 ticket_count;
                opaque hpke_pk<1..2^16-1>;
                uint32 ticket_lifetime;
                opaque ticket<1..2^16-1>;
   Extension extensions<0..2^16-2>;
} ImplicitTicketResponse;

When the "ImplicitTicket" extension is negotiated, it provisions ticket_count 
number of tickets. The tickets all have the same lifetime and extensions.

When doing resumption based on an implicit ticket, the identity is constructed 
as follows:

  identity = ENC(hpke_pk, ticket || ticket_seq || ticket_age_add )

  The uint16 ticket_seq is a that sequence that increases for each ticket the 
client uses. Valid values are 0..ticket_count-1.

  ticket_age_add in the identity replaces the ticket_age_add normally sent in 
the in the NewSessionTicket message.

  ticket_nonce is set to ticket_seq and the PSK associated with the ticket is 
computed as defined in RFC 8446.

---------------------------------

Used together, two such extentions would effectively solve all the EAP - TLS 
1.3 related issues as they were known a month ago. There has since been 
discussion if EAP-TLS 1.3 needs keys derived from the client second flight, but 
I think more analysis before determining if that is the case or not.

Cheers,
John


From: TLS <tls-boun...@ietf.org> on behalf of Eric Rescorla <e...@rtfm.com>
Date: Monday, 1 February 2021 at 15:56
To: Alan DeKok <al...@deployingradius.com>
Cc: EMU WG <emu@ietf.org>, Benjamin Kaduk <ka...@mit.edu>, "t...@ietf.org" 
<t...@ietf.org>
Subject: Re: [TLS] [Emu] Fwd: Benjamin Kaduk's Discuss on 
draft-ietf-emu-eap-tls13-13: (with DISCUSS and COMMENT)



On Fri, Jan 29, 2021 at 12:02 PM Alan DeKok 
<al...@deployingradius.com<mailto:al...@deployingradius.com>> wrote:
  This is a new message to summarize history, requirements, etc. for EAP-TLS 
and TLS 1.3.  The focus here is the requirements for EAP-TLS, and how the 0x00 
commitment message versus CloseNotify meets those.  I'll ignore the exporter 
changes here, as those are less controversial.

  The original proposal in the EAP-TLS draft was to send a zero-length 
application data message in order to signal that no more post-handshake 
messages were needed.  From the -05 version:

   When an EAP server has sent its last handshake message (Finished or a
   Post-Handshake), it commits to not sending any more handshake
   messages by appending an empty application data record (i.e. a TLS
   record with TLSPlaintext.type = application_data and
   TLSPlaintext.length = 0) to the last handshake record.  After sending
   an empty application data record, the EAP server may only send an
   EAP-Success, an EAP-Failure, or an EAP-Request with a TLS Alert
   Message.

  However, the OpenSSL APIs (among others) do not allow for sending zero octets 
of application data.  The proposal was then changed to send a 0x00 octet.

 There was discussion that CloseNotify could achieve the same goals.  But 
CloseNotify requires an additional round trip.  There are strong opinions that 
additional round trips are bad.

  In addition, CloseNotify prevents the TLS layer from sending a TLS Fatal 
Alert:  
https://www.mail-archive.com/emu@ietf.org/msg03092.html<https://protect2.fireeye.com/v1/url?k=16c4ad4c-495f9461-16c4edd7-8692dc8284cb-f1f3f2750d360a2a&q=1&e=36033566-ffb1-4757-9586-079c8d5e94a5&u=https%3A%2F%2Fwww.mail-archive.com%2Femu%40ietf.org%2Fmsg03092.html>

I agree that extra round trips are bad, I'd like to take a step back
here and think about what this message is trying to do. Here's
the relevant text:

   TLS 1.3 [RFC8446] introduces Post-Handshake messages.  These Post-
   Handshake messages use the handshake content type and can be sent
   after the main handshake.  One such Post-Handshake message is
   NewSessionTicket.  The NewSessionTicket can be used for resumption.
   After sending TLS Finished, the EAP-TLS server may send any number of
   Post-Handshake messages in separate EAP-Requests.

The relevant question is when the server knows what post-handshake
messages it will send. There are two points at which the server might
wish to send post-handshake messages:

1. After the server's first flight.
2. After the client's second flight.

Let's take the second case first. If the server is sending (or
potentially sending) post-handshake messages after the client's second
flight (e.g., after reading its certificate), then it can easily send
a close_notify after sending all of them. This will appear in the same
flight as the commitment message would have (because you can't send it
before the post-handshake messages) and avoid the need for an extra
round trip.

The first case, where the commitment message is sent in 0.5-RTT,
is the interesting one. However, the server has no more information
after sending SFIN than it does sending EE, so I believe that the
easiest way to deal with this is with a TLS extension that says
"I do not send any post-handshake messages". This would still
leave the server free to send any relevant alerts in response to
the client's second flight.

-Ekr





_______________________________________________
Emu mailing list
Emu@ietf.org
https://www.ietf.org/mailman/listinfo/emu

Reply via email to