<?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.31 (Ruby 2.7.0) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-oscore-id-update-06" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="Identifier Update for OSCORE">Identifier Update for OSCORE</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-id-update-06"/>
    <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="March" day="02"/>
    <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 to track them 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 message 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>
          <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) a 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.
- The offered Recipient ID must be discarded and added to the list of IDs to prevent reuse.</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 to 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 IDs procedure as failed.</t>
        <t>When the OSCORE ID update procedure is integrated into the execution of the KUDOS procedure, it is possible that the KUDOS procedure succeeds while the OSCORE ID update procedure fails. In such case, the peers continue their communications using the newly derived OSCORE Security Context CTX_NEW obtained from the KUDOS procedure, and still use the old Sender and Recipient IDs. That is, any Recipient IDs conveyed in the exchanged Recipient-ID Options is not considered.</t>
        <t>Conversely, the OSCORE ID update procedure may succeed while the KUDOS procedure fails. As long as the peers have exchanged a pair of OSCORE-protected request and response that conveyed their desired new Recipient IDs in the Recipient-ID Option, the peers start using those IDs in their communications.</t>
      </section>
      <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_A 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="20" month="October" year="2025"/>
            <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-12"/>
        </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 439?>

<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 client including the Recipient-ID option, but does not receive acknowledgments in the form of responses containing the Response-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-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>
