<?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-key-update-05" category="std" consensus="true" submissionType="IETF" updates="8613" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.4 -->
  <front>
    <title abbrev="Key Update for OSCORE (KUDOS)">Key Update for OSCORE (KUDOS)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-key-update-05"/>
    <author initials="R." surname="Höglund" fullname="Rikard Höglund">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>rikard.hoglund@ri.se</email>
      </address>
    </author>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <date year="2023" month="July" day="10"/>
    <area>Internet</area>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <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>
    <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-key-update"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>Object Security for Constrained RESTful Environments (OSCORE) <xref target="RFC8613"/> provides end-to-end protection of CoAP <xref target="RFC7252"/> messages at the application-layer, ensuring message confidentiality and integrity, replay protection, as well as binding of response to request between a sender and a recipient.</t>
      <t>To ensure secure communication when using OSCORE, peers may need to update their shared keying material. Among other reasons, approaching key usage limits <xref target="I-D.irtf-cfrg-aead-limits"/><xref target="I-D.ietf-core-oscore-key-limits"/> requires updating the OSCORE keying material before communications can securely continue.</t>
      <t>This document updates <xref target="RFC8613"/> as follows.</t>
      <ul spacing="normal">
        <li>It specifies KUDOS, a lightweight key update procedure that the two peers can use in order to update their current keying material and establish a new OSCORE Security Context. This deprecates and replaces the procedure specified in <xref section="B.2" sectionFormat="of" target="RFC8613"/>.</li>
        <li>With reference to the "OSCORE Flag Bits" registry defined in <xref section="13.7" sectionFormat="of" target="RFC8613"/> as part of the "Constrained RESTful Environments (CoRE) Parameters" registry group, it updates the entries with Bit Position 0 and 1 (see <xref target="sec-iana"/>), both originally marked as "Reserved". That is, it defines and registers the usage of the OSCORE flag bit with Bit Position 0, as the one intended to expand the space for the OSCORE flag bits in the OSCORE Option (see <xref target="ssec-oscore-option-extensions"/>). Also, it marks the bit with Bit Position of 1 as "Unassigned".</li>
        <li>It updates the protection of CoAP responses with OSCORE originally specified in <xref section="8.3" sectionFormat="of" target="RFC8613"/>, as defined in <xref target="sec-updated-response-protection"/> of this document.</li>
      </ul>
      <t>Furthermore, this document specifies a method that two peers can use to update their OSCORE identifiers. This can be run as a stand-alone procedure, or instead integrated in a KUDOS execution.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" 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 EDHOC <xref target="I-D.ietf-lake-edhoc"/>.</t>
        <t>This document additionally defines the following terminology.</t>
        <ul spacing="normal">
          <li>Initiator: the peer starting the KUDOS execution, by sending the first KUDOS message.</li>
          <li>Responder: the peer that receives the first KUDOS message in a KUDOS execution.</li>
          <li>Forward message flow: the KUDOS execution workflow where the initiator acts as CoAP client (see <xref target="ssec-derive-ctx-client-init"/>).</li>
          <li>Reverse message flow: the KUDOS execution workflow where the initiator acts as CoAP server (see <xref target="ssec-derive-ctx-server-init"/>).</li>
          <li>FS mode: the KUDOS execution mode that achieves forward secrecy (see <xref target="ssec-derive-ctx"/>).</li>
          <li>No-FS mode: the KUDOS execution mode that does not achieve forward secrecy (see <xref target="no-fs-mode"/>).</li>
        </ul>
      </section>
    </section>
    <section anchor="sec-current-methods">
      <name>Current Methods for Rekeying OSCORE</name>
      <t>Two peers communicating using OSCORE may choose to renew their shared keying information by establishing a new OSCORE Security Context for a variety of reasons. A particular reason is approaching limits set for safe key usage <xref target="I-D.ietf-core-oscore-key-limits"/>. Practically, when the relevant limits have been reached for an OSCORE Security Context, the two peers have to establish a new OSCORE Security Context, in order to continue using OSCORE for secure communication. That is, the two peers have to establish new Sender and Recipient Keys, as the keys actually used by the AEAD algorithm.</t>
      <t>In addition to approaching the key usage limits, there may be other reasons for a peer to initiate a key update procedure. These include: the OSCORE Security Context approaching its expiration time; application policies prescribing a regular key rollover; approaching the exhaustion of the Sender Sequence Number space in the OSCORE Sender Context.</t>
      <t>It is RECOMMENDED that the peer initiating the key update procedure starts it with some margin, i.e., well before actually experiencing the trigger event forcing to perform a key update, e.g., the OSCORE Security Context expiration or the exhaustion of the Sender Sequence Number space. If the rekeying is not initiated ahead of these events, it may become practically impossible to perform a key update with certain methods.</t>
      <t>Other specifications define a number of ways for rekeying OSCORE, as summarized below.</t>
      <ul spacing="normal">
        <li>
          <t>The two peers can run the procedure defined in <xref section="B.2" sectionFormat="of" target="RFC8613"/>. That is, the two peers exchange three or four messages, protected with temporary Security Contexts adding randomness to the ID Context.  </t>
          <t>
As a result, the two peers establish a new OSCORE Security Context with new ID Context, Sender Key and Recipient Key, while keeping the same OSCORE Master Secret and OSCORE Master Salt from the old OSCORE Security Context.  </t>
          <t>
This procedure does not require any additional components to what OSCORE already provides, and it does not provide forward secrecy.  </t>
          <t>
The procedure defined in <xref section="B.2" sectionFormat="of" target="RFC8613"/> is used in 6TiSCH networks <xref target="RFC7554"/><xref target="RFC8180"/> when handling failure events. That is, a node acting as Join Registrar/Coordinator (JRC) assists new devices, namely "pledges", to securely join the network as per the Constrained Join Protocol <xref target="RFC9031"/>. In particular, a pledge exchanges OSCORE-protected messages with the JRC, from which it obtains a short identifier, link-layer keying material and other configuration parameters. As per <xref section="8.3.3" sectionFormat="of" target="RFC9031"/>, a JRC that experiences a failure event may likely lose information about joined nodes, including their assigned identifiers. Then, the reinitialized JRC can establish a new OSCORE Security Context with each pledge, through the procedure defined in <xref section="B.2" sectionFormat="of" target="RFC8613"/>.</t>
        </li>
        <li>
          <t>The two peers can run the OSCORE profile <xref target="RFC9203"/> of the Authentication and Authorization for Constrained Environments (ACE) Framework <xref target="RFC9200"/>.  </t>
          <t>
When a CoAP client uploads an Access Token to a CoAP server as an access credential, the two peers also exchange two nonces. Then, the two peers use the two nonces together with information provided by the ACE Authorization Server that issued the Access Token, in order to derive an OSCORE Security Context.  </t>
          <t>
This procedure does not provide forward secrecy.</t>
        </li>
        <li>
          <t>The two peers can run the EDHOC key exchange protocol based on Diffie-Hellman and defined in <xref target="I-D.ietf-lake-edhoc"/>, in order to establish a pseudo-random key in a mutually authenticated way.  </t>
          <t>
Then, the two peers can use the established pseudo-random key to derive external application keys. This allows the two peers to securely derive an OSCORE Master Secret and an OSCORE Master Salt, from which an OSCORE Security Context can be established.  </t>
          <t>
This procedure additionally provides forward secrecy.  </t>
          <t>
EDHOC also specifies an optional function, EDHOC_KeyUpdate, to perform a key update in a more efficient way than re-running EDHOC. The two communicating peers call EDHOC_KeyUpdate with equivalent input, which results in derivation of a new shared pseudo-random key. Usage of EDHOC_KeyUpdate preserves forward secrecy.</t>
        </li>
        <li>
          <t>If one peer is acting as LwM2M Client and the other peer as LwM2M Server, according to the OMA Lightweight Machine to Machine Core specification <xref target="LwM2M"/>, then the LwM2M Client peer may take the initiative to bootstrap again with the LwM2M Bootstrap Server, and receive again an OSCORE Security Context. Alternatively, the LwM2M Server can instruct the LwM2M Client to initiate this procedure.  </t>
          <t>
If the OSCORE Security Context information on the LwM2M Bootstrap Server has been updated, the LwM2M Client will thus receive a fresh OSCORE Security Context to use with the LwM2M Server.  </t>
          <t>
In addition to that, the LwM2M Client, the LwM2M Server as well as the LwM2M Bootstrap server are required to use the procedure defined in <xref section="B.2" sectionFormat="of" target="RFC8613"/> and overviewed above, when they use a certain OSCORE Security Context for the first time <xref target="LwM2M-Transport"/>.</t>
        </li>
      </ul>
      <t>Manually updating the OSCORE Security Context at the two peers should be a last resort option, and it might often be not practical or feasible.</t>
      <t>Even when any of the alternatives mentioned above is available, it is RECOMMENDED that two OSCORE peers update their Security Context by using the KUDOS procedure as defined in <xref target="sec-rekeying-method"/> of this document.</t>
    </section>
    <section anchor="sec-updated-response-protection">
      <name>Updated Protection of Responses with OSCORE</name>
      <t>The protection of CoAP responses with OSCORE is updated, by adding the following text at the end of step 3 of <xref section="8.3" sectionFormat="of" target="RFC8613"/>.</t>
      <blockquote>
        <t>If the server is using a different Security Context for the response compared to what was used to verify the request (e.g., due to an occurred key update), then the server MUST take the second alternative. That is, the server MUST include its Sender Sequence Number as Partial IV in the response and use it to build the AEAD nonce to protect the response.</t>
        <t>This prevents the server from using the same AEAD (key, nonce) pair for two responses, protected with different OSCORE Security Contexts. An exception is the procedure in <xref section="B.2" sectionFormat="of" target="RFC8613"/>, which is secure although not complying with the above.</t>
      </blockquote>
    </section>
    <section anchor="sec-rekeying-method">
      <name>Key Update for OSCORE (KUDOS)</name>
      <t>This section defines KUDOS, a lightweight procedure that two OSCORE peers can use to update their keying material and establish a new OSCORE Security Context.</t>
      <t>KUDOS relies on the OSCORE Option defined in <xref target="RFC8613"/> and extended as defined in <xref target="ssec-oscore-option-extensions"/>, as well as on the support function updateCtx() defined in <xref target="ssec-update-function"/>.</t>
      <t>In order to run KUDOS, two peers perform a message exchange of OSCORE-protected CoAP messages. This message exchange between the two peers is defined in <xref target="ssec-derive-ctx"/>, with particular reference to the stateful FS mode providing forward secrecy. Building on the same message exchange, the possible use of the stateless no-FS mode is defined in <xref target="no-fs-mode"/>, as intended to peers that are not able to write in non-volatile memory. Two peers MUST run KUDOS in FS mode if they are both capable to.</t>
      <t>The key update procedure has the following properties.</t>
      <ul spacing="normal">
        <li>KUDOS can be initiated by either peer. In particular, the CoAP client or the CoAP server may start KUDOS by sending the first rekeying message.</li>
        <li>The new OSCORE Security Context enjoys forward secrecy, unless KUDOS is run in no-FS mode (see <xref target="no-fs-mode"/>).</li>
        <li>The same ID Context value used in the old OSCORE Security Context is preserved in the new Security Context. Furthermore, the ID Context value never changes throughout the KUDOS execution.</li>
        <li>KUDOS is robust against a peer rebooting, and it especially avoids the reuse of AEAD (nonce, key) pairs.</li>
        <li>KUDOS completes in one round trip. The two peers achieve mutual key confirmation in the following exchange, which is protected with the newly established OSCORE Security Context.</li>
      </ul>
      <section anchor="ssec-oscore-option-extensions">
        <name>Extensions to the OSCORE Option</name>
        <t>In order to support the message exchange for establishing a new OSCORE Security Context, this document extends the use of the OSCORE Option originally defined in <xref target="RFC8613"/> as follows.</t>
        <ul spacing="normal">
          <li>
            <t>This document defines the usage of the eight least significant bit, called "Extension-1 Flag", in the first byte of the OSCORE Option containing the OSCORE flag bits. This flag bit is specified in <xref target="iana-cons-flag-bits"/>.  </t>
            <t>
When the Extension-1 Flag is set to 1, the second byte of the OSCORE Option MUST include the OSCORE flag bits 8-15.</t>
          </li>
          <li>
            <t>This document defines the usage of the least significant bit "Nonce Flag", 'd', in the second byte of the OSCORE Option containing the OSCORE flag bits 8-15. This flag bit is specified in <xref target="iana-cons-flag-bits"/>.  </t>
            <t>
When it is set to 1, the compressed COSE object contains a 'nonce', to be used for the steps defined in <xref target="ssec-derive-ctx"/>. The 1 byte 'x' following 'kid context' (if any) encodes the size of 'nonce', together with signaling bits that indicate the specific behavior to adopt during the KUDOS execution. Specifically, the encoding of 'x' is as follows:  </t>
            <ul spacing="normal">
              <li>The four least significant bits encode the 'nonce' size in bytes minus 1, namely 'm'.</li>
              <li>The fifth least significant bit is the "No Forward Secrecy" 'p' bit. The sender peer indicates its wish to run KUDOS in FS mode or in no-FS mode, by setting the 'p' bit to 0 or 1, respectively. This makes KUDOS possible to run also for peers that cannot support the FS mode. At the same time, two peers MUST run KUDOS in FS mode if they are both capable to, as per <xref target="ssec-derive-ctx"/>. The execution of KUDOS in no-FS mode is defined in <xref target="no-fs-mode"/>.</li>
              <li>The sixth least significant bit is the "Preserve Observations" 'b' bit. The sender peer indicates its wish to preserve ongoing observations beyond the KUDOS execution or not, by setting the 'b' bit to 1 or 0, respectively. The related processing is defined in <xref target="preserving-observe"/>.</li>
              <li>The seventh and eight least significant bits are reserved for future use. These bits SHALL be set to zero when not in use. According to this specification, if any of these bits are set to 1, the message is considered to be malformed and decompression fails as specified in item 2 of <xref section="8.2" sectionFormat="of" target="RFC8613"/>.</li>
            </ul>
            <t>
Hereafter, this document refers to a message where the 'd' flag is set to 0 as "non KUDOS (request/response) message", and to a message where the 'd' flag is set to 1 as "KUDOS (request/response) message".</t>
          </li>
          <li>The second-to-eighth least significant bits in the second byte of the OSCORE Option containing the OSCORE flag bits are reserved for future use. These bits SHALL be set to zero when not in use. According to this specification, if any of these bits are set to 1, the message is considered to be malformed and decompression fails as specified in item 2 of <xref section="8.2" sectionFormat="of" target="RFC8613"/>.</li>
        </ul>
        <t><xref target="fig-oscore-option"/> shows the OSCORE Option value including also 'nonce'.</t>
        <figure anchor="fig-oscore-option">
          <name>The OSCORE Option value, including 'nonce'</name>
          <artwork align="center"><![CDATA[
 0 1 2 3 4 5 6 7  8   9   10  11  12  13  14  15 <----- n bytes ----->
+-+-+-+-+-+-+-+-+---+---+---+---+---+---+---+---+---------------------+
|1|0|0|h|k|  n  | 0 | 0 | 0 | 0 | 0 | 0 | 0 | d | Partial IV (if any) |
+-+-+-+-+-+-+-+-+---+---+---+---+---+---+---+---+---------------------+


 <- 1 byte -> <----- s bytes ------> <- 1 byte -> <--- m + 1 bytes --->
+------------+----------------------+---------------------------------+
| s (if any) | kid context (if any) | x (if any) | nonce (if any)     |
+------------+----------------------+------------+--------------------+
                                   /              \____
                                  /                    |
                                 /   0 1 2 3 4 5 6 7   |
+------------------+             |  +-+-+-+-+-+-+-+-+  |
| kid (if any) ... |             |  |0|0|b|p|   m   |  |
+------------------+             |  +-+-+-+-+-+-+-+-+  |
]]></artwork>
        </figure>
      </section>
      <section anchor="ssec-update-function">
        <name>Function for Security Context Update</name>
        <t>The updateCtx() function shown in <xref target="function-update"/> takes as input three parameters X, N and CTX_IN. In particular, X and N are built from the 'x' and 'nonce' fields transported in the OSCORE Option value of the exchanged KUDOS messages (see <xref target="ssec-derive-ctx-client-init"/>), while CTX_IN is the OSCORE Security Context to update. The function returns a new OSCORE Security Context CTX_OUT.</t>
        <t>As a first step, the updateCtx() function builds the two CBOR byte strings X_cbor and N_cbor, with value the input parameter X and N, respectively. Then, it builds X_N, as the byte concatenation of X_cbor and N_cbor.</t>
        <t>After that, the updateCtx() function derives the new values of the Master Secret and Master Salt for CTX_OUT. In particular, the new Master Secret is derived through a KUDOS-Expand() step, which takes as input the Master Secret value from the Security Context CTX_IN, the literal string "key update", X_N and the length of the Master Secret. Instead, the new Master Salt takes N as value.</t>
        <t>The definition of KUDOS-Expand depends on the key derivation function used for OSCORE by the two peers, as specified in CTX_IN.</t>
        <t>If the key derivation function is an HKDF Algorithm (see <xref section="3.1" sectionFormat="of" target="RFC8613"/>), then KUDOS-Expand is mapped to HKDF-Expand <xref target="RFC5869"/>, as shown below. Also, the hash algorithm is the same one used by the HKDF Algorithm specified in CTX_IN.</t>
        <artwork><![CDATA[
     KUDOS-Expand(CTX_IN.MasterSecret, ExpandLabel, oscore_key_length) =
        HKDF-Expand(CTX_IN.MasterSecret, ExpandLabel, oscore_key_length)
]]></artwork>
        <t>If a future specification updates <xref target="RFC8613"/> by admitting different key derivation functions than HKDF Algorithms (e.g., KMAC as based on the SHAKE128 or SHAKE256 hash functions), that specification has to update also the present document in order to define the mapping between such key derivation functions and KUDOS-Expand.</t>
        <t>When an HKDF Algorithm is used, the derivation of new values follows the same approach used in TLS 1.3, which is also based on HKDF-Expand (see <xref section="7.1" sectionFormat="of" target="RFC8446"/>) and used for computing new keying material in case of key update (see <xref section="4.6.3" sectionFormat="of" target="RFC8446"/>).</t>
        <t>After that, the new Master Secret and Master Salt parameters are used to derive a new Security Context CTX_OUT as per <xref section="3.2" sectionFormat="of" target="RFC8613"/>. Any other parameter required for the derivation takes the same value as in the Security Context CTX_IN. Finally, the function returns the newly derived Security Context CTX_OUT.</t>
        <t>Since the updateCtx() function also takes X as input, the derivation of CTX_OUT also considers as input the information from the 'x' field transported in the OSCORE Option value of the exchanged KUDOS messages. In turn, this ensures that, if successfully completed, a KUDOS execution occurs as intended by the two peers.</t>
        <figure anchor="function-update">
          <name>Function for deriving a new OSCORE Security Context</name>
          <artwork align="center"><![CDATA[
updateCtx(X, N, CTX_IN) {

  CTX_OUT       // The new Security Context
  MSECRET_NEW   // The new Master Secret
  MSALT_NEW     // The new Master Salt

  X_cbor = bstr .cbor X // CBOR bstr wrapping of X
  N_cbor = bstr .cbor N // CBOR bstr wrapping of N

  X_N = X_cbor | N_cbor

  oscore_key_length = < Size of CTX_IN.MasterSecret in bytes >

  Label = "key update"

  MSECRET_NEW = KUDOS-Expand-Label(CTX_IN.MasterSecret, Label,
                                   X_N, oscore_key_length)
               = KUDOS-Expand(CTX_IN.MasterSecret, ExpandLabel,
                             oscore_key_length)

  MSALT_NEW = N;

  < Derive CTX_OUT using MSECRET_NEW and MSALT_NEW,
    together with other parameters from CTX_IN >

  Return CTX_OUT;

}

Where ExpandLabel is defined as

struct {
    uint16 length = oscore_key_length;
    opaque label<7..255> = "oscore " + Label;
    opaque context<0..255> = X_N;
} ExpandLabel;
]]></artwork>
        </figure>
      </section>
      <section anchor="ssec-derive-ctx">
        <name>Key Update with Forward Secrecy</name>
        <t>This section defines the actual KUDOS procedure performed by two peers to update their OSCORE keying material. A peer may want to run KUDOS for a variety of reasons, including expiration of the OSCORE Security Context, approaching limits for key usage <xref target="I-D.ietf-core-oscore-key-limits"/>, application policies, and imminent exhaustion of the OSCORE Sender Sequence Number space. The expiration time of an OSCORE Security Context and the key usage limits are hard limits, at which point a peer MUST stop using the keying material in the OSCORE Security Context and has to perform a rekeying before resuming secure communication with the other peer. However, KUDOS can also be used for active rekeying, and a peer may run the KUDOS procedure at any point in time and for any reason.</t>
        <t>Before starting KUDOS, the two peers share the OSCORE Security Context CTX_OLD. Once successfully completed the KUDOS execution, the two peers agree on a newly established OSCORE Security Context CTX_NEW.</t>
        <t>The following specifically defines how KUDOS is run in its stateful FS mode achieving forward secrecy. That is, in the OSCORE Option value of all the exchanged KUDOS messages, the "No Forward Secrecy" bit is set to 0.</t>
        <t>In order to run KUDOS in FS mode, both peers have to be able to write in non-volatile memory. From the newly derived Security Context CTX_NEW, the peers MUST store to non-volatile memory the immutable parts of the OSCORE Security Context as specified in <xref section="3.1" sectionFormat="of" target="RFC8613"/>, with the possible exception of the Common IV, Sender Key, and Recipient Key that can be derived again when needed, as specified in <xref section="3.2.1" sectionFormat="of" target="RFC8613"/>. If the peer is unable to write in non-volatile memory, the two peers have to run KUDOS in its stateless no-FS mode (see <xref target="no-fs-mode"/>).</t>
        <t>When running KUDOS, each peer contributes by generating a random nonce value N1 or N2, and providing it to the other peer. The size of the nonces N1 and N2 is application specific, and the use of 8 byte nonce values is RECOMMENDED.</t>
        <t>Furthermore, X1 and X2 are the value of the 'x' byte specified in the OSCORE Option of the first and second KUDOS message, respectively. As defined in <xref target="ssec-derive-ctx-client-init"/>, these values are used by the peers to build the input N and X to the updateCtx() function, in order to derive a new OSCORE Security Context. As for any new OSCORE Security Context, the Sender Sequence Number and the replay window are re-initialized accordingly (see <xref section="3.2.2" sectionFormat="of" target="RFC8613"/>).</t>
        <t>Once a peer has successfully derived the new OSCORE Security Context CTX_NEW, that peer MUST use CTX_NEW to protect outgoing non KUDOS messages, and MUST NOT use the originally shared OSCORE Security Context CTX_OLD for protecting outgoing messages. Once CTX_NEW has been derived, a peer deletes any OSCORE Security Context older than CTX_OLD with the same ID Context. This can for instance occur in the forward message flow when the initiator has just received KUDOS Response #1 and immediately starts KUDOS again as initiator, before sending any non KUDOS messages which would give the responder key confirmation and allow it to safely discard CTX_OLD.</t>
        <t>Also, that peer MUST terminate all the ongoing observations <xref target="RFC7641"/> that it has with the other peer as protected with the old Security Context CTX_OLD, unless the two peers have explicitly agreed otherwise as defined in <xref target="preserving-observe"/>. More specifically, if either or both peers indicate the wish to cancel their observations, those will be all cancelled following a successful KUDOS execution.</t>
        <t>Note that, even though that peer had no real reason to update its OSCORE keying material, running KUDOS can be intentionally exploited as a more efficient way to terminate all the ongoing observations with the other peer, compared to sending one cancellation request per observation (see <xref section="3.6" sectionFormat="of" target="RFC7641"/>).</t>
        <t>Once a peer has successfully decrypted and verified an incoming message protected with CTX_NEW, that peer MUST discard the old Security Context CTX_OLD.</t>
        <t>The peer starting the KUDOS execution is denoted as initiator, while the other peer is denoted as responder.</t>
        <t>KUDOS may run with the initiator acting either as CoAP client or CoAP server. The former case is denoted as the "forward message flow" (see <xref target="ssec-derive-ctx-client-init"/>) and the latter as the "reverse message flow" (see <xref target="ssec-derive-ctx-server-init"/>). The following properties hold for both the forward and reverse message flow.</t>
        <ul spacing="normal">
          <li>The initiator always offers the fresh value N1.</li>
          <li>The responder always offers the fresh value N2</li>
          <li>The responder is always the first one deriving CTX_NEW.</li>
          <li>The initiator is always the first one achieving key confirmation, hence the first one able to safely discard CTX_OLD.</li>
          <li>Both the initiator and the responder use the same respective OSCORE Sender ID and Recipient ID. Also, they both preserve and use the same OSCORE ID Context from CTX_OLD.</li>
        </ul>
        <t>This situation, however, should not pose significant problems even for a constrained server operating at a capacity of one request per second, thus ensuring the reliability and robustness of the system even under such circumstances.</t>
        <t>Once a peer acting as initiator (responder) has sent (received) the first KUDOS message, that peer MUST NOT send a non KUDOS message to the other peer, until having completed the key update process on its side. The initiator completes the key update process when receiving the second KUDOS message and successfully verifying it with CTX_NEW. The responder completes the key update process when sending the second KUDOS message, as protected with CTX_NEW.</t>
        <t>In particular, CTX_OLD is the most recent OSCORE Security Context that a peer has with a given ID Context, before initiating KUDOS, or upon having received and successfully verified the first KUDOS message. In turn, CTX_NEW is the most recent OSCORE Security Context that a peer has, with a given ID Context, before sending the second KUDOS message, or upon having received and successfully verified the second KUDOS message.</t>
        <t>In the following sections, 'Comb(a,b)' denotes the byte concatenation of two CBOR byte strings, where the first one has value 'a' and the second one has value 'b'. That is, Comb(a,b) = bstr .cbor a | bstr .cbor b, where | denotes byte concatenation.</t>
        <section anchor="ssec-derive-ctx-client-init">
          <name>Forward Message Flow</name>
          <t><xref target="fig-message-exchange-client-init"/> shows an example of KUDOS run in the forward message flow, with the client acting as KUDOS initiator.</t>
          <figure anchor="fig-message-exchange-client-init">
            <name>Example of the KUDOS forward message flow.</name>
            <artwork align="center"><![CDATA[
                     Client                  Server
                   (initiator)            (responder)
                        |                      |
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)
                        | }                    |
                        | Encrypted Payload {  | Verify with CTX_1
                        |  ...                 |
                        | }                    | Generate N2
                        |                      |
                        |                      | 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),  |  d flag: 1           |
          CTX_OLD)      |  x: X2               |
                        |  nonce: N2           |
Verify with CTX_NEW     |  ...                 |
                        | }                    |
Discard CTX_OLD         | Encrypted Payload {  |
                        |  ...                 |
                        | }                    |
                        |                      |

// 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 {             |
                        |  ...                 |
                        | }                    | 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>
          </figure>
          <t>First, the client generates a random value N1, and uses the nonce N = N1 and X = X1 together with the old Security Context CTX_OLD, in order to derive a temporary Security Context CTX_1.</t>
          <t>Then, the client prepares a CoAP request targeting the well-known KUDOS resource (see <xref target="well-known-kudos-desc"/>), by targeting the resource at "/.well-known/kudos". The client protects this CoAP request using CTX_1 and sends it to the server. In particular, the request has the 'd' flag bit set to 1, and specifies X1 as 'x' and N1 as 'nonce' (see <xref target="ssec-oscore-option-extensions"/>). After that, the client deletes CTX_1.</t>
          <t>Upon receiving the OSCORE request, the server retrieves the value N1 from the 'nonce' field of the request, the value X1 from the 'x' byte of the OSCORE Option, and provides the updateCtx() function with the input N = N1, X = X1 and CTX_OLD, in order to derive the temporary Security Context CTX_1.</t>
          <t><xref target="fig-kudos-x-n-example-mess-one"/> shows an example of how the two peers compute X and N provided as input to the updateCtx() function, and how they compute X_N within the updateCtx() function, when deriving CTX_1 (see <xref target="ssec-update-function"/>).</t>
          <figure anchor="fig-kudos-x-n-example-mess-one">
            <name>Example of X, N and X_N computing for the first KUDOS message</name>
            <artwork><![CDATA[
   X1 and N1 expressed as raw values
   X1 = 0x80
   N1 = 0x018a278f7faab55a

   updateCtx() is called with
   X = 0x80
   N = 0x018a278f7faab55a

   In updateCtx(), X_cbor and N_cbor are built as CBOR byte strings
   X_cbor = 0x4180               (h'80')
   N_cbor = 0x48018a278f7faab55a (h'018a278f7faab55a')

   In updateCtx(), X_N is the byte concatenation of X_cbor and N_cbor
   X_N = 0x418048018a278f7faab55a
]]></artwork>
          </figure>
          <t>Then, the server verifies the request by using the Security Context CTX_1.</t>
          <t>After that, the server generates a random value N2, and uses N = Comb(N1, N2) and X = Comb(X1, X2) together with CTX_OLD, in order to derive the new Security Context CTX_NEW.</t>
          <t>An example of this nonce processing on the server with values for N1, X1, N2, and X2 is presented in <xref target="fig-kudos-x-n-example-mess-two"/>.</t>
          <figure anchor="fig-kudos-x-n-example-mess-two">
            <name>Example of X, N and X_N computing for the second KUDOS message</name>
            <artwork><![CDATA[
   X1, X2, N1, and N2 expressed as raw values
   X1 = 0x80
   X2 = 0x80
   N1 = 0x018a278f7faab55a
   N2 = 0x25a8991cd700ac01

   X1, X2, N1, and N2 as CBOR byte strings
   X1 = 0x4180 (h'80')
   X2 = 0x4180 (h'80')
   N1 = 0x48018a278f7faab55a (h'018a278f7faab55a')
   N2 = 0x4825a8991cd700ac01 (h'25a8991cd700ac01')

   updateCtx() is called with
   X = 0x41804180
   N = 0x48018a278f7faab55a4825a8991cd700ac01

   In updateCtx(), X_cbor and N_cbor are built as CBOR byte strings
   X_cbor = 0x4441804180 (h'41804180')
   N_cbor = 0x5248018a278f7faab55a4825a8991cd700ac01
            (h'48018a278f7faab55a4825a8991cd700ac01')

   In updateCtx(), X_N is the byte concatenation of X_cbor and N_cbor
   X_N = 0x44418041805248018a278f7faab55a4825a8991cd700ac01
]]></artwork>
          </figure>
          <t>Then, the server sends an OSCORE response to the client, protected with CTX_NEW. In particular, the response has the 'd' flag bit set to 1 and specifies N2 as 'nonce'. Consistently with <xref target="sec-updated-response-protection"/>, the server includes its Sender Sequence Number as Partial IV in the response. After that, the server deletes CTX_1.</t>
          <t>Upon receiving the OSCORE response, the client retrieves the value N2 from the 'nonce' field of the response, and the value X2 from the 'x' byte of the OSCORE Option. Since the client has received a response to an OSCORE request that it made with the 'd' flag bit set to 1, the client provides the updateCtx() function with the input N = Comb(N1, N2), X = Comb(X1, X2) and CTX_OLD, in order to derive CTX_NEW. Finally, the client verifies the response by using CTX_NEW and deletes CTX_OLD.</t>
          <t>From then on, the two peers can protect their message exchanges by using CTX_NEW. As soon as the server successfully verifies an incoming message protected with CTX_NEW, the server deletes CTX_OLD.</t>
          <t>In the example in <xref target="fig-message-exchange-client-init"/>, the client takes the initiative and sends a new OSCORE request protected with CTX_NEW.</t>
          <t>In case the server does not successfully verify the request, the same error handling specified in <xref section="8.2" sectionFormat="of" target="RFC8613"/> applies. This does not result in deleting CTX_NEW. If the server successfully verifies the request using CTX_NEW, the server deletes CTX_OLD and can reply with an OSCORE response protected with CTX_NEW.</t>
          <t>Note that the server achieves key confirmation only when receiving a message from the client as protected with CTX_NEW. If the server sends a non KUDOS request to the client protected with CTX_NEW before then, and the server receives a 4.01 (Unauthorized) error response as reply, the server SHOULD delete CTX_NEW and start a new KUDOS execution acting as CoAP client, i.e., as initiator in the forward message flow.</t>
          <t>Also note that, if both peers reboot simultaneously, they will run the KUDOS forward message flow as defined in this section. That is, one of the two peers implementing a CoAP client will send KUDOS Request #1 in <xref target="fig-message-exchange-client-init"/>.</t>
          <section anchor="avoiding-in-transit-requests-during-a-key-update">
            <name>Avoiding In-Transit Requests During a Key Update</name>
            <t>Before sending the KUDOS message Request #1 in <xref target="fig-message-exchange-client-init"/>, the client MUST ensure that it has no outstanding interactions with the server (see <xref section="4.7" sectionFormat="of" target="RFC7252"/>), with the exception of ongoing observations <xref target="RFC7641"/> with that server.</t>
            <t>If there are any, the client MUST NOT initiate the KUDOS execution, before either: i) having all those outstanding interactions cleared; or ii) freeing up the Token values used with those outstanding interactions, with the exception of ongoing observations with the server.</t>
            <t>Later on, this prevents a non KUDOS response protected with CTX_NEW from cryptographically matching with both the corresponding request also protected with CTX_NEW and with an older request protected with CTX_OLD, in case the two requests were protected using the same OSCORE Partial IV.</t>
            <t>During an ongoing KUDOS execution the client MUST NOT send any non-KUDOS requests to the server. This could otherwise be possible, if the client is using a value of NSTART greater than 1 (see <xref section="4.7" sectionFormat="of" target="RFC7252"/>).</t>
          </section>
        </section>
        <section anchor="ssec-derive-ctx-server-init">
          <name>Reverse Message Flow</name>
          <t><xref target="fig-message-exchange-server-init"/> shows an example of KUDOS run in the reverse message flow, with the server acting as initiator.</t>
          <figure anchor="fig-message-exchange-server-init">
            <name>Example of the KUDOS reverse message flow</name>
            <artwork align="center"><![CDATA[
                      Client                 Server
                   (responder)            (initiator)
                        |                      |
                        |      Request #1      |
Protect with CTX_OLD    |--------------------->| /temp
                        | OSCORE {             |
                        |  ...                 |
                        | }                    | 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(    | }                    |
          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: N1|N2        |           Comb(N1,N2),
                        |  ...                 |           CTX_OLD)
                        | }                    |
                        | Encrypted Payload {  | Verify with CTX_NEW
                        |  ...                 |
                        |  Application Payload |
                        | }                    | Discard CTX_OLD
                        |                      |

// 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 |
                        | }                    |
                        |                      |
]]></artwork>
          </figure>
          <t>First, the client sends a normal OSCORE request to the server, protected with the old Security Context CTX_OLD and with the 'd' flag bit set to 0.</t>
          <t>Upon receiving the OSCORE request and after having verified it with CTX_OLD as usual, the server generates a random value N1 and provides the updateCtx() function with the input N = N1, X = X1 and CTX_OLD, in order to derive the temporary Security Context CTX_1.</t>
          <t>Then, the server sends an OSCORE response to the client, protected with CTX_1. In particular, the response has the 'd' flag bit set to 1 and specifies N1 as 'nonce' (see <xref target="ssec-oscore-option-extensions"/>). After that, the server deletes CTX_1. Consistently with <xref target="sec-updated-response-protection"/>, the server includes its Sender Sequence Number as Partial IV in the response. After that, the server deletes CTX_1.</t>
          <t>Upon receiving the OSCORE response, the client retrieves the value N1 from the 'nonce' field of the response, the value X1 from the 'x' byte of the OSCORE Option, and provides the updateCtx() function with the input N = N1, X = X1 and CTX_OLD, in order to derive the temporary Security Context CTX_1.</t>
          <t>Then, the client verifies the response by using the Security Context CTX_1.</t>
          <t>After that, the client generates a random value N2, and provides the updateCtx() function with the input N = Comb(N1, N2), X = Comb(X1, X2) and CTX_OLD, in order to derive the new Security Context CTX_NEW. Then, the client sends an OSCORE request to the server, protected with CTX_NEW. In particular, the request has the 'd' flag bit set to 1 and specifies N1 | N2 as 'nonce'. After that, the client deletes CTX_1.</t>
          <t>Upon receiving the OSCORE request, the server retrieves the value N1 | N2 from the request and the value X2 from the 'x' byte of the OSCORE Option. Then, the server verifies that: i) the value N1 is identical to the value N1 specified in a previous OSCORE response with the 'd' flag bit set to 1; and ii) the value N1 | N2 has not been received before in an OSCORE request with the 'd' flag bit set to 1.</t>
          <t>If the verification succeeds, the server provides the updateCtx() function with the input N = Comb(N1, N2), X = Comb(X1, X2) and CTX_OLD, in order to derive the new Security Context CTX_NEW. Finally, the server verifies the request by using CTX_NEW and deletes CTX_OLD.</t>
          <t>From then on, the two peers can protect their message exchanges by using CTX_NEW. In particular, as shown in the example in <xref target="fig-message-exchange-server-init"/>, the server can send an OSCORE response protected with CTX_NEW.</t>
          <t>In case the client does not successfully verify the response, the same error handling specified in <xref section="8.4" sectionFormat="of" target="RFC8613"/> applies. This does not result in deleting CTX_NEW. If the client successfully verifies the response using CTX_NEW, the client deletes CTX_OLD. Note that if the verification of the response fails, the client may want to send again the normal OSCORE request to the server it initially sent (to /temp in the example above), in order to ensure retrieval of the resource representation.</t>
          <t>More generally, as soon as the client successfully verifies an incoming message protected with CTX_NEW, the client deletes CTX_OLD.</t>
          <t>Note that the client achieves key confirmation only when receiving a message from the server as protected with CTX_NEW. If the client sends a non KUDOS request to the server protected with CTX_NEW before then, and the client receives a 4.01 (Unauthorized) error response as reply, the client SHOULD delete CTX_NEW and start a new KUDOS execution acting again as CoAP client, i.e., as initiator in the forward message flow (see <xref target="ssec-derive-ctx-client-init"/>).</t>
          <section anchor="avoiding-in-transit-requests-during-a-key-update-1">
            <name>Avoiding In-Transit Requests During a Key Update</name>
            <t>Before sending the KUDOS message Request #2 in <xref target="fig-message-exchange-server-init"/>, the client MUST ensure that it has no outstanding interactions with the server (see <xref section="4.7" sectionFormat="of" target="RFC7252"/>), with the exception of ongoing observations <xref target="RFC7641"/> with that server.</t>
            <t>If there are any, the client MUST NOT initiate the KUDOS execution, before either: i) having all those outstanding interactions cleared; or ii) freeing up the Token values used with those outstanding interactions, with the exception of ongoing observations with the server.</t>
            <t>Later on, this prevents a non KUDOS response protected with the new Security Context CTX_NEW from cryptographically matching with both the corresponding request also protected with CTX_NEW and with an older request protected with CTX_OLD, in case the two requests were protected using the same OSCORE Partial IV.</t>
            <t>During an ongoing KUDOS execution the client MUST NOT send any non-KUDOS requests to the server. This could otherwise be possible, if the client is using a value of NSTART greater than 1 (see <xref section="4.7" sectionFormat="of" target="RFC7252"/>).</t>
          </section>
        </section>
      </section>
      <section anchor="avoiding-deadlocks">
        <name>Avoiding Deadlocks</name>
        <t>This section defines how to avoid a deadlock in different scenarios.</t>
        <section anchor="scenario-1">
          <name>Scenario 1</name>
          <t>In this scenario, an execution of KUDOS fails at PEER_1 acting as initiator, but successfully completes at PEER_2 acting as responder. After that, PEER_1 still stores CTX_OLD, while PEER_2 stores CTX_OLD and the just derived CTX_NEW.</t>
          <t>Then, PEER_1 starts a new KUDOS execution acting again as initiator, by sending the first KUDOS message as a CoAP request. This is protected with a temporary Security Context CTX_1, which is newly derived from the retained CTX_OLD, and from the new values X1 and N1 exchanged in the present KUDOS execution.</t>
          <t>Upon receiving the first KUDOS message, PEER_2, acting again as responder, proceeds as follows.</t>
          <ol spacing="normal" type="1"><li>PEER_2 attempts to verify the first KUDOS message by using a temporary Security Context CTX_1'. This is derived from the Security Context CTX_NEW established during the latest successfully completed KUDOS execution.</li>
            <li>The message verification inevitably fails. If PEER_2 is acting as CoAP server, it MUST NOT reply with an unprotected 4.01 (Unauthorized) CoAP response yet.</li>
            <li>
              <t>PEER_2 MUST attempt to verify the first KUDOS message by using a temporary Security Context CTX_1. This is newly derived from the Security Context CTX_OLD retained after the latest successfully completed KUDOS execution, and from the values X1 and N1 exchanged in the present KUDOS execution.  </t>
              <t>
If the message verification fails, PEER_2: i) retains CTX_OLD and CTX_NEW from the latest successfully completed KUDOS execution; ii) if acting as CoAP server, replies with an unprotected 4.01 (Unauthorized) CoAP response.  </t>
              <t>
If the message verification succeeds, PEER_2: i) retains CTX_OLD from the latest successfully completed KUDOS execution; ii) replaces CTX_NEW from the latest successfully completed KUDOS execution with a new Security Context CTX_NEW', derived from CTX_OLD and from the values X1, X2, N1, and N2 exchanged in the present KUDOS execution; iii) replies with the second KUDOS message, which is protected with the just derived CTX_NEW'.</t>
            </li>
          </ol>
        </section>
        <section anchor="scenario-2">
          <name>Scenario 2</name>
          <t>In this scenario, an execution of KUDOS fails at PEER_1 acting as initiator, but successfully completes at PEER_2 acting as responder. After that, PEER_1 still stores CTX_OLD, while PEER_2 stores CTX_OLD and the just derived CTX_NEW.</t>
          <t>Then, PEER_2 starts a new KUDOS execution, this time acting as initiator, by sending the first KUDOS message as a CoAP request. This is protected with a temporary Security Context CTX_1, which is newly derived from CTX_NEW established during the latest successfully completed KUDOS execution, as well as from the new values X1 and N1 exchanged in the present KUDOS execution.</t>
          <t>Upon receiving the first KUDOS message, PEER_1, this time acting as responder, proceeds as follows.</t>
          <ol spacing="normal" type="1"><li>PEER_1 attempts to verify the first KUDOS message by using a temporary Security Context CTX_1', which is derived from the retained Security Context CTX_OLD and from the value X1 and N1 exchanged in the present KUDOS execution.</li>
            <li>The message verification inevitably fails. If PEER_1 is acting as CoAP server, it replies with an unprotected 4.01 (Unauthorized) CoAP response.</li>
            <li>
              <t>If PEER_2 does not receive the second KUDOS message for a pre-defined amount of time, or if it receives a 4.01 (Unauthorized) CoAP response when acting as CoAP client, then PEER_2 can start a new KUDOS execution for a maximum, pre-defined number of times.  </t>
              <t>
In this case, PEER_2 sends a new first KUDOS message protected with a temporary Security Context CTX_1', which is derived from the retained CTX_OLD, as well as from the new values X1 and N1 exchanged in the present KUDOS execution.  </t>
              <t>
During this time, PEER_2 does not delete CTX_NEW established during the latest successfully completed KUDOS execution, and does not delete CTX_OLD unless it successfully verifies an incoming message protected with CTX_NEW.</t>
            </li>
            <li>
              <t>Upon receiving such a new, first KUDOS message, PEER_1 verifies it by using the temporary Security Context CTX_1', which is derived from the Security Context CTX_OLD, and from the values X1 and N1 exchanged in the present KUDOS execution.  </t>
              <t>
If the message verification succeeds, PEER_1 derives an OSCORE Security Context CTX_NEW' from CTX_OLD and from the values X1, X2, N1, and N2 exchanged in the present KUDOS execution. Then, it replies with the second KUDOS message, which is protected with the latest, just derived CTX_NEW'.</t>
            </li>
            <li>
              <t>Upon receiving such second KUDOS message, PEER_2 derives CTX_NEW' from the retained CTX_OLD and from the values X1, X2, N1, and N2 exchanged in the present KUDOS execution. Then, PEER_2 attempts to verify the KUDOS message using the just derived CTX_NEW'.  </t>
              <t>
If the message verification succeeds, PEER_2 deletes the retained CTX_OLD as well as the retained CTX_NEW established during the immediately previously, successfully completed KUDOS execution.</t>
            </li>
          </ol>
        </section>
        <section anchor="scenario-3">
          <name>Scenario 3</name>
          <t>When KUDOS is run in the reverse message flow (see <xref target="ssec-derive-ctx-server-init"/>), the two peers risk to run into a deadlock, if all the following conditions hold.</t>
          <ul spacing="normal">
            <li>The client is a client-only device, i.e., it does not act as CoAP server and thus does not listen for incoming requests.</li>
            <li>The server needs to execute KUDOS, which, due to the previous point, can only be performed in its reverse message flow. That is, the server has to wait for an incoming non KUDOS request, in order to initiate KUDOS by replying with the first KUDOS message as a response.</li>
            <li>The client sends only Non-confirmable CoAP requests to the server and does not expect responses sent back as reply, hence freeing up a request's Token value once the request is sent.</li>
          </ul>
          <t>In such a case, in order to avoid experiencing a deadlock situation where the server needs to execute KUDOS but cannot practically initiate it, a client-only device that supports KUDOS SHOULD intersperse Non-confirmable requests it sends to that server with confirmable requests.</t>
        </section>
      </section>
      <section anchor="no-fs-mode">
        <name>Key Update with or without Forward Secrecy</name>
        <t>The FS mode of the KUDOS procedure defined in <xref target="ssec-derive-ctx"/> ensures forward secrecy of the OSCORE keying material. However, it requires peers executing KUDOS to preserve their state (e.g., across a device reboot), by writing information such as data from the newly derived OSCORE Security Context CTX_NEW in non-volatile memory.</t>
        <t>This can be problematic for devices that cannot dynamically write information to non-volatile memory. For example, some devices may support only a single writing in persistent memory when initial keying material is provided (e.g., at manufacturing or commissioning time), but no further writing after that. Therefore, these devices cannot perform a stateful key update procedure, and thus are not capable to run KUDOS in FS mode to achieve forward secrecy.</t>
        <t>In order to address these limitations, KUDOS can be run in its stateless no-FS mode, as defined in the following. This allows two peers to achieve the same results as when running KUDOS in FS mode (see <xref target="ssec-derive-ctx"/>), with the difference that no forward secrecy is achieved and no state information is required to be dynamically written in non-volatile memory.</t>
        <t>From a practical point of view, the two modes differ as to what exact OSCORE Master Secret and Master Salt are used as part of the OSCORE Security Context CTX_OLD provided as input to the updateCtx() function (see <xref target="ssec-update-function"/>).</t>
        <t>If either or both peers are not able to write in non-volatile memory the OSCORE Master Secret and OSCORE Master Salt from the newly derived Security Context CTX_NEW, then the two peers have to run KUDOS in no-FS mode.</t>
        <section anchor="handling-and-use-of-keying-material">
          <name>Handling and Use of Keying Material</name>
          <t>In the following, a device is denoted as "CAPABLE" if it is able to store information in non-volatile memory (e.g., on disk), beyond a one-time-only writing occurring at manufacturing or (re-)commissioning time. If that is not the case, the device is denoted as "non-CAPABLE".</t>
          <t>The following terms are used to refer to OSCORE keying material.</t>
          <ul spacing="normal">
            <li>Bootstrap Master Secret and Bootstrap Master Salt. If pre-provisioned during manufacturing or (re-)commissioning, these OSCORE Master Secret and Master Salt are initially stored on disk and are never going to be overwritten by the device.</li>
            <li>Latest Master Secret and Latest Master Salt. These OSCORE Master Secret and Master Salt can be dynamically updated by the device. In case of reboot, they are lost unless they have been stored on disk.</li>
          </ul>
          <t>Note that:</t>
          <ul spacing="normal">
            <li>A peer running KUDOS can have none of the pairs above associated with another peer, only one or both.</li>
            <li>A peer that has neither of the pairs above associated with another peer, cannot run KUDOS in any mode with that other peer.</li>
            <li>
              <t>A peer that has only one of the pairs above associated with another peer can attempt to run KUDOS with that other peer, but the procedure might fail depending on the other peer's capabilities. In particular:  </t>
              <ul spacing="normal">
                <li>In order to run KUDOS in FS mode, a peer must be a CAPABLE device. It follows that two peers have to both be CAPABLE devices in order to be able to run KUDOS in FS mode with one another.</li>
                <li>In order to run KUDOS in no-FS mode, a peer must have Bootstrap Master Secret and Bootstrap Master Salt available as stored on disk.</li>
              </ul>
            </li>
            <li>A peer that is a non-CAPABLE device MUST support the no-FS mode.</li>
            <li>A peer that is a CAPABLE device MUST support the FS mode and SHOULD support the no-FS mode.</li>
          </ul>
          <t>As a general rule, once successfully generated a new OSCORE Security Context CTX (e.g., CTX is the CTX_NEW resulting from a KUDOS execution, or it has been established through the EDHOC protocol <xref target="I-D.ietf-lake-edhoc"/>), a peer considers the Master Secret and Master Salt of CTX as Latest Master Secret and Latest Master Salt. After that:</t>
          <ul spacing="normal">
            <li>
              <t>If the peer is a CAPABLE device, it SHOULD store Latest Master Secret and Latest Master Salt on disk.  </t>
              <t>
As an exception, this does not apply to possible temporary OSCORE Security Contexts used during a key update procedure, such as CTX_1 used during the KUDOS execution. That is, the OSCORE Master Secret and Master Salt from such temporary Security Contexts MUST NOT be stored on disk.</t>
            </li>
            <li>The peer MUST store Latest Master Secret and Latest Master Salt in volatile memory, thus making them available to OSCORE message processing and possible key update procedures.</li>
          </ul>
          <section anchor="actions-after-device-reboot">
            <name>Actions after Device Reboot</name>
            <t>Building on the above, after having experienced a reboot, a peer A checks whether it has stored on disk a pair P1 = (Latest Master Secret, Latest Master Salt) associated with any another peer B.</t>
            <ul spacing="normal">
              <li>
                <t>If a pair P1 is found, the peer A performs the following actions.  </t>
                <ul spacing="normal">
                  <li>The peer A loads the Latest Master Secret and Latest Master Salt to volatile memory, and uses them to derive an OSCORE Security Context CTX_OLD.</li>
                  <li>The peer A runs KUDOS with the other peer B, acting as initiator. If the peer A is a CAPABLE device, it stores on disk the Master Secret and Master Salt from the newly established OSCORE Security Context CTX_NEW, as Latest Master Secret and Latest Master Salt, respectively.</li>
                </ul>
              </li>
              <li>
                <t>If a pair P1 is not found, the peer A checks whether it has stored on disk a pair P2 = (Bootstrap Master Secret, Bootstrap Master Salt) associated with the other peer B.  </t>
                <ul spacing="normal">
                  <li>
                    <t>If a pair P2 is found, the peer A performs the following actions.      </t>
                    <ul spacing="normal">
                      <li>The peer A loads the Bootstrap Master Secret and Bootstrap Master Salt to volatile memory, and uses them to derive an OSCORE Security Context CTX_OLD.</li>
                      <li>If the peer A is a CAPABLE device, it stores on disk Bootstrap Master Secret and Bootstrap Master Salt as Latest Master Secret and Latest Master Salt, respectively. This supports the situation where A is a CAPABLE device and has never run KUDOS with the other peer B before.</li>
                      <li>The peer A runs KUDOS with the other peer B, acting as initiator. If the peer A is a CAPABLE device, it stores on disk the Master Secret and Master Salt from the newly established OSCORE Security Context CTX_NEW, as Latest Master Secret and Latest Master Salt, respectively.</li>
                    </ul>
                  </li>
                  <li>If a pair P2 is not found, the peer A has to use alternative ways to establish a first OSCORE Security Context CTX_NEW with the other peer B, e.g., by running the EDHOC protocol. After that, if A is a CAPABLE device, it stores on disk the OSCORE Master Secret and Master Salt from the newly established OSCORE Security Context CTX_NEW, as Latest Master Secret and Latest Master Salt, respectively.</li>
                </ul>
              </li>
            </ul>
          </section>
        </section>
        <section anchor="no-fs-signaling">
          <name>Selection of KUDOS Mode</name>
          <t>During a KUDOS execution, the two peers agree on whether to perform the key update procedure in FS mode or no-FS mode, by leveraging the "No Forward Secrecy" bit, 'p', in the 'x' byte of the OSCORE Option value of the KUDOS messages (see <xref target="ssec-oscore-option-extensions"/>). The 'p' bit practically determines what OSCORE Security Context to use as CTX_OLD during the KUDOS execution, consistently with the indicated mode.</t>
          <ul spacing="normal">
            <li>If the 'p' bit is set to 0 (FS mode), the updateCtx() function used to derive CTX_1 or CTX_NEW considers as input CTX_OLD the current OSCORE Security Context shared with the other peer as is. In particular, CTX_OLD includes Latest Master Secret as OSCORE Master Secret and Latest Master Salt as OSCORE Master Salt.</li>
            <li>If the 'p' bit is set to 1 (no-FS mode), the updateCtx() function used to derive CTX_1 or CTX_NEW considers as input CTX_OLD the current OSCORE Security Context shared with the other peer, with the following difference: Bootstrap Master Secret is used as OSCORE Master Secret and Bootstrap Master Salt is used as OSCORE Master Salt. That is, every execution of KUDOS in no-FS mode between these two peers considers the same pair (Master Secret, Master Salt) in the OSCORE Security Context CTX_OLD provided as input to the updateCtx() function, hence the impossibility to achieve forward secrecy.</li>
          </ul>
          <t>A peer determines to run KUDOS either in FS or no-FS mode with another peer as follows.</t>
          <ul spacing="normal">
            <li>If a peer A is not a CAPABLE device, it MUST run KUDOS only in no-FS mode. That is, when sending a KUDOS message, it MUST set to 1 the 'p' bit of the 'x' byte in the OSCORE Option value.</li>
            <li>
              <t>If a peer A is a CAPABLE device, it SHOULD run KUDOS only in FS mode and SHOULD NOT run KUDOS as initiator in no-FS mode. That is, when sending a KUDOS message, it SHOULD set to 0 the 'p' bit of the 'x' byte in the OSCORE Option value. An exception applies in the following cases.  </t>
              <ul spacing="normal">
                <li>
                  <t>The peer A is running KUDOS with another peer B, which A has learned to not a non-CAPABLE device (and hence not able to run KUDOS in FS mode).      </t>
                  <t>
Note that, if the peer A is a CAPABLE device, it is able to store such information about the other peer B on disk and it MUST do so. From then on, the peer A will perform every execution of KUDOS with the peer B in no-FS mode, including after a possible reboot.</t>
                </li>
                <li>The peer A is acting as responder and running KUDOS with another peer B without knowing its capabilities, and A receives a KUDOS message where the 'p' bit of the 'x' byte in the OSCORE Option value is set to 1.</li>
              </ul>
            </li>
            <li>
              <t>If a peer A is a CAPABLE device and has learned that another peer B is also a CAPABLE device (and hence able to run KUDOS in FS mode), then the peer A MUST NOT run KUDOS with the peer B in no-FS mode. This also means that, if the peer A acts as responder when running KUDOS with the peer B, the peer A MUST terminate the KUDOS execution if it receives a KUDOS message from the peer B where the 'p' bit of the 'x' byte in the OSCORE Option value is set to 1.  </t>
              <t>
Note that, if the peer A is a CAPABLE device, it is able to store such information about the other peer B on disk and it MUST do so. This ensures that the peer A will perform every execution of KUDOS with the peer B in FS mode. In turn, this prevents a possible downgrading attack, aimed at making A believe that B is not a CAPABLE device, and thus to run KUDOS in no-FS mode although the FS mode can actually be used by both peers.</t>
            </li>
          </ul>
          <t>Within the limitations above, two peers running KUDOS generate the new OSCORE Security Context CTX_NEW according to the mode indicated per the bit 'p' set by the responder in the second KUDOS message.</t>
          <t>If, after having received the first KUDOS message, the responder can continue performing KUDOS, the bit 'p' in the reply message has the same value as in the bit 'p' set by the initiator, unless the value is 0 and the responder is a non-CAPABLE device. More specifically:</t>
          <ul spacing="normal">
            <li>If both peers are CAPABLE devices, they will run KUDOS in FS mode. That is, both initiator and responder sets the 'p' bit to 0 in the respective sent KUDOS message.</li>
            <li>If both peers are non-CAPABLE devices or only the peer acting as initiator is a non-CAPABLE device, they will run KUDOS in no-FS mode. That is, both initiator and responder sets the 'p' bit to 1 in the respective sent KUDOS message.</li>
            <li>If only the peer acting as initiator is a CAPABLE device and it has knowledge of the other peer being a non-CAPABLE device, they will run KUDOS in no-FS mode. That is, both initiator and responder sets the 'p' bit to 1 in the respective sent KUDOS message.</li>
            <li>
              <t>If only the peer acting as initiator is a CAPABLE device and it has no knowledge of the other peer being a non-CAPABLE device, they will not run KUDOS in FS mode and will rather set to ground for possibly retrying in no-FS mode. In particular, the initiator sets the 'p' bit of its sent KUDOS message to 0. Then:  </t>
              <ul spacing="normal">
                <li>
                  <t>If the responder is a server, it MUST reply with a 5.03 (Service Unavailable) error response. The response MUST be protected with the newly derived OSCORE Security Context CTX_NEW. The diagnostic payload MAY provide additional information. In the error response, the 'p' bit MUST be set to 1.      </t>
                  <t>
When receiving the error response, the initiator learns that the responder is a non-CAPABLE device (and hence not able to run KUDOS in FS mode). The initiator MAY try running KUDOS again. If it does so, the initiator MUST set the 'p' bit to 1, when sending a new request as first KUDOS message.</t>
                </li>
                <li>
                  <t>If the responder is a client, it sends to the initiator the second KUDOS message as a new request, which MUST be protected with the newly derived OSCORE Security Context CTX_NEW. In the newly sent request, the 'p' bit MUST be set to 1.      </t>
                  <t>
When receiving the new request above (i.e., with the 'p' bit set to 1 as a follow-up to the previous KUDOS response having the 'p' bit set to 0), the initiator learns that the responder is a non-CAPABLE device (and hence not able to run KUDOS in FS mode).</t>
                </li>
              </ul>
            </li>
          </ul>
          <t>In either case, both KUDOS peers delete the OSCORE Security Contexts CTX_1 and CTX_NEW.</t>
        </section>
      </section>
      <section anchor="preserving-observe">
        <name>Preserving Observations Across Key Updates</name>
        <t>As defined in <xref target="ssec-derive-ctx"/>, once a peer has completed the KUDOS execution and successfully derived the new OSCORE Security Context CTX_NEW, that peer normally terminates all the ongoing observations it has with the other peer <xref target="RFC7641"/>, as protected with the old OSCORE Security Context CTX_OLD.</t>
        <t>This section describes a method that the two peers can use to safely preserve the ongoing observations that they have with one another, beyond the completion of a KUDOS execution. In particular, this method ensures that an Observe notification can never successfully cryptographically match against the Observe requests of two different observations, i.e., against an Observe request protected with CTX_OLD and an Observe request protected with CTX_NEW.</t>
        <t>The actual preservation of ongoing observations has to be agreed by the two peers at each execution of KUDOS that they run with one another, as defined in <xref target="preserving-observe-management"/>. If, at the end of a KUDOS execution, the two peers have not agreed on that, they MUST terminate the ongoing observations that they have with one another, just as defined in <xref target="ssec-derive-ctx"/>.</t>
        <t>[</t>
        <t>NOTE: While a dedicated signaling would have to be introduced, this rationale may be of more general applicability, i.e., in case an update of the OSCORE keying material is performed through a different means than KUDOS.</t>
        <t>]</t>
        <section anchor="preserving-observe-management">
          <name>Management of Observations</name>
          <t>As per <xref section="3.1" sectionFormat="of" target="RFC7641"/>, a client can register its interest in observing a resource at a server, by sending a registration request including the Observe Option with value 0.</t>
          <t>If the server registers the observation as ongoing, the server sends back a successful response also including the Observe Option, hence confirming that an entry has been successfully added for that client.</t>
          <t>If the client receives back the successful response above from the server, then the client also registers the observation as ongoing.</t>
          <t>In case the client can ever consider to preserve ongoing observations beyond a key update as defined below, then the client MUST NOT simply forget about an ongoing observation if not interested in it anymore. Instead, the client MUST send an explicit cancellation request to the server, i.e., a request including the Observe Option with value 1 (see <xref section="3.6" sectionFormat="of" target="RFC7641"/>). After sending this cancellation request, if the client does not receive back a response confirming that the observation has been terminated, the client MUST NOT consider the observation terminated. The client MAY try again to terminate the observation by sending a new cancellation request.</t>
          <t>In case a peer A performs a KUDOS execution with another peer B, and A has ongoing observations with B that it is interested to preserve beyond the key update, then A can explicitly indicate its interest to do so. To this end, the peer A sets to 1 the bit "Preserve Observations", 'b', in the 'x' byte of the OSCORE Option value (see <xref target="ssec-oscore-option-extensions"/>), in the KUDOS message it sends to the other peer B.</t>
          <t>If a peer acting as responder receives the first KUDOS message with the bit 'b' set to 0, then the peer MUST set to 0 the bit 'b' in the KUDOS message it sends as follow-up, regardless of its wish to preserve ongoing observations with the other peer.</t>
          <t>If a peer acting as initiator has sent the first KUDOS message with the bit 'b' set to 0, the peer MUST ignore the bit 'b' in the follow-up KUDOS message that it receives from the other peer.</t>
          <t>After successfully completing the KUDOS execution (i.e., after having successfully derived the new OSCORE Security Context CTX_NEW), both peers have expressed their interest in preserving their common ongoing observations if and only if the bit 'b' was set to 1 in both the exchanged KUDOS messages. In such a case, each peer X performs the following actions.</t>
          <ol spacing="normal" type="1"><li>The peer X considers all the still ongoing observations that it has with the other peer, such that X acts as client in those observations. If there are no such observations, the peer X takes no further actions. Otherwise, it moves to step 2.</li>
            <li>The peer X considers all the OSCORE Partial IV values used in the Observe registration request associated with any of the still ongoing observations determined at step 1.</li>
            <li>The peer X determines the value PIV* as the highest OSCORE Partial IV value among those considered at step 2.</li>
            <li>In the Sender Context of the OSCORE Security Context shared with the other peer, the peer X sets its own Sender Sequence Number to (PIV* + 1), rather than to 0.</li>
          </ol>
          <t>As a result, each peer X will "jump" beyond the OSCORE Partial IV (PIV) values that are occupied and in use for ongoing observations with the other peer where X acts as client.</t>
          <t>Note that, each time it runs KUDOS, a peer must determine if it wishes to preserve ongoing observations with the other peer or not, before sending its KUDOS message.</t>
          <t>To this end, the peer should also assess the new value that PIV* would take after a successful completion of KUDOS, in case ongoing observations with the other peer are going to be preserved. If the peer considers such a new value of PIV* to be too close to the maximum possible value admitted for the OSCORE Partial IV, then the peer may choose to run KUDOS with no intention to preserve its ongoing observations with the other peer, in order to "start over" from a fresh, entirely unused PIV space.</t>
          <t>Application policies can further influence whether attempting to preserve observations beyond a key update is appropriate or not.</t>
        </section>
      </section>
      <section anchor="ssec-retention">
        <name>Retention Policies</name>
        <t>Applications MAY define policies that allow a peer to temporarily keep the old Security Context CTX_OLD beyond having established the new Security Context CTX_NEW and having achieved key confirmation, rather than simply overwriting CTX_OLD with CTX_NEW. This allows the peer to decrypt late, still on-the-fly incoming messages protected with CTX_OLD.</t>
        <t>When enforcing such policies, the following applies.</t>
        <ul spacing="normal">
          <li>Outgoing non KUDOS messages MUST be protected by using only CTX_NEW.</li>
          <li>Incoming non KUDOS messages MUST first be attempted to decrypt by using CTX_NEW. If decryption fails, a second attempt can use CTX_OLD.</li>
          <li>When an amount of time defined by the policy has elapsed since the establishment of CTX_NEW, the peer deletes CTX_OLD.</li>
        </ul>
        <t>A peer MUST NOT retain CTX_OLD beyond the establishment of CTX_NEW and the achievement of key confirmation, if any of the following conditions holds: CTX_OLD is expired; limits set for safe key usage have been reached <xref target="I-D.ietf-core-oscore-key-limits"/>, for the Recipient Key of the Recipient Context of CTX_OLD.</t>
      </section>
      <section anchor="ssec-discussion">
        <name>Discussion</name>
        <t>KUDOS is intended to deprecate and replace the procedure defined in <xref section="B.2" sectionFormat="of" target="RFC8613"/>, as fundamentally achieving the same goal, while displaying a number of improvements and advantages.</t>
        <t>In particular, it is especially convenient for the handling of failure events concerning the JRC node in 6TiSCH networks (see <xref target="sec-current-methods"/>). That is, among its intrinsic advantages compared to the procedure defined in <xref section="B.2" sectionFormat="of" target="RFC8613"/>, KUDOS preserves the same ID Context value, when establishing a new OSCORE Security Context.</t>
        <t>Since the JRC uses ID Context values as identifiers of network nodes, namely "pledge identifiers", the above implies that the JRC does not have to perform anymore a mapping between a new, different ID Context value and a certain pledge identifier (see <xref section="8.3.3" sectionFormat="of" target="RFC9031"/>). It follows that pledge identifiers can remain constant once assigned, and thus ID Context values used as pledge identifiers can be employed in the long-term as originally intended.</t>
        <section anchor="kudos-interleaved-with-other-message-exchanges">
          <name>KUDOS Interleaved with Other Message Exchanges</name>
          <t>During a KUDOS execution a peer that is a CoAP Client must be ready to receive CoAP responses protected with a different OSCORE Security Context than the one that was used to protect the corresponding request.</t>
          <t>This can happen, for instance, when a CoAP client sends a request and, shortly after that, it executes KUDOS. In such a case, the CoAP request is protected with CTX_OLD, while the CoAP response from the server is protected with CTX_NEW. Another case is when incoming responses are Observe notifications protected with CTX_NEW, while the corresponding request from the CoAP client that started the observation was protected with CTX_OLD.</t>
          <t>Also, this can happen when running KUDOS in the reverse message flow, if the client uses NSTART &gt; 1 and one of its requests triggers a KUDOS execution, i.e., the server replies with the first KUDOS message by acting as responder. The other requests would be latest served by the server after KUDOS has been completed.</t>
        </section>
        <section anchor="communication-overhead">
          <name>Communication Overhead</name>
          <t>Each of the two KUDOS messages displays a small communication overhead. This is determined by the following, additional information conveyed in the OSCORE option (see <xref target="ssec-oscore-option-extensions"/>).</t>
          <ul spacing="normal">
            <li>The second byte of the OSCORE option.</li>
            <li>The byte 'x' of the OSCORE option.</li>
            <li>The nonce conveyed in the 'nonce' field of the OSCORE option. Its size ranges from 1 to 16 bytes as indicated in the 'x' byte, and is typically of 8 bytes.</li>
          </ul>
          <t>Assuming nonces of the same size in both messages of the same KUDOS execution, this results in the following minimum, typical, and maximum communication overhead, when considering a nonce with size 1, 8, and 16 bytes, respectively. All the indicated values are in bytes.</t>
          <artwork align="center"><![CDATA[
+-------+-----------------+-----------------+
| Nonce | Overhead of one | Overhead of one |
| size  | KUDOS message   | KUDOS execution |
+-------+-----------------+-----------------+
| 1     | 3               | 6               |
+-------+-----------------+-----------------+
| 8     | 10              | 20              |
+-------+-----------------+-----------------+
| 16    | 18              | 36              |
+-------+-----------------+-----------------+
]]></artwork>
        </section>
        <section anchor="well-known-kudos-desc">
          <name>Well-Known KUDOS Resource</name>
          <t>According to this specification, KUDOS is transferred in POST requests to the Uri-Path: "/.well-known/kudos" (see <xref target="well-known-kudos"/>), and 2.04 (Changed) responses. An application may define its own path that can be discovered, e.g., using a resource directory <xref target="RFC9176"/>. Client applications can use the resource type "core.kudos" to discover a server's KUDOS resource, i.e., where to send KUDOS requests, see <xref target="rt-kudos"/>.</t>
        </section>
        <section anchor="rekeying-when-using-schc-with-oscore">
          <name>Rekeying when Using SCHC with OSCORE</name>
          <t>In the interest of rekeying, the following points must be taken into account when using the Static Context Header Compression and fragmentation (SCHC) framework <xref target="RFC8724"/> for compressing CoAP messages protected with OSCORE, as defined in <xref target="RFC8824"/>.</t>
          <t>Compression of the OSCORE Partial IV has implications for the frequency of rekeying. That is, if the Partial IV is compressed, the communicating peers must perform rekeying more often, as the available Partial IV space becomes smaller due to the compression. For instance, if only 3 bits of the Partial IV are sent, then the maximum PIV before having to rekey is only 2^3 - 1 = 7.</t>
          <t>Furthermore, any time the SCHC context Rules are updated on an OSCORE endpoint, that endpoint must perform a rekeying (see <xref section="9" sectionFormat="of" target="RFC8824"/>).</t>
          <t>That is, the use of SCHC plays a role in triggering KUDOS executions and in affecting their cadence. Hence, the used SCHC Rules and their update policies should ensure that the KUDOS executions occurring as their side effect do not significantly impair the gain from message compression.</t>
        </section>
      </section>
      <section anchor="edhoc-ead-signaling">
        <name>Signaling KUDOS support in EDHOC</name>
        <t>The EDHOC protocol defines the transport of additional External Authorization Data (EAD) within an optional EAD field of the EDHOC messages (see <xref section="3.8" sectionFormat="of" target="I-D.ietf-lake-edhoc"/>). An EAD field is composed of one or multiple EAD items, each of which specifies an identifying 'ead_label' encoded as a CBOR integer, and an optional 'ead_value' encoded as a CBOR bstr.</t>
        <t>This document defines a new EDHOC EAD item KUDOS_EAD and registers its 'ead_label' in <xref target="iana-edhoc-aad"/>. By including this EAD item in an outgoing EDHOC message, a sender peer can indicate whether it supports KUDOS and in which modes, as well as query the other peer about its support. Note that peers do not have to use this EDHOC EAD item to be able to run KUDOS with each other, irrespective of the modes they support. The possible values of the 'ead_value' are as follows:</t>
        <artwork align="center"><![CDATA[
+------+--------==+----------------------------------------------+
| Name | Value    | Description                                  |
+======+==========+==============================================+
| ASK  | h''      | Used only in EDHOC message_1. It asks the    |
|      | (0x40)   | recipient peer to specify in EDHOC message_2 |
|      |          | whether it supports KUDOS.                   |
+------+----------+----------------------------------------------+
| NONE | h'00'    | Used only in EDHOC message_2 and message_3.  |
|      | (0x4100) | It specifies that the sender peer does not   |
|      |          | support KUDOS.                               |
+------+----------+----------------------------------------------+
| FULL | h'01'    | Used only in EDHOC message_2 and message_3.  |
|      | (0x4101) | It specifies that the sender peer supports   |
|      |          | KUDOS in FS mode and no-FS mode.             |
+------+----------+----------------------------------------------+
| PART | h'02'    | Used only in EDHOC message_2 and message_3.  |
|      | (0x4102) | It specifies that the sender peer supports   |
|      |          | KUDOS in no-FS mode only.                    |
+------+----------+----------------------------------------------+
]]></artwork>
        <t>When the KUDOS_EAD item is included in EDHOC message_1 with 'ead_value' ASK, a recipient peer that supports the KUDOS_EAD item MUST specify whether it supports KUDOS in EDHOC message_2.</t>
        <t>When the KUDOS_EAD item is not included in EDHOC message_1 with 'ead_value' ASK, a recipient peer that supports the KUDOS_EAD item MAY still specify whether it supports KUDOS in EDHOC message_2.</t>
        <t>When the KUDOS_EAD item is included in EDHOC message_2 with 'ead_value' FULL or PART, a recipient peer that supports the KUDOS_EAD item SHOULD specify whether it supports KUDOS in EDHOC message_3. An exception applies in case, based on application policies or other context information, the recipient peer that receives EDHOC message_2 already knows that the sender peer is supposed to have such knowledge.</t>
        <t>When the KUDOS_EAD item is included in EDHOC message_2 with 'ead_value' NONE, a recipient peer that supports the KUDOS_EAD item MUST NOT specify whether it supports KUDOS in EDHOC message_3.</t>
        <t>In the following cases, the recipient peer silently ignores the KUDOS_EAD item specified in the received EDHOC message, and does not include a KUDOS_EAD item in the next EDHOC message it sends (if any).</t>
        <ul spacing="normal">
          <li>The recipient peer does not support the KUDOS_EAD item.</li>
          <li>The KUDOS_EAD item is included in EDHOC message_1 with 'ead_value' different than ASK</li>
          <li>The KUDOS_EAD item is included in EDHOC message_2 or message_3 with 'ead_value' ASK.</li>
          <li>The KUDOS_EAD item is included in EDHOC message_4.</li>
        </ul>
        <t>That is, by specifying 'ead_value' ASK in EDHOC message_1, a peer A can indicate to the other peer B that it wishes to know if B supports KUDOS and in what mode(s). In the following EDHOC message_2, B indicates whether it supports KUDOS and in what mode(s), by specifying either NONE, FULL or PART as 'ead_value'. Specifying the 'ead_value' FULL or PART in EDHOC message_2 also asks A to indicate whether it supports KUDOS in EDHOC message_3.</t>
        <t>To further illustrate the functionality, two examples are presented below as EDHOC executions where only the new KUDOS_EAD item is shown when present, and assuming that no other EAD items are used by the two peers.</t>
        <artwork align="center"><![CDATA[
EDHOC                                                 EDHOC
Initiator                                         Responder
|                                                         |
|                EAD_1: (TBD_LABEL, ASK)                  |
+-------------------------------------------------------->|
|                        message_1                        |
|                                                         |
|                EAD_2: (TBD_LABEL, FULL)                 |
|<--------------------------------------------------------+
|                        message_2                        |
|                                                         |
|                EAD_3: (TBD_LABEL, FULL)                 |
+-------------------------------------------------------->|
|                        message_3                        |
|                                                         |
]]></artwork>
        <t>In the example above, the Initiator asks the EDHOC Responder about its support for KUDOS ('ead_value' = ASK). In EDHOC message_2, the Responder indicates that it supports both the FS and no-FS mode of KUDOS ('ead_value' = FULL). Finally, in EDHOC message_3, the Initiator indicates that it also supports both the FS and no-FS mode of KUDOS ('ead_value' = FULL). After the EDHOC execution has successfully finished, both peers are aware that they both support KUDOS, in the FS and no-FS modes.</t>
        <artwork align="center"><![CDATA[
EDHOC                                                 EDHOC
Initiator                                         Responder
|                                                         |
|                EAD_1: (TBD_LABEL, ASK)                  |
+-------------------------------------------------------->|
|                        message_1                        |
|                                                         |
|                EAD_2: (TBD_LABEL, NONE)                 |
|<--------------------------------------------------------+
|                        message_2                        |
|                                                         |
+-------------------------------------------------------->|
|                        message_3                        |
|                                                         |
]]></artwork>
        <t>In this second example, the Initiator asks the EDHOC Responder about its support for KUDOS ('ead_value' = ASK). In EDHOC message_2, the Responder indicates that it does not support KUDOS at all ('ead_value' = NONE). Finally, in EDHOC message_3, the Initiator does not include the KUDOS_EAD item, since it already knows that using KUDOS with the other peer will not be possible. After the EDHOC execution has successfully finished, the Initiator is aware that the Responder does not support KUDOS, which the two peers are not going to use with each other.</t>
      </section>
    </section>
    <section anchor="update-oscore-ids">
      <name>Update of OSCORE Sender/Recipient IDs</name>
      <t>This section defines a 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>This results in privacy benefits, as it helps mitigate the ability of an adversary to correlate the two peers' communication between two points in time or between paths. For instance, two peers may want to use this procedure before switching to a different network for their communication, in order to make it more difficult to understand that the continued communication over the new network is taking place between the same two peers.</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 "OSCORE IDs 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. Like in KUDOS, 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 KUDOS (see <xref target="sec-rekeying-method"/>) using its FS mode or no-FS mode (see <xref target="no-fs-mode"/>).</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 peer 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 IDs update procedure.  </t>
          <t>
A peer can safely discard the old OSCORE Security Context including the old 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 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 IDs update procedure. That is, both KUDOS and the OSCORE IDs update procedure MUST be run either in their forward message flow or in their reverse message flow.  </t>
          <t>
The new OSCORE Sender/Recipient IDs MUST NOT be used with the OSCORE Security Context CTX_OLD, and MUST NOT be used with the temporary OSCORE Security Context 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 IDs procedure with another peer as failed, in case, after having sent the first OSCORE IDs update message for the procedure in question, a pre-defined amount of time has elapsed without receiving and successfully verifying the second OSCORE IDs update message from the other peer. It is RECOMMENDED 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 IDs procedure with another peer as successful, in any of the following two cases.</t>
      <ul spacing="normal">
        <li>The peer is acting as initiator, and it has received and successfully verified the second OSCORE IDs update message from the other peer.</li>
        <li>The peer is acting as responder, and it has sent the second OSCORE IDs update message to the other peer.</li>
      </ul>
      <t>A peer MUST NOT initiate an OSCORE IDs procedure with another peer, if it has another such procedure ongoing with that other peer.</t>
      <t>Upon receiving a valid OSCORE IDs update message, a responder that supports the OSCORE IDs update procedure MUST send the second OSCORE IDs update message, except in the following case.</t>
      <ul spacing="normal">
        <li>
          <t>The received OSCORE IDs update messages is not a KUDOS message (i.e., the OSCORE IDs 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 MUST also reply to the received OSCORE IDs update request message with a protected 5.03 (Service Unavailable) error response. The error response MUST NOT include the Recipient-ID Option, and its diagnostic payload MAY 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 lenght of the option value is equal to the maximum lenght 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 IDs 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 IDs update procedure, run integrated in an execution of KUDOS and in the forward message flow.</t>
          <figure anchor="fig-id-update-client-init">
            <name>Example of the OSCORE IDs Update forward message flow</name>
            <artwork 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>
          </figure>
          <t>Before the OSCORE IDs 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 IDs 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 current client's 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 current server's 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 successfull 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 IDs 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 IDs update procedure, run integrated in an execution of KUDOS and in the reverse message flow.</t>
          <figure anchor="fig-id-update-server-init">
            <name>Example of the OSCORE IDs Update reverse message flow</name>
            <artwork 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>
          </figure>
          <t>Before the OSCORE IDs 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 current client's 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 IDs 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 current server's 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 current client's 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 current server's 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 successfull 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 Stand-Alone Execution</name>
          <t>After having experienced a loss of state, a peer MUST NOT participate in a stand-alone OSCORE IDs 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 or the EDHOC protocol <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 reboot.</t>
          <t>Furthermore, when participating in a stand-alone OSCORE IDs update procedure, a peer performs the following additional steps.</t>
          <ul spacing="normal">
            <li>When a peer sends an OSCORE IDs update message, the value of the Recipient-ID Option that the peer specifies as its new intended OSCORE Recipient ID MUST 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).</li>
            <li>When receiving an OSCORE IDs update message, the peer MUST 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).</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 IDs 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>MUST 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 MUST NOT update the stored value associated with the corresponding Observe registration request; and</li>
              <li>MUST 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"/>.</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>MUST 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 MUST NOT update the stored value associated with the corresponding Observe registration request; and</li>
              <li>MUST 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"/>.</li>
            </ul>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document mainly covers security considerations about using AEAD keys in OSCORE and their usage limits, in addition to the security considerations of <xref target="RFC8613"/>.</t>
      <t>Depending on the specific key update procedure used to establish a new OSCORE Security Context, the related security considerations also apply.</t>
      <t>As mentioned in <xref target="ssec-derive-ctx"/>, it is RECOMMENDED that the size for nonces N1 and N2 is 8 bytes. The application needs to set the size of each nonce such that the probability of its value being repeated is negligible. Note that the probability of collision of nonce values is heightened by the birthday paradox. However, considering a nonce size of 8 bytes there will be a collision on average after approximately 2^32 instances of Response #1 messages. Overall the size of the nonces N1 and N2 should be set such that the security level is harmonized with other components of the deployment. Considering the constraints of embedded implementations, there might be a need for allowing N1 and N2 values that are smaller in size. These smaller values can be permitted, provided that their safety within the system can be assured.</t>
      <t>The nonces exchanged in the KUDOS messages are sent in the clear, so using random nonces is best for privacy (as opposed to, e.g., a counter, which might leak some information about the client).</t>
      <t>[TODO: Add more considerations.]</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 "CoRE Parameters" registry group.</t>
        <artwork align="center"><![CDATA[
+--------+--------------+------------+
| Number |     Name     | Reference  |
+--------+--------------+------------+
| TBD24  | Recipient-ID | [RFC-XXXX] |
+--------+--------------+------------+
]]></artwork>
        <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 anchor="iana-cons-flag-bits">
        <name>OSCORE Flag Bits Registry</name>
        <t>IANA is asked to add the following entries to the "OSCORE Flag Bits" registry within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <artwork><![CDATA[
+----------+-------------+-------------------------------+------------+
| Bit      | Name        | Description                   | Reference  |
| Position |             |                               |            |
+----------+-------------+-------------------------------+------------+
|     0    | Extension-1 | Set to 1 if the OSCORE Option | [RFC-XXXX] |
|          | Flag        | specifies a second byte,      |            |
|          |             | which includes the OSCORE     |            |
|          |             | flag bits 8-15                |            |
+----------+-------------+-------------------------------+------------+
|     8    | Extension-2 | Set to 1 if the OSCORE Option | [RFC-XXXX] |
|          | Flag        | specifies a third byte,       |            |
|          |             | which includes the OSCORE     |            |
|          |             | flag bits 16-23               |            |
+----------+-------------+-------------------------------+------------+
|    15    | Nonce Flag  | Set to 1 if nonce is present  | [RFC-XXXX] |
|          |             | in the compressed COSE object |            |
+----------+-------------+-------------------------------+------------+
|    16    | Extension-3 | Set to 1 if the OSCORE Option | [RFC-XXXX] |
|          | Flag        | specifies a fourth byte,      |            |
|          |             | which includes the OSCORE     |            |
|          |             | flag bits 24-31               |            |
|          |             |                               |            |
+----------+-------------+-------------------------------+------------+
|    24    | Extension-4 | Set to 1 if the OSCORE Option | [RFC-XXXX] |
|          | Flag        | specifies a fifth byte,       |            |
|          |             | which includes the OSCORE     |            |
|          |             | flag bits 32-39               |            |
|          |             |                               |            |
+----------+-------------+-------------------------------+------------+
|    32    | Extension-5 | Set to 1 if the OSCORE Option | [RFC-XXXX] |
|          | Flag        | specifies a sixth byte,       |            |
|          |             | which includes the OSCORE     |            |
|          |             | flag bits 40-47               |            |
|          |             |                               |            |
+----------+-------------+-------------------------------+------------+
|    40    | Extension-6 | Set to 1 if the OSCORE Option | [RFC-XXXX] |
|          | Flag        | specifies a seventh byte,     |            |
|          |             | which includes the OSCORE     |            |
|          |             | flag bits 48-55               |            |
|          |             |                               |            |
+----------+-------------+-------------------------------+------------+
|    48    | Extension-7 | Set to 1 if the OSCORE Option | [RFC-XXXX] |
|          | Flag        | specifies an eigth byte,      |            |
|          |             | which includes the OSCORE     |            |
|          |             | flag bits 56-63               |            |
|          |             |                               |            |
+----------+-------------+-------------------------------+------------+
]]></artwork>
        <t>In the same registry, IANA is asked to mark as 'Unassigned' the entry with Bit Position of 1, i.e., to update the entry as follows.</t>
        <artwork><![CDATA[
+----------+------------------+--------------------------+------------+
| Bit      | Name             | Description              | Reference  |
| Position |                  |                          |            |
+----------+------------------+--------------------------+------------+
|     1    | Unassigned       |                          |            |
+----------+------------------+--------------------------+------------+
]]></artwork>
      </section>
      <section anchor="iana-edhoc-aad">
        <name>EDHOC External Authorization Data Registry</name>
        <t>IANA is asked to add the following entries to the "EDHOC External Authorization Data" registry within the "Ephemeral Diffie-Hellman Over COSE (EDHOC)" registry group.</t>
        <artwork><![CDATA[
+---------+--------------------------------------+--------------------+
| Label   | Description                          | Reference          |
+---------+--------------------------------------+--------------------+
| TBD1    | Indicates whether this peer supports | [RFC-XXXX]         |
|         | KUDOS and in which mode(s)           |                    |
+---------+--------------------------------------+--------------------+
]]></artwork>
      </section>
      <section anchor="well-known-kudos">
        <name>The Well-Known URI Registry</name>
        <t>IANA is asked to add the 'kudos' well-known URI to the Well-Known URIs registry as defined by <xref target="RFC8615"/>.</t>
        <ul spacing="normal">
          <li>URI suffix: kudos</li>
          <li>Change controller: IETF</li>
          <li>Specification document(s): [RFC-XXXX]</li>
          <li>Related information: None</li>
        </ul>
      </section>
      <section anchor="rt-kudos">
        <name>Resource Type (rt=) Link Target Attribute Values Registry</name>
        <t>IANA is requested to add the resource type "core.kudos" to the "Resource Type (rt=) Link Target Attribute Values" registry under the registry group "Constrained RESTful Environments (CoRE) Parameters".</t>
        <ul spacing="normal">
          <li>Value: "core.kudos"</li>
          <li>Description: KUDOS resource.</li>
          <li>Reference: [RFC-XXXX]</li>
        </ul>
      </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="RFC5869" target="https://www.rfc-editor.org/info/rfc5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </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-lake-edhoc" target="https://datatracker.ietf.org/doc/html/draft-ietf-lake-edhoc-20">
          <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="7" month="July" year="2023"/>
            <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-20"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC7554" target="https://www.rfc-editor.org/info/rfc7554">
          <front>
            <title>Using IEEE 802.15.4e Time-Slotted Channel Hopping (TSCH) in the Internet of Things (IoT): Problem Statement</title>
            <author fullname="T. Watteyne" initials="T." role="editor" surname="Watteyne"/>
            <author fullname="M. Palattella" initials="M." surname="Palattella"/>
            <author fullname="L. Grieco" initials="L." surname="Grieco"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This document describes the environment, problem statement, and goals for using the Time-Slotted Channel Hopping (TSCH) Medium Access Control (MAC) protocol of IEEE 802.14.4e in the context of Low-Power and Lossy Networks (LLNs). The set of goals enumerated in this document form an initial set only.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7554"/>
          <seriesInfo name="DOI" value="10.17487/RFC7554"/>
        </reference>
        <reference anchor="RFC8180" target="https://www.rfc-editor.org/info/rfc8180">
          <front>
            <title>Minimal IPv6 over the TSCH Mode of IEEE 802.15.4e (6TiSCH) Configuration</title>
            <author fullname="X. Vilajosana" initials="X." role="editor" surname="Vilajosana"/>
            <author fullname="K. Pister" initials="K." surname="Pister"/>
            <author fullname="T. Watteyne" initials="T." surname="Watteyne"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>This document describes a minimal mode of operation for an IPv6 over the TSCH mode of IEEE 802.15.4e (6TiSCH) network. This minimal mode of operation specifies the baseline set of protocols that need to be supported and the recommended configurations and modes of operation sufficient to enable a 6TiSCH functional network. 6TiSCH provides IPv6 connectivity over a Time-Slotted Channel Hopping (TSCH) mesh composed of IEEE Std 802.15.4 TSCH links. This minimal mode uses a collection of protocols with the respective configurations, including the IPv6 Low-Power Wireless Personal Area Network (6LoWPAN) framework, enabling interoperable IPv6 connectivity over IEEE Std 802.15.4 TSCH. This minimal configuration provides the necessary bandwidth for network and security bootstrapping and defines the proper link between the IETF protocols that interface to IEEE Std 802.15.4 TSCH. This minimal mode of operation should be implemented by all 6TiSCH-compliant devices.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="210"/>
          <seriesInfo name="RFC" value="8180"/>
          <seriesInfo name="DOI" value="10.17487/RFC8180"/>
        </reference>
        <reference anchor="RFC9031" target="https://www.rfc-editor.org/info/rfc9031">
          <front>
            <title>Constrained Join Protocol (CoJP) for 6TiSCH</title>
            <author fullname="M. Vučinić" initials="M." role="editor" surname="Vučinić"/>
            <author fullname="J. Simon" initials="J." surname="Simon"/>
            <author fullname="K. Pister" initials="K." surname="Pister"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes the minimal framework required for a new device, called a "pledge", to securely join a 6TiSCH (IPv6 over the Time-Slotted Channel Hopping mode of IEEE 802.15.4) network. The framework requires that the pledge and the JRC (Join Registrar/Coordinator, a central entity), share a symmetric key. How this key is provisioned is out of scope of this document. Through a single CoAP (Constrained Application Protocol) request-response exchange secured by OSCORE (Object Security for Constrained RESTful Environments), the pledge requests admission into the network, and the JRC configures it with link-layer keying material and other parameters. The JRC may at any time update the parameters through another request-response exchange secured by OSCORE. This specification defines the Constrained Join Protocol and its CBOR (Concise Binary Object Representation) data structures, and it describes how to configure the rest of the 6TiSCH communication stack for this join process to occur in a secure manner. Additional security mechanisms may be added on top of this minimal framework.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9031"/>
          <seriesInfo name="DOI" value="10.17487/RFC9031"/>
        </reference>
        <reference anchor="RFC9200" target="https://www.rfc-editor.org/info/rfc9200">
          <front>
            <title>Authentication and Authorization for Constrained Environments Using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This specification defines a framework for authentication and authorization in Internet of Things (IoT) environments called ACE-OAuth. The framework is based on a set of building blocks including OAuth 2.0 and the Constrained Application Protocol (CoAP), thus transforming a well-known and widely used authorization solution into a form suitable for IoT devices. Existing specifications are used where possible, but extensions are added and profiles are defined to better serve the IoT use cases.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9200"/>
          <seriesInfo name="DOI" value="10.17487/RFC9200"/>
        </reference>
        <reference anchor="RFC9203" target="https://www.rfc-editor.org/info/rfc9203">
          <front>
            <title>The Object Security for Constrained RESTful Environments (OSCORE) Profile of the Authentication and Authorization for Constrained Environments (ACE) Framework</title>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="M. Gunnarsson" initials="M." surname="Gunnarsson"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document specifies a profile for the Authentication and Authorization for Constrained Environments (ACE) framework. It utilizes Object Security for Constrained RESTful Environments (OSCORE) to provide communication security and proof-of-possession for a key owned by the client and bound to an OAuth 2.0 access token.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9203"/>
          <seriesInfo name="DOI" value="10.17487/RFC9203"/>
        </reference>
        <reference anchor="RFC9176" target="https://www.rfc-editor.org/info/rfc9176">
          <front>
            <title>Constrained RESTful Environments (CoRE) Resource Directory</title>
            <author fullname="C. Amsüss" initials="C." role="editor" surname="Amsüss"/>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="M. Koster" initials="M." surname="Koster"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. van der Stok" initials="P." surname="van der Stok"/>
            <date month="April" year="2022"/>
            <abstract>
              <t>In many Internet of Things (IoT) applications, direct discovery of resources is not practical due to sleeping nodes or networks where multicast traffic is inefficient. These problems can be solved by employing an entity called a Resource Directory (RD), which contains information about resources held on other servers, allowing lookups to be performed for those resources. The input to an RD is composed of links, and the output is composed of links constructed from the information stored in the RD. This document specifies the web interfaces that an RD supports for web servers to discover the RD and to register, maintain, look up, and remove information on resources. Furthermore, new target attributes useful in conjunction with an RD are defined.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9176"/>
          <seriesInfo name="DOI" value="10.17487/RFC9176"/>
        </reference>
        <reference anchor="RFC8615" target="https://www.rfc-editor.org/info/rfc8615">
          <front>
            <title>Well-Known Uniform Resource Identifiers (URIs)</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="May" year="2019"/>
            <abstract>
              <t>This memo defines a path prefix for "well-known locations", "/.well-known/", in selected Uniform Resource Identifier (URI) schemes.</t>
              <t>In doing so, it obsoletes RFC 5785 and updates the URI schemes defined in RFC 7230 to reserve that space. It also updates RFC 7595 to track URI schemes that support well-known URIs in their registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8615"/>
          <seriesInfo name="DOI" value="10.17487/RFC8615"/>
        </reference>
        <reference anchor="RFC8724" target="https://www.rfc-editor.org/info/rfc8724">
          <front>
            <title>SCHC: Generic Framework for Static Context Header Compression and Fragmentation</title>
            <author fullname="A. Minaburo" initials="A." surname="Minaburo"/>
            <author fullname="L. Toutain" initials="L." surname="Toutain"/>
            <author fullname="C. Gomez" initials="C." surname="Gomez"/>
            <author fullname="D. Barthel" initials="D." surname="Barthel"/>
            <author fullname="JC. Zuniga" initials="JC." surname="Zuniga"/>
            <date month="April" year="2020"/>
            <abstract>
              <t>This document defines the Static Context Header Compression and fragmentation (SCHC) framework, which provides both a header compression mechanism and an optional fragmentation mechanism. SCHC has been designed with Low-Power Wide Area Networks (LPWANs) in mind.</t>
              <t>SCHC compression is based on a common static context stored both in the LPWAN device and in the network infrastructure side. This document defines a generic header compression mechanism and its application to compress IPv6/UDP headers.</t>
              <t>This document also specifies an optional fragmentation and reassembly mechanism. It can be used to support the IPv6 MTU requirement over the LPWAN technologies. Fragmentation is needed for IPv6 datagrams that, after SCHC compression or when such compression was not possible, still exceed the Layer 2 maximum payload size.</t>
              <t>The SCHC header compression and fragmentation mechanisms are independent of the specific LPWAN technology over which they are used. This document defines generic functionalities and offers flexibility with regard to parameter settings and mechanism choices. This document standardizes the exchange over the LPWAN between two SCHC entities. Settings and choices specific to a technology or a product are expected to be grouped into profiles, which are specified in other documents. Data models for the context and profiles are out of scope.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8724"/>
          <seriesInfo name="DOI" value="10.17487/RFC8724"/>
        </reference>
        <reference anchor="RFC8824" target="https://www.rfc-editor.org/info/rfc8824">
          <front>
            <title>Static Context Header Compression (SCHC) for the Constrained Application Protocol (CoAP)</title>
            <author fullname="A. Minaburo" initials="A." surname="Minaburo"/>
            <author fullname="L. Toutain" initials="L." surname="Toutain"/>
            <author fullname="R. Andreasen" initials="R." surname="Andreasen"/>
            <date month="June" year="2021"/>
            <abstract>
              <t>This document defines how to compress Constrained Application Protocol (CoAP) headers using the Static Context Header Compression and fragmentation (SCHC) framework. SCHC defines a header compression mechanism adapted for Constrained Devices. SCHC uses a static description of the header to reduce the header's redundancy and size. While RFC 8724 describes the SCHC compression and fragmentation framework, and its application for IPv6/UDP headers, this document applies SCHC to CoAP headers. The CoAP header structure differs from IPv6 and UDP, since CoAP uses a flexible header with a variable number of options, themselves of variable length. The CoAP message format is asymmetric: the request messages have a header format different from the format in the response messages. This specification gives guidance on applying SCHC to flexible headers and how to leverage the asymmetry for more efficient compression Rules.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8824"/>
          <seriesInfo name="DOI" value="10.17487/RFC8824"/>
        </reference>
        <reference anchor="I-D.irtf-cfrg-aead-limits" target="https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-aead-limits-07">
          <front>
            <title>Usage Limits on AEAD Algorithms</title>
            <author fullname="Felix Günther" initials="F." surname="Günther">
              <organization>ETH Zurich</organization>
            </author>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="31" month="May" year="2023"/>
            <abstract>
              <t>   An Authenticated Encryption with Associated Data (AEAD) algorithm
   provides confidentiality and integrity.  Excessive use of the same
   key can give an attacker advantages in breaking these properties.
   This document provides simple guidance for users of common AEAD
   functions about how to limit the use of keys in order to bound the
   advantage given to an attacker.  It considers limits in both single-
   and multi-key settings.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-aead-limits-07"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-key-limits" target="https://datatracker.ietf.org/doc/html/draft-ietf-core-oscore-key-limits-01">
          <front>
            <title>Key Usage Limits for OSCORE</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="10" month="July" year="2023"/>
            <abstract>
              <t>   Object Security for Constrained RESTful Environments (OSCORE) uses
   AEAD algorithms to ensure confidentiality and integrity of exchanged
   messages.  Due to known issues allowing forgery attacks against AEAD
   algorithms, limits should be followed on the number of times a
   specific key is used for encryption or decryption.  Among other
   reasons, approaching key usage limits requires updating the OSCORE
   keying material before communications can securely continue.  This
   document defines how two OSCORE peers can follow these key usage
   limits and what steps they should take to preserve the security of
   their communications.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-key-limits-01"/>
        </reference>
        <reference anchor="LwM2M" target="http://www.openmobilealliance.org/release/LightweightM2M/V1_2-20201110-A/OMA-TS-LightweightM2M_Core-V1_2-20201110-A.pdf">
          <front>
            <title>Lightweight Machine to Machine Technical Specification - Core, Approved Version 1.2, OMA-TS-LightweightM2M_Core-V1_2-20201110-A</title>
            <author>
              <organization>Open Mobile Alliance</organization>
            </author>
            <date year="2020" month="November"/>
          </front>
        </reference>
        <reference anchor="LwM2M-Transport" target="http://www.openmobilealliance.org/release/LightweightM2M/V1_2-20201110-A/OMA-TS-LightweightM2M_Transport-V1_2-20201110-A.pdf">
          <front>
            <title>Lightweight Machine to Machine Technical Specification - Transport Bindings, Approved Version 1.2, OMA-TS-LightweightM2M_Transport-V1_2-20201110-A</title>
            <author>
              <organization>Open Mobile Alliance</organization>
            </author>
            <date year="2020" month="November"/>
          </front>
        </reference>
      </references>
    </references>
    <section anchor="sec-id-update-in-kudos">
      <name>Examples of OSCORE ID Updates Integrated in KUDOS</name>
      <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 IDs update procedure, run integrated in an execution of KUDOS and in the forward message flow. 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 IDs Update forward message flow integrated in a KUDOS execution.</name>
          <artwork 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>
        </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 IDs update procedure, run integrated in an execution of KUDOS and in the reverse message flow. 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 IDs Update reverse message flow integrated in a KUDOS execution.</name>
          <artwork 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: N1|N2        |           Comb(N1,N2),
                        |  kid: 0x01           |           CTX_OLD)
                        |  ...                 |
                        | }                    | 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>
        </figure>
      </section>
    </section>
    <section anchor="sec-document-updates">
      <name>Document Updates</name>
      <t>RFC EDITOR: PLEASE REMOVE THIS SECTION.</t>
      <section anchor="sec-04-05">
        <name>Version -04 to -05</name>
        <ul spacing="normal">
          <li>Note on client retransmissions if KUDOS execution fails in reverse message flow.</li>
          <li>Specify what information needs to be written to non-volatile memory to handle reboots.</li>
          <li>Extended recommendations and considerations on minimum size of nonces N1 &amp; N2.</li>
          <li>Arbitrary maximum size of the Recipient-ID Option.</li>
          <li>Detailed lifecycle of the OSCORE IDs update procedure.</li>
          <li>Described examples of OSCORE IDs update procedure.</li>
          <li>Examples of OSCORE IDs update procedure integrated in KUDOS.</li>
          <li>Considerations about using SCHC for CoAP with OSCORE.</li>
          <li>Clarifications and editorial improvements.</li>
        </ul>
      </section>
      <section anchor="sec-03-04">
        <name>Version -03 to -04</name>
        <ul spacing="normal">
          <li>Removed content about key usage limits.</li>
          <li>Use of "forward message flow" and "reverse message flow".</li>
          <li>Update to RFC 8613 extended to include protection of responses.</li>
          <li>Include EDHOC_KeyUpdate() in the methods for rekeying.</li>
          <li>Describe reasons for using the OSCORE ID update procedure.</li>
          <li>Clarifications on deletion of CTX_OLD and CTX_NEW.</li>
          <li>Added new section on preventing deadlocks.</li>
          <li>Clarified that peers can decide to run KUDOS at any point.</li>
          <li>Defined preservation of observations beyond OSCORE ID updates.</li>
          <li>Revised discussion section, including also communication overhead.</li>
          <li>Defined a well-known KUDOS resource and a KUDOS resource type.</li>
          <li>Editorial improvements.</li>
        </ul>
      </section>
      <section anchor="sec-02-03">
        <name>Version -02 to -03</name>
        <ul spacing="normal">
          <li>Use of the OSCORE flag bit 0 to signal more flag bits.</li>
          <li>In UpdateCtx(), open for future key derivation different than HKDF.</li>
          <li>Simplified updateCtx() to use only Expand(); used to be METHOD 2.</li>
          <li>Included the Partial IV if the second KUDOS message is a response.</li>
          <li>Added signaling of support for KUDOS in EDHOC.</li>
          <li>Clarifications on terminology and reasons for rekeying.</li>
          <li>Updated IANA considerations.</li>
          <li>Editorial improvements.</li>
        </ul>
      </section>
      <section anchor="sec-01-02">
        <name>Version -01 to -02</name>
        <ul spacing="normal">
          <li>Extended terminology.</li>
          <li>Moved procedure for preserving observations across key updates to main body.</li>
          <li>Moved procedure to update OSCORE Sender/Recipient IDs to main body.</li>
          <li>Moved key update without forward secrecy section to main body.</li>
          <li>Define signaling bits present in the 'x' byte.</li>
          <li>Modifications and alignment of updateCtx() with EDHOC.</li>
          <li>Rules for deletion of old EDHOC keys PRK_out and PRK_exporter.</li>
          <li>Describe CBOR wrapping of involved nonces with examples.</li>
          <li>Renamed 'id detail' to 'nonce'.</li>
          <li>Editorial improvements.</li>
        </ul>
      </section>
      <section anchor="sec-00-01">
        <name>Version -00 to -01</name>
        <ul spacing="normal">
          <li>Recommendation on limits for CCM_8. Details in Appendix.</li>
          <li>Improved message processing, also covering corner cases.</li>
          <li>Example of method to estimate and not store 'count_q'.</li>
          <li>Added procedure to update OSCORE Sender/Recipient IDs.</li>
          <li>Added method for preserving observations across key updates.</li>
          <li>Added key update without forward secrecy.</li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank <contact fullname="Christian Amsüss"/>, <contact fullname="Carsten Bormann"/>, <contact fullname="John Preuß Mattsson"/>, <contact fullname="Göran Selander"/>, and <contact fullname="Rafa Marin-Lopez"/> 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:
H4sIAAAAAAAAA+2921YbSbYo+s5X5MBjbKBbkpHAl6LaPQ4G3GaVjX0AV3mN
VWt7JFIKZVtSqjNTxrTN+pX9F/vpvK0fO/MW14xMSRhXuXqZHu4CKSMyYsaM
eb+02+21D3vRztpamZbjZC+KfkquozezQVwm0TDLo1dnB69Oj6LNn94cvjrb
WosvLvIEBjQ/Ncj603gCsw3yeFi206QctvtZnrSzgv7zPrluz2l0ewz/V5Rr
a/eiooyng3fxOJvCwDKfJ2tr6SynX4uyt739w3ZvLc6TeC86npZJPk3KtavL
vegggxf/kuXv0+ll9Lc8m8/W3l+ZZ9qHuIS1flzuwRsGa8X8YpIWRZpNy+sZ
vOj46PzZGq+l2IseP+wCKPrZACbbi+aw7MdrsxSgEkX3on48jeZFEsV5Hl9H
m+kwisfj6DoptiIAwSguRtEoyWHZUVRm/T38Bn4tsrzMk2GxR3MMkmE8H5cF
PKG+v57w1/jnWjwvR1m+txbRT1v+G0XpFJ447UTP//v/Xo7n04H+guF8mr6P
80H12yyHbZwenx1F+0/1hwWsJwFwHBfx8O9ZPiguYwB91OvpJ/ppeQ1nnMKR
mM+yAbzo7Kjdfbi7ux2dwRbfj7LxxHpgPi1zGHd2lQySqf48mcTpeC/KaYmd
UUYr/H/ytFMk4W2+7ETn6Tjrx94mX8Z5P/O/+oZ2OMH1dUpan+xvbZrlk7hM
PyR4pKfPDnrd7g/y64PHD9Wvj3oPeurXh7td+fVx99Gu+hXwUv36wy4NO24f
duhijeP3STsZjADl4MZMh94bH+/uPlRzP3igJ+w+3pZff9jeUW/8Aa6Z+VW9
8Yfuo4dmHQ/Ur496erLH/CstKce7Pswv23ESD9rjdJKWhbNenxCYR15cvey9
ZNx37wEd8qtZMo1eZhfpOIn2x+M0nvYZgYRyvUgvR+VVgv8PqNIfpdMEb5n6
9Tzpj6ZpPx5HZ7Oknw7h1xKoQNQGCpInrWh/NsuzD8kg+jnJkTxE3U6vFb16
ud8+P2tbc8MS3+GI9s/dd712b7u33e12t9v7tBQkI3sRftjudnlxcX6JqDgq
y9ne/ftXV1edDDYyoX3Eso0ObPB+nsAHRXLffdd97zX3l19RZzYYKqi2z/N4
WsyAFv328NWvjp6mU6SsxWrQ1uO/LZDXLovgvpZMS6QxsKKzoxfP9qL1/4Cb
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
7G53Ydbegx+2Omv/P2XRGKEsFwIA

-->

</rfc>
