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


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

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

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

  X_N = X_cbor | N_cbor

  oscore_key_length = < Size of CTX_IN.MasterSecret in bytes >

  Label = "key update"

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

  MSALT_NEW = N;

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

  Return CTX_OUT;

}

Where ExpandLabel is defined as

struct {
    uint16 length = oscore_key_length;
    opaque label<7..255> = "oscore " + Label;
    opaque context<0..255> = X_N;
} ExpandLabel;
]]></artwork>
        </figure>
      </section>
      <section anchor="ssec-derive-ctx">
        <name>Key Update with Forward Secrecy</name>
        <t>This section defines the actual KUDOS procedure performed by two peers to update their OSCORE keying material. A peer may want to run KUDOS for a variety of reasons, including expiration of the OSCORE Security Context, approaching limits for key usage <!---{{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 as 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 the OSCORE Master Secret and OSCORE Master Salt from the newly derived Security Context CTX_NEW. If this is not the case, 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 fresh value N1 or N2, and providing it to the other peer. Furthermore, X1 and X2 are the value of the 'x' byte specified in the OSCORE Option of the first and second KUDOS message, respectively. As defined in <xref target="ssec-derive-ctx-client-init"/>, these values are used by the peers to build the input N and X to the updateCtx() function, in order to derive a new OSCORE Security Context. As for any new OSCORE Security Context, the Sender Sequence Number and the replay window are re-initialized accordingly (see <xref section="3.2.2" sectionFormat="of" target="RFC8613"/>).</t>
        <t>Once a peer has successfully derived the new OSCORE Security Context CTX_NEW, that peer MUST use CTX_NEW to protect outgoing non KUDOS messages, and MUST NOT use the originally shared OSCORE Security Context CTX_OLD for protect outgoing messages. Once CTX_NEW has been derived, a peer deletes any OSCORE Security Context older than CTX_OLD with the same ID Context. This can for instance occur in the forward message flow when the initiator has just received KUDOS Response #1 and immediately starts KUDOS again as initiator, before sending any non KUDOS messages which would give the responder key confirmation and allow it to safely discard CTX_OLD.</t>
        <t>Also, that peer MUST terminate all the ongoing observations <xref target="RFC7641"/> that it has with the other peer as protected with the old Security Context CTX_OLD, unless the two peers have explicitly agreed otherwise as defined in <xref target="preserving-observe"/>. More specifically, if either or both peers indicate the wish to cancel their observations, those will be all cancelled following a successful KUDOS execution.</t>
        <t>Note that, even though that peer had no real reason to update its OSCORE keying material, running KUDOS can be intentionally exploited as a more efficient way to terminate all the ongoing observations with the other peer, compared to sending one cancellation request per observation (see <xref section="3.6" sectionFormat="of" target="RFC7641"/>).</t>
        <t>Once a peer has successfully decrypted and verified an incoming message protected with CTX_NEW, that peer MUST discard the old Security Context CTX_OLD.</t>
        <t>The peer starting the KUDOS execution is denoted as initiator, while the other peer is denoted as responder.</t>
        <t>KUDOS may run with the initiator acting either as CoAP client or CoAP server. The former case is denoted as the "forward message flow" (see <xref target="ssec-derive-ctx-client-init"/>) and the latter as the "reverse message flow" (see <xref target="ssec-derive-ctx-server-init"/>). The following properties hold for both the forward and reverse message flow.</t>
        <ul spacing="normal">
          <li>The initiator always offers the fresh value N1.</li>
          <li>The responder always offers the fresh value N2</li>
          <li>The responder is always the first one deriving CTX_NEW.</li>
          <li>The initiator is always the first one achieving key confirmation, hence the first one able to safely discard CTX_OLD.</li>
          <li>Both the initiator and the responder use the same respective OSCORE Sender ID and Recipient ID. Also, they both preserve and use the same OSCORE ID Context from CTX_OLD.</li>
        </ul>
        <t>The length of the nonces N1 and N2 is application specific. The application needs to set the length of each nonce such that the probability of its value being repeated is negligible. To this end, each nonce is typically at least 8 bytes long.</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 a peer has with a given ID Context, before initiating KUDOS, or upon having received and successfully verified the first KUDOS message. In turn, CTX_NEW is the most recent OSCORE Security Context a peer has, with a given ID Context, before sending the second KUDOS message, or upon having received and successfully verified the second KUDOS message.</t>
        <t>In the following sections, 'Comb(a,b)' denotes the byte concatenation of two CBOR byte strings, where the first one has value 'a' and the second one has value 'b'. That is, Comb(a,b) = bstr .cbor a | bstr .cbor b, where | denotes byte concatenation.</t>
        <section anchor="ssec-derive-ctx-client-init">
          <name>Forward Message Flow</name>
          <t><xref target="fig-message-exchange-client-init"/> shows an example of KUDOS run in the forward message flow, with the client acting as KUDOS initiator.</t>
          <figure anchor="fig-message-exchange-client-init">
            <name>Example of the KUDOS forward message flow.</name>
            <artwork align="center"><![CDATA[
                     Client                Server
                   (initiator)          (responder)
                        |                    |
Generate N1             |                    |
                        |                    |
CTX_1 =                 |                    |
  updateCtx(X1, N1,     |                    |
            CTX_OLD)    |                    |
                        |                    |
                        |     Request #1     |
Protect with CTX_1      |------------------->| /.well-known/kudos
                        |                    |
                        | OSCORE Option:     | CTX_1 =
                        |   ...              |  updateCtx(X1, N1,
                        |   d flag: 1        |            CTX_OLD)
                        |   X1               |
                        |   Nonce: N1        | Verify with CTX_1
                        |   ...              |
                        |                    | Generate N2
                        |                    |
                        |                    | CTX_NEW =
                        |                    |  updateCtx(Comb(X1,X2),
                        |                    |            Comb(N1,N2),
                        |                    |            CTX_OLD)
                        |                    |
                        |     Response #1    |
                        |<-------------------| Protect with CTX_NEW
CTX_NEW =               | OSCORE Option:     |
 updateCtx(Comb(X1,X2), |   ...              |
           Comb(N1,N2), |   Partial IV: 0    |
              CTX_OLD)  |   ...              |
                        |                    |
Verify with CTX_NEW     |  d flag: 1         |
                        |  X2                |
Discard CTX_OLD         |  Nonce: N2         |
                        |  ...               |
                        |                    |

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

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

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

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

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

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

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

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

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

]]></artwork>
          </figure>
          <t>First, the client sends a normal OSCORE request to the server, protected with the old Security Context CTX_OLD and with the 'd' flag bit set to 0.</t>
          <t>Upon receiving the OSCORE request and after having verified it with CTX_OLD as usual, the server generates a random value N1 and provides the updateCtx() function with the input N = N1, X = X1 and CTX_OLD, in order to derive the temporary Security Context CTX_1.</t>
          <t>Then, the server sends an OSCORE response to the client, protected with CTX_1. In particular, the response has the 'd' flag bit set to 1 and specifies N1 as 'nonce' (see <xref target="ssec-oscore-option-extensions"/>). After that, the server deletes CTX_1. Consistently with <xref target="sec-updated-response-protection"/>, the server includes its Sender Sequence Number as Partial IV in the response. After that, the server deletes CTX_1.</t>
          <t>Upon receiving the OSCORE response, the client retrieves the value N1 from the 'nonce' field of the response, the value X1 from the 'x' byte of the OSCORE Option, and provides the updateCtx() function with the input N = N1, X = X1 and CTX_OLD, in order to derive the temporary Security Context CTX_1.</t>
          <t>Then, the client verifies the response by using the Security Context CTX_1.</t>
          <t>After that, the client generates a random value N2, and provides the updateCtx() function with the input N = Comb(N1, N2), X = Comb(X1, X2) and CTX_OLD, in order to derive the new Security Context CTX_NEW. Then, the client sends an OSCORE request to the server, protected with CTX_NEW. In particular, the request has the 'd' flag bit set to 1 and specifies N1 | N2 as 'nonce'. After that, the client deletes CTX_1.</t>
          <t>Upon receiving the OSCORE request, the server retrieves the value N1 | N2 from the request and the value X2 from the 'x' byte of the OSCORE Option. Then, the server verifies that: i) the value N1 is identical to the value N1 specified in a previous OSCORE response with the 'd' flag bit set to 1; and ii) the value N1 | N2 has not been received before in an OSCORE request with the 'd' flag bit set to 1.</t>
          <t>If the verification succeeds, the server provides the updateCtx() function with the input N = Comb(N1, N2), X = Comb(X1, X2) and CTX_OLD, in order to derive the new Security Context CTX_NEW. Finally, the server verifies the request by using CTX_NEW and deletes CTX_OLD.</t>
          <t>From then on, the two peers can protect their message exchanges by using CTX_NEW. In particular, as shown in the example in <xref target="fig-message-exchange-server-init"/>, the server can send an OSCORE response protected with CTX_NEW.</t>
          <t>In case the client does not successfully verify the response, the same error handling specified in <xref section="8.4" sectionFormat="of" target="RFC8613"/> applies. This does not result in deleting CTX_NEW. If the client successfully verifies the response using CTX_NEW, the client deletes CTX_OLD.</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 to cryptographically match with both the corresponding request also protected with CTX_NEW and with an older request protected with CTX_OLD, in case the two requests were protected using the same OSCORE Partial IV.</t>
            <t>During an ongoing KUDOS execution the client MUST NOT send any non-KUDOS requests to the server. This could otherwise be possible, if the client is using a value of NSTART greater than 1 (see <xref section="4.7" sectionFormat="of" target="RFC7252"/>).</t>
          </section>
        </section>
      </section>
      <section anchor="avoiding-deadlocks">
        <name>Avoiding Deadlocks</name>
        <t>This section defines how to avoid a deadlock in different scenarios.</t>
        <section anchor="scenario-1">
          <name>Scenario 1</name>
          <t>In this scenario, an execution of KUDOS fails at PEER_1 acting as initiator, but successfully completes at PEER_2 acting as responder. After that, PEER_1 still stores CTX_OLD, while PEER_2 stores CTX_OLD and the just derived CTX_NEW.</t>
          <t>Then, PEER_1 starts a new KUDOS execution acting again as initiator, by sending the first KUDOS message as a CoAP request. This is protected with a temporary Security Context CTX_1, which is newly derived from the retained CTX_OLD, and from the new values X1 and N1 exchanged in the present KUDOS execution.</t>
          <t>Upon receiving the first KUDOS message, PEER_2, acting again as responder, proceeds as follows.</t>
          <ol spacing="normal" type="1"><li>PEER_2 attempts to verify the first KUDOS message by using a temporary Security Context CTX_1'. This is derived from the Security Context CTX_NEW established during the latest successfully completed KUDOS execution.</li>
            <li>The message verification inevitably fails. If PEER_2 is acting as CoAP server, it MUST NOT reply with an unprotected 4.01 (Unauthorized) CoAP response yet.</li>
            <li>
              <t>PEER_2 MUST attempt to verify the first KUDOS message by using a temporary Security Context CTX_1. This is newly derived from the Security Context CTX_OLD retained after the latest successfully completed KUDOS execution, and from the values X1 and N1 exchanged in the present KUDOS execution.  </t>
              <t>
If the message verification fails, PEER_2: i) retains CTX_OLD and CTX_NEW from the latest successfully completed KUDOS execution; ii) if acting as CoAP server, replies with an unprotected 4.01 (Unauthorized) CoAP response.  </t>
              <t>
If the message verification succeeds, PEER_2: i) retains CTX_OLD from the latest successfully completed KUDOS execution; ii) replaces CTX_NEW from the latest successfully completed KUDOS execution with a new Security Context CTX_NEW', derived from CTX_OLD and from the values X1, X2, N1 and N2 exchanged in the present KUDOS execution; iii) replies with the second KUDOS message, which is protected with the just derived CTX_NEW'.</t>
            </li>
          </ol>
        </section>
        <section anchor="scenario-2">
          <name>Scenario 2</name>
          <t>In this scenario, an execution of KUDOS fails at PEER_1 acting as initiator, but successfully completes at PEER_2 acting as responder. After that, PEER_1 still stores CTX_OLD, while PEER_2 stores CTX_OLD and the just derived CTX_NEW.</t>
          <t>Then, PEER_2 starts a new KUDOS execution, this time acting as initiator, by sending the first KUDOS message as a CoAP request. This is protected with a temporary Security Context CTX_1, which is newly derived from CTX_NEW established during the latest successfully completed KUDOS execution, as well as from the new values X1 and N1 exchanged in the present KUDOS execution.</t>
          <t>Upon receiving the first KUDOS message, PEER_1, this time acting as responder, proceeds as follows.</t>
          <ol spacing="normal" type="1"><li>PEER_1 attempts to verify the first KUDOS message by using a temporary Security Context CTX_1', which is derived from the retained Security Context CTX_OLD and from the value X1 and N1 exchanged in the present KUDOS execution.</li>
            <li>The message verification inevitably fails. If PEER_1 is acting as CoAP server, it replies with an unprotected 4.01 (Unauthorized) CoAP response.</li>
            <li>
              <t>If PEER_2 does not receive the second KUDOS message for a pre-defined amount of time, or if it receives a 4.01 (Unauthorized) CoAP response when acting as CoAP client, then PEER_2 can start a new KUDOS execution for a maximum, pre-defined number of times.  </t>
              <t>
In this case, PEER_2 sends a new first KUDOS message protected with a temporary Security Context CTX_1', which is derived from the retained CTX_OLD, as well as from the new values X1 and N1 exchanged in the present KUDOS execution.  </t>
              <t>
During this time, PEER_2 does not delete CTX_NEW established during the latest successfully completed KUDOS execution, and does not delete CTX_OLD unless it successfully verifies an incoming message protected with CTX_NEW.</t>
            </li>
            <li>
              <t>Upon receiving such a new, first KUDOS message, PEER_1 verifies it by using the temporary Security Context CTX_1', which is derived from the Security Context CTX_OLD, and from the values X1 and N1 exchanged in the present KUDOS execution.  </t>
              <t>
If the message verification succeeds, PEER_1 derives an OSCORE Security Context CTX_NEW' from CTX_OLD and from the values X1, X2, N1 and N2 exchanged in the present KUDOS execution. Then, it replies with the second KUDOS message, which is protected with the latest, just derived CTX_NEW'.</t>
            </li>
            <li>
              <t>Upon receiving such second KUDOS message, PEER_2 derives CTX_NEW' from the retained CTX_OLD and from the values X1, X2, N1 and N2 exchanged in the present KUDOS execution. Then, PEER_2 attempts to verify the KUDOS message using the just derived CTX_NEW'.  </t>
              <t>
If the message verification succeeds, PEER_2 deletes the retained CTX_OLD as well as the retained CTX_NEW established during the immediately previously, successfully completed KUDOS execution.</t>
            </li>
          </ol>
        </section>
        <section anchor="scenario-3">
          <name>Scenario 3</name>
          <t>When KUDOS is run in the reverse message flow (see <xref target="ssec-derive-ctx-server-init"/>), the two peers risk to run into a deadlock, if all the following conditions hold.</t>
          <ul spacing="normal">
            <li>The client is a client-only device, i.e., it does not act as CoAP server and thus does not listen for incoming requests.</li>
            <li>The server needs to execute KUDOS, which, due to the previous point, can only be performed in its reverse message flow. That is, the server has to wait for an incoming non KUDOS request, in order to initiate KUDOS by replying with the first KUDOS message as a response.</li>
            <li>The client sends only Non-confirmable CoAP requests to the server and does not expect responses sent back as reply, hence freeing up a request's Token value once the request is sent.</li>
          </ul>
          <t>In such a case, in order to avoid experiencing a deadlock situation where the server needs to execute KUDOS but cannot practically initiate it, a client-only device that supports KUDOS SHOULD intersperse Non-confirmable requests it sends to that server with confirmable requests.</t>
        </section>
      </section>
      <section anchor="no-fs-mode">
        <name>Key Update with or without Forward Secrecy</name>
        <t>The FS mode of the KUDOS procedure defined in <xref target="ssec-derive-ctx"/> ensures forward secrecy of the OSCORE keying material. However, it requires peers executing KUDOS to preserve their state (e.g., across a device reboot), by writing information such as data from the newly derived OSCORE Security Context CTX_NEW in non-volatile memory.</t>
        <t>This can be problematic for devices that cannot dynamically write information to non-volatile memory. For example, some devices may support only a single writing in persistent memory when initial keying material is provided (e.g., at manufacturing or commissioning time), but no further writing after that. Therefore, these devices cannot perform a stateful key update procedure, and thus are not capable to run KUDOS in FS mode to achieve forward secrecy.</t>
        <t>In order to address these limitations, KUDOS can be run in its stateless no-FS mode, as defined in the following. This allows two peers to achieve the same results as when running KUDOS in FS mode (see <xref target="ssec-derive-ctx"/>), with the difference that no forward secrecy is achieved and no state information is required to be dynamically written in non-volatile memory.</t>
        <t>From a practical point of view, the two modes differ as to what exact OSCORE Master Secret and Master Salt are used as part of the OSCORE Security Context CTX_OLD provided as input to the updateCtx() function (see <xref target="ssec-update-function"/>).</t>
        <t>If either or both peers are not able to write in non-volatile memory the OSCORE Master Secret and OSCORE Master Salt from the newly derived Security Context CTX_NEW, then the two peers have to run KUDOS in no-FS mode.</t>
        <section anchor="handling-and-use-of-keying-material">
          <name>Handling and Use of Keying Material</name>
          <t>In the following, a device is denoted as "CAPABLE" if it is able to store information in non-volatile memory (e.g., on disk), beyond a one-time-only writing occurring at manufacturing or (re-)commissioning time. If that is not the case, the device will be denoted as "non-CAPABLE".</t>
          <t>The following terms are used to refer to OSCORE keying material.</t>
          <ul spacing="normal">
            <li>Bootstrap Master Secret and Bootstrap Master Salt. If pre-provisioned during manufacturing or (re-)commissioning, these OSCORE Master Secret and Master Salt are initially stored on disk and are never going to be overwritten by the device.</li>
            <li>Latest Master Secret and Latest Master Salt. These OSCORE Master Secret and Master Salt can be dynamically updated by the device. In case of reboot, they are lost unless they have been stored on disk.</li>
          </ul>
          <t>Note that:</t>
          <ul spacing="normal">
            <li>A peer running KUDOS can have none of the pairs above associated with another peer, only one or both.</li>
            <li>A peer that has neither of the pairs above associated with another peer, cannot run KUDOS in any mode with that other peer.</li>
            <li>
              <t>A peer that has only one of the pairs above associated with another peer can attempt to run KUDOS with that other peer, but the procedure might fail depending on the other peer's capabilities. In particular:  </t>
              <ul spacing="normal">
                <li>In order to run KUDOS in FS mode, a peer must be a CAPABLE device. It follows that two peers have to both be CAPABLE devices in order to be able to run KUDOS in FS mode with one another.</li>
                <li>In order to run KUDOS in no-FS mode, a peer must have Bootstrap Master Secret and Bootstrap Master Salt available as stored on disk.</li>
              </ul>
            </li>
            <li>A peer that is a non-CAPABLE device MUST support no-FS mode.</li>
            <li>A peer that is a CAPABLE device MUST support the FS mode and SHOULD support the no-FS mode.</li>
          </ul>
          <t>As a general rule, once successfully generated a new OSCORE Security Context CTX (e.g., CTX is the CTX_NEW resulting from a KUDOS execution, or it has been established through the EDHOC protocol <xref target="I-D.ietf-lake-edhoc"/>), a peer considers the Master Secret and Master Salt of CTX as Latest Master Secret and Latest Master Salt. After that:</t>
          <ul spacing="normal">
            <li>
              <t>If the peer is a CAPABLE device, it SHOULD store Latest Master Secret and Latest Master Salt on disk.  </t>
              <t>
As an exception, this does not apply to possible temporary OSCORE Security Contexts used during a key update procedure, such as CTX_1 used during the KUDOS execution. That is, the OSCORE Master Secret and Master Salt from such temporary Security Contexts MUST NOT be stored on disk.</t>
            </li>
            <li>The peer MUST store Latest Master Secret and Latest Master Salt in volatile memory, thus making them available to OSCORE message processing and possible key update procedures.</li>
          </ul>
          <section anchor="actions-after-device-reboot">
            <name>Actions after Device Reboot</name>
            <t>Building on the above, after having experienced a reboot, a peer A checks whether it has stored on disk a pair P1 = (Latest Master Secret, Latest Master Salt) associated with any another peer B.</t>
            <ul spacing="normal">
              <li>
                <t>If a pair P1 is found, the peer A performs the following actions.  </t>
                <ul spacing="normal">
                  <li>The peer A loads the Latest Master Secret and Latest Master Salt to volatile memory, and uses them to derive an OSCORE Security Context CTX_OLD.</li>
                  <li>The peer A runs KUDOS with the other peer B, acting as initiator. If the peer A is a CAPABLE device, it stores on disk the Master Secret and Master Salt from the newly established OSCORE Security Context CTX_NEW, as Latest Master Secret and Latest Master Salt, respectively.</li>
                </ul>
              </li>
              <li>
                <t>If a pair P1 is not found, the peer A checks whether it has stored on disk a pair P2 = (Bootstrap Master Secret, Bootstrap Master Salt) associated with the other peer B.  </t>
                <ul spacing="normal">
                  <li>
                    <t>If a pair P2 is found, the peer A performs the following actions.      </t>
                    <ul spacing="normal">
                      <li>The peer A loads the Bootstrap Master Secret and Bootstrap Master Salt to volatile memory, and uses them to derive an OSCORE Security Context CTX_OLD.</li>
                      <li>If the peer A is a CAPABLE device, it stores on disk Bootstrap Master Secret and Bootstrap Master Salt as Latest Master Secret and Latest Master Salt, respectively. This supports the situation where A is a CAPABLE device and has never run KUDOS with the other peer B before.</li>
                      <li>The peer A runs KUDOS with the other peer B, acting as initiator. If the peer A is a CAPABLE device, it stores on disk the Master Secret and Master Salt from the newly established OSCORE Security Context CTX_NEW, as Latest Master Secret and Latest Master Salt, respectively.</li>
                    </ul>
                  </li>
                  <li>If a pair P2 is not found, the peer A has to use alternative ways to establish a first OSCORE Security Context CTX_NEW with the other peer B, e.g., by running the EDHOC protocol. After that, if A is a CAPABLE device, it stores on disk the OSCORE Master Secret and Master Salt from the newly established OSCORE Security Context CTX_NEW, as Latest Master Secret and Latest Master Salt, respectively.</li>
                </ul>
              </li>
            </ul>
          </section>
        </section>
        <section anchor="no-fs-signaling">
          <name>Selection of KUDOS Mode</name>
          <t>During a KUDOS execution, the two peers agree on whether to perform the key update procedure in FS mode or no-FS mode, by leveraging the "No Forward Secrecy" bit, 'p', in the 'x' byte of the OSCORE Option value of the KUDOS messages (see <xref target="ssec-oscore-option-extensions"/>). The 'p' bit practically determines what OSCORE Security Context to use as CTX_OLD during the KUDOS execution, consistently with the indicated mode.</t>
          <ul spacing="normal">
            <li>If the 'p' bit is set to 0 (FS mode), the updateCtx() function used to derive CTX_1 or CTX_NEW considers as input CTX_OLD the current OSCORE Security Context shared with the other peer as is. In particular, CTX_OLD includes Latest Master Secret as OSCORE Master Secret and Latest Master Salt as OSCORE Master Salt.</li>
            <li>If the 'p' bit is set to 1 (no-FS mode), the updateCtx() function used to derive CTX_1 or CTX_NEW considers as input CTX_OLD the current OSCORE Security Context shared with the other peer, with the following difference: Bootstrap Master Secret is used as OSCORE Master Secret and Bootstrap Master Salt is used as OSCORE Master Salt. That is, every execution of KUDOS in no-FS mode between these two peers considers the same pair (Master Secret, Master Salt) in the OSCORE Security Context CTX_OLD provided as input to the updateCtx() function, hence the impossibility to achieve forward secrecy.</li>
          </ul>
          <t>A peer determines to run KUDOS either in FS or no-FS mode with another peer as follows.</t>
          <ul spacing="normal">
            <li>If a peer A is not a CAPABLE device, it MUST run KUDOS only in no-FS mode. That is, when sending a KUDOS message, it MUST set to 1 the 'p' bit of the 'x' byte in the OSCORE Option value.</li>
            <li>
              <t>If a peer A is a CAPABLE device, it SHOULD run KUDOS only in FS mode and SHOULD NOT run KUDOS as initiator in no-FS mode. That is, when sending a KUDOS message, it SHOULD set to 0 the 'p' bit of the 'x' byte in the OSCORE Option value. An exception applies in the following cases.  </t>
              <ul spacing="normal">
                <li>
                  <t>The peer A is running KUDOS with another peer B, which A has learned to not be a CAPABLE device (and hence not able to run KUDOS in FS mode).      </t>
                  <t>
Note that, if the peer A is a CAPABLE device, it is able to store such information about the other peer B on disk and it MUST do so. From then on, the peer A will perform every execution of KUDOS with the peer B in no-FS mode, including after a possible reboot.</t>
                </li>
                <li>The peer A is acting as responder and running KUDOS with another peer B without knowing its capabilities, and A receives a KUDOS message where the 'p' bit of the 'x' byte in the OSCORE Option value is set to 1.</li>
              </ul>
            </li>
            <li>
              <t>If the peer A is a CAPABLE device and has learned that another peer B is also a CAPABLE device (and hence able to run KUDOS in FS mode), then the peer A MUST NOT run KUDOS with the peer B in no-FS mode. This also means that, if the peer A acts as responder when running KUDOS with the peer B, the peer A MUST terminate the KUDOS execution if it receives a KUDOS message from the peer B where the 'p' bit of the 'x' byte in the OSCORE Option value is set to 1.  </t>
              <t>
Note that, if the peer A is a CAPABLE device, it is able to store such information about the other peer B on disk and it MUST do so. This ensures that the peer A will perform every execution of KUDOS with the peer B in FS mode. In turn, this prevents a possible downgrading attack, aimed at making A believe that B is not a CAPABLE device, and thus to run KUDOS in no-FS mode although the FS mode can actually be used by both peers.</t>
            </li>
          </ul>
          <t>Within the limitations above, two peers running KUDOS generate the new OSCORE Security Context CTX_NEW according to the mode indicated per the bit 'p' set by the responder in the second KUDOS message.</t>
          <t>If, after having received the first KUDOS message, the responder can continue performing KUDOS, the bit 'p' in the reply message has the same value as in the bit 'p' set by the initiator, unless the value is 0 and the responder is not a CAPABLE device. More specifically:</t>
          <ul spacing="normal">
            <li>If both peers are CAPABLE devices, they will run KUDOS in FS mode. That is, both initiator and responder sets the 'p' bit to 0 in the respective sent KUDOS message.</li>
            <li>If both peers are non-CAPABLE devices or only the peer acting as initiator is a non-CAPABLE device, they will run KUDOS in no-FS mode. That is, both initiator and responder sets the 'p' bit to 1 in the respective sent KUDOS message.</li>
            <li>If only the peer acting as initiator is a CAPABLE device and it has knowledge of the other peer being a non-CAPABLE device, they will run KUDOS in no-FS mode. That is, both initiator and responder sets the 'p' bit to 1 in the respective sent KUDOS message.</li>
            <li>
              <t>If only the peer acting as initiator is a CAPABLE device and it has no knowledge of the other peer being a non-CAPABLE device, they will not run KUDOS in FS mode and will rather set to ground for possibly retrying in no-FS mode. In particular, the initiator sets the 'p' bit of its sent KUDOS message to 0. Then:  </t>
              <ul spacing="normal">
                <li>
                  <t>If the responder is a server, it MUST reply with a 5.03 (Service Unavailable) error response. The response MUST be protected with the newly derived OSCORE Security Context CTX_NEW. The diagnostic payload MAY provide additional information. In the error response, the 'p' bit MUST be set to 1.      </t>
                  <t>
When receiving the error response, the initiator learns that the responder is not a CAPABLE device (and hence not able to run KUDOS in FS mode). The initiator MAY try running KUDOS again. If it does so, the initiator MUST set the 'p' bit to 1, when sending a new request as first KUDOS message.</t>
                </li>
                <li>
                  <t>If the responder is a client, it sends to the initiator the second KUDOS message as a new request, which MUST be protected with the newly derived OSCORE Security Context CTX_NEW. In the newly sent request, the 'p' bit MUST be set to 1.      </t>
                  <t>
When receiving the new request above (i.e., with the 'p' bit set to 1 as a follow-up to the previous KUDOS response having the 'p' bit set to 0), the initiator learns that the responder is not a CAPABLE device (and hence not able to run KUDOS in FS mode).</t>
                </li>
              </ul>
            </li>
          </ul>
          <t>In either case, both KUDOS peers delete the OSCORE Security Contexts CTX_1 and CTX_NEW.</t>
        </section>
      </section>
      <section anchor="preserving-observe">
        <name>Preserving Observations Across Key Updates</name>
        <t>As defined in <xref target="ssec-derive-ctx"/>, once a peer has completed the KUDOS execution and successfully derived the new OSCORE Security Context CTX_NEW, that peer normally terminates all the ongoing observations it has with the other peer <xref target="RFC7641"/>, as protected with the old OSCORE Security Context CTX_OLD.</t>
        <t>This section describes a method that the two peers can use to safely preserve the ongoing observations that they have with one another, beyond the completion of a KUDOS execution. In particular, this method ensures that an Observe notification can never successfully cryptographically match against the Observe requests of two different observations, i.e., against an Observe request protected with CTX_OLD and an Observe request protected with CTX_NEW.</t>
        <t>The actual preservation of ongoing observations has to be agreed by the two peers at each execution of KUDOS that they run with one another, as defined in <xref target="preserving-observe-management"/>. If, at the end of a KUDOS execution, the two peers have not agreed on that, they MUST terminate the ongoing observations that they have with one another, just as defined in <xref target="ssec-derive-ctx"/>.</t>
        <t>[</t>
        <t>NOTE: While a dedicated signaling would have to be introduced, this rationale may be of more general applicability, i.e., in case an update of the OSCORE keying material is performed through a different means than KUDOS.</t>
        <t>]</t>
        <section anchor="preserving-observe-management">
          <name>Management of Observations</name>
          <t>As per <xref section="3.1" sectionFormat="of" target="RFC7641"/>, a client can register its interest in observing a resource at a server, by sending a registration request including the Observe Option with value 0.</t>
          <t>If the server registers the observation as ongoing, the server sends back a successful response also including the Observe Option, hence confirming that an entry has been successfully added for that client.</t>
          <t>If the client receives back the successful response above from the server, then the client also registers the observation as ongoing.</t>
          <t>In case the client can ever consider to preserve ongoing observations beyond a key update as defined below, then the client MUST NOT simply forget about an ongoing observation if not interested in it anymore. Instead, the client MUST send an explicit cancellation request to the server, i.e., a request including the Observe Option with value 1 (see <xref section="3.6" sectionFormat="of" target="RFC7641"/>). After sending this cancellation request, if the client does not receive back a response confirming that the observation has been terminated, the client MUST NOT consider the observation terminated. The client MAY try again to terminate the observation by sending a new cancellation request.</t>
          <t>In case a peer A performs a KUDOS execution with another peer B, and A has ongoing observations with B that it is interested to preserve beyond the key update, then A can explicitly indicate its interest to do so. To this end, the peer A sets to 1 the bit "Preserve Observations", 'b', in the 'x' byte of the OSCORE Option value (see <xref target="ssec-oscore-option-extensions"/>), in the KUDOS message it sends to the other peer B.</t>
          <t>If a peer acting as responder receives the first KUDOS message with the bit 'b' set to 0, then the peer MUST set to 0 the bit 'b' in the KUDOS message it sends as follow-up, regardless of its wish to preserve ongoing observations with the other peer.</t>
          <t>If a peer acting as initiator has sent the first KUDOS message with the bit 'b' set to 0, the peer MUST ignore the bit 'b' in the follow-up KUDOS message that it receives from the other peer.</t>
          <t>After successfully completing the KUDOS execution (i.e., after having successfully derived the new OSCORE Security Context CTX_NEW), both peers have expressed their interest in preserving their common ongoing observations if and only if the bit 'b' was set to 1 in both the exchanged KUDOS messages. In such a case, each peer X performs the following actions.</t>
          <ol spacing="normal" type="1"><li>The peer X considers all the still ongoing observations that it has with the other peer, such that X acts as client in those observations. If there are no such observations, the peer X takes no further actions. Otherwise, it moves to step 2.</li>
            <li>The peer X considers all the OSCORE Partial IV values used in the Observe registration request associated with any of the still ongoing observations determined at step 1.</li>
            <li>The peer X determines the value PIV* as the highest OSCORE Partial IV value among those considered at step 2.</li>
            <li>In the Sender Context of the OSCORE Security Context shared with the other peer, the peer X sets its own Sender Sequence Number to (PIV* + 1), rather than to 0.</li>
          </ol>
          <t>As a result, each peer X will "jump" beyond the OSCORE Partial IV (PIV) values that are occupied and in use for ongoing observations with the other peer where X acts as client.</t>
          <t>Note that, each time it runs KUDOS, a peer must determine if it wishes to preserve ongoing observations with the other peer or not, before sending its KUDOS message.</t>
          <t>To this end, the peer should also assess the new value that PIV* would take after a successful completion of KUDOS, in case ongoing observations with the other peer are going to be preserved. If the peer considers such a new value of PIV* to be too close to the maximum possible value admitted for the OSCORE Partial IV, then the peer may choose to run KUDOS with no intention to preserve its ongoing observations with the other peer, in order to "start over" from a fresh, entirely unused PIV space.</t>
          <t>Application policies can further influence whether attempting to preserve observations beyond a key update is appropriate or not.</t>
        </section>
      </section>
      <section anchor="ssec-retention">
        <name>Retention Policies</name>
        <t>Applications MAY define policies that allow a peer to temporarily keep the old Security Context CTX_OLD beyond having established the new Security Context CTX_NEW and having achieved key confirmation, rather than simply overwriting CTX_OLD with CTX_NEW. This allows the peer to decrypt late, still on-the-fly incoming messages protected with CTX_OLD.</t>
        <t>When enforcing such policies, the following applies.</t>
        <ul spacing="normal">
          <li>Outgoing non KUDOS messages MUST be protected by using only CTX_NEW.</li>
          <li>Incoming non KUDOS messages MUST first be attempted to decrypt by using CTX_NEW. If decryption fails, a second attempt can use CTX_OLD.</li>
          <li>When an amount of time defined by the policy has elapsed since the establishment of CTX_NEW, the peer deletes CTX_OLD.</li>
        </ul>
        <t>A peer MUST NOT retain CTX_OLD beyond the establishment of CTX_NEW and the achievement of key confirmation, if any of the following conditions holds: CTX_OLD is expired; limits set for safe key usage have been reached <!---{{ietf-core-oscore-key-limits}}-->, for the Recipient Key of the Recipient Context of CTX_OLD.</t>
      </section>
      <section anchor="ssec-discussion">
        <name>Discussion</name>
        <t>KUDOS is intended to deprecate and replace the procedure defined in <xref section="B.2" sectionFormat="of" target="RFC8613"/>, as fundamentally achieving the same goal, while displaying a number of improvements and advantages.</t>
        <t>In particular, it is especially convenient for the handling of failure events concerning the JRC node in 6TiSCH networks (see <xref target="sec-current-methods"/>). That is, among its intrinsic advantages compared to the procedure defined in <xref section="B.2" sectionFormat="of" target="RFC8613"/>, KUDOS preserves the same ID Context value, when establishing a new OSCORE Security Context.</t>
        <t>Since the JRC uses ID Context values as identifiers of network nodes, namely "pledge identifiers", the above implies that the JRC does not have to perform anymore a mapping between a new, different ID Context value and a certain pledge identifier (see <xref section="8.3.3" sectionFormat="of" target="RFC9031"/>). It follows that pledge identifiers can remain constant once assigned, and thus ID Context values used as pledge identifiers can be employed in the long-term as originally intended.</t>
        <section anchor="kudos-interleaved-with-other-message-exchanges">
          <name>KUDOS Interleaved with Other Message Exchanges</name>
          <t>During a KUDOS execution a peer that is a CoAP Client must be ready to receive CoAP responses protected with a different OSCORE Security Context than the one that was used to protect the corresponding request.</t>
          <t>This can happen, for instance, when a CoAP client sends a request and, shortly after that, it executes KUDOS. In such a case, the CoAP request is protected with CTX_OLD, while the CoAP response from the server is protected with CTX_NEW. Another case is when incoming responses are Observe notifications protected with CTX_NEW, while the corresponding request from the CoAP client that started the observation was protected with CTX_OLD.</t>
          <t>Also, this can happen when running KUDOS in the reverse message flow, if the client uses NSTART &gt; 1 and one of its requests triggers a KUDOS execution, i.e., the server replies with the first KUDOS message by acting as responder. The other requests would be latest served by the server after KUDOS has been completed.</t>
        </section>
        <section anchor="communication-overhead">
          <name>Communication Overhead</name>
          <t>Each of the two KUDOS messages displays a small communication overhead. This is determined by the following, additional information conveyed in the OSCORE option (see <xref target="ssec-oscore-option-extensions"/>).</t>
          <ul spacing="normal">
            <li>The second byte of the OSCORE option.</li>
            <li>The byte 'x' of the OSCORE option.</li>
            <li>The nonce conveyed in the 'nonce' field of the OSCORE option. Its size ranges from 1 to 16 bytes as indicated in the 'x' byte, and is typically of 8 bytes.</li>
          </ul>
          <t>Assuming nonces of the same size in both messages of the same KUDOS execution, this results in the following minimum, typical and maximum communication overhead, when considering a nonce with size 1, 8 and 16 bytes, respectively. All the indicated values are in bytes.</t>
          <artwork align="center"><![CDATA[
+-------+-----------------+-----------------+
| Nonce | Overhead of one | Overhead of one |
| size  | KUDOS message   | KUDOS execution |
+-------+-----------------+-----------------+
| 1     | 3               | 6               |
+-------+-----------------+-----------------+
| 8     | 10              | 20              |
+-------+-----------------+-----------------+
| 16    | 18              | 36              |
+-------+-----------------+-----------------+
]]></artwork>
        </section>
        <section anchor="well-known-kudos-desc">
          <name>Well-Known KUDOS Resource</name>
          <t>According to this specification, KUDOS is transferred in POST requests to the Uri-Path: "/.well-known/kudos" (see <xref target="well-known-kudos"/>), and 2.04 (Changed) responses. An application may define its own path that can be discovered, e.g., using a resource directory <xref target="RFC9176"/>. Client applications can use the resource type "core.kudos" to discover a server's KUDOS resource, i.e., where to send KUDOS requests, see <xref target="rt-kudos"/>.</t>
        </section>
      </section>
      <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 'ead_value' encoded as a CBOR bstr.</t>
        <t>This document defines a new EDHOC EAD item KUDOS_EAD and registers its 'ead_label' in <xref target="iana-edhoc-aad"/>. By including this EAD item in an outgoing EDHOC message, a sender peer can indicate whether it supports KUDOS and in which modes, as well as query the other peer about its support. Note that peers do not have to use this EDHOC EAD item to be able to run KUDOS with each other, irrespective of the modes they support. The possible values of the 'ead_value' are as follows:</t>
        <artwork align="center"><![CDATA[
+------+--------==+----------------------------------------------+
| Name | Value    | Description                                  |
+======+==========+==============================================+
| ASK  | h''      | Used only in EDHOC message_1. It asks the    |
|      | (0x40)   | recipient peer to specify in EDHOC message_2 |
|      |          | whether it supports KUDOS.                   |
+------+----------+----------------------------------------------+
| NONE | h'00'    | Used only in EDHOC message_2 and message_3.  |
|      | (0x4100) | It specifies that the sender peer does not   |
|      |          | support KUDOS.                               |
+------+----------+----------------------------------------------+
| FULL | h'01'    | Used only in EDHOC message_2 and message_3.  |
|      | (0x4101) | It specifies that the sender peer supports   |
|      |          | KUDOS in FS mode and no-FS mode.             |
+------+----------+----------------------------------------------+
| PART | h'02'    | Used only in EDHOC message_2 and message_3.  |
|      | (0x4102) | It specifies that the sender peer supports   |
|      |          | KUDOS in no-FS mode only.                    |
+------+----------+----------------------------------------------+
]]></artwork>
        <t>When the KUDOS_EAD item is included in EDHOC message_1 with 'ead_value' ASK, a recipient peer that supports the KUDOS_EAD item MUST specify whether it supports KUDOS in EDHOC message_2.</t>
        <t>When the KUDOS_EAD item is not included in EDHOC message_1 with 'ead_value' ASK, a recipient peer that supports the KUDOS_EAD item MAY still specify whether it supports KUDOS in EDHOC message_2.</t>
        <t>When the KUDOS_EAD item is included in EDHOC message_2 with 'ead_value' FULL or PART, a recipient peer that supports the KUDOS_EAD item SHOULD specify whether it supports KUDOS in EDHOC message_3. An exception applies in case, based on application policies or other context information, the recipient peer that receives EDHOC message_2 already knows that the sender peer is supposed to have such knowledge.</t>
        <t>When the KUDOS_EAD item is included in EDHOC message_2 with 'ead_value' NONE, a recipient peer that supports the KUDOS_EAD item MUST NOT specify whether it supports KUDOS in EDHOC message_3.</t>
        <t>In the following cases, the recipient peer silently ignores the KUDOS_EAD item specified in the received EDHOC message, and does not include a KUDOS_EAD item in the next EDHOC message it sends (if any).</t>
        <ul spacing="normal">
          <li>The recipient peer does not support the KUDOS_EAD item.</li>
          <li>The KUDOS_EAD item is included in EDHOC message_1 with 'ead_value' different than ASK</li>
          <li>The KUDOS_EAD item is included in EDHOC message_2 or message_3 with 'ead_value' ASK.</li>
          <li>The KUDOS_EAD item is included in EDHOC message_4.</li>
        </ul>
        <t>That is, by specifying 'ead_value' ASK in EDHOC message_1, a peer A can indicate to the other peer B that it wishes to know if B supports KUDOS and in what mode(s). In the following EDHOC message_2, B indicates whether it supports KUDOS and in what mode(s), by specifying either NONE, FULL or PART as 'ead_value'. Specifying the 'ead_value' FULL or PART in EDHOC message_2 also asks A to indicate whether it supports KUDOS in EDHOC message_3.</t>
        <t>To further illustrate the functionality, two examples are presented below as EDHOC executions where only the new KUDOS_EAD item is shown when present, and assuming that no other EAD items are used by the two peers.</t>
        <artwork align="center"><![CDATA[
EDHOC                                                 EDHOC
Initiator                                         Responder
|                                                         |
|                EAD_1: (TBD_LABEL, ASK)                  |
+-------------------------------------------------------->|
|                        message_1                        |
|                                                         |
|                EAD_2: (TBD_LABEL, FULL)                 |
|<--------------------------------------------------------+
|                        message_2                        |
|                                                         |
|                EAD_3: (TBD_LABEL, FULL)                 |
+-------------------------------------------------------->|
|                        message_3                        |
|                                                         |
]]></artwork>
        <t>In the example above, the Initiator asks the EDHOC Responder about its support for KUDOS ('ead_value' = ASK). In EDHOC message_2, the Responder indicates that it supports both the FS and no-FS mode of KUDOS ('ead_value' = FULL). Finally, in EDHOC message_3, the Initiator indicates that it also supports both the FS and no-FS mode of KUDOS ('ead_value' = FULL). After the EDHOC execution has successfully finished, both peers are aware that they both support KUDOS, in the FS and no-FS modes.</t>
        <artwork align="center"><![CDATA[
EDHOC                                                 EDHOC
Initiator                                         Responder
|                                                         |
|                EAD_1: (TBD_LABEL, ASK)                  |
+-------------------------------------------------------->|
|                        message_1                        |
|                                                         |
|                EAD_2: (TBD_LABEL, NONE)                 |
|<--------------------------------------------------------+
|                        message_2                        |
|                                                         |
+-------------------------------------------------------->|
|                        message_3                        |
|                                                         |
]]></artwork>
        <t>In this second example, the Initiator asks the EDHOC Responder about its support for KUDOS ('ead_value' = ASK). In EDHOC message_2, the Responder indicates that it does not support KUDOS at all ('ead_value' = NONE). Finally, in EDHOC message_3, the Initiator does not include the KUDOS_EAD item, since it already knows that using KUDOS with the other peer will not be possible. After the EDHOC execution has successfully finished, the Initiator is aware that the Responder does not support KUDOS, which the two peers are not going to use with each other.</t>
      </section>
    </section>
    <section anchor="update-oscore-ids">
      <name>Update of OSCORE Sender/Recipient IDs</name>
      <t>This section defines a procedure that two peers can perform, in order to update the OSCORE Sender/Recipient IDs that they use in their shared OSCORE Security Context.</t>
      <t>This results in privacy benefits, as it helps mitigate the ability of an adversary to correlate the two peers' communication between two points in time or between paths. For instance, two peers may want to use this procedure before switching to a different network for their communication, in order to make it more difficult to understand that the continued communication over the new network is taking place between the same two peers.</t>
      <t>This procedure can be initiated by either peer, i.e., the CoAP client or the CoAP server may start it by sending the first OSCORE IDs update message. Like in KUDOS, the former case is denoted as the "forward message flow" and the latter as the "reverse message flow".</t>
      <t>When sending an OSCORE IDs update message, a peer provides its new intended OSCORE Recipient ID to the other peer.</t>
      <t>Furthermore, this procedure can be executed stand-alone, or instead seamlessly integrated in an execution of KUDOS (see <xref target="sec-rekeying-method"/>) using its FS mode or no-FS mode (see <xref target="no-fs-mode"/>).</t>
      <ul spacing="normal">
        <li>
          <t>In the former stand-alone case, updating the OSCORE Sender/Recipient IDs effectively results in updating part of the current OSCORE Security Context.  </t>
          <t>
That is, both peers derive a new Sender Key, Recipient Key and Common IV, as defined in <xref section="3.2" sectionFormat="of" target="RFC8613"/>. Also, both peer re-initialize the Sender Sequence Number and the replay window accordingly, as defined in <xref section="3.2.2" sectionFormat="of" target="RFC8613"/>. Since the same Master Secret is preserved, forward secrecy is not achieved.  </t>
          <t>
As defined in <xref target="id-update-additional-actions"/>, the two peers must take additional actions to ensure a safe execution of the OSCORE IDs update procedure.</t>
        </li>
        <li>In the latter integrated case, the KUDOS initiator (responder) also acts as initiator (responder) for the OSCORE IDs update procedure. That is, both KUDOS and the OSCORE IDs update procedure MUST be run either in their forward message flow or in their reverse message flow.</li>
      </ul>
      <section anchor="sec-recipient-id-option">
        <name>The Recipient-ID Option</name>
        <t>The Recipient ID Option defined in this section has the properties summarized in <xref target="fig-recipient-id-option"/>, which extends Table 4 of <xref target="RFC7252"/>. That is, the option is elective, safe to forward, part of the cache key and non repeatable.</t>
        <figure anchor="fig-recipient-id-option">
          <name>The Recipient-ID Option.</name>
          <artwork align="center"><![CDATA[
+------+---+---+---+---+--------------+--------+--------+---------+
| No.  | C | U | N | R | Name         | Format | Length | Default |
+------+---+---+---+---+--------------+--------+--------+---------+
|      |   |   |   |   |              |        |        |         |
| TBD1 |   |   |   |   | Recipient-ID | opaque |  0-7   | (none)  |
|      |   |   |   |   |              |        |        |         |
+------+---+---+---+---+--------------+--------+--------+---------+
         C=Critical, U=Unsafe, N=NoCacheKey, R=Repeatable
]]></artwork>
        </figure>
        <t>This document particularly defines how this option is used in messages protected with OSCORE. That is, when the option is included in an outgoing message, the option value specifies the new OSCORE Recipient ID that the sender endpoint intends to use with the other endpoint sharing the OSCORE Security Context.</t>
        <t>The Recipient-ID Option is of class E in terms of OSCORE processing (see <xref section="4.1" sectionFormat="of" target="RFC8613"/>).</t>
        <section anchor="example-client-initiated-id-update">
          <name>Forward Message Flow</name>
          <t><xref target="fig-id-update-client-init"/> shows an example of the OSCORE IDs update procedure, run stand-alone and in the forward message flow, with the client acting as initiator.</t>
          <t>On each peer, SID and RID denote the OSCORE Sender ID and Recipient ID of that peer, respectively.</t>
          <figure anchor="fig-id-update-client-init">
            <name>Example of the OSCORE IDs Update forward message flow</name>
            <artwork align="center"><![CDATA[
          Client                             Server
       (initiator)                         (responder)
            |                                   |
CTX_A {     |                                   | CTX_A {
 SID = 1    |                                   |  SID = 0
 RID = 0    |                                   |  RID = 1
}           |                                   | }
            |                                   |
            |            Request #1             |
Protect     |---------------------------------->|
with CTX_A  | OSCORE Option: ..., kid:1         | Verify
            | Encrypted_Payload {               | with CTX_A
            |    ...                            |
            |    RecipientID: 42                |
            |    ...                            |
            |    Application Payload            |
            | }                                 |
            |                                   |

          // When embedded in KUDOS, CTX_1 is CTX_A,
          // and there cannot be application payload.

            |                                   |
            |            Response #1            |
            |<----------------------------------| Protect
Verify      | OSCORE Option: ...                | with CTX_A
with CTX_A  | Encrypted_Payload {               |
            |    ...                            |
            |    Recipient-ID: 78               |
            |    ...                            |
            |    Application Payload            |
            | }                                 |
            |                                   |

           // When embedded in KUDOS, this message
           // is protected using CTX_NEW, and there
           // cannot be application payload.
           //
           // Then, CTX_B builds on CTX_NEW by updating
           // the new Sender/Recipient IDs

            |                                   |
CTX_B {     |                                   | CTX_B {
 SID = 78   |                                   |  SID = 42
 RID = 42   |                                   |  RID = 78
}           |                                   | }
            |                                   |
            |            Request #2             |
Protect     |---------------------------------->|
with CTX_B  | OSCORE Option: ..., kid:78        | Verify
            | Encrypted_Payload {               | with  CTX_B
            |    ...                            |
            |    Application Payload            |
            | }                                 |
            |                                   |
            |            Response #2            |
            |<----------------------------------| Protect
Verify      | OSCORE Option: ...                | with CTX_B
with CTX_B  | Encrypted_Payload {               |
            |    ...                            |
            |    Application Payload            |
            | }                                 |
            |                                   |
Discard     |                                   |
CTX_A       |                                   |
            |                                   |
            |            Request #3             |
Protect     |---------------------------------->|
with CTX_B  | OSCORE Option: ..., kid:78        | Verify
            | Encrypted_Payload {               | with CTX_B
            |    ...                            |
            |    Application Payload            |
            | }                                 |
            |                                   | Discard
            |                                   | CTX_A
            |                                   |
            |            Response #3            |
            |<----------------------------------| Protect
Verify      | OSCORE Option: ...                | with CTX_B
with CTX_B  | Encrypted_Payload {               |
            |    ...                            |
            |    Application Payload            |
            | }                                 |
            |                                   |
]]></artwork>
          </figure>
          <t>[TODO: discuss the example]</t>
        </section>
        <section anchor="example-server-initiated-id-update">
          <name>Reverse Message Flow</name>
          <t><xref target="fig-id-update-server-init"/> shows an example of the OSCORE IDs update procedure, run stand-alone and in the reverse message flow, with the server acting as initiator.</t>
          <t>On each peer, SID and RID denote the OSCORE Sender ID and Recipient ID of that peer, respectively.</t>
          <figure anchor="fig-id-update-server-init">
            <name>Example of the OSCORE IDs Update reverse message flow</name>
            <artwork align="center"><![CDATA[
          Client                             Server
       (responder)                         (initiator)
            |                                   |
CTX_A {     |                                   | CTX_A {
 SID = 1    |                                   |  SID = 0
 RID = 0    |                                   |  RID = 1
}           |                                   | }
            |                                   |
            |            Request #1             |
Protect     |---------------------------------->|
with CTX_A  | OSCORE Option: ..., kid:1         | Verify
            | Encrypted_Payload {               | with CTX_A
            |    ...                            |
            |    Application Payload            |
            | }                                 |
            |                                   |

          // When (to be) embedded in KUDOS,
          // CTX_OLD is CTX_A

            |                                   |
            |            Response #1            |
            |<----------------------------------| Protect
Verify      | OSCORE Option: ...                | with CTX_A
with CTX_A  | Encrypted_Payload {               |
            |    ...                            |
            |    Recipient-ID: 78               |
            |    Application Payload            |
            | }                                 |

          // When embedded in KUDOS, this message is
          // protected with CTX_1 instead, and
          // there cannot be application payload.

            |                                   |
CTX_A {     |                                   | CTX_A {
 SID = 1    |                                   |  SID = 0
 RID = 0    |                                   |  RID = 1
}           |                                   | }
            |                                   |
            |            Request #2             |
Protect     |---------------------------------->|
with CTX_A  | OSCORE Option: ..., kid:1         | Verify
            | Encrypted_Payload {               | with CTX_A
            |    ...                            |
            |    Recipient-ID: 42               |
            |    Application Payload            |
            | }                                 |
            |                                   |

          // When embedded in KUDOS, this message is
          // protected with CTX_NEW instead, and
          // there cannot be application payload.

            |                                   |
            |            Response #2            |
            |<----------------------------------| Protect
Verify      | OSCORE Option: ...                | with CTX_A
with CTX_A  | Encrypted_Payload {               |
            |    ...                            |
            |    Application Payload            |
            | }                                 |
            |                                   |

          // When embedded in KUDOS, this message is
          // protected with CTX_NEW instead, and
          // there cannot be application payload.

            |                                   |
CTX_B {     |                                   | CTX_B {
 SID = 78   |                                   |  SID = 42
 RID = 42   |                                   |  RID = 78
}           |                                   | }
            |                                   |
            |            Request #3             |
Protect     |---------------------------------->|
with CTX_B  | OSCORE Option: ..., kid:78        | Verify
            | Encrypted_Payload {               | with CTX_B
            |    ...                            |
            |    Application Payload            |
            | }                                 |
            |                                   |
            |            Response #3            |
            |<----------------------------------| Protect
Verify      | OSCORE Option: ...                | with CTX_B
with CTX_B  | Encrypted_Payload {               |
            |    ...                            |
            |    Application Payload            |
            | }                                 |
            |                                   |
Discard     |                                   |
CTX_A       |                                   |
            |                                   |
            |            Request #4             |
Protect     |---------------------------------->|
with CTX_B  | OSCORE Option: ..., kid:78        | Verify
            | Encrypted_Payload {               | with CTX_B
            |    ...                            |
            |    Application Payload            |
            | }                                 |
            |                                   |
            |                                   | Discard
            |                                   | CTX_A
            |                                   |
            |            Response #4            |
            |<----------------------------------| Protect
Verify      | OSCORE Option: ...                | with CTX_B
with CTX_B  | Encrypted_Payload {               |
            |    ...                            |
            |    Application Payload            |
            | }                                 |
            |                                   |
]]></artwork>
          </figure>
          <t>[TODO: discuss the example]</t>
        </section>
        <section anchor="id-update-additional-actions">
          <name>Additional Actions for Stand-Alone Execution</name>
          <t>After having experienced a loss of state, a peer MUST NOT participate in a stand-alone OSCORE IDs update procedure with another peer, until having performed a full-fledged establishment/renewal of an OSCORE Security Context with the other peer (e.g., by running KUDOS or the EDHOC protocol <xref target="I-D.ietf-lake-edhoc"/>).</t>
          <t>More precisely, a peer has experienced a loss of state if it cannot access the latest snapshot of the latest OSCORE Security Context CTX_OLD or the whole set of OSCORE Sender/Recipient IDs that have been used with the triplet (Master Secret, Master Salt, ID Context) of CTX_OLD. This can happen, for instance, after a device reboot.</t>
          <t>Furthermore, when participating in a stand-alone OSCORE IDs update procedure, a peer performs the following additional steps.</t>
          <ul spacing="normal">
            <li>When sending an OSCORE IDs update message, the peer MUST specify its new intended OSCORE Recipient ID as value of the Recipient-ID Option only if such a Recipient ID is not only available (see <xref section="3.3" sectionFormat="of" target="RFC8613"/>, but it has also never been used as Recipient ID with the current triplet (Master Secret, Master Salt, ID Context).</li>
            <li>When receiving an OSCORE IDs update message, the peer MUST abort the procedure if it has already used the identifier specified in the Recipient-ID Option as its own Sender ID with current triplet (Master Secret, Master Salt, ID Context).</li>
          </ul>
          <t>In order to fulfill the conditions above, a peer has to keep track of the OSCORE Sender/Recipient IDs that it has used with the current triplet (Master Secret, Master Salt, ID Context) since the latest update of OSCORE Master Secret (e.g, performed by running KUDOS).</t>
        </section>
      </section>
      <section anchor="preserving-observations-across-id-updates">
        <name>Preserving Observations Across ID Updates</name>
        <t>When running the OSCORE IDs Update procedure stand-alone or integrated in an execution of KUDOS, the following holds if Observe <xref target="RFC7641"/> is supported, in order to preserve ongoing observations beyond a change of OSCORE identifiers.</t>
        <ul spacing="normal">
          <li>
            <t>If a peer intends to keep active beyond an update of its Sender ID the observations where it is acting as CoAP client, then the peer:  </t>
            <ul spacing="normal">
              <li>MUST store the value of the 'kid' parameter from the original Observe requests, and retain it for the whole duration of the observations, throughout which the client MUST NOT update the stored value associated with the corresponding Observe registration request; and</li>
              <li>MUST use the stored value of the 'kid' parameter from the original Observe registration request as value for the 'request_kid' parameter in the external_aad structure (see <xref section="5.4" sectionFormat="of" target="RFC8613"/>), when verifying notifications for that observation as per <xref section="8.4.2" sectionFormat="of" target="RFC8613"/>.</li>
            </ul>
          </li>
          <li>
            <t>If a peer is acting as CoAP server in an ongoing observation, then the peer:  </t>
            <ul spacing="normal">
              <li>MUST store the value of the 'kid' parameter from the original Observe registration request, and retain it for the whole duration of the observation, throughout which the peer MUST NOT update the stored value associated with the corresponding Observe registration request; and</li>
              <li>MUST use the stored value of the 'kid' parameter from the original Observe registration request as value for the 'request_kid' parameter in the external_aad structure (see <xref section="5.4" sectionFormat="of" target="RFC8613"/>), when protecting notifications for that observation as per <xref section="8.3.1" sectionFormat="of" target="RFC8613"/>.</li>
            </ul>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document mainly covers security considerations about using AEAD keys in OSCORE and their usage limits, in addition to the security considerations of <xref target="RFC8613"/>.</t>
      <t>Depending on the specific key update procedure used to establish a new OSCORE Security Context, the related security considerations also apply.</t>
      <t>[TODO: Add more considerations.]</t>
    </section>
    <section anchor="sec-iana">
      <name>IANA Considerations</name>
      <t>This document has the following actions for IANA.</t>
      <t>Note to RFC Editor: Please replace all occurrences of "[RFC-XXXX]" with the RFC number of this specification and delete this paragraph.</t>
      <section anchor="iana-coap-options">
        <name>CoAP Option Numbers Registry</name>
        <t>IANA is asked to enter the following option number to the "CoAP Option Numbers" registry within the "CoRE Parameters" registry group.</t>
        <artwork align="center"><![CDATA[
+--------+--------------+------------+
| Number |     Name     | Reference  |
+--------+--------------+------------+
|  TBD   | Recipient-ID | [RFC-XXXX] |
+--------+--------------+------------+
]]></artwork>
        <t>The number suggested to IANA for the Recipient-ID Option is 24.</t>
      </section>
      <section anchor="iana-cons-flag-bits">
        <name>OSCORE Flag Bits Registry</name>
        <t>IANA is asked to add the following entries to the "OSCORE Flag Bits" registry within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <artwork><![CDATA[
+----------+-------------+-------------------------------+------------+
| Bit      | Name        | Description                   | Reference  |
| Position |             |                               |            |
+----------+-------------+-------------------------------+------------+
|     0    | Extension-1 | Set to 1 if the OSCORE Option | [RFC-XXXX] |
|          | Flag        | specifies a second byte,      |            |
|          |             | which includes the OSCORE     |            |
|          |             | flag bits 8-15                |            |
+----------+-------------+-------------------------------+------------+
|     8    | Extension-2 | Set to 1 if the OSCORE Option | [RFC-XXXX] |
|          | Flag        | specifies a third byte,       |            |
|          |             | which includes the OSCORE     |            |
|          |             | flag bits 16-23               |            |
+----------+-------------+-------------------------------+------------+
|    15    | Nonce Flag  | Set to 1 if nonce is present  | [RFC-XXXX] |
|          |             | in the compressed COSE object |            |
+----------+-------------+-------------------------------+------------+
|    16    | Extension-3 | Set to 1 if the OSCORE Option | [RFC-XXXX] |
|          | Flag        | specifies a fourth byte,      |            |
|          |             | which includes the OSCORE     |            |
|          |             | flag bits 24-31               |            |
|          |             |                               |            |
+----------+-------------+-------------------------------+------------+
|    24    | Extension-4 | Set to 1 if the OSCORE Option | [RFC-XXXX] |
|          | Flag        | specifies a fifth byte,       |            |
|          |             | which includes the OSCORE     |            |
|          |             | flag bits 32-39               |            |
|          |             |                               |            |
+----------+-------------+-------------------------------+------------+
|    32    | Extension-5 | Set to 1 if the OSCORE Option | [RFC-XXXX] |
|          | Flag        | specifies a sixth byte,       |            |
|          |             | which includes the OSCORE     |            |
|          |             | flag bits 40-47               |            |
|          |             |                               |            |
+----------+-------------+-------------------------------+------------+
|    40    | Extension-6 | Set to 1 if the OSCORE Option | [RFC-XXXX] |
|          | Flag        | specifies a seventh byte,     |            |
|          |             | which includes the OSCORE     |            |
|          |             | flag bits 48-55               |            |
|          |             |                               |            |
+----------+-------------+-------------------------------+------------+
|    48    | Extension-7 | Set to 1 if the OSCORE Option | [RFC-XXXX] |
|          | Flag        | specifies an eigth byte,      |            |
|          |             | which includes the OSCORE     |            |
|          |             | flag bits 56-63               |            |
|          |             |                               |            |
+----------+-------------+-------------------------------+------------+
]]></artwork>
        <t>In the same registry, IANA is asked to mark as 'Unassigned' the entry with Bit Position of 1, i.e., to update the entry as follows.</t>
        <artwork><![CDATA[
+----------+------------------+--------------------------+------------+
| Bit      | Name             | Description              | Reference  |
| Position |                  |                          |            |
+----------+------------------+--------------------------+------------+
|     1    | Unassigned       |                          |            |
+----------+------------------+--------------------------+------------+
]]></artwork>
      </section>
      <section anchor="iana-edhoc-aad">
        <name>EDHOC External Authorization Data Registry</name>
        <t>IANA is asked to add the following entries to the "EDHOC External Authorization Data" registry within the "Ephemeral Diffie-Hellman Over COSE (EDHOC)" registry group.</t>
        <artwork><![CDATA[
+---------+--------------------------------------+--------------------+
| Label   | Description                          | Reference          |
+=========+======================================+====================+
| TBD1    | Indicates whether this peer supports | [RFC-XXXX]         |
|         | KUDOS and in which mode(s)           |                    |
+---------+--------------------------------------+--------------------+
]]></artwork>
      </section>
      <section anchor="well-known-kudos">
        <name>The Well-Known URI Registry</name>
        <t>IANA is asked to add the 'kudos' well-known URI to the Well-Known URIs registry as defined by <xref target="RFC8615"/>.</t>
        <ul spacing="normal">
          <li>URI suffix: kudos</li>
          <li>Change controller: IETF</li>
          <li>Specification document(s): [[this document]]</li>
          <li>Related information: None</li>
        </ul>
      </section>
      <section anchor="rt-kudos">
        <name>Resource Type (rt=) Link Target Attribute Values Registry</name>
        <t>IANA is requested to add the resource type "core.kudos" to the "Resource Type (rt=) Link Target Attribute Values" registry under the registry group "Constrained RESTful Environments (CoRE) Parameters".</t>
        <ul spacing="normal">
          <li>Value: "core.kudos"</li>
          <li>Description: KUDOS resource.</li>
          <li>Reference: [[this document]]</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">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="P. Eronen" initials="P." surname="Eronen">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="K. Hartke" initials="K." surname="Hartke">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson">
              <organization/>
            </author>
            <author fullname="F. Palombini" initials="F." surname="Palombini">
              <organization/>
            </author>
            <author fullname="L. Seitz" initials="L." surname="Seitz">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman">
              <organization/>
            </author>
            <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>
      </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">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="M. Palattella" initials="M." surname="Palattella">
              <organization/>
            </author>
            <author fullname="L. Grieco" initials="L." surname="Grieco">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="K. Pister" initials="K." surname="Pister">
              <organization/>
            </author>
            <author fullname="T. Watteyne" initials="T." surname="Watteyne">
              <organization/>
            </author>
            <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ć">
              <organization/>
            </author>
            <author fullname="J. Simon" initials="J." surname="Simon">
              <organization/>
            </author>
            <author fullname="K. Pister" initials="K." surname="Pister">
              <organization/>
            </author>
            <author fullname="M. Richardson" initials="M." surname="Richardson">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="G. Selander" initials="G." surname="Selander">
              <organization/>
            </author>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem">
              <organization/>
            </author>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman">
              <organization/>
            </author>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="L. Seitz" initials="L." surname="Seitz">
              <organization/>
            </author>
            <author fullname="G. Selander" initials="G." surname="Selander">
              <organization/>
            </author>
            <author fullname="M. Gunnarsson" initials="M." surname="Gunnarsson">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby">
              <organization/>
            </author>
            <author fullname="M. Koster" initials="M." surname="Koster">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <author fullname="P. van der Stok" initials="P." surname="van der Stok">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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="I-D.ietf-lake-edhoc" target="https://datatracker.ietf.org/doc/html/draft-ietf-lake-edhoc-19">
          <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="3" month="February" year="2023"/>
            <abstract>
              <t>   This document specifies Ephemeral Diffie-Hellman Over COSE (EDHOC), a
   very compact and lightweight authenticated Diffie-Hellman key
   exchange with ephemeral keys.  EDHOC provides mutual authentication,
   forward secrecy, and identity protection.  EDHOC is intended for
   usage in constrained scenarios and a main use case is to establish an
   OSCORE security context.  By reusing COSE for cryptography, CBOR for
   encoding, and CoAP for transport, the additional code size can be
   kept very low.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-lake-edhoc-19"/>
        </reference>
        <reference anchor="I-D.irtf-cfrg-aead-limits" target="https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-aead-limits-06">
          <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="30" month="January" 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-06"/>
        </reference>
        <reference anchor="LwM2M" target="http://www.openmobilealliance.org/release/LightweightM2M/V1_2-20201110-A/OMA-TS-LightweightM2M_Core-V1_2-20201110-A.pdf">
          <front>
            <title>Lightweight Machine to Machine Technical Specification - Core, Approved Version 1.2, OMA-TS-LightweightM2M_Core-V1_2-20201110-A</title>
            <author>
              <organization>Open Mobile Alliance</organization>
            </author>
            <date year="2020" month="November"/>
          </front>
        </reference>
        <reference anchor="LwM2M-Transport" target="http://www.openmobilealliance.org/release/LightweightM2M/V1_2-20201110-A/OMA-TS-LightweightM2M_Transport-V1_2-20201110-A.pdf">
          <front>
            <title>Lightweight Machine to Machine Technical Specification - Transport Bindings, Approved Version 1.2, OMA-TS-LightweightM2M_Transport-V1_2-20201110-A</title>
            <author>
              <organization>Open Mobile Alliance</organization>
            </author>
            <date year="2020" month="November"/>
          </front>
        </reference>
      </references>
    </references>
    <section anchor="sec-document-updates">
      <name>Document Updates</name>
      <t>RFC EDITOR: PLEASE REMOVE THIS SECTION.</t>
      <section anchor="sec-03-04">
        <name>Version -03 to -04</name>
        <ul spacing="normal">
          <li>Removed content about key usage limits.</li>
          <li>Use of "forward message flow" and "reverse message flow".</li>
          <li>Update to RFC 8613 extended to include protection of responses.</li>
          <li>Include EDHOC_KeyUpdate() in the methods for rekeying.</li>
          <li>Describe reasons for using the OSCORE ID update procedure.</li>
          <li>Clarifications on deletion of CTX_OLD and CTX_NEW.</li>
          <li>Added new section on preventing deadlocks.</li>
          <li>Clarified that peers can decide to run KUDOS at any point.</li>
          <li>Defined preservation of observations beyond OSCORE ID updates.</li>
          <li>Revised discussion section, including also communication overhead.</li>
          <li>Defined a well-known KUDOS resource and a KUDOS resource type.</li>
          <li>Editorial improvements.</li>
        </ul>
      </section>
      <section anchor="sec-02-03">
        <name>Version -02 to -03</name>
        <ul spacing="normal">
          <li>Use of the OSCORE flag bit 0 to signal more flag bits.</li>
          <li>In UpdateCtx(), open for future key derivation different than HKDF.</li>
          <li>Simplified updateCtx() to use only Expand(); used to be METHOD 2.</li>
          <li>Included the Partial IV if the second KUDOS message is a response.</li>
          <li>Added signaling of support for KUDOS in EDHOC.</li>
          <li>Clarifications on terminology and reasons for rekeying.</li>
          <li>Updated IANA considerations.</li>
          <li>Editorial improvements.</li>
        </ul>
      </section>
      <section anchor="sec-01-02">
        <name>Version -01 to -02</name>
        <ul spacing="normal">
          <li>Extended terminology.</li>
          <li>Moved procedure for preserving observations across key updates to main body.</li>
          <li>Moved procedure to update OSCORE Sender/Recipient IDs to main body.</li>
          <li>Moved key update without forward secrecy section to main body.</li>
          <li>Define signaling bits present in the 'x' byte.</li>
          <li>Modifications and alignment of updateCtx() with EDHOC.</li>
          <li>Rules for deletion of old EDHOC keys PRK_out and PRK_exporter.</li>
          <li>Describe CBOR wrapping of involved nonces with examples.</li>
          <li>Renamed 'id detail' to 'nonce'.</li>
          <li>Editorial improvements.</li>
        </ul>
      </section>
      <section anchor="sec-00-01">
        <name>Version -00 to -01</name>
        <ul spacing="normal">
          <li>Recommendation on limits for CCM_8. Details in Appendix.</li>
          <li>Improved message processing, also covering corner cases.</li>
          <li>Example of method to estimate and not store 'count_q'.</li>
          <li>Added procedure to update OSCORE Sender/Recipient IDs.</li>
          <li>Added method for preserving observations across key updates.</li>
          <li>Added key update without forward secrecy.</li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank <contact fullname="Christian Amsüss"/>, <contact fullname="Carsten Bormann"/>, <contact fullname="John Preuß Mattsson"/>, <contact fullname="Göran Selander"/> and <contact fullname="Rafa Marin-Lopez"/> for their feedback and comments.</t>
      <t>The work on this document has been partly supported by VINNOVA and the Celtic-Next project CRITISEC; and by the H2020 project SIFIS-Home (Grant agreement 952652).</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
