<?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-07" category="std" consensus="true" submissionType="IETF" updates="8613" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.20.0 -->
  <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-07"/>
    <author initials="R." surname="Höglund" fullname="Rikard Höglund">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>rikard.hoglund@ri.se</email>
      </address>
    </author>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <date year="2024" month="March" day="04"/>
    <workgroup>CoRE Working Group</workgroup>
    <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 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. The nonces N1 and N2 SHOULD be random values. An exception is described later in Section <xref target="key-material-handling"/>.</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 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 CTX_DEL older than CTX_OLD, such that both CTX_DEL and CTX_OLD have the same ID_CONTEXT or no 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 and preserve the same respective OSCORE Sender ID and Recipient ID. Also, if CTX_OLD specifies an OSCORE ID Context, both peers use and preserve the same OSCORE ID Context.</t>
          </li>
        </ul>
        <t>If a KUDOS message is a CoAP request, then it can target two different types of resources at the recipient CoAP server:</t>
        <ul spacing="normal">
          <li>
            <t>The well-known KUDOS resource at /.well-known/kudos, or an alternative KUDOS resource with resource type "core.kudos" (see Sections <xref target="well-known-kudos-desc"/> and <xref target="rt-kudos"/>). In such a case, no application processing is expected at the CoAP server, and the plain CoAP request composed before OSCORE protection should not include an application payload.</t>
          </li>
          <li>
            <t>A non-KUDOS resource, i.e., an actual application resource that a CoAP request can target in order to trigger application processing at the CoAP server. In such a case, the plain CoAP request composed before OSCORE protection may include an application payload, if admitted by the request method.</t>
          </li>
        </ul>
        <t>Similarly, any CoAP response can also be a KUDOS message. If the corresponding CoAP request has targeted a KUDOS resource, then the plain CoAP response composed before OSCORE encryption should not include an application payload. Otherwise, an application payload may be included.</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 or without ID Context, before initiating the KUDOS procedure 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 or without 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. Even though in this example the first KUDOS message is a request and the second is a response, KUDOS is not constrained to this request/response model and a KUDOS execution can be performed with any combination of CoAP requests and responses. <xref target="ssec-derive-ctx-client-init-requests-only"/> shows an example where both KUDOS messages are CoAP requests. Furthermore, <xref target="ssec-derive-ctx-client-init-unrelated"/> presents an example where KUDOS Response #2 is a response to a different request than KUDOS Request #1.</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 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 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>
          <t>In case the KUDOS message Request #1 in Figure 3 targets a non-KUDOS resource and the application at the server requires freshness for the received requests, then the server does not deliver the request to the application even if the request has been succesfully verified, and the following KUDOS message (i.e., Response #1 in Figure 3) MUST be a 4.01 (Unauthorized) error response.</t>
          <t>Upon receiving the 4.01 (Unauthorized) error response as the second KUDOS message Response #1, the client processes it like described above. After successfully completing the KUDOS execution, the client can send to the server a non-KUDOS request protected with CTX_NEW (i.e., Request #2 in Figure 3). Presumably, this request targets the same resource targeted by the previous Request #1, as the same application request or a different one, if the application permits it.
Upon receiving, decrypting, and successfully verifying this request protected with CTX_NEW, the server asserts the request as fresh, leveraging the recent establishment of CTX_NEW.</t>
          <t>An example of a KUDOS execution where Request #1 targets a non-KUDOS resource is shown in Appendix C.</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 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 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 <xref section="4.7" sectionFormat="of" target="RFC7252"/>).</t>
          </section>
        </section>
      </section>
      <section anchor="avoiding-deadlocks">
        <name>Avoiding Deadlocks</name>
        <t>This section defines how to avoid a deadlock in different scenarios.</t>
        <section anchor="scenario-1">
          <name>Scenario 1</name>
          <t>In this scenario, an execution of KUDOS fails at PEER_1 acting as initiator, but successfully completes at PEER_2 acting as responder. After that, PEER_1 still stores CTX_OLD, while PEER_2 stores CTX_OLD and the just derived CTX_NEW.</t>
          <t>Then, PEER_1 starts a new KUDOS execution acting again as initiator, by sending the first KUDOS message as a CoAP request. This is protected with a temporary Security Context CTX_1, which is newly derived from the retained CTX_OLD, and from the new values X1 and N1 exchanged in the present KUDOS execution.</t>
          <t>Upon receiving the first KUDOS message, PEER_2, acting again as responder, proceeds as follows.</t>
          <ol spacing="normal" type="1"><li>
              <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="key-material-handling">
          <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>
            <li>
              <t>As an exception to the nonces being generated as random values (see Section <xref target="ssec-derive-ctx"/>), a peer that is a CAPABLE device MAY use a value obtained from a monotonically incremented counter as nonce N1 or N2. This has privacy implications, which are described in Section <xref target="sec-cons"/>. In such a case, the peer MUST enforce measures to ensure freshness of the nonce values. For example, the peer can use the same procedure described in <xref section="B.1.1" sectionFormat="of" target="RFC8613"/> for handling the OSCORE Sender Sequence Number values. These measures require to regularly store the used counter values in non-volatile memory, which makes non-CAPABLE devices unable to safely use counter values as nonce values.</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 and 2.04 (Changed) responses. If a client wishes to execute the KUDOS procedure as initiator without triggering any application processing on the server, then the request sent as first KUDOS message must target a KUDOS resource, e.g., at the Uri-Path "/.well-known/kudos" (see Section 6.3), or at an alternative Uri-Path that can be discovered, e.g., by using a resource directory <xref target="RFC9176"/>. In order to discover a server's KUDOS resource, client applications can use the resource type "core.kudos" (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="sec-cons">
      <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.</t>
      <t>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. This is acceptable, provided that safety, reliability, and robustness within the system can still be assured. Although using nonces that are smaller in size means that there will be a collision on average after fewer KUDOS messages have been sent, this should not pose significant problems even for a constrained server operating at a capacity of one request per second.</t>
      <t>The nonces exchanged in the KUDOS messages are sent in the clear, so using random nonces is preferable for maintaining privacy. If instead a counter value is used, this can leak some information about the peers. Specifically, using counters will reveal the frequency of rekeying procedures performed.</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-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-23">
          <front>
            <title>Ephemeral Diffie-Hellman Over COSE (EDHOC)</title>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="22" month="January" year="2024"/>
            <abstract>
              <t>   This document specifies Ephemeral Diffie-Hellman Over COSE (EDHOC), a
   very compact and lightweight authenticated Diffie-Hellman key
   exchange with ephemeral keys.  EDHOC provides mutual authentication,
   forward secrecy, and identity protection.  EDHOC is intended for
   usage in constrained scenarios and a main use case is to establish an
   OSCORE security context.  By reusing COSE for cryptography, CBOR for
   encoding, and CoAP for transport, the additional code size can be
   kept very low.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-lake-edhoc-23"/>
        </reference>
      </references>
      <references>
        <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-02">
          <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="January" year="2024"/>
            <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-02"/>
        </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="ssec-derive-ctx-client-init-requests-only">
      <name>Forward Message Flow using two CoAP Requests</name>
      <t>This section presents an example of KUDOS run in the forward message flow, with the client acting as KUDOS initiator, and both KUDOS messages being CoAP requests.</t>
      <figure anchor="fig-message-exchange-client-init-requests-only">
        <name>Example of the KUDOS forward message flow where both KUDOS messages are requests.</name>
        <artwork align="center"><![CDATA[
                  Client/Server          Client/Server
                   (initiator)            (responder)
                        |                      |
Generate N1             |                      |
                        |                      |
CTX_1 = updateCtx(      |                      |
        X1,             |                      |
        N1,             |                      |
        CTX_OLD)        |                      |
                        |                      |
                        |      Request #1      |
Protect with CTX_1      |--------------------->| /.well-known/kudos
                        | Token: 0x4a          |
                        | 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)
                        |                      |
                        |      Request #2      |
     /.well-known/kudos |<---------------------| Protect with CTX_NEW
                        | Token: 0x7c          |
                        | 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.

                        |                      |
                        |      Response #1     |
Protect with CTX_NEW    |--------------------->|
                        | Token: 0x7c          |
                        | OSCORE {             |
                        |  ...                 |
                        | }                    | Verify with CTX_NEW
                        | Encrypted Payload {  |
                        |  ...                 | Discard CTX_OLD
                        |  Application Payload |
                        | }                    |
                        |                      |
                        |      Response #2     |
                        |<---------------------| Protect with CTX_NEW
                        | Token: 0x4a          |
                        | OSCORE {             |
                        |  ...                 |
Verify with CTX_NEW     | }                    |
                        | Encrypted Payload {  |
                        |  ...                 |
                        |  Application Payload |
                        | }                    |
                        |                      |
]]></artwork>
      </figure>
    </section>
    <section anchor="ssec-derive-ctx-client-init-unrelated">
      <name>Forward Message Flow with Response #1 unrelated to Request #1</name>
      <t>This section presents an example of KUDOS run in the forward message flow, with the client acting as KUDOS initiator, and where the second KUDOS message Response #1 is not a response to the first KUDOS message Request #2, but rather an unrelated Observe notification as a response to the non-KUDOS message Request #1</t>
      <figure anchor="fig-message-exchange-client-init-unrelated-response">
        <name>Example of the KUDOS forward message flow where the second KUDOS message Response #1 is not a response to Request #1.</name>
        <artwork align="center"><![CDATA[
                     Client                  Server
                   (initiator)            (responder)
                        |                      |
                        |      Request #1      |
                        |   (Registration)     |
Protect with CTX_OLD    |--------------------->| /obs
                        | Token: 0x4a          |
                        | Observe: 0           |
                        | OSCORE {             |
                        |  ...                 |
                        |  Partial IV: 4324    |
                        |  ...                 |
                        | }                    |
                        | Encrypted Payload {  | Verify with CTX_OLD
                        |  Observe: -          |
                        |  ...                 |
                        | }                    |
                        |                      |
Generate N1             |                      |
                        |                      |
CTX_1 = updateCtx(      |                      |
        X1,             |                      |
        N1,             |                      |
        CTX_OLD)        |                      |
                        |                      |
                        |      Request #2      |
Protect with CTX_1      |--------------------->| /.well-known/kudos
                        | Token: 0x7c          |
                        | 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     |
                        |    (Notification)    |
                        |<---------------------| Protect with CTX_NEW
                        | Token: 0x4a          |
                        | Observe: 1           |
                        | 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 {  |
                        | Observe: -           |
                        |  ...                 |
                        | }                    |
                        |                      |

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

                        |      Response #2     |
                        |<---------------------| Protect with CTX_NEW
                        | Token: 0x7c          |
                        | OSCORE {             |
                        |  ...                 |
Verify with CTX_NEW     | }                    |
                        | Encrypted Payload {  |
                        |  ...                 |
                        |  Application Payload |
                        | }                    |
                        |                      |
]]></artwork>
      </figure>
    </section>
    <section anchor="ssec-derive-ctx-client-init-normal-resource">
      <name>Forward Message Flow Targeting a non-KUDOS Resource at Server</name>
      <t>This section presents an example of KUDOS run in the forward message flow, with the client acting as KUDOS initiator, and with the KUDOS message Request #1 targeting a non-KUDOS resource at the Uri-Path "/temp". The server application has freshness requirements on the requests targeting the resource at "/temp".</t>
      <t>Note the presence of an application payload in the KUDOS message Request #1 and in the non-KUDOS message Request #2, both of which are composed as PUT requests. That request method is part of the encrypted payload, since it is protected by OSCORE.</t>
      <t>Also note the fact that the KUDOS message Response #1 is composed as a 4.01 (Unauthorized) response, while the non-KUDOS message Response #2 is composed as a 2.04 (Changed) repsonse. Those response codes are part of the encrypted payload, since they are protected by OSCORE.</t>
      <figure anchor="fig-message-exchange-client-init-normal-resource">
        <name>Example of the KUDOS forward message flow where the KUDOS message Request #1 targets a non-KUDOS resource.</name>
        <artwork align="center"><![CDATA[
                     Client                  Server
                   (initiator)            (responder)
                        |                      |
Generate N1             |                      |
                        |                      |
CTX_1 = updateCtx(      |                      |
        X1,             |                      |
        N1,             |                      |
        CTX_OLD)        |                      |
                        |                      |
                        |      Request #1      |
Protect with CTX_1      |--------------------->| /temp
                        | OSCORE {             |
                        |  ...                 |
                        |  Partial IV: 0       |
                        |  ...                 |
                        |  d flag: 1           | CTX_1 = updateCtx(
                        |  x: X1               |         X1,
                        |  nonce: N1           |         N1,
                        |  ...                 |         CTX_OLD)
                        | }                    |
                        | Encrypted Payload {  | Verify with CTX_1
                        |  0.03 (PUT)          |
                        |  ...                 |
                        |  Application Payload |
                        | }                    | 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 {  |
                        |  4.01 (Unauthorized) |
                        |  ...                 |
                        |  Application 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 {  |
                        |  0.03 (PUT)          |
                        |  ...                 | Discard CTX_OLD
                        |  Application Payload |
                        | }                    |
                        |                      |
                        |      Response #2     |
                        |<---------------------| Protect with CTX_NEW
                        | OSCORE {             |
                        |  ...                 |
Verify with CTX_NEW     | }                    |
                        | Encrypted Payload {  |
                        |  2.04 (Changed)      |
                        |  ...                 |
                        |  Application Payload |
                        | }                    |
                        |                      |
]]></artwork>
      </figure>
    </section>
    <section anchor="sec-document-updates">
      <name>Document Updates</name>
      <t>RFC EDITOR: PLEASE REMOVE THIS SECTION.</t>
      <section anchor="sec-06-07">
        <name>Version -06 to -07</name>
        <ul spacing="normal">
          <li>
            <t>Removed material about the ID update procedure, which has been split out into a separate draft.</t>
          </li>
          <li>
            <t>Allow non-random nonces for CAPABLE devices.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
          <li>
            <t>Permit flexible message flow with KUDOS messages as any request/response.</t>
          </li>
          <li>
            <t>Enable sending KUDOS messages as regular application messages.</t>
          </li>
        </ul>
      </section>
      <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:
H4sIAAAAAAAAA+292XbbWJYo+K6vQMtrXUmZJC3SYygycrUsyWVV2rJbkiOj
VkW1F0SCEtIkwAJAy0rb9Su3v+I+9VPXj/UezwAccLDlsDNvKJczJBI4wz77
7Hnodrsb7/aiexsbVVpNkr0o+ktyE72ejeIqicZ5Eb08O3h5ehRt/+X14cuz
nY344qJI4IXFT43yYRZPYbRREY+rbppU4+4wL5JuXtJ/3iY33Tm93Z3A/5XV
xsadqKzibPQmnuQZvFgV82RjI50V9GtZDXZ3f9gdbFxf7kUHOcz017x4m2aX
0b8U+Xy28fZ6LzrOqqTIkqp7iHNuDONqD4YcbZTzi2lalmmeVTczGPn46Pzp
Bk9e7kWPH/Zh78N8BIPtRXNY5+ONWQpgiKI70TDOonmZRHFRxDfRdjqO4skk
uknKnQj2fBWXV9FVUsA6o6jKh3v4Dfxa5kVVJONyj8YYJeN4PqlKeEK/v5ny
1/jnRjyvrvJibyOin678N4rSDJ447UXP/vt/XU7m2ch8wYA9Td/Gxaj5bV7A
Nk6Pz46i/SfmwxLWkwA4jst4/Le8GJWXMcA6GgzME8O0uoFDTeEM7Gf5CCY6
O+r2H96/vxudwRbfXuWTqfPAPKsKeO/sOhklmfk8mcbpZC8qaIm9q5xW+H8W
aa9Mwtt80YvO00k+jGubfBEXw7z+1Xe0wymur1fR+mR/G1leTOMqfZfgkZ4+
PRj0+z/Irw8eP9RfHw0eDPTXh/f78uvj/qP7+ivgpf76w3167bh72KObNInf
Jt1kdAUoB1ckG9dmfHz//kMd+8EDM2D/8a78+sPuPZ3xB7hX9led8Yf+o4d2
HQ/010cDM9hj/pWWVODlHheX3TiJR91JOk2r0ltv/eYHHomHsiN9blbk43RC
W3p+/WLwgi+If1kIE17Okix6kV/Aw9H+ZJLG2ZCxTOjZ8/TyqrpO8P8Bn4ZX
aZbgVdRfz5PhVZYO40l0NkuG6Rh+rYBURF0gM0XSifZnsJJ3ySj6OSmQhkT9
3qATvXyx3z0/6zpjwxLf4Bvdn/tvBt3B7mC33+/vdvdpKUhr9iL8sNvv8+Li
4hLx9aqqZnt3715fX/dy2MiU9hHLNnqwwbtFAh+UyV1/rru1ae6uvqLebDRW
qHbPizgrZ0Cwfnv4mqmjJ2mG5LdcD9rm/e8L5K3LIrhvJFmFhAhWdHb0/Ole
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
HqDKcziqnC1ZmI/9n3PbUk9q1NogE7lMoylW8FB9KoBkdZEBlfjhVS7T1MKb
spz4Sqbp9+aY6basCBm/1Nwm19/FaiObmq5Myegd1BLTghKsMyJtAIyonMVU
gcRtazzLUY7k+laG3KbZeMI3ViP6pUiFnIjF0GV6GfobZrMinxVUq44Rla3A
p4kC45WuAa29JDQW+t0nb7UlSf2s6NmV8+VGDmhqEOQmGzcFELxNkpmxk7ZH
A8v6NUHVS+te1sknti+a2lT1RmI+oRM1VCvF4JtmJbW2YV4pLsU1ijQnMyYV
Xe0Y7tOFR7pjLqHglesNNyZj0zB5mbjEQapFWRXAnbqMIc30MMjg5bxixLUl
I81sTR+aKehLApJj0PwD8KRG7Ul/IJZn0YTJqKjB9gyCUAvEsX6b2pYRsboB
teqKGrgdWPyBfW4Y4eUV1LYWBgmqQPiwJSaZxLOSbH/qGDPoo6YzvzmdxIQ3
WtPtO0I49xzxvT4Oy2udwXi1BBP1+yY+krhqxJfWuqnlnuf+AWk5pTZdFNTG
Uq2mLvHdl4gtLRtUIEME6DglEFgnZNUQS27xUGgQVGJ7mgzTGYmU6A+SJdoP
HanFAR+QFez/PqdaT5acjMxnQE9MkVqixiPFI6BppEVzDA71xuCTCteetGlW
Ay/Niuzh43k2ihHs5FngY1D9hgLYLnPM42LHKCwOZrsR64SpjA7kocj58Er2
EIzexTDiJd28mluErQkUEsSVquAE3yUZQUoBauqEwOB4G3BLEl85RFdZYVIQ
//X0AK4hhRBGD8/Ts4NnQP2oXbxNlcK6KZyu0mV3jCZISWQTS6JikihS4NND
ZwckJsRSm++zoKyFQZkRObGBx4cGN4iNS5CCuS3WCtQi6QJ0z8w1RlBQynJ9
WM7hoea84xQlEFieAIlgByDIYDlwFJszDp9yHt5kIsAWVqpY40bT4pzG7qbe
A1N3kk2PVFl/NsPNaOaMFFe3Vv36khmLIjhpoimNZdWtiI9793r3BOw/7N5j
O2K9wlNzc2LJn8bsXsaufJX4Ykv0jaAB0MTdNsFqSiGGBwYGAHR7kt9YdW0C
mNZFYZqMzUV6yQ16zf2WzEfGmGNU7SdJ/E6ZIGmU0QsxYxxpU91F2Y/NSkdY
oPhA+rJKcSwgeqMbLqnDllOvy4KjkuAp1xgeg0e+b7Q4sCfcmmZImtQVZ4fS
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
P+z0Nv5/72AZXhXOAQA=

-->

</rfc>
