<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.21 (Ruby 2.7.0) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-oscore-id-update-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.25.0 -->
  <front>
    <title abbrev="Identifier Update for OSCORE">Identifier Update for OSCORE</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-id-update-02"/>
    <author initials="R." surname="Höglund" fullname="Rikard Höglund">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>rikard.hoglund@ri.se</email>
      </address>
    </author>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <date year="2025" month="January" day="08"/>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 58?>

<t>Two peers that communicate with the CoAP protocol can use the Object Security for Constrained RESTful Environments (OSCORE) protocol to protect their message exchanges end-to-end. To this end, the two peers share an OSCORE Security Context and a number of related identifiers. In particular, each of the two peers stores a Sender ID that identifies its own Sender Context within the Security Context, and a Recipient ID that identifies the Recipient Context associated with the other peer within the same Security Context. These identifiers are sent in plaintext within OSCORE-protected messages. Hence, they can be used to correlate messages exchanged between peers and track those peers, with consequent privacy implications. This document defines an OSCORE ID update procedure that two peers can use to update their OSCORE identifiers. This procedure can be run stand-alone or seamlessly integrated in an execution of the Key Update for OSCORE (KUDOS) procedure.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-core-oscore-id-update/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Constrained RESTful Environments (core) Working Group mailing list (<eref target="mailto:core@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/core/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/core/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/core-wg/oscore-id-update"/>.</t>
    </note>
  </front>
  <middle>
    <?line 62?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>When using the CoAP protocol <xref target="RFC7252"/>, two peers can use Object Security for Constrained RESTful Environments (OSCORE) protocol to protect their message exchanges end-to-end. To this end, the two peers share an OSCORE Security Context and a number of related identifiers.</t>
      <t>As part of the shared Security Context, each peer stores one Sender Context identified by a Sender ID and used to protect its outgoing messages. Also, it stores a Recipient Context identified by a Recipient ID and used to unprotect the incoming messages from the other peer. That is, one's peer Sender ID (Recipient ID) is equal to the other peer's Recipient ID (Sender ID).</t>
      <t>When receiving an OSCORE-protected message, the recipient peer uses its Recipient ID conveyed within the message or otherwise implied, in order to retrieve the correct Security Context and unprotect the message.</t>
      <t>These identifiers are sent in plaintext within OSCORE-protected messages and are immutable throughout the lifetime of a Security Context, even in case the two peers migrate to a different network or simply change their addressing information. Therefore, the identifiers can be used to correlate messages that the two peers exchange at different points in time or through different paths, hence allowing for track them with consequent privacy implications.</t>
      <t>In order to address this issue, this document defines an OSCORE ID update procedure that two peers can use to update their OSCORE Sender and Recipient IDs. For instance, two peers may want to use this procedure before switching to a different network, in order to make it more difficult to understand that their communication is continuing in the new network.</t>
      <t>The OSCORE ID update procedure can be run stand-alone or seamlessly integrated in an execution of the Key Update for OSCORE (KUDOS) procedure <xref target="I-D.ietf-core-oscore-key-update"/>.</t>
      <section anchor="terminology">
        <name>Terminology</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>Readers are expected to be familiar with the terms and concepts related to CoAP <xref target="RFC7252"/>, Observe <xref target="RFC7641"/>, CBOR <xref target="RFC8949"/>, OSCORE <xref target="RFC8613"/>, and KUDOS <xref target="I-D.ietf-core-oscore-key-update"/>.</t>
        <t>This document additionally uses the following terminology.</t>
        <ul spacing="normal">
          <li>
            <t>Initiator: the peer starting the OSCORE ID update procedure, by sending the first message.</t>
          </li>
          <li>
            <t>Responder: the peer that receives the first message in an execution of the OSCORE ID update procedure.</t>
          </li>
          <li>
            <t>Forward message flow: the execution workflow where the initiator acts as CoAP client (see <xref target="example-client-initiated-id-update"/>).</t>
          </li>
          <li>
            <t>Reverse message flow: the execution workflow where the initiator acts as CoAP server (see <xref target="example-server-initiated-id-update"/>).</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="update-oscore-ids">
      <name>Update of OSCORE Sender/Recipient IDs</name>
      <t>This section defines the procedure that two peers can perform, in order to update the OSCORE Sender/Recipient IDs that they use in their shared OSCORE Security Context.</t>
      <t>When performing an update of OSCORE Sender/Recipient IDs, a peer provides its new intended OSCORE Recipient ID to the other peer, by means of the Recipient-ID Option defined in <xref target="sec-recipient-id-option"/>. Hereafter, this document refers to a message including the Recipient-ID Option as an "ID update (request/response) message".</t>
      <t>This procedure can be initiated by either peer, i.e., the CoAP client or the CoAP server may start it by sending the first OSCORE IDs update message. The former case is denoted as the "forward message flow" and the latter as the "reverse message flow".</t>
      <t>Furthermore, this procedure can be executed stand-alone, or instead seamlessly integrated in an execution of the KUDOS procedure for updating OSCORE keying material (see <xref section="4" sectionFormat="of" target="I-D.ietf-core-oscore-key-update"/>) used in its FS mode or no-FS mode (see <xref section="4.5" sectionFormat="of" target="I-D.ietf-core-oscore-key-update"/>).</t>
      <ul spacing="normal">
        <li>
          <t>In the former stand-alone case, updating the OSCORE Sender/Recipient IDs effectively results in updating part of the current OSCORE Security Context.  </t>
          <t>
That is, both peers derive a new Sender Key, Recipient Key, and Common IV, as defined in <xref section="3.2" sectionFormat="of" target="RFC8613"/>. Also, both peers re-initialize the Sender Sequence Number and the Replay Window accordingly, as defined in <xref section="3.2.2" sectionFormat="of" target="RFC8613"/>. Since the same Master Secret is preserved, forward secrecy is not achieved.  </t>
          <t>
As defined in <xref target="id-update-additional-actions"/>, the two peers must take additional actions to ensure a safe execution of the OSCORE ID update procedure.  </t>
          <t>
A peer can safely discard the old OSCORE Security Context including the old OSCORE Sender/Recipient IDs after the following two events have occurred, in this order: first, the peer has sent to the other peer a message protected with the new OSCORE Security Context including the new OSCORE Sender/Recipient IDs; then, the peer has received from the other peer and successfully verified a message protected with that new OSCORE Security Context.</t>
        </li>
        <li>
          <t>In the latter integrated case, the KUDOS initiator (responder) also acts as initiator (responder) for the OSCORE ID update procedure. That is, both KUDOS and the OSCORE ID update procedure <bcp14>MUST</bcp14> be run either in their forward message flow or in their reverse message flow.  </t>
          <t>
The new OSCORE Sender/Recipient IDs <bcp14>MUST NOT</bcp14> be used with the OSCORE Security Context CTX_OLD, and <bcp14>MUST NOT</bcp14> be used with the temporary OSCORE Security Context CTX_1 used to protect the first KUDOS message of a KUDOS execution.  </t>
          <t>
The first use of the new OSCORE Sender/Recipient IDs with the new OSCORE Security Context CTX_NEW occurs: for the KUDOS initiator, after having received from the KUDOS responder and successfully verified the second KUDOS message of the KUDOS execution in question; for the KUDOS responder, after having sent to the KUDOS initiator the second KUDOS message of the KUDOS execution in question.</t>
        </li>
      </ul>
      <t>A peer terminates an ongoing OSCORE ID update procedure with another peer as successful, in any of the following two cases.</t>
      <ul spacing="normal">
        <li>
          <t>The peer is acting as initiator, and it has received and successfully verified the second ID update message from the other peer.</t>
        </li>
        <li>
          <t>The peer is acting as responder, and it has sent the second ID update message to the other peer.</t>
        </li>
      </ul>
      <t>A peer <bcp14>MUST NOT</bcp14> initiate an OSCORE ID update procedure with another peer, if it has another such procedure ongoing with that other peer.</t>
      <t>Upon receiving a valid, first ID update message, a responder <bcp14>MUST</bcp14> send the second ID update message, except in the case any of the conditions for failing or aborting the procedure apply (see <xref target="update-failure"/>}).</t>
      <section anchor="update-failure">
        <name>Failure of the ID Update Procedure</name>
        <t>The following section describes cases where the OSCORE ID update procedure fails, or must to be aborted by one of the peers.</t>
        <t>Upon receiving a valid first ID update message, a responder <bcp14>MUST</bcp14> abort the ID update procedure, in the following case:</t>
        <ul spacing="normal">
          <li>
            <t>The received ID update message is not a KUDOS message (i.e., the OSCORE ID update procedure is being performed stand-alone) and the responder has no eligible Recipient ID to offer to the initiator (see <xref target="id-update-additional-actions"/>).</t>
          </li>
        </ul>
        <t>Upon receiving a valid ID update message, a peer <bcp14>MUST</bcp14> abort the ID update procedure, in the following case:</t>
        <ul spacing="normal">
          <li>
            <t>The received ID update message contains a Recipient-ID option with a length that exceeds the maximum length of OSCORE Sender/Recipient IDs for the AEAD algorithm in use for the OSCORE Security Context shared between the peers. This is the case when the length of the Recipient-ID option exceeds the length of the AEAD nonce minus 6 (see <xref section="3.3" sectionFormat="of" target="RFC8613"/>).</t>
          </li>
        </ul>
        <t>If, after receiving an ID update message as CoAP request, a peer aborts the ID update procedure, the peer <bcp14>MUST</bcp14> also reply to the received ID update request message with a protected 5.03 (Service Unavailable) error response. The error response <bcp14>MUST NOT</bcp14> include the Recipient-ID Option, and its diagnostic payload <bcp14>MAY</bcp14> provide additional information. When receiving the error response, the initiator terminates the OSCORE IDs procedure as failed.</t>
        <t>An initiator terminates an ongoing OSCORE ID update procedure with another peer as failed, in case, after having sent the first ID update message for the procedure in question, a pre-defined amount of time has elapsed without receiving and successfully verifying the second ID update message from the other peer. It is <bcp14>RECOMMENDED</bcp14> that such an amount of time is equal to MAX_TRANSMIT_WAIT (see <xref section="4.8.2" sectionFormat="of" target="RFC7252"/>).</t>
        <t>When the OSCORE ID update procedure is integrated into the execution of the KUDOS procedure, it is possible that the KUDOS procedure succeeds while the OSCORE ID update procedure fails. In such case, the peers continue their communications using the newly derived OSCORE Security Context CTX_NEW obtained from the KUDOS procedure, and still use the old Sender and Recipient IDs. That is, any Recipient IDs conveyed in the exchanged Recipient-ID Options is not considered.</t>
        <t>Conversely, the OSCORE ID update procedure may succeed while the KUDOS procedure fails. As long as the peers have exchanged a pair of OSCORE-protected request and response that conveyed their desired new Recipient IDs in the Recipient-ID Option, the peers start using those IDs in their communications.</t>
      </section>
      <section anchor="sec-recipient-id-option">
        <name>The Recipient-ID Option</name>
        <t>The Recipient ID-Option defined in this section has the properties summarized in <xref target="_table-recipient-id-option"/>, which extends Table 4 of <xref target="RFC7252"/>. That is, the option is elective, safe to forward, part of the cache key, and not repeatable.</t>
        <table align="center" anchor="_table-recipient-id-option">
          <name>The Recipient-ID Option.                                                             C=Critical, U=Unsafe, N=NoCacheKey, R=Repeatable</name>
          <thead>
            <tr>
              <th align="left">No.</th>
              <th align="left">C</th>
              <th align="left">U</th>
              <th align="left">N</th>
              <th align="left">R</th>
              <th align="left">Name</th>
              <th align="left">Format</th>
              <th align="left">Length</th>
              <th align="left">Default</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD24</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left">Recipient-ID</td>
              <td align="left">opaque</td>
              <td align="left">any</td>
              <td align="left">(none)</td>
            </tr>
          </tbody>
        </table>
        <t>Note to RFC Editor: Following the registration of the CoAP Option Number 24, please replace "TBD24" with "24" in the figure above. Then, please delete this paragraph.</t>
        <t>The option value can have an arbitrary length, including zero length to indicate intent to use the empty string as Recipient ID. Implementations can limit its length to that of the longest supported Recipient ID.</t>
        <t>This document particularly defines how this option is used in messages protected with OSCORE. That is, when the option is included in an outgoing message, the option value specifies the new OSCORE Recipient ID that the sender endpoint intends to use with the other endpoint sharing the OSCORE Security Context.</t>
        <t>Therefore, the maximum length of the option value is equal to the maximum length of OSCORE Sender/Recipient IDs. As defined in <xref section="3.3" sectionFormat="of" target="RFC8613"/>, this is determined by the size of the AEAD nonce of the used AEAD Algorithm in the OSCORE Security Context.</t>
        <t>If the length of the Recipient ID included in the Recipient-ID option is zero, the option value <bcp14>SHALL</bcp14> be empty (Option Length = 0).</t>
        <t>The Recipient-ID Option is of class E in terms of OSCORE processing (see <xref section="4.1" sectionFormat="of" target="RFC8613"/>).</t>
        <section anchor="example-client-initiated-id-update">
          <name>Forward Message Flow</name>
          <t><xref target="fig-id-update-client-init"/> shows an example of the OSCORE ID update procedure, run stand-alone and in the forward message flow, with the client acting as initiator. On each peer, SID and RID denote the OSCORE Sender ID and Recipient ID of that peer, respectively.</t>
          <t><xref target="sec-id-update-in-kudos-forward"/> provides a different example of the OSCORE ID update procedure, as run integrated in an execution of KUDOS and in the forward message flow (see <xref section="4.3.5" sectionFormat="of" target="I-D.ietf-core-oscore-key-update"/>).</t>
          <figure anchor="fig-id-update-client-init">
            <name>Example of the OSCORE ID update procedure with Forward Message Flow</name>
            <artset>
              <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1408" width="496" viewBox="0 0 496 1408" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 104,64 L 104,1392" fill="none" stroke="black"/>
                  <path d="M 392,64 L 392,1392" fill="none" stroke="black"/>
                  <path d="M 112,176 L 384,176" fill="none" stroke="black"/>
                  <path d="M 112,384 L 384,384" fill="none" stroke="black"/>
                  <path d="M 112,656 L 384,656" fill="none" stroke="black"/>
                  <path d="M 112,832 L 384,832" fill="none" stroke="black"/>
                  <path d="M 112,1040 L 384,1040" fill="none" stroke="black"/>
                  <path d="M 112,1264 L 384,1264" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="392,1040 380,1034.4 380,1045.6" fill="black" transform="rotate(0,384,1040)"/>
                  <polygon class="arrowhead" points="392,656 380,650.4 380,661.6" fill="black" transform="rotate(0,384,656)"/>
                  <polygon class="arrowhead" points="392,176 380,170.4 380,181.6" fill="black" transform="rotate(0,384,176)"/>
                  <polygon class="arrowhead" points="120,1264 108,1258.4 108,1269.6" fill="black" transform="rotate(180,112,1264)"/>
                  <polygon class="arrowhead" points="120,832 108,826.4 108,837.6" fill="black" transform="rotate(180,112,832)"/>
                  <polygon class="arrowhead" points="120,384 108,378.4 108,389.6" fill="black" transform="rotate(180,112,384)"/>
                  <g class="text">
                    <text x="108" y="36">Client</text>
                    <text x="388" y="36">Server</text>
                    <text x="104" y="52">(initiator)</text>
                    <text x="392" y="52">(responder)</text>
                    <text x="24" y="84">CTX_A</text>
                    <text x="56" y="84">{</text>
                    <text x="424" y="84">CTX_A</text>
                    <text x="456" y="84">{</text>
                    <text x="24" y="100">SID</text>
                    <text x="48" y="100">=</text>
                    <text x="76" y="100">0x01</text>
                    <text x="424" y="100">SID</text>
                    <text x="448" y="100">=</text>
                    <text x="476" y="100">0x00</text>
                    <text x="24" y="116">RID</text>
                    <text x="48" y="116">=</text>
                    <text x="76" y="116">0x00</text>
                    <text x="424" y="116">RID</text>
                    <text x="448" y="116">=</text>
                    <text x="476" y="116">0x01</text>
                    <text x="8" y="132">}</text>
                    <text x="408" y="132">}</text>
                    <text x="232" y="164">Request</text>
                    <text x="276" y="164">#1</text>
                    <text x="32" y="180">Protect</text>
                    <text x="424" y="180">/temp</text>
                    <text x="20" y="196">with</text>
                    <text x="64" y="196">CTX_A</text>
                    <text x="140" y="196">OSCORE</text>
                    <text x="176" y="196">{</text>
                    <text x="136" y="212">...</text>
                    <text x="140" y="228">kid:</text>
                    <text x="180" y="228">0x01</text>
                    <text x="428" y="228">Verify</text>
                    <text x="120" y="244">}</text>
                    <text x="420" y="244">with</text>
                    <text x="464" y="244">CTX_A</text>
                    <text x="152" y="260">Encrypted</text>
                    <text x="224" y="260">Payload</text>
                    <text x="264" y="260">{</text>
                    <text x="136" y="276">...</text>
                    <text x="176" y="292">Recipient-ID:</text>
                    <text x="252" y="292">0x42</text>
                    <text x="136" y="308">...</text>
                    <text x="168" y="324">Application</text>
                    <text x="248" y="324">Payload</text>
                    <text x="120" y="340">}</text>
                    <text x="236" y="372">Response</text>
                    <text x="284" y="372">#1</text>
                    <text x="432" y="388">Protect</text>
                    <text x="140" y="404">OSCORE</text>
                    <text x="176" y="404">{</text>
                    <text x="420" y="404">with</text>
                    <text x="464" y="404">CTX_A</text>
                    <text x="136" y="420">...</text>
                    <text x="28" y="436">Verify</text>
                    <text x="120" y="436">}</text>
                    <text x="20" y="452">with</text>
                    <text x="64" y="452">CTX_A</text>
                    <text x="152" y="452">Encrypted</text>
                    <text x="224" y="452">Payload</text>
                    <text x="264" y="452">{</text>
                    <text x="136" y="468">...</text>
                    <text x="176" y="484">Recipient-ID:</text>
                    <text x="252" y="484">0x78</text>
                    <text x="136" y="500">...</text>
                    <text x="168" y="516">Application</text>
                    <text x="248" y="516">Payload</text>
                    <text x="120" y="532">}</text>
                    <text x="24" y="564">CTX_B</text>
                    <text x="56" y="564">{</text>
                    <text x="424" y="564">CTX_B</text>
                    <text x="456" y="564">{</text>
                    <text x="24" y="580">SID</text>
                    <text x="48" y="580">=</text>
                    <text x="76" y="580">0x78</text>
                    <text x="424" y="580">SID</text>
                    <text x="448" y="580">=</text>
                    <text x="476" y="580">0x42</text>
                    <text x="24" y="596">RID</text>
                    <text x="48" y="596">=</text>
                    <text x="76" y="596">0x42</text>
                    <text x="424" y="596">RID</text>
                    <text x="448" y="596">=</text>
                    <text x="476" y="596">0x78</text>
                    <text x="8" y="612">}</text>
                    <text x="408" y="612">}</text>
                    <text x="232" y="644">Request</text>
                    <text x="276" y="644">#2</text>
                    <text x="32" y="660">Protect</text>
                    <text x="424" y="660">/temp</text>
                    <text x="20" y="676">with</text>
                    <text x="64" y="676">CTX_B</text>
                    <text x="140" y="676">OSCORE</text>
                    <text x="176" y="676">{</text>
                    <text x="136" y="692">...</text>
                    <text x="140" y="708">kid:</text>
                    <text x="180" y="708">0x78</text>
                    <text x="428" y="708">Verify</text>
                    <text x="120" y="724">}</text>
                    <text x="420" y="724">with</text>
                    <text x="464" y="724">CTX_B</text>
                    <text x="152" y="740">Encrypted</text>
                    <text x="224" y="740">Payload</text>
                    <text x="264" y="740">{</text>
                    <text x="136" y="756">...</text>
                    <text x="168" y="772">Application</text>
                    <text x="248" y="772">Payload</text>
                    <text x="120" y="788">}</text>
                    <text x="236" y="820">Response</text>
                    <text x="284" y="820">#2</text>
                    <text x="432" y="836">Protect</text>
                    <text x="140" y="852">OSCORE</text>
                    <text x="176" y="852">{</text>
                    <text x="420" y="852">with</text>
                    <text x="464" y="852">CTX_B</text>
                    <text x="136" y="868">...</text>
                    <text x="28" y="884">Verify</text>
                    <text x="120" y="884">}</text>
                    <text x="20" y="900">with</text>
                    <text x="64" y="900">CTX_B</text>
                    <text x="152" y="900">Encrypted</text>
                    <text x="224" y="900">Payload</text>
                    <text x="264" y="900">{</text>
                    <text x="136" y="916">...</text>
                    <text x="168" y="932">Application</text>
                    <text x="248" y="932">Payload</text>
                    <text x="120" y="948">}</text>
                    <text x="32" y="980">Discard</text>
                    <text x="24" y="996">CTX_A</text>
                    <text x="232" y="1028">Request</text>
                    <text x="276" y="1028">#3</text>
                    <text x="32" y="1044">Protect</text>
                    <text x="424" y="1044">/temp</text>
                    <text x="20" y="1060">with</text>
                    <text x="64" y="1060">CTX_B</text>
                    <text x="140" y="1060">OSCORE</text>
                    <text x="176" y="1060">{</text>
                    <text x="136" y="1076">...</text>
                    <text x="140" y="1092">kid:</text>
                    <text x="180" y="1092">0x78</text>
                    <text x="428" y="1092">Verify</text>
                    <text x="120" y="1108">}</text>
                    <text x="420" y="1108">with</text>
                    <text x="464" y="1108">CTX_B</text>
                    <text x="152" y="1124">Encrypted</text>
                    <text x="224" y="1124">Payload</text>
                    <text x="264" y="1124">{</text>
                    <text x="136" y="1140">...</text>
                    <text x="168" y="1156">Application</text>
                    <text x="248" y="1156">Payload</text>
                    <text x="120" y="1172">}</text>
                    <text x="432" y="1204">Discard</text>
                    <text x="424" y="1220">CTX_A</text>
                    <text x="236" y="1252">Response</text>
                    <text x="284" y="1252">#3</text>
                    <text x="432" y="1268">Protect</text>
                    <text x="140" y="1284">OSCORE</text>
                    <text x="176" y="1284">{</text>
                    <text x="420" y="1284">with</text>
                    <text x="464" y="1284">CTX_B</text>
                    <text x="136" y="1300">...</text>
                    <text x="28" y="1316">Verify</text>
                    <text x="120" y="1316">}</text>
                    <text x="20" y="1332">with</text>
                    <text x="64" y="1332">CTX_B</text>
                    <text x="152" y="1332">Encrypted</text>
                    <text x="224" y="1332">Payload</text>
                    <text x="264" y="1332">{</text>
                    <text x="136" y="1348">...</text>
                    <text x="168" y="1364">Application</text>
                    <text x="248" y="1364">Payload</text>
                    <text x="120" y="1380">}</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art" align="center"><![CDATA[
          Client                             Server
       (initiator)                         (responder)
            |                                   |
CTX_A {     |                                   | CTX_A {
 SID = 0x01 |                                   |  SID = 0x00
 RID = 0x00 |                                   |  RID = 0x01
}           |                                   | }
            |                                   |
            |            Request #1             |
Protect     |---------------------------------->| /temp
with CTX_A  | OSCORE {                          |
            |  ...                              |
            |  kid: 0x01                        | Verify
            | }                                 | with CTX_A
            | Encrypted Payload {               |
            |  ...                              |
            |  Recipient-ID: 0x42               |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
            |            Response #1            |
            |<----------------------------------| Protect
            | OSCORE {                          | with CTX_A
            |  ...                              |
Verify      | }                                 |
with CTX_A  | Encrypted Payload {               |
            |  ...                              |
            |  Recipient-ID: 0x78               |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
CTX_B {     |                                   | CTX_B {
 SID = 0x78 |                                   |  SID = 0x42
 RID = 0x42 |                                   |  RID = 0x78
}           |                                   | }
            |                                   |
            |            Request #2             |
Protect     |---------------------------------->| /temp
with CTX_B  | OSCORE {                          |
            |  ...                              |
            |  kid: 0x78                        | Verify
            | }                                 | with CTX_B
            | Encrypted Payload {               |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
            |            Response #2            |
            |<----------------------------------| Protect
            | OSCORE {                          | with CTX_B
            |  ...                              |
Verify      | }                                 |
with CTX_B  | Encrypted Payload {               |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
Discard     |                                   |
CTX_A       |                                   |
            |                                   |
            |            Request #3             |
Protect     |---------------------------------->| /temp
with CTX_B  | OSCORE {                          |
            |  ...                              |
            |  kid: 0x78                        | Verify
            | }                                 | with CTX_B
            | Encrypted Payload {               |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
            |                                   | Discard
            |                                   | CTX_A
            |                                   |
            |            Response #3            |
            |<----------------------------------| Protect
            | OSCORE {                          | with CTX_B
            |  ...                              |
Verify      | }                                 |
with CTX_B  | Encrypted Payload {               |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
]]></artwork>
            </artset>
          </figure>
          <t>Before the OSCORE ID update procedure starts, the client (the server) shares with the server (the client) an OSCORE Security Context CTX_A with Sender ID 0x01 (0x00) and Recipient ID 0x00 (0x01).</t>
          <t>When starting the OSCORE ID update procedure, the client determines its new intended OSCORE Recipient ID 0x42. Then, the client prepares a CoAP request targeting an application resource at the server. The request includes the Recipient-ID Option, with value the client's new Recipient ID 0x42.</t>
          <t>The client protects the request with CTX_A, i.e., by using the keying material derived from the client's current Sender ID 0x01. The protected request specifies the client's current Sender ID 0x01 in the 'kid' field of the OSCORE Option. After that, the client sends the request to the server as Request #1.</t>
          <t>Upon receiving, decrypting, and successfully verifying the OSCORE message Request #1, the server retrieves the value 0x42 from the Recipient-ID Option, and determines its new intended OSCORE Recipient ID 0x78. Then, the server prepares a CoAP response including the Recipient-ID Option, with value the server's new Recipient ID 0x78.</t>
          <t>The server protects the response with CTX_A, i.e., by using the keying material derived from the server's current Sender ID 0x00. After that, the server sends the response to the client.</t>
          <t>Then, the server considers 0x42 and 0x78 as its new Sender ID and Recipient ID to use with the client, respectively. As shown in the example, the server practically installs a new OSCORE Security Context CTX_B where: i) its Sender ID and Recipient ID are 0x42 and 0x78, respectively; ii) the Sender Sequence Number and the Replay Window are re-initialized (see <xref section="3.2.2" sectionFormat="of" target="RFC8613"/>); iii) anything else is like in the OSCORE Security Context used to encrypt the OSCORE message Response #1.</t>
          <t>Upon receiving, decrypting, and successfully verifying the OSCORE message Response #1, the client considers 0x78 and 0x42 as the new Sender ID and Recipient ID to use with the server, respectively. As shown in the example, the client practically installs a new OSCORE Security Context CTX_B where: i) its Sender ID and Recipient ID are 0x78 and 0x42, respectively; ii) the Sender Sequence Number and the Replay Window are re-initialized (see <xref section="3.2.2" sectionFormat="of" target="RFC8613"/>); iii) anything else is like in the OSCORE Security Context used to decrypt the OSCORE message Response #1.</t>
          <t>From then on, the client and the server can exchange messages protected with the OSCORE Security Context CTX_B, i.e., according to the new OSCORE Sender/Recipient IDs and using new keying material derived from those.</t>
          <t>That is, the client sends the OSCORE message Request #2, which is protected with CTX_B and specifies the new client's Sender ID 0x78 in the 'kid' field of the OSCORE Option.</t>
          <t>Upon receiving the OSCORE message Request #2, the server retrieves the OSCORE Security Context CTX_B, according to its new Recipient ID 0x78 specified in the 'kid' field of the OSCORE Option. Then, the server decrypts and verifies the response by using CTX_B. Finally, the server prepares a CoAP response Response #2, protects it with CTX_B, and sends it to the client.</t>
          <t>Upon receiving the OSCORE message Response #2, the client decrypts and verifies it with the OSCORE Security Context CTX_B. In case of successful verification, the client confirms that the server is aligned with the new OSCORE Sender/Recipient IDs, and thus discards the OSCORE Security Context CTX_A.</t>
          <t>After that, one further exchange occurs, where both the CoAP request and the CoAP response are protected with the OSCORE Security Context CTX_B. In particular, upon receiving, decrypting, and successfully verifying the OSCORE message Request #3, the server confirms that the client is aligned with the new OSCORE Sender/Recipient IDs, and thus discards the OSCORE Security Context CTX_A.</t>
        </section>
        <section anchor="example-server-initiated-id-update">
          <name>Reverse Message Flow</name>
          <t><xref target="fig-id-update-server-init"/> shows an example of the OSCORE ID update procedure, run stand-alone and in the reverse message flow, with the server acting as initiator. On each peer, SID and RID denote the OSCORE Sender ID and Recipient ID of that peer, respectively.</t>
          <t><xref target="sec-id-update-in-kudos-reverse"/> provides a different example of the OSCORE ID update procedure, as run integrated in an execution of KUDOS and in the reverse message flow (see <xref section="4.3.6" sectionFormat="of" target="I-D.ietf-core-oscore-key-update"/>).</t>
          <figure anchor="fig-id-update-server-init">
            <name>Example of the OSCORE ID update procedure with Reverse Message Flow</name>
            <artset>
              <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1824" width="496" viewBox="0 0 496 1824" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 104,64 L 104,1808" fill="none" stroke="black"/>
                  <path d="M 392,64 L 392,1808" fill="none" stroke="black"/>
                  <path d="M 112,176 L 384,176" fill="none" stroke="black"/>
                  <path d="M 112,352 L 384,352" fill="none" stroke="black"/>
                  <path d="M 112,544 L 384,544" fill="none" stroke="black"/>
                  <path d="M 112,832 L 384,832" fill="none" stroke="black"/>
                  <path d="M 112,1072 L 384,1072" fill="none" stroke="black"/>
                  <path d="M 112,1248 L 384,1248" fill="none" stroke="black"/>
                  <path d="M 112,1456 L 384,1456" fill="none" stroke="black"/>
                  <path d="M 112,1680 L 384,1680" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="392,1456 380,1450.4 380,1461.6" fill="black" transform="rotate(0,384,1456)"/>
                  <polygon class="arrowhead" points="392,1072 380,1066.4 380,1077.6" fill="black" transform="rotate(0,384,1072)"/>
                  <polygon class="arrowhead" points="392,544 380,538.4 380,549.6" fill="black" transform="rotate(0,384,544)"/>
                  <polygon class="arrowhead" points="392,176 380,170.4 380,181.6" fill="black" transform="rotate(0,384,176)"/>
                  <polygon class="arrowhead" points="120,1680 108,1674.4 108,1685.6" fill="black" transform="rotate(180,112,1680)"/>
                  <polygon class="arrowhead" points="120,1248 108,1242.4 108,1253.6" fill="black" transform="rotate(180,112,1248)"/>
                  <polygon class="arrowhead" points="120,832 108,826.4 108,837.6" fill="black" transform="rotate(180,112,832)"/>
                  <polygon class="arrowhead" points="120,352 108,346.4 108,357.6" fill="black" transform="rotate(180,112,352)"/>
                  <g class="text">
                    <text x="108" y="36">Client</text>
                    <text x="388" y="36">Server</text>
                    <text x="104" y="52">(responder)</text>
                    <text x="392" y="52">(initiator)</text>
                    <text x="24" y="84">CTX_A</text>
                    <text x="56" y="84">{</text>
                    <text x="424" y="84">CTX_A</text>
                    <text x="456" y="84">{</text>
                    <text x="24" y="100">SID</text>
                    <text x="48" y="100">=</text>
                    <text x="76" y="100">0x01</text>
                    <text x="424" y="100">SID</text>
                    <text x="448" y="100">=</text>
                    <text x="476" y="100">0x00</text>
                    <text x="24" y="116">RID</text>
                    <text x="48" y="116">=</text>
                    <text x="76" y="116">0x00</text>
                    <text x="424" y="116">RID</text>
                    <text x="448" y="116">=</text>
                    <text x="476" y="116">0x01</text>
                    <text x="8" y="132">}</text>
                    <text x="408" y="132">}</text>
                    <text x="232" y="164">Request</text>
                    <text x="276" y="164">#1</text>
                    <text x="32" y="180">Protect</text>
                    <text x="424" y="180">/temp</text>
                    <text x="20" y="196">with</text>
                    <text x="64" y="196">CTX_A</text>
                    <text x="140" y="196">OSCORE</text>
                    <text x="176" y="196">{</text>
                    <text x="136" y="212">...</text>
                    <text x="140" y="228">kid:</text>
                    <text x="180" y="228">0x01</text>
                    <text x="428" y="228">Verify</text>
                    <text x="120" y="244">}</text>
                    <text x="420" y="244">with</text>
                    <text x="464" y="244">CTX_A</text>
                    <text x="152" y="260">Encrypted</text>
                    <text x="224" y="260">Payload</text>
                    <text x="264" y="260">{</text>
                    <text x="136" y="276">...</text>
                    <text x="168" y="292">Application</text>
                    <text x="248" y="292">Payload</text>
                    <text x="120" y="308">}</text>
                    <text x="236" y="340">Response</text>
                    <text x="284" y="340">#1</text>
                    <text x="432" y="356">Protect</text>
                    <text x="140" y="372">OSCORE</text>
                    <text x="176" y="372">{</text>
                    <text x="420" y="372">with</text>
                    <text x="464" y="372">CTX_A</text>
                    <text x="136" y="388">...</text>
                    <text x="28" y="404">Verify</text>
                    <text x="120" y="404">}</text>
                    <text x="20" y="420">with</text>
                    <text x="64" y="420">CTX_A</text>
                    <text x="152" y="420">Encrypted</text>
                    <text x="224" y="420">Payload</text>
                    <text x="264" y="420">{</text>
                    <text x="136" y="436">...</text>
                    <text x="176" y="452">Recipient-ID:</text>
                    <text x="252" y="452">0x78</text>
                    <text x="136" y="468">...</text>
                    <text x="168" y="484">Application</text>
                    <text x="248" y="484">Payload</text>
                    <text x="120" y="500">}</text>
                    <text x="232" y="532">Request</text>
                    <text x="276" y="532">#2</text>
                    <text x="32" y="548">Protect</text>
                    <text x="424" y="548">/temp</text>
                    <text x="20" y="564">with</text>
                    <text x="64" y="564">CTX_A</text>
                    <text x="140" y="564">OSCORE</text>
                    <text x="176" y="564">{</text>
                    <text x="136" y="580">...</text>
                    <text x="140" y="596">kid:</text>
                    <text x="180" y="596">0x01</text>
                    <text x="428" y="596">Verify</text>
                    <text x="120" y="612">}</text>
                    <text x="420" y="612">with</text>
                    <text x="464" y="612">CTX_A</text>
                    <text x="152" y="628">Encrypted</text>
                    <text x="224" y="628">Payload</text>
                    <text x="264" y="628">{</text>
                    <text x="136" y="644">...</text>
                    <text x="176" y="660">Recipient-ID:</text>
                    <text x="252" y="660">0x42</text>
                    <text x="136" y="676">...</text>
                    <text x="168" y="692">Application</text>
                    <text x="248" y="692">Payload</text>
                    <text x="120" y="708">}</text>
                    <text x="424" y="740">CTX_B</text>
                    <text x="456" y="740">{</text>
                    <text x="424" y="756">SID</text>
                    <text x="448" y="756">=</text>
                    <text x="476" y="756">0x42</text>
                    <text x="424" y="772">RID</text>
                    <text x="448" y="772">=</text>
                    <text x="476" y="772">0x78</text>
                    <text x="408" y="788">}</text>
                    <text x="236" y="820">Response</text>
                    <text x="284" y="820">#2</text>
                    <text x="432" y="836">Protect</text>
                    <text x="140" y="852">OSCORE</text>
                    <text x="176" y="852">{</text>
                    <text x="420" y="852">with</text>
                    <text x="464" y="852">CTX_A</text>
                    <text x="136" y="868">...</text>
                    <text x="28" y="884">Verify</text>
                    <text x="120" y="884">}</text>
                    <text x="20" y="900">with</text>
                    <text x="64" y="900">CTX_A</text>
                    <text x="152" y="900">Encrypted</text>
                    <text x="224" y="900">Payload</text>
                    <text x="264" y="900">{</text>
                    <text x="136" y="916">...</text>
                    <text x="168" y="932">Application</text>
                    <text x="248" y="932">Payload</text>
                    <text x="120" y="948">}</text>
                    <text x="24" y="980">CTX_B</text>
                    <text x="56" y="980">{</text>
                    <text x="24" y="996">SID</text>
                    <text x="48" y="996">=</text>
                    <text x="76" y="996">0x78</text>
                    <text x="24" y="1012">RID</text>
                    <text x="48" y="1012">=</text>
                    <text x="76" y="1012">0x42</text>
                    <text x="8" y="1028">}</text>
                    <text x="232" y="1060">Request</text>
                    <text x="276" y="1060">#3</text>
                    <text x="32" y="1076">Protect</text>
                    <text x="424" y="1076">/temp</text>
                    <text x="20" y="1092">with</text>
                    <text x="64" y="1092">CTX_B</text>
                    <text x="140" y="1092">OSCORE</text>
                    <text x="176" y="1092">{</text>
                    <text x="136" y="1108">...</text>
                    <text x="140" y="1124">kid:</text>
                    <text x="180" y="1124">0x78</text>
                    <text x="428" y="1124">Verify</text>
                    <text x="120" y="1140">}</text>
                    <text x="420" y="1140">with</text>
                    <text x="464" y="1140">CTX_B</text>
                    <text x="152" y="1156">Encrypted</text>
                    <text x="224" y="1156">Payload</text>
                    <text x="264" y="1156">{</text>
                    <text x="136" y="1172">...</text>
                    <text x="168" y="1188">Application</text>
                    <text x="248" y="1188">Payload</text>
                    <text x="120" y="1204">}</text>
                    <text x="236" y="1236">Response</text>
                    <text x="284" y="1236">#3</text>
                    <text x="432" y="1252">Protect</text>
                    <text x="140" y="1268">OSCORE</text>
                    <text x="176" y="1268">{</text>
                    <text x="420" y="1268">with</text>
                    <text x="464" y="1268">CTX_B</text>
                    <text x="136" y="1284">...</text>
                    <text x="28" y="1300">Verify</text>
                    <text x="120" y="1300">}</text>
                    <text x="20" y="1316">with</text>
                    <text x="64" y="1316">CTX_B</text>
                    <text x="152" y="1316">Encrypted</text>
                    <text x="224" y="1316">Payload</text>
                    <text x="264" y="1316">{</text>
                    <text x="136" y="1332">...</text>
                    <text x="168" y="1348">Application</text>
                    <text x="248" y="1348">Payload</text>
                    <text x="120" y="1364">}</text>
                    <text x="32" y="1396">Discard</text>
                    <text x="24" y="1412">CTX_A</text>
                    <text x="232" y="1444">Request</text>
                    <text x="276" y="1444">#4</text>
                    <text x="32" y="1460">Protect</text>
                    <text x="424" y="1460">/temp</text>
                    <text x="20" y="1476">with</text>
                    <text x="64" y="1476">CTX_B</text>
                    <text x="140" y="1476">OSCORE</text>
                    <text x="176" y="1476">{</text>
                    <text x="136" y="1492">...</text>
                    <text x="140" y="1508">kid:</text>
                    <text x="180" y="1508">0x78</text>
                    <text x="428" y="1508">Verify</text>
                    <text x="120" y="1524">}</text>
                    <text x="420" y="1524">with</text>
                    <text x="464" y="1524">CTX_B</text>
                    <text x="152" y="1540">Encrypted</text>
                    <text x="224" y="1540">Payload</text>
                    <text x="264" y="1540">{</text>
                    <text x="136" y="1556">...</text>
                    <text x="168" y="1572">Application</text>
                    <text x="248" y="1572">Payload</text>
                    <text x="120" y="1588">}</text>
                    <text x="432" y="1620">Discard</text>
                    <text x="424" y="1636">CTX_A</text>
                    <text x="236" y="1668">Response</text>
                    <text x="284" y="1668">#4</text>
                    <text x="432" y="1684">Protect</text>
                    <text x="140" y="1700">OSCORE</text>
                    <text x="176" y="1700">{</text>
                    <text x="420" y="1700">with</text>
                    <text x="464" y="1700">CTX_B</text>
                    <text x="136" y="1716">...</text>
                    <text x="28" y="1732">Verify</text>
                    <text x="120" y="1732">}</text>
                    <text x="20" y="1748">with</text>
                    <text x="64" y="1748">CTX_B</text>
                    <text x="152" y="1748">Encrypted</text>
                    <text x="224" y="1748">Payload</text>
                    <text x="264" y="1748">{</text>
                    <text x="136" y="1764">...</text>
                    <text x="168" y="1780">Application</text>
                    <text x="248" y="1780">Payload</text>
                    <text x="120" y="1796">}</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art" align="center"><![CDATA[
          Client                             Server
       (responder)                         (initiator)
            |                                   |
CTX_A {     |                                   | CTX_A {
 SID = 0x01 |                                   |  SID = 0x00
 RID = 0x00 |                                   |  RID = 0x01
}           |                                   | }
            |                                   |
            |            Request #1             |
Protect     |---------------------------------->| /temp
with CTX_A  | OSCORE {                          |
            |  ...                              |
            |  kid: 0x01                        | Verify
            | }                                 | with CTX_A
            | Encrypted Payload {               |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
            |            Response #1            |
            |<----------------------------------| Protect
            | OSCORE {                          | with CTX_A
            |  ...                              |
Verify      | }                                 |
with CTX_A  | Encrypted Payload {               |
            |  ...                              |
            |  Recipient-ID: 0x78               |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
            |            Request #2             |
Protect     |---------------------------------->| /temp
with CTX_A  | OSCORE {                          |
            |  ...                              |
            |  kid: 0x01                        | Verify
            | }                                 | with CTX_A
            | Encrypted Payload {               |
            |  ...                              |
            |  Recipient-ID: 0x42               |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
            |                                   | CTX_B {
            |                                   |  SID = 0x42
            |                                   |  RID = 0x78
            |                                   | }
            |                                   |
            |            Response #2            |
            |<----------------------------------| Protect
            | OSCORE {                          | with CTX_A
            |  ...                              |
Verify      | }                                 |
with CTX_A  | Encrypted Payload {               |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
CTX_B {     |                                   |
 SID = 0x78 |                                   |
 RID = 0x42 |                                   |
}           |                                   |
            |                                   |
            |            Request #3             |
Protect     |---------------------------------->| /temp
with CTX_B  | OSCORE {                          |
            |  ...                              |
            |  kid: 0x78                        | Verify
            | }                                 | with CTX_B
            | Encrypted Payload {               |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
            |            Response #3            |
            |<----------------------------------| Protect
            | OSCORE {                          | with CTX_B
            |  ...                              |
Verify      | }                                 |
with CTX_B  | Encrypted Payload {               |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
Discard     |                                   |
CTX_A       |                                   |
            |                                   |
            |            Request #4             |
Protect     |---------------------------------->| /temp
with CTX_B  | OSCORE {                          |
            |  ...                              |
            |  kid: 0x78                        | Verify
            | }                                 | with CTX_B
            | Encrypted Payload {               |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
            |                                   | Discard
            |                                   | CTX_A
            |                                   |
            |            Response #4            |
            |<----------------------------------| Protect
            | OSCORE {                          | with CTX_B
            |  ...                              |
Verify      | }                                 |
with CTX_B  | Encrypted Payload {               |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
]]></artwork>
            </artset>
          </figure>
          <t>Before the OSCORE ID update procedure starts, the client (the server) shares with the server (the client) an OSCORE Security Context CTX_A with Sender ID 0x01 (0x00) and Recipient ID 0x00 (0x01).</t>
          <t>At first, the client prepares a CoAP Request #1 targeting an application resource at the server. The client protects the request with CTX_A, i.e., by using the keying material derived from the client's current Sender ID 0x01. The protected request specifies the client's current Sender ID 0x01 in the 'kid' field of the OSCORE Option. After that, the client sends the request to the server as Request #1.</t>
          <t>Upon receiving, decrypting, and successfully verifying the OSCORE message Request #1, the server decides to start an OSCORE ID update procedure. To this end, the server determines its new intended OSCORE Recipient ID 0x78. Then, the server prepares a CoAP response as a reply to the just received request and including the Recipient-ID Option, with value the server's new Recipient ID 0x78.</t>
          <t>The server protects the response with CTX_A, i.e., by using the keying material derived from the server's current Sender ID 0x00. After that, the server sends the response to the client as Response #1.</t>
          <t>Upon receiving, decrypting, and successfully verifying the OSCORE message Response #1, the client retrieves the value 0x78 from the Recipient-ID Option, and determines its new intended OSCORE Recipient ID 0x42. Then, the client prepares a CoAP request targeting an application resource at the server. The request includes the Recipient-ID Option, with value the client's new Recipient ID 0x42.</t>
          <t>The client protects the request with CTX_A, i.e., by using the keying material derived from the client's current Sender ID 0x01. The protected request specifies the client's current Sender ID 0x01 in the 'kid' field of the OSCORE Option. After that, the client sends the request to the server as Request #2.</t>
          <t>Upon receiving, decrypting, and successfully verifying the OSCORE message Request #2, the server retrieves the value 0x42 from the Recipient-ID Option. Then the server considers 0x42 and 0x78 as the new Sender ID and Recipient ID to use with the client, respectively. As shown in the example, the server practically installs a new OSCORE Security Context CTX_B where: i) its Sender ID and Recipient ID are 0x42 and 0x78, respectively; ii) the Sender Sequence Number and the Replay Window are re-initialized (see <xref section="3.2.2" sectionFormat="of" target="RFC8613"/>); iii) anything else is like in the OSCORE Security Context used to encrypt the OSCORE message Request #2.</t>
          <t>Then, the server prepares a CoAP response, as a reply to the just received request, and protects it with CTX_A, i.e., by using the keying material derived from the server's current Sender ID 0x00. After that, the server sends the response to the client as Response #2.</t>
          <t>Upon receiving, decrypting, and successfully verifying the OSCORE message Response #2, the client considers 0x78 and 0x42 as the new Sender ID and Recipient ID to use with the server, respectively. As shown in the example, the client practically installs a new OSCORE Security Context CTX_B where: i) its Sender ID and Recipient ID are 0x78 and 0x42, respectively; ii) the Sender Sequence Number and the Replay Window are re-initialized (see <xref section="3.2.2" sectionFormat="of" target="RFC8613"/>); iii) anything else is like in the OSCORE Security Context used to decrypt the OSCORE response.</t>
          <t>From then on, the client and the server can exchange messages protected with the OSCORE Security Context CTX_B, i.e., according to the new OSCORE Sender/Recipient IDs and using new keying material derived from those.</t>
          <t>That is, the client sends the OSCORE message Request #3, which is protected with CTX_B and specifies the new client's Sender ID 0x78 in the 'kid' field of the OSCORE Option.</t>
          <t>Upon receiving the OSCORE message Request #3, the server retrieves the OSCORE Security Context CTX_B, according to its new Recipient ID 0x78 specified in the 'kid' field of the OSCORE Option. Then, the server decrypts and verifies the response by using CTX_B. Finally, the server prepares a CoAP response, protects it with CTX_B, and sends it to the client as Response #3.</t>
          <t>Upon receiving the OSCORE message Response #3, the client decrypts and verifies it with the OSCORE Security Context CTX_B. In case of successful verification, the client confirms that the server is aligned with the new OSCORE Sender/Recipient IDs, and thus discards the OSCORE Security Context CTX_A.</t>
          <t>After that, one further exchange occurs, where both the CoAP request and the CoAP response are protected with the OSCORE Security Context CTX_B. In particular, upon receiving, decrypting, and successfully verifying the OSCORE message Request #4, the server confirms that the client is aligned with the new OSCORE Sender/Recipient IDs, and thus discards the OSCORE Security Context CTX_A.</t>
        </section>
        <section anchor="id-update-additional-actions">
          <name>Additional Actions for Execution</name>
          <t>After having experienced a loss of state, a peer <bcp14>MUST NOT</bcp14> participate in a stand-alone OSCORE ID update procedure with another peer, until having performed a full-fledged establishment/renewal of an OSCORE Security Context with the other peer (e.g., by running KUDOS <xref target="I-D.ietf-core-oscore-key-update"/> or the authenticated key establishment protocol EDHOC <xref target="RFC9528"/>).</t>
          <t>More precisely, a peer has experienced a loss of state if it cannot access the latest snapshot of the latest OSCORE Security Context CTX_OLD or the whole set of OSCORE Sender/Recipient IDs that have been used with the triplet (Master Secret, Master Salt, ID Context) of CTX_OLD. This can happen, for instance, after a device reboots.</t>
          <t>Furthermore, when participating in a stand-alone OSCORE ID update procedure, a peer performs the following additional steps.</t>
          <ul spacing="normal">
            <li>
              <t>When a peer sends an ID update message, the value of the Recipient-ID Option that the peer specifies as its new intended OSCORE Recipient ID <bcp14>MUST</bcp14> fulfill both the following conditions: it is currently available as Recipient ID to use for the peer (see <xref section="3.3" sectionFormat="of" target="RFC8613"/>); and the peer has never used it as Recipient ID with the current triplet (Master Secret, Master Salt, ID Context).</t>
            </li>
            <li>
              <t>When receiving an ID update message, the peer <bcp14>MUST</bcp14> abort the procedure if it has already used the identifier specified in the Recipient-ID Option as its own Sender ID with the current triplet (Master Secret, Master Salt, ID Context).</t>
            </li>
          </ul>
          <t>In order to fulfill the conditions above, a peer has to keep track of the OSCORE Sender/Recipient IDs that it has used with the current triplet (Master Secret, Master Salt, ID Context) since the latest update of the OSCORE Master Secret (e.g., performed by running KUDOS).</t>
        </section>
      </section>
      <section anchor="preserving-observations-across-id-updates">
        <name>Preserving Observations Across ID Updates</name>
        <t>When running the OSCORE ID update procedure stand-alone or integrated in an execution of KUDOS, the following holds if Observe <xref target="RFC7641"/> is supported, in order to preserve ongoing observations beyond a change of OSCORE identifiers.</t>
        <ul spacing="normal">
          <li>
            <t>If a peer intends to keep active beyond an update of its Sender ID the observations where it is acting as CoAP client, then the peer:  </t>
            <ul spacing="normal">
              <li>
                <t><bcp14>MUST</bcp14> store the value of the 'kid' parameter from the original Observe requests, and retain it for the whole duration of the observations, throughout which the client <bcp14>MUST NOT</bcp14> update the stored value associated with the corresponding Observe registration request; and</t>
              </li>
              <li>
                <t><bcp14>MUST</bcp14> use the stored value of the 'kid' parameter from the original Observe registration request as value for the 'request_kid' parameter in the external_aad structure (see <xref section="5.4" sectionFormat="of" target="RFC8613"/>), when verifying notifications for that observation as per <xref section="8.4.2" sectionFormat="of" target="RFC8613"/>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If a peer is acting as CoAP server in an ongoing observation, then the peer:  </t>
            <ul spacing="normal">
              <li>
                <t><bcp14>MUST</bcp14> store the value of the 'kid' parameter from the original Observe registration request, and retain it for the whole duration of the observation, throughout which the peer <bcp14>MUST NOT</bcp14> update the stored value associated with the corresponding Observe registration request; and</t>
              </li>
              <li>
                <t><bcp14>MUST</bcp14> use the stored value of the 'kid' parameter from the original Observe registration request as value for the 'request_kid' parameter in the external_aad structure (see <xref section="5.4" sectionFormat="of" target="RFC8613"/>), when protecting notifications for that observation as per <xref section="8.3.1" sectionFormat="of" target="RFC8613"/>.</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="sec-iana">
      <name>IANA Considerations</name>
      <t>This document has the following actions for IANA.</t>
      <t>Note to RFC Editor: Please replace all occurrences of "[RFC-XXXX]" with the RFC number of this specification and delete this paragraph.</t>
      <section anchor="iana-coap-options">
        <name>CoAP Option Numbers Registry</name>
        <t>IANA is asked to enter the following option number to the "CoAP Option Numbers" registry within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <table align="center" anchor="tab-iana-recipient-id-option">
          <name>New CoAP Option Number</name>
          <thead>
            <tr>
              <th align="left">Number</th>
              <th align="left">Name</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD24</td>
              <td align="left">Recipient-ID</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
          </tbody>
        </table>
        <t>Note to RFC Editor: Following the registration of the CoAP Option Number 24, please replace "TBD24" with "24" in the table above. Then, please delete this paragraph.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC7641">
          <front>
            <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <date month="September" year="2015"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks. The state of a resource on a CoAP server can change over time. This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time. The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7641"/>
          <seriesInfo name="DOI" value="10.17487/RFC7641"/>
        </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="RFC8613">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <date month="July" year="2019"/>
            <abstract>
              <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE). OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
              <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration. Therefore, this document updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8613"/>
          <seriesInfo name="DOI" value="10.17487/RFC8613"/>
        </reference>
        <reference anchor="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-key-update">
          <front>
            <title>Key Update for OSCORE (KUDOS)</title>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="21" month="October" year="2024"/>
            <abstract>
              <t>   This document defines Key Update for OSCORE (KUDOS), a lightweight
   procedure that two CoAP endpoints can use to update their keying
   material by establishing a new OSCORE Security Context.  Accordingly,
   it updates the use of the OSCORE flag bits in the CoAP OSCORE Option
   as well as the protection of CoAP response messages with OSCORE, and
   it deprecates the key update procedure specified in Appendix B.2 of
   RFC 8613.  Thus, this document updates RFC 8613.  Also, this document
   defines a procedure that two endpoints can use to update their OSCORE
   identifiers, run either stand-alone or during a KUDOS execution.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-key-update-09"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC9528">
          <front>
            <title>Ephemeral Diffie-Hellman Over COSE (EDHOC)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Preuß Mattsson" initials="J." surname="Preuß Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <date month="March" year="2024"/>
            <abstract>
              <t>This document specifies Ephemeral Diffie-Hellman Over COSE (EDHOC), a very compact and lightweight authenticated Diffie-Hellman key exchange with ephemeral keys. EDHOC provides mutual authentication, forward secrecy, and identity protection. EDHOC is intended for usage in constrained scenarios, and a main use case is to establish an Object Security for Constrained RESTful Environments (OSCORE) security context. By reusing CBOR Object Signing and Encryption (COSE) for cryptography, Concise Binary Object Representation (CBOR) for encoding, and Constrained Application Protocol (CoAP) for transport, the additional code size can be kept very low.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9528"/>
          <seriesInfo name="DOI" value="10.17487/RFC9528"/>
        </reference>
      </references>
    </references>
    <?line 512?>

<section anchor="sec-id-update-in-kudos">
      <name>Examples of OSCORE ID update procedure Integrated in KUDOS</name>
      <t>The following section shows two examples where the OSCORE ID update procedure is performed together with the KUDOS procedure for updating OSCORE keying material.</t>
      <section anchor="sec-id-update-in-kudos-forward">
        <name>Forward Message Flow</name>
        <t><xref target="fig-kudos-and-id-update-client-init"/> provides an example of the OSCORE ID update procedure, as run integrated in an execution of KUDOS and in the forward message flow (see <xref section="4.3.5" sectionFormat="of" target="I-D.ietf-core-oscore-key-update"/>). On each peer, SID and RID denote the OSCORE Sender ID and Recipient ID of that peer, respectively.</t>
        <figure anchor="fig-kudos-and-id-update-client-init">
          <name>Example of the OSCORE ID update procedure with Forward Message Flow and Integrated in a KUDOS Execution.</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1312" width="576" viewBox="0 0 576 1312" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 200,64 L 200,880" fill="none" stroke="black"/>
                <path d="M 200,960 L 200,1296" fill="none" stroke="black"/>
                <path d="M 384,64 L 384,880" fill="none" stroke="black"/>
                <path d="M 384,960 L 384,1296" fill="none" stroke="black"/>
                <path d="M 208,288 L 376,288" fill="none" stroke="black"/>
                <path d="M 208,576 L 376,576" fill="none" stroke="black"/>
                <path d="M 208,992 L 376,992" fill="none" stroke="black"/>
                <path d="M 208,1168 L 376,1168" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="384,992 372,986.4 372,997.6" fill="black" transform="rotate(0,376,992)"/>
                <polygon class="arrowhead" points="384,288 372,282.4 372,293.6" fill="black" transform="rotate(0,376,288)"/>
                <polygon class="arrowhead" points="216,1168 204,1162.4 204,1173.6" fill="black" transform="rotate(180,208,1168)"/>
                <polygon class="arrowhead" points="216,576 204,570.4 204,581.6" fill="black" transform="rotate(180,208,576)"/>
                <g class="text">
                  <text x="196" y="36">Client</text>
                  <text x="388" y="36">Server</text>
                  <text x="200" y="52">(initiator)</text>
                  <text x="384" y="52">(responder)</text>
                  <text x="32" y="84">CTX_OLD</text>
                  <text x="72" y="84">{</text>
                  <text x="424" y="84">CTX_OLD</text>
                  <text x="464" y="84">{</text>
                  <text x="24" y="100">SID</text>
                  <text x="48" y="100">=</text>
                  <text x="76" y="100">0x01</text>
                  <text x="416" y="100">SID</text>
                  <text x="440" y="100">=</text>
                  <text x="468" y="100">0x00</text>
                  <text x="24" y="116">RID</text>
                  <text x="48" y="116">=</text>
                  <text x="76" y="116">0x00</text>
                  <text x="416" y="116">RID</text>
                  <text x="440" y="116">=</text>
                  <text x="468" y="116">0x01</text>
                  <text x="8" y="132">}</text>
                  <text x="400" y="132">}</text>
                  <text x="36" y="164">Generate</text>
                  <text x="84" y="164">N1</text>
                  <text x="24" y="196">CTX_1</text>
                  <text x="56" y="196">=</text>
                  <text x="108" y="196">updateCtx(</text>
                  <text x="80" y="212">X1,</text>
                  <text x="80" y="228">N1,</text>
                  <text x="96" y="244">CTX_OLD</text>
                  <text x="136" y="244">)</text>
                  <text x="280" y="276">Request</text>
                  <text x="324" y="276">#1</text>
                  <text x="32" y="292">Protect</text>
                  <text x="84" y="292">with</text>
                  <text x="128" y="292">CTX_1</text>
                  <text x="468" y="292">/.well-known/kudos</text>
                  <text x="236" y="308">OSCORE</text>
                  <text x="272" y="308">{</text>
                  <text x="232" y="324">...</text>
                  <text x="224" y="340">d</text>
                  <text x="256" y="340">flag:</text>
                  <text x="288" y="340">1</text>
                  <text x="416" y="340">CTX_1</text>
                  <text x="448" y="340">=</text>
                  <text x="500" y="340">updateCtx(</text>
                  <text x="228" y="356">x:</text>
                  <text x="252" y="356">X1</text>
                  <text x="472" y="356">X1,</text>
                  <text x="244" y="372">nonce:</text>
                  <text x="284" y="372">N1</text>
                  <text x="472" y="372">N1,</text>
                  <text x="232" y="388">...</text>
                  <text x="488" y="388">CTX_OLD</text>
                  <text x="528" y="388">)</text>
                  <text x="236" y="404">kid:</text>
                  <text x="276" y="404">0x01</text>
                  <text x="216" y="420">}</text>
                  <text x="420" y="420">Verify</text>
                  <text x="468" y="420">with</text>
                  <text x="512" y="420">CTX_1</text>
                  <text x="248" y="436">Encrypted</text>
                  <text x="320" y="436">Payload</text>
                  <text x="360" y="436">{</text>
                  <text x="232" y="452">...</text>
                  <text x="428" y="452">Generate</text>
                  <text x="476" y="452">N2</text>
                  <text x="272" y="468">Recipient-ID:</text>
                  <text x="348" y="468">0x42</text>
                  <text x="232" y="484">...</text>
                  <text x="424" y="484">CTX_NEW</text>
                  <text x="464" y="484">=</text>
                  <text x="516" y="484">updateCtx(</text>
                  <text x="216" y="500">}</text>
                  <text x="524" y="500">Comb(X1,X2),</text>
                  <text x="524" y="516">Comb(N1,N2),</text>
                  <text x="504" y="532">CTX_OLD</text>
                  <text x="544" y="532">)</text>
                  <text x="284" y="564">Response</text>
                  <text x="332" y="564">#1</text>
                  <text x="424" y="580">Protect</text>
                  <text x="476" y="580">with</text>
                  <text x="528" y="580">CTX_NEW</text>
                  <text x="236" y="596">OSCORE</text>
                  <text x="272" y="596">{</text>
                  <text x="232" y="612">...</text>
                  <text x="32" y="628">CTX_NEW</text>
                  <text x="72" y="628">=</text>
                  <text x="124" y="628">updateCtx(</text>
                  <text x="248" y="628">Partial</text>
                  <text x="296" y="628">IV:</text>
                  <text x="320" y="628">0</text>
                  <text x="132" y="644">Comb(X1,X2),</text>
                  <text x="232" y="644">...</text>
                  <text x="132" y="660">Comb(N1,N2),</text>
                  <text x="112" y="676">CTX_OLD</text>
                  <text x="152" y="676">)</text>
                  <text x="224" y="676">d</text>
                  <text x="256" y="676">flag:</text>
                  <text x="288" y="676">1</text>
                  <text x="228" y="692">x:</text>
                  <text x="252" y="692">X2</text>
                  <text x="28" y="708">Verify</text>
                  <text x="76" y="708">with</text>
                  <text x="128" y="708">CTX_NEW</text>
                  <text x="244" y="708">nonce:</text>
                  <text x="284" y="708">N2</text>
                  <text x="232" y="724">...</text>
                  <text x="32" y="740">Discard</text>
                  <text x="96" y="740">CTX_OLD</text>
                  <text x="216" y="740">}</text>
                  <text x="248" y="756">Encrypted</text>
                  <text x="320" y="756">Payload</text>
                  <text x="360" y="756">{</text>
                  <text x="28" y="772">Update</text>
                  <text x="72" y="772">SID</text>
                  <text x="104" y="772">and</text>
                  <text x="232" y="772">...</text>
                  <text x="420" y="772">Update</text>
                  <text x="464" y="772">SID</text>
                  <text x="496" y="772">and</text>
                  <text x="16" y="788">RID</text>
                  <text x="44" y="788">in</text>
                  <text x="88" y="788">CTX_NEW</text>
                  <text x="272" y="788">Recipient-ID:</text>
                  <text x="348" y="788">0x78</text>
                  <text x="408" y="788">RID</text>
                  <text x="436" y="788">in</text>
                  <text x="480" y="788">CTX_NEW</text>
                  <text x="232" y="804">...</text>
                  <text x="32" y="820">CTX_NEW</text>
                  <text x="72" y="820">{</text>
                  <text x="216" y="820">}</text>
                  <text x="424" y="820">CTX_NEW</text>
                  <text x="464" y="820">{</text>
                  <text x="24" y="836">SID</text>
                  <text x="48" y="836">=</text>
                  <text x="76" y="836">0x78</text>
                  <text x="416" y="836">SID</text>
                  <text x="440" y="836">=</text>
                  <text x="468" y="836">0x42</text>
                  <text x="24" y="852">RID</text>
                  <text x="48" y="852">=</text>
                  <text x="76" y="852">0x42</text>
                  <text x="416" y="852">RID</text>
                  <text x="440" y="852">=</text>
                  <text x="468" y="852">0x78</text>
                  <text x="8" y="868">}</text>
                  <text x="400" y="868">}</text>
                  <text x="16" y="916">The</text>
                  <text x="60" y="916">actual</text>
                  <text x="104" y="916">key</text>
                  <text x="148" y="916">update</text>
                  <text x="208" y="916">process</text>
                  <text x="260" y="916">ends</text>
                  <text x="304" y="916">here.</text>
                  <text x="16" y="932">The</text>
                  <text x="48" y="932">two</text>
                  <text x="88" y="932">peers</text>
                  <text x="128" y="932">can</text>
                  <text x="160" y="932">use</text>
                  <text x="192" y="932">the</text>
                  <text x="224" y="932">new</text>
                  <text x="276" y="932">Security</text>
                  <text x="344" y="932">Context</text>
                  <text x="412" y="932">CTX_NEW.</text>
                  <text x="280" y="980">Request</text>
                  <text x="324" y="980">#2</text>
                  <text x="32" y="996">Protect</text>
                  <text x="84" y="996">with</text>
                  <text x="136" y="996">CTX_NEW</text>
                  <text x="416" y="996">/temp</text>
                  <text x="236" y="1012">OSCORE</text>
                  <text x="272" y="1012">{</text>
                  <text x="232" y="1028">...</text>
                  <text x="236" y="1044">kid:</text>
                  <text x="276" y="1044">0x78</text>
                  <text x="420" y="1044">Verify</text>
                  <text x="468" y="1044">with</text>
                  <text x="520" y="1044">CTX_NEW</text>
                  <text x="216" y="1060">}</text>
                  <text x="248" y="1076">Encrypted</text>
                  <text x="320" y="1076">Payload</text>
                  <text x="360" y="1076">{</text>
                  <text x="424" y="1076">Discard</text>
                  <text x="488" y="1076">CTX_OLD</text>
                  <text x="232" y="1092">...</text>
                  <text x="264" y="1108">Application</text>
                  <text x="344" y="1108">Payload</text>
                  <text x="216" y="1124">}</text>
                  <text x="284" y="1156">Response</text>
                  <text x="332" y="1156">#2</text>
                  <text x="424" y="1172">Protect</text>
                  <text x="476" y="1172">with</text>
                  <text x="528" y="1172">CTX_NEW</text>
                  <text x="236" y="1188">OSCORE</text>
                  <text x="272" y="1188">{</text>
                  <text x="232" y="1204">...</text>
                  <text x="28" y="1220">Verify</text>
                  <text x="76" y="1220">with</text>
                  <text x="128" y="1220">CTX_NEW</text>
                  <text x="216" y="1220">}</text>
                  <text x="248" y="1236">Encrypted</text>
                  <text x="320" y="1236">Payload</text>
                  <text x="360" y="1236">{</text>
                  <text x="232" y="1252">...</text>
                  <text x="264" y="1268">Application</text>
                  <text x="344" y="1268">Payload</text>
                  <text x="216" y="1284">}</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
                     Client                  Server
                   (initiator)            (responder)
                        |                      |
CTX_OLD {               |                      | CTX_OLD {
 SID = 0x01             |                      |  SID = 0x00
 RID = 0x00             |                      |  RID = 0x01
}                       |                      | }
                        |                      |
Generate N1             |                      |
                        |                      |
CTX_1 = updateCtx(      |                      |
        X1,             |                      |
        N1,             |                      |
        CTX_OLD )       |                      |
                        |                      |
                        |      Request #1      |
Protect with CTX_1      |--------------------->| /.well-known/kudos
                        | OSCORE {             |
                        |  ...                 |
                        |  d flag: 1           | CTX_1 = updateCtx(
                        |  x: X1               |         X1,
                        |  nonce: N1           |         N1,
                        |  ...                 |         CTX_OLD )
                        |  kid: 0x01           |
                        | }                    | Verify with CTX_1
                        | Encrypted Payload {  |
                        |  ...                 | Generate N2
                        |  Recipient-ID: 0x42  |
                        |  ...                 | CTX_NEW = updateCtx(
                        | }                    |           Comb(X1,X2),
                        |                      |           Comb(N1,N2),
                        |                      |           CTX_OLD )
                        |                      |
                        |      Response #1     |
                        |<---------------------| Protect with CTX_NEW
                        | OSCORE {             |
                        |  ...                 |
CTX_NEW = updateCtx(    |  Partial IV: 0       |
          Comb(X1,X2),  |  ...                 |
          Comb(N1,N2),  |                      |
          CTX_OLD )     |  d flag: 1           |
                        |  x: X2               |
Verify with CTX_NEW     |  nonce: N2           |
                        |  ...                 |
Discard CTX_OLD         | }                    |
                        | Encrypted Payload {  |
Update SID and          |  ...                 | Update SID and
RID in CTX_NEW          |  Recipient-ID: 0x78  | RID in CTX_NEW
                        |  ...                 |
CTX_NEW {               | }                    | CTX_NEW {
 SID = 0x78             |                      |  SID = 0x42
 RID = 0x42             |                      |  RID = 0x78
}                       |                      | }
                        |                      |

The actual key update process ends here.
The two peers can use the new Security Context CTX_NEW.

                        |                      |
                        |      Request #2      |
Protect with CTX_NEW    |--------------------->| /temp
                        | OSCORE {             |
                        |  ...                 |
                        |  kid: 0x78           | Verify with CTX_NEW
                        | }                    |
                        | Encrypted Payload {  | Discard CTX_OLD
                        |  ...                 |
                        |  Application Payload |
                        | }                    |
                        |                      |
                        |      Response #2     |
                        |<---------------------| Protect with CTX_NEW
                        | OSCORE {             |
                        |  ...                 |
Verify with CTX_NEW     | }                    |
                        | Encrypted Payload {  |
                        |  ...                 |
                        |  Application Payload |
                        | }                    |
                        |                      |
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="sec-id-update-in-kudos-reverse">
        <name>Reverse Message Flow</name>
        <t><xref target="fig-kudos-and-id-update-server-init"/> provides an example of the OSCORE ID update procedure, as run integrated in an execution of KUDOS and in the reverse message flow (see <xref section="4.3.6" sectionFormat="of" target="I-D.ietf-core-oscore-key-update"/>). On each peer, SID and RID denote the OSCORE Sender ID and Recipient ID of that peer, respectively.</t>
        <figure anchor="fig-kudos-and-id-update-server-init">
          <name>Example of the OSCORE ID update procedure with Reverse Message Flow and Integrated in a KUDOS Execution.</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1680" width="576" viewBox="0 0 576 1680" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 200,64 L 200,1088" fill="none" stroke="black"/>
                <path d="M 200,1168 L 200,1664" fill="none" stroke="black"/>
                <path d="M 384,64 L 384,1088" fill="none" stroke="black"/>
                <path d="M 384,1168 L 384,1664" fill="none" stroke="black"/>
                <path d="M 208,176 L 376,176" fill="none" stroke="black"/>
                <path d="M 208,400 L 376,400" fill="none" stroke="black"/>
                <path d="M 208,688 L 376,688" fill="none" stroke="black"/>
                <path d="M 208,1200 L 376,1200" fill="none" stroke="black"/>
                <path d="M 208,1360 L 376,1360" fill="none" stroke="black"/>
                <path d="M 208,1536 L 376,1536" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="384,1360 372,1354.4 372,1365.6" fill="black" transform="rotate(0,376,1360)"/>
                <polygon class="arrowhead" points="384,688 372,682.4 372,693.6" fill="black" transform="rotate(0,376,688)"/>
                <polygon class="arrowhead" points="384,176 372,170.4 372,181.6" fill="black" transform="rotate(0,376,176)"/>
                <polygon class="arrowhead" points="216,1536 204,1530.4 204,1541.6" fill="black" transform="rotate(180,208,1536)"/>
                <polygon class="arrowhead" points="216,1200 204,1194.4 204,1205.6" fill="black" transform="rotate(180,208,1200)"/>
                <polygon class="arrowhead" points="216,400 204,394.4 204,405.6" fill="black" transform="rotate(180,208,400)"/>
                <g class="text">
                  <text x="204" y="36">Client</text>
                  <text x="388" y="36">Server</text>
                  <text x="200" y="52">(responder)</text>
                  <text x="384" y="52">(initiator)</text>
                  <text x="32" y="84">CTX_OLD</text>
                  <text x="72" y="84">{</text>
                  <text x="424" y="84">CTX_OLD</text>
                  <text x="464" y="84">{</text>
                  <text x="24" y="100">SID</text>
                  <text x="48" y="100">=</text>
                  <text x="76" y="100">0x01</text>
                  <text x="416" y="100">SID</text>
                  <text x="440" y="100">=</text>
                  <text x="468" y="100">0x00</text>
                  <text x="24" y="116">RID</text>
                  <text x="48" y="116">=</text>
                  <text x="76" y="116">0x00</text>
                  <text x="416" y="116">RID</text>
                  <text x="440" y="116">=</text>
                  <text x="468" y="116">0x01</text>
                  <text x="8" y="132">}</text>
                  <text x="400" y="132">}</text>
                  <text x="280" y="164">Request</text>
                  <text x="324" y="164">#1</text>
                  <text x="32" y="180">Protect</text>
                  <text x="84" y="180">with</text>
                  <text x="136" y="180">CTX_OLD</text>
                  <text x="416" y="180">/temp</text>
                  <text x="236" y="196">OSCORE</text>
                  <text x="272" y="196">{</text>
                  <text x="232" y="212">...</text>
                  <text x="236" y="228">kid:</text>
                  <text x="276" y="228">0x01</text>
                  <text x="216" y="244">}</text>
                  <text x="420" y="244">Verify</text>
                  <text x="468" y="244">with</text>
                  <text x="520" y="244">CTX_OLD</text>
                  <text x="248" y="260">Encrypted</text>
                  <text x="320" y="260">Payload</text>
                  <text x="360" y="260">{</text>
                  <text x="232" y="276">...</text>
                  <text x="428" y="276">Generate</text>
                  <text x="476" y="276">N1</text>
                  <text x="264" y="292">Application</text>
                  <text x="344" y="292">Payload</text>
                  <text x="216" y="308">}</text>
                  <text x="416" y="308">CTX_1</text>
                  <text x="448" y="308">=</text>
                  <text x="500" y="308">updateCtx(</text>
                  <text x="472" y="324">X1,</text>
                  <text x="472" y="340">N1,</text>
                  <text x="488" y="356">CTX_OLD</text>
                  <text x="528" y="356">)</text>
                  <text x="284" y="388">Response</text>
                  <text x="332" y="388">#1</text>
                  <text x="424" y="404">Protect</text>
                  <text x="476" y="404">with</text>
                  <text x="520" y="404">CTX_1</text>
                  <text x="236" y="420">OSCORE</text>
                  <text x="272" y="420">{</text>
                  <text x="232" y="436">...</text>
                  <text x="24" y="452">CTX_1</text>
                  <text x="56" y="452">=</text>
                  <text x="108" y="452">updateCtx(</text>
                  <text x="248" y="452">Partial</text>
                  <text x="296" y="452">IV:</text>
                  <text x="320" y="452">0</text>
                  <text x="80" y="468">X1,</text>
                  <text x="232" y="468">...</text>
                  <text x="80" y="484">N1,</text>
                  <text x="224" y="484">d</text>
                  <text x="256" y="484">flag:</text>
                  <text x="288" y="484">1</text>
                  <text x="96" y="500">CTX_OLD</text>
                  <text x="136" y="500">)</text>
                  <text x="228" y="500">x:</text>
                  <text x="252" y="500">X1</text>
                  <text x="244" y="516">nonce:</text>
                  <text x="284" y="516">N1</text>
                  <text x="28" y="532">Verify</text>
                  <text x="76" y="532">with</text>
                  <text x="120" y="532">CTX_1</text>
                  <text x="232" y="532">...</text>
                  <text x="216" y="548">}</text>
                  <text x="36" y="564">Generate</text>
                  <text x="84" y="564">N2</text>
                  <text x="248" y="564">Encrypted</text>
                  <text x="320" y="564">Payload</text>
                  <text x="360" y="564">{</text>
                  <text x="232" y="580">...</text>
                  <text x="32" y="596">CTX_NEW</text>
                  <text x="72" y="596">=</text>
                  <text x="124" y="596">updateCtx(</text>
                  <text x="272" y="596">Recipient-ID:</text>
                  <text x="348" y="596">0x78</text>
                  <text x="132" y="612">Comb(X1,X2),</text>
                  <text x="232" y="612">...</text>
                  <text x="132" y="628">Comb(N1,N2),</text>
                  <text x="216" y="628">}</text>
                  <text x="112" y="644">CTX_OLD</text>
                  <text x="152" y="644">)</text>
                  <text x="280" y="676">Request</text>
                  <text x="324" y="676">#2</text>
                  <text x="32" y="692">Protect</text>
                  <text x="84" y="692">with</text>
                  <text x="136" y="692">CTX_NEW</text>
                  <text x="468" y="692">/.well-known/kudos</text>
                  <text x="236" y="708">OSCORE</text>
                  <text x="272" y="708">{</text>
                  <text x="232" y="724">...</text>
                  <text x="224" y="740">d</text>
                  <text x="256" y="740">flag:</text>
                  <text x="288" y="740">1</text>
                  <text x="424" y="740">CTX_NEW</text>
                  <text x="464" y="740">=</text>
                  <text x="516" y="740">updateCtx(</text>
                  <text x="228" y="756">x:</text>
                  <text x="252" y="756">X2</text>
                  <text x="524" y="756">Comb(X1,X2),</text>
                  <text x="244" y="772">nonce:</text>
                  <text x="284" y="772">N2</text>
                  <text x="524" y="772">Comb(N1,N2),</text>
                  <text x="228" y="788">y:</text>
                  <text x="248" y="788">w</text>
                  <text x="504" y="788">CTX_OLD</text>
                  <text x="544" y="788">)</text>
                  <text x="260" y="804">old_nonce:</text>
                  <text x="316" y="804">N1</text>
                  <text x="236" y="820">kid:</text>
                  <text x="276" y="820">0x01</text>
                  <text x="232" y="836">...</text>
                  <text x="216" y="852">}</text>
                  <text x="420" y="852">Verify</text>
                  <text x="468" y="852">with</text>
                  <text x="520" y="852">CTX_NEW</text>
                  <text x="248" y="868">Encrypted</text>
                  <text x="320" y="868">Payload</text>
                  <text x="360" y="868">{</text>
                  <text x="232" y="884">...</text>
                  <text x="424" y="884">Discard</text>
                  <text x="488" y="884">CTX_OLD</text>
                  <text x="272" y="900">Recipient-ID:</text>
                  <text x="348" y="900">0x42</text>
                  <text x="232" y="916">...</text>
                  <text x="264" y="932">Application</text>
                  <text x="344" y="932">Payload</text>
                  <text x="216" y="948">}</text>
                  <text x="28" y="980">Update</text>
                  <text x="72" y="980">SID</text>
                  <text x="104" y="980">and</text>
                  <text x="420" y="980">Update</text>
                  <text x="464" y="980">SID</text>
                  <text x="496" y="980">and</text>
                  <text x="16" y="996">RID</text>
                  <text x="44" y="996">in</text>
                  <text x="88" y="996">CTX_NEW</text>
                  <text x="408" y="996">RID</text>
                  <text x="436" y="996">in</text>
                  <text x="480" y="996">CTX_NEW</text>
                  <text x="40" y="1028">CTX_NEW</text>
                  <text x="80" y="1028">{</text>
                  <text x="424" y="1028">CTX_NEW</text>
                  <text x="464" y="1028">{</text>
                  <text x="32" y="1044">SID</text>
                  <text x="56" y="1044">=</text>
                  <text x="84" y="1044">0x78</text>
                  <text x="416" y="1044">SID</text>
                  <text x="440" y="1044">=</text>
                  <text x="468" y="1044">0x42</text>
                  <text x="32" y="1060">RID</text>
                  <text x="56" y="1060">=</text>
                  <text x="84" y="1060">0x42</text>
                  <text x="416" y="1060">RID</text>
                  <text x="440" y="1060">=</text>
                  <text x="468" y="1060">0x78</text>
                  <text x="16" y="1076">}</text>
                  <text x="400" y="1076">}</text>
                  <text x="16" y="1124">The</text>
                  <text x="60" y="1124">actual</text>
                  <text x="104" y="1124">key</text>
                  <text x="148" y="1124">update</text>
                  <text x="208" y="1124">process</text>
                  <text x="260" y="1124">ends</text>
                  <text x="304" y="1124">here.</text>
                  <text x="16" y="1140">The</text>
                  <text x="48" y="1140">two</text>
                  <text x="88" y="1140">peers</text>
                  <text x="128" y="1140">can</text>
                  <text x="160" y="1140">use</text>
                  <text x="192" y="1140">the</text>
                  <text x="224" y="1140">new</text>
                  <text x="276" y="1140">Security</text>
                  <text x="344" y="1140">Context</text>
                  <text x="412" y="1140">CTX_NEW.</text>
                  <text x="284" y="1188">Response</text>
                  <text x="332" y="1188">#2</text>
                  <text x="424" y="1204">Protect</text>
                  <text x="476" y="1204">with</text>
                  <text x="528" y="1204">CTX_NEW</text>
                  <text x="236" y="1220">OSCORE</text>
                  <text x="272" y="1220">{</text>
                  <text x="232" y="1236">...</text>
                  <text x="28" y="1252">Verify</text>
                  <text x="76" y="1252">with</text>
                  <text x="128" y="1252">CTX_NEW</text>
                  <text x="216" y="1252">}</text>
                  <text x="248" y="1268">Encrypted</text>
                  <text x="320" y="1268">Payload</text>
                  <text x="360" y="1268">{</text>
                  <text x="32" y="1284">Discard</text>
                  <text x="96" y="1284">CTX_OLD</text>
                  <text x="232" y="1284">...</text>
                  <text x="264" y="1300">Application</text>
                  <text x="344" y="1300">Payload</text>
                  <text x="216" y="1316">}</text>
                  <text x="280" y="1348">Request</text>
                  <text x="324" y="1348">#3</text>
                  <text x="32" y="1364">Protect</text>
                  <text x="84" y="1364">with</text>
                  <text x="136" y="1364">CTX_NEW</text>
                  <text x="416" y="1364">/temp</text>
                  <text x="236" y="1380">OSCORE</text>
                  <text x="272" y="1380">{</text>
                  <text x="232" y="1396">...</text>
                  <text x="236" y="1412">kid:</text>
                  <text x="276" y="1412">0x78</text>
                  <text x="420" y="1412">Verify</text>
                  <text x="468" y="1412">with</text>
                  <text x="520" y="1412">CTX_NEW</text>
                  <text x="216" y="1428">}</text>
                  <text x="248" y="1444">Encrypted</text>
                  <text x="320" y="1444">Payload</text>
                  <text x="360" y="1444">{</text>
                  <text x="232" y="1460">...</text>
                  <text x="264" y="1476">Application</text>
                  <text x="344" y="1476">Payload</text>
                  <text x="216" y="1492">}</text>
                  <text x="284" y="1524">Response</text>
                  <text x="332" y="1524">#3</text>
                  <text x="424" y="1540">Protect</text>
                  <text x="476" y="1540">with</text>
                  <text x="528" y="1540">CTX_NEW</text>
                  <text x="236" y="1556">OSCORE</text>
                  <text x="272" y="1556">{</text>
                  <text x="232" y="1572">...</text>
                  <text x="28" y="1588">Verify</text>
                  <text x="76" y="1588">with</text>
                  <text x="128" y="1588">CTX_NEW</text>
                  <text x="216" y="1588">}</text>
                  <text x="248" y="1604">Encrypted</text>
                  <text x="320" y="1604">Payload</text>
                  <text x="360" y="1604">{</text>
                  <text x="232" y="1620">...</text>
                  <text x="264" y="1636">Application</text>
                  <text x="344" y="1636">Payload</text>
                  <text x="216" y="1652">}</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
                      Client                 Server
                   (responder)            (initiator)
                        |                      |
CTX_OLD {               |                      | CTX_OLD {
 SID = 0x01             |                      |  SID = 0x00
 RID = 0x00             |                      |  RID = 0x01
}                       |                      | }
                        |                      |
                        |      Request #1      |
Protect with CTX_OLD    |--------------------->| /temp
                        | OSCORE {             |
                        |  ...                 |
                        |  kid: 0x01           |
                        | }                    | Verify with CTX_OLD
                        | Encrypted Payload {  |
                        |  ...                 | Generate N1
                        |  Application Payload |
                        | }                    | CTX_1 = updateCtx(
                        |                      |         X1,
                        |                      |         N1,
                        |                      |         CTX_OLD )
                        |                      |
                        |      Response #1     |
                        |<---------------------| Protect with CTX_1
                        | OSCORE {             |
                        |  ...                 |
CTX_1 = updateCtx(      |  Partial IV: 0       |
        X1,             |  ...                 |
        N1,             |  d flag: 1           |
        CTX_OLD )       |  x: X1               |
                        |  nonce: N1           |
Verify with CTX_1       |  ...                 |
                        | }                    |
Generate N2             | Encrypted Payload {  |
                        |  ...                 |
CTX_NEW = updateCtx(    |  Recipient-ID: 0x78  |
          Comb(X1,X2),  |  ...                 |
          Comb(N1,N2),  | }                    |
          CTX_OLD )     |                      |
                        |                      |
                        |      Request #2      |
Protect with CTX_NEW    |--------------------->| /.well-known/kudos
                        | OSCORE {             |
                        |  ...                 |
                        |  d flag: 1           | CTX_NEW = updateCtx(
                        |  x: X2               |           Comb(X1,X2),
                        |  nonce: N2           |           Comb(N1,N2),
                        |  y: w                |           CTX_OLD )
                        |  old_nonce: N1       |
                        |  kid: 0x01           |
                        |  ...                 |
                        | }                    | Verify with CTX_NEW
                        | Encrypted Payload {  |
                        |  ...                 | Discard CTX_OLD
                        |  Recipient-ID: 0x42  |
                        |  ...                 |
                        |  Application Payload |
                        | }                    |
                        |                      |
Update SID and          |                      | Update SID and
RID in CTX_NEW          |                      | RID in CTX_NEW
                        |                      |
 CTX_NEW {              |                      | CTX_NEW {
  SID = 0x78            |                      |  SID = 0x42
  RID = 0x42            |                      |  RID = 0x78
 }                      |                      | }
                        |                      |

The actual key update process ends here.
The two peers can use the new Security Context CTX_NEW.

                        |                      |
                        |      Response #2     |
                        |<---------------------| Protect with CTX_NEW
                        | OSCORE {             |
                        |  ...                 |
Verify with CTX_NEW     | }                    |
                        | Encrypted Payload {  |
Discard CTX_OLD         |  ...                 |
                        |  Application Payload |
                        | }                    |
                        |                      |
                        |      Request #3      |
Protect with CTX_NEW    |--------------------->| /temp
                        | OSCORE {             |
                        |  ...                 |
                        |  kid: 0x78           | Verify with CTX_NEW
                        | }                    |
                        | Encrypted Payload {  |
                        |  ...                 |
                        |  Application Payload |
                        | }                    |
                        |                      |
                        |      Response #3     |
                        |<---------------------| Protect with CTX_NEW
                        | OSCORE {             |
                        |  ...                 |
Verify with CTX_NEW     | }                    |
                        | Encrypted Payload {  |
                        |  ...                 |
                        |  Application Payload |
                        | }                    |
                        |                      |
]]></artwork>
          </artset>
        </figure>
      </section>
    </section>
    <section anchor="sec-document-updates" removeInRFC="true">
      <name>Document Updates</name>
      <section anchor="sec-01-02">
        <name>Version -01 to -02</name>
        <ul spacing="normal">
          <li>
            <t>Split long section into subsections.</t>
          </li>
          <li>
            <t>Updated references.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-00-01">
        <name>Version -00 to -01</name>
        <ul spacing="normal">
          <li>
            <t>Revised and extended error handling.</t>
          </li>
          <li>
            <t>Specify that the Recipient-ID option may need to be empty.</t>
          </li>
          <li>
            <t>Failure cases when running the ID update procedure integrated with KUDOS.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-00">
        <name>Version -00</name>
        <ul spacing="normal">
          <li>
            <t>Split out material from Key Update for OSCORE draft into this new document.</t>
          </li>
          <li>
            <t>Extended terminology.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgment">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank <contact fullname="Christian Amsüss"/>, <contact fullname="Carsten Bormann"/>, <contact fullname="John Preuß Mattsson"/>, and <contact fullname="Göran Selander"/> for their feedback and comments.</t>
      <t>The work on this document has been partly supported by VINNOVA and the Celtic-Next projects CRITISEC and CYPRESS; and by the H2020 projects SIFIS-Home (Grant agreement 952652) and ARCADIAN-IoT (Grant agreement 101020259).</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
nRLV8zJXJOid6vIp+q1Vd0vYLdoLbVt/GDcofJJ97nWbv52/qn3g2c3f7l/F
hQ1VdzQ0qN+T9c+Y1CkUJVb1Yxpk9n43alq19btZ44qd340a3y2OmG9FiJZX
sONms7sf6rdgSpI999J36w1H+HGrvRhIx4s20ETeaNqg8Ms9G+Q31dtSeFNV
q3+prITvXosg6FyG0XX4JemzmkFLy4droSwrzq1tMAStxce7bCvzuEj8uj7e
7QLRi4/VH/BDXWO6mWk3y8e28XF949Lpmk+GT+q6KNu7W4exUunWuwgcPqjp
orToenGyMqsEenWNy/bw3mM0nBXeHtqQKyrwZP/2oslgHZjjx95GLY0b9QN8
cvyh/TThltLH89VG9jSFmgblew3M9gLLX0CJT6A4ymiuGrzGJQkIi4++B54q
GcElbyPV5NKxEa6zZqBKl81TXMUN7XlRRgSoBlpZ9TINakYon7TeCKZnYBuU
S83iukSmhI0LORcklm3QOqX77DLT1+3LDq14z7IN7s9pRU+vQpGYBpk9xrmx
KkCouGOlWeOKK1YaNb6Hp0ehHfdSvFARV2bd4CWhYvqEYUzXpRcx1lN3R/PQ
JLxkUVtxxRQR2G19PDeppxuUqS/6pX7DYPU4n8AzKts6WLTz9cy+JHFmOYWx
1HmW7c5a3AH6iEazN6/BAzOa1fZjWdp9YZBqGvxa5C/bjTcnv7PE6wfIKmaz
bFwleEy1Ubdm817VwYs1ySx9jmBdMit7AOMnTWYt+5jBh5TMqspm1SSzyk81
rDrIsBHHr5JZ5Y+XkHVRTvRn4E4sO89Q7w0sP9NQl9dYki1ZMPtU/3hO9qn+
8ZzsU/3jzyufUEfXZWYTKlLK9dmEkpRyvfyVpJTrkwMlKeXSrObCmcyCN7hl
GyyqQypcLycNmGuwLPexJg1Umg1YZhporr9ZSAPNa1CY9L0aLCPI/WzWAhbI
+5Yn1ZzPTfO+pbm2fD8N8r43u+y65LHtp4mejoLh27x8L9XcL0kZLJifWJZ/
sEB+YjmrEQ8xoq3JuZb30zznWt6+ec61HGBWkXStDUhUzrUi6dos51qRdG2U
c606HOh3n3Ndpcuq1Fn1csvno1zmNMgfQ7pKuTce9TecY53TIH/66Epn/LbI
3zTF/nGOvvvgFDvb1+XjaoOTya7runI1geQOpheLSXQl/DAeeTI/DzySIMY7
4IOnEfzTk5Xb2MHmFny9w10YZ0CalAWRUzXrh3ii2WygvsvdRhIE3AKh6qOT
bm6UTTnKljPKJnylUQA/Pu40Q5Rg6T/tdhRxHOEWtnAY+OG4K6HBIvUbu2ky
U0+tyqQn/Aa8C1lhPhAMtHZ6Q60PuR8gSXAPfiJ3CribwUorfS19iJBEH+ps
L+Cxs7OAIKcaa0zT+BNcmxBUcF7Eg4MAB8e4AcScc0HbK74D10r5wFhCrJhs
GPNRKolApdToSGmCE2QHGoHysK8oiMZy/geV8LG+h1E27ryWRfIIIc88Qx6S
Rfli+GxtxINErKnCatweHYF7R7v8YhEQfcJLdnt7u3cR+0nqg9/XnyS//G+S
3N3dtekHHicAJnsexRMehvrxf0QXIe7om/3y3+wVT9MkieRviF/4/dtf/hVz
3FYZcFx8gJ/0jhI/ZiMgOhaS08teNNHTQxhRhhhtt83vu6BtzbiBGOA2W/Jw
s+H3R8fHJ9/37eEFIkh9r3OMjiqg72c6jGLv9Oj86Oxgj97a++n16cHZmdwI
O7ihVi96m71N+/7Z0eHRWedFNBFs/VuYSsr4OBZECfb0ce+rxz15pGT/dK+/
f9Q/7hxF58U3tza3oNfe46cb3db/A5cDeMeAxgAA

-->

</rfc>
