Below are some comments on -05.

# Terminology

The discussion of forward secrecy is confusing and arguably wrong. For
instance, consider the abstract:

   TLS 1.3 ensures forward secrecy by performing an ephemeral Diffie-
   Hellman key exchange during the initial handshake, protecting past
   communications even if a party's long-term keys are later
   compromised.  While the built-in KeyUpdate mechanism allows traffic
   keys to be refreshed during a session, it does not introduce new
   forward-secret key material.  This limitation can pose a security
   risk in long-lived sessions, such as those found in industrial IoT or
   telecommunications environments.

   To address this, this specification defines an extended key update
   mechanism that performs a fresh Diffie-Hellman exchange within an
   active session, thereby re-establishing forward secrecy beyond the
   initial handshake.  By forcing attackers to exfiltrate new key

I'm not sure what it means to "reestablish forward secrecy".  The TLS
1.3 KeyUpdate mechanism provides forward secrecy, in that a key
compromise at epoch N+1 does not threaten data transmitted
under key N. What this mechanism provides is post-compromise security,
which is to say protection for data protected under key N+1 even
if key N is compromised.

To be clear, I'm not saying that this extension doesn't have value,
merely that that value is not about FS.


# Conflict Resolution and Rejection

The basic structure of this mechanism is that the Initiator
sends a EKURequest and the Responder sends an EKUResponse.
The EKUResponse can be one if:

 accepted(0),  -- here is my key share
 retry(1),     -- try again in X seconds
 rejected(2),  -- I won't update at all
 clashed(3),   -- I've already initiated my own update

I think we can simplify this somewhat, as detailed below.


## Retry

My initial instinct is we can get rid of "retry" entirely. I see
two main options.

Option 1: Require immediate response

The existing algorithms are relatively cheap and so it's not clear to
me that there is a lot of value in the peer in declining to update,
especially as (unlike KeyUpdate) there can only be one EKURequest
outstanding, so it's not like you can end up with a big pile of
updates to respond to. So, we could just adopt the rule that the
Responder has to send a response more or less immediately.


Option 2: Allow the Responder to unilaterally delay

Rather than having the Responder respond with "retry", the responder
can just unilaterally wait T seconds (where T is whatever it would
have put in the retry response). This simplifies the state machine on
the Initiator and only carries slightly less information, because the
Initiator has no promise that the retry would have worked anyway.


## Clashed

I see what "clashed" is trying to do, but I think there's another
opportunity to simplify: because you are determining which side wins
based on information known both sides, they can each independently
determine which EKURequest will be accepted and which one will be
rejected [0]. So instead of having the winner send a EKUResponse
rejecting the loser, I suggest it just wait for the EKUResponse
from the loser. I.e.,

Client                                       Server
---------------------------------------------------
EKURequest(share=1) ->       <- EKURequest(share=2)
                               [ignores EKURequest]
EKUResponse(share=1) ->

This removes one message and simplifies the state machine because the
losing Initiator can transition directly to sending EKUResponse
without having to have a state waiting for the EKUResponse(clashed)
message.


# Handshake Messages

You're registering 3 new handshake messages out of a space that has
maximum size 256 but is actually quite a bit smaller, as documents
in RFC 7983 (the range that does not require coordination is only
25-63). Is there a reason not to just have a single ExtendedKeyUpdate
mechanism with a type field?


# Label Strings

Do we really need new label strings for the key derivations in S 5? I
haven't done a thorough analysis, but given that you forbid the use of
KeyUpdate in combination with this spec it's not clear to me how you
would get a conflict in terms of the inputs.

-Ekr

[0] If we didn't have to deal with PQ, we actually wouldn't need
any of this machinery and could just exploit the symmetry of DH,
but regrettably we have KEMs.
_______________________________________________
TLS mailing list -- tls@ietf.org
To unsubscribe send an email to tls-le...@ietf.org

Reply via email to