<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 2.7.0) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-oscore-id-update-07" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="Identifier Update for OSCORE">Identifier Update for OSCORE</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-id-update-07"/>
    <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="2026" month="September" day="07"/>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 56?>

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

<section anchor="introduction">
      <name>Introduction</name>
      <t>When using the CoAP protocol <xref target="RFC7252"/>, two peers 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.</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 them to be tracked with the consequent privacy implications.</t>
      <t>In order to address this issue, this document defines an OSCORE ID update procedure that two peers can use to update their OSCORE Sender and Recipient IDs. For instance, two peers may want to use this procedure before switching to a different network, in order to make it more difficult to understand that their communication is continuing in the new network.</t>
      <t>The OSCORE ID update procedure can be run stand-alone or seamlessly integrated in an execution of the Key Update for OSCORE (KUDOS) procedure <xref target="I-D.ietf-core-oscore-key-update"/>.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

<t>Readers are expected to be familiar with the terms and concepts related to CoAP <xref target="RFC7252"/>, Observe <xref target="RFC7641"/>, CBOR <xref target="RFC8949"/>, OSCORE <xref target="RFC8613"/>, and KUDOS <xref target="I-D.ietf-core-oscore-key-update"/>.</t>
      </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". Furthermore, a peer uses the Recipient-ID-Ack Option to confirm the chosen Recipient ID of the other peer.</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 ID update message.</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 used in its FS mode (see <xref section="4" sectionFormat="of" target="I-D.ietf-core-oscore-key-update"/>) 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>
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_TEMP used to protect the first KUDOS message of a KUDOS execution.</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 peer <bcp14>MUST</bcp14> continue the procedure and send a following ID update message, except in the case any of the conditions for failing or aborting the procedure apply (see <xref target="update-failure"/>).</t>
      <section anchor="workflow-of-the-id-update-procedure">
        <name>Workflow of the ID Update Procedure</name>
        <t>This section describes the workflow of the OSCORE ID Update procedure in detail.</t>
        <t>The procedure begins when either peer:</t>
        <ul spacing="normal">
          <li>
            <t>Sends a message including the Recipient-ID Option, or</t>
          </li>
          <li>
            <t>Receives such a message from the other peer.</t>
          </li>
        </ul>
        <t>During the procedure a peer decides on a value of Recipient ID to offer to the other peer and use as value of the Recipient-ID Option, and continues offering that value until the procedure is completed.</t>
        <t>Once the procedure has started a peer shall follow the instructions below:</t>
        <t><strong>Sending the Next Message</strong></t>
        <ul spacing="normal">
          <li>
            <t>The first messages sent using CTX_A, the current shared OSCORE Security Context, after the procedure has started must include the Recipient-ID Option, if this peer hasn't offered its Recipient ID already.
            </t>
            <ul spacing="normal">
              <li>
                <t>Note that this also informs the other peer of support for the ID update procedure.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t><strong>Acknowledgment</strong></t>
        <ul spacing="normal">
          <li>
            <t>If a peer has received a valid message from the other peer including the Recipient-ID Option, it must include the Recipient-ID-Ack Option in subsequent messages.</t>
          </li>
          <li>
            <t>The value of Recipient-ID-Ack Option, if used, should be the Recipient ID received from the other peer.</t>
          </li>
        </ul>
        <t><strong>Sending Subsequent Messages</strong></t>
        <t>A peer must send one message with the Recipient-ID Option according to the following:</t>
        <ul spacing="normal">
          <li>
            <t>A local timer, REPEAT_TIMER, should be maintained during the procedure. It first starts when the procedure starts. It is <bcp14>RECOMMENDED</bcp14> that the initial time of REPEAT_TIMER is equal to MAX_TRANSMIT_WAIT (see <xref section="4.8.2" sectionFormat="of" target="RFC7252"/>).
            </t>
            <ul spacing="normal">
              <li>
                <t>If the timeout expires, the next sent message must include the Recipient-ID option and, if applicable, the Recipient-ID-Ack Option with the last received Recipient ID. When that message is sent the timer REPEAT_TIMER restarts.</t>
              </li>
            </ul>
          </li>
        </ul>
        <section anchor="procedure-completion">
          <name>Procedure Completion</name>
          <t>The procedure concludes under one of the following conditions:</t>
          <t><strong>Successful Confirmation</strong></t>
          <t>The procedure succeeds if a peer has received and successfully verified at least three messages from the other peer containing the Recipient-ID-Ack Option, and sent at least two messages containing the Recipient-ID-Ack Option. At this point:</t>
          <ul spacing="normal">
            <li>
              <t>It is safe to delete CTX_A. This does not mean that CTX_A has to be deleted at this point.</t>
            </li>
            <li>
              <t>CTX_B is now considered valid and can be used (e.g., following network migration).</t>
            </li>
          </ul>
          <t><strong>Failure</strong></t>
          <t>During the procedure a timer, ENDING_TIMER, is maintained and started when the procedure starts. The initial time of ENDING_TIMER should be at least 3 times bigger than the initial time of REPEAT_TIMER. If the ENDING_TIMER expires, and the procedure times out without confirmation:</t>
          <ul spacing="normal">
            <li>
              <t>The peer <bcp14>MUST</bcp14> cease use of CTX_B and continue using CTX_A.</t>
            </li>
            <li>
              <t>The offered Recipient ID must be discarded and added to the list of IDs to prevent reuse.</t>
            </li>
          </ul>
          <t>As an alternative to maintaining REPEAT_TIMER and ENDING_TIMER, an implementation <bcp14>MAY</bcp14> use a message counter–based mechanism. Following this approach, the endpoint maintains (1) a repeat counter and (2) an ending counter, both initialized when the procedure starts. The repeat counter tracks the number of outbound messages sent since the last transmission containing the Recipient-ID option and, if applicable, the Recipient-ID-Ack Option. When the repeat counter reaches a defined threshold, the next outbound message <bcp14>MUST</bcp14> include the Recipient-ID option and, if applicable, the Recipient-ID-Ack Option with the last received Recipient ID, and the repeat counter is reset. The ending counter tracks the total number of outbound messages sent during the procedure. If successful confirmation has not occurred and the ending counter exceeds a defined maximum, the procedure <bcp14>MUST</bcp14> be considered to have failed. Upon such failure, the endpoint <bcp14>MUST</bcp14> cease use of CTX_B and continue using CTX_A.</t>
          <t>The counter-based approach is intended to provide behavior equivalent to the timer-based REPEAT_TIMER and ENDING_TIMER, while avoiding reliance on wall-clock time.</t>
        </section>
      </section>
      <section anchor="update-failure">
        <name>Failure of the ID Update Procedure</name>
        <t>The following section describes cases where the OSCORE ID update procedure fails, or must be aborted by one of the peers.</t>
        <t>Upon receiving a valid first 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 is not a KUDOS message (i.e., the OSCORE ID update procedure is being performed stand-alone) and the peer has no eligible Recipient ID to offer (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 peer terminates the OSCORE ID update 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 are not considered.</t>
        <t>Conversely, the OSCORE ID update procedure may succeed while the KUDOS procedure fails. As long as the peers have exchanged a pair of OSCORE-protected request and response that conveyed their desired new Recipient IDs in the Recipient-ID Option, the peers start using those IDs in their communications.</t>
      </section>
      <section anchor="sec-recipient-id-option">
        <name>The Recipient-ID Option</name>
        <t>The Recipient-ID Option defined in this section has the properties summarized in <xref target="_table-recipient-id-option"/>, which extends Table 4 of <xref target="RFC7252"/>. That is, the option is elective, safe to forward, part of the cache key, and not repeatable.</t>
        <table align="center" anchor="_table-recipient-id-option">
          <name>The Recipient-ID Option. C=Critical, U=Unsafe, N=NoCacheKey, R=Repeatable</name>
          <thead>
            <tr>
              <th align="left">No.</th>
              <th align="left">C</th>
              <th align="left">U</th>
              <th align="left">N</th>
              <th align="left">R</th>
              <th align="left">Name</th>
              <th align="left">Format</th>
              <th align="left">Length</th>
              <th align="left">Default</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD24</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left">Recipient-ID</td>
              <td align="left">opaque</td>
              <td align="left">any</td>
              <td align="left">(none)</td>
            </tr>
          </tbody>
        </table>
        <t>Note to RFC Editor: Following the registration of the CoAP Option Number 24, please replace "TBD24" with "24" in the figure above. Then, please delete this paragraph.</t>
        <t>The option value can have an arbitrary length, including zero length to indicate intent to use the empty string as Recipient ID. Implementations can limit its length to that of the longest supported Recipient ID.</t>
        <t>This document particularly defines how this option is used in messages protected with OSCORE. That is, when the option is included in an outgoing message, the option value specifies the new OSCORE Recipient ID that the sender endpoint intends to use with the other endpoint sharing the OSCORE Security Context.</t>
        <t>Therefore, the maximum length of the option value is equal to the maximum length of OSCORE Sender/Recipient IDs. As defined in <xref section="3.3" sectionFormat="of" target="RFC8613"/>, this is determined by the size of the AEAD nonce of the used AEAD Algorithm in the OSCORE Security Context.</t>
        <t>If the length of the Recipient ID included in the Recipient-ID option is zero, the option value <bcp14>SHALL</bcp14> be empty (Option Length = 0).</t>
        <t>The Recipient-ID Option is of class E in terms of OSCORE processing (see <xref section="4.1" sectionFormat="of" target="RFC8613"/>).</t>
      </section>
      <section anchor="sec-recipient-id-ack-option">
        <name>The Recipient-ID-Ack Option</name>
        <t>The Recipient-ID-Ack Option defined in this section has the properties summarized in <xref target="_table-recipient-id-ack-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-ack-option">
          <name>The Recipient-ID-Ack 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">TBD32</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left">Recipient-ID-Ack</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 32, please replace "TBD32" with "32" in the figure above. Then, please delete this paragraph.</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 confirms the new OSCORE Recipient ID that the recipient endpoint has chosen for this sender endpoint.</t>
        <t>The Recipient-ID-Ack 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>OSCORE ID Update Procedure Initiated with a Request Message</name>
          <t><xref target="fig-id-update-client-init"/> shows an example of the OSCORE ID update procedure, run stand-alone and initiated by the client sending a request message. On each peer, SID and RID denote the OSCORE Sender ID and Recipient ID of that peer, respectively. An example where the server initiates the procedure is shown in <xref target="example-server-initiated-id-update"/>.</t>
          <figure anchor="fig-id-update-client-init">
            <name>Example of the OSCORE ID update procedure initiated with a request message</name>
            <artset>
              <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1872" width="496" viewBox="0 0 496 1872" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 104,48 L 104,1856" fill="none" stroke="black"/>
                  <path d="M 392,48 L 392,1856" fill="none" stroke="black"/>
                  <path d="M 112,160 L 384,160" fill="none" stroke="black"/>
                  <path d="M 112,368 L 384,368" fill="none" stroke="black"/>
                  <path d="M 112,608 L 384,608" fill="none" stroke="black"/>
                  <path d="M 112,816 L 384,816" fill="none" stroke="black"/>
                  <path d="M 112,1008 L 384,1008" fill="none" stroke="black"/>
                  <path d="M 112,1216 L 384,1216" fill="none" stroke="black"/>
                  <path d="M 112,1456 L 384,1456" fill="none" stroke="black"/>
                  <path d="M 112,1728 L 384,1728" 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,1008 380,1002.4 380,1013.6" fill="black" transform="rotate(0,384,1008)"/>
                  <polygon class="arrowhead" points="392,608 380,602.4 380,613.6" fill="black" transform="rotate(0,384,608)"/>
                  <polygon class="arrowhead" points="392,160 380,154.4 380,165.6" fill="black" transform="rotate(0,384,160)"/>
                  <polygon class="arrowhead" points="120,1728 108,1722.4 108,1733.6" fill="black" transform="rotate(180,112,1728)"/>
                  <polygon class="arrowhead" points="120,1216 108,1210.4 108,1221.6" fill="black" transform="rotate(180,112,1216)"/>
                  <polygon class="arrowhead" points="120,816 108,810.4 108,821.6" fill="black" transform="rotate(180,112,816)"/>
                  <polygon class="arrowhead" points="120,368 108,362.4 108,373.6" fill="black" transform="rotate(180,112,368)"/>
                  <g class="text">
                    <text x="108" y="36">Client</text>
                    <text x="388" y="36">Server</text>
                    <text x="24" y="68">CTX_A</text>
                    <text x="56" y="68">{</text>
                    <text x="424" y="68">CTX_A</text>
                    <text x="456" y="68">{</text>
                    <text x="24" y="84">SID</text>
                    <text x="48" y="84">=</text>
                    <text x="76" y="84">0x01</text>
                    <text x="424" y="84">SID</text>
                    <text x="448" y="84">=</text>
                    <text x="476" y="84">0x00</text>
                    <text x="24" y="100">RID</text>
                    <text x="48" y="100">=</text>
                    <text x="76" y="100">0x00</text>
                    <text x="424" y="100">RID</text>
                    <text x="448" y="100">=</text>
                    <text x="476" y="100">0x01</text>
                    <text x="8" y="116">}</text>
                    <text x="408" y="116">}</text>
                    <text x="232" y="148">Request</text>
                    <text x="276" y="148">#1</text>
                    <text x="32" y="164">Protect</text>
                    <text x="424" y="164">/temp</text>
                    <text x="20" y="180">with</text>
                    <text x="64" y="180">CTX_A</text>
                    <text x="140" y="180">OSCORE</text>
                    <text x="176" y="180">{</text>
                    <text x="136" y="196">...</text>
                    <text x="140" y="212">kid:</text>
                    <text x="180" y="212">0x01</text>
                    <text x="428" y="212">Verify</text>
                    <text x="120" y="228">}</text>
                    <text x="420" y="228">with</text>
                    <text x="464" y="228">CTX_A</text>
                    <text x="152" y="244">Encrypted</text>
                    <text x="224" y="244">Payload</text>
                    <text x="264" y="244">{</text>
                    <text x="136" y="260">...</text>
                    <text x="176" y="276">Recipient-ID:</text>
                    <text x="252" y="276">0x42</text>
                    <text x="136" y="292">...</text>
                    <text x="168" y="308">Application</text>
                    <text x="248" y="308">Payload</text>
                    <text x="120" y="324">}</text>
                    <text x="236" y="356">Response</text>
                    <text x="284" y="356">#1</text>
                    <text x="432" y="372">Protect</text>
                    <text x="140" y="388">OSCORE</text>
                    <text x="176" y="388">{</text>
                    <text x="420" y="388">with</text>
                    <text x="464" y="388">CTX_A</text>
                    <text x="136" y="404">...</text>
                    <text x="28" y="420">Verify</text>
                    <text x="120" y="420">}</text>
                    <text x="20" y="436">with</text>
                    <text x="64" y="436">CTX_A</text>
                    <text x="152" y="436">Encrypted</text>
                    <text x="224" y="436">Payload</text>
                    <text x="264" y="436">{</text>
                    <text x="136" y="452">...</text>
                    <text x="176" y="468">Recipient-ID:</text>
                    <text x="252" y="468">0x78</text>
                    <text x="192" y="484">Recipient-ID-Ack:</text>
                    <text x="284" y="484">0x42</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="232" y="596">Request</text>
                    <text x="276" y="596">#2</text>
                    <text x="32" y="612">Protect</text>
                    <text x="424" y="612">/temp</text>
                    <text x="20" y="628">with</text>
                    <text x="64" y="628">CTX_A</text>
                    <text x="140" y="628">OSCORE</text>
                    <text x="176" y="628">{</text>
                    <text x="136" y="644">...</text>
                    <text x="140" y="660">kid:</text>
                    <text x="180" y="660">0x01</text>
                    <text x="428" y="660">Verify</text>
                    <text x="120" y="676">}</text>
                    <text x="420" y="676">with</text>
                    <text x="464" y="676">CTX_A</text>
                    <text x="152" y="692">Encrypted</text>
                    <text x="224" y="692">Payload</text>
                    <text x="264" y="692">{</text>
                    <text x="136" y="708">...</text>
                    <text x="192" y="724">Recipient-ID-Ack:</text>
                    <text x="284" y="724">0x78</text>
                    <text x="136" y="740">...</text>
                    <text x="168" y="756">Application</text>
                    <text x="248" y="756">Payload</text>
                    <text x="120" y="772">}</text>
                    <text x="236" y="804">Response</text>
                    <text x="284" y="804">#2</text>
                    <text x="432" y="820">Protect</text>
                    <text x="140" y="836">OSCORE</text>
                    <text x="176" y="836">{</text>
                    <text x="420" y="836">with</text>
                    <text x="464" y="836">CTX_A</text>
                    <text x="136" y="852">...</text>
                    <text x="28" y="868">Verify</text>
                    <text x="120" y="868">}</text>
                    <text x="20" y="884">with</text>
                    <text x="64" y="884">CTX_A</text>
                    <text x="152" y="884">Encrypted</text>
                    <text x="224" y="884">Payload</text>
                    <text x="264" y="884">{</text>
                    <text x="136" y="900">...</text>
                    <text x="192" y="916">Recipient-ID-Ack:</text>
                    <text x="284" y="916">0x42</text>
                    <text x="168" y="932">Application</text>
                    <text x="248" y="932">Payload</text>
                    <text x="120" y="948">}</text>
                    <text x="232" y="996">Request</text>
                    <text x="276" y="996">#3</text>
                    <text x="32" y="1012">Protect</text>
                    <text x="424" y="1012">/temp</text>
                    <text x="20" y="1028">with</text>
                    <text x="64" y="1028">CTX_A</text>
                    <text x="140" y="1028">OSCORE</text>
                    <text x="176" y="1028">{</text>
                    <text x="136" y="1044">...</text>
                    <text x="140" y="1060">kid:</text>
                    <text x="180" y="1060">0x01</text>
                    <text x="428" y="1060">Verify</text>
                    <text x="120" y="1076">}</text>
                    <text x="420" y="1076">with</text>
                    <text x="464" y="1076">CTX_A</text>
                    <text x="152" y="1092">Encrypted</text>
                    <text x="224" y="1092">Payload</text>
                    <text x="264" y="1092">{</text>
                    <text x="136" y="1108">...</text>
                    <text x="192" y="1124">Recipient-ID-Ack:</text>
                    <text x="284" y="1124">0x78</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="236" y="1204">Response</text>
                    <text x="284" y="1204">#3</text>
                    <text x="432" y="1220">Protect</text>
                    <text x="140" y="1236">OSCORE</text>
                    <text x="176" y="1236">{</text>
                    <text x="420" y="1236">with</text>
                    <text x="464" y="1236">CTX_A</text>
                    <text x="136" y="1252">...</text>
                    <text x="28" y="1268">Verify</text>
                    <text x="120" y="1268">}</text>
                    <text x="20" y="1284">with</text>
                    <text x="64" y="1284">CTX_A</text>
                    <text x="152" y="1284">Encrypted</text>
                    <text x="224" y="1284">Payload</text>
                    <text x="264" y="1284">{</text>
                    <text x="136" y="1300">...</text>
                    <text x="192" y="1316">Recipient-ID-Ack:</text>
                    <text x="284" y="1316">0x42</text>
                    <text x="168" y="1332">Application</text>
                    <text x="248" y="1332">Payload</text>
                    <text x="120" y="1348">}</text>
                    <text x="20" y="1380">Safe</text>
                    <text x="52" y="1380">to</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_A</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">0x01</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_A</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="192" y="1572">Recipient-ID-Ack:</text>
                    <text x="284" y="1572">0x78</text>
                    <text x="136" y="1588">...</text>
                    <text x="168" y="1604">Application</text>
                    <text x="248" y="1604">Payload</text>
                    <text x="120" y="1620">}</text>
                    <text x="420" y="1652">Safe</text>
                    <text x="452" y="1652">to</text>
                    <text x="432" y="1668">discard</text>
                    <text x="424" y="1684">CTX_A</text>
                    <text x="236" y="1716">Response</text>
                    <text x="284" y="1716">#4</text>
                    <text x="432" y="1732">Protect</text>
                    <text x="140" y="1748">OSCORE</text>
                    <text x="176" y="1748">{</text>
                    <text x="420" y="1748">with</text>
                    <text x="464" y="1748">CTX_A</text>
                    <text x="136" y="1764">...</text>
                    <text x="28" y="1780">Verify</text>
                    <text x="120" y="1780">}</text>
                    <text x="20" y="1796">with</text>
                    <text x="64" y="1796">CTX_A</text>
                    <text x="152" y="1796">Encrypted</text>
                    <text x="224" y="1796">Payload</text>
                    <text x="264" y="1796">{</text>
                    <text x="136" y="1812">...</text>
                    <text x="168" y="1828">Application</text>
                    <text x="248" y="1828">Payload</text>
                    <text x="120" y="1844">}</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art" align="center"><![CDATA[
          Client                             Server
            |                                   |
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               |
            |  Recipient-ID-Ack: 0x42           |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
            |                                   |
            |                                   |
            |            Request #2             |
Protect     |---------------------------------->| /temp
with CTX_A  | OSCORE {                          |
            |  ...                              |
            |  kid: 0x01                        | Verify
            | }                                 | with CTX_A
            | Encrypted Payload {               |
            |  ...                              |
            |  Recipient-ID-Ack: 0x78           |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
            |            Response #2            |
            |<----------------------------------| Protect
            | OSCORE {                          | with CTX_A
            |  ...                              |
Verify      | }                                 |
with CTX_A  | Encrypted Payload {               |
            |  ...                              |
            |  Recipient-ID-Ack: 0x42           |
            |  Application Payload              |
            | }                                 |
            |                                   |
            |                                   |
            |            Request #3             |
Protect     |---------------------------------->| /temp
with CTX_A  | OSCORE {                          |
            |  ...                              |
            |  kid: 0x01                        | Verify
            | }                                 | with CTX_A
            | Encrypted Payload {               |
            |  ...                              |
            |  Recipient-ID-Ack: 0x78           |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
            |            Response #3            |
            |<----------------------------------| Protect
            | OSCORE {                          | with CTX_A
            |  ...                              |
Verify      | }                                 |
with CTX_A  | Encrypted Payload {               |
            |  ...                              |
            |  Recipient-ID-Ack: 0x42           |
            |  Application Payload              |
            | }                                 |
            |                                   |
Safe to     |                                   |
discard     |                                   |
CTX_A       |                                   |
            |                                   |
            |            Request #4             |
Protect     |---------------------------------->| /temp
with CTX_A  | OSCORE {                          |
            |  ...                              |
            |  kid: 0x01                        | Verify
            | }                                 | with CTX_A
            | Encrypted Payload {               |
            |  ...                              |
            |  Recipient-ID-Ack: 0x78           |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
            |                                   | Safe to
            |                                   | discard
            |                                   | CTX_A
            |                                   |
            |            Response #4            |
            |<----------------------------------| Protect
            | OSCORE {                          | with CTX_A
            |  ...                              |
Verify      | }                                 |
with CTX_A  | 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, and the Recipient-ID-Ack Option, with value the client's offered Recipient ID 0x42.</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>Next, the client sends the OSCORE message Request #2, which is protected with CTX_A and includes the Recipient-ID-Ack Option, with value the server's offered Recipient ID 0x78.</t>
          <t>From this point, following messages exchanges between the peers will include the Recipient-ID-Ack Option. A peer will only stop including that option when it has verified 3 messages from the other peer containing the Recipient-ID-Ack Option.</t>
          <t>Upon receiving, decrypting, and successfully verifying the OSCORE message Response #3, the client considers 0x78 and 0x42 as the new Sender ID and Recipient ID to use when deriving CTX_B. Practically, the client can install 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 CTX_A.</t>
          <t>Upon receiving, decrypting, and successfully verifying the OSCORE message Request #4, the server considers 0x42 and 0x78 as its new Sender ID and Recipient ID to use for CTX_B. Practically, the server 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 CTX_A.</t>
          <t>At this point both client and server are in a position to derive CTX_B already, or wait to do it. Regardless they are both able to start using CTX_B, e.g., after network migration.</t>
        </section>
        <section anchor="new-identifiers-before-migration">
          <name>Establishing New OSCORE Identifiers Ahead of Network Migration</name>
          <t>Peers may use the OSCORE ID update procedure to establish new OSCORE IDs in advance of a network change. However, peers <bcp14>SHOULD NOT</bcp14> begin using these new identifiers on the current network prior to network migration. Using a new identifier on the old network, or using the old identifiers on the new network, would allow observers to correlate activity across networks, defeating the unlinkability that updating the OSCORE IDs is intended to provide. To be effective, new identifiers <bcp14>SHOULD</bcp14> only be used for sending OSCORE protected messages once the network migration is completed. Establishing new OSCORE IDs ahead of time ensures that migration can proceed without delay, but care must be taken to ensure that premature use of the identifiers does not enable linkability.</t>
          <t>To accomplish this, the peers execute the ID update procedure as normal, with the following difference: the peers must not begin using the OSCORE Security Context CTX_B until after the network migration has taken place. Thus, both peers will be in the position to derive CTX_B, but will not transition to use it until the first request protected with CTX_B is transmitted in the new network, that is after network migration. Note that peers may want to retain CTX_A to have available for migration back to the old network.</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 having run the OSCORE ID update procedure stand-alone and starting to use CTX_B, or having run the OSCORE ID update procedure 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>The same security considerations as in <xref target="RFC8613"/> and <xref target="I-D.ietf-core-oscore-key-update"/> hold for this document.</t>
      <t>The OSCORE ID update procedure is a mechanism to mitigate the risk of tracking by on-path adversaries. By enabling endpoints to update their identifiers, either in response to specific events or on a regular basis, this approach helps prevent correlations that could otherwise be drawn between OSCORE messages on different networks.</t>
      <t>While the ID update procedure helps reduce linkability across networks, the change of IDs alone might not completely prevent adversaries from recognizing traffic patterns that reveal message ordering or frequency. That is, the procedure becomes more effective if combined with the protection and/or change of other information that can help identify endpoints across different networks.</t>
      <t>In that spirit, when a peer installs a new OSCORE Security Context as a result of the OSCORE ID update procedure, it re-initializes the Sender Sequence Number to 0. That prevents an adversary from obviously tracking the peer by leveraging the Partial IV of observed messages, since the Partial IV value does not predictably continue from the last known value that was used in the previous network. Building on that, the peer can in fact re-initialize the Sender Sequence Number to a value greater than 0, thus making tracking further difficult.</t>
      <t>Likewise, other information such as addressing information, may still be used to track the peers. Thus, it is recommended to combine the usage of the OSCORE ID update procedure also with the following, upon network migration:</t>
      <ul spacing="normal">
        <li>
          <t>Changing the network address (e.g., intentionally, or due to mobility, or NAT rebinding).</t>
        </li>
        <li>
          <t>Changing the link-layer address (e.g., MAC address randomization).</t>
        </li>
      </ul>
      <t>Furthermore, it is recommended that a peer does not start using its newly established OSCORE Sender ID until after network migration, in order to mitigate tracking attempts.</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 entries 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 Numbers</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>
            <tr>
              <td align="left">TBD32</td>
              <td align="left">Recipient-ID-Ack</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.
Note to RFC Editor: Following the registration of the CoAP Option Number 32, please replace "TBD32" with "32" in the table above. Then, please delete this paragraph.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC7641">
          <front>
            <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <date month="September" year="2015"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks. The state of a resource on a CoAP server can change over time. This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time. The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7641"/>
          <seriesInfo name="DOI" value="10.17487/RFC7641"/>
        </reference>
        <reference anchor="RFC8613">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <date month="July" year="2019"/>
            <abstract>
              <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE). OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
              <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration. Therefore, this document updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8613"/>
          <seriesInfo name="DOI" value="10.17487/RFC8613"/>
        </reference>
        <reference anchor="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-key-update">
          <front>
            <title>Key Update for OSCORE (KUDOS)</title>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   Communications with the Constrained Application Protocol (CoAP) can
   be protected end-to-end at the application-layer by using the
   security protocol Object Security for Constrained RESTful
   Environments (OSCORE).  Under some circumstances, two CoAP endpoints
   need to update their OSCORE keying material before communications can
   securely continue, e.g., due to approaching key usage limits.  This
   document defines Key Update for OSCORE (KUDOS), a lightweight key
   update procedure that two CoAP endpoints can use to update their
   OSCORE keying material by establishing a new OSCORE Security Context.
   Accordingly, this document updates the use of the OSCORE flag bits in
   the CoAP OSCORE Option as well as the protection of CoAP response
   messages with OSCORE.  Also, it deprecates the key update procedure
   specified in Appendix B.2 of RFC 8613.  Therefore, this document
   updates RFC 8613.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-key-update-14"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC9528">
          <front>
            <title>Ephemeral Diffie-Hellman Over COSE (EDHOC)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Preuß Mattsson" initials="J." surname="Preuß Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <date month="March" year="2024"/>
            <abstract>
              <t>This document specifies Ephemeral Diffie-Hellman Over COSE (EDHOC), a very compact and lightweight authenticated Diffie-Hellman key exchange with ephemeral keys. EDHOC provides mutual authentication, forward secrecy, and identity protection. EDHOC is intended for usage in constrained scenarios, and a main use case is to establish an Object Security for Constrained RESTful Environments (OSCORE) security context. By reusing CBOR Object Signing and Encryption (COSE) for cryptography, Concise Binary Object Representation (CBOR) for encoding, and Constrained Application Protocol (CoAP) for transport, the additional code size can be kept very low.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9528"/>
          <seriesInfo name="DOI" value="10.17487/RFC9528"/>
        </reference>
      </references>
    </references>
    <?line 441?>

<section anchor="examples">
      <name>Examples</name>
      <t>This appendix provides examples where the OSCORE ID update procedure is used. In particular:</t>
      <ul spacing="normal">
        <li>
          <t><xref target="example-server-initiated-id-update"/> shows an example of the OSCORE ID update procedure initiated by the server sending a response message.</t>
        </li>
        <li>
          <t><xref target="example-client-initiated-id-update-failure"/> shows an example of the OSCORE ID update procedure initiated by the client sending a request message where the procedure fails to complete.</t>
        </li>
      </ul>
      <section anchor="example-server-initiated-id-update">
        <name>OSCORE ID Update Procedure Initiated with a Response Message</name>
        <t><xref target="fig-id-update-server-init"/> shows an example of the OSCORE ID update procedure, run stand-alone and initiated by the server sending a response message. On each peer, SID and RID denote the OSCORE Sender ID and Recipient ID of that peer, respectively. The prerequisites and the actions taken by the peers involved are aligned with what is described in <xref target="example-client-initiated-id-update"/>, except that it is the server that takes the initiative to perform the OSCORE ID update procedure.</t>
        <figure anchor="fig-id-update-server-init">
          <name>Example of the OSCORE ID update procedure initiated with a response message</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1872" width="496" viewBox="0 0 496 1872" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 104,48 L 104,1856" fill="none" stroke="black"/>
                <path d="M 392,48 L 392,1856" fill="none" stroke="black"/>
                <path d="M 112,160 L 384,160" fill="none" stroke="black"/>
                <path d="M 112,336 L 384,336" fill="none" stroke="black"/>
                <path d="M 112,560 L 384,560" fill="none" stroke="black"/>
                <path d="M 112,784 L 384,784" fill="none" stroke="black"/>
                <path d="M 112,992 L 384,992" fill="none" stroke="black"/>
                <path d="M 112,1184 L 384,1184" fill="none" stroke="black"/>
                <path d="M 112,1440 L 384,1440" fill="none" stroke="black"/>
                <path d="M 112,1696 L 384,1696" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="392,1440 380,1434.4 380,1445.6" fill="black" transform="rotate(0,384,1440)"/>
                <polygon class="arrowhead" points="392,992 380,986.4 380,997.6" fill="black" transform="rotate(0,384,992)"/>
                <polygon class="arrowhead" points="392,560 380,554.4 380,565.6" fill="black" transform="rotate(0,384,560)"/>
                <polygon class="arrowhead" points="392,160 380,154.4 380,165.6" fill="black" transform="rotate(0,384,160)"/>
                <polygon class="arrowhead" points="120,1696 108,1690.4 108,1701.6" fill="black" transform="rotate(180,112,1696)"/>
                <polygon class="arrowhead" points="120,1184 108,1178.4 108,1189.6" fill="black" transform="rotate(180,112,1184)"/>
                <polygon class="arrowhead" points="120,784 108,778.4 108,789.6" fill="black" transform="rotate(180,112,784)"/>
                <polygon class="arrowhead" points="120,336 108,330.4 108,341.6" fill="black" transform="rotate(180,112,336)"/>
                <g class="text">
                  <text x="108" y="36">Client</text>
                  <text x="388" y="36">Server</text>
                  <text x="24" y="68">CTX_A</text>
                  <text x="56" y="68">{</text>
                  <text x="424" y="68">CTX_A</text>
                  <text x="456" y="68">{</text>
                  <text x="24" y="84">SID</text>
                  <text x="48" y="84">=</text>
                  <text x="76" y="84">0x01</text>
                  <text x="424" y="84">SID</text>
                  <text x="448" y="84">=</text>
                  <text x="476" y="84">0x00</text>
                  <text x="24" y="100">RID</text>
                  <text x="48" y="100">=</text>
                  <text x="76" y="100">0x00</text>
                  <text x="424" y="100">RID</text>
                  <text x="448" y="100">=</text>
                  <text x="476" y="100">0x01</text>
                  <text x="8" y="116">}</text>
                  <text x="408" y="116">}</text>
                  <text x="232" y="148">Request</text>
                  <text x="276" y="148">#1</text>
                  <text x="424" y="164">/temp</text>
                  <text x="140" y="180">OSCORE</text>
                  <text x="176" y="180">{</text>
                  <text x="128" y="196">...</text>
                  <text x="132" y="212">kid:</text>
                  <text x="172" y="212">0x01</text>
                  <text x="120" y="228">}</text>
                  <text x="152" y="244">Encrypted</text>
                  <text x="224" y="244">Payload</text>
                  <text x="264" y="244">{</text>
                  <text x="128" y="260">...</text>
                  <text x="160" y="276">Application</text>
                  <text x="240" y="276">Payload</text>
                  <text x="120" y="292">}</text>
                  <text x="236" y="324">Response</text>
                  <text x="284" y="324">#1</text>
                  <text x="432" y="340">Protect</text>
                  <text x="140" y="356">OSCORE</text>
                  <text x="176" y="356">{</text>
                  <text x="420" y="356">with</text>
                  <text x="464" y="356">CTX_A</text>
                  <text x="136" y="372">...</text>
                  <text x="28" y="388">Verify</text>
                  <text x="120" y="388">}</text>
                  <text x="20" y="404">with</text>
                  <text x="64" y="404">CTX_A</text>
                  <text x="152" y="404">Encrypted</text>
                  <text x="224" y="404">Payload</text>
                  <text x="264" y="404">{</text>
                  <text x="136" y="420">...</text>
                  <text x="176" y="436">Recipient-ID:</text>
                  <text x="252" y="436">0x42</text>
                  <text x="136" y="452">...</text>
                  <text x="168" y="468">Application</text>
                  <text x="248" y="468">Payload</text>
                  <text x="120" y="484">}</text>
                  <text x="232" y="548">Request</text>
                  <text x="276" y="548">#2</text>
                  <text x="32" y="564">Protect</text>
                  <text x="424" y="564">/temp</text>
                  <text x="20" y="580">with</text>
                  <text x="64" y="580">CTX_A</text>
                  <text x="140" y="580">OSCORE</text>
                  <text x="176" y="580">{</text>
                  <text x="136" y="596">...</text>
                  <text x="140" y="612">kid:</text>
                  <text x="180" y="612">0x01</text>
                  <text x="428" y="612">Verify</text>
                  <text x="120" y="628">}</text>
                  <text x="420" y="628">with</text>
                  <text x="464" y="628">CTX_A</text>
                  <text x="152" y="644">Encrypted</text>
                  <text x="224" y="644">Payload</text>
                  <text x="264" y="644">{</text>
                  <text x="136" y="660">...</text>
                  <text x="176" y="676">Recipient-ID:</text>
                  <text x="252" y="676">0x78</text>
                  <text x="192" y="692">Recipient-ID-Ack:</text>
                  <text x="284" y="692">0x42</text>
                  <text x="136" y="708">...</text>
                  <text x="168" y="724">Application</text>
                  <text x="248" y="724">Payload</text>
                  <text x="120" y="740">}</text>
                  <text x="236" y="772">Response</text>
                  <text x="284" y="772">#2</text>
                  <text x="432" y="788">Protect</text>
                  <text x="140" y="804">OSCORE</text>
                  <text x="176" y="804">{</text>
                  <text x="420" y="804">with</text>
                  <text x="464" y="804">CTX_A</text>
                  <text x="136" y="820">...</text>
                  <text x="28" y="836">Verify</text>
                  <text x="120" y="836">}</text>
                  <text x="20" y="852">with</text>
                  <text x="64" y="852">CTX_A</text>
                  <text x="152" y="852">Encrypted</text>
                  <text x="224" y="852">Payload</text>
                  <text x="264" y="852">{</text>
                  <text x="136" y="868">...</text>
                  <text x="192" y="884">Recipient-ID-Ack:</text>
                  <text x="284" y="884">0x78</text>
                  <text x="136" y="900">...</text>
                  <text x="168" y="916">Application</text>
                  <text x="248" y="916">Payload</text>
                  <text x="120" y="932">}</text>
                  <text x="232" y="980">Request</text>
                  <text x="276" y="980">#3</text>
                  <text x="32" y="996">Protect</text>
                  <text x="424" y="996">/temp</text>
                  <text x="20" y="1012">with</text>
                  <text x="64" y="1012">CTX_A</text>
                  <text x="140" y="1012">OSCORE</text>
                  <text x="176" y="1012">{</text>
                  <text x="136" y="1028">...</text>
                  <text x="140" y="1044">kid:</text>
                  <text x="180" y="1044">0x01</text>
                  <text x="428" y="1044">Verify</text>
                  <text x="120" y="1060">}</text>
                  <text x="420" y="1060">with</text>
                  <text x="464" y="1060">CTX_A</text>
                  <text x="152" y="1076">Encrypted</text>
                  <text x="224" y="1076">Payload</text>
                  <text x="264" y="1076">{</text>
                  <text x="136" y="1092">...</text>
                  <text x="192" y="1108">Recipient-ID-Ack:</text>
                  <text x="284" y="1108">0x42</text>
                  <text x="168" y="1124">Application</text>
                  <text x="248" y="1124">Payload</text>
                  <text x="120" y="1140">}</text>
                  <text x="236" y="1172">Response</text>
                  <text x="284" y="1172">#3</text>
                  <text x="432" y="1188">Protect</text>
                  <text x="140" y="1204">OSCORE</text>
                  <text x="176" y="1204">{</text>
                  <text x="420" y="1204">with</text>
                  <text x="464" y="1204">CTX_A</text>
                  <text x="136" y="1220">...</text>
                  <text x="28" y="1236">Verify</text>
                  <text x="120" y="1236">}</text>
                  <text x="20" y="1252">with</text>
                  <text x="64" y="1252">CTX_A</text>
                  <text x="152" y="1252">Encrypted</text>
                  <text x="224" y="1252">Payload</text>
                  <text x="264" y="1252">{</text>
                  <text x="136" y="1268">...</text>
                  <text x="192" y="1284">Recipient-ID-Ack:</text>
                  <text x="284" y="1284">0x78</text>
                  <text x="136" y="1300">...</text>
                  <text x="168" y="1316">Application</text>
                  <text x="248" y="1316">Payload</text>
                  <text x="120" y="1332">}</text>
                  <text x="232" y="1428">Request</text>
                  <text x="276" y="1428">#4</text>
                  <text x="32" y="1444">Protect</text>
                  <text x="424" y="1444">/temp</text>
                  <text x="20" y="1460">with</text>
                  <text x="64" y="1460">CTX_A</text>
                  <text x="140" y="1460">OSCORE</text>
                  <text x="176" y="1460">{</text>
                  <text x="136" y="1476">...</text>
                  <text x="140" y="1492">kid:</text>
                  <text x="180" y="1492">0x01</text>
                  <text x="428" y="1492">Verify</text>
                  <text x="120" y="1508">}</text>
                  <text x="420" y="1508">with</text>
                  <text x="464" y="1508">CTX_A</text>
                  <text x="152" y="1524">Encrypted</text>
                  <text x="224" y="1524">Payload</text>
                  <text x="264" y="1524">{</text>
                  <text x="136" y="1540">...</text>
                  <text x="192" y="1556">Recipient-ID-Ack:</text>
                  <text x="284" y="1556">0x42</text>
                  <text x="168" y="1572">Application</text>
                  <text x="248" y="1572">Payload</text>
                  <text x="120" y="1588">}</text>
                  <text x="420" y="1620">Safe</text>
                  <text x="452" y="1620">to</text>
                  <text x="432" y="1636">discard</text>
                  <text x="424" y="1652">CTX_A</text>
                  <text x="236" y="1684">Response</text>
                  <text x="284" y="1684">#4</text>
                  <text x="432" y="1700">Protect</text>
                  <text x="140" y="1716">OSCORE</text>
                  <text x="176" y="1716">{</text>
                  <text x="420" y="1716">with</text>
                  <text x="464" y="1716">CTX_A</text>
                  <text x="136" y="1732">...</text>
                  <text x="28" y="1748">Verify</text>
                  <text x="120" y="1748">}</text>
                  <text x="20" y="1764">with</text>
                  <text x="64" y="1764">CTX_A</text>
                  <text x="152" y="1764">Encrypted</text>
                  <text x="224" y="1764">Payload</text>
                  <text x="264" y="1764">{</text>
                  <text x="136" y="1780">...</text>
                  <text x="20" y="1796">Safe</text>
                  <text x="52" y="1796">to</text>
                  <text x="192" y="1796">Recipient-ID-Ack:</text>
                  <text x="284" y="1796">0x78</text>
                  <text x="32" y="1812">discard</text>
                  <text x="136" y="1812">...</text>
                  <text x="24" y="1828">CTX_A</text>
                  <text x="168" y="1828">Application</text>
                  <text x="248" y="1828">Payload</text>
                  <text x="120" y="1844">}</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
          Client                             Server
            |                                   |
CTX_A {     |                                   | CTX_A {
 SID = 0x01 |                                   |  SID = 0x00
 RID = 0x00 |                                   |  RID = 0x01
}           |                                   | }
            |                                   |
            |            Request #1             |
            |---------------------------------->| /temp
            | OSCORE {                          |
            | ...                               |
            | kid: 0x01                         |
            | }                                 |
            | Encrypted Payload {               |
            | ...                               |
            | Application Payload               |
            | }                                 |
            |                                   |
            |            Response #1            |
            |<----------------------------------| Protect
            | OSCORE {                          | with CTX_A
            |  ...                              |
Verify      | }                                 |
with CTX_A  | Encrypted Payload {               |
            |  ...                              |
            |  Recipient-ID: 0x42               |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
            |                                   |
            |                                   |
            |            Request #2             |
Protect     |---------------------------------->| /temp
with CTX_A  | OSCORE {                          |
            |  ...                              |
            |  kid: 0x01                        | Verify
            | }                                 | with CTX_A
            | Encrypted Payload {               |
            |  ...                              |
            |  Recipient-ID: 0x78               |
            |  Recipient-ID-Ack: 0x42           |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
            |            Response #2            |
            |<----------------------------------| Protect
            | OSCORE {                          | with CTX_A
            |  ...                              |
Verify      | }                                 |
with CTX_A  | Encrypted Payload {               |
            |  ...                              |
            |  Recipient-ID-Ack: 0x78           |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
            |                                   |
            |            Request #3             |
Protect     |---------------------------------->| /temp
with CTX_A  | OSCORE {                          |
            |  ...                              |
            |  kid: 0x01                        | Verify
            | }                                 | with CTX_A
            | Encrypted Payload {               |
            |  ...                              |
            |  Recipient-ID-Ack: 0x42           |
            |  Application Payload              |
            | }                                 |
            |                                   |
            |            Response #3            |
            |<----------------------------------| Protect
            | OSCORE {                          | with CTX_A
            |  ...                              |
Verify      | }                                 |
with CTX_A  | Encrypted Payload {               |
            |  ...                              |
            |  Recipient-ID-Ack: 0x78           |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
            |                                   |
            |                                   |
            |                                   |
            |                                   |
            |            Request #4             |
Protect     |---------------------------------->| /temp
with CTX_A  | OSCORE {                          |
            |  ...                              |
            |  kid: 0x01                        | Verify
            | }                                 | with CTX_A
            | Encrypted Payload {               |
            |  ...                              |
            |  Recipient-ID-Ack: 0x42           |
            |  Application Payload              |
            | }                                 |
            |                                   |
            |                                   | Safe to
            |                                   | discard
            |                                   | CTX_A
            |                                   |
            |            Response #4            |
            |<----------------------------------| Protect
            | OSCORE {                          | with CTX_A
            |  ...                              |
Verify      | }                                 |
with CTX_A  | Encrypted Payload {               |
            |  ...                              |
Safe to     |  Recipient-ID-Ack: 0x78           |
discard     |  ...                              |
CTX_A       |  Application Payload              |
            | }                                 |
            |                                   |
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="example-client-initiated-id-update-failure">
        <name>Failure of the OSCORE ID Update Procedure Initiated with a Request Message</name>
        <t><xref target="fig-id-update-client-init-failure"/> shows an example of the OSCORE ID update procedure, run stand-alone and initiated by the client sending a request message where the procedure fails to complete due to the server not including the Recipient-ID-Ack option or the Recipient-ID in its response messages. On each peer, SID and RID denote the OSCORE Sender ID and Recipient ID of that peer, respectively. This example assumes that the value of the REPEAT_TIMER on the client is such that it expires between each request the client sends.</t>
        <t>The client repeatedly tries sending requests to the server including the Recipient-ID option, but does not receive acknowledgments in the form of responses containing the Recipient-ID-Ack option from the server. Thus the client eventually reaches the expiration of its ENDING_TIMER, aborts the OSCORE ID update procedure, and proceeds to continue communication with normal OSCORE messages.</t>
        <figure anchor="fig-id-update-client-init-failure">
          <name>Example of the OSCORE ID update procedure failing when initiated with a request message</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1728" width="496" viewBox="0 0 496 1728" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 104,48 L 104,1712" fill="none" stroke="black"/>
                <path d="M 392,48 L 392,1712" fill="none" stroke="black"/>
                <path d="M 112,160 L 384,160" fill="none" stroke="black"/>
                <path d="M 112,368 L 384,368" fill="none" stroke="black"/>
                <path d="M 112,560 L 384,560" fill="none" stroke="black"/>
                <path d="M 112,768 L 384,768" fill="none" stroke="black"/>
                <path d="M 112,944 L 384,944" fill="none" stroke="black"/>
                <path d="M 112,1152 L 384,1152" fill="none" stroke="black"/>
                <path d="M 112,1376 L 384,1376" fill="none" stroke="black"/>
                <path d="M 112,1584 L 384,1584" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="392,1376 380,1370.4 380,1381.6" fill="black" transform="rotate(0,384,1376)"/>
                <polygon class="arrowhead" points="392,944 380,938.4 380,949.6" fill="black" transform="rotate(0,384,944)"/>
                <polygon class="arrowhead" points="392,560 380,554.4 380,565.6" fill="black" transform="rotate(0,384,560)"/>
                <polygon class="arrowhead" points="392,160 380,154.4 380,165.6" fill="black" transform="rotate(0,384,160)"/>
                <polygon class="arrowhead" points="120,1584 108,1578.4 108,1589.6" fill="black" transform="rotate(180,112,1584)"/>
                <polygon class="arrowhead" points="120,1152 108,1146.4 108,1157.6" fill="black" transform="rotate(180,112,1152)"/>
                <polygon class="arrowhead" points="120,768 108,762.4 108,773.6" fill="black" transform="rotate(180,112,768)"/>
                <polygon class="arrowhead" points="120,368 108,362.4 108,373.6" fill="black" transform="rotate(180,112,368)"/>
                <g class="text">
                  <text x="108" y="36">Client</text>
                  <text x="388" y="36">Server</text>
                  <text x="24" y="68">CTX_A</text>
                  <text x="56" y="68">{</text>
                  <text x="424" y="68">CTX_A</text>
                  <text x="456" y="68">{</text>
                  <text x="24" y="84">SID</text>
                  <text x="48" y="84">=</text>
                  <text x="76" y="84">0x01</text>
                  <text x="424" y="84">SID</text>
                  <text x="448" y="84">=</text>
                  <text x="476" y="84">0x00</text>
                  <text x="24" y="100">RID</text>
                  <text x="48" y="100">=</text>
                  <text x="76" y="100">0x00</text>
                  <text x="424" y="100">RID</text>
                  <text x="448" y="100">=</text>
                  <text x="476" y="100">0x01</text>
                  <text x="8" y="116">}</text>
                  <text x="408" y="116">}</text>
                  <text x="232" y="148">Request</text>
                  <text x="276" y="148">#1</text>
                  <text x="32" y="164">Protect</text>
                  <text x="424" y="164">/temp</text>
                  <text x="20" y="180">with</text>
                  <text x="64" y="180">CTX_A</text>
                  <text x="140" y="180">OSCORE</text>
                  <text x="176" y="180">{</text>
                  <text x="136" y="196">...</text>
                  <text x="140" y="212">kid:</text>
                  <text x="180" y="212">0x01</text>
                  <text x="428" y="212">Verify</text>
                  <text x="120" y="228">}</text>
                  <text x="420" y="228">with</text>
                  <text x="464" y="228">CTX_A</text>
                  <text x="152" y="244">Encrypted</text>
                  <text x="224" y="244">Payload</text>
                  <text x="264" y="244">{</text>
                  <text x="136" y="260">...</text>
                  <text x="176" y="276">Recipient-ID:</text>
                  <text x="252" y="276">0x42</text>
                  <text x="136" y="292">...</text>
                  <text x="168" y="308">Application</text>
                  <text x="248" y="308">Payload</text>
                  <text x="120" y="324">}</text>
                  <text x="236" y="356">Response</text>
                  <text x="284" y="356">#1</text>
                  <text x="432" y="372">Protect</text>
                  <text x="140" y="388">OSCORE</text>
                  <text x="176" y="388">{</text>
                  <text x="420" y="388">with</text>
                  <text x="464" y="388">CTX_A</text>
                  <text x="136" y="404">...</text>
                  <text x="28" y="420">Verify</text>
                  <text x="120" y="420">}</text>
                  <text x="20" y="436">with</text>
                  <text x="64" y="436">CTX_A</text>
                  <text x="152" y="436">Encrypted</text>
                  <text x="224" y="436">Payload</text>
                  <text x="264" y="436">{</text>
                  <text x="136" y="452">...</text>
                  <text x="168" y="468">Application</text>
                  <text x="248" y="468">Payload</text>
                  <text x="120" y="484">}</text>
                  <text x="232" y="548">Request</text>
                  <text x="276" y="548">#2</text>
                  <text x="32" y="564">Protect</text>
                  <text x="424" y="564">/temp</text>
                  <text x="20" y="580">with</text>
                  <text x="64" y="580">CTX_A</text>
                  <text x="140" y="580">OSCORE</text>
                  <text x="176" y="580">{</text>
                  <text x="136" y="596">...</text>
                  <text x="140" y="612">kid:</text>
                  <text x="180" y="612">0x01</text>
                  <text x="428" y="612">Verify</text>
                  <text x="120" y="628">}</text>
                  <text x="420" y="628">with</text>
                  <text x="464" y="628">CTX_A</text>
                  <text x="152" y="644">Encrypted</text>
                  <text x="224" y="644">Payload</text>
                  <text x="264" y="644">{</text>
                  <text x="136" y="660">...</text>
                  <text x="176" y="676">Recipient-ID:</text>
                  <text x="252" y="676">0x42</text>
                  <text x="136" y="692">...</text>
                  <text x="168" y="708">Application</text>
                  <text x="248" y="708">Payload</text>
                  <text x="120" y="724">}</text>
                  <text x="236" y="756">Response</text>
                  <text x="284" y="756">#2</text>
                  <text x="432" y="772">Protect</text>
                  <text x="140" y="788">OSCORE</text>
                  <text x="176" y="788">{</text>
                  <text x="420" y="788">with</text>
                  <text x="464" y="788">CTX_A</text>
                  <text x="136" y="804">...</text>
                  <text x="28" y="820">Verify</text>
                  <text x="120" y="820">}</text>
                  <text x="20" y="836">with</text>
                  <text x="64" y="836">CTX_A</text>
                  <text x="152" y="836">Encrypted</text>
                  <text x="224" y="836">Payload</text>
                  <text x="264" y="836">{</text>
                  <text x="136" y="852">...</text>
                  <text x="168" y="868">Application</text>
                  <text x="248" y="868">Payload</text>
                  <text x="120" y="884">}</text>
                  <text x="232" y="932">Request</text>
                  <text x="276" y="932">#3</text>
                  <text x="32" y="948">Protect</text>
                  <text x="424" y="948">/temp</text>
                  <text x="20" y="964">with</text>
                  <text x="64" y="964">CTX_A</text>
                  <text x="140" y="964">OSCORE</text>
                  <text x="176" y="964">{</text>
                  <text x="136" y="980">...</text>
                  <text x="140" y="996">kid:</text>
                  <text x="180" y="996">0x01</text>
                  <text x="428" y="996">Verify</text>
                  <text x="120" y="1012">}</text>
                  <text x="420" y="1012">with</text>
                  <text x="464" y="1012">CTX_A</text>
                  <text x="152" y="1028">Encrypted</text>
                  <text x="224" y="1028">Payload</text>
                  <text x="264" y="1028">{</text>
                  <text x="136" y="1044">...</text>
                  <text x="176" y="1060">Recipient-ID:</text>
                  <text x="252" y="1060">0x42</text>
                  <text x="136" y="1076">...</text>
                  <text x="168" y="1092">Application</text>
                  <text x="248" y="1092">Payload</text>
                  <text x="120" y="1108">}</text>
                  <text x="236" y="1140">Response</text>
                  <text x="284" y="1140">#3</text>
                  <text x="432" y="1156">Protect</text>
                  <text x="140" y="1172">OSCORE</text>
                  <text x="176" y="1172">{</text>
                  <text x="420" y="1172">with</text>
                  <text x="464" y="1172">CTX_A</text>
                  <text x="136" y="1188">...</text>
                  <text x="28" y="1204">Verify</text>
                  <text x="120" y="1204">}</text>
                  <text x="20" y="1220">with</text>
                  <text x="64" y="1220">CTX_A</text>
                  <text x="152" y="1220">Encrypted</text>
                  <text x="224" y="1220">Payload</text>
                  <text x="264" y="1220">{</text>
                  <text x="136" y="1236">...</text>
                  <text x="168" y="1252">Application</text>
                  <text x="248" y="1252">Payload</text>
                  <text x="120" y="1268">}</text>
                  <text x="32" y="1300">ENDING_</text>
                  <text x="24" y="1316">TIMER</text>
                  <text x="32" y="1332">expired</text>
                  <text x="232" y="1364">Request</text>
                  <text x="276" y="1364">#4</text>
                  <text x="32" y="1380">Protect</text>
                  <text x="424" y="1380">/temp</text>
                  <text x="20" y="1396">with</text>
                  <text x="64" y="1396">CTX_A</text>
                  <text x="140" y="1396">OSCORE</text>
                  <text x="176" y="1396">{</text>
                  <text x="136" y="1412">...</text>
                  <text x="140" y="1428">kid:</text>
                  <text x="180" y="1428">0x01</text>
                  <text x="428" y="1428">Verify</text>
                  <text x="120" y="1444">}</text>
                  <text x="420" y="1444">with</text>
                  <text x="464" y="1444">CTX_A</text>
                  <text x="152" y="1460">Encrypted</text>
                  <text x="224" y="1460">Payload</text>
                  <text x="264" y="1460">{</text>
                  <text x="136" y="1476">...</text>
                  <text x="168" y="1492">Application</text>
                  <text x="248" y="1492">Payload</text>
                  <text x="120" y="1508">}</text>
                  <text x="236" y="1572">Response</text>
                  <text x="284" y="1572">#4</text>
                  <text x="432" y="1588">Protect</text>
                  <text x="140" y="1604">OSCORE</text>
                  <text x="176" y="1604">{</text>
                  <text x="420" y="1604">with</text>
                  <text x="464" y="1604">CTX_A</text>
                  <text x="136" y="1620">...</text>
                  <text x="28" y="1636">Verify</text>
                  <text x="120" y="1636">}</text>
                  <text x="20" y="1652">with</text>
                  <text x="64" y="1652">CTX_A</text>
                  <text x="152" y="1652">Encrypted</text>
                  <text x="224" y="1652">Payload</text>
                  <text x="264" y="1652">{</text>
                  <text x="136" y="1668">...</text>
                  <text x="168" y="1684">Application</text>
                  <text x="248" y="1684">Payload</text>
                  <text x="120" y="1700">}</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
          Client                             Server
            |                                   |
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 {               |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
            |                                   |
            |                                   |
            |            Request #2             |
Protect     |---------------------------------->| /temp
with CTX_A  | OSCORE {                          |
            |  ...                              |
            |  kid: 0x01                        | Verify
            | }                                 | with CTX_A
            | Encrypted Payload {               |
            |  ...                              |
            |  Recipient-ID: 0x42               |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
            |            Response #2            |
            |<----------------------------------| Protect
            | OSCORE {                          | with CTX_A
            |  ...                              |
Verify      | }                                 |
with CTX_A  | Encrypted Payload {               |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
            |                                   |
            |            Request #3             |
Protect     |---------------------------------->| /temp
with CTX_A  | OSCORE {                          |
            |  ...                              |
            |  kid: 0x01                        | Verify
            | }                                 | with CTX_A
            | Encrypted Payload {               |
            |  ...                              |
            |  Recipient-ID: 0x42               |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
            |            Response #3            |
            |<----------------------------------| Protect
            | OSCORE {                          | with CTX_A
            |  ...                              |
Verify      | }                                 |
with CTX_A  | Encrypted Payload {               |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
ENDING_     |                                   |
TIMER       |                                   |
expired     |                                   |
            |                                   |
            |            Request #4             |
Protect     |---------------------------------->| /temp
with CTX_A  | OSCORE {                          |
            |  ...                              |
            |  kid: 0x01                        | Verify
            | }                                 | with CTX_A
            | Encrypted Payload {               |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
            |                                   |
            |                                   |
            |            Response #4            |
            |<----------------------------------| Protect
            | OSCORE {                          | with CTX_A
            |  ...                              |
Verify      | }                                 |
with CTX_A  | Encrypted Payload {               |
            |  ...                              |
            |  Application Payload              |
            | }                                 |
            |                                   |
]]></artwork>
          </artset>
        </figure>
      </section>
    </section>
    <section anchor="sec-document-updates" removeInRFC="true">
      <name>Document Updates</name>
      <section anchor="sec-06-07">
        <name>Version -06 to -07</name>
        <ul spacing="normal">
          <li>
            <t>Refinements and fixes.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-05-06">
        <name>Version -05 to -06</name>
        <ul spacing="normal">
          <li>
            <t>Consider alternatives to timers.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-04-05">
        <name>Version -04 to -05</name>
        <ul spacing="normal">
          <li>
            <t>Editorial updates.</t>
          </li>
          <li>
            <t>Add additional message flow examples, including a failure case.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-03-04">
        <name>Version -03 to -04</name>
        <ul spacing="normal">
          <li>
            <t>Fixes in presenting the new approach.</t>
          </li>
          <li>
            <t>Early recommendations for initial values of timers.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-02-03">
        <name>Version -02 to -03</name>
        <ul spacing="normal">
          <li>
            <t>Editorial improvements.</t>
          </li>
          <li>
            <t>Improved security considerations.</t>
          </li>
          <li>
            <t>Using the ID update procedure ahead of network migration and switching to new IDs after migration.</t>
          </li>
          <li>
            <t>Update design more in line with KUDOS.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-01-02">
        <name>Version -01 to -02</name>
        <ul spacing="normal">
          <li>
            <t>Split long section into subsections.</t>
          </li>
          <li>
            <t>Updated references.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-00-01">
        <name>Version -00 to -01</name>
        <ul spacing="normal">
          <li>
            <t>Revised and extended error handling.</t>
          </li>
          <li>
            <t>Specify that the Recipient-ID option may need to be empty.</t>
          </li>
          <li>
            <t>Failure cases when running the ID update procedure integrated with KUDOS.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-00">
        <name>Version -00</name>
        <ul spacing="normal">
          <li>
            <t>Split out material from Key Update for OSCORE draft into this new document.</t>
          </li>
          <li>
            <t>Extended terminology.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgment">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank <contact fullname="Christian Amsüss"/>, <contact fullname="Carsten Bormann"/>, <contact fullname="John Preuß Mattsson"/>, and <contact fullname="Göran Selander"/> for their feedback and comments.</t>
      <t>The work on this document has been partly supported by VINNOVA and the Celtic-Next projects CRITISEC and CYPRESS; and by the H2020 projects SIFIS-Home (Grant agreement 952652) and ARCADIAN-IoT (Grant agreement 101020259).</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
