>An unhelpful answer is that the key exporter interface was already set by 
>prior versions of TLS and any TLS 1.3 key exporter needs to >remain analogous. 
>:-)

I think the opposite is true :) In TLS 1.2 rekeying (with renegotiation) does 
change the value returned by the key exporter, at least that is my 
understanding of the TLS 1.2 key exporter specification. By changing so that 
rekeying (key update) does not change the value returned by the key exporter, 
TLS 1.3 made a major change compared to earlier versions.

I think it would maybe be good if the TLS 1.2 functionality that was removed in 
TLS 1.3 was documented better. Removed things that have caused 
problems/surprises for me personally:

  *   Rekeying with Ephemeral Diffie-Hellman in a connection (this was used by 
DTLS/SCTP).
  *   Post-Handshake server authentication (this was used by DTLS/SCTP).
  *   Rekeying of the exporter secret (this was used by DTLS/SCTP).
  *   Flight #4 (this was used by EAP-TLS 1.2).
  *   Combining certificates with PSK (this was used by 3GPP)
  *   Providing a PSK hint (this was used by 3GPP)

(I am not saying these are necessary bad changes. They can be solved by setting 
up new connections and by using application data instead of flight #4, use RFC 
8773, and sending more psk identifiers…)

Cheers,
John Preuß Mattsson

From: TLS <tls-boun...@ietf.org> on behalf of David Benjamin 
<david...@chromium.org>
Date: Wednesday, 29 November 2023 at 18:37
To: Tschofenig, Hannes <hannes.tschofenig=40siemens....@dmarc.ietf.org>
Cc: tls@ietf.org <tls@ietf.org>
Subject: Re: [TLS] Design Rational for Key Exporter
An unhelpful answer is that the key exporter interface was already set by prior 
versions of TLS and any TLS 1.3 key exporter needs to remain analogous. :-)

A more helpful answer is that we cannot simultaneously believe that key update 
is a transparent feature of TLS, and that exporters are sensitive to key 
update. Every use of key exporters necessarily involves both client and server 
computing the value and doing something with it (otherwise you could have just 
generated random bytes and moved on). That means both sides need to sample it 
at an analogous point in the connection, so the application protocol needs to 
be very aware of when all the key updates happen, and take care that 
corresponding uses of the exporter are sampled at corresponding epochs.

That means, if we want to build an exporter update mechanism, it needs to be 
some operation exported to the application protocol and driven by the 
application. Key updates are not that.

But I also don't think we need to or should do anything to support that use 
case. It is sufficient to have a single API, discard exporter secret, for the 
application to tell TLS it is done calling the exporter (and thus discard the 
root exporter secret). That API requires no new protocol machinery. An 
application that wants a ratcheting behavior in the exporter would then simply 
do:

1. After the connection is established, export the initial secret for their 
application-specific use of exporters and save it somewhere.
2. Discard the exporter secret
3. At whatever points in the application protocol make sense, have both sides 
run their application-specific ratcheting operation on the application-specific 
running secret.

Not only that, we even intentionally designed the exporters to have a two-step 
label, then context derivation operation. This means "discard exporter secret" 
can instead be done by extracting label-specific exporters, in case one label 
wants to continue deriving values and another one is done and wants to ratchet. 
If there were some exporter-wide update operation, this would require 
coordination across all uses of exporters across the entire connection. So 
leaving the protocol as-is is the best way to meet this use case.

On Wed, Nov 29, 2023 at 3:31 AM Tschofenig, Hannes 
<hannes.tschofenig=40siemens....@dmarc.ietf.org<mailto:40siemens....@dmarc.ietf.org>>
 wrote:
Hi all,

I was wondering why the design of the key exporter is such that it is based on 
the early_exporter_master_secret or the exporter_master_secret and no new key 
export is triggered at a later point in time, for example when a key update is 
performed. RFC 5705, which is used as a basis for the key exporter design in 
TLS 1.3, just states that there are protocols that want to obtain keying 
material from the TLS exchange. RFC 5705 nor the TLS 1.3 spec indicate the 
design rational of why no later events (e.g. post-handshake authentication or 
key updates) trigger a new key export. Was this done on purpose or was there 
just no use case for it at that time?

Ciao
Hannes

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

Reply via email to