<?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-06" category="std" consensus="true" submissionType="IETF" updates="8613" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.2 -->
  <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-06"/>
    <author initials="R." surname="Höglund" fullname="Rikard Höglund">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>rikard.hoglund@ri.se</email>
      </address>
    </author>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <date year="2023" month="October" day="23"/>
    <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>
          <t>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"/>.</t>
        </li>
        <li>
          <t>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".</t>
        </li>
        <li>
          <t>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.</t>
        </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>
            <t>Initiator: the peer starting the KUDOS execution, by sending the first KUDOS message.</t>
          </li>
          <li>
            <t>Responder: the peer that receives the first KUDOS message in a KUDOS execution.</t>
          </li>
          <li>
            <t>Forward message flow: the KUDOS execution workflow where the initiator acts as CoAP client (see <xref target="ssec-derive-ctx-client-init"/>).</t>
          </li>
          <li>
            <t>Reverse message flow: the KUDOS execution workflow where the initiator acts as CoAP server (see <xref target="ssec-derive-ctx-server-init"/>).</t>
          </li>
          <li>
            <t>FS mode: the KUDOS execution mode that achieves forward secrecy (see <xref target="ssec-derive-ctx"/>).</t>
          </li>
          <li>
            <t>No-FS mode: the KUDOS execution mode that does not achieve forward secrecy (see <xref target="no-fs-mode"/>).</t>
          </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>
          <t>
Note that EDHOC may be run standalone or as part of other workflows, such as when using the EDHOC and OSCORE profile of ACE <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>.</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>
          <t>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, by running KUDOS in the forward message flow <xref target="ssec-derive-ctx"/> or reverse message flow <xref target="ssec-derive-ctx-server-init"/>, respectively. A peer that supports KUDOS MUST support both the forward message flow and the reverse message flow.</t>
        </li>
        <li>
          <t>The new OSCORE Security Context enjoys forward secrecy, unless KUDOS is run in no-FS mode (see <xref target="no-fs-mode"/>).</t>
        </li>
        <li>
          <t>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.</t>
        </li>
        <li>
          <t>KUDOS is robust against a peer rebooting, and it especially avoids the reuse of AEAD (nonce, key) pairs.</t>
        </li>
        <li>
          <t>KUDOS completes in one round trip by exchanging two CoAP messages. The two peers achieve mutual key confirmation in the following exchange, which is protected with the newly established OSCORE Security Context.</t>
        </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. The registration of this flag bit in the "OSCORE Flag Bits" registry 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 field 'x' and a field 'nonce', to be used for the steps defined in <xref target="ssec-derive-ctx"/>. In particular, the 1 byte 'x' following 'kid context' (if any) encodes the size of the following field 'nonce', together with signaling bits that indicate the specific behavior to adopt during the KUDOS execution.  </t>
            <t>
Hereafter, a message is referred to as a "KUDOS (request/response) message", if and only if the second byte of flags is present and the 'd' bit is set to 1. If that is not the case, the message is referred to as a "non KUDOS (request/response) message".  </t>
            <t>
The encoding of 'x' is as follows:  </t>
            <ul spacing="normal">
              <li>
                <t>The four least significant bits encode the 'nonce' size in bytes minus 1, namely 'm'.</t>
              </li>
              <li>
                <t>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"/>.</t>
              </li>
              <li>
                <t>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"/>.</t>
              </li>
              <li>
                <t>The seventh least significant bit is the 'z' bit. When it is set to 1, the compressed COSE object contains a field 'y' and a field 'old_nonce', to be used for the steps defined in <xref target="ssec-derive-ctx"/>. In particular, the 1 byte 'y' following 'nonce' encodes the size of the following field 'old_nonce'. This bit SHALL only be set in the second KUDOS message and only if it is a CoAP request. For an example see the execution of KUDOS in the reverse message flow shown in <xref target="fig-message-exchange-server-init"/>.</t>
              </li>
              <li>
                <t>The eight least significant bit is reserved for future use. This bit SHALL be set to zero when not in use. According to this specification, if this bit is 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"/>.</t>
              </li>
            </ul>
            <t>
The encoding of 'y' is as follows:  </t>
            <ul spacing="normal">
              <li>
                <t>The four least significant bits of the 'y' byte encode the 'old_nonce' size in bytes minus 1, namely 'w'.</t>
              </li>
              <li>
                <t>The fifth to seventh least significant bits SHALL be set to zero when not in use. According to this specification, if 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"/></t>
              </li>
              <li>
                <t>The eight least significant bit is reserved for future use. This bit SHALL be set to zero when not in use. According to this specification, if this bit is 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"/>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>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"/>.</t>
          </li>
        </ul>
        <t><xref target="fig-oscore-option"/> shows extended OSCORE Option value, with the possible presence of 'nonce' and 'old_nonce'.</t>
        <figure anchor="fig-oscore-option">
          <name>The extended OSCORE Option value, with the possible presence of 'nonce' and 'old_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   |
                                 |  +-+-+-+-+-+-+-+-+  |
                                 |  |0|z|b|p|   m   |  |
                                 |  +-+-+-+-+-+-+-+-+  |

    <- 1 byte -> <--- w + 1 bytes --->
   +------------+---------------------+------------------+
   | y (if any) | old_nonce (if any)  | kid (if any) ... |
   +------------+---------------------+------------------+
  /              \____
 /                    |
/   0 1 2 3 4 5 6 7   |
|  +-+-+-+-+-+-+-+-+  |
|  |0|0|0|0|   w   |  |
|  +-+-+-+-+-+-+-+-+  |
]]></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 the 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-oscore-option-extensions"/>), 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.
either peer
   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. The X1 and X2 values are calculated by the sender peer based on: the length of nonce N1 and N2, specified in the 'nonce' field of the OSCORE Option of the first and second KUDOS message, respectively; as well as on the specific settings the peer wishes to run KUDOS with. 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>After a peer has generated or received the random value N1, and after a peer has calculated or received the value X1, it shall retain these in memory until it has received and processed the second KUDOS message.</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>
            <t>The initiator always offers the fresh value N1.</t>
          </li>
          <li>
            <t>The responder always offers the fresh value N2</t>
          </li>
          <li>
            <t>The responder is always the first one deriving CTX_NEW.</t>
          </li>
          <li>
            <t>The initiator is always the first one achieving key confirmation, hence the first one able to safely discard CTX_OLD.</t>
          </li>
          <li>
            <t>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.</t>
          </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 {             |
                        |  ...                 |
                        |  Partial IV: 0       |
                        |  ...                 |
                        |  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"/>) at "/.well-known/kudos". The client protects this CoAP request using CTX_1 and sends it to the server. When the client protects this request using OSCORE, it MUST use 0 as the value of Partial IV. 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 OSCORE Option, 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 when processing the first KUDOS message</name>
            <artwork><![CDATA[
   X1 and N1 expressed as raw values
   X1 = 0x07
   N1 = 0x018a278f7faab55a

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

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

   In updateCtx(), X_N is the byte concatenation of X_cbor and N_cbor
   X_N = 0x410748018a278f7faab55a
]]></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 when processing the second KUDOS message</name>
            <artwork><![CDATA[
   X1, X2, N1, and N2 expressed as raw values
   X1 = 0x07
   X2 = 0x07
   N1 = 0x018a278f7faab55a
   N2 = 0x25a8991cd700ac01

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

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

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

   In updateCtx(), X_N is the byte concatenation of X_cbor and N_cbor
   X_N = 0x44410741075248018a278f7faab55a4825a8991cd700ac01
]]></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 OSCORE Option, 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, even when NSTART is 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: N2           |           Comb(N1,N2),
                        |  y: w                |           CTX_OLD)
                        |  old_nonce: N1       |
                        |  ...                 |
                        | }                    |
                        | 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 OSCORE Option, 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 N2 as 'nonce' and N1 as 'old_nonce'. After that, the client deletes CTX_1.</t>
          <t>Upon receiving the OSCORE request, the server retrieves the values N1 from the 'old_nonce' field of the OSCORE Option, the value N2 from the 'nonce' field of the OSCORE Option, 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 the 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, even when NSTART is greater than 1 (see Section 4.7 of <xref 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>
              <t>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.</t>
            </li>
            <li>
              <t>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.</t>
            </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>
              <t>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 values X1 and N1 exchanged in the present KUDOS execution.</t>
            </li>
            <li>
              <t>The message verification inevitably fails. If PEER_1 is acting as CoAP server, it replies with an unprotected 4.01 (Unauthorized) CoAP response.</t>
            </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>
              <t>The client is a client-only device, i.e., it does not act as CoAP server and thus does not listen for incoming requests.</t>
            </li>
            <li>
              <t>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.</t>
            </li>
            <li>
              <t>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.</t>
            </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>
              <t>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.</t>
            </li>
            <li>
              <t>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.</t>
            </li>
          </ul>
          <t>Note that:</t>
          <ul spacing="normal">
            <li>
              <t>A peer running KUDOS can have none of the pairs above associated with another peer, only one, or both.</t>
            </li>
            <li>
              <t>A peer that has neither of the pairs above associated with another peer, cannot run KUDOS in any mode with that other peer.</t>
            </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>
                  <t>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.</t>
                </li>
                <li>
                  <t>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.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>A peer that is a non-CAPABLE device MUST support the no-FS mode.</t>
            </li>
            <li>
              <t>A peer that is a CAPABLE device MUST support the FS mode and the no-FS mode.</t>
            </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 are not stored on disk.</t>
            </li>
            <li>
              <t>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.</t>
            </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>
                    <t>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.</t>
                  </li>
                  <li>
                    <t>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.</t>
                  </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>
                        <t>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.</t>
                      </li>
                      <li>
                        <t>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.</t>
                      </li>
                      <li>
                        <t>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.</t>
                      </li>
                    </ul>
                  </li>
                  <li>
                    <t>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.</t>
                  </li>
                </ul>
              </li>
            </ul>
            <t>Following a state loss (e.g., due to a reboot), a device MUST first complete a successful KUDOS execution (with either of the workflows) before exchanging OSCORE-protected application data with another peer. An exception is a CAPABLE device implementing a functionality for safely reusing old keying material, such as the one defined in <xref section="B.1" sectionFormat="of" target="RFC8613"/>.</t>
          </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>
              <t>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.</t>
            </li>
            <li>
              <t>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.</t>
            </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>
              <t>If a peer A is a non-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.</t>
            </li>
            <li>
              <t>If a peer A is a CAPABLE device, it SHOULD run KUDOS only in 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 be 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>
                  <t>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.</t>
                </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 a non-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 such latter value is 0 and the responder is a non-CAPABLE device. More specifically:</t>
          <ul spacing="normal">
            <li>
              <t>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.</t>
            </li>
            <li>
              <t>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.</t>
            </li>
            <li>
              <t>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.</t>
            </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 consider the KUDOS execution unsuccessful and 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. This response is a KUDOS message, and it MUST have the 'd' bit and the 'p' bit 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), since the 'p' bit in the error response is set to 1, while the 'p' bit in the corresponding request was set to 0. Hence, the initiator MUST consider the KUDOS execution unsuccessful, and 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 MUST consider the KUDOS execution unsuccessful and MUST send 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, the initiator learns that the responder is a non-CAPABLE device (and hence not able to run KUDOS in FS mode), since the 'p' bit in the request is set to 1, while the 'p' bit in the response previously sent as first KUDOS message was set to 0. Also, the initiator SHOULD NOT send any response to such a request, and the responder SHOULD NOT expect any such response.</t>
                </li>
              </ul>
              <t>
In either case, both KUDOS peers delete the OSCORE Security Contexts CTX_1 and CTX_NEW. Also, both peers MUST retain CTX_OLD for use during the next KUDOS execution in the no-FS mode. This is in contrast with the typical behavior where CTX_OLD is deleted upon reception of a message protected with CTX_NEW.</t>
            </li>
          </ul>
        </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, e.g., 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>
              <t>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.</t>
            </li>
            <li>
              <t>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.</t>
            </li>
            <li>
              <t>The peer X determines the value PIV* as the highest OSCORE Partial IV value among those considered at step 2.</t>
            </li>
            <li>
              <t>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.</t>
            </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 or equal 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>
            <t>Outgoing non KUDOS messages MUST be protected by using only CTX_NEW.</t>
          </li>
          <li>
            <t>Incoming non KUDOS messages MUST first be attempted to decrypt by using CTX_NEW. If decryption fails, a second attempt can use CTX_OLD.</t>
          </li>
          <li>
            <t>When an amount of time defined by the policy has elapsed since the establishment of CTX_NEW, the peer deletes CTX_OLD.</t>
          </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 that are not KUDOS messages and that are 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>Another case is 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>
              <t>The second byte of the OSCORE option.</t>
            </li>
            <li>
              <t>The byte 'x' of the OSCORE option.</t>
            </li>
            <li>
              <t>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.</t>
            </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[
+-------+---------------------------+---------------------------+
|       | Forward message flow      | Reverse message flow      |
+-------+---------+---------+-------+---------------------------+
| Nonce | First   | Second  | Total | First   | Second  | Total |
| size  | KUDOS   | KUDOS   |       | KUDOS   | KUDOS   |       |
|       | message | message |       | message | message |       |
+-------+---------+---------+-------+---------+---------+-------+
| 1     | 3       | 3       | 6     | 3       | 4       | 7     |
+-------+-------------------+-------+---------+---------+-------+
| 8     | 10      | 10      | 20    | 10      | 11      | 21    |
+-------+---------+-----------------+---------+---------+-------+
| 16    | 18      | 18      | 36    | 18      | 19      | 37    |
+-------+---------+-----------------+---------+---------+-------+
]]></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>
            <t>The recipient peer does not support the KUDOS_EAD item.</t>
          </li>
          <li>
            <t>The KUDOS_EAD item is included in EDHOC message_1 with 'ead_value' different than ASK</t>
          </li>
          <li>
            <t>The KUDOS_EAD item is included in EDHOC message_2 or message_3 with 'ead_value' ASK.</t>
          </li>
          <li>
            <t>The KUDOS_EAD item is included in EDHOC message_4.</t>
          </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>
          <t>The peer is acting as initiator, and it has received and successfully verified the second OSCORE IDs update message from the other peer.</t>
        </li>
        <li>
          <t>The peer is acting as responder, and it has sent the second OSCORE IDs update message to the other peer.</t>
        </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, as 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, as 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>
              <t>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).</t>
            </li>
            <li>
              <t>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).</t>
            </li>
          </ul>
          <t>In order to fulfill the conditions above, a peer has to keep track of the OSCORE Sender/Recipient IDs that it has used with the current triplet (Master Secret, Master Salt, ID Context) since the latest update of the OSCORE Master Secret (e.g., performed by running KUDOS).</t>
        </section>
      </section>
      <section anchor="preserving-observations-across-id-updates">
        <name>Preserving Observations Across ID Updates</name>
        <t>When running the OSCORE 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>
                <t>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</t>
              </li>
              <li>
                <t>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"/>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If a peer is acting as CoAP server in an ongoing observation, then the peer:  </t>
            <ul spacing="normal">
              <li>
                <t>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</t>
              </li>
              <li>
                <t>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"/>.</t>
              </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 peers).</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 defined in <xref section="10.5" sectionFormat="of" target="I-D.ietf-lake-edhoc"/> 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>
            <t>URI suffix: kudos</t>
          </li>
          <li>
            <t>Change controller: IETF</t>
          </li>
          <li>
            <t>Specification document(s): [RFC-XXXX]</t>
          </li>
          <li>
            <t>Related information: None</t>
          </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>
            <t>Value: "core.kudos"</t>
          </li>
          <li>
            <t>Description: KUDOS resource.</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </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-22">
          <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="25" month="August" 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-22"/>
        </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="I-D.ietf-ace-edhoc-oscore-profile" target="https://datatracker.ietf.org/doc/html/draft-ietf-ace-edhoc-oscore-profile-03">
          <front>
            <title>Ephemeral Diffie-Hellman Over COSE (EDHOC) and Object Security for Constrained Environments (OSCORE) Profile for Authentication and Authorization for Constrained Environments (ACE)</title>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson</organization>
            </author>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE</organization>
            </author>
            <date day="23" month="October" year="2023"/>
            <abstract>
              <t>   This document specifies a profile for the Authentication and
   Authorization for Constrained Environments (ACE) framework.  It
   utilizes Ephemeral Diffie-Hellman Over COSE (EDHOC) for achieving
   mutual authentication between an OAuth 2.0 Client and Resource
   Server, and it binds an authentication credential of the Client to an
   OAuth 2.0 access token.  EDHOC also establishes an Object Security
   for Constrained RESTful Environments (OSCORE) Security Context, which
   is used to secure communications when accessing protected resources
   according to the authorization information indicated in the access
   token.  This profile can be used to delegate management of
   authorization information from a resource-constrained server to a
   trusted host with less severe limitations regarding processing power
   and memory.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-edhoc-oscore-profile-03"/>
        </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, as 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, as 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: N2           |           Comb(N1,N2),
                        |  y: w                |           CTX_OLD)
                        |  old_nonce: N1       |
                        |  kid: 0x01           |
                        |  ...                 |
                        | }                    | Verify with CTX_NEW
                        | Encrypted Payload {  |
                        |  ...                 | Discard CTX_OLD
                        |  Recipient-ID: 0x42  |
                        |  ...                 |
                        |  Application Payload |
                        | }                    |
                        |                      |
Update SID and          |                      | Update SID and
RID in CTX_NEW          |                      | RID in CTX_NEW
                        |                      |
 CTX_NEW {              |                      | CTX_NEW {
  SID = 0x78            |                      |  SID = 0x42
  RID = 0x42            |                      |  RID = 0x78
 }                      |                      | }
                        |                      |

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

                        |                      |
                        |      Response #2     |
                        |<---------------------| Protect with CTX_NEW
                        | OSCORE {             |
                        |  ...                 |
Verify with CTX_NEW     | }                    |
                        | Encrypted Payload {  |
Discard CTX_OLD         |  ...                 |
                        |  Application Payload |
                        | }                    |
                        |                      |
                        |      Request #3      |
Protect with CTX_NEW    |--------------------->| /temp
                        | OSCORE {             |
                        |  ...                 |
                        |  kid: 0x78           | Verify with CTX_NEW
                        | }                    |
                        | Encrypted Payload {  |
                        |  ...                 |
                        |  Application Payload |
                        | }                    |
                        |                      |
                        |      Response #3     |
                        |<---------------------| Protect with CTX_NEW
                        | OSCORE {             |
                        |  ...                 |
Verify with CTX_NEW     | }                    |
                        | Encrypted Payload {  |
                        |  ...                 |
                        |  Application Payload |
                        | }                    |
                        |                      |
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="sec-document-updates">
      <name>Document Updates</name>
      <t>RFC EDITOR: PLEASE REMOVE THIS SECTION.</t>
      <section anchor="sec-05-06">
        <name>Version -05 to -06</name>
        <ul spacing="normal">
          <li>
            <t>Mandate support for both the forward and reverse message flow.</t>
          </li>
          <li>
            <t>Mention the EDHOC and OSCORE profile of ACE as method for rekeying.</t>
          </li>
          <li>
            <t>Clarify definition of KUDOS (request/response) message.</t>
          </li>
          <li>
            <t>Further extend the OSCORE option to transport N1 in the second KUDOS message as a request.</t>
          </li>
          <li>
            <t>Mandate support for the no-FS mode on CAPABLE devices.</t>
          </li>
          <li>
            <t>Explain when KUDOS fails during selection of mode.</t>
          </li>
          <li>
            <t>Explicitly forbid using old keying material after reboot.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-04-05">
        <name>Version -04 to -05</name>
        <ul spacing="normal">
          <li>
            <t>Note on client retransmissions if KUDOS execution fails in reverse message flow.</t>
          </li>
          <li>
            <t>Specify what information needs to be written to non-volatile memory to handle reboots.</t>
          </li>
          <li>
            <t>Extended recommendations and considerations on minimum size of nonces N1 &amp; N2.</t>
          </li>
          <li>
            <t>Arbitrary maximum size of the Recipient-ID Option.</t>
          </li>
          <li>
            <t>Detailed lifecycle of the OSCORE IDs update procedure.</t>
          </li>
          <li>
            <t>Described examples of OSCORE IDs update procedure.</t>
          </li>
          <li>
            <t>Examples of OSCORE IDs update procedure integrated in KUDOS.</t>
          </li>
          <li>
            <t>Considerations about using SCHC for CoAP with OSCORE.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-03-04">
        <name>Version -03 to -04</name>
        <ul spacing="normal">
          <li>
            <t>Removed content about key usage limits.</t>
          </li>
          <li>
            <t>Use of "forward message flow" and "reverse message flow".</t>
          </li>
          <li>
            <t>Update to RFC 8613 extended to include protection of responses.</t>
          </li>
          <li>
            <t>Include EDHOC_KeyUpdate() in the methods for rekeying.</t>
          </li>
          <li>
            <t>Describe reasons for using the OSCORE ID update procedure.</t>
          </li>
          <li>
            <t>Clarifications on deletion of CTX_OLD and CTX_NEW.</t>
          </li>
          <li>
            <t>Added new section on preventing deadlocks.</t>
          </li>
          <li>
            <t>Clarified that peers can decide to run KUDOS at any point.</t>
          </li>
          <li>
            <t>Defined preservation of observations beyond OSCORE ID updates.</t>
          </li>
          <li>
            <t>Revised discussion section, including also communication overhead.</t>
          </li>
          <li>
            <t>Defined a well-known KUDOS resource and a KUDOS resource type.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-02-03">
        <name>Version -02 to -03</name>
        <ul spacing="normal">
          <li>
            <t>Use of the OSCORE flag bit 0 to signal more flag bits.</t>
          </li>
          <li>
            <t>In UpdateCtx(), open for future key derivation different than HKDF.</t>
          </li>
          <li>
            <t>Simplified updateCtx() to use only Expand(); used to be METHOD 2.</t>
          </li>
          <li>
            <t>Included the Partial IV if the second KUDOS message is a response.</t>
          </li>
          <li>
            <t>Added signaling of support for KUDOS in EDHOC.</t>
          </li>
          <li>
            <t>Clarifications on terminology and reasons for rekeying.</t>
          </li>
          <li>
            <t>Updated IANA considerations.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-01-02">
        <name>Version -01 to -02</name>
        <ul spacing="normal">
          <li>
            <t>Extended terminology.</t>
          </li>
          <li>
            <t>Moved procedure for preserving observations across key updates to main body.</t>
          </li>
          <li>
            <t>Moved procedure to update OSCORE Sender/Recipient IDs to main body.</t>
          </li>
          <li>
            <t>Moved key update without forward secrecy section to main body.</t>
          </li>
          <li>
            <t>Define signaling bits present in the 'x' byte.</t>
          </li>
          <li>
            <t>Modifications and alignment of updateCtx() with EDHOC.</t>
          </li>
          <li>
            <t>Rules for deletion of old EDHOC keys PRK_out and PRK_exporter.</t>
          </li>
          <li>
            <t>Describe CBOR wrapping of involved nonces with examples.</t>
          </li>
          <li>
            <t>Renamed 'id detail' to 'nonce'.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-00-01">
        <name>Version -00 to -01</name>
        <ul spacing="normal">
          <li>
            <t>Recommendation on limits for CCM_8. Details in Appendix.</t>
          </li>
          <li>
            <t>Improved message processing, also covering corner cases.</t>
          </li>
          <li>
            <t>Example of method to estimate and not store 'count_q'.</t>
          </li>
          <li>
            <t>Added procedure to update OSCORE Sender/Recipient IDs.</t>
          </li>
          <li>
            <t>Added method for preserving observations across key updates.</t>
          </li>
          <li>
            <t>Added key update without forward secrecy.</t>
          </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="Rafa Marin-Lopez"/>, <contact fullname="John Preuß Mattsson"/>, and <contact fullname="Göran Selander"/> for their feedback and comments.</t>
      <t>The work on this document has been partly supported by VINNOVA and the Celtic-Next project CRITISEC; and by the H2020 projects SIFIS-Home (Grant agreement 952652) and ARCADIAN-IoT (Grant agreement 101020259).</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
jtkPsX/2y69vj45ratYv9O0x6/jz1M6nUKY/BRNSp0DfUjFFxvcSALQ2YYvm
4ilU5bL5/SpFRNavtNm2yDACECvXGpJFAmIL6bBtzi6a5NWbM+C9e6zvogEd
1VeWO4KHRIEcJu6WsqKJGpQVmgvhEH59OzzPOcXvmH8XNGRI4Ug+Q31y6lgC
BoOMwp5kUnj1sc4TpEkxnxvWmGl7fWB23B6aKSMTFhfcGevnpXav0XK1ElSP
HnaycjDEXoEzpNvjC91XkNkDZxwpN5zKoO4eUi0JWBufBbuiAhfAfSGDV+Nz
+LiPjnk9ExADC5BP+NSidePNXu8oOIv5Z5JkF1hwIwAH3CrVQKhvEqHCSz7G
RdPijHpK1pHUMRTIrrFCCrmgJKwAF2aFDptYDWVyEeyWAH9t6OvUBF/YP5KE
NcvRbsV+Ns2TUgj28x8PnkV7KvVU3WYlPj/o9R3xWUViOfsiG+dsxpI7vk99
QY4zLA8oMQ5MBjkFT9ePSrjipM5+VZSBbJzoJLUTZb3VBqFgpAAH5+RrPkU+
5E7E372IYU2diKnXW4DXW8aMregHR6Sw9nar16mI3FhpX26kcqgyEAX8TVO2
RZqQroYzJQuyf6alirH78eXePhWCUnkVdJme7/142B88Qbsm/T54+IhPRL+U
Dj2uvNVSQIgOnyJDNnFj8WFoJ5ybYUKJm6T6AcaQ90ZCfigwvXFbsTLkCfjh
lDl9p4bAkl/HmOVG5lukT8xFBtFUwrEOXTh7cRr1ew8sdzltUcPOxnPv0jw2
l2Zn5xFcGhUxyNcaFdk5nScuyI84g6nRnYMvsOJwvBl2eo9MJCfPEeAFdcrs
E3dLwoiLRIdpqgSTYCyG5gbGc2CohZ8Zu4dGACZKmiXqgGtlVrZOiemqPhUm
/LE2gzRR/l70jN32vPGatGBCGxRjahMZTlMKHGvipozqtNBfNNcK4ZsBFI5Q
Bg6P09kR+I7ExkbvuxHSiHEjKCQqgqu4lYIroGzA7UOnxXg+odJlHKYy6tQr
n3B4bulErPkMyrN4GCCyFMuUcyv6iOQQ/0AQ8c/9+zqOyT8gePbl6eH+yeHZ
2+PDn91nHSSnB/deqMeCDwLu4+S/sET1Q4S1KaMe/fELPs+yH354VQidQgkM
hhwHhhw3DznmaY5hgEz2SV6BX9Q4BDz2l+hUfCABDmNM0X/F8cRoYIwt46x5
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
cekjPEMPe0WynyQwmxba2ME8HicABdyxEMTyGoTjqRoOhB9u6Ejc1wJiZXXT
yonTuYubwFPzNfl6OEnQSFbmQoYK2BgQdXkbdfAqmZOp/uibMbYqmeVMGDoR
i+iITfOMOlkzA2MAwtvfwcuxy55pLyV0T7G4EoX4X//j7NXBq120YXGPcZdk
9H79T6S+R3vHex7l1a2i0jiLb3w6rDo/Wdq9ZRnD1/XCDW1eu31p4PhUF1l1
BdY/fvwfp4cvnt3crBvGi6/I2O1DOIkSvtBX2TrFVoQb1oAiU++Sg3oz8dLr
6B5uFbfZHebxTBr5oKmOwIICUvlO+U3rTXGlW4qsTtjGemDCdcW9HdyDJ4He
v1Y82n7qAmSXWUOTqsa+R/QHtqHi9XCgoe49hX2bKI0fYB99Wv5t3AUqqrV9
+g84mO4v8POfy7/Ni2r8uvohVWy6WaEdEmCPMO1nk/gieooMTKOWxqus7I7h
6+45fB3CLJA7PLwCOBQpx64RnviTNKKT0GNsmnR4ejaeT6LD7H1a5NmUaPom
ItzWLTDOP1fvlGs/NSSCVavoV7sZGnY+K4dFymcWiIN1cfZT9DovWUb75D23
IJ7WDa69u33hzzbPcIjd7JD1d7F+w2lCbrE+2ilqjjz/9nyyV0qnrP+yLJiq
SyVKHp3gvpz3uPsXh6sd5iVLWu09iMkRYnL0pNt/+JvC+YkP58EXgjPcqMIB
8+8K5/6j7sDN1/uycOZTxWaGeOsYSi6cWRQm531Cgk8rnN11KxkJBE0YjALP
/qvTQ9Ab/4ZJOl90X494BQZ/Hnwh/Bnn6Fr5Wu7pYKf7wM/1X/497T9f8rwG
OzyDOa+dL3Ve6dg9rt/1vB4Mug++a4fzV3leDwY8gzmvh1+KD6YfvqLz2tnu
7jxuh/NXeV47Nbnl0ReTW94Dl7BP7Hc9ryfdh77g8oc4r5r88/jLnFcWJenF
18O/Hj7qPlog/3xt52XrUOhdJkMTqj1K2+pENS1wGhfv0GS+8SaLy5IinDbY
ZJ8pPY+0KK0BgdLbV8GeGF9gfBk8AtuCk0ZZLqvVLdrqslqdfNSo2i2r1S06
wmVPb+V94U+fZzCn8butx8Gme/ckZOpQPDnR3ry6zIv0H2wKOYiruGaDoCiq
bhyPbmd+WDihZUYIdvztb/ceIr4GY7scE8bh7DKZosU7OkjHQI66z5PJZIpB
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
AgA=

-->

</rfc>
