<?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.29 (Ruby 3.2.3) -->
<?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-08" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.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-08"/>
    <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="January" day="14"/>
    <area>Security</area>
    <workgroup>Transport Layer Security</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 76?>

<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>
  </front>
  <middle>
    <?line 94?>

<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.</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>the concatenation of the <tt>ExtendedKeyUpdate(key_update_request)</tt> and the
<tt>ExtendedKeyUpdate(key_update_response)</tt> messages, which contain the key shares,
binding the encapsulated shared secret ciphertext to IKM in case of
hybrid key 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 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",
             |                EKU(key_update_request) ||
             |                EKU(key_update_response))
             |                = client_application_traffic_secret_N+1
             |
             +-----> Derive-Secret(., "s ap traffic",
             |                EKU(key_update_request) ||
             |                EKU(key_update_response))
             |                = server_application_traffic_secret_N+1
             |
             +-----> Derive-Secret(., "exp master",
             |                EKU(key_update_request) ||
             |                EKU(key_update_response))
             |                = exporter_secret_N+1
             |
             +-----> Derive-Secret(., "res master",
             |                EKU(key_update_request) ||
             |                EKU(key_update_response))
                              = 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
ticket-based session resumption. If resumption occurs without a new (EC)DH
exchange that provides forward secrecy, an attacker could potentially revert
the security context to an earlier state, thereby negating the benefits of
the extended key update. To preserve the security guarantees provided by key
updates, endpoints <bcp14>MUST</bcp14> either invalidate any session tickets issued prior
to the key update or ensure that resumption always involves a fresh (EC)DH
exchange.</t>
      <t>If session tickets cannot be stored securely, developers <bcp14>SHOULD</bcp14> consider
disabling ticket-based resumption in their deployments. While this approach
may impact performance, it provides improved security properties.</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 is complete, it produces a Finished message
computed using the application traffic keys of the new epoch. 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 can be derived from the exporter secret associated with the current epoch.
Implementations that support the epoch-aware Exported Authenticators interface will have to 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>
    <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.13 <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="21" month="November" year="2025"/>
            <abstract>
              <t>   This draft defines three hybrid key agreements for TLS 1.3:
   X25519MLKEM768, SecP256r1MLKEM768, and SecP384r1MLKEM1024 which
   combine a post-quantum KEM with an elliptic curve Diffie-Hellman
   (ECDHE).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-ecdhe-mlkem-03"/>
        </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="2" month="November" year="2025"/>
            <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-05"/>
        </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 1033?>

<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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
go7NAeZPaB2BYThYArpUxCIRiL+XDTTELtiz7ARvT18csGEiPdOJC/CDJZZm
QC5jRbsTTV5g5TSewvHv+94C9UWRVKhyocinhb3B5vELr7WEikcTkKgBSinE
lKp3Z8DZeQ31+oUREoiBQuq5gb3ZW/lAaMkDjyl94CMk80L+2N453v/d9vEe
4IvjvYPjfWDCHlhELt+yGGprRiBglc/dkCz82IJO0ci49rMyU2JfAfKECjtP
BbypXoyalwAhnTtHgA71iVUjtJikrFcSO4B4NaUMp4wNA2oTss0c2mxKd3v8
AbbDjHZFg0fgYycMhT7/xF2MpNB0bCOl0eeVeYfKj/ajZsRN2Br33e4GtlPc
tF+VNvE8GfrZ3SKTaSIznWdxY7ToFPPtZaXkaO7z1vi7aiKUS38csw1R6bCZ
oK8ALWqvBKXyjJaICgEuCmeUY0hlWKF1T6MKu5iYspjrcOGAWu1RGTz8ZYOS
DiEJQGEYpROKi8ko/4oD+HWLXKDR5oZJE3wRJfiwR7oR0oaIIzw7pnBuMEqb
s+6Xv/O9sqvLDV+pMUIckRecq5v1Htg3Iw5yjUD3E9af+Jlb/KLtVV1kpccD
RYQH7Fb4oxeXzXQExmHNRHF67lQVE03eLLzsXEewuTJEf9UlQ7pHs4acfLf0
YrOn+Sjesm1sBKrDsr6bTew+IIcpDoBhV5kFpVRSOirEfACHDTMUcKCOF4Fo
4vedTmKan7O5zOAr46NJWLIFQRhegKkOwKMHPE0xu+c5Tg1DQYKPF27uedy8
lgE6sbezZ26fd0Pl4gVA+3DDZlqg+AP/0m3Z4vZN03rvZmHWzyrtybM0e8Jr
PV80Cq/+guwjuaPa+aaPM7JKeln03Zi/4vL2AZCbsFTOLNCAcxeaSkpIBwun
QGxsIglJmc98iq97NPiE0UhxCWfqMo5bCGfoHKZxVISTgi2KJnxFQrbK3F6A
PEMOkX9AEjgW12Px9zSOVogRyY0gryujdEZcSwrM3Zovhu9WiyeRp6aoCfYK
g3r1CIlLwnVsoF7xWOLl53L94CPaZOmJg+YoLIrZrcyssMlhfeVnyeFbOqZS
XwKSVLKL/M7/hGFClSnF2kB95WAFCbghYbQKww1BqkkYejq4Pd0CSbt45esG
f0LGrrr8eUE+ImJyk4jkL6RVLXijyORN74/4oftHfv4o1XzdP7bL276AKSxR
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

-->

</rfc>
