<?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.29 (Ruby 2.7.0) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-oscore-id-update-05" 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-05"/>
    <author initials="R." surname="Höglund" fullname="Rikard Höglund">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>rikard.hoglund@ri.se</email>
      </address>
    </author>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <date year="2025" month="October" day="20"/>
    <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>
          <ul spacing="normal">
            <li>
              <t>The offered Recipient ID must be discarded and added to the list of IDs to prevent reuse.</t>
            </li>
          </ul>
        </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="7" month="July" 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-11"/>
        </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 436?>

<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-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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
ohAzV6/Eat/+bql4PvNLroT7Rt7LvJbVUYlgXKlMaaUuqcvM6darNuOqutbK
zSzYi3q5mejlX7LczPLt+zXqzVyyLohbpI0u7J2z5EtzFySRP9hOmt2mOr3K
EqqLTyoPcDG3C9fWA1u6OHIVHMQaYfZmHWfWtmWRLZzY/QJz4ae2CzzGoAWV
bc9LNmZT9WaV1r+Bqjelb2ukqJVHWj9FbWn6Sa3F0gy195B/sn4ezfrrWJpG
86GTxTb1ZzaljtYY42Nvsakms3Cojyg7d1OFadUWm/ozm9TxNcb4dVtsKtYs
HOojYri/qTIic1ts6s9smOEaY2xabCrWLBlqw6J/JQzd1J/ZCKD5Y1QKh60g
gCqFw1YYo1I47CMhpMU1biKvynupcVP2lSwoclO/uPSXvsIguvx0wVUGP8vr
9p6uNFjNFediTSJvDMZ4zC8OQt5y6wS30Z8lvztFzJraJppfyeOlvb8X42mn
Y5dTWk8DKl1a7VKJGaYUzt8beW+VvbjXByLSMnyNmfJemHI5Hr6kRvUphoxu
17H75cLfyzVDFlVlyWxRD0y+9ME49l5NIUv32/tL+MhzBit22zHjimn+obKz
leIoHEsVz5Ni5qYYsQR94000xkb6AqR8bAAiQuXm5uge0YUJYbDrNvHXoqsN
hSvdC8iEzDm21ejQjUNwlda/AYfg5gQgPq4TwO/VN7RxQ/6eqjp+0BYbF+HC
oTbM8INTwcbht2GG79Ri44xbONSGtX1wnN64735PrI3tEz+s0YItRuuMwfaj
da6PKH37eS02rrWFQ31ghvuRUMEHbbFxV/2eUG3l6xKcE2V9lxI2RAM3F41+
9zsU7oknLo3Uli/yuaYuv9TO29zBWnI1zq6UTvNBj31TgBYGod3aOUAjdmvn
IWdwYgc7B/D1DtPKOM8O08FtX1QwpdPvx4XPnFNngNVFXUZbM3IXSOHA1ZPG
ZliF8fd5/INo/H34SuM/1W8UOQyoVlFahHTla1+8gaZ0THex+/zgqAqHzRpn
D4txVT2pdFFpGns8jf1oGnvwtQIGPcbcPUWODC4eww/680py0EuvfKnMmcnb
rtxovTAmVZUC3OiNbFkpXDhVe6B85bj87gPnVewrA7jCRRcAcgnmkhN6Ue2o
6rJ3edl70bJ34Sst+wKIshBJBkMbW5tBp1hiY9q13000MFalsXmyNeDu8Ci7
0Sg78JVGOVdXGtPkca1YjYWyu1WeU9WstI/U0ubZYKryTfCZzfBAUfZ9qjjP
GGvMjidULPWB98UiBhqmPlcsbN6+RJW4SvB7II4SmUfFXmjm81CkAocIABGM
sSaPvwWAHFxfqxu3oYjFlqP0c9h43gRKPEV0iGq1AKY6APIFDVmSDXn9c1H4
nuhU/HM4w7LPDjkIJ46r/pdbA5kYtXXHvkQsfZnlhgtI5FhtBKstvBa3t7dH
o1wboL1UdMbmp/8x5g6z7fAHmRuYpniM3rE0dY//PRulWK1t+tN/iReyKIzJ
+DeuYXP71U//zCWWzEskemDhJ1fkR+diAJtOxVHxZeYChfN3ElGRG7WafU8l
KzGVFiv8uypp6MX+5uT09Oybjs9KPFJJoXstvDQBMeTvdNfD0fnJ5cnF8RG9
dfTdy/Pjiwsucmj94M/2dvZ2wvsXJ09PLlrPsrES97/Ksf6rHOaKdkJ88XDv
s4d7fOlM5/yo8+Skc9o6yS7rb+7u7EKvew+/2G43/g+zXiA3H7sAAA==

-->

</rfc>
