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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-key-update-07"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="I-D.ietf-lake-edhoc" target="https://datatracker.ietf.org/doc/html/draft-ietf-lake-edhoc-23">
          <front>
            <title>Ephemeral Diffie-Hellman Over COSE (EDHOC)</title>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="22" month="January" 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
   OSCORE security context.  By reusing COSE for cryptography, CBOR for
   encoding, and CoAP for transport, the additional code size can be
   kept very low.

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

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

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

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

                        |                      |
                        |      Response #2     |
                        |<---------------------| Protect with CTX_NEW
                        | OSCORE {             |
                        |  ...                 |
Verify with CTX_NEW     | }                    |
                        | Encrypted Payload {  |
Discard CTX_OLD         |  ...                 |
                        |  Application Payload |
                        | }                    |
                        |                      |
                        |      Request #3      |
Protect with CTX_NEW    |--------------------->| /temp
                        | OSCORE {             |
                        |  ...                 |
                        |  kid: 0x78           | Verify with CTX_NEW
                        | }                    |
                        | Encrypted Payload {  |
                        |  ...                 |
                        |  Application Payload |
                        | }                    |
                        |                      |
                        |      Response #3     |
                        |<---------------------| Protect with CTX_NEW
                        | OSCORE {             |
                        |  ...                 |
Verify with CTX_NEW     | }                    |
                        | Encrypted Payload {  |
                        |  ...                 |
                        |  Application Payload |
                        | }                    |
                        |                      |
]]></artwork>
          </artset>
        </figure>
      </section>
    </section>
    <section anchor="sec-document-updates" removeInRFC="true">
      <name>Document Updates</name>
      <section anchor="sec-00">
        <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 project CRITISEC; 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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
eKDTsdoUVZMFxTuTAUHy9NG4S86DjPykkOgarEEM0mPcVm5f09thMAlkiol8
S0p+btgW9NcIxb1S1yK/y1za47FJcBjoUBH6MTiWMtpghIaO/Jkd/oJrLiWr
I3Nwt7AgeJSG0IHMYopMTk5J9KRTgN0kxDkOWjl5ThobpBvhf0orUCH4VO+b
F3LmzGu4OVCKKpYiC2f5fIgJfx9MZhO9Cgr7OeiLGTTlJg1+ab8UJbMRuu1c
fK6rExjgdanvZIydMIKBQgXb4GCwj2LcM09oUenxIBzFMN/xRBN3Ix4q9WNA
OxdeyNOUHVA3tM9pZ0kaVyaalFyTzdyMaOsJVLHeiHujTJeXGPG4edRiD63T
kfrT2l3Oy3d3tEudymg69TU/ONgt5SqQPWMi1qXQTNfSm9rRqHBw+uw4shlo
XXaq0rxO4LfcnSjHunUqWI4HCH6eqW7QHNIB8D7iAg0Xi4sg6l3M/DjtKbgB
IWb7ys0cWQA56DHNojm7FTYM1oC3MnFsS/JotYng6BrGeXo5chWXXIamn1My
tnWbdbNOG7UtnMBgx31+W9fAfaeDcaUBu2nfgqkWHSKV5+zJ+yebLVvaFk86
RGDyc9vWpsVm5y7/TYvWd/fATW2LE+XRPNostHirIof0V2/uz59u2WMMTnaI
USViYSSdSLEAbP1+f8HZXAT+rly8uhbsB4ojFRre1b3vvGOnU2h8EHnJ9RSZ
861yvIqTXMLMXN2AU9zZWv4Yg6lJ6jNTaWzRAm3LpVDlHedJtNDij/NJ9JYp
mi6M1YJG68mgDcIl8ekWbdCXZ6LfhNS+ebb8MR4IqSFiXyysKF64igKws6Ci
2NmyigLYeEFF8c2zB6MotgotPlhRvPjUiqJE2s47H64oXvwWiuKBcFZtCyvE
txpafCohXlyijyzEX/yzkcG+SvJo30LpugVaLA5VbQsj2rYLLVaija1E231b
MMUF92hZaWjOb9dG/G43tFiJ30WhKrR4IKRatUdQGbzTuwQHbWNTcg2rQokN
Gwov5JmqOT1TLrLaX9Np/jIOjVGkDZl17mQY6SR8+/5G0zlXqWCotY38Ucxg
HQM3G+UoIMVz8MtNcxKz9QEMZxImjtwymx29A70D4nQzTcSUy5OutNWid6IB
opHIVJY9d+gP3o1niUdHBC2++ioTQDZWmwiFI/LuPjMhTEbgLTBfyGmUwZYB
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
sgm9bj39dqPf+X9ynee2Jb0AAA==

-->

</rfc>
