<?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-07" 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-07"/>
    <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="2025" month="November" day="02"/>
    <area>Security</area>
    <workgroup>Transport Layer Security</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 82?>

<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 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 100?>

<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 secret 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
long-term secrets or 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 a long-term 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 secrets 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 secrets but is unable to compromise the
long-term secret.</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   -------->
                               <--------  [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="tls-13-considerations">
      <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>Upon receipt of an <tt>ExtendedKeyUpdate(key_update_response)</tt> the initiator
derives the new secrets from the exchanged key shares. The initiator then sends an empty
ExtendedKeyUpdate(new_key_update) message to trigger the switch to the
new keys.</t>
        </li>
        <li>
          <t>After the initiator sends <tt>ExtendedKeyUpdate(new_key_update)</tt> it
<bcp14>MUST</bcp14> update its send keys. Upon receipt of this message, the responder
<bcp14>MUST</bcp14> update its receive keys and then send
<tt>ExtendedKeyUpdate(new_key_update)</tt>, after which it <bcp14>MUST</bcp14> update its
send keys.</t>
        </li>
        <li>
          <t>After receiving the responder’s <tt>ExtendedKeyUpdate(new_key_update)</tt>,
the initiator <bcp14>MUST</bcp14> update its receive keys.</t>
        </li>
      </ol>
      <t>Both sender and receiver <bcp14>MUST</bcp14> encrypt their
<tt>ExtendedKeyUpdate(new_key_update)</tt> messages with the old keys. Both
sides <bcp14>MUST</bcp14> ensure that the <tt>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
# Client derives new secrets                    
        [EKU(new_key_update)]  -------->
# Client updates SEND keys here
                                    # Server updates RECEIVE keys here
                               <--------  [EKU(new_key_update)]
                                    # Server updates SEND keys here

# Client updates RECEIVE keys here
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="dtls-13-considerations">
      <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>Due to the possibility of an <tt>ExtendedKeyUpdate(new_key_update)</tt> message 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 ExtendedKeyUpdate(key_update_request), so no separate ACK is required.</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>Upon receiving <tt>ExtendedKeyUpdate(new_key_update)</tt>, the responder <bcp14>MUST</bcp14> update
its receive keys and epoch value.</t>
        </li>
        <li>
          <t>The responder acknowledges the received message by sending its own
<tt>ExtendedKeyUpdate(new_key_update)</tt>.</t>
        </li>
        <li>
          <t>After the initiator receives the responder’s <tt>ExtendedKeyUpdate(new_key_update)</tt>,
the initiator <bcp14>MUST</bcp14> update its send key and epoch value. With the receipt of
that message, the initiator <bcp14>MUST</bcp14> also update its receive keys.</t>
        </li>
        <li>
          <t>The initiator <bcp14>MUST</bcp14> acknowledge the responder’s
<tt>ExtendedKeyUpdate(new_key_update)</tt> with an ACK message.</t>
        </li>
        <li>
          <t>On receipt of the ACK message, the responder updates its send key and epoch
value. If this ACK is not received, the responder re-transmits its
ExtendedKeyUpdate(new_key_update) until ACK is received. The key update is
complete once this ACK is processed by the responder.</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)]
                                  # still old epochs

[EKU(new_key_update)]      -------->
# Sent under OLD epoch. Client does NOT bump yet.

# Step 6: responder bumps RECEIVE epoch on NKU-in:
# (rx:=rx+1; tx still old)
[C: tx=3, rx=3]                   [S: tx=3, rx=4]

                           <-------- [EKU(new_key_update)]
# Responder’s NKU is tagged with OLD tx (3).

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

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

# Step 10: responder 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/3     | 3/3 -> 3/3   |
| NKU  ------------> | 3/3 -> 3/3     | 3/3 -> 3/4   | <- step 6
| <------------- NKU | 3/3 -> 4/4     | 3/4 -> 3/4   | <- step 8
| ACK -------------> | 4/4 -> 4/4     | 3/4 -> 4/4   | <- step 10
| <------------- 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 Secrets</name>
      <t>When the extended key update message exchange is completed both peers
have successfully updated their application traffic secrets. 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, providing MAL-BIND-K-CT security (see <xref target="CDM23"/>),
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 after receiving the
<tt>ExtendedKeyUpdate(new_key_update)</tt> message.</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>
      <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.</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</t>
        </li>
        <li>
          <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>
        </li>
      </ul>
      <t>Delivering the derived EKM in this notification allows applications that
depend on exporter-based keying material to install new application-layer
keys in synchronization with the epoch transition.</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 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-of-key-compromise">
        <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 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 and cannot interfere with the Extended Key Update procedure.
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. In that case, the attacker can impersonate
each endpoint and substitute key shares, maintaining control of the communication.
Therefore, Extended Key Update provides recovery only in the case where the
compromise has ended before the procedure begins.</t>
        <t>If a compromise occurs before the handshake completes, the ephemeral key exchange, client_handshake_traffic_secret, and server_handshake_traffic_secret could be exposed.
In that case, only the initial handshake messages and the application data encrypted
with these secrets 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>
      </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="CDM23" target="https://eprint.iacr.org/2023/1933.pdf">
          <front>
            <title>Keeping Up with the KEMs: Stronger Security Notions for KEMs and automated analysis of KEM-based protocols</title>
            <author>
              <organization>ACM</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="29" month="September" 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-01"/>
        </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="22" month="July" year="2025"/>
            <abstract>
              <t>   This memo defines ML-KEM-512, ML-KEM-768, and ML-KEM-1024 as a
   standalone NamedGroups for use in TLS 1.3 to achieve post-quantum key
   agreement.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-mlkem-04"/>
        </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 940?>

<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>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>
      <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="736" width="536" viewBox="0 0 536 736" 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,464" fill="none" stroke="black"/>
                <path d="M 8,512 L 8,592" fill="none" stroke="black"/>
                <path d="M 8,688 L 8,720" 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,688 L 192,720" fill="none" stroke="black"/>
                <path d="M 232,512 L 232,592" 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 64,480 L 80,480" fill="none" stroke="black"/>
                <path d="M 8,512 L 232,512" fill="none" stroke="black"/>
                <path d="M 8,592 L 232,592" fill="none" stroke="black"/>
                <path d="M 8,688 L 192,688" fill="none" stroke="black"/>
                <path d="M 8,720 L 192,720" fill="none" stroke="black"/>
                <path d="M 8,480 L 20,504" fill="none" stroke="black"/>
                <path d="M 28,248 L 72,336" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="88,480 76,474.4 76,485.6" fill="black" transform="rotate(0,80,480)"/>
                <polygon class="arrowhead" points="28,504 16,498.4 16,509.6" fill="black" transform="rotate(63.43494882292201,20,504)"/>
                <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">(B)</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="172" y="468">keys</text>
                  <text x="232" y="468">(send_key</text>
                  <text x="284" y="468">:=</text>
                  <text x="316" y="468">new)</text>
                  <text x="132" y="484">WAIT_R_NKU</text>
                  <text x="52" y="532">SENT_NKU</text>
                  <text x="96" y="532">/</text>
                  <text x="148" y="532">WAIT_R_NKU</text>
                  <text x="72" y="548">send_key=new,</text>
                  <text x="100" y="564">receive_key=current,</text>
                  <text x="60" y="580">updating=1</text>
                  <text x="56" y="612">|</text>
                  <text x="16" y="628">(5)</text>
                  <text x="52" y="628">recv</text>
                  <text x="88" y="628">NKU</text>
                  <text x="148" y="628">(encrypted</text>
                  <text x="216" y="628">under</text>
                  <text x="256" y="628">old</text>
                  <text x="296" y="628">keys)</text>
                  <text x="60" y="644">update</text>
                  <text x="120" y="644">RECEIVE</text>
                  <text x="172" y="644">keys</text>
                  <text x="244" y="644">(receive_key</text>
                  <text x="308" y="644">:=</text>
                  <text x="340" y="644">new)</text>
                  <text x="48" y="660">set</text>
                  <text x="108" y="660">updating=0</text>
                  <text x="56" y="676">v</text>
                  <text x="52" y="708">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
|
|  (B) recv Resp with key_share:
|      derive new secrets
|      send NKU (encrypted under old keys)
|      update SEND keys (send_key := new)
\      --> WAIT_R_NKU
 v
+---------------------------+
| SENT_NKU / WAIT_R_NKU     |
| send_key=new,             |
| receive_key=current,      |
| updating=1                |
+---------------------------+
      |
(5) 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>Both NKU messages are sent under old keys. The old-key NKU
must be received before accepting traffic under new 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="560" width="360" viewBox="0 0 360 560" 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,304" fill="none" stroke="black"/>
                <path d="M 8,336 L 8,384" fill="none" stroke="black"/>
                <path d="M 8,512 L 8,544" 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,336 L 192,384" fill="none" stroke="black"/>
                <path d="M 192,512 L 192,544" 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,304 L 48,304" fill="none" stroke="black"/>
                <path d="M 8,336 L 192,336" fill="none" stroke="black"/>
                <path d="M 8,384 L 192,384" fill="none" stroke="black"/>
                <path d="M 8,512 L 192,512" fill="none" stroke="black"/>
                <path d="M 8,544 L 192,544" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="56,304 44,298.4 44,309.6" fill="black" transform="rotate(0,48,304)"/>
                <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">(2)</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="100" y="308">WAIT_I_NKU</text>
                  <text x="56" y="324">v</text>
                  <text x="60" y="356">WAIT_I_NKU</text>
                  <text x="60" y="372">updating=1</text>
                  <text x="56" y="404">|</text>
                  <text x="16" y="420">(4)</text>
                  <text x="52" y="420">recv</text>
                  <text x="88" y="420">NKU</text>
                  <text x="148" y="420">(encrypted</text>
                  <text x="216" y="420">under</text>
                  <text x="256" y="420">old</text>
                  <text x="296" y="420">keys)</text>
                  <text x="60" y="436">update</text>
                  <text x="120" y="436">RECEIVE</text>
                  <text x="172" y="436">keys</text>
                  <text x="244" y="436">(receive_key</text>
                  <text x="308" y="436">:=</text>
                  <text x="340" y="436">new)</text>
                  <text x="52" y="452">send</text>
                  <text x="88" y="452">NKU</text>
                  <text x="148" y="452">(encrypted</text>
                  <text x="216" y="452">under</text>
                  <text x="256" y="452">old</text>
                  <text x="296" y="452">keys)</text>
                  <text x="60" y="468">update</text>
                  <text x="108" y="468">SEND</text>
                  <text x="148" y="468">keys</text>
                  <text x="208" y="468">(send_key</text>
                  <text x="260" y="468">:=</text>
                  <text x="292" y="468">new)</text>
                  <text x="48" y="484">set</text>
                  <text x="108" y="484">updating=0</text>
                  <text x="56" y="500">v</text>
                  <text x="52" y="532">FINISHED</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+----------------------+
| START                |
| send_key=current,    |
| receive_key=current  |
| updating=0           |
+----------------------+
      |
(2) 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
|  --> WAIT_I_NKU
      v
+----------------------+
| WAIT_I_NKU           |
| updating=1           |
+----------------------+
      |
(4) recv NKU (encrypted under old keys)
    update RECEIVE keys (receive_key := new)
    send NKU (encrypted under old keys)
    update SEND keys (send_key := new)
    set updating=0
      v
+----------------------+
| FINISHED             |
+----------------------+
]]></artwork>
          </artset>
          <t>Notes:</t>
          <ul spacing="normal">
            <li>
              <t>No "accept/reject" or status in Resp; wire format has only a KeyShareEntry.</t>
            </li>
            <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>
          <t>No status in responses. ExtendedKeyUpdate(key_update_response) carries only a KeyShareEntry; there is no accept/reject/status field in the wire format. Implementations either proceed normally or abort on error; there is no benign "reject" reply.</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, moving to WAIT_R_NKU.</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 NKU (tag equals the current rx, meaning the responder is still tagging with its old tx), the initiator:</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 initiator 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="880" width="584" viewBox="0 0 584 880" 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,544" fill="none" stroke="black"/>
                <path d="M 8,656 L 8,736" fill="none" stroke="black"/>
                <path d="M 8,816 L 8,864" 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,552 L 56,592" fill="none" stroke="black"/>
                <path d="M 88,464 L 88,504" fill="none" stroke="black"/>
                <path d="M 96,200 L 96,320" fill="none" stroke="black"/>
                <path d="M 96,352 L 96,368" fill="none" stroke="black"/>
                <path d="M 192,200 L 192,256" fill="none" stroke="black"/>
                <path d="M 192,656 L 192,736" fill="none" stroke="black"/>
                <path d="M 256,160 L 256,192" fill="none" stroke="black"/>
                <path d="M 256,512 L 256,544" fill="none" stroke="black"/>
                <path d="M 280,32 L 280,80" fill="none" stroke="black"/>
                <path d="M 352,816 L 352,864" 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 256,512" fill="none" stroke="black"/>
                <path d="M 8,544 L 256,544" fill="none" stroke="black"/>
                <path d="M 8,656 L 192,656" fill="none" stroke="black"/>
                <path d="M 8,736 L 192,736" fill="none" stroke="black"/>
                <path d="M 8,816 L 352,816" fill="none" stroke="black"/>
                <path d="M 8,864 L 352,864" 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="88" y="340">|</text>
                  <text x="160" y="340">|</text>
                  <text x="464" y="340">act</text>
                  <text x="492" y="340">as</text>
                  <text x="544" 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="188" y="484">secrets;</text>
                  <text x="244" y="484">send</text>
                  <text x="280" y="484">NKU</text>
                  <text x="332" y="484">[tag=old</text>
                  <text x="384" y="484">tx]</text>
                  <text x="60" y="532">WAIT_R_NKU</text>
                  <text x="88" y="580">APP</text>
                  <text x="144" y="580">send/recv</text>
                  <text x="216" y="580">allowed</text>
                  <text x="16" y="612">(6)</text>
                  <text x="52" y="612">recv</text>
                  <text x="88" y="612">NKU</text>
                  <text x="136" y="612">[e==rx]</text>
                  <text x="44" y="628">(Responder</text>
                  <text x="112" y="628">still</text>
                  <text x="156" y="628">tags</text>
                  <text x="192" y="628">old</text>
                  <text x="224" y="628">tx)</text>
                  <text x="56" y="644">v</text>
                  <text x="52" y="676">ACTIVATE</text>
                  <text x="128" y="676">RETENTION</text>
                  <text x="60" y="692">old_rx=rx;</text>
                  <text x="72" y="708">retain_old=1;</text>
                  <text x="40" y="724">rx=rx</text>
                  <text x="76" y="724">1;</text>
                  <text x="120" y="724">tx=tx+1</text>
                  <text x="56" y="756">|</text>
                  <text x="16" y="772">(8)</text>
                  <text x="52" y="772">send</text>
                  <text x="88" y="772">ACK</text>
                  <text x="140" y="772">[tag=tx]</text>
                  <text x="48" y="788">set</text>
                  <text x="100" y="788">updating</text>
                  <text x="148" y="788">:=</text>
                  <text x="172" y="788">0;</text>
                  <text x="212" y="788">assert</text>
                  <text x="268" y="788">tx==rx</text>
                  <text x="56" y="804">v</text>
                  <text x="52" y="836">FINISHED</text>
                  <text x="72" y="852">(retain_old=0</text>
                  <text x="152" y="852">after</text>
                  <text x="200" y="852">first</text>
                  <text x="240" y="852">APP</text>
                  <text x="268" y="852">at</text>
                  <text x="296" y="852">new</text>
                  <text x="328" y="852">rx)</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; send NKU [tag=old tx]
          v
+------------------------------+
| WAIT_R_NKU                   |
+------------------------------+
      |
      |  APP send/recv allowed
      |
(6) recv NKU [e==rx]
(Responder still tags old tx)
      v
+----------------------+
| ACTIVATE RETENTION   |
| old_rx=rx;           |
| retain_old=1;        |
| rx=rx+1; tx=tx+1     |
+----------------------+
      |
(8) 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 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 ExtendedKeyUpdate(key_update_request) (Req), the responder transitions to RESPOND. The responder may defer sending key_update_response 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, key_update_response is tagged with the current tx. After sending the response, the responder enters WAIT_I_NKU.</t>
          <t>When a new_key_update (NKU) is received with the correct epoch, the responder 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. The responder then sends its own NKU tagged with the old transmit epoch and moves to WAIT_ACK.</t>
          <t>Finally, upon receipt of an ACK matching the updated epoch, the responder 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="704" width="536" viewBox="0 0 536 704" 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,464" fill="none" stroke="black"/>
                <path d="M 8,528 L 8,576" fill="none" stroke="black"/>
                <path d="M 8,656 L 8,688" fill="none" stroke="black"/>
                <path d="M 56,200 L 56,280" fill="none" stroke="black"/>
                <path d="M 104,656 L 104,688" fill="none" stroke="black"/>
                <path d="M 128,528 L 128,576" fill="none" stroke="black"/>
                <path d="M 136,288 L 136,304" fill="none" stroke="black"/>
                <path d="M 184,400 L 184,464" 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 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,464 L 184,464" fill="none" stroke="black"/>
                <path d="M 8,528 L 128,528" fill="none" stroke="black"/>
                <path d="M 8,576 L 128,576" fill="none" stroke="black"/>
                <path d="M 8,656 L 104,656" fill="none" stroke="black"/>
                <path d="M 8,688 L 104,688" 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">(3)</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="128" y="324">|</text>
                  <text x="56" y="356">|</text>
                  <text x="16" y="372">(5)</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">v</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="148" y="452">rx++</text>
                  <text x="56" y="484">|</text>
                  <text x="16" y="500">(6)</text>
                  <text x="52" y="500">send</text>
                  <text x="88" y="500">NKU</text>
                  <text x="140" y="500">[tag=old</text>
                  <text x="192" y="500">tx]</text>
                  <text x="56" y="516">v</text>
                  <text x="52" y="548">WAIT_ACK</text>
                  <text x="68" y="564">(updating=1)</text>
                  <text x="56" y="596">|</text>
                  <text x="24" y="612">(7/8)</text>
                  <text x="68" y="612">recv</text>
                  <text x="104" y="612">ACK</text>
                  <text x="152" y="612">[e==rx]</text>
                  <text x="60" y="628">tx=rx;</text>
                  <text x="144" y="628">retain_old=0;</text>
                  <text x="236" y="628">updating</text>
                  <text x="284" y="628">:=</text>
                  <text x="304" y="628">0</text>
                  <text x="56" y="644">v</text>
                  <text x="52" y="676">FINISHED</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+---------------------------------+
| START                           |
| rx := E; tx := E, updating := 0 |
+---------------------------------+
      |
(3) 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) |
+-------+-------+
      |
(5) recv NKU [e==rx]      (assert accepted)
      v
+---------------------+
| ACTIVATE RETENTION  |
| old_rx=rx;          |
| retain_old=1; rx++  |
+----------+----------+
      |
(6) send NKU [tag=old tx]
      v
+--------------+
| WAIT_ACK     |
| (updating=1) |
+-------+------+
      |
(7/8) recv ACK [e==rx]
    tx=rx; retain_old=0; updating := 0
      v
+-----------+
| FINISHED  |
+-----------+
]]></artwork>
          </artset>
        </section>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
tpPNI2hX1dYjvr8t5sQwDSK5RRstsvHMWApApcZZsGNEQtu0wbPbQBK5LhHC
ds9hfXz9joLEyNgqQz5TM3svG1AWZzWeZaTI05WHMcZhwqt5f+jIeQHGrJdN
P8H+Snv+BrZXbbsx1kS29EmiAuhCvGVsXr2/eb9uxjt5N8QejWVqWuU1C38h
Vh69+yi7V6N/QeUeoEMbas8bdAWIx2dMskfgTYZJhBdIc7pfTVduKEaZ4oXo
+qA/MYkMMpFg4nX23TwbG7EztEKqg8PXrB78SlcFzONv4K1wryMi9O/psFix
Sa0eC/Zu3sNpoTZ2WmDXK/0WZuZOKLxvM29zq5oYUNgvpB9d8nfQGjZxeXQt
9pXNEWTpTPNiul/jxemzIuYcBwo0e4wqpTvzL3OfGKEk1Hdwcfc4XVJmIitW
uVCc88fXA5CHs7mSwygBNKWzmjnf02ysh0z+G5GgLgijeA2niDBUEjYed4RM
5BS/jwryk4ZzR0C/itKt4o13UpgmXZFddPcPZvS1e76vVpCJpk+lBWudw9nm
tCGmxHZyGPab+ulzpiV3WLVjwUgDS3Mqhd6sIC312cJw37Z7t1x6+SVOHhh/
vZ/H3KyqQ0D9qA0d9phwd1aEaeU+hMurPUlP6wjWICiNpW4IRY/O2OCl7/qq
dthxAOebOq5oGbkdPCSQC4iOxU0ox4jvxzNS1DsFcc2eJHTqYTd3O0n5RJhj
yn0zBD2ZgLrTdjD2J7szEwJvDVNmYn8HP8YEb4CtdGYoGzqkf66XQEcI6Z/r
CtBxQvrXNEh3nvhfNDwCna/rHzQN/52n/jdCPc+t8+c8nnS+a87F/2D3kf+F
Y6/v7O6ufGeiqHYfr/6G7f2d3dpqtFW/s1cb2421qoOoaYzqDF8cAa9AfxAq
A54LSG/4OQjKs87e17XeOIRL/vjsu6meBfpFi0PrV3i0fpVLixrvfmOWVUR/
eeY0RkbV0+xR4phaB4djQwwa0G1aROWzL27vrGKj9tont9oT96WuuC/1xf0K
Z9yv9cb9Snfcl/rjfp1D7os8cr/KJfdlPrkvd8rZ1q20dF/Jfhyap8drFlxr
Kwte2fazGmUTC/TPdKZW+AZ91qVtX0cbeAiPNnIR+hGI2ncXJwkmOyOhI3SN
NS2qZTewicFm2TU7qVAuKVQz/Z/WPIQB3+11Ek9G51hLZ9srPuycagFiG6n6
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
qP0/3SwP/THOAAA=

-->

</rfc>
