<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.34 (Ruby 3.4.8) -->
<?rfc rfcedstyle="yes"?>
<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc text-list-symbols="-o*+"?>
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-tls-extended-key-update-11" category="std" consensus="true" submissionType="IETF" updates="9261, 8446" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.32.0 -->
  <front>
    <title abbrev="Extended Key Update for TLS">Extended Key Update for Transport Layer Security (TLS) 1.3</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-tls-extended-key-update-11"/>
    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization>Siemens</organization>
      <address>
        <email>hannes.tschofenig@gmx.net</email>
      </address>
    </author>
    <author initials="M." surname="Tüxen" fullname="Michael Tüxen">
      <organization>Münster Univ. of Applied Sciences</organization>
      <address>
        <email>tuexen@fh-muenster.de</email>
      </address>
    </author>
    <author initials="T." surname="Reddy" fullname="Tirumaleswar Reddy">
      <organization>Nokia</organization>
      <address>
        <email>kondtir@gmail.com</email>
      </address>
    </author>
    <author initials="S." surname="Fries" fullname="Steffen Fries">
      <organization>Siemens</organization>
      <address>
        <email>steffen.fries@siemens.com</email>
      </address>
    </author>
    <author initials="Y." surname="Rosomakho" fullname="Yaroslav Rosomakho">
      <organization>Zscaler</organization>
      <address>
        <email>yrosomakho@zscaler.com</email>
      </address>
    </author>
    <date year="2026" month="March" day="17"/>
    <area>Security</area>
    <workgroup>Transport Layer Security</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 77?>

<t>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 (typically a private key with a corresponding certificate) are later compromised. While the built-in KeyUpdate mechanism allows
application traffic keys to be refreshed during a session, it does not incorporate
fresh entropy from a new key exchange and therefore does not provide post-compromise security.
This limitation can pose a security risk in long-lived sessions, such as
those found in industrial IoT or telecommunications environments.</t>
      <t>To address this, this specification defines an extended key update mechanism that
performs a fresh Diffie-Hellman exchange within an active session, thereby
ensuring post-compromise security. By forcing attackers
to exfiltrate new key material repeatedly, this approach mitigates the risks
associated with static key compromise. Regular renewal of session keys helps
contain the impact of such compromises. The extension is applicable to both TLS 1.3
and DTLS 1.3.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Transport Layer Security Working Group mailing list (tls@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/tls/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/hannestschofenig/tls-key-update"/>.</t>
    </note>
  </front>
  <middle>
    <?line 95?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Transport Layer Security (TLS) 1.3 protocol provides forward secrecy by using
an ephemeral Diffie-Hellman (DHE) key exchange during the initial handshake. This
ensures that encrypted communication remains confidential even if an attacker
later obtains a party's long-term private key, protecting against passive adversaries
who record encrypted traffic for later decryption.</t>
      <t>TLS 1.3 also includes a KeyUpdate mechanism that allows traffic keys to be refreshed
during an established session. However, this mechanism does not provide
post-compromise security, as it applies only a key derivation function to the
previous application traffic key as input. While this design is generally sufficient
for short-lived connections, it may present security limitations in scenarios where
sessions persist for extended periods, such as in industrial IoT or telecommunications
systems, where continuous availability is critical and session renegotiation or resumption
is impractical.</t>
      <t>Earlier versions of TLS supported session renegotiation, which allowed peers to negotiate
fresh keying material, including performing new Diffie-Hellman exchanges during the
session lifetime. Due to protocol complexity and known vulnerabilities, renegotiation
was first restricted by <xref target="TLS-RENEGOTIATION"/> and ultimately removed in TLS 1.3. While the
KeyUpdate message was introduced to offer limited rekeying functionality, it does
not fulfill the same cryptographic role as renegotiation and cannot refresh
the TLS main secret and consequently cannot derive new secrets from fresh DHE input.</t>
      <t>Security guidance from national agencies, such as ANSSI (France <xref target="ANSSI"/>), recommends the
periodic renewal of cryptographic keys during long-lived sessions to limit the
impact of key compromise. This approach encourages designs that force an
attacker to perform dynamic key exfiltration, as defined in <xref target="CONFIDENTIALITY"/>. Dynamic
key exfiltration refers to attack scenarios where an adversary must repeatedly
extract fresh keying material to maintain access to protected data, increasing
operational cost and risk for the attacker. In contrast, static key exfiltration,
where the TLS main secret is extracted once and reused, poses a greater long-term
threat, especially when session keys are not refreshed with fresh key exchange input
rather than key derivation.</t>
      <t>This specification defines a TLS extension that introduces an extended key update
mechanism. Unlike the standard key update, this mechanism allows peers to perform a
fresh Diffie-Hellman exchange within an active session using one of the groups
negotiated during the initial handshake. By periodically rerunning (EC)DHE, this
extension enables the derivation of new traffic keys that are independent of
prior key material. As noted in <xref section="F" sectionFormat="of" target="TLS"/>, this
approach mitigates the risk of static key exfiltration and shifts the attacker
burden toward dynamic key exfiltration.</t>
      <t>The proposed extension is applicable to both TLS 1.3 <xref target="TLS"/> and DTLS 1.3  <xref target="DTLS"/>. For clarity,
the term "TLS" is used throughout this document to refer to both protocols unless
otherwise specified.</t>
    </section>
    <section anchor="term">
      <name>Terminology and Requirements Language</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>To distinguish the key update procedure defined in <xref target="TLS"/>
from the key update procedure specified in this document, we use the terms
"standard key update" and "extended key update", respectively.</t>
      <t>In this document, we use the term post-compromise security, as defined in
<xref target="CCG16"/>. We assume that an adversary may obtain
access to the application traffic keys.</t>
      <t>Unless otherwise specified, all references to traffic keys in this document
refer to application traffic keys and because the Extended Key Update procedure
occurs after the handshake phase has completed, no handshake traffic keys
are involved.</t>
      <t>In this document, send key refers to the [sender]_write_key, and receive key
refers to the [receiver]_write_key. These keys are derived from the active
client_application_traffic_secret_N and server_application_traffic_secret_N,
as defined in (D)TLS 1.3 <xref target="TLS"/>, and are replaced with new ones
after each successful Extended Key Update.</t>
    </section>
    <section anchor="negotiating-the-extended-key-update">
      <name>Negotiating the Extended Key Update</name>
      <t>Client and servers use the TLS flags extension
<xref target="TLS-FLAGS"/> to indicate support for the functionality
defined in this document.  We call this flag "Extended_Key_Update"
flag.</t>
      <t>The "Extended_Key_Update" flag proposed by the client in the
ClientHello (CH) <bcp14>MUST</bcp14> be acknowledged in the EncryptedExtensions
(EE), if the server also supports the functionality defined in this
document and is configured to use it.</t>
      <t>If the "Extended_Key_Update" flag is not set, servers ignore any of the
functionality specified in this document and applications that
require post-compromise security will have to initiate a full
handshake.</t>
    </section>
    <section anchor="ext-key-update">
      <name>Extended Key Update Messages</name>
      <t>If the client and server agree to use the extended key update mechanism,
the standard key update <bcp14>MUST NOT</bcp14> be used. In this case, the extended key
update fully replaces the standard key update functionality.</t>
      <t>Implementations that receive a classic <tt>KeyUpdate</tt> message after
successfully negotiating the Extended Key Update functionality <bcp14>MUST</bcp14>
terminate the connection with an <tt>"unexpected_message"</tt> alert.</t>
      <t>The extended key update messages are signaled in a new handshake message named
<tt>ExtendedKeyUpdate</tt> (EKU), with an internal uint8 message subtype indicating its role.
This specification defines three ExtendedKeyUpdate message subtypes:</t>
      <ul spacing="normal">
        <li>
          <t><tt>key_update_request</tt> (0)</t>
        </li>
        <li>
          <t><tt>key_update_response</tt> (1)</t>
        </li>
        <li>
          <t><tt>new_key_update</tt> (2)</t>
        </li>
      </ul>
      <t>New ExtendedKeyUpdate message subtypes are assigned by IANA as described in <xref target="iana-eku-registry"/>.</t>
      <t>A TLS peer which receives a ExtendedKeyUpdate with an unexpected message subtype <bcp14>MUST</bcp14>
abort the connection with an <tt>"unexpected_message"</tt> alert.</t>
      <t>The extended key update process can be initiated by either peer after it has
sent a <tt>Finished</tt> message. Implementations that receive an <tt>ExtendedKeyUpdate</tt>
message prior to the sender having sent <tt>Finished</tt> <bcp14>MUST</bcp14> terminate the connection with
an <tt>"unexpected_message"</tt> alert.</t>
      <t>The <tt>KeyShareEntry</tt> carried in a <tt>key_update_request</tt> and in
a <tt>key_update_response</tt> <bcp14>MUST</bcp14> use the group that was negotiated by the client
and server during the initial handshake. An implementation that receives an
algorithm other than previously negotiated <bcp14>MUST</bcp14> terminate the connection
with an <tt>"illegal_parameter"</tt> alert.</t>
      <t><xref target="fig-key-update"/> shows the interaction graphically. First, support
for the functionality in this specification is negotiated in the
<tt>ClientHello</tt> and the <tt>EncryptedExtensions</tt> messages. Then, the
<tt>ExtendedKeyUpdate</tt> exchange is sent to update the application traffic
secrets.</t>
      <t>The extended key update exchange is performed between the initiator
and the responder; either the TLS client or the TLS server may act
as initiator.</t>
      <figure anchor="fig-key-update">
        <name>Extended Key Update Message Exchange in TLS 1.3.</name>
        <artwork><![CDATA[
       Client                                           Server

Key  ^ ClientHello
Exch | + key_share
     | + signature_algorithms
     v + extended_key_update   -------->
                                                  ServerHello  ^ Key
                                                  + key_share  | Exch
                                                               v
                                        {EncryptedExtensions   ^ Server
                                       + extended_key_update}  | Params
                                         {CertificateRequest}  v
                                                {Certificate}  ^
                                          {CertificateVerify}  | Auth
                                                   {Finished}  v
                               <--------
     ^ {Certificate}
Auth | {CertificateVerify}
     v {Finished}              -------->
       [Application Data]N     <------->  [Application Data]N
                                  ...
  [EKU(key_update_request)]N   -------->
                               <--------  [EKU(key_update_response)]N
      [EKU(new_key_update)]N   -------->
                                  ...
       [Application Data]N+1   <------->  [Application Data]N+1

Legend:

    +   Indicates noteworthy extensions sent in the
    previously noted message.

    -   Indicates optional or situation-dependent
    messages/extensions that are not always sent.

    () Indicates messages protected using keys
    derived from a client_early_traffic_secret.

    {} Indicates messages protected using keys
    derived from a [sender]_handshake_traffic_secret.

    []N Indicates messages protected using keys
    derived from [sender]_application_traffic_secret_N.
]]></artwork>
      </figure>
      <t>The <tt>ExtendedKeyUpdate</tt> wire format is:</t>
      <artwork><![CDATA[
enum {
   key_update_request(0),
   key_update_response(1),
   new_key_update(2),
   (255)
} ExtendedKeyUpdateType;

struct {
   ExtendedKeyUpdateType eku_type;
   select (eku_type) {
      case key_update_request: {
          KeyShareEntry key_share;
      }
      case key_update_response: {
          KeyShareEntry key_share;
      }
      case new_key_update: {
          /* empty */
      }
   };
} ExtendedKeyUpdate;
]]></artwork>
      <t>Fields:</t>
      <ul spacing="normal">
        <li>
          <t><tt>eku_type</tt>: the subtype of the <tt>ExtendedKeyUpdate</tt> message.</t>
        </li>
        <li>
          <t><tt>key_share</tt>: key share information. The contents of this field is
determined by the specified group and its corresponding definition
(see <xref section="4.2.8" sectionFormat="of" target="TLS"/>).</t>
        </li>
      </ul>
    </section>
    <section anchor="TLSC">
      <name>TLS 1.3 Considerations</name>
      <t>The following steps are taken by a TLS 1.3 implementation; the steps
executed with DTLS 1.3 differ slightly.</t>
      <ol spacing="normal" type="1"><li>
          <t>The initiator sends <tt>ExtendedKeyUpdate(key_update_request)</tt> carrying a
<tt>KeyShareEntry</tt>. While an extended key update is in progress, the
initiator <bcp14>MUST NOT</bcp14> initiate another key update.</t>
        </li>
        <li>
          <t>Upon receipt, the responder sends its own <tt>KeyShareEntry</tt> in a
<tt>ExtendedKeyUpdate(key_update_response)</tt> message. While an extended
key update is in progress, the responder <bcp14>MUST NOT</bcp14> initiate another
key update. The responder <bcp14>MAY</bcp14> defer sending a response if system load or resource
constraints prevent immediate processing. In such cases, the response <bcp14>MUST</bcp14>
be sent once sufficient resources become available.</t>
        </li>
        <li>
          <t>After the responder sends <tt>ExtendedKeyUpdate(key_update_response)</tt> it
<bcp14>MUST</bcp14> update its send keys.</t>
        </li>
        <li>
          <t>Upon receipt of an <tt>ExtendedKeyUpdate(key_update_response)</tt> the initiator
derives the new secrets from the exchanged key shares. The initiator then updates
its receive keys and sends an empty ExtendedKeyUpdate(new_key_update) message to
complete the process. The initiator <bcp14>MUST NOT</bcp14> defer derivation of the secrets and
sending the ExtendedKeyUpdate(new_key_update) message as it would stall the
communication.</t>
        </li>
        <li>
          <t>After sending <tt>ExtendedKeyUpdate(new_key_update)</tt> initiator <bcp14>MUST</bcp14> update its
send keys.</t>
        </li>
        <li>
          <t>After receiving the initiator’s <tt>ExtendedKeyUpdate(new_key_update)</tt>,
the responder <bcp14>MUST</bcp14> update its receive keys.</t>
        </li>
      </ol>
      <t>Both initiator and responder <bcp14>MUST</bcp14> encrypt their <tt>ExtendedKeyUpdate</tt> messages
with the old keys. Responder <bcp14>MUST</bcp14> ensure that the <tt>ExtendedKeyUpdate(new_key_update)</tt>
encrypted with the old key is received before accepting any messages encrypted with
the new key.</t>
      <t>If TLS peers independently initiate the extended key update and the
requests cross in flight, the <tt>ExtendedKeyUpdate(key_update_request)</tt> with the
lower lexicographic order of the <tt>key_exchange</tt> value in
<tt>KeyShareEntry</tt> <bcp14>MUST</bcp14> be ignored. This prevents each
side from advancing keys by two generations. If the tie-break comparison yields
equality (an event that should be impossible for genuine
asymmetric key pairs), the endpoint <bcp14>MUST</bcp14> treat this as a protocol violation,
send an "unexpected_message" alert, and close the connection.</t>
      <t>The handshake framing uses a single <tt>HandshakeType</tt> for this message
(see <xref target="fig-handshake"/>).</t>
      <figure anchor="fig-handshake">
        <name>TLS 1.3 Handshake Structure.</name>
        <artwork><![CDATA[
      struct {
          HandshakeType msg_type;    /* handshake type */
          uint24 length;             /* bytes in message */
          select (Handshake.msg_type) {
              case client_hello:          ClientHello;
              case server_hello:          ServerHello;
              case end_of_early_data:     EndOfEarlyData;
              case encrypted_extensions:  EncryptedExtensions;
              case certificate_request:   CertificateRequest;
              case certificate:           Certificate;
              case certificate_verify:    CertificateVerify;
              case finished:              Finished;
              case new_session_ticket:    NewSessionTicket;
              case key_update:            KeyUpdate;
              case extended_key_update:   ExtendedKeyUpdate;
          };
      } Handshake;
]]></artwork>
      </figure>
      <section anchor="tls-13-extended-key-update-example">
        <name>TLS 1.3 Extended Key Update Example</name>
        <t>While <xref target="fig-key-update"/> shows the high-level interaction between a
TLS 1.3 client and server, this section shows an example message exchange
with information about the updated keys added.</t>
        <t>There are two phases:</t>
        <ol spacing="normal" type="1"><li>
            <t>The support for the functionality in this specification
is negotiated in the ClientHello and the EncryptedExtensions
messages.</t>
          </li>
          <li>
            <t>Once the initial handshake is completed, a key update can be
triggered.</t>
          </li>
        </ol>
        <t><xref target="fig-key-update2"/> provides an overview of the exchange starting
with the initial negotiation followed by the key update.</t>
        <figure anchor="fig-key-update2">
          <name>Extended Key Update Example.</name>
          <artwork><![CDATA[
       Client                                           Server

Key  ^ ClientHello
Exch | + key_share
     | + signature_algorithms
     v + extended_key_update
                             -------->
                                                  ServerHello  ^ Key
                                                  + key_share  | Exch
                                                               v
                                        {EncryptedExtensions   ^ Server
                                       + extended_key_update}  | Params
                                         {CertificateRequest}  v
                                                {Certificate}  ^
                                          {CertificateVerify}  | Auth
                                                   {Finished}  v
                               <--------
     ^ {Certificate}
Auth | {CertificateVerify}
     v {Finished}              -------->
                                  ...
                              some time later
                                  ...
 [EKU(key_update_request       -------->
       (with key_share))]
                               <-------- [EKU(key_update_response
                                           (with key_share))]
                                        # Server derives new secrets
                                        # and updates SEND keys here
# Client derives new secrets
# and updates RECEIVE keys here
        [EKU(new_key_update)]  -------->
# Client updates SEND keys here
                                    # Server updates RECEIVE keys here
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="DTLSC">
      <name>DTLS 1.3 Considerations</name>
      <t>Unlike TLS 1.3, DTLS 1.3 implementations must take into account that handshake
messages are not transmitted over a reliable transport protocol.</t>
      <t>EKU messages <bcp14>MUST</bcp14> be transmitted reliably, like other DTLS handshake messages. If necessary, EKU messages <bcp14>MAY</bcp14> be fragmented as described in <xref section="5.5" sectionFormat="of" target="DTLS"/>.
Due to the possibility of an <tt>ExtendedKeyUpdate</tt> messages being
lost and thereby preventing the sender of that message from updating its keying
material, receivers <bcp14>MUST</bcp14> retain the pre-update keying material until receipt
and successful decryption of a message using the new keys.</t>
      <t>Due to packet loss and/or reordering, DTLS 1.3 peers <bcp14>MAY</bcp14> receive records from an
earlier epoch. If the necessary keys are available, implementations <bcp14>SHOULD</bcp14> attempt
to process such records; however, they <bcp14>MAY</bcp14> choose to discard them. The exchange
has the following steps:</t>
      <ol spacing="normal" type="1"><li>
          <t>The initiator sends an <tt>ExtendedKeyUpdate(key_update_request)</tt> message, which contains a
key share. While an extended key update is in progress, the initiator <bcp14>MUST NOT</bcp14>
initiate further key updates. This message is subject to DTLS handshake
retransmission, but delivery is only confirmed when the initiator either receives the
corresponding <tt>ExtendedKeyUpdate(key_update_response)</tt> or an ACK.</t>
        </li>
        <li>
          <t>Upon receipt, the responder sends its own <tt>KeyShareEntry</tt> in a
<tt>ExtendedKeyUpdate(key_update_response)</tt> message. While an extended key update
is in progress, the responder <bcp14>MUST NOT</bcp14> initiate further key updates. The responder <bcp14>MAY</bcp14> defer
sending a response if system load or resource constraints prevent immediate processing.
In such cases, the responder <bcp14>MUST</bcp14> acknowledge receipt of the key_update_request with an ACK and, once
sufficient resources become available, retransmit the key_update_response until it is acknowledged by the
initiator. key_update_response and ACK message <bcp14>MAY</bcp14> be received out of order; a late ACK <bcp14>MUST</bcp14> be ignored and <bcp14>MUST NOT</bcp14> affect the extended key update state machine.</t>
        </li>
        <li>
          <t>On receipt of <tt>ExtendedKeyUpdate(key_update_response)</tt> the initiator derives a secret key based on the
exchanged key shares. This message also serves as an implicit acknowledgment of the
initiator's <tt>ExtendedKeyUpdate(key_update_request)</tt>, so no separate ACK is required. The initiator <bcp14>MUST</bcp14>
update its receive keys and epoch value. The initiator <bcp14>MUST NOT</bcp14> defer derivation of the secrets.</t>
        </li>
        <li>
          <t>The initiator transmits an <tt>ExtendedKeyUpdate(new_key_update)</tt> message. This message is subject to DTLS
retransmission until acknowledged.</t>
        </li>
        <li>
          <t>The responder <bcp14>MUST</bcp14> acknowledge the received message by sending an ACK message.</t>
        </li>
        <li>
          <t>After the responder receives the initiator's <tt>ExtendedKeyUpdate(new_key_update)</tt>,
the responder <bcp14>MUST</bcp14> update its send key and epoch value. With the receipt of
that message, the responder <bcp14>MUST</bcp14> also update its receive keys.</t>
        </li>
        <li>
          <t>On receipt of the ACK message, the initiator updates its send key and epoch
value. If this ACK is not received, the initiator re-transmits its
<tt>ExtendedKeyUpdate(new_key_update)</tt> until ACK is received. The key update is
complete once this ACK is processed by the initiator.</t>
        </li>
      </ol>
      <t>The handshake framing uses a single <tt>HandshakeType</tt> for this message
(see <xref target="fig-dtls-handshake"/>).</t>
      <figure anchor="fig-dtls-handshake">
        <name>DTLS 1.3 Handshake Structure.</name>
        <artwork><![CDATA[
       enum {
           client_hello(1),
           server_hello(2),
           new_session_ticket(4),
           end_of_early_data(5),
           encrypted_extensions(8),
           request_connection_id(9),
           new_connection_id(10),
           certificate(11),
           certificate_request(13),
           certificate_verify(15),
           finished(20),
           key_update(24),
           extended_key_update(TBD),  /* new */
           message_hash(254),
           (255)
       } HandshakeType;

       struct {
           HandshakeType msg_type;    /* handshake type */
           uint24 length;             /* bytes in message */
           uint16 message_seq;        /* DTLS-required field */
           uint24 fragment_offset;    /* DTLS-required field */
           uint24 fragment_length;    /* DTLS-required field */
           select (msg_type) {
               case client_hello:          ClientHello;
               case server_hello:          ServerHello;
               case end_of_early_data:     EndOfEarlyData;
               case encrypted_extensions:  EncryptedExtensions;
               case certificate_request:   CertificateRequest;
               case certificate:           Certificate;
               case certificate_verify:    CertificateVerify;
               case finished:              Finished;
               case new_session_ticket:    NewSessionTicket;
               case key_update:            KeyUpdate;
               case extended_key_update:   ExtendedKeyUpdate;
               case request_connection_id: RequestConnectionId;
               case new_connection_id:     NewConnectionId;
           } body;
       } DTLSHandshake;
]]></artwork>
      </figure>
      <section anchor="dtls-13-extended-key-update-example">
        <name>DTLS 1.3 Extended Key Update Example</name>
        <t>The following example illustrates a successful extended key update,
including how the epochs change during the exchange.</t>
        <figure anchor="dtls-key-update">
          <name>Example DTLS 1.3 Extended Key Update: Message Exchange.</name>
          <artwork><![CDATA[
Client                            Server
(Initiator)                       (Responder)

  /---------------------------------------\
 |           Initial Handshake             |
  \---------------------------------------/

[C: tx=3, rx=3]                   [S: tx=3, rx=3]
[Application Data]               -------->
[C: tx=3, rx=3]                   [S: tx=3, rx=3]

[C: tx=3, rx=3]                   [S: tx=3, rx=3]
                                  <--------   [Application Data]
[C: tx=3, rx=3]                   [S: tx=3, rx=3]

  /---------------------------------------\
 |           Some time later ...           |
  \---------------------------------------/

[C: tx=3, rx=3]                   [S: tx=3, rx=3]
[EKU(key_update_request)]  -------->
                                  # no epoch change yet

                           <-------- [EKU(key_update_response)]
# Sent under OLD epoch. Server does NOT bump yet.

# Step 3: initiator bumps RECEIVE epoch on
# receiving key update response-in:
# (rx:=rx+1; tx still old)
[C: tx=3, rx=4]                   [S: tx=3, rx=3]

[EKU(new_key_update)]      -------->
# Sender's NKU is tagged with OLD tx (3).

# Epoch switch point:
# Step 6: responder bumps BOTH tx and rx on NKU-in:
[C: tx=3, rx=4]                   [S: tx=4, rx=4]

                           <-------- [ACK] (tag=new)

# Step 7: initiator bumps SEND epoch on ACK-in:
[C: tx=4, rx=4]                   [S: tx=4, rx=4]

[Application Data]         -------->
[C: tx=4, rx=4]                   [S: tx=4, rx=4]

                           <--------   [Application Data]
[C: tx=4, rx=4]                   [S: tx=4, rx=4]
]]></artwork>
        </figure>
        <t><xref target="dtls-table"/> shows the steps, the message in flight, and the epoch changes on both sides.
The A/B -&gt; X/Y notation indicates the change of epoch values for tx/rx before and after
the message transmission.</t>
        <figure anchor="dtls-table">
          <name>Example DTLS 1.3 Extended Key Update: Epoch Changes.</name>
          <artwork><![CDATA[
+--------------------+----------------+--------------+
| Message            | Client tx/rx   | Server tx/rx |
+--------------------+----------------+--------------+
| APP ------------>  | 3/3 -> 3/3     | 3/3 -> 3/3   |
| <------------ APP  | 3/3 -> 3/3     | 3/3 -> 3/3   |
| req -------------> | 3/3 -> 3/3     | 3/3 -> 3/3   |
| <------------ resp | 3/3 -> 3/4     | 3/3 -> 3/3   | <- step 3
| NKU  ------------> | 3/4 -> 3/4     | 3/3 -> 4/4   | <- step 6
| <------------- ACK | 3/4 -> 4/4     | 4/4 -> 4/4   | <- step 7
| APP -------------> | 4/4 -> 4/4     | 4/4 -> 4/4   |
| <------------- APP | 4/4 -> 4/4     | 4/4 -> 4/4   |
+--------------------+----------------+--------------+
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="key_update">
      <name>Updating Traffic Keys</name>
      <t>When the extended key update message exchange is completed both peers
have successfully updated their application traffic keys. The
key derivation function described in this document is used to perform
this update.</t>
      <t>The design of the key derivation function for computing the next
generation of application_traffic_secret is motivated by the desire
to include</t>
      <ul spacing="normal">
        <li>
          <t>a secret derived from the (EC)DHE exchange (or from the hybrid
key exchange / PQ-KEM exchange),</t>
        </li>
        <li>
          <t>a secret that allows the new key exchange to be cryptographically
bound to the previously established secret,</t>
        </li>
        <li>
          <t>a transcript hash that is updated after each Extended Key Update exchange
by hashing together the previous transcript hash value and the current
ExtendedKeyUpdate(key_update_request) and ExtendedKeyUpdate(key_update_response)
messages, which contain the key shares, thereby binding the encapsulated shared
secret ciphertext to the IKM in the case of PQ/T hybrid or PQC key exchange and
cryptographically binding the newly derived secrets to the prior handshake
transcript and all preceding EKU exchanges, as well as to the current EKU
exchange, and</t>
        </li>
        <li>
          <t>new label strings to distinguish it from the key derivation used in
TLS 1.3.</t>
        </li>
      </ul>
      <t>The transcript_hash_N denotes the transcript hash value associated with
generation N. During each Extended Key Update exchange, the transcript
hash value for the next generation is computed as follows:</t>
      <artwork><![CDATA[
 transcript_hash_N+1 = Transcript-Hash(transcript_hash_N ||
                                       EKU(key_update_request) ||
                                       EKU(key_update_response))
]]></artwork>
      <t>Once transcript_hash_N+1 has been computed, transcript_hash_N can be deleted.
No prior transcript hash values need to be retained for future EKU exchanges.
transcript_hash_0 denotes the transcript hash of the initial TLS handshake,
covering all messages from the ClientHello up to and including the
client Finished message.</t>
      <t>The following diagram shows the key derivation hierarchy.</t>
      <artwork><![CDATA[

       Main Secret N
             |
             v
       Derive-Secret(., "derived", "")
             |
             v
 (EC)DHE -> HKDF-Extract = Main Secret N+1
             |
             +-----> Derive-Secret(., "c ap traffic",
             |                     transcript_hash_N+1)
             |                = client_application_traffic_secret_N+1
             |
             +-----> Derive-Secret(., "s ap traffic",
             |                     transcript_hash_N+1)
             |                = server_application_traffic_secret_N+1
             |
             +-----> Derive-Secret(., "exp master",
             |                     transcript_hash_N+1)
             |                = exporter_secret_N+1
             |
             +-----> Derive-Secret(., "res master",
             |                     transcript_hash_N+1)
                              = resumption_main_secret_N+1
]]></artwork>
      <t>During the initial handshake, the Main Secret is generated (see
<xref section="7.1" sectionFormat="of" target="TLS"/>). Since the Main Secret
is discarded during the key derivation procedure, a derived value is
stored. This stored value then serves as the input salt to the first
key update procedure that incorporates the ephemeral (EC)DHE-
established value as input keying material (IKM) to produce
main_secret_{N+1}. The derived value from this new master secret
serves as input salt to the subsequent key update procedure, which
also incorporates a fresh ephemeral (EC)DHE value as IKM. This
process is repeated for each additional key update procedure.</t>
      <t>The traffic keys are re-derived from
client_application_traffic_secret_N+1 and
server_application_traffic_secret_N+1, as described in
<xref section="7.3" sectionFormat="of" target="TLS"/>.</t>
      <t>Once client_/server_application_traffic_secret_N+1 and its associated
traffic keys have been computed, implementations <bcp14>SHOULD</bcp14> delete
client_/server_application_traffic_secret_N and its associated
traffic keys as soon as possible. Note: The
client_/server_application_traffic_secret_N and its associated
traffic keys can only be deleted by the responder after receiving the
<tt>ExtendedKeyUpdate(new_key_update)</tt> message.</t>
      <t>Once client_/server_application_traffic_secret_N+1 and the corresponding traffic
keys are in use, all subsequent records, including alerts and post-handshake
messages <bcp14>MUST</bcp14> be protected using those keys.</t>
      <t>When using this extension, it is important to consider its interaction with
PSK-based resumption using PSKs established via the NewSessionTicket mechanism
defined in <xref target="TLS"/>.</t>
      <t>Extended Key Update provides post-compromise recovery for the connection in which
it is performed. The recovery guarantees of this mechanism depend on the assumed
compromise model. In a compromise model where exposure of endpoint memory reveals PSKs,
established via the NewSessionTicket mechanism, those PSKs are sufficient to establish
new authenticated TLS connections. Even if an implementation invalidates previously
issued PSKs upon completion of the EKU exchange, an attacker who has obtained such
a PSK may initiate and complete a resumed session prior to that invalidation. In such
a model, Extended Key Update does not prevent use of previously issued PSKs.</t>
      <t>Accordingly, endpoints that enable EKU and operate under a compromise model in which
endpoint memory exposure reveals PSKs <bcp14>MUST</bcp14> disable resumption.</t>
      <t>In deployment models where PSKs are protected using secure storage or isolation mechanisms
that prevent their exposure under the assumed compromise model, resumption may remain
compatible with the intended recovery guarantees of Extended Key Update. To prevent rollback
of the recovering connection to pre-update keying material, an endpoint <bcp14>MUST</bcp14> invalidate
all PSKs established under the previous application traffic secrets immediately after
installing the updated application traffic secrets derived from the EKU key schedule.
This ensures that PSKs derived from earlier keying material cannot be used after the
EKUs completes. This guidance applies to deployments where PSKs are assumed not to be
compromised.</t>
    </section>
    <section anchor="post-quantum-cryptography-considerations">
      <name>Post-Quantum Cryptography Considerations</name>
      <t>Hybrid key exchange refers to the simultaneous use of multiple key
exchange algorithms, with the resulting shared secret derived by
combining the outputs of each. The goal of this approach is to maintain
security even if all but one of the component algorithms are later found
to be vulnerable.</t>
      <t>The transition to post-quantum cryptography has motivated the adoption of
hybrid key exchanges in TLS, as described in
<xref target="TLS-HYBRID"/>. Specific hybrid groups
have been registered in <xref target="TLS-ECDHE-MLKEM"/>.
When hybrid key exchange is used, the <tt>key_exchange</tt> field of each
<tt>KeyShareEntry</tt> in the initial handshake is formed by concatenating
the <tt>key_exchange</tt> fields of the constituent algorithms. This same
approach is reused during the Extended Key Update, when new key
shares are exchanged.</t>
      <t>The specification in <xref target="TLS-MLKEM"/> registers the lattice-based
ML-KEM algorithm and its variants, such as ML-KEM-512, ML-KEM-768 and
ML-KEM-1024. The KEM encapsulation key or KEM ciphertext is represented
as a 'KeyShareEntry' field. This same approach is reused during the
Extended Key Update, when new key shares are exchanged.</t>
    </section>
    <section anchor="sslkeylogfile-update">
      <name>SSLKEYLOGFILE Update</name>
      <t>As a successful extended key update exchange invalidates previous secrets,
SSLKEYLOGFILE <xref target="TLS-KEYLOGFILE"/> needs to be populated with new
entries. As a result, two additional secret labels are utilized in the
SSLKEYLOGFILE:</t>
      <ol spacing="normal" type="1"><li>
          <t><tt>CLIENT_TRAFFIC_SECRET_N+1</tt>: identifies the
client_application_traffic_secret_N+1 in the key schedule</t>
        </li>
        <li>
          <t><tt>SERVER_TRAFFIC_SECRET_N+1</tt>: identifies the
server_application_traffic_secret_N+1 in the key schedule</t>
        </li>
        <li>
          <t><tt>EXPORTER_SECRET_N+1</tt>: identifies the
exporter_secret_N+1 in the key schedule</t>
        </li>
      </ol>
      <t>Similar to other entries in the SSLKEYLOGFILE, the label is followed by the
32-byte value of the Random field from the ClientHello message that
established the TLS connection, and the corresponding secret encoded in
hexadecimal.</t>
      <t>SSLKEYLOGFILE entries for the extended key update <bcp14>MUST NOT</bcp14> be produced if
SSLKEYLOGFILE was not used for other secrets in the handshake.</t>
      <t>Note that each successful Extended Key Update invalidates all previous
SSLKEYLOGFILE secrets including past iterations of <tt>CLIENT_TRAFFIC_SECRET_</tt>,
<tt>SERVER_TRAFFIC_SECRET_</tt> and <tt>EXPORTER_SECRET_</tt>.</t>
    </section>
    <section anchor="exporter">
      <name>Exporter</name>
      <section anchor="post-compromise-security-for-the-initial-exporter-secret">
        <name>Post-Compromise Security for the Initial Exporter Secret</name>
        <t>The TLS 1.3 Key Schedule, see Figure 5 of <xref target="TLS"/>, derives the exporter_secret from the main secret. This
exporter_secret is static for the lifetime of the connection and is not updated by a standard key update.</t>
        <t>A core design goal of this specification is not met if the exporter_secret does not change.
Therefore, this document defines an exporter interface that derives a fresh exporter secret
whenever new application traffic keys are updated through the EKU.</t>
        <t>If the initial exporter secret for this new interface were identical to exporter_secret,
then compromising exporter_secret at any point during the lifetime of the connection
would enable an attacker to recompute all exporter outputs derived from it.
This would break post-compromise security for exported keying material.</t>
        <t>Therefore, the initial exporter secret used by the exporter interface defined in
this document, i.e., the exporter output available prior to the first Extended
Key Update, <bcp14>MUST</bcp14> be distinct from the exporter_secret. This separation
ensures that compromise of the TLS exporter interface does not compromise outputs
derived from the exporter interface defined in this document.</t>
        <t>Prior to the first Extended Key Update, the exporter interface provides an
initial exporter secret, denoted exporter_secret_0. This secret is derived
from the TLS main secret and the handshake transcript, but is cryptographically
independent of the TLS exporter_secret. It is computed as follows:</t>
        <artwork><![CDATA[
exporter_secret_0 =
Derive-Secret(Main Secret,
"exporter eku",
Transcript-Hash(ClientHello..server Finished))
]]></artwork>
        <t>Applications that require post-compromise security <bcp14>MUST</bcp14> use the exporter
interface defined in this document. This exporter interface is independent of
the TLS exporter defined in <xref section="7.5" sectionFormat="of" target="TLS"/>, which continues to use a
static <tt>exporter_secret</tt> for the lifetime of the connection for compatiblity with "legacy" applications.</t>
      </section>
      <section anchor="exporter-usage-after-extended-key-update">
        <name>Exporter Usage After Extended Key Update</name>
        <t>Protocols such as DTLS-SRTP and DTLS-over-SCTP rely on TLS or DTLS for
key establishment, but reuse portions of the derived keying material for
their own specific purposes. These protocols use the TLS exporter defined
in <xref section="7.5" sectionFormat="of" target="TLS"/>. Exporters are also used for deriving
authentication related values such as nonces, as described in <xref target="RFC9729"/>.</t>
        <t>Once the Extended Key Update mechanism is complete, such protocols would
need to use the newly derived exporter secret to generate Exported Keying Material
(EKM) to protect packets. The "sk" derived in the <xref target="key_update"/> will be
used as the "Secret" in the exporter function, defined in
<xref section="7.5" sectionFormat="of" target="TLS"/>, to generate EKM, ensuring that
the exported keying material is aligned with the updated security context.
The newly derived exporter secret is cryptographically independent of
previous exporter secrets.</t>
        <t>When a new exporter secret becomes active following a successful Extended
Key Update, the TLS or DTLS implementation would have to provide an
asynchronous notification to the application indicating that:</t>
        <ul spacing="normal">
          <li>
            <t>A new epoch has become active, and the (D)TLS implementation can
include the corresponding epoch identifier. Applications receiving an
epoch identifier can use it to request keying material for that
specific epoch through an epoch-aware exporter interface.
In TLS, this identifier represents a local logical counter that may differ between peers.</t>
          </li>
        </ul>
        <t>Applications are notified that a new epoch is active only after both peers have completed
the Extended Key Update exchange and switched to the new traffic keys.</t>
        <ul spacing="normal">
          <li>
            <t>In TLS, the initiator triggers notification after Step 5 in <xref target="TLSC"/>,
and the responder triggers notification after Step 4 in <xref target="TLSC"/>.</t>
          </li>
          <li>
            <t>In DTLS, the initiator triggers notification to the application
after Step 7 in <xref target="DTLSC"/>, and the responder triggers notification
after Step 9 in <xref target="DTLSC"/>.</t>
          </li>
        </ul>
        <t>The corresponding EKM is obtained by the application through the TLS/DTLS exporter
interface using its chosen label and context values as defined in <xref section="4" sectionFormat="of" target="RFC5705"/>.</t>
        <t>To prevent desynchronization, the application will have to retain both the
previous and the newly derived exporter secrets for a short period. For TLS,
the previous exporter secret would be discarded once data derived from the
new exporter has been successfully processed, and no records protected with
the old exporter secret are expected to arrive. For DTLS, the previous exporter
secret needs to be retained until the retention timer expires for the prior epoch,
to allow for processing of packets that may arrive out of order.  The retention policy
for exporter secrets is application-specific. For example, in DTLS-SRTP,
the application might retain the previous exporter secret until its
replay window no longer accepts packets protected with keys derived from that
secret, as described in Section 3.3.2 of <xref target="RFC3711"/>.</t>
      </section>
    </section>
    <section anchor="exported">
      <name>Use of Post-Handshake Authentication and Exported Authenticators with Extended Key Update</name>
      <t>EKU provides fresh traffic secrets, but EKU alone does not authenticate that both endpoints
derived the same updated keys. An attacker that temporarily compromises an endpoint
may later act as an active MitM capable of interfering with the EKU exchange.
Such an attacker can cause the peers to transition to divergent traffic secrets without detection,
but cannot compromise the endpoint to derive secrets after the new epoch is established.
To confirm that both peers transitioned to the same new key state, TLS 1.3 provides two
mechanisms: Post-Handshake Certificate-Based Client Authentication and
Exported Authenticators <xref target="RFC9261"/>.</t>
      <section anchor="post-handshake-certificate-based-client-authentication">
        <name>Post-Handshake Certificate-Based Client Authentication</name>
        <t>When Post-Handshake Certificate-Based Client Authentication (Section 4.6.2 of <xref target="TLS"/>) is
performed after an Extended Key Update (EKU) is complete, the Handshake Context used for
the transcript hash is updated. It consists of transcript_hash_N+1 concatenated
with the CertificateRequest message. The Finished message is computed using a
MAC key derived from the Base Key of the new epoch (client_application_traffic_secret_N+1).
This confirms that both peers are operating with the same updated traffic keys
and completes an authenticated transition after the EKU.</t>
      </section>
      <section anchor="exported-authenticators">
        <name>Exported Authenticators</name>
        <t>This document updates Section 5.1 of <xref target="RFC9261"/> to specify that, after an
Extended Key Update has completed, the Handshake Context and Finished MAC Key used for
Exported Authenticators <bcp14>MUST</bcp14> be derived from the exporter secret associated with the current epoch.
Implementations that support the epoch-aware Exported Authenticators interface <bcp14>MUST</bcp14> provide a means
for applications to request the generation or validation of Exported Authenticators using
the exporter secret for a specific epoch.</t>
        <t>The Handshake Context and Finished MAC Key used in both the CertificateVerify message
(Section 5.2.2 of <xref target="RFC9261"/>) and the Finished message (Section 5.2.3 of <xref target="RFC9261"/>)
are derived from the exporter secret associated with the current epoch.
If a MitM interferes with the EKU exchange and causes the peers to derive different traffic
and exporter secrets, their Handshake Contexts and Finished MAC Keys will differ.
As a result, validation procedures specified in Section 5.2.4 of <xref target="RFC9261"/> will fail, thereby
detecting the divergence of key state between peers.</t>
        <t>A new optional API <bcp14>SHOULD</bcp14> be defined to permit applications to request or verify
Exported Authenticators for a specific exporter epoch. As discussed in Section 7
of <xref target="RFC9261"/>, this can, as an exception, be implemented at the application
layer when the epoch-aware TLS exporter is available. The APIs defined in <xref target="RFC9261"/>
remain unchanged, so existing applications continue to operate without
modification. The epoch-aware API accepts an epoch identifier; when present,
the (D)TLS implementation <bcp14>MUST</bcp14> derive the Handshake Context and Finished MAC Key
from the exporter secret associated with that epoch. When Exported Authenticators
are generated using the epoch-aware Exported Authenticators interface, the
epoch identifier used for their derivation can be conveyed in the
certificate_request_context field, allowing the peer, particularly in
DTLS where records may be reordered, to determine the correct exporter
secret for validation.</t>
      </section>
      <section anchor="interaction-of-extended-key-update-and-post-handshake-authentication">
        <name>Interaction of Extended Key Update and Post-Handshake Authentication</name>
        <t>EKU and post-handshake authentication may both occur during the lifetime
of a (D)TLS connection.  Post-Handshake Certificate-Based Client
Authentication (PHA) is bound to the handshake transcript and computes
its <tt>Finished</tt> message as specified in Section 4.4 of <xref target="TLS"/>, using a key
derived from the application traffic secret that is active at the time
the <tt>CertificateRequest</tt> is sent. Therefore, specific ordering constraints
are required to preserve cryptographic consistency.</t>
        <section anchor="post-handshake-certificate-based-client-authentication-1">
          <name>Post-Handshake Certificate-Based Client Authentication</name>
          <t>An endpoint <bcp14>MUST NOT</bcp14> complete an EKU exchange in a manner that
transitions to new application traffic secrets while a PHA exchange
is in progress.</t>
          <t>The following constraints apply to both TLS 1.3 and DTLS 1.3:</t>
          <ul spacing="normal">
            <li>
              <t>An endpoint <bcp14>MUST NOT</bcp14> initiate PHA while an EKU exchange is in progress.</t>
            </li>
            <li>
              <t>If PHA has been initiated and the corresponding authentication exchange
has not yet completed, neither endpoint <bcp14>MUST</bcp14> initiate an EKU exchange.</t>
            </li>
            <li>
              <t>In a cross-flight condition, if a (D)TLS client sends an EKU request and,
before receiving a response, receives a <tt>CertificateRequest</tt> from the
(D)TLS server, the endpoints <bcp14>MUST</bcp14> defer completion of the EKU exchange
and proceed with the post-handshake authentication exchange. The endpoints
<bcp14>MUST NOT</bcp14> transition to new application traffic secrets until the
authentication exchange has completed.</t>
            </li>
          </ul>
          <t>In DTLS, deferred EKU request is acknowledged as specified in <xref target="DTLSC"/>.</t>
        </section>
        <section anchor="exported-authenticators-1">
          <name>Exported Authenticators</name>
          <t>Because the exporter interface defined in this document is epoch-aware,
the exporter secret used for an Exported Authenticator exchange is
explicitly determined by the epoch selected by the application.</t>
          <t>As a result, cross-flight exchanges of EKU and <tt>AuthenticatorRequest</tt>
messages do not introduce cryptographic ambiguity. Therefore, no
serialization requirement is imposed between EKU and Exported Authenticator
exchanges.</t>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This section discusses additional security and operational aspects introduced by the Extended Key Update mechanism. All security considerations of TLS 1.3 <xref target="TLS"/> and DTLS 1.3 <xref target="DTLS"/> continue to apply.</t>
      <section anchor="scope">
        <name>Scope of Key Compromise</name>
        <t>Extended Key Update assumes a transient compromise of the current application
traffic keys, not a persistent attacker with ongoing access to key material.
The procedure itself does not rely on long-term private keys; those are assumed
to remain secure, as they are typically stored in a secure element, such as a
Trusted Execution Environment (TEE), Hardware Security Module (HSM),
or Trusted Platform Module (TPM). In contrast, application traffic
keys are stored within the rich operating system, where short-term exposure due
to memory disclosure or transient compromise may occur. Post-compromise security
can be re-established, provided the compromise is no longer active when an
Extended Key Update is performed.</t>
        <t>Extended Key Update can restore confidentiality only if the attacker no longer
has access to either peer. If an adversary retains access to current application traffic
keys and can act as a man-in-the-middle during the Extended Key Update, then the
update cannot restore security unless <xref target="exported"/> is used.</t>
        <t>If one of the mechanisms defined in <xref target="exported"/> is not used, the attacker can
impersonate each endpoint, substitute EKU messages, and maintain control
of the communication. When Post-handshake Certificate-Based Client Authentication
or the modified Exported Authenticator mechanism is used, the authentication messages
are bound to the keys established after the EKU. Any modification or substitution of
EKU messages therefore becomes detectable, preventing this attack.</t>
        <t>If a compromise occurs before the handshake completes, the ephemeral key exchange,
client_handshake_traffic_secret, server_handshake_traffic_secret, and the initial
client_/server_application_traffic_secret could be exposed. In that case, only the
initial handshake messages and the application data encrypted under the initial
client_/server_application_traffic_secret can be decrypted until the Extended Key
Update procedure completes. The Extended Key Update procedure derives fresh
application_traffic_secrets from a new ephemeral key exchange, ensuring that all
subsequent application data remains confidential.</t>
      </section>
      <section anchor="post-compromise-security">
        <name>Post-Compromise Security</name>
        <t>Extended Key Update provides post-compromise security for long-lived TLS sessions.
To ensure post-compromise security guarantees:</t>
        <ul spacing="normal">
          <li>
            <t>Each update <bcp14>MUST</bcp14> use freshly generated ephemeral key-exchange material. Implementations <bcp14>MUST NOT</bcp14> reuse
ephemeral key-exchange material across updates or across TLS sessions.</t>
          </li>
        </ul>
      </section>
      <section anchor="denial-of-service-dos">
        <name>Denial-of-Service (DoS)</name>
        <t>The Extended Key Update mechanism increases computational and state-management overhead. A malicious peer could attempt to exhaust CPU or memory resources by initiating excessive update requests.</t>
        <t>Implementations <bcp14>SHOULD</bcp14> apply the following mitigations:</t>
        <ul spacing="normal">
          <li>
            <t>Limit the frequency of accepted Extended Key Update requests per session.</t>
          </li>
          <li>
            <t>A peer that has sent an Extended Key Update <bcp14>MUST NOT</bcp14> initiate another until the previous update completes.
If a peer violates this rule, the receiving peer <bcp14>MUST</bcp14> treat it as a protocol violation, send an "unexpected_message" alert, and terminate the connection.</t>
          </li>
        </ul>
      </section>
      <section anchor="operational-guidance">
        <name>Operational Guidance</name>
        <t>Deployments <bcp14>SHOULD</bcp14> evaluate Extended Key Update performance under load and fault conditions, such as high-frequency or concurrent updates. TLS policies <bcp14>SHOULD</bcp14> define explicit rate limits that balance post-compromise security benefits against potential DoS exposure.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="tls-flags">
        <name>TLS Flags</name>
        <t>IANA is requested to add the following entry to the "TLS Flags"
extension registry <xref target="TLS-Ext-Registry"/>:</t>
        <ul spacing="normal">
          <li>
            <t>Value: TBD1</t>
          </li>
          <li>
            <t>Flag Name: extended_key_update</t>
          </li>
          <li>
            <t>Messages: CH, EE</t>
          </li>
          <li>
            <t>Recommended: Y</t>
          </li>
          <li>
            <t>Reference: [This document]</t>
          </li>
        </ul>
      </section>
      <section anchor="tls-handshaketype">
        <name>TLS HandshakeType</name>
        <t>IANA is requested to add the following entry to the "TLS HandshakeType"
registry <xref target="TLS-Ext-Registry"/>:</t>
        <ul spacing="normal">
          <li>
            <t>Value: TBD2</t>
          </li>
          <li>
            <t>Description: extended_key_update</t>
          </li>
          <li>
            <t>DTLS-OK: Y</t>
          </li>
          <li>
            <t>Reference: [This document]</t>
          </li>
        </ul>
      </section>
      <section anchor="iana-eku-registry">
        <name>ExtendedKeyUpdate Message Subtypes Registry</name>
        <t>IANA is requested to create a new registry "TLS ExtendedKeyUpdate Message Subtypes", within the
existing "Transport Layer Security (TLS) Parameters" registry <xref target="TLS-Ext-Registry"/>.
This new registry reserves types used for Extended Key Update entries.
The initial contents of this registry are as follows.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Description</th>
              <th align="left">DTLS-OK</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">key_update_request</td>
              <td align="left">Y</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">key_update_response</td>
              <td align="left">Y</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">new_key_update</td>
              <td align="left">Y</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">3-255</td>
              <td align="left">Unassigned</td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
          </tbody>
        </table>
        <t>New assignments in the "TLS ExtendedKeyUpdate Types" registry will be administered by
IANA through Specification Required procedure <xref target="RFC8126"/>.  The role of the
designated expert is described in <xref section="17" sectionFormat="of" target="RFC8447"/>.  The designated expert
<xref target="RFC8126"/> ensures that the specification is publicly available.  It is sufficient to
have an Internet-Draft (that is posted and never published as an RFC) or to cite a
document from another standards body, industry consortium, or any other location.
An expert may provide more in-depth reviews, but their approval should not be taken as an
endorsement of the ExtendedKeyUpdate Message Subtype.</t>
      </section>
      <section anchor="sslkeylogfile-labels">
        <name>SSLKEYLOGFILE labels</name>
        <t>IANA is requested to add the following entries to the "TLS SSLKEYLOGFILE Labels"
extension registry <xref target="TLS-Ext-Registry"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
              <th align="left">Comment</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">CLIENT_TRAFFIC_SECRET_N+1</td>
              <td align="left">Secret protecting client records after Extended Key Update</td>
              <td align="left">This document</td>
              <td align="left">N represents iteration of Extended Key Update</td>
            </tr>
            <tr>
              <td align="left">SERVER_TRAFFIC_SECRET_N+1</td>
              <td align="left">Secret protecting server records after Extended Key Update</td>
              <td align="left">This document</td>
              <td align="left">N represents iteration of Extended Key Update</td>
            </tr>
            <tr>
              <td align="left">EXPORTER_SECRET_N+1</td>
              <td align="left">Exporter secret after Extended Key Update</td>
              <td align="left">This document</td>
              <td align="left">N represents iteration of Extended Key Update</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="TLS">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
              <organization>Independent</organization>
            </author>
            <date day="13" month="September" year="2025"/>
            <abstract>
              <t>   This document specifies version 1.3 of the Transport Layer Security
   (TLS) protocol.  TLS allows client/server applications to communicate
   over the Internet in a way that is designed to prevent eavesdropping,
   tampering, and message forgery.

   This document updates RFCs 5705, 6066, 7627, and 8422 and obsoletes
   RFCs 5077, 5246, 6961, 8422, and 8446.  This document also specifies
   new requirements for TLS 1.2 implementations.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-rfc8446bis-14"/>
        </reference>
        <reference anchor="DTLS">
          <front>
            <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
            <date month="April" year="2022"/>
            <abstract>
              <t>This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability. Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
              <t>This document obsoletes RFC 6347.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9147"/>
          <seriesInfo name="DOI" value="10.17487/RFC9147"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="TLS-FLAGS">
          <front>
            <title>A Flags Extension for TLS 1.3</title>
            <author fullname="Yoav Nir" initials="Y." surname="Nir">
              <organization>Dell Technologies</organization>
            </author>
            <date day="14" month="September" year="2025"/>
            <abstract>
              <t>   A number of extensions are proposed in the TLS working group that
   carry no interesting information except the 1-bit indication that a
   certain optional feature is supported.  Such extensions take 4 octets
   each.  This document defines a flags extension that can provide such
   indications at an average marginal cost of 1 bit each.  More
   precisely, it provides as many flag extensions as needed at 4 + the
   order of the last set bit divided by 8.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-tlsflags-16"/>
        </reference>
        <reference anchor="RFC9729">
          <front>
            <title>The Concealed HTTP Authentication Scheme</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="D. Oliver" initials="D." surname="Oliver"/>
            <author fullname="J. Hoyland" initials="J." surname="Hoyland"/>
            <date month="February" year="2025"/>
            <abstract>
              <t>Most HTTP authentication schemes are probeable in the sense that it is possible for an unauthenticated client to probe whether an origin serves resources that require authentication. It is possible for an origin to hide the fact that it requires authentication by not generating Unauthorized status codes; however, that only works with non-cryptographic authentication schemes: cryptographic signatures require a fresh nonce to be signed. Prior to this document, there was no existing way for the origin to share such a nonce without exposing the fact that it serves resources that require authentication. This document defines a new non-probeable cryptographic authentication scheme.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9729"/>
          <seriesInfo name="DOI" value="10.17487/RFC9729"/>
        </reference>
        <reference anchor="RFC5705">
          <front>
            <title>Keying Material Exporters for Transport Layer Security (TLS)</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="March" year="2010"/>
            <abstract>
              <t>A number of protocols wish to leverage Transport Layer Security (TLS) to perform key establishment but then use some of the keying material for their own purposes. This document describes a general mechanism for allowing that. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5705"/>
          <seriesInfo name="DOI" value="10.17487/RFC5705"/>
        </reference>
        <reference anchor="RFC3711">
          <front>
            <title>The Secure Real-time Transport Protocol (SRTP)</title>
            <author fullname="M. Baugher" initials="M." surname="Baugher"/>
            <author fullname="D. McGrew" initials="D." surname="McGrew"/>
            <author fullname="M. Naslund" initials="M." surname="Naslund"/>
            <author fullname="E. Carrara" initials="E." surname="Carrara"/>
            <author fullname="K. Norrman" initials="K." surname="Norrman"/>
            <date month="March" year="2004"/>
            <abstract>
              <t>This document describes the Secure Real-time Transport Protocol (SRTP), a profile of the Real-time Transport Protocol (RTP), which can provide confidentiality, message authentication, and replay protection to the RTP traffic and to the control traffic for RTP, the Real-time Transport Control Protocol (RTCP). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3711"/>
          <seriesInfo name="DOI" value="10.17487/RFC3711"/>
        </reference>
        <reference anchor="RFC9261">
          <front>
            <title>Exported Authenticators in TLS</title>
            <author fullname="N. Sullivan" initials="N." surname="Sullivan"/>
            <date month="July" year="2022"/>
            <abstract>
              <t>This document describes a mechanism that builds on Transport Layer Security (TLS) or Datagram Transport Layer Security (DTLS) and enables peers to provide proof of ownership of an identity, such as an X.509 certificate. This proof can be exported by one peer, transmitted out of band to the other peer, and verified by the receiving peer.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9261"/>
          <seriesInfo name="DOI" value="10.17487/RFC9261"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="ANSSI" target="https://cyber.gouv.fr/sites/default/files/2012/09/NT_IPsec_EN.pdf">
          <front>
            <title>Recommendations for securing networks with IPsec, Technical Report</title>
            <author>
              <organization>ANSSI</organization>
            </author>
            <date year="2015" month="August"/>
          </front>
        </reference>
        <reference anchor="TLS-Ext-Registry" target="https://www.iana.org/assignments/tls-extensiontype-values">
          <front>
            <title>Transport Layer Security (TLS) Extensions</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date year="2023" month="November"/>
          </front>
        </reference>
        <reference anchor="CCG16" target="https://doi.org/10.1109/csf.2016.19">
          <front>
            <title>On Post-compromise Security</title>
            <author>
              <organization>IEEE</organization>
            </author>
            <date year="2016" month="August"/>
          </front>
        </reference>
        <reference anchor="TLS-RENEGOTIATION">
          <front>
            <title>Transport Layer Security (TLS) Renegotiation Indication Extension</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="M. Ray" initials="M." surname="Ray"/>
            <author fullname="S. Dispensa" initials="S." surname="Dispensa"/>
            <author fullname="N. Oskov" initials="N." surname="Oskov"/>
            <date month="February" year="2010"/>
            <abstract>
              <t>Secure Socket Layer (SSL) and Transport Layer Security (TLS) renegotiation are vulnerable to an attack in which the attacker forms a TLS connection with the target server, injects content of his choice, and then splices in a new TLS connection from a client. The server treats the client's initial TLS handshake as a renegotiation and thus believes that the initial data transmitted by the attacker is from the same entity as the subsequent client data. This specification defines a TLS extension to cryptographically tie renegotiations to the TLS connections they are being performed over, thus preventing this attack. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5746"/>
          <seriesInfo name="DOI" value="10.17487/RFC5746"/>
        </reference>
        <reference anchor="CONFIDENTIALITY">
          <front>
            <title>Confidentiality in the Face of Pervasive Surveillance: A Threat Model and Problem Statement</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="B. Schneier" initials="B." surname="Schneier"/>
            <author fullname="C. Jennings" initials="C." surname="Jennings"/>
            <author fullname="T. Hardie" initials="T." surname="Hardie"/>
            <author fullname="B. Trammell" initials="B." surname="Trammell"/>
            <author fullname="C. Huitema" initials="C." surname="Huitema"/>
            <author fullname="D. Borkmann" initials="D." surname="Borkmann"/>
            <date month="August" year="2015"/>
            <abstract>
              <t>Since the initial revelations of pervasive surveillance in 2013, several classes of attacks on Internet communications have been discovered. In this document, we develop a threat model that describes these attacks on Internet confidentiality. We assume an attacker that is interested in undetected, indiscriminate eavesdropping. The threat model is based on published, verified attacks.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7624"/>
          <seriesInfo name="DOI" value="10.17487/RFC7624"/>
        </reference>
        <reference anchor="TLS-HYBRID">
          <front>
            <title>Hybrid key exchange in TLS 1.3</title>
            <author fullname="Douglas Stebila" initials="D." surname="Stebila">
              <organization>University of Waterloo</organization>
            </author>
            <author fullname="Scott Fluhrer" initials="S." surname="Fluhrer">
              <organization>Cisco Systems</organization>
            </author>
            <author fullname="Shay Gueron" initials="S." surname="Gueron">
              <organization>University of Haifa and Meta</organization>
            </author>
            <date day="7" month="September" year="2025"/>
            <abstract>
              <t>   Hybrid key exchange refers to using multiple key exchange algorithms
   simultaneously and combining the result with the goal of providing
   security even if a way is found to defeat the encryption for all but
   one of the component algorithms.  It is motivated by transition to
   post-quantum cryptography.  This document provides a construction for
   hybrid key exchange in the Transport Layer Security (TLS) protocol
   version 1.3.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-hybrid-design-16"/>
        </reference>
        <reference anchor="TLS-ECDHE-MLKEM">
          <front>
            <title>Post-quantum hybrid ECDHE-MLKEM Key Agreement for TLSv1.3</title>
            <author fullname="Kris Kwiatkowski" initials="K." surname="Kwiatkowski">
              <organization>PQShield</organization>
            </author>
            <author fullname="Panos Kampanakis" initials="P." surname="Kampanakis">
              <organization>AWS</organization>
            </author>
            <author fullname="Bas Westerbaan" initials="B." surname="Westerbaan">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Douglas Stebila" initials="D." surname="Stebila">
              <organization>University of Waterloo</organization>
            </author>
            <date day="8" month="February" year="2026"/>
            <abstract>
              <t>   This draft defines three hybrid key agreement mechanisms for TLS 1.3
   - X25519MLKEM768, SecP256r1MLKEM768, and SecP384r1MLKEM1024 - that
   combine the post-quantum ML-KEM (Module-Lattice-Based Key
   Encapsulation Mechanism) with an ECDHE (Elliptic Curve Diffie-
   Hellman) exchange.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-ecdhe-mlkem-04"/>
        </reference>
        <reference anchor="TLS-MLKEM">
          <front>
            <title>ML-KEM Post-Quantum Key Agreement for TLS 1.3</title>
            <author fullname="Deirdre Connolly" initials="D." surname="Connolly">
              <organization>SandboxAQ</organization>
            </author>
            <date day="12" month="February" year="2026"/>
            <abstract>
              <t>   This memo defines ML-KEM-512, ML-KEM-768, and ML-KEM-1024 as
   NamedGroups and and registers IANA values in the TLS Supported Groups
   registry for use in TLS 1.3 to achieve post-quantum (PQ) key
   establishment.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-mlkem-07"/>
        </reference>
        <reference anchor="TLS-KEYLOGFILE">
          <front>
            <title>The SSLKEYLOGFILE Format for TLS</title>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Yaroslav Rosomakho" initials="Y." surname="Rosomakho">
              <organization>Zscaler</organization>
            </author>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
              <organization>University of Applied Sciences Bonn-Rhein-Sieg</organization>
            </author>
            <date day="9" month="June" year="2025"/>
            <abstract>
              <t>   A format that supports logging information about the secrets used in
   a TLS connection is described.  Recording secrets to a file in
   SSLKEYLOGFILE format allows diagnostic and logging tools that use
   this file to decrypt messages exchanged by TLS endpoints.  This
   format is intended for use in systems where TLS only protects test
   data.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-keylogfile-05"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC8447">
          <front>
            <title>IANA Registry Updates for TLS and DTLS</title>
            <author fullname="J. Salowey" initials="J." surname="Salowey"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document describes a number of changes to TLS and DTLS IANA registries that range from adding notes to the registry all the way to changing the registration policy. These changes were mostly motivated by WG review of the TLS- and DTLS-related registries undertaken as part of the TLS 1.3 development process.</t>
              <t>This document updates the following RFCs: 3749, 5077, 4680, 5246, 5705, 5878, 6520, and 7301.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8447"/>
          <seriesInfo name="DOI" value="10.17487/RFC8447"/>
        </reference>
      </references>
    </references>
    <?line 1111?>

<section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>We would like to thank the members of the "TSVWG DTLS for SCTP
Requirements Design Team" for their discussion. The members, in
no particular order, were:</t>
      <ul spacing="normal">
        <li>
          <t>Marcelo Ricardo Leitner</t>
        </li>
        <li>
          <t>Zaheduzzaman Sarker</t>
        </li>
        <li>
          <t>Magnus Westerlund</t>
        </li>
        <li>
          <t>John Mattsson</t>
        </li>
        <li>
          <t>Claudio Porfiri</t>
        </li>
        <li>
          <t>Xin Long</t>
        </li>
        <li>
          <t>Michael Tüxen</t>
        </li>
        <li>
          <t>Hannes Tschofenig</t>
        </li>
        <li>
          <t>K Tirumaleswar Reddy</t>
        </li>
        <li>
          <t>Bertrand Rault</t>
        </li>
      </ul>
      <t>Additionally, we would like to thank the chairs of the
Transport and Services Working Group (tsvwg) Gorry Fairhurst and
Marten Seemann as well as the responsible area director Martin Duke.</t>
      <t>Finally, we would like to thank Martin Thomson, Ilari Liusvaara,
Benjamin Kaduk, Scott Fluhrer, Dennis Jackson, David Benjamin,
Matthijs van Duin, Rifaat Shekh-Yusef, Joe Birr-Pixton, Eric Rescorla,
and Thom Wiggers for their review comments.</t>
    </section>
    <section anchor="state-machines">
      <name>State Machines</name>
      <t>The sections below describe the state machines for the extended key update
operation for TLS 1.3 and DTLS 1.3.</t>
      <t>The state machine diagrams in the Appendix are provided for illustrative
purposes only to aid understanding of the protocol flow. They are not normative.
In case of any discrepancy between the Appendix diagrams and the protocol
behavior specified in the main body of this document, the text in the
draft takes precedence.</t>
      <t>For editorial reasons we abbreviate the protocol message types:</t>
      <ul spacing="normal">
        <li>
          <t>Req - ExtendedKeyUpdate(request)</t>
        </li>
        <li>
          <t>Resp - ExtendedKeyUpdate(response)</t>
        </li>
        <li>
          <t>NKU - ExtendedKeyUpdate(new_key_update)</t>
        </li>
        <li>
          <t>ACK - Acknowledgement message from <xref section="7" sectionFormat="of" target="DTLS"/></t>
        </li>
        <li>
          <t>APP - application data payloads</t>
        </li>
      </ul>
      <t>In the (D)TLS 1.3 state machines discussed below, the terms SEND and RECEIVE keys
refer to the send and receive key variables defined in <xref target="term"/>.</t>
      <t>The TLS state machine diagrams use the following notation:</t>
      <ul spacing="normal">
        <li>
          <t>Numbered labels (1), (2), … denote normal protocol transitions in the order they occur.</t>
        </li>
        <li>
          <t>Lettered labels (A), (B), … denote exceptional or conditional transitions.</t>
        </li>
        <li>
          <t>Self-loops indicate that the state does not change as a result of the event.</t>
        </li>
      </ul>
      <section anchor="tls-13-state-machines">
        <name>TLS 1.3 State Machines</name>
        <t>This section describes the initiator and responder state machines.</t>
        <section anchor="initiator-state-machine">
          <name>Initiator State Machine</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="576" width="536" viewBox="0 0 536 576" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,112" fill="none" stroke="black"/>
                <path d="M 8,192 L 8,496" fill="none" stroke="black"/>
                <path d="M 8,528 L 8,560" fill="none" stroke="black"/>
                <path d="M 192,32 L 192,112" fill="none" stroke="black"/>
                <path d="M 192,192 L 192,240" fill="none" stroke="black"/>
                <path d="M 192,528 L 192,560" fill="none" stroke="black"/>
                <path d="M 8,32 L 192,32" fill="none" stroke="black"/>
                <path d="M 8,112 L 192,112" fill="none" stroke="black"/>
                <path d="M 8,192 L 192,192" fill="none" stroke="black"/>
                <path d="M 8,240 L 192,240" fill="none" stroke="black"/>
                <path d="M 8,528 L 192,528" fill="none" stroke="black"/>
                <path d="M 8,560 L 192,560" fill="none" stroke="black"/>
                <path d="M 28,248 L 72,336" fill="none" stroke="black"/>
                <circle cx="96" cy="352" r="6" class="closeddot" fill="black"/>
                <circle cx="96" cy="368" r="6" class="closeddot" fill="black"/>
                <g class="text">
                  <text x="40" y="52">START</text>
                  <text x="88" y="68">send_key=current,</text>
                  <text x="96" y="84">receive_key=current</text>
                  <text x="60" y="100">updating=0</text>
                  <text x="56" y="132">|</text>
                  <text x="16" y="148">(1)</text>
                  <text x="52" y="148">send</text>
                  <text x="88" y="148">Req</text>
                  <text x="124" y="148">with</text>
                  <text x="168" y="148">local</text>
                  <text x="248" y="148">KeyShareEntry</text>
                  <text x="48" y="164">set</text>
                  <text x="108" y="164">updating=1</text>
                  <text x="56" y="180">v</text>
                  <text x="56" y="212">WAIT_RESP</text>
                  <text x="60" y="228">updating=1</text>
                  <text x="64" y="276">(A)</text>
                  <text x="100" y="276">recv</text>
                  <text x="140" y="276">peer</text>
                  <text x="176" y="276">Req</text>
                  <text x="228" y="276">(crossed</text>
                  <text x="304" y="276">updates):</text>
                  <text x="96" y="292">compare</text>
                  <text x="200" y="292">peer.key_exchange</text>
                  <text x="284" y="292">to</text>
                  <text x="372" y="292">local.key_exchange</text>
                  <text x="80" y="308">-</text>
                  <text x="100" y="308">if</text>
                  <text x="132" y="308">peer</text>
                  <text x="160" y="308">&lt;</text>
                  <text x="196" y="308">local:</text>
                  <text x="252" y="308">IGNORE</text>
                  <text x="300" y="308">peer</text>
                  <text x="336" y="308">Req</text>
                  <text x="376" y="308">(send</text>
                  <text x="436" y="308">nothing)</text>
                  <text x="80" y="324">-</text>
                  <text x="100" y="324">if</text>
                  <text x="132" y="324">peer</text>
                  <text x="164" y="324">==</text>
                  <text x="204" y="324">local:</text>
                  <text x="256" y="324">ABORT</text>
                  <text x="364" y="324">"unexpected_message"</text>
                  <text x="88" y="340">-</text>
                  <text x="108" y="340">if</text>
                  <text x="140" y="340">peer</text>
                  <text x="168" y="340">&gt;</text>
                  <text x="204" y="340">local:</text>
                  <text x="264" y="340">ABANDON</text>
                  <text x="320" y="340">local</text>
                  <text x="376" y="340">update:</text>
                  <text x="120" y="356">set</text>
                  <text x="180" y="356">updating=0</text>
                  <text x="120" y="372">act</text>
                  <text x="148" y="372">as</text>
                  <text x="204" y="372">RESPONDER:</text>
                  <text x="268" y="372">send</text>
                  <text x="308" y="372">Resp</text>
                  <text x="348" y="372">with</text>
                  <text x="428" y="372">KeyShareEntry,</text>
                  <text x="132" y="388">derive</text>
                  <text x="176" y="388">new</text>
                  <text x="228" y="388">secrets,</text>
                  <text x="284" y="388">then</text>
                  <text x="336" y="388">proceed</text>
                  <text x="380" y="388">as</text>
                  <text x="404" y="388">in</text>
                  <text x="456" y="388">responder</text>
                  <text x="516" y="388">flow</text>
                  <text x="40" y="420">(2)</text>
                  <text x="76" y="420">recv</text>
                  <text x="116" y="420">Resp</text>
                  <text x="156" y="420">with</text>
                  <text x="220" y="420">key_share:</text>
                  <text x="84" y="436">derive</text>
                  <text x="128" y="436">new</text>
                  <text x="176" y="436">secrets</text>
                  <text x="76" y="452">send</text>
                  <text x="112" y="452">NKU</text>
                  <text x="172" y="452">(encrypted</text>
                  <text x="240" y="452">under</text>
                  <text x="280" y="452">old</text>
                  <text x="320" y="452">keys)</text>
                  <text x="84" y="468">update</text>
                  <text x="132" y="468">SEND</text>
                  <text x="168" y="468">key</text>
                  <text x="224" y="468">(send_key</text>
                  <text x="276" y="468">:=</text>
                  <text x="308" y="468">new)</text>
                  <text x="84" y="484">update</text>
                  <text x="144" y="484">RECEIVE</text>
                  <text x="192" y="484">key</text>
                  <text x="260" y="484">(receive_key</text>
                  <text x="324" y="484">:=</text>
                  <text x="356" y="484">new)</text>
                  <text x="72" y="500">set</text>
                  <text x="132" y="500">updating=0</text>
                  <text x="64" y="516">v</text>
                  <text x="52" y="548">FINISHED</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+----------------------+
| START                |
| send_key=current,    |
| receive_key=current  |
| updating=0           |
+----------------------+
      |
(1) send Req with local KeyShareEntry
    set updating=1
      v
+----------------------+
| WAIT_RESP            |
| updating=1           |
+----------------------+
|  \
|   \ (A) recv peer Req (crossed updates):
|    \  compare peer.key_exchange to local.key_exchange
|     \  - if peer < local: IGNORE peer Req (send nothing)
|      \ - if peer == local: ABORT "unexpected_message"
|       \ - if peer > local: ABANDON local update:
|          * set updating=0
|          * act as RESPONDER: send Resp with KeyShareEntry,
|            derive new secrets, then proceed as in responder flow
|
|  (2) recv Resp with key_share:
|      derive new secrets
|      send NKU (encrypted under old keys)
|      update SEND key (send_key := new)
|      update RECEIVE key (receive_key := new)
|      set updating=0
       v
+----------------------+
| FINISHED             |
+----------------------+
]]></artwork>
          </artset>
          <t>Notes:</t>
          <ul spacing="normal">
            <li>
              <t>NKU message is sent under old keys.</t>
            </li>
            <li>
              <t>If a classic KeyUpdate arrives (EKU negotiated), ABORT "unexpected_message".</t>
            </li>
            <li>
              <t>Crossed-requests: ignore the request with LOWER lexicographic key_exchange; if equal, abort.</t>
            </li>
          </ul>
        </section>
        <section anchor="responder-state-machine">
          <name>Responder State Machine</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="544" width="360" viewBox="0 0 360 544" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,112" fill="none" stroke="black"/>
                <path d="M 8,192 L 8,320" fill="none" stroke="black"/>
                <path d="M 8,352 L 8,400" fill="none" stroke="black"/>
                <path d="M 8,496 L 8,528" fill="none" stroke="black"/>
                <path d="M 192,32 L 192,112" fill="none" stroke="black"/>
                <path d="M 192,192 L 192,224" fill="none" stroke="black"/>
                <path d="M 192,352 L 192,400" fill="none" stroke="black"/>
                <path d="M 192,496 L 192,528" fill="none" stroke="black"/>
                <path d="M 8,32 L 192,32" fill="none" stroke="black"/>
                <path d="M 8,112 L 192,112" fill="none" stroke="black"/>
                <path d="M 8,192 L 192,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 192,224" fill="none" stroke="black"/>
                <path d="M 32,320 L 48,320" fill="none" stroke="black"/>
                <path d="M 8,352 L 192,352" fill="none" stroke="black"/>
                <path d="M 8,400 L 192,400" fill="none" stroke="black"/>
                <path d="M 8,496 L 192,496" fill="none" stroke="black"/>
                <path d="M 8,528 L 192,528" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="56,320 44,314.4 44,325.6" fill="black" transform="rotate(0,48,320)"/>
                <g class="text">
                  <text x="40" y="52">START</text>
                  <text x="88" y="68">send_key=current,</text>
                  <text x="96" y="84">receive_key=current</text>
                  <text x="60" y="100">updating=0</text>
                  <text x="56" y="132">|</text>
                  <text x="16" y="148">(1)</text>
                  <text x="52" y="148">recv</text>
                  <text x="88" y="148">Req</text>
                  <text x="48" y="164">set</text>
                  <text x="108" y="164">updating=1</text>
                  <text x="56" y="180">v</text>
                  <text x="48" y="212">RESPOND</text>
                  <text x="44" y="244">send</text>
                  <text x="84" y="244">Resp</text>
                  <text x="124" y="244">with</text>
                  <text x="200" y="244">KeyShareEntry</text>
                  <text x="44" y="260">(may</text>
                  <text x="88" y="260">defer</text>
                  <text x="144" y="260">sending</text>
                  <text x="188" y="260">if</text>
                  <text x="224" y="260">under</text>
                  <text x="272" y="260">load;</text>
                  <text x="52" y="276">must</text>
                  <text x="92" y="276">send</text>
                  <text x="132" y="276">once</text>
                  <text x="192" y="276">resources</text>
                  <text x="256" y="276">free)</text>
                  <text x="52" y="292">derive</text>
                  <text x="96" y="292">new</text>
                  <text x="144" y="292">secrets</text>
                  <text x="52" y="308">update</text>
                  <text x="100" y="308">SEND</text>
                  <text x="140" y="308">keys</text>
                  <text x="200" y="308">(send_key</text>
                  <text x="252" y="308">:=</text>
                  <text x="284" y="308">new)</text>
                  <text x="100" y="324">WAIT_I_NKU</text>
                  <text x="56" y="340">v</text>
                  <text x="60" y="372">WAIT_I_NKU</text>
                  <text x="60" y="388">updating=1</text>
                  <text x="56" y="420">|</text>
                  <text x="16" y="436">(2)</text>
                  <text x="52" y="436">recv</text>
                  <text x="88" y="436">NKU</text>
                  <text x="148" y="436">(encrypted</text>
                  <text x="216" y="436">under</text>
                  <text x="256" y="436">old</text>
                  <text x="296" y="436">keys)</text>
                  <text x="60" y="452">update</text>
                  <text x="120" y="452">RECEIVE</text>
                  <text x="172" y="452">keys</text>
                  <text x="244" y="452">(receive_key</text>
                  <text x="308" y="452">:=</text>
                  <text x="340" y="452">new)</text>
                  <text x="48" y="468">set</text>
                  <text x="108" y="468">updating=0</text>
                  <text x="56" y="484">v</text>
                  <text x="52" y="516">FINISHED</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+----------------------+
| START                |
| send_key=current,    |
| receive_key=current  |
| updating=0           |
+----------------------+
      |
(1) recv Req
    set updating=1
      v
+----------------------+
| RESPOND              |
+----------------------+
|  send Resp with KeyShareEntry
|  (may defer sending if under load;
|   must send once resources free)
|  derive new secrets
|  update SEND keys (send_key := new)
|  --> WAIT_I_NKU
      v
+----------------------+
| WAIT_I_NKU           |
| updating=1           |
+----------------------+
      |
(2) recv NKU (encrypted under old keys)
    update RECEIVE keys (receive_key := new)
    set updating=0
      v
+----------------------+
| FINISHED             |
+----------------------+
]]></artwork>
          </artset>
          <t>Notes:</t>
          <ul spacing="normal">
            <li>
              <t>Responder may defer Resp under load (no status reply), then must send it once resources are free.</t>
            </li>
            <li>
              <t>If a classic KeyUpdate arrives (EKU negotiated), ABORT "unexpected_message".</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="dtls-13-state-machines">
        <name>DTLS 1.3 State Machines</name>
        <t>This section describes the initiator and responder state machines.</t>
        <section anchor="terms-and-abbreviations">
          <name>Terms and Abbreviations</name>
          <t>The following variables and abbreviations are used in the state machine diagrams.</t>
          <ul spacing="normal">
            <li>
              <t>rx - current, accepted receive epoch.</t>
            </li>
            <li>
              <t>tx - current transmit epoch used for tagging outgoing messages.</t>
            </li>
            <li>
              <t>E - initial epoch value.</t>
            </li>
            <li>
              <t>updating - true while a key-update handshake is in progress.</t>
            </li>
            <li>
              <t>old_rx - the previous receive epoch remembered during retention.</t>
            </li>
            <li>
              <t>retain_old - when true, receiver accepts tags old_rx and rx.</t>
            </li>
            <li>
              <t>tag=... - the TX-epoch value written on an outgoing message.</t>
            </li>
            <li>
              <t>e==... - the epoch tag carried on an incoming message (what the peer sent).</t>
            </li>
            <li>
              <t>FINISHED / START / WAIT_RESP / WAIT_I_NKU / WAIT_R_NKU / ACTIVATE RETENTION / RESPOND / WAIT_ACK - diagram states; FINISHED denotes the steady state after success.</t>
            </li>
          </ul>
          <t>Crossed requests. If both peers independently initiate the extended key update and the key_update_request messages cross in flight, compare the KeyShareEntry.key_exchange values. The request with the lower lexicographic value must be ignored. If the values are equal, the endpoint must abort with an "unexpected_message" alert. If the peer's value is higher than the local one, the endpoint abandons its in-flight update and processes the peer's request as responder.</t>
        </section>
        <section anchor="state-machine-initiator">
          <name>State Machine (Initiator)</name>
          <t>The initiator starts in the START state with matching epochs (rx := E; tx := E). It sends a Req and enters WAIT_RESP (updating := 1). While waiting, APP data may be sent at any time (tagged with the current tx) and received according to the APP acceptance rule below.</t>
          <t>Once the responder returns Resp with a tag matching the current rx, the initiator derives new key material. It then sends NKU still tagged with the old tx. The initiator activates retention mode: the old epoch is remembered, the receive epoch is incremented, and application data is accepted under both epochs for a transition period. Initiator moves to WAIT_ACK.</t>
          <t>If a peer key_update_request arrives while in WAIT_RESP (crossed updates), apply the crossed-request rule above. If the peer's key_exchange is higher, abandon the local update (updating := 0) and continue as responder: send key_update_response, derive new secrets, then proceed with the responder flow. If lower, ignore the peer's request; if equal, abort with "unexpected_message".</t>
          <t>Upon receiving the responder's ACK matching the updated epoch, the initiator completes the transition by synchronizing transmit and receive epochs (tx := rx), disabling retention, and clearing the update flag. The state machine returns to FINISHED, ready for subsequent updates.</t>
          <t>Throughout the process:</t>
          <ul spacing="normal">
            <li>
              <t>Duplicate messages are tolerated (for retransmission handling).</t>
            </li>
            <li>
              <t>Temporary epoch mismatches are permitted while an update is in progress.</t>
            </li>
            <li>
              <t>Application data flows continuously, subject to epoch acceptance rules.</t>
            </li>
          </ul>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="832" width="560" viewBox="0 0 560 832" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,80" fill="none" stroke="black"/>
                <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                <path d="M 8,512 L 8,576" fill="none" stroke="black"/>
                <path d="M 8,640 L 8,672" fill="none" stroke="black"/>
                <path d="M 8,784 L 8,816" fill="none" stroke="black"/>
                <path d="M 16,200 L 16,432" fill="none" stroke="black"/>
                <path d="M 56,200 L 56,320" fill="none" stroke="black"/>
                <path d="M 56,352 L 56,400" fill="none" stroke="black"/>
                <path d="M 56,680 L 56,720" fill="none" stroke="black"/>
                <path d="M 88,464 L 88,504" fill="none" stroke="black"/>
                <path d="M 96,200 L 96,368" fill="none" stroke="black"/>
                <path d="M 184,512 L 184,576" fill="none" stroke="black"/>
                <path d="M 192,200 L 192,256" fill="none" stroke="black"/>
                <path d="M 256,160 L 256,192" fill="none" stroke="black"/>
                <path d="M 256,640 L 256,672" fill="none" stroke="black"/>
                <path d="M 280,32 L 280,80" fill="none" stroke="black"/>
                <path d="M 352,784 L 352,816" fill="none" stroke="black"/>
                <path d="M 8,32 L 280,32" fill="none" stroke="black"/>
                <path d="M 8,80 L 280,80" fill="none" stroke="black"/>
                <path d="M 8,160 L 256,160" fill="none" stroke="black"/>
                <path d="M 8,192 L 256,192" fill="none" stroke="black"/>
                <path d="M 192,256 L 208,256" fill="none" stroke="black"/>
                <path d="M 96,368 L 112,368" fill="none" stroke="black"/>
                <path d="M 56,400 L 72,400" fill="none" stroke="black"/>
                <path d="M 16,432 L 32,432" fill="none" stroke="black"/>
                <path d="M 8,512 L 184,512" fill="none" stroke="black"/>
                <path d="M 8,576 L 184,576" fill="none" stroke="black"/>
                <path d="M 8,640 L 256,640" fill="none" stroke="black"/>
                <path d="M 8,672 L 256,672" fill="none" stroke="black"/>
                <path d="M 8,784 L 352,784" fill="none" stroke="black"/>
                <path d="M 8,816 L 352,816" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="200,200 188,194.4 188,205.6" fill="black" transform="rotate(270,192,200)"/>
                <polygon class="arrowhead" points="104,200 92,194.4 92,205.6" fill="black" transform="rotate(270,96,200)"/>
                <polygon class="arrowhead" points="96,504 84,498.4 84,509.6" fill="black" transform="rotate(90,88,504)"/>
                <polygon class="arrowhead" points="64,200 52,194.4 52,205.6" fill="black" transform="rotate(270,56,200)"/>
                <polygon class="arrowhead" points="24,200 12,194.4 12,205.6" fill="black" transform="rotate(270,16,200)"/>
                <g class="text">
                  <text x="40" y="52">START</text>
                  <text x="28" y="68">rx</text>
                  <text x="52" y="68">:=</text>
                  <text x="76" y="68">E;</text>
                  <text x="100" y="68">tx</text>
                  <text x="124" y="68">:=</text>
                  <text x="148" y="68">E,</text>
                  <text x="196" y="68">updating</text>
                  <text x="244" y="68">:=</text>
                  <text x="264" y="68">0</text>
                  <text x="56" y="100">|</text>
                  <text x="16" y="116">(1)</text>
                  <text x="52" y="116">send</text>
                  <text x="88" y="116">Req</text>
                  <text x="140" y="116">[tag=tx]</text>
                  <text x="48" y="132">set</text>
                  <text x="100" y="132">updating</text>
                  <text x="148" y="132">:=</text>
                  <text x="168" y="132">1</text>
                  <text x="56" y="148">v</text>
                  <text x="56" y="180">WAIT_RESP</text>
                  <text x="232" y="260">(A)</text>
                  <text x="268" y="260">recv</text>
                  <text x="308" y="260">peer</text>
                  <text x="344" y="260">Req</text>
                  <text x="404" y="260">(crossed):</text>
                  <text x="236" y="276">if</text>
                  <text x="268" y="276">peer</text>
                  <text x="296" y="276">&lt;</text>
                  <text x="328" y="276">local</text>
                  <text x="372" y="276">-&gt;</text>
                  <text x="412" y="276">IGNORE</text>
                  <text x="488" y="276">(Self-Loop)</text>
                  <text x="236" y="292">if</text>
                  <text x="268" y="292">peer</text>
                  <text x="300" y="292">==</text>
                  <text x="336" y="292">local</text>
                  <text x="372" y="292">-&gt;</text>
                  <text x="408" y="292">ABORT</text>
                  <text x="472" y="292">(Error)</text>
                  <text x="236" y="308">if</text>
                  <text x="268" y="308">peer</text>
                  <text x="296" y="308">&gt;</text>
                  <text x="328" y="308">local</text>
                  <text x="372" y="308">-&gt;</text>
                  <text x="416" y="308">ABANDON</text>
                  <text x="480" y="308">update;</text>
                  <text x="420" y="324">updating</text>
                  <text x="468" y="324">:=</text>
                  <text x="492" y="324">0;</text>
                  <text x="136" y="340">|</text>
                  <text x="440" y="340">act</text>
                  <text x="468" y="340">as</text>
                  <text x="520" y="340">RESPONDER</text>
                  <text x="136" y="372">APP</text>
                  <text x="172" y="372">send</text>
                  <text x="232" y="372">(anytime)</text>
                  <text x="400" y="372">(Self-Loop)</text>
                  <text x="96" y="404">APP</text>
                  <text x="136" y="404">recv:</text>
                  <text x="204" y="404">retain_old</text>
                  <text x="260" y="404">&amp;&amp;</text>
                  <text x="280" y="404">e</text>
                  <text x="300" y="404">==</text>
                  <text x="340" y="404">old_rx</text>
                  <text x="432" y="404">(Self-Loop)</text>
                  <text x="56" y="436">APP</text>
                  <text x="96" y="436">recv:</text>
                  <text x="128" y="436">e</text>
                  <text x="148" y="436">==</text>
                  <text x="172" y="436">rx</text>
                  <text x="440" y="436">(Self-Loop)</text>
                  <text x="116" y="468">recv</text>
                  <text x="156" y="468">Resp</text>
                  <text x="188" y="468">[e</text>
                  <text x="212" y="468">==</text>
                  <text x="240" y="468">rx]</text>
                  <text x="124" y="484">derive</text>
                  <text x="184" y="484">secrets</text>
                  <text x="52" y="532">ACTIVATE</text>
                  <text x="128" y="532">RETENTION</text>
                  <text x="60" y="548">old_rx=rx;</text>
                  <text x="72" y="564">retain_old=1;</text>
                  <text x="148" y="564">rx++</text>
                  <text x="88" y="596">|</text>
                  <text x="16" y="612">(2)</text>
                  <text x="52" y="612">send</text>
                  <text x="88" y="612">NKU</text>
                  <text x="140" y="612">[tag=old</text>
                  <text x="192" y="612">tx]</text>
                  <text x="88" y="628">v</text>
                  <text x="52" y="660">WAIT_ACK</text>
                  <text x="128" y="660">(updating</text>
                  <text x="176" y="660">=</text>
                  <text x="196" y="660">1)</text>
                  <text x="88" y="708">APP</text>
                  <text x="144" y="708">send/recv</text>
                  <text x="216" y="708">allowed</text>
                  <text x="16" y="740">(3)</text>
                  <text x="52" y="740">recv</text>
                  <text x="88" y="740">ACK</text>
                  <text x="136" y="740">[e==rx]</text>
                  <text x="60" y="756">tx=rx;</text>
                  <text x="144" y="756">retain_old=0;</text>
                  <text x="236" y="756">updating</text>
                  <text x="284" y="756">:=</text>
                  <text x="304" y="756">0</text>
                  <text x="56" y="772">v</text>
                  <text x="52" y="804">FINISHED</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+---------------------------------+
| START                           |
| rx := E; tx := E, updating := 0 |
+---------------------------------+
      |
(1) send Req [tag=tx]
    set updating := 1
      v
+------------------------------+
| WAIT_RESP                    |
+------------------------------+
 ^    ^    ^           ^
 |    |    |           |
 |    |    |           |
 |    |    |           +-- (A) recv peer Req (crossed):
 |    |    |                if peer < local  -> IGNORE (Self-Loop)
 |    |    |                if peer == local -> ABORT  (Error)
 |    |    |                if peer > local  -> ABANDON update;
 |    |    |                                    updating := 0;
 |         |    |                                    act as RESPONDER
 |    |    |
 |    |    +-- APP send (anytime)           (Self-Loop)
 |    |
 |    +-- APP recv: retain_old && e == old_rx   (Self-Loop)
 |
 +-- APP recv: e == rx                           (Self-Loop)

          | recv Resp [e == rx]
          | derive secrets
          v
+---------------------+
| ACTIVATE RETENTION  |
| old_rx=rx;          |
| retain_old=1; rx++  |
+---------------------+
          |
(2) send NKU [tag=old tx]
          v
+------------------------------+
| WAIT_ACK (updating = 1)      |
+------------------------------+
      |
      |  APP send/recv allowed
      |
(3) recv ACK [e==rx]
    tx=rx; retain_old=0; updating := 0
      v
+------------------------------------------+
| FINISHED                                 |
+------------------------------------------+
]]></artwork>
          </artset>
        </section>
        <section anchor="state-machine-responder">
          <name>State Machine (Responder)</name>
          <t>The responder starts in the START state with synchronized transmit and receive epochs (rx := E; tx := E) and no update in progress. Application data can be transmitted at any time using the sender's current transmit epoch. A receiver must accept application data if the epoch tag on the DTLS record equals the receiver's current receive epoch. If the receiver has retention active (retain_old == true), the receiver must also accept DTLS records whose epoch tag equals the remembered previous epoch.</t>
          <t>Upon receiving an <tt>ExtendedKeyUpdate(key_update_request)</tt> (Req), the responder transitions to RESPOND. The responder may defer sending <tt>ExtendedKeyUpdate(key_update_response)</tt> under load; in that case it must acknowledge the request with an ACK and retransmit the response until it is acknowledged by the initiator, as specified in DTLS considerations. When sent, <tt>ExtendedKeyUpdate(key_update_response)</tt> is tagged with the current tx.</t>
          <t>After an <tt>ExtendedKeyUpdate(new_key_update)</tt> (NKU) is received with the correct epoch, the responder:</t>
          <ol spacing="normal" type="1"><li>
              <t>activates retention (old_rx := rx; retain_old := 1),</t>
            </li>
            <li>
              <t>increments both epochs (rx++, tx++),</t>
            </li>
            <li>
              <t>sends ACK tagged with the new tx (which now equals the new rx),</t>
            </li>
            <li>
              <t>clears updating and enters FINISHED.</t>
            </li>
          </ol>
          <t>Retention at the responder ends automatically on the first APP received under the new rx (then retain_old := 0). APP traffic is otherwise permitted at any time; reordering is tolerated by the acceptance rule.</t>
          <t>APP acceptance rule (receiver): accept if e == rx or (retain_old &amp;&amp; e == old_rx). If retain_old is set and an APP with the new rx arrives, clear retain_old.</t>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="624" width="536" viewBox="0 0 536 624" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,80" fill="none" stroke="black"/>
                <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                <path d="M 8,288 L 8,336" fill="none" stroke="black"/>
                <path d="M 8,400 L 8,480" fill="none" stroke="black"/>
                <path d="M 8,560 L 8,608" fill="none" stroke="black"/>
                <path d="M 56,200 L 56,280" fill="none" stroke="black"/>
                <path d="M 136,288 L 136,336" fill="none" stroke="black"/>
                <path d="M 184,400 L 184,480" fill="none" stroke="black"/>
                <path d="M 192,160 L 192,192" fill="none" stroke="black"/>
                <path d="M 280,32 L 280,80" fill="none" stroke="black"/>
                <path d="M 352,560 L 352,608" fill="none" stroke="black"/>
                <path d="M 8,32 L 280,32" fill="none" stroke="black"/>
                <path d="M 8,80 L 280,80" fill="none" stroke="black"/>
                <path d="M 8,160 L 192,160" fill="none" stroke="black"/>
                <path d="M 8,192 L 192,192" fill="none" stroke="black"/>
                <path d="M 8,288 L 136,288" fill="none" stroke="black"/>
                <path d="M 8,336 L 136,336" fill="none" stroke="black"/>
                <path d="M 8,400 L 184,400" fill="none" stroke="black"/>
                <path d="M 8,480 L 184,480" fill="none" stroke="black"/>
                <path d="M 8,560 L 352,560" fill="none" stroke="black"/>
                <path d="M 8,608 L 352,608" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="64,280 52,274.4 52,285.6" fill="black" transform="rotate(90,56,280)"/>
                <g class="text">
                  <text x="40" y="52">START</text>
                  <text x="28" y="68">rx</text>
                  <text x="52" y="68">:=</text>
                  <text x="76" y="68">E;</text>
                  <text x="100" y="68">tx</text>
                  <text x="124" y="68">:=</text>
                  <text x="148" y="68">E,</text>
                  <text x="196" y="68">updating</text>
                  <text x="244" y="68">:=</text>
                  <text x="264" y="68">0</text>
                  <text x="56" y="100">|</text>
                  <text x="16" y="116">(1)</text>
                  <text x="52" y="116">recv</text>
                  <text x="88" y="116">Req</text>
                  <text x="136" y="116">[e==rx]</text>
                  <text x="48" y="132">set</text>
                  <text x="100" y="132">updating</text>
                  <text x="148" y="132">:=</text>
                  <text x="168" y="132">1</text>
                  <text x="56" y="148">v</text>
                  <text x="48" y="180">RESPOND</text>
                  <text x="84" y="228">send</text>
                  <text x="124" y="228">Resp</text>
                  <text x="180" y="228">[tag=tx]</text>
                  <text x="84" y="244">(may</text>
                  <text x="132" y="244">defer;</text>
                  <text x="172" y="244">if</text>
                  <text x="224" y="244">deferred,</text>
                  <text x="280" y="244">ACK</text>
                  <text x="312" y="244">Req</text>
                  <text x="344" y="244">and</text>
                  <text x="384" y="244">later</text>
                  <text x="452" y="244">retransmit</text>
                  <text x="516" y="244">Resp</text>
                  <text x="96" y="260">until</text>
                  <text x="172" y="260">acknowledged</text>
                  <text x="236" y="260">by</text>
                  <text x="264" y="260">the</text>
                  <text x="324" y="260">initiator)</text>
                  <text x="60" y="308">WAIT_I_NKU</text>
                  <text x="68" y="324">(updating=1)</text>
                  <text x="56" y="356">|</text>
                  <text x="16" y="372">(2)</text>
                  <text x="52" y="372">recv</text>
                  <text x="88" y="372">NKU</text>
                  <text x="136" y="372">[e==rx]</text>
                  <text x="240" y="372">(assert</text>
                  <text x="312" y="372">accepted)</text>
                  <text x="56" y="388">|</text>
                  <text x="52" y="420">ACTIVATE</text>
                  <text x="128" y="420">RETENTION</text>
                  <text x="60" y="436">old_rx=rx;</text>
                  <text x="72" y="452">retain_old=1;</text>
                  <text x="40" y="468">rx=rx</text>
                  <text x="76" y="468">1;</text>
                  <text x="120" y="468">tx=tx+1</text>
                  <text x="56" y="500">|</text>
                  <text x="16" y="516">(3)</text>
                  <text x="52" y="516">send</text>
                  <text x="88" y="516">ACK</text>
                  <text x="140" y="516">[tag=tx]</text>
                  <text x="48" y="532">set</text>
                  <text x="100" y="532">updating</text>
                  <text x="148" y="532">:=</text>
                  <text x="172" y="532">0;</text>
                  <text x="212" y="532">assert</text>
                  <text x="268" y="532">tx==rx</text>
                  <text x="56" y="548">v</text>
                  <text x="52" y="580">FINISHED</text>
                  <text x="72" y="596">(retain_old=0</text>
                  <text x="152" y="596">after</text>
                  <text x="200" y="596">first</text>
                  <text x="240" y="596">APP</text>
                  <text x="268" y="596">at</text>
                  <text x="296" y="596">new</text>
                  <text x="328" y="596">rx)</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+---------------------------------+
| START                           |
| rx := E; tx := E, updating := 0 |
+---------------------------------+
      |
(1) recv Req [e==rx]
    set updating := 1
      v
+----------------------+
| RESPOND              |
+----------------------+
      |
      | send Resp [tag=tx]
      | (may defer; if deferred, ACK Req and later retransmit Resp
      |  until acknowledged by the initiator)
      v
+---------------+
| WAIT_I_NKU    |
| (updating=1)  |
+-------+-------+
      |
(2) recv NKU [e==rx]      (assert accepted)
      |
+---------------------+
| ACTIVATE RETENTION  |
| old_rx=rx;          |
| retain_old=1;       |
| rx=rx+1; tx=tx+1    |
+----------+----------+
      |
(3) send ACK [tag=tx]
    set updating := 0; assert tx==rx
      v
+------------------------------------------+
| FINISHED                                 |
| (retain_old=0 after first APP at new rx) |
+------------------------------------------+
]]></artwork>
          </artset>
        </section>
      </section>
    </section>
    <section anchor="overview-of-security-goals">
      <name>Overview of Security Goals</name>
      <t>A complete security analysis of the EKU is outside the scope of this document. This appendix provides an informal description of the primary security goals that EKU is designed to achieve.</t>
      <section anchor="post-compromise-security-pcs">
        <name>Post-Compromise Security (PCS)</name>
        <t>Extended Key Update supports post-compromise security under the assumptions described in <xref target="scope"/>. If an attacker temporarily compromises an endpoint and obtains the traffic keys in use before an Extended Key Update takes place, but the compromise does not persist after the EKU completes, the attacker cannot derive the new keying material established by EKU. This property follows from the use of fresh ephemeral key exchange material during each Extended Key Update, which produces new traffic keys that are independent of the previous ones. This
property provides only best-effort post-compromise security, as it assumes the attacker is not acting as a MiTM
during the Extended Key Update.</t>
        <t>As a result, confidentiality of application data encrypted after the Extended Key Update is preserved even if the earlier traffic keys were exposed.</t>
      </section>
      <section anchor="key-freshness-and-cryptographic-independence">
        <name>Key Freshness and Cryptographic Independence</name>
        <t>Each Extended Key Update derives new traffic keys from ephemeral key exchange material. This ensures strong separation between successive traffic keys:</t>
        <ul spacing="normal">
          <li>
            <t>The new traffic keys established by an Extended Key Update are independent of the previous traffic keys.</t>
          </li>
          <li>
            <t>Compromise of one of traffic keys does not allow recovery of any earlier or later traffic keys.</t>
          </li>
          <li>
            <t>Application data protected under one of the traffic keys cannot be decrypted using keys from another.</t>
          </li>
        </ul>
      </section>
      <section anchor="elimination-of-standard-keyupdate">
        <name>Elimination of Standard KeyUpdate</name>
        <t>Once Extended Key Update has been negotiated for a session, peers rely exclusively on EKU rather than the standard TLS 1.3 KeyUpdate mechanism. Relying solely on Extended Key Update helps maintain PCS properties throughout the lifetime of the TLS session.</t>
      </section>
      <section anchor="detecting-divergent-key-state">
        <name>Detecting Divergent Key State</name>
        <t>As described in <xref target="exported"/>, both Post-handshake Certificate-Based Client Authentication and Exported Authenticators can be used after an Extended Key Update to confirm that both endpoints derived the same
traffic keys. Because the authentication messages produced by these mechanisms depend on values
derived from the updated traffic keys, any divergence in those traffic keys causes validation to fail,
revealing interference by an active attacker.</t>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
jf0wIrBpPxm1D9T/A7U3RZjk/QAA

-->

</rfc>
