<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.21 (Ruby 3.0.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>

<?rfc rfcedstyle="yes"?>
<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc text-list-symbols="-o*+"?>
<?rfc docmapping="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-tls-extended-key-update-06" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="Extended Key Update for TLS">Extended Key Update for Transport Layer Security (TLS) 1.3</title>

    <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="October" day="20"/>

    <area>Security</area>
    <workgroup>Transport Layer Security</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 75?>

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

<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="terminology-and-requirements-language"><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>

</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 <spanx style="verb">KeyUpdate</spanx> message after
successfully negotiating the Extended Key Update functionality <bcp14>MUST</bcp14>
terminate the connection with an <spanx style="verb">"unexpected_message"</spanx> alert.</t>

<t>The extended key update messages are signaled in a new handshake message named
<spanx style="verb">ExtendedKeyUpdate</spanx> (EKU), with an internal uint8 message subtype indicating its role.
This specification defines three ExtendedKeyUpdate message subtypes:</t>

<t><list style="symbols">
  <t><spanx style="verb">key_update_request</spanx> (0)</t>
  <t><spanx style="verb">key_update_response</spanx> (1)</t>
  <t><spanx style="verb">new_key_update</spanx> (2)</t>
</list></t>

<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 <spanx style="verb">"unexpected_message"</spanx> alert.</t>

<t>The extended key update process can be initiated by either peer after it has
sent a <spanx style="verb">Finished</spanx> message. Implementations that receive an <spanx style="verb">ExtendedKeyUpdate</spanx>
message prior to the sender having sent <spanx style="verb">Finished</spanx> <bcp14>MUST</bcp14> terminate the connection with
an <spanx style="verb">"unexpected_message"</spanx> alert.</t>

<t>The <spanx style="verb">KeyShareEntry</spanx> carried in a <spanx style="verb">key_update_request</spanx> and in
a <spanx style="verb">key_update_response</spanx> <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 <spanx style="verb">"illegal_parameter"</spanx> alert.</t>

<t><xref target="fig-key-update"/> shows the interaction graphically. First, support
for the functionality in this specification is negotiated in the
<spanx style="verb">ClientHello</spanx> and the <spanx style="verb">EncryptedExtensions</spanx> messages. Then, the
<spanx style="verb">ExtendedKeyUpdate</spanx> 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 title="Extended Key Update Message Exchange in TLS 1.3." anchor="fig-key-update"><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 <spanx style="verb">ExtendedKeyUpdate</spanx> wire format is:</t>

<figure><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></figure>

<t>Fields:</t>

<t><list style="symbols">
  <t><spanx style="verb">eku_type</spanx>: the subtype of the <spanx style="verb">ExtendedKeyUpdate</spanx> message.</t>
  <t><spanx style="verb">key_share</spanx>: 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>
</list></t>

</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>

<t><list style="numbers" type="1">
  <t>The initiator sends <spanx style="verb">ExtendedKeyUpdate(key_update_request)</spanx> carrying a
<spanx style="verb">KeyShareEntry</spanx>. While an extended key update is in progress, the
initiator <bcp14>MUST NOT</bcp14> initiate another key update.</t>
  <t>Upon receipt, the responder sends its own <spanx style="verb">KeyShareEntry</spanx> in a
<spanx style="verb">ExtendedKeyUpdate(key_update_response)</spanx> 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>
  <t>Upon receipt of an <spanx style="verb">ExtendedKeyUpdate(key_update_response)</spanx> 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>
  <t>After the initiator sends <spanx style="verb">ExtendedKeyUpdate(new_key_update)</spanx> 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
<spanx style="verb">ExtendedKeyUpdate(new_key_update)</spanx>, after which it <bcp14>MUST</bcp14> update its
send keys.</t>
  <t>After receiving the responder’s <spanx style="verb">ExtendedKeyUpdate(new_key_update)</spanx>,
the initiator <bcp14>MUST</bcp14> update its receive keys.</t>
</list></t>

<t>Both sender and receiver <bcp14>MUST</bcp14> encrypt their
<spanx style="verb">ExtendedKeyUpdate(new_key_update)</spanx> messages with the old keys. Both
sides <bcp14>MUST</bcp14> ensure that the <spanx style="verb">new_key_update</spanx> 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 <spanx style="verb">ExtendedKeyUpdate(key_update_request)</spanx> with the
lower lexicographic order of the <spanx style="verb">key_exchange</spanx> value in
<spanx style="verb">KeyShareEntry</spanx> <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 <spanx style="verb">HandshakeType</spanx> for this message
(see <xref target="fig-handshake"/>).</t>

<figure title="TLS 1.3 Handshake Structure." anchor="fig-handshake"><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>

<t><list style="numbers" type="1">
  <t>The support for the functionality in this specification
is negotiated in the ClientHello and the EncryptedExtensions
messages.</t>
  <t>Once the initial handshake is completed, a key update can be
triggered.</t>
</list></t>

<t><xref target="fig-key-update2"/> provides an overview of the exchange starting
with the initial negotiation followed by the key update.</t>

<figure title="Extended Key Update Example." anchor="fig-key-update2"><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 <spanx style="verb">ExtendedKeyUpdate(new_key_update)</spanx> 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>

<t><list style="numbers" type="1">
  <t>The initiator sends an <spanx style="verb">ExtendedKeyUpdate(key_update_request)</spanx> 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 <spanx style="verb">ExtendedKeyUpdate(key_update_response)</spanx> or an ACK.</t>
  <t>Upon receipt, the responder sends its own <spanx style="verb">KeyShareEntry</spanx> in a
<spanx style="verb">ExtendedKeyUpdate(key_update_response)</spanx> 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>
  <t>On receipt of <spanx style="verb">ExtendedKeyUpdate(key_update_response)</spanx> 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>
  <t>The initiator transmits an <spanx style="verb">ExtendedKeyUpdate(new_key_update)</spanx> message. This message is subject to DTLS
retransmission until acknowledged.</t>
  <t>Upon receiving <spanx style="verb">ExtendedKeyUpdate(new_key_update)</spanx>, the responder <bcp14>MUST</bcp14> update
its receive keys and epoch value.</t>
  <t>The responder acknowledges the received message by sending its own
<spanx style="verb">ExtendedKeyUpdate(new_key_update)</spanx>.</t>
  <t>After the initiator receives the responder’s <spanx style="verb">ExtendedKeyUpdate(new_key_update)</spanx>,
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>
  <t>The initiator <bcp14>MUST</bcp14> acknowledge the responder’s
<spanx style="verb">ExtendedKeyUpdate(new_key_update)</spanx> with an ACK message.</t>
  <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>
</list></t>

<t>The handshake framing uses a single <spanx style="verb">HandshakeType</spanx> for this message
(see <xref target="fig-dtls-handshake"/>).</t>

<figure title="DTLS 1.3 Handshake Structure." anchor="fig-dtls-handshake"><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 title="Example DTLS 1.3 Extended Key Update: Message Exchange." anchor="dtls-key-update"><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 title="Example DTLS 1.3 Extended Key Update: Epoch Changes." anchor="dtls-table"><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>

<t><list style="symbols">
  <t>a secret derived from the (EC)DHE exchange (or from the hybrid
key exchange / PQ-KEM exchange),</t>
  <t>a secret that allows the new key exchange to be cryptographically
bound to the previously established secret,</t>
  <t>the concatenation of the <spanx style="verb">ExtendedKeyUpdate(key_update_request)</spanx> and the
<spanx style="verb">ExtendedKeyUpdate(key_update_response)</spanx> 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>
  <t>new label strings to distinguish it from the key derivation used in
TLS 1.3.</t>
</list></t>

<t>The following diagram shows the key derivation hierarchy.</t>

<figure><artwork><![CDATA[
       Main Secret N
             |
             v
       Derive-Secret(., "key derived", "")
             |
             v
 (EC)DHE -> HKDF-Extract = Main Secret N+1
             |
             +-----> Derive-Secret(., "c ap traffic2",
             |                EKU(key_update_request) ||
             |                EKU(key_update_response))
             |                = client_application_traffic_secret_N+1
             |
             +-----> Derive-Secret(., "s ap traffic2",
             |                EKU(key_update_request) ||
             |                EKU(key_update_response))
             |                = server_application_traffic_secret_N+1
             |
             +-----> Derive-Secret(., "exp main2",
             |                EKU(key_update_request) ||
             |                EKU(key_update_response))
             |                = exporter_main_secret_N+1
             |
             +-----> Derive-Secret(., "res main2",
             |                EKU(key_update_request) ||
             |                EKU(key_update_response))
                              = resumption_main_secret_N+1
]]></artwork></figure>

<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
<spanx style="verb">ExtendedKeyUpdate(new_key_update)</spanx> 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 <spanx style="verb">key_exchange</spanx> field of each
<spanx style="verb">KeyShareEntry</spanx> in the initial handshake is formed by concatenating
the <spanx style="verb">key_exchange</spanx> 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>

<t><list style="numbers" type="1">
  <t><spanx style="verb">CLIENT_TRAFFIC_SECRET_N+1</spanx>: identifies the
client_application_traffic_secret_N+1 in the key schedule</t>
  <t><spanx style="verb">SERVER_TRAFFIC_SECRET_N+1</spanx>: identifies the
server_application_traffic_secret_N+1 in the key schedule</t>
  <t><spanx style="verb">EXPORTER_SECRET_N+1</spanx>: identifies the
exporter_main_secret_N+1 in the key schedule</t>
</list></t>

<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 <spanx style="verb">CLIENT_TRAFFIC_SECRET_</spanx>,
<spanx style="verb">SERVER_TRAFFIC_SECRET_</spanx> and <spanx style="verb">EXPORTER_SECRET_</spanx>.</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"/>.</t>

<t>Once the Extended Key Update mechanism is complete, such protocols would
need to use the newly derived key 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 the exporter master secret is updated following a successful Extended Key Update,
the TLS/DTLS implementation will have to notify the application that a
new exporter secret is available.</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. For DTLS, the previous exporter
secret needs to be retained until the retention timer expires, 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 secrets, not a persistent attacker with ongoing access to key material.
Long-term private keys are assumed secure, and post-compromise security
therefore remains achievable.</t>

<t>If a compromise occurs before the handshake completes, both client_handshake_traffic_secret
and server_handshake_traffic_secret could be exposed, only the initial full handshake
can be decrypted. The Extended Key Update procedure derives fresh application traffic secrets
from a new key exchange ensuring that all subsequent application data remains confidential.</t>

</section>
<section anchor="scope-of-key-compromise-1"><name>Scope of Key Compromise</name>

<t>Extended Key Update assumes a transient compromise of the current application
traffic secrets, not a persistent attacker with ongoing access to key material.
Long-term private keys are assumed secure, and post-compromise security
therefore remains achievable.</t>

<t>If a compromise occurs before the handshake completes, both client_handshake_traffic_secret
and server_handshake_traffic_secret could be exposed, only the initial full handshake
can be decrypted. The Extended Key Update procedure derives fresh application traffic secrets
from a new 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>

<t><list style="symbols">
  <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>
</list></t>

</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>

<t><list style="symbols">
  <t>Limit the frequency of accepted Extended Key Update requests per session.</t>
  <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>
</list></t>

</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>

<t><list style="symbols">
  <t>Value: TBD1</t>
  <t>Flag Name: extended_key_update</t>
  <t>Messages: CH, EE</t>
  <t>Recommended: Y</t>
  <t>Reference: [This document]</t>
</list></t>

</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>

<t><list style="symbols">
  <t>Value: TBD2</t>
  <t>Description: extended_key_update</t>
  <t>DTLS-OK: Y</t>
  <t>Reference: [This document]</t>
</list></t>

</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>

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>DTLS-OK</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>0</c>
      <c>key_update_request</c>
      <c>Y</c>
      <c>This document</c>
      <c>1</c>
      <c>key_update_response</c>
      <c>Y</c>
      <c>This document</c>
      <c>2</c>
      <c>new_key_update</c>
      <c>Y</c>
      <c>This document</c>
      <c>3-255</c>
      <c>Unassigned</c>
      <c>&#160;</c>
      <c>&#160;</c>
</texttable>

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

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <ttcol align='left'>Comment</ttcol>
      <c>CLIENT_TRAFFIC_SECRET_N+1</c>
      <c>Secret protecting client records after Extended Key Update</c>
      <c>This document</c>
      <c>N represents iteration of Extended Key Update</c>
      <c>SERVER_TRAFFIC_SECRET_N+1</c>
      <c>Secret protecting server records after Extended Key Update</c>
      <c>This document</c>
      <c>N represents iteration of Extended Key Update</c>
      <c>EXPORTER_SECRET_N+1</c>
      <c>Exporter secret after Extended Key Update</c>
      <c>This document</c>
      <c>N represents iteration of Extended Key Update</c>
</texttable>

</section>
</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">




<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="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 title='Informative References' anchor="sec-informative-references">

<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="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="CCG16">
  <front>
    <title>On Post-compromise Security</title>
    <author fullname="Katriel Cohn-Gordon" initials="K." surname="Cohn-Gordon">
      <organization/>
    </author>
    <author fullname="Cas Cremers" initials="C." surname="Cremers">
      <organization/>
    </author>
    <author fullname="Luke Garratt" initials="L." surname="Garratt">
      <organization/>
    </author>
    <date month="June" year="2016"/>
  </front>
  <seriesInfo name="2016 IEEE 29th Computer Security Foundations Symposium (CSF)" value="pp. 164-178"/>
  <seriesInfo name="DOI" value="10.1109/csf.2016.19"/>
<refcontent>IEEE</refcontent></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 906?>

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

<t><list style="symbols">
  <t>Marcelo Ricardo Leitner</t>
  <t>Zaheduzzaman Sarker</t>
  <t>Magnus Westerlund</t>
  <t>John Mattsson</t>
  <t>Claudio Porfiri</t>
  <t>Xin Long</t>
  <t>Michael Tüxen</t>
  <t>Hannes Tschofenig</t>
  <t>K Tirumaleswar Reddy</t>
  <t>Bertrand Rault</t>
</list></t>

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

<t><list style="symbols">
  <t>Req - ExtendedKeyUpdate(request)</t>
  <t>Resp - ExtendedKeyUpdate(response)</t>
  <t>NKU - ExtendedKeyUpdate(new_key_update)</t>
  <t>ACK - Acknowledgement message from <xref section="7" sectionFormat="of" target="DTLS"/></t>
  <t>APP - application data payloads</t>
</list></t>

<t>In the (D)TLS 1.3 state machines discussed below, SEND keys are the keys used by a peer to encrypt
outbound records and RECEIVE keys are the keys used to decrypt inbound records. They are derived
from the current application traffic secrets as defined in (D)TLS 1.3, and are replaced with
the new ones after each successful Extended Key Update.</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>
<section anchor="initiator-state-machine"><name>Initiator State Machine</name>

<figure><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">
<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">&quot;unexpected_message&quot;</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></figure>

<t>Notes:</t>

<t><list style="symbols">
  <t>Both NKU messages are sent under old keys. The old-key NKU
must be received before accepting traffic under new keys.</t>
  <t>If a classic KeyUpdate arrives (EKU negotiated), ABORT "unexpected_message".</t>
  <t>Crossed-requests: ignore the request with LOWER lexicographic key_exchange; if equal, abort.</t>
</list></t>

</section>
<section anchor="responder-state-machine"><name>Responder State Machine</name>

<figure><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">
<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></figure>

<t>Notes:</t>

<t><list style="symbols">
  <t>No "accept/reject" or status in Resp; wire format has only a KeyShareEntry.</t>
  <t>Responder may defer Resp under load (no status reply), then must send it once resources are free.</t>
  <t>If a classic KeyUpdate arrives (EKU negotiated), ABORT "unexpected_message".</t>
</list></t>

</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>

<t><list style="symbols">
  <t>rx - current, accepted receive epoch.</t>
  <t>tx - current transmit epoch used for tagging outgoing messages.</t>
  <t>E - initial epoch value.</t>
  <t>updating - true while a key-update handshake is in progress.</t>
  <t>old_rx - the previous receive epoch remembered during retention.</t>
  <t>retain_old - when true, receiver accepts tags old_rx and rx.</t>
  <t>tag=... - the TX-epoch value written on an outgoing message.</t>
  <t>e==... - the epoch tag carried on an incoming message (what the peer sent).</t>
  <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>
</list></t>

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

<t><list style="numbers" type="1">
  <t>activates retention (old_rx := rx; retain_old := 1),</t>
  <t>increments both epochs (rx++, tx++),</t>
  <t>sends ACK tagged with the new tx (which now equals the new rx),</t>
  <t>clears updating and enters FINISHED.</t>
</list></t>

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

<figure><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">
<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></figure>

</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>

<t><list style="symbols">
  <t>Duplicate messages are tolerated (for retransmission handling).</t>
  <t>Temporary epoch mismatches are permitted while an update is in progress.</t>
  <t>Application data flows continuously, subject to epoch acceptance rules.</t>
</list></t>

<figure><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">
<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></figure>

</section>
</section>
</section>


  </back>

<!-- ##markdown-source:
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
X7N68DNdFTCPv4O3wr9YhtC/p8NiySa1eizYu3kPp4Vc22mBXS/1W9iZe6Hw
oc28za1qY0Bhv5B+dMnfQWtYx+XRddhXNkfQS2eaF9PFiCBOnxUx7zhQoNlj
VCn9mX+a+8QKJZG5TYm7x9llMhtZscyF4p0/vh6APJzNlRxGCaApvdXM+MZd
Yz1k8l+LBHVBGAWOCSNhqCRsPO4Imcgpfh8V5CcN544G/TJKt4w33klhmnRF
76K/fzCjp/75vlxCJpo+lRas9Q5nm9OGmBLbyWHYz+unz5uWvo1oHAtWGljY
U6npzRLSUp8tDPdFu3fLp5ef4uSB8Vf7eYxvqQEB+b0xdLhjwt05EaaV+xAu
L/ckfVlHsAZBaSx1TSgGdMYFL33Vl7XDjgN439RxxcjI7eAhgVyD6Ei7CfUx
4pvOjBT1TkFccycJnXrYzd1OUj4R9phy3wzBQCag7owdjP3J/sw0gXeGKTux
X8CPMcIbYEudGdKFDpmf7yUwEULm57sCTJyQ+TUN0p0n4RcNj0Dnaf2DpuG/
82X4jaae5875cx6POl815xJ+sP0o/MKz13e2t5e+s1FU24+Xf8P2/s52bTXG
qt/ZqY3tx1rVQdQ0RnXOXhwAr0B/ECoDgQvIbPg5CMrTzs7TWm8cwqX/uA3d
VM+EedHi0PoZHq2f5dKixtuf22UV6s/PvMbIqHqGPeo4ptbB4dgQgwZ0Gxeq
fPbJ7b1VrNXe+OSWe+I+1RX3qb64n+GM+7neuJ/pjvtUf9zPc8h9kkfuZ7nk
Ps0n9+lOOde6lZbuSr0f+/bp0YoF19rqBS9teysH2cgB/ZbO1BLfYMi6jO3r
YA0P4cFaLsIwAtH47uIkwbRVJHREvrGmRbXsCpfiaZpdsZMK5ZJCNhO5Gc1D
M+C7vU7ak9E5MtLZ5pIPOydGgNhEqr7VW+/3ByE/er0caReag6v/+wgd/2HN
jreE+HF/V5bXzx+Dvgj//all0j+eBl+IZiR9rYEzFt+/809osnRb7M+zFrfc
A/iUWX7y3p2Gbg10Wnhvf/m9W3ZZ5H7umweoDrPao4/PQpViVcO73SZrGe0f
gBCEl+IxUI3PrxBLXBb4c2tCWz8a8kmrePfmwNhSjZsE8wfSbfVqNsfFUET0
aanm8vNdTx/B184NwBAAPDp+/W0vTnehSSe/3n2eXz/cfgZwd5PdvO9ePfnp
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

-->

</rfc>

