<?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.6.13 (Ruby 2.7.0) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-oscore-id-update-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.22.0 -->
  <front>
    <title abbrev="Identifier Update for OSCORE">Identifier Update for OSCORE</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-id-update-01"/>
    <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="2024" month="July" day="08"/>
    <workgroup>CoRE Working Group</workgroup>
    <abstract>
      <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>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Constrained RESTful Environments Working Group mailing list (core@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/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>
    <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>
        <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>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>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 that supports the ID update procedure <bcp14>MUST</bcp14> send the second ID update message, except in the following case where the responder aborts the ID update procedure:</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>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 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.1" 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.2" 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>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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" target="https://datatracker.ietf.org/doc/html/draft-ietf-core-oscore-key-update-08">
          <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="8" month="July" 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-08"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC9528" target="https://www.rfc-editor.org/info/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>
    <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.1" 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.2" 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-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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
PPIxt8PJ/iEM4UEaXElVHjYtvUqBhHyW6BO3Dfinh2drHFcFszFG8gS+VRDy
yF5bHSmhE5kml83NmnUeKgSjylxaqxRul5x9BPd4N+9i5eigCPQp6YB5OvrW
koo8nZoLR4p5Os7Lq8/TKTss2y6sz+9fno6C+zfL0ynDW1mezs5vlKfjnNOu
+nFyedZ5OpWt13k6uRa/3zydexL4rWyxzqFZ59AsMcaHtPh4eSJrRbVOKNRj
fIwWNstr6ZaZLK/lWztZXsu3XrGbcZ/ydH63huKeiMjSiZDLJ0Aun/S4vKe9
zgXKtljnAi0zpXWejQvoOs9GjdGgxeea5riXa7FWbWyt2u7a4n6mOe7VtFir
32WhyrW4J6xan+bo7H3cMc2xbCfmd5/m2Evdq3Ercg+dHLO75R+uMwTvYYYg
9Ei7YQCIvKCo9mbFkgpkpp+Pmy6IFzdmb1n7GS+0NletuRvS69TCTA5Q8htk
nZUnnoIH9zEST9ep038oxbjzkRRjXTZWw9RpyYcNs3jvkH65zuK9J1m8Li82
NmLtplZM8nB5Htz9Ni+rls2KjL11UvPnKlUlSc3mZtt1InNpwuJnkMi8u05k
lgr+DrnLOQ26u2wu8+46l/mPmcu8dz9zmXv26vCeKi+F98ofmfzYmwe1N/Rr
aqoCJVgYFLQJWDS8xjmIEroREUxtmrueH68/lyj3p/LCUixm5aQxL1cwYham
fqCBsJULOEMadUaB8PBiaaAEHwR+coEXkn4JjpW4hnljpZ3qcF3uKk+awabo
jqVPF8/CEIdsXIBUl/zjMzScKd3W6lG53Qxwtub80eGL0wN5OfOTRzuPZTrx
q4j4HLhA3tDNbT2qGgqoshpgjmW5sqEsDE11pGgVGfIpOFH2glf5eFFpJD2l
64soQAZPF5U1IJ6n220HWJggV0gp9sFvS9lmpgJb2xRk4wH8AVyhoNjCwTQk
qrKBvDx3OkV7MsrUm5aFBjgINF3cH4tBFKVJvqAhXShrmVOVf27KnrZapmTD
fEVZ57J+mNFUFoiho+uqnTQ8ZTUQ2s7qtqaCptEpsjvjbfCGMRoSUBCcEV5G
b7SvUyojCuUUkn11Sb9apoA2NJUQ8ncMaz/eVCgiQVpQH+Ibo+YNf4cY8leX
BKeFQezaWy2clmUnS436chSFuhKm3IhT+cBWsQliwb258qsv3ErzRVepojop
kg4XONZFXMVk3VrxmuTUpaGxvMg6o2Pg3Ushpqo0fdadq5Z4hYusuN8VdJaY
eo1KTdlStg402TKOSm9b+5DX4PImXvZa1nqk2lBUmFrdit0bxqhPAQxZMjhR
d07oPpyBKzaW3CLwDQ6ltHOSBxoWfdJRWb1slENzFXe2rrCuXWnKJkXurAZi
jrWLONPel9HelkulljoeaS5w7rsmTuC0wDVduYWFsytmsqTu6NLHk2rEnkRy
iuS25RJTi9s+1cDrqPpLqd7PyyhFudjAC9YnGJ52SmLF/hhXCAZ/yptUPhTw
CKfKr0ZLSZsG1MtcEO9OAMGLo9mYyqXJxZ/jzhlfxyntTEB7CmKeJNFQlgy2
MhHF6oSP5cDcTfUKbtKPLkL0be+ZMe6AleJQSBXZncbNF+qbt7l+TQQG/oBe
33Is9pvGs2GKQpBT+Y+6e1mVr8yv9arBVzFrGV0SCS+htzRA0ECmnV4fd/fy
BV5z/FtgNr0OCt3KcM4gH5kNiwi/M0tWcGTW917z43L8qBaVd2fI3dyl71R5
3vWpKUQqO221zk8PT823+OZx76SXe8sUlvF5yG/z5RZ0nRjH8XTWd9hdt7w+
xutsmQsODoEq0QsGlxYTGzc3f+ofvXx+e7thmQS7CGUQk+iL1kh6NmrHTu4W
lte/AJtbLLqBrh3Rfc4e4FRxmrCu4lNVngUXn4QWFObkUu8DFCsOq0v/FXQq
nLNRMuCG5rQ5zUsxzgaiHbiPqh2cHfXPMcJyFF75cRQiqhO2eRCdHW2x15rl
3I7GIIpTWfNGji8zZ0yhGyxXQ+daAdfsfcsk9+Wy/DJ/2uI3rFDtxtAGe1Pl
bYhD6ircnMCSoIiP+1JQJZXriSXqqQCO2AB8U5QclVLklmYoc86OM96YXM8b
ASscUVaFmyyP6fJM8gQ31bjW49oij/VV0qxbmkZjQdEGI12Falogw6bSu+o2
F9iWYlVaU6J6XqZEgj6pLp+i31pVW8Ie0V7q2Pr9qKDwSc651x3+dn6qzoFn
D3+7PxUFG6pqNDTI35P5zxjUKSQlVvVjGmTOfjdqWnX0u1njipPfjRrfLo+Y
b0WIllewk2azuxvqt2FKkj0P0nebDUf4cbu9HEgnyzbQRN5q2qDwzR0b5A/V
21R4k1Wrv6nMhO9eiyDoXIbRdfgl6bOaQUvTh2uhLEvOrW3ggdbi4322nXlc
JH5dH+/2gejFx+oH+KGuMVVm2s/ysW18Ut+4dLrmk+GTui7Kzu7WYaxUuvUp
AocParooTbpenqzMKoGdusZlZ3jvMBrOCquHNuSKCjzZn4NoMtgE5vhxZ6uW
xo36AT45+dB+mnBL6ePFaiN7m0JNg/KzBuZ4geUvoMQnUBxlNFcNXuOWBCyL
j78HnioZwSVvI9Xk0rERrrNmoEqXLVJcxQPteVFGBKgGWlntZBrUjFA+aX0Q
TM/ANiiXmuV1iQwJGxdyIUgs26B1RvXsMtPX7csurXjPsg3uzmlFT69CkZgG
mTPGubEqQKiosdKscUWJlUaN7+Dp0dKOD1MsqIg7s+7iJaFk+oThmq5LL+Ja
T9WO5qEJeMmktuKOKSKw2/p4btKOblCmvuib+gOD1eN8As+o7Ohg0c7XM/uK
xJnlFMZK51l2Omt5B+gjGs2dRQ3umdGsth+r0u5Lg1TT4Lcif9lpvAXxnRWW
HyCrmI2ycRXgMdlG3ZrDe1UXL9YEs/Q9gnXBrOwFjJ80mLXqawbvUzCrKppV
E8wqv9Ww6iLDRhy/DmaVP15B1EU50Z+BO7HqOEO9N7D6SENdXGNFtmTJ6FP9
4wXRp/rHC6JP9Y8/r3hCHV1XGU2oCCnXRxNKQsr18lcSUq4PDpSElEujmktH
Mgve4LZtsKwOqXC9nDBgrsGq3MeaMFBpNGCVYaCF/mYhDLSoQWHSd2qwikXu
Z7MXsETctzyo5nxuGvctjbXl+2kQ953vs+uSx7afJno6Cry3efleqblfkTJY
Mj6xKv9gifjEanYj7uOKtibmWt5P85hrefvmMddygFlF0LV2QaJirhVB12Yx
14qga6OYa9XlQH/4mOs6XFalzqq3Wz4f5bKgQf4a0nXIvfGov+MY64IG+dtH
1zrj90X+piH2j3P13QeH2NmhTh9XB5xMdF3nlasJJLcwvVhMoivhh/FoKOPz
wCMJYrzz8CEmCXfAFX+gO3j4EP68xVMYALmPZ8AQWEzKp3OIIo4jPFwWeoEf
jum0Rp/Sx+f2OGMm01klME/4HOy+zP0eCAb6NJ1T6+fcDxBZeDo+kTn87jGt
0hxcizlCMWGOOjsIeOzk/BPklP2MARR/grsGglLBuwU8OAi4lbMKgOZ4NMPc
QEEHH74Dp0d5p5jcq8jvxXyEF1ml6iI3dHE0KQiyI41AeQ1XFERjOf+jSvhY
b4jrXzwTLdPXEUKeeYbUlenywnu6MeJBIjZUyjMeXI7A8aLzd7EIiD7hJbu5
uTm4iP0k9cEj602SX/83SW5vb9v0BY8TAJM9i+IJD0P9+D+iixDP2s1+/W/2
iqdpkkTyO8QvfP/tr/+KOR54DDhuC8BX+qyHH7MREB1TvOnlYTTR00MYkbsZ
HYTNn4igA8d4tBfgNofl8Bjg98cnJ6ff9+y1AiJI/WHnBF1IQN/PdE3Ewdnx
+XH/6IDeOvjp9dlRvy+PqA7m1OrFzsOdh/b9/vHz437nRTQRbPNbmErK+DgW
RAn25NHOV4925GWPvbOD3uFx76RzHJ0X39x+uA297jx6stVt/T+z93xYS8QA
AA==

-->

</rfc>
