<?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.7.19 (Ruby 2.7.0) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-oscore-key-update-09" category="std" consensus="true" submissionType="IETF" updates="8613" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <front>
    <title abbrev="Key Update for OSCORE (KUDOS)">Key Update for OSCORE (KUDOS)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-key-update-09"/>
    <author initials="R." surname="Höglund" fullname="Rikard Höglund">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>rikard.hoglund@ri.se</email>
      </address>
    </author>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <date year="2024" month="October" day="21"/>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 86?>

<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>
    <?line 90?>

<section anchor="intro">
      <name>Introduction</name>
      <t>Object Security for Constrained RESTful Environments (OSCORE) <xref target="RFC8613"/> provides end-to-end protection of CoAP <xref target="RFC7252"/> messages at the application-layer, ensuring message confidentiality and integrity, replay protection, as well as binding of response to request between a sender and a recipient.</t>
      <t>To ensure secure communication when using OSCORE, peers may need to update their shared keying material. Among other reasons, approaching key usage limits <xref target="I-D.irtf-cfrg-aead-limits"/><xref target="I-D.ietf-core-oscore-key-limits"/> requires updating the OSCORE keying material before communications can securely continue.</t>
      <t>This document updates <xref target="RFC8613"/> as follows.</t>
      <ul spacing="normal">
        <li>
          <t>It specifies KUDOS, a lightweight key update procedure that the two peers can use in order to update their current keying material and establish a new OSCORE Security Context. This deprecates and replaces the procedure specified in <xref section="B.2" sectionFormat="of" target="RFC8613"/>.</t>
        </li>
        <li>
          <t>With reference to the "OSCORE Flag Bits" registry defined in <xref section="13.7" sectionFormat="of" target="RFC8613"/> as part of the "Constrained RESTful Environments (CoRE) Parameters" registry group, it updates the entries with Bit Position 0 and 1 (see <xref target="sec-iana"/>), both originally marked as "Reserved". That is, it defines and registers the usage of the OSCORE flag bit with Bit Position 0, as the one intended to expand the space for the OSCORE flag bits in the OSCORE Option (see <xref target="ssec-oscore-option-extensions"/>). Also, it marks the bit with Bit Position of 1 as "Unassigned".</t>
        </li>
        <li>
          <t>It updates the protection of CoAP responses with OSCORE originally specified in <xref section="8.3" sectionFormat="of" target="RFC8613"/>, as defined in <xref target="sec-updated-response-protection"/> of this document.</t>
        </li>
      </ul>
      <t>Furthermore, this document specifies a method that two peers can use to update their OSCORE identifiers. This can be run as a stand-alone procedure, or instead integrated in a KUDOS execution.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

<t>Readers are expected to be familiar with the terms and concepts related to CoAP <xref target="RFC7252"/>, Observe <xref target="RFC7641"/>, CBOR <xref target="RFC8949"/>, OSCORE <xref target="RFC8613"/>, and EDHOC <xref target="RFC9528"/>.</t>
        <t>This document additionally defines the following terminology.</t>
        <ul spacing="normal">
          <li>
            <t>Initiator: the peer starting the KUDOS execution, by sending the first KUDOS message.</t>
          </li>
          <li>
            <t>Responder: the peer that receives the first KUDOS message in a KUDOS execution.</t>
          </li>
          <li>
            <t>Forward message flow: the KUDOS execution workflow where the initiator acts as CoAP client (see <xref target="ssec-derive-ctx-client-init"/>).</t>
          </li>
          <li>
            <t>Reverse message flow: the KUDOS execution workflow where the initiator acts as CoAP server (see <xref target="ssec-derive-ctx-server-init"/>).</t>
          </li>
          <li>
            <t>FS mode: the KUDOS execution mode that achieves forward secrecy (see <xref target="ssec-derive-ctx"/>).</t>
          </li>
          <li>
            <t>No-FS mode: the KUDOS execution mode that does not achieve forward secrecy (see <xref target="no-fs-mode"/>).</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="sec-current-methods">
      <name>Current Methods for Rekeying OSCORE</name>
      <t>Two peers communicating using OSCORE may choose to renew their shared keying information by establishing a new OSCORE Security Context for a variety of reasons. A particular reason is approaching limits set for safe key usage <xref target="I-D.ietf-core-oscore-key-limits"/>. Practically, when the relevant limits have been reached for an OSCORE Security Context, the two peers have to establish a new OSCORE Security Context, in order to continue using OSCORE for secure communication. That is, the two peers have to establish new Sender and Recipient Keys, as the keys actually used by the AEAD algorithm.</t>
      <t>In addition to approaching the key usage limits, there may be other reasons for a peer to initiate a key update procedure. These include: the OSCORE Security Context approaching its expiration time; application policies prescribing a regular key rollover; approaching the exhaustion of the Sender Sequence Number space in the OSCORE Sender Context.</t>
      <t>It is <bcp14>RECOMMENDED</bcp14> 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, and/or without aborting ongoing message exchanges.</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="RFC9528"/>, in order to establish a pseudo-random key in a mutually authenticated way.  </t>
          <t>
Then, the two peers can use the established pseudo-random key to derive external application keys. This allows the two peers to securely derive an OSCORE Master Secret and an OSCORE Master Salt, from which an OSCORE Security Context can be established.  </t>
          <t>
This procedure additionally provides forward secrecy.  </t>
          <t>
EDHOC also specifies an optional function, EDHOC_KeyUpdate, to perform a key update in a more efficient way than re-running EDHOC. The two communicating peers call EDHOC_KeyUpdate with equivalent input, which results in derivation of a new shared pseudo-random key. Usage of EDHOC_KeyUpdate preserves forward secrecy.  </t>
          <t>
Note that EDHOC may be run standalone or as part of other workflows, such as when using the EDHOC and OSCORE profile of ACE <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>.</t>
        </li>
        <li>
          <t>If one peer is acting as LwM2M Client and the other peer as LwM2M Server, according to the OMA Lightweight Machine to Machine Core specification <xref target="LwM2M"/>, then the LwM2M Client peer may take the initiative to bootstrap again with the LwM2M Bootstrap Server, and receive again an OSCORE Security Context. Alternatively, the LwM2M Server can instruct the LwM2M Client to initiate this procedure.  </t>
          <t>
If the OSCORE Security Context information on the LwM2M Bootstrap Server has been updated, the LwM2M Client will thus receive a fresh OSCORE Security Context to use with the LwM2M Server.  </t>
          <t>
In addition to that, the LwM2M Client, the LwM2M Server as well as the LwM2M Bootstrap server are required to use the procedure defined in <xref section="B.2" sectionFormat="of" target="RFC8613"/> and overviewed above, when they use a certain OSCORE Security Context for the first time <xref target="LwM2M-Transport"/>.</t>
        </li>
      </ul>
      <t>Manually updating the OSCORE Security Context at the two peers should be a last resort option, and it might often be not practical or feasible.</t>
      <t>Even when any of the alternatives mentioned above is available, it is <bcp14>RECOMMENDED</bcp14> 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 <bcp14>MUST</bcp14> take the second alternative. That is, the server <bcp14>MUST</bcp14> 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.</t>
        <t>An exception is the procedure in <xref section="B.2" sectionFormat="of" target="RFC8613"/>, which is secure although not complying with the above. The reason is that, in that procedure, the server uses the new OSCORE Security Context only and solely to protect the outgoing response (response #1), and no other message is protected with that OSCORE Security Context. Other procedures where that holds would also remain secure.</t>
      </blockquote>
    </section>
    <section anchor="sec-rekeying-method">
      <name>Key Update for OSCORE (KUDOS)</name>
      <t>This section defines KUDOS, a lightweight procedure that two OSCORE peers can use to update their keying material and establish a new OSCORE Security Context.</t>
      <t>KUDOS relies on the OSCORE Option defined in <xref target="RFC8613"/> and extended as defined in <xref target="ssec-oscore-option-extensions"/>, as well as on the support function updateCtx() defined in <xref target="ssec-update-function"/>.</t>
      <t>In order to run KUDOS, two peers perform a message exchange of OSCORE-protected CoAP messages. This message exchange between the two peers is defined in <xref target="ssec-derive-ctx"/>, with particular reference to the stateful FS mode providing forward secrecy. Building on the same message exchange, the possible use of the stateless no-FS mode is defined in <xref target="no-fs-mode"/>, as intended to peers that are not able to write in non-volatile memory. Two peers <bcp14>MUST</bcp14> run KUDOS in FS mode if they are both capable to.</t>
      <t>The key update procedure has the following properties.</t>
      <ul spacing="normal">
        <li>
          <t>KUDOS can be initiated by either peer. In particular, the CoAP client or the CoAP server may start KUDOS by sending the first rekeying message, by running KUDOS in the forward message flow <xref target="ssec-derive-ctx"/> or reverse message flow <xref target="ssec-derive-ctx-server-init"/>, respectively. A peer that supports KUDOS <bcp14>MUST</bcp14> support both the forward message flow and the reverse message flow.</t>
        </li>
        <li>
          <t>The new OSCORE Security Context enjoys forward secrecy, unless KUDOS is run in no-FS mode (see <xref target="no-fs-mode"/>).</t>
        </li>
        <li>
          <t>The same ID Context value used in the old OSCORE Security Context is preserved in the new Security Context. Furthermore, the ID Context value never changes throughout the KUDOS execution.</t>
        </li>
        <li>
          <t>KUDOS is robust against a peer rebooting, and it especially avoids the reuse of AEAD (nonce, key) pairs.</t>
        </li>
        <li>
          <t>KUDOS completes in one round trip by exchanging two CoAP messages. The two peers achieve mutual key confirmation in the following exchange, which is protected with the newly established OSCORE Security Context.</t>
        </li>
      </ul>
      <section anchor="ssec-oscore-option-extensions">
        <name>Extensions to the OSCORE Option</name>
        <t>In order to support the message exchange for establishing a new OSCORE Security Context, this document extends the use of the OSCORE Option originally defined in <xref target="RFC8613"/> as follows.</t>
        <ul spacing="normal">
          <li>
            <t>This document defines the usage of the eight least significant bit, called "Extension-1 Flag", in the first byte of the OSCORE Option containing the OSCORE flag bits. The registration of this flag bit in the "OSCORE Flag Bits" registry is specified in <xref target="iana-cons-flag-bits"/>.  </t>
            <t>
When the Extension-1 Flag is set to 1, the second byte of the OSCORE Option <bcp14>MUST</bcp14> include the OSCORE flag bits 8-15.</t>
          </li>
          <li>
            <t>This document defines the usage of the least significant bit "Nonce Flag", 'd', in the second byte of the OSCORE Option containing the OSCORE flag bits 8-15. This flag bit is specified in <xref target="iana-cons-flag-bits"/>.  </t>
            <t>
When it is set to 1, the compressed COSE object contains a field 'x' and a field 'nonce', to be used for the steps defined in <xref target="ssec-derive-ctx"/>. In particular, the 1 byte 'x' following 'kid context' (if any) encodes the size of the following field 'nonce', together with signaling bits that indicate the specific behavior to adopt during the KUDOS execution.  </t>
            <t>
Hereafter, a message is referred to as a "KUDOS (request/response) message", if and only if the second byte of flags is present and the 'd' bit is set to 1. If that is not the case, the message is referred to as a "non KUDOS (request/response) message".  </t>
            <t>
The encoding of 'x' is as follows:  </t>
            <ul spacing="normal">
              <li>
                <t>The four least significant bits encode the 'nonce' size in bytes minus 1, namely 'm'.</t>
              </li>
              <li>
                <t>The fifth least significant bit is the "No Forward Secrecy" 'p' bit. The sender peer indicates its wish to run KUDOS in FS mode or in no-FS mode, by setting the 'p' bit to 0 or 1, respectively. This makes KUDOS possible to run also for peers that cannot support the FS mode. At the same time, two peers <bcp14>MUST</bcp14> run KUDOS in FS mode if they are both capable to, as per <xref target="ssec-derive-ctx"/>. The execution of KUDOS in no-FS mode is defined in <xref target="no-fs-mode"/>.</t>
              </li>
              <li>
                <t>The sixth least significant bit is the "Preserve Observations" 'b' bit. The sender peer indicates its wish to preserve ongoing observations beyond the KUDOS execution or not, by setting the 'b' bit to 1 or 0, respectively. The related processing is defined in <xref target="preserving-observe"/>.</t>
              </li>
              <li>
                <t>The seventh least significant bit is the 'z' bit. When it is set to 1, the compressed COSE object contains a field 'y' and a field 'old_nonce', to be used for the steps defined in <xref target="ssec-derive-ctx"/>. In particular, the 1 byte 'y' following 'nonce' encodes the size of the following field 'old_nonce'. This bit <bcp14>SHALL</bcp14> only be set in the second KUDOS message and only if it is a CoAP request. For an example see the execution of KUDOS in the reverse message flow shown in <xref target="fig-message-exchange-server-init"/>.</t>
              </li>
              <li>
                <t>The eight least significant bit is reserved for future use. This bit <bcp14>SHALL</bcp14> be set to zero when not in use. According to this specification, if this bit is set to 1: i) if the message is a request, it is considered to be malformed and decompression fails as specified in item 2 of <xref section="8.2" sectionFormat="of" target="RFC8613"/>; ii) if the message is a response, it is considered to be malformed and decompression fails as specified in item 2 of <xref section="8.4" sectionFormat="of" target="RFC8613"/> and the client <bcp14>SHALL</bcp14> discard the response as specified in item 8 of <xref section="8.4" sectionFormat="of" target="RFC8613"/>.</t>
              </li>
            </ul>
            <t>
The encoding of 'y' is as follows:  </t>
            <ul spacing="normal">
              <li>
                <t>The four least significant bits of the 'y' byte encode the 'old_nonce' size in bytes minus 1, namely 'w'.</t>
              </li>
              <li>
                <t>The fifth to seventh least significant bits <bcp14>SHALL</bcp14> be set to zero when not in use. According to this specification, if these bits are set to 1, the message is considered to be malformed and decompression fails as specified in item 2 of <xref section="8.2" sectionFormat="of" target="RFC8613"/></t>
              </li>
              <li>
                <t>The eight least significant bit is reserved for future use. This bit <bcp14>SHALL</bcp14> be set to zero when not in use. According to this specification, if this bit is set to 1, the message is considered to be malformed and decompression fails as specified in item 2 of <xref section="8.2" sectionFormat="of" target="RFC8613"/>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>The second-to-eighth least significant bits in the second byte of the OSCORE Option containing the OSCORE flag bits are reserved for future use. These bits <bcp14>SHALL</bcp14> be set to zero when not in use. According to this specification, if any of these bits are set to 1, the message is considered to be malformed and decompression fails as specified in item 2 of <xref section="8.2" sectionFormat="of" target="RFC8613"/>.</t>
          </li>
        </ul>
        <t><xref target="fig-oscore-option"/> shows extended OSCORE Option value, with the possible presence of 'nonce' and 'old_nonce'.</t>
        <figure anchor="fig-oscore-option">
          <name>The extended OSCORE Option value, with the possible presence of 'nonce' and 'old_nonce'</name>
          <artwork align="center"><![CDATA[
 0 1 2 3 4 5 6 7  8   9   10  11  12  13  14  15 <----- n bytes ----->
+-+-+-+-+-+-+-+-+---+---+---+---+---+---+---+---+---------------------+
|1|0|0|h|k|  n  | 0 | 0 | 0 | 0 | 0 | 0 | 0 | d | Partial IV (if any) |
+-+-+-+-+-+-+-+-+---+---+---+---+---+---+---+---+---------------------+


 <- 1 byte -> <----- s bytes ------> <- 1 byte -> <--- m + 1 bytes --->
+------------+----------------------+------------+--------------------+
| s (if any) | kid context (if any) | x (if any) | nonce (if any)     |
+------------+----------------------+------------+--------------------+
                                   /              \____
                                  /                    |
                                 /   0 1 2 3 4 5 6 7   |
                                 |  +-+-+-+-+-+-+-+-+  |
                                 |  |0|z|b|p|   m   |  |
                                 |  +-+-+-+-+-+-+-+-+  |

    <- 1 byte -> <--- w + 1 bytes --->
   +------------+---------------------+------------------+
   | y (if any) | old_nonce (if any)  | kid (if any) ... |
   +------------+---------------------+------------------+
  /              \____
 /                    |
/   0 1 2 3 4 5 6 7   |
|  +-+-+-+-+-+-+-+-+  |
|  |0|0|0|0|   w   |  |
|  +-+-+-+-+-+-+-+-+  |
]]></artwork>
        </figure>
      </section>
      <section anchor="ssec-update-function">
        <name>Function for Security Context Update</name>
        <t>The updateCtx() function shown in <xref target="function-update"/> takes as input the three parameters X, N, and CTX_IN. In particular, X and N are built from the 'x' and 'nonce' fields transported in the OSCORE Option value of the exchanged KUDOS messages (see <xref target="ssec-oscore-option-extensions"/>), while CTX_IN is the OSCORE Security Context to update. The function returns a new OSCORE Security Context CTX_OUT.</t>
        <t>As a first step, the updateCtx() function builds the two CBOR byte strings X_cbor and N_cbor, with value the input parameter X and N, respectively. Then, it builds X_N, as the byte concatenation of X_cbor and N_cbor.</t>
        <t>After that, the updateCtx() function derives the new values of the Master Secret and Master Salt for CTX_OUT. In particular, the new Master Secret is derived through a KUDOS-Expand() step, which takes as input the Master Secret value from the Security Context CTX_IN, the literal string "key update", X_N, and the length of the Master Secret. Instead, the new Master Salt takes N as value.</t>
        <t>The definition of KUDOS-Expand depends on the key derivation function used for OSCORE by the two peers, as specified in CTX_IN.
either peer
   If the key derivation function is an HKDF Algorithm (see <xref section="3.1" sectionFormat="of" target="RFC8613"/>), then KUDOS-Expand is mapped to HKDF-Expand <xref target="RFC5869"/>, as shown below. Also, the hash algorithm is the same one used by the HKDF Algorithm specified in CTX_IN.</t>
        <artwork align="left"><![CDATA[
KUDOS-Expand(CTX_IN.MasterSecret, ExpandLabel, key_length) =
   HKDF-Expand(CTX_IN.MasterSecret, ExpandLabel, 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.</t>
        <t>Note that the following holds for the newly derived CTX_OUT:</t>
        <ul spacing="normal">
          <li>
            <t>In its Sender Context, the Sender Sequence Number is initialized to 0 as per <xref section="3.2.2" sectionFormat="of" target="RFC8613"/>.</t>
          </li>
          <li>
            <t>If the peer that has derived CTX_OUT supports CoAP Observe <xref target="RFC7641"/>, the Notification Number used for the replay protection of Observe notifications (see <xref section="7.4.1" sectionFormat="of" target="RFC8613"/>) is left as not initialized.</t>
          </li>
        </ul>
        <t>Finally, the updateCtx() 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>Functions for deriving a new OSCORE Security Context</name>
          <artwork align="left"><![CDATA[
function updateCtx(X, N, CTX_IN):

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

  // Create CBOR byte strings from X and N
  X_cbor = create_cbor_bstr(X)
  N_cbor = create_cbor_bstr(N)

  // Concatenate the CBOR-encoded X and N
  X_N = X_cbor | N_cbor

  // Determine the length in bytes of the current Master Secret
  oscore_key_length = length(CTX_IN.MasterSecret)

  // Define the label for the key update
  Label = "key update"

  // Create the new Master Secret using KUDOS-Expand-Label
  MSECRET_NEW = KUDOS_Expand_Label(CTX_IN.MasterSecret, Label,
                                   X_N, oscore_key_length)

  // Set the new Master Salt to N
  MSALT_NEW = N

  // Derive the new Security Context CTX_OUT, using
  // the new Master Secret, the new Master Salt,
  // and other parameters from CTX_IN
  CTX_OUT = derive_security_context(MSECRET_NEW, MSALT_NEW, CTX_IN)

  // Return the new Security Context
  return CTX_OUT


function KUDOS_Expand_Label(master_secret, Label, X_N, key_length):

  struct {
      uint16 length = key_length;
      opaque label<7..255> = "oscore " + Label;
      opaque context<0..255> = X_N;
  } ExpandLabel;

  return KUDOS_Expand(master_secret, ExpandLabel, key_length)
]]></artwork>
        </figure>
      </section>
      <section anchor="ssec-derive-ctx">
        <name>Key Update</name>
        <t>In this section, we define the KUDOS procedure that two peers use to update their OSCORE keying material. Using KUDOS as described in this section will achieve forward secrecy for the new keying material produced by the execution of KUDOS, as long as the OSCORE keying material was also established with forward secrecy. For peers unable to store information to persistent memory, <xref target="no-fs-mode"/> provides an alternative approach to perform key update without achieving forward secrecy. This alternative ensures that also very constrained peers are able to use KUDOS, although without achieving forward secrecy.</t>
        <t>A peer can run KUDOS for active rekeying at any time, or for a variety of more compelling reasons. These include the (approaching) expiration of the OSCORE Security Context, approaching limits for the key usage <xref target="I-D.ietf-core-oscore-key-limits"/>, application policies, and imminent exhaustion of the OSCORE Sender Sequence Number space.</t>
        <t>The expiration time of an OSCORE Security Context and the key usage limits are hard limits. Once reached them, a peer <bcp14>MUST</bcp14> stop using the keying material in the OSCORE Security Context for conventional communication with the other peer, and has to perform a rekeying before resuming secure communication.</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>In particular, CTX_OLD is the most recent OSCORE Security Context that a peer has with a given ID Context or without ID Context, before initiating the KUDOS procedure or upon having received and successfully verified the first KUDOS message. In turn, CTX_NEW is the most recent OSCORE Security Context that a peer has with a given ID Context or without ID Context, before sending the second KUDOS message or upon having received and successfully verified the second KUDOS message.</t>
        <t>The following specifically defines how KUDOS is run in its stateful FS mode achieving forward secrecy. That is, in the OSCORE Option value of all the exchanged KUDOS messages, the "No Forward Secrecy" bit is set to 0.</t>
        <t>In order to run KUDOS in FS mode, both peers have to be able to write in non-volatile memory. From the newly derived Security Context CTX_NEW, the peers <bcp14>MUST</bcp14> store to non-volatile memory the immutable parts of the OSCORE Security Context as specified in <xref section="3.1" sectionFormat="of" target="RFC8613"/>, with the possible exception of the Common IV, Sender Key, and Recipient Key that can be derived again when needed, as specified in <xref section="3.2.1" sectionFormat="of" target="RFC8613"/>. If the peer is unable to write in non-volatile memory, the two peers have to run KUDOS in its stateless no-FS mode (see <xref target="no-fs-mode"/>).</t>
        <section anchor="ssec-nonces-x-bytes">
          <name>Nonces and X Bytes</name>
          <t>When running KUDOS, each peer contributes by generating a nonce value N1 or N2, and providing it to the other peer. The size of the nonces N1 and N2 is application specific, and the use of 8 byte nonce values is <bcp14>RECOMMENDED</bcp14>. The nonces N1 and N2 <bcp14>MUST</bcp14> be random values, with the possible exception described later in <xref target="key-material-handling"/>. Note that a good amount of randomness is important for the nonce generation. <xref target="RFC4086"/> provides guidance on the generation of random values.</t>
          <t>Furthermore, X1 and X2 are the value of the 'x' byte specified in the OSCORE Option of the first and second KUDOS message, respectively. The X1 and X2 values are calculated by the sender peer based on: the length of nonce N1 and N2, specified in the 'nonce' field of the OSCORE Option of the first and second KUDOS message, respectively; as well as on the specific settings the peer wishes to run KUDOS with. As defined in <xref target="ssec-derive-ctx-client-init"/>, these values are used by the peers to build the input N and X to the updateCtx() function, in order to derive a new OSCORE Security Context. As for any new OSCORE Security Context, the Sender Sequence Number and the Replay Window are re-initialized accordingly (see <xref section="3.2.2" sectionFormat="of" target="RFC8613"/>).</t>
          <t>After a peer has generated or received the value N1, and after a peer has calculated or received the value X1, it shall retain these in memory until it has received and processed the second KUDOS message.</t>
        </section>
        <section anchor="ssec-context-handling">
          <name>Handling of OSCORE Security Contexts</name>
          <t>The peer starting a KUDOS execution is denoted as initiator, while the other peer in the same session is denoted as responder.</t>
          <t>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>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"/>).</t>
          <t>The following properties hold for both the forward and reverse message flow.</t>
          <ul spacing="normal">
            <li>
              <t>The initiator always offers the fresh value N1.</t>
            </li>
            <li>
              <t>The responder always offers the fresh value N2</t>
            </li>
            <li>
              <t>The responder is always the first one deriving CTX_NEW.</t>
            </li>
            <li>
              <t>The initiator is always the first one achieving key confirmation, hence the first one able to safely discard CTX_OLD.</t>
            </li>
            <li>
              <t>Both the initiator and the responder use and preserve the same respective OSCORE Sender ID and Recipient ID.</t>
            </li>
            <li>
              <t>If CTX_OLD specifies an OSCORE ID Context, both peers use and preserve the same OSCORE ID Context.</t>
            </li>
          </ul>
          <t>Once a peer has successfully derived the new OSCORE Security Context CTX_NEW, the following applies.</t>
          <ul spacing="normal">
            <li>
              <t>The peer <bcp14>MUST</bcp14> use CTX_NEW to protect outgoing non KUDOS messages, and <bcp14>MUST NOT</bcp14> use the originally shared OSCORE Security Context CTX_OLD for protecting outgoing messages.</t>
            </li>
            <li>
              <t>The peer <bcp14>MUST</bcp14> delete the OSCORE Security Context CTX_DEL older than CTX_OLD such that, with reference to the immediately previous execution of KUDOS, both the following conditions hold:  </t>
              <ul spacing="normal">
                <li>
                  <t>CTX_DEL was used for deriving the OSCORE Security Context CTX_1 used to protect the first KUDOS message; and</t>
                </li>
                <li>
                  <t>CTX_OLD was used to protect the second KUDOS message.</t>
                </li>
              </ul>
            </li>
          </ul>
          <t>Note that if the procedure for updating IDs is run (standalone or embedded) there may be a change of Sender/Recipient IDs between CTX_DEL and CTX_OLD. The way to correctly keep the relation between the OSCORE Security Contexts is implementation specific.</t>
          <t>For instance, this can occur while using the forward message flow (see <xref target="ssec-derive-ctx-client-init"/>}), when the initiator has just received the second KUDOS message, and immediately starts KUDOS again as initiator before sending a non KUDOS message.</t>
          <ul spacing="normal">
            <li>
              <t>The peer <bcp14>MUST</bcp14> 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"/>.  </t>
              <t>
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 a 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>
            </li>
          </ul>
          <t>Once a peer has successfully decrypted and verified an incoming message protected with CTX_NEW, that peer <bcp14>MUST</bcp14> discard the old Security Context CTX_OLD.</t>
        </section>
        <section anchor="ssec-message-handling">
          <name>Handling of Messages</name>
          <t>If a KUDOS message is a CoAP request, then it can target two different types of resources at the recipient CoAP server:</t>
          <ul spacing="normal">
            <li>
              <t>The well-known KUDOS resource at /.well-known/kudos, or an alternative KUDOS resource with resource type "core.kudos" (see <xref target="well-known-kudos-desc"/> and <xref target="rt-kudos"/>). In such a case, no application processing is expected at the CoAP server, and the plain CoAP request composed before OSCORE protection should not include an application payload.</t>
            </li>
            <li>
              <t>A non-KUDOS resource, i.e., an actual application resource that a CoAP request can target in order to trigger application processing at the CoAP server. In such a case, the plain CoAP request composed before OSCORE protection may include an application payload, if admitted by the request method.</t>
            </li>
          </ul>
          <t>In either case, the link to the target resource can have the "osc" target attribute to indicate that the resource is only accessible using OSCORE (see <xref section="9" sectionFormat="of" target="RFC8613"/>).</t>
          <t>Similarly, any CoAP response can also be a KUDOS message. If the corresponding CoAP request has targeted a KUDOS resource, then the plain CoAP response composed before OSCORE encryption should not include an application payload. Otherwise, an application payload may be included.</t>
          <t>Once a peer acting as initiator (responder) has sent (received) the first KUDOS message, that peer <bcp14>MUST NOT</bcp14> send a non KUDOS message to the other peer, until having aborted or successfully completed the key update process on its side.</t>
          <t>In order to prevent two peers from unwittingly running two simultaneous executions of KUDOS, the following applies.</t>
          <ul spacing="normal">
            <li>
              <t>When a peer P1 receives the first KUDOS message from a peer P2 in a KUDOS execution E1, the peer P1 <bcp14>MUST</bcp14> check whether it has a non completed KUDOS session E2 where P1 acts as initiator with P2.  </t>
              <t>
To this end, P1 may check whether it is currently acting as initiator in a KUDOS execution E2 different from E1, such that both sessions aim at updating the OSCORE Security Context CTX_OLD shared with P2. The particular way to achieve this is implementation specific.</t>
            </li>
            <li>
              <t>If P1 finds such a session E2, then P1 <bcp14>MUST</bcp14> terminate the KUDOS execution E1, and <bcp14>MUST</bcp14> reply to the first KUDOS message received from P2 with a CoAP Reset message.  </t>
              <t>
Upon receiving the Reset message above, P2 terminates the KUDOS execution E2 where it acts as initiator.</t>
            </li>
          </ul>
        </section>
        <section anchor="avoiding-in-transit-requests-during-a-key-update">
          <name>Avoiding In-Transit Requests During a Key Update</name>
          <t>Before sending the first KUDOS message, the initiator <bcp14>MUST</bcp14> ensure that it has no outstanding interactions with the responder (see <xref section="4.7" sectionFormat="of" target="RFC7252"/>), with the exception of ongoing observations <xref target="RFC7641"/> with the responder.</t>
          <t>Before sending the second KUDOS message, the responder <bcp14>MUST</bcp14> ensure that it has no outstanding interactions with the initiator (see <xref section="4.7" sectionFormat="of" target="RFC7252"/>), with the exception of ongoing observations <xref target="RFC7641"/> with the initiator.</t>
          <t>If any such outstanding interactions are found, the initiator (responder) <bcp14>MUST NOT</bcp14> initiate (follow up with) 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 other peer.</t>
          <t>Later on, this prevents a non KUDOS response protected with the new Security Context CTX_NEW from cryptographically matching with both the corresponding request also protected with CTX_NEW and with an older request protected with CTX_OLD, in case the two requests were protected using the same OSCORE Partial IV.</t>
          <t>During an ongoing KUDOS execution, the peer acting as client <bcp14>MUST NOT</bcp14> send any non-KUDOS requests to the other peer. 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 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, i.e., with the client acting as KUDOS initiator.</t>
          <t>In the example, '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>
          <figure anchor="fig-message-exchange-client-init">
            <name>Example of the KUDOS forward message flow.</name>
            <artset>
              <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1152" width="576" viewBox="0 0 576 1152" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 200,64 L 200,736" fill="none" stroke="black"/>
                  <path d="M 200,816 L 200,1136" fill="none" stroke="black"/>
                  <path d="M 384,64 L 384,736" fill="none" stroke="black"/>
                  <path d="M 384,816 L 384,1136" fill="none" stroke="black"/>
                  <path d="M 200,208 L 376,208" fill="none" stroke="black"/>
                  <path d="M 208,528 L 384,528" fill="none" stroke="black"/>
                  <path d="M 200,848 L 376,848" fill="none" stroke="black"/>
                  <path d="M 208,1008 L 384,1008" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="384,848 372,842.4 372,853.6" fill="black" transform="rotate(0,376,848)"/>
                  <polygon class="arrowhead" points="384,208 372,202.4 372,213.6" fill="black" transform="rotate(0,376,208)"/>
                  <polygon class="arrowhead" points="216,1008 204,1002.4 204,1013.6" fill="black" transform="rotate(180,208,1008)"/>
                  <polygon class="arrowhead" points="216,528 204,522.4 204,533.6" fill="black" transform="rotate(180,208,528)"/>
                  <g class="text">
                    <text x="196" y="36">Client</text>
                    <text x="388" y="36">Server</text>
                    <text x="200" y="52">(initiator)</text>
                    <text x="384" y="52">(responder)</text>
                    <text x="36" y="84">Generate</text>
                    <text x="84" y="84">N1</text>
                    <text x="24" y="116">CTX_1</text>
                    <text x="56" y="116">=</text>
                    <text x="108" y="116">updateCtx(</text>
                    <text x="80" y="132">X1,</text>
                    <text x="80" y="148">N1,</text>
                    <text x="96" y="164">CTX_OLD</text>
                    <text x="136" y="164">)</text>
                    <text x="280" y="196">Request</text>
                    <text x="324" y="196">#1</text>
                    <text x="32" y="212">Protect</text>
                    <text x="84" y="212">with</text>
                    <text x="128" y="212">CTX_1</text>
                    <text x="468" y="212">/.well-known/kudos</text>
                    <text x="236" y="228">OSCORE</text>
                    <text x="272" y="228">{</text>
                    <text x="232" y="244">...</text>
                    <text x="248" y="260">Partial</text>
                    <text x="296" y="260">IV:</text>
                    <text x="320" y="260">0</text>
                    <text x="232" y="276">...</text>
                    <text x="224" y="292">d</text>
                    <text x="256" y="292">flag:</text>
                    <text x="288" y="292">1</text>
                    <text x="416" y="292">CTX_1</text>
                    <text x="448" y="292">=</text>
                    <text x="500" y="292">updateCtx(</text>
                    <text x="228" y="308">x:</text>
                    <text x="252" y="308">X1</text>
                    <text x="472" y="308">X1,</text>
                    <text x="244" y="324">nonce:</text>
                    <text x="284" y="324">N1</text>
                    <text x="472" y="324">N1,</text>
                    <text x="232" y="340">...</text>
                    <text x="488" y="340">CTX_OLD</text>
                    <text x="528" y="340">)</text>
                    <text x="216" y="356">}</text>
                    <text x="248" y="372">Encrypted</text>
                    <text x="320" y="372">Payload</text>
                    <text x="360" y="372">{</text>
                    <text x="420" y="372">Verify</text>
                    <text x="468" y="372">with</text>
                    <text x="512" y="372">CTX_1</text>
                    <text x="232" y="388">...</text>
                    <text x="216" y="404">}</text>
                    <text x="428" y="404">Generate</text>
                    <text x="476" y="404">N2</text>
                    <text x="424" y="436">CTX_NEW</text>
                    <text x="464" y="436">=</text>
                    <text x="516" y="436">updateCtx(</text>
                    <text x="524" y="452">Comb(X1,X2),</text>
                    <text x="524" y="468">Comb(N1,N2),</text>
                    <text x="504" y="484">CTX_OLD</text>
                    <text x="544" y="484">)</text>
                    <text x="284" y="516">Response</text>
                    <text x="332" y="516">#1</text>
                    <text x="424" y="532">Protect</text>
                    <text x="476" y="532">with</text>
                    <text x="528" y="532">CTX_NEW</text>
                    <text x="236" y="548">OSCORE</text>
                    <text x="272" y="548">{</text>
                    <text x="232" y="564">...</text>
                    <text x="32" y="580">CTX_NEW</text>
                    <text x="72" y="580">=</text>
                    <text x="124" y="580">updateCtx(</text>
                    <text x="248" y="580">Partial</text>
                    <text x="296" y="580">IV:</text>
                    <text x="320" y="580">0</text>
                    <text x="132" y="596">Comb(X1,X2),</text>
                    <text x="232" y="596">...</text>
                    <text x="132" y="612">Comb(N1,N2),</text>
                    <text x="224" y="612">d</text>
                    <text x="256" y="612">flag:</text>
                    <text x="288" y="612">1</text>
                    <text x="112" y="628">CTX_OLD</text>
                    <text x="152" y="628">)</text>
                    <text x="228" y="628">x:</text>
                    <text x="252" y="628">X2</text>
                    <text x="244" y="644">nonce:</text>
                    <text x="284" y="644">N2</text>
                    <text x="28" y="660">Verify</text>
                    <text x="76" y="660">with</text>
                    <text x="128" y="660">CTX_NEW</text>
                    <text x="232" y="660">...</text>
                    <text x="216" y="676">}</text>
                    <text x="32" y="692">Discard</text>
                    <text x="96" y="692">CTX_OLD</text>
                    <text x="248" y="692">Encrypted</text>
                    <text x="320" y="692">Payload</text>
                    <text x="360" y="692">{</text>
                    <text x="232" y="708">...</text>
                    <text x="216" y="724">}</text>
                    <text x="16" y="772">The</text>
                    <text x="60" y="772">actual</text>
                    <text x="104" y="772">key</text>
                    <text x="148" y="772">update</text>
                    <text x="208" y="772">process</text>
                    <text x="260" y="772">ends</text>
                    <text x="304" y="772">here.</text>
                    <text x="16" y="788">The</text>
                    <text x="48" y="788">two</text>
                    <text x="88" y="788">peers</text>
                    <text x="128" y="788">can</text>
                    <text x="160" y="788">use</text>
                    <text x="192" y="788">the</text>
                    <text x="224" y="788">new</text>
                    <text x="276" y="788">Security</text>
                    <text x="344" y="788">Context</text>
                    <text x="412" y="788">CTX_NEW.</text>
                    <text x="280" y="836">Request</text>
                    <text x="324" y="836">#2</text>
                    <text x="32" y="852">Protect</text>
                    <text x="84" y="852">with</text>
                    <text x="136" y="852">CTX_NEW</text>
                    <text x="416" y="852">/temp</text>
                    <text x="236" y="868">OSCORE</text>
                    <text x="272" y="868">{</text>
                    <text x="232" y="884">...</text>
                    <text x="216" y="900">}</text>
                    <text x="420" y="900">Verify</text>
                    <text x="468" y="900">with</text>
                    <text x="520" y="900">CTX_NEW</text>
                    <text x="248" y="916">Encrypted</text>
                    <text x="320" y="916">Payload</text>
                    <text x="360" y="916">{</text>
                    <text x="232" y="932">...</text>
                    <text x="424" y="932">Discard</text>
                    <text x="488" y="932">CTX_OLD</text>
                    <text x="264" y="948">Application</text>
                    <text x="344" y="948">Payload</text>
                    <text x="216" y="964">}</text>
                    <text x="284" y="996">Response</text>
                    <text x="332" y="996">#2</text>
                    <text x="424" y="1012">Protect</text>
                    <text x="476" y="1012">with</text>
                    <text x="528" y="1012">CTX_NEW</text>
                    <text x="236" y="1028">OSCORE</text>
                    <text x="272" y="1028">{</text>
                    <text x="232" y="1044">...</text>
                    <text x="28" y="1060">Verify</text>
                    <text x="76" y="1060">with</text>
                    <text x="128" y="1060">CTX_NEW</text>
                    <text x="216" y="1060">}</text>
                    <text x="248" y="1076">Encrypted</text>
                    <text x="320" y="1076">Payload</text>
                    <text x="360" y="1076">{</text>
                    <text x="232" y="1092">...</text>
                    <text x="264" y="1108">Application</text>
                    <text x="344" y="1108">Payload</text>
                    <text x="216" y="1124">}</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art" align="center"><![CDATA[
                     Client                  Server
                   (initiator)            (responder)
                        |                      |
Generate N1             |                      |
                        |                      |
CTX_1 = updateCtx(      |                      |
        X1,             |                      |
        N1,             |                      |
        CTX_OLD )       |                      |
                        |                      |
                        |      Request #1      |
Protect with CTX_1      +--------------------->| /.well-known/kudos
                        | OSCORE {             |
                        |  ...                 |
                        |  Partial IV: 0       |
                        |  ...                 |
                        |  d flag: 1           | CTX_1 = updateCtx(
                        |  x: X1               |         X1,
                        |  nonce: N1           |         N1,
                        |  ...                 |         CTX_OLD )
                        | }                    |
                        | Encrypted Payload {  | Verify with CTX_1
                        |  ...                 |
                        | }                    | Generate N2
                        |                      |
                        |                      | CTX_NEW = updateCtx(
                        |                      |           Comb(X1,X2),
                        |                      |           Comb(N1,N2),
                        |                      |           CTX_OLD )
                        |                      |
                        |      Response #1     |
                        |<---------------------+ Protect with CTX_NEW
                        | OSCORE {             |
                        |  ...                 |
CTX_NEW = updateCtx(    |  Partial IV: 0       |
          Comb(X1,X2),  |  ...                 |
          Comb(N1,N2),  |  d flag: 1           |
          CTX_OLD )     |  x: X2               |
                        |  nonce: N2           |
Verify with CTX_NEW     |  ...                 |
                        | }                    |
Discard CTX_OLD         | Encrypted Payload {  |
                        |  ...                 |
                        | }                    |
                        |                      |

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

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

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

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

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

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

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

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

   In updateCtx(), X_N is the byte concatenation of X_cbor and N_cbor
   X_N = 0x44410741075248018a278f7faab55a4825a8991cd700ac01
]]></artwork>
          </figure>
          <t>Then, the server sends an OSCORE response to the client, protected with CTX_NEW. In particular, the response has the 'd' flag bit set to 1 and specifies N2 as 'nonce'. Consistently with <xref target="sec-updated-response-protection"/>, the server includes its Sender Sequence Number as Partial IV in the response. After that, the server deletes CTX_1.</t>
          <t>Upon receiving the OSCORE response, the client retrieves the value N2 from the 'nonce' field of the OSCORE Option, and the value X2 from the 'x' byte of the OSCORE Option. Since the client has received a response to an OSCORE request that it made with the 'd' flag bit set to 1, the client provides the updateCtx() function with the input N = Comb(N1, N2), X = Comb(X1, X2), and CTX_OLD, in order to derive CTX_NEW. Finally, the client verifies the response by using CTX_NEW and deletes CTX_OLD.</t>
          <t>From then on, the two peers can protect their message exchanges by using CTX_NEW. As soon as the server successfully verifies an incoming message protected with CTX_NEW, the server deletes CTX_OLD.</t>
          <t>In the example in <xref target="fig-message-exchange-client-init"/>, the client takes the initiative and sends a new OSCORE request protected with CTX_NEW.</t>
          <t>In case the server does not successfully verify the request, the same error handling specified in <xref section="8.2" sectionFormat="of" target="RFC8613"/> applies. This does not result in deleting CTX_NEW. If the server successfully verifies the request using CTX_NEW, the server deletes CTX_OLD and can reply with an OSCORE response protected with CTX_NEW.</t>
          <t>Note that the server achieves key confirmation when receiving and successfully verifying 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 <bcp14>SHOULD</bcp14> delete CTX_NEW and start a new KUDOS execution acting as CoAP client, i.e., as initiator in the forward message flow. If the client runs KUDOS again as initiator right after the server has rebooted, the server will achieve key confirmation of CTX_NEW, upon successfully verifying the first KUDOS message. This is because that same Security Context CTX_NEW is used for deriving the Security Context CTX_1 that is used to protect the first KUDOS message in the new KUDOS execution.</t>
          <t>Also note that, if both peers reboot simultaneously, they will run the KUDOS forward message flow as defined in this section. That is, one of the two peers implementing a CoAP client will send KUDOS Request #1 in <xref target="fig-message-exchange-client-init"/>.</t>
          <t>In case the KUDOS message Request #1 in Figure 3 targets a non-KUDOS resource and the application at the server requires freshness for the received requests, then the server does not deliver the request to the application even if the request has been successfully verified, and the following KUDOS message (i.e., Response #1 in Figure 3) <bcp14>MUST</bcp14> be a 4.01 (Unauthorized) error response.</t>
          <t>Upon receiving the 4.01 (Unauthorized) error response as the second KUDOS message Response #1, the client processes it like described above. After successfully completing the KUDOS execution, the client can send to the server a non-KUDOS request protected with CTX_NEW (i.e., Request #2 in Figure 3). Presumably, this request targets the same resource targeted by the previous Request #1, as the same application request or a different one, if the application permits it.
Upon receiving, decrypting, and successfully verifying this request protected with CTX_NEW, the server asserts the request as fresh, leveraging the recent establishment of CTX_NEW.</t>
          <t>In the example shown in <xref target="fig-message-exchange-client-init"/> and discussed in this section, the first KUDOS message is a request and the second one is a response, like typically expected when using the forward message flow. However, KUDOS is not constrained to this request/response model and a KUDOS execution can be performed with any combination of CoAP requests and responses. Related examples using the forward message flow are provided later:</t>
          <ul spacing="normal">
            <li>
              <t><xref target="ssec-derive-ctx-client-init-requests-only"/> presents an example where both KUDOS messages are CoAP requests.</t>
            </li>
            <li>
              <t><xref target="ssec-derive-ctx-client-init-unrelated"/> presents an example where KUDOS Response #1 is a response to a different request from KUDOS Request #1.  </t>
              <t>
In such a case, if the client knows that KUDOS Response #2 is going to be sent as a response to a different request from KUDOS Request #1, then the client can use the No-Response CoAP Option <xref target="RFC7967"/> in KUDOS Request #1 without impairing the successful completion of KUDOS.</t>
            </li>
            <li>
              <t><xref target="ssec-derive-ctx-client-init-normal-resource"/> presents an example where KUDOS Request #1 is sent to a non-KUDOS resource.</t>
            </li>
          </ul>
        </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, i.e., with the server acting as initiator.</t>
          <t>The example uses the same notation 'Comb(a,b)' used in <xref target="ssec-derive-ctx-client-init"/>.</t>
          <figure anchor="fig-message-exchange-server-init">
            <name>Example of the KUDOS reverse message flow</name>
            <artset>
              <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1072" width="576" viewBox="0 0 576 1072" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 200,64 L 200,816" fill="none" stroke="black"/>
                  <path d="M 200,896 L 200,1056" fill="none" stroke="black"/>
                  <path d="M 384,64 L 384,816" fill="none" stroke="black"/>
                  <path d="M 384,896 L 384,1056" fill="none" stroke="black"/>
                  <path d="M 200,96 L 376,96" fill="none" stroke="black"/>
                  <path d="M 208,304 L 384,304" fill="none" stroke="black"/>
                  <path d="M 200,592 L 376,592" fill="none" stroke="black"/>
                  <path d="M 208,928 L 384,928" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="384,592 372,586.4 372,597.6" fill="black" transform="rotate(0,376,592)"/>
                  <polygon class="arrowhead" points="384,96 372,90.4 372,101.6" fill="black" transform="rotate(0,376,96)"/>
                  <polygon class="arrowhead" points="216,928 204,922.4 204,933.6" fill="black" transform="rotate(180,208,928)"/>
                  <polygon class="arrowhead" points="216,304 204,298.4 204,309.6" fill="black" transform="rotate(180,208,304)"/>
                  <g class="text">
                    <text x="204" y="36">Client</text>
                    <text x="388" y="36">Server</text>
                    <text x="200" y="52">(responder)</text>
                    <text x="384" y="52">(initiator)</text>
                    <text x="280" y="84">Request</text>
                    <text x="324" y="84">#1</text>
                    <text x="32" y="100">Protect</text>
                    <text x="84" y="100">with</text>
                    <text x="136" y="100">CTX_OLD</text>
                    <text x="416" y="100">/temp</text>
                    <text x="236" y="116">OSCORE</text>
                    <text x="272" y="116">{</text>
                    <text x="232" y="132">...</text>
                    <text x="216" y="148">}</text>
                    <text x="420" y="148">Verify</text>
                    <text x="468" y="148">with</text>
                    <text x="520" y="148">CTX_OLD</text>
                    <text x="248" y="164">Encrypted</text>
                    <text x="320" y="164">Payload</text>
                    <text x="360" y="164">{</text>
                    <text x="232" y="180">...</text>
                    <text x="428" y="180">Generate</text>
                    <text x="476" y="180">N1</text>
                    <text x="264" y="196">Application</text>
                    <text x="344" y="196">Payload</text>
                    <text x="216" y="212">}</text>
                    <text x="416" y="212">CTX_1</text>
                    <text x="448" y="212">=</text>
                    <text x="500" y="212">updateCtx(</text>
                    <text x="472" y="228">X1,</text>
                    <text x="472" y="244">N1,</text>
                    <text x="488" y="260">CTX_OLD</text>
                    <text x="528" y="260">)</text>
                    <text x="284" y="292">Response</text>
                    <text x="332" y="292">#1</text>
                    <text x="424" y="308">Protect</text>
                    <text x="476" y="308">with</text>
                    <text x="520" y="308">CTX_1</text>
                    <text x="236" y="324">OSCORE</text>
                    <text x="272" y="324">{</text>
                    <text x="232" y="340">...</text>
                    <text x="24" y="356">CTX_1</text>
                    <text x="56" y="356">=</text>
                    <text x="108" y="356">updateCtx(</text>
                    <text x="248" y="356">Partial</text>
                    <text x="296" y="356">IV:</text>
                    <text x="320" y="356">0</text>
                    <text x="80" y="372">X1,</text>
                    <text x="232" y="372">...</text>
                    <text x="80" y="388">N1,</text>
                    <text x="224" y="388">d</text>
                    <text x="256" y="388">flag:</text>
                    <text x="288" y="388">1</text>
                    <text x="96" y="404">CTX_OLD</text>
                    <text x="136" y="404">)</text>
                    <text x="228" y="404">x:</text>
                    <text x="252" y="404">X1</text>
                    <text x="244" y="420">nonce:</text>
                    <text x="284" y="420">N1</text>
                    <text x="28" y="436">Verify</text>
                    <text x="76" y="436">with</text>
                    <text x="120" y="436">CTX_1</text>
                    <text x="232" y="436">...</text>
                    <text x="216" y="452">}</text>
                    <text x="36" y="468">Generate</text>
                    <text x="84" y="468">N2</text>
                    <text x="248" y="468">Encrypted</text>
                    <text x="320" y="468">Payload</text>
                    <text x="360" y="468">{</text>
                    <text x="232" y="484">...</text>
                    <text x="32" y="500">CTX_NEW</text>
                    <text x="72" y="500">=</text>
                    <text x="124" y="500">updateCtx(</text>
                    <text x="216" y="500">}</text>
                    <text x="132" y="516">Comb(X1,X2),</text>
                    <text x="132" y="532">Comb(N1,N2),</text>
                    <text x="112" y="548">CTX_OLD</text>
                    <text x="152" y="548">)</text>
                    <text x="280" y="580">Request</text>
                    <text x="324" y="580">#2</text>
                    <text x="32" y="596">Protect</text>
                    <text x="84" y="596">with</text>
                    <text x="136" y="596">CTX_NEW</text>
                    <text x="468" y="596">/.well-known/kudos</text>
                    <text x="236" y="612">OSCORE</text>
                    <text x="272" y="612">{</text>
                    <text x="232" y="628">...</text>
                    <text x="224" y="644">d</text>
                    <text x="256" y="644">flag:</text>
                    <text x="288" y="644">1</text>
                    <text x="424" y="644">CTX_NEW</text>
                    <text x="464" y="644">=</text>
                    <text x="516" y="644">updateCtx(</text>
                    <text x="228" y="660">x:</text>
                    <text x="252" y="660">X2</text>
                    <text x="524" y="660">Comb(X1,X2),</text>
                    <text x="244" y="676">nonce:</text>
                    <text x="284" y="676">N2</text>
                    <text x="524" y="676">Comb(N1,N2),</text>
                    <text x="228" y="692">y:</text>
                    <text x="248" y="692">w</text>
                    <text x="504" y="692">CTX_OLD</text>
                    <text x="544" y="692">)</text>
                    <text x="260" y="708">old_nonce:</text>
                    <text x="316" y="708">N1</text>
                    <text x="232" y="724">...</text>
                    <text x="216" y="740">}</text>
                    <text x="248" y="756">Encrypted</text>
                    <text x="320" y="756">Payload</text>
                    <text x="360" y="756">{</text>
                    <text x="420" y="756">Verify</text>
                    <text x="468" y="756">with</text>
                    <text x="520" y="756">CTX_NEW</text>
                    <text x="232" y="772">...</text>
                    <text x="264" y="788">Application</text>
                    <text x="344" y="788">Payload</text>
                    <text x="216" y="804">}</text>
                    <text x="424" y="804">Discard</text>
                    <text x="488" y="804">CTX_OLD</text>
                    <text x="16" y="852">The</text>
                    <text x="60" y="852">actual</text>
                    <text x="104" y="852">key</text>
                    <text x="148" y="852">update</text>
                    <text x="208" y="852">process</text>
                    <text x="260" y="852">ends</text>
                    <text x="304" y="852">here.</text>
                    <text x="16" y="868">The</text>
                    <text x="48" y="868">two</text>
                    <text x="88" y="868">peers</text>
                    <text x="128" y="868">can</text>
                    <text x="160" y="868">use</text>
                    <text x="192" y="868">the</text>
                    <text x="224" y="868">new</text>
                    <text x="276" y="868">Security</text>
                    <text x="344" y="868">Context</text>
                    <text x="412" y="868">CTX_NEW.</text>
                    <text x="284" y="916">Response</text>
                    <text x="332" y="916">#2</text>
                    <text x="424" y="932">Protect</text>
                    <text x="476" y="932">with</text>
                    <text x="528" y="932">CTX_NEW</text>
                    <text x="236" y="948">OSCORE</text>
                    <text x="272" y="948">{</text>
                    <text x="232" y="964">...</text>
                    <text x="28" y="980">Verify</text>
                    <text x="76" y="980">with</text>
                    <text x="128" y="980">CTX_NEW</text>
                    <text x="216" y="980">}</text>
                    <text x="248" y="996">Encrypted</text>
                    <text x="320" y="996">Payload</text>
                    <text x="360" y="996">{</text>
                    <text x="32" y="1012">Discard</text>
                    <text x="96" y="1012">CTX_OLD</text>
                    <text x="232" y="1012">...</text>
                    <text x="264" y="1028">Application</text>
                    <text x="344" y="1028">Payload</text>
                    <text x="216" y="1044">}</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art" align="center"><![CDATA[
                      Client                 Server
                   (responder)            (initiator)
                        |                      |
                        |      Request #1      |
Protect with CTX_OLD    +--------------------->| /temp
                        | OSCORE {             |
                        |  ...                 |
                        | }                    | Verify with CTX_OLD
                        | Encrypted Payload {  |
                        |  ...                 | Generate N1
                        |  Application Payload |
                        | }                    | CTX_1 = updateCtx(
                        |                      |         X1,
                        |                      |         N1,
                        |                      |         CTX_OLD )
                        |                      |
                        |      Response #1     |
                        |<---------------------+ Protect with CTX_1
                        | OSCORE {             |
                        |  ...                 |
CTX_1 = updateCtx(      |  Partial IV: 0       |
        X1,             |  ...                 |
        N1,             |  d flag: 1           |
        CTX_OLD )       |  x: X1               |
                        |  nonce: N1           |
Verify with CTX_1       |  ...                 |
                        | }                    |
Generate N2             | Encrypted Payload {  |
                        |  ...                 |
CTX_NEW = updateCtx(    | }                    |
          Comb(X1,X2),  |                      |
          Comb(N1,N2),  |                      |
          CTX_OLD )     |                      |
                        |                      |
                        |      Request #2      |
Protect with CTX_NEW    +--------------------->| /.well-known/kudos
                        | OSCORE {             |
                        |  ...                 |
                        |  d flag: 1           | CTX_NEW = updateCtx(
                        |  x: X2               |           Comb(X1,X2),
                        |  nonce: N2           |           Comb(N1,N2),
                        |  y: w                |           CTX_OLD )
                        |  old_nonce: N1       |
                        |  ...                 |
                        | }                    |
                        | Encrypted Payload {  | Verify with CTX_NEW
                        |  ...                 |
                        |  Application Payload |
                        | }                    | Discard CTX_OLD
                        |                      |

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

                        |                      |
                        |      Response #2     |
                        |<---------------------+ Protect with CTX_NEW
                        | OSCORE {             |
                        |  ...                 |
Verify with CTX_NEW     | }                    |
                        | Encrypted Payload {  |
Discard CTX_OLD         |  ...                 |
                        |  Application Payload |
                        | }                    |
                        |                      |
]]></artwork>
            </artset>
          </figure>
          <t>First, the client sends a normal OSCORE request to the server, protected with the old Security Context CTX_OLD and with the 'd' flag bit set to 0.</t>
          <t>Upon receiving the OSCORE request and after having verified it with CTX_OLD as usual, the server generates a value N1 and provides the updateCtx() function with the input N = N1, X = X1, and CTX_OLD, in order to derive the temporary Security Context CTX_1.</t>
          <t>Then, the server sends an OSCORE response to the client, protected with CTX_1. In particular, the response has the 'd' flag bit set to 1 and specifies N1 as 'nonce' (see <xref target="ssec-oscore-option-extensions"/>). After that, the server deletes CTX_1. Consistently with <xref target="sec-updated-response-protection"/>, the server includes its Sender Sequence Number as Partial IV in the response. After that, the server deletes CTX_1.</t>
          <t>Upon receiving the OSCORE response, the client retrieves the value N1 from the 'nonce' field of the OSCORE Option and the value X1 from the 'x' byte of the OSCORE Option. Then, the client provides the updateCtx() function with the input N = N1, X = X1, and CTX_OLD, in order to derive the temporary Security Context CTX_1.</t>
          <t>Then, the client verifies the response by using the Security Context CTX_1.</t>
          <t>After that, the client generates a value N2, and provides the updateCtx() function with the input N = Comb(N1, N2), X = Comb(X1, X2), and CTX_OLD, in order to derive the new Security Context CTX_NEW. Then, the client sends an OSCORE request to the server, protected with CTX_NEW. In particular, the request has the 'd' flag bit set to 1 and specifies N2 as 'nonce' and N1 as 'old_nonce'. After that, the client deletes CTX_1.</t>
          <t>Upon receiving the OSCORE request, the server retrieves the values N1 from the 'old_nonce' field of the OSCORE Option, the value N2 from the 'nonce' field of the OSCORE Option, and the value X2 from the 'x' byte of the OSCORE Option. Then, the server verifies that: i) the value N1 is identical to the value N1 specified in a previous OSCORE response with the 'd' flag bit set to 1; and ii) the value N1 | N2 has not been received before in an OSCORE request with the 'd' flag bit set to 1.</t>
          <t>If the verification succeeds, the server provides the updateCtx() function with the input N = Comb(N1, N2), X = Comb(X1, X2), and CTX_OLD, in order to derive the new Security Context CTX_NEW. Finally, the server verifies the request by using CTX_NEW and deletes CTX_OLD.</t>
          <t>From then on, the two peers can protect their message exchanges by using CTX_NEW. In particular, as shown in the example in <xref target="fig-message-exchange-server-init"/>, the server can send an OSCORE response protected with CTX_NEW.</t>
          <t>In case the client does not successfully verify the response, the same error handling specified in <xref section="8.4" sectionFormat="of" target="RFC8613"/> applies. This does not result in deleting CTX_NEW. If the client successfully verifies the response using CTX_NEW, the client deletes CTX_OLD. Note that, if the verification of the response fails, the client may want to send again the normal OSCORE request to the server it initially sent (to /temp in the example above), in order to ensure the retrieval of the resource representation.</t>
          <t>More generally, as soon as the client successfully verifies an incoming message protected with CTX_NEW, the client deletes CTX_OLD.</t>
          <t>Note that the client achieves key confirmation only when receiving and successfully verifying 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 <bcp14>SHOULD</bcp14> 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>
        <section anchor="ssec-pure-coap-servers">
          <name>Usage of KUDOS by Pure CoAP Servers</name>
          <t>It might be the case that a server is only a CoAP server (i.e., it does not implement a CoAP client) and it reaches key usage limits for its Recipient Key in the OSCORE Security Context shared with another peer acting as client (see <xref target="I-D.ietf-core-oscore-key-limits"/>). If this happens and the client runs KUDOS using the reverse message flow, the server would not be able to decrypt Request #1, thus making it impossible complete the KUDOS execution. In such a scenario the two peers have two options to run KUDOS.</t>
          <t>One option is that the client instead starts a KUDOS execution using the forward message flow (see <xref target="sec-rekeying-method"/>).</t>
          <t>An alternative that allows the usage of the reverse message flow consists in the server modifying its steps for processing OSCORE protected requests and responses, as detailed below. Building on that, the server does not verify Request #1, but it still replies with KUDOS Response #1.</t>
          <t>The verification of OSCORE requests is extended by performing the following as first sub-step within step 2 of <xref section="8.2" sectionFormat="of" target="RFC8613"/>.</t>
          <blockquote>
            <t>2.a.: If the retrieved Recipient Context is invalid, the server <bcp14>MAY</bcp14> respond with a 4.01 (Unauthorized) error message. A Recipient Context is considered invalid if it is part of an expired Security Context or if its key usage limit has been reached (see <xref target="I-D.irtf-cfrg-aead-limits"/>). The diagnostic payload of the error message <bcp14>MAY</bcp14> contain the string "Invalid security context". If the error message is a KUDOS Response #1, then it is protected with the OSCORE Security Context CTX_1 derived from the Security Context CTX_OLD. Note that sending KUDOS Response #1 requires that CTX_OLD is not expired.</t>
          </blockquote>
          <t>The verification of OSCORE responses performs the following modified version of step 2 of <xref section="8.4" sectionFormat="of" target="RFC8613"/>.</t>
          <blockquote>
            <t>Retrieve the Recipient Context in the Security Context associated with the Token. Decompress the COSE object (Section 6). If the Recipient Context is invalid, or the decompression fails or the COSE message fails to decode, then go to 8. A Recipient Context is considered invalid if it is part of an expired Security Context or if its key usage limit has been reached (see <xref target="I-D.irtf-cfrg-aead-limits"/>).</t>
          </blockquote>
        </section>
      </section>
      <section anchor="avoiding-deadlocks">
        <name>Avoiding Deadlocks</name>
        <t>This section defines how to avoid a deadlock in different scenarios.</t>
        <section anchor="scenario-1">
          <name>Scenario 1</name>
          <t>In this scenario, an execution of KUDOS fails at PEER_1 acting as initiator, but successfully completes at PEER_2 acting as responder. After that, PEER_1 still stores CTX_OLD, while PEER_2 stores CTX_OLD and the just derived CTX_NEW.</t>
          <t>Then, PEER_1 starts a new KUDOS execution acting again as initiator, by sending the first KUDOS message as a CoAP request. This is protected with a temporary Security Context CTX_1, which is newly derived from the retained CTX_OLD, and from the new values X1 and N1 exchanged in the present KUDOS execution.</t>
          <t>Upon receiving the first KUDOS message, PEER_2, acting again as responder, proceeds as follows.</t>
          <ol spacing="normal" type="1"><li>
              <t>PEER_2 attempts to verify the first KUDOS message by using a temporary Security Context CTX_1'. This is derived from the Security Context CTX_NEW established during the latest successfully completed KUDOS execution.</t>
            </li>
            <li>
              <t>The message verification inevitably fails. If PEER_2 is acting as CoAP server, it <bcp14>MUST NOT</bcp14> reply with an unprotected 4.01 (Unauthorized) CoAP response yet.</t>
            </li>
            <li>
              <t>PEER_2 <bcp14>MUST</bcp14> attempt to verify the first KUDOS message by using a temporary Security Context CTX_1. This is newly derived from the Security Context CTX_OLD retained after the latest successfully completed KUDOS execution, and from the values X1 and N1 exchanged in the present KUDOS execution.  </t>
              <t>
If the message verification fails, PEER_2: i) retains CTX_OLD and CTX_NEW from the latest successfully completed KUDOS execution; ii) if acting as CoAP server, replies with an unprotected 4.01 (Unauthorized) CoAP response.  </t>
              <t>
If the message verification succeeds, PEER_2: i) retains CTX_OLD from the latest successfully completed KUDOS execution; ii) replaces CTX_NEW from the latest successfully completed KUDOS execution with a new Security Context CTX_NEW', derived from CTX_OLD and from the values X1, X2, N1, and N2 exchanged in the present KUDOS execution; iii) replies with the second KUDOS message, which is protected with the just derived CTX_NEW'.</t>
            </li>
          </ol>
        </section>
        <section anchor="scenario-2">
          <name>Scenario 2</name>
          <t>In this scenario, an execution of KUDOS fails at PEER_1 acting as initiator, but successfully completes at PEER_2 acting as responder. After that, PEER_1 still stores CTX_OLD, while PEER_2 stores CTX_OLD and the just derived CTX_NEW.</t>
          <t>Then, PEER_2 starts a new KUDOS execution, this time acting as initiator, by sending the first KUDOS message as a CoAP request. This is protected with a temporary Security Context CTX_1, which is newly derived from CTX_NEW established during the latest successfully completed KUDOS execution, as well as from the new values X1 and N1 exchanged in the present KUDOS execution.</t>
          <t>Upon receiving the first KUDOS message, PEER_1, this time acting as responder, proceeds as follows.</t>
          <ol spacing="normal" type="1"><li>
              <t>PEER_1 attempts to verify the first KUDOS message by using a temporary Security Context CTX_1', which is derived from the retained Security Context CTX_OLD and from the values X1 and N1 exchanged in the present KUDOS execution.</t>
            </li>
            <li>
              <t>The message verification inevitably fails. If PEER_1 is acting as CoAP server, it replies with an unprotected 4.01 (Unauthorized) CoAP response.</t>
            </li>
            <li>
              <t>If PEER_2 does not receive the second KUDOS message for a pre-defined amount of time, or if it receives a 4.01 (Unauthorized) CoAP response when acting as CoAP client, then PEER_2 can start a new KUDOS execution for a maximum, pre-defined number of times.  </t>
              <t>
In this case, PEER_2 sends a new first KUDOS message protected with a temporary Security Context CTX_1', which is derived from the retained CTX_OLD, as well as from the new values X1 and N1 exchanged in the present KUDOS execution.  </t>
              <t>
During this time, PEER_2 does not delete CTX_NEW established during the latest successfully completed KUDOS execution, and does not delete CTX_OLD unless it successfully verifies an incoming message protected with CTX_NEW.</t>
            </li>
            <li>
              <t>Upon receiving such a new, first KUDOS message, PEER_1 verifies it by using the temporary Security Context CTX_1', which is derived from the Security Context CTX_OLD, and from the values X1 and N1 exchanged in the present KUDOS execution.  </t>
              <t>
If the message verification succeeds, PEER_1 derives an OSCORE Security Context CTX_NEW' from CTX_OLD and from the values X1, X2, N1, and N2 exchanged in the present KUDOS execution. Then, it replies with the second KUDOS message, which is protected with the latest, just derived CTX_NEW'.</t>
            </li>
            <li>
              <t>Upon receiving such second KUDOS message, PEER_2 derives CTX_NEW' from the retained CTX_OLD and from the values X1, X2, N1, and N2 exchanged in the present KUDOS execution. Then, PEER_2 attempts to verify the KUDOS message using the just derived CTX_NEW'.  </t>
              <t>
If the message verification succeeds, PEER_2 deletes the retained CTX_OLD as well as the retained CTX_NEW established during the immediately previously, successfully completed KUDOS execution.</t>
            </li>
          </ol>
        </section>
        <section anchor="scenario-3">
          <name>Scenario 3</name>
          <t>When KUDOS is run in the reverse message flow (see <xref target="ssec-derive-ctx-server-init"/>), the two peers risk to run into a deadlock, if all the following conditions hold.</t>
          <ul spacing="normal">
            <li>
              <t>The client is a client-only device, i.e., it does not act as CoAP server and thus does not listen for incoming requests.</t>
            </li>
            <li>
              <t>The server needs to execute KUDOS, which, due to the previous point, can only be performed in its reverse message flow. That is, the server has to wait for an incoming non KUDOS request, in order to initiate KUDOS by replying with the first KUDOS message as a response.</t>
            </li>
            <li>
              <t>The client sends only Non-confirmable CoAP requests to the server and does not expect responses sent back as reply, hence freeing up a request's Token value once the request is sent.</t>
            </li>
          </ul>
          <t>In such a case, in order to avoid experiencing a deadlock situation where the server needs to execute KUDOS but cannot practically initiate it, a client-only device that supports KUDOS <bcp14>SHOULD</bcp14> intersperse Non-confirmable requests it sends to that server with confirmable requests.</t>
        </section>
      </section>
      <section anchor="no-fs-mode">
        <name>Key Update Admitting no Forward Secrecy</name>
        <t>The FS mode of the KUDOS procedure defined in <xref target="ssec-derive-ctx"/> ensures forward secrecy of the OSCORE keying material. However, it requires peers executing KUDOS to preserve their state (e.g., across a device reboot), by writing information such as data from the newly derived OSCORE Security Context CTX_NEW in non-volatile memory.</t>
        <t>This can be problematic for devices that cannot dynamically write information to non-volatile memory. For example, some devices may support only a single writing in persistent memory when initial keying material is provided (e.g., at manufacturing or commissioning time), but no further writing after that. Therefore, these devices cannot perform a stateful key update procedure, and thus are not capable to run KUDOS in FS mode to achieve forward secrecy.</t>
        <t>In order to address these limitations, KUDOS can be run in its stateless no-FS mode, as defined in the following. This allows two peers to achieve the same results as when running KUDOS in FS mode (see <xref target="ssec-derive-ctx"/>), with the difference that no forward secrecy is achieved and no state information is required to be dynamically written in non-volatile memory.</t>
        <t>From a practical point of view, the two modes differ as to what exact OSCORE Master Secret and Master Salt are used as part of the OSCORE Security Context CTX_OLD provided as input to the updateCtx() function (see <xref target="ssec-update-function"/>).</t>
        <t>If either or both peers are not able to write in non-volatile memory the OSCORE Master Secret and OSCORE Master Salt from the newly derived Security Context CTX_NEW, then the two peers have to run KUDOS in no-FS mode.</t>
        <section anchor="key-material-handling">
          <name>Handling and Use of Keying Material</name>
          <t>In the following, a device is denoted as "CAPABLE" if it is able to store information in non-volatile memory (e.g., on disk), beyond a one-time-only writing occurring at manufacturing or (re-)commissioning time. If that is not the case, the device is denoted as "non-CAPABLE".</t>
          <t>The following terms are used to refer to OSCORE keying material.</t>
          <ul spacing="normal">
            <li>
              <t>Bootstrap Master Secret and Bootstrap Master Salt. If pre-provisioned during manufacturing or (re-)commissioning, these OSCORE Master Secret and Master Salt are initially stored on disk and are never going to be overwritten by the device.</t>
            </li>
            <li>
              <t>Latest Master Secret and Latest Master Salt. These OSCORE Master Secret and Master Salt can be dynamically updated by the device. In case of reboot, they are lost unless they have been stored on disk.</t>
            </li>
          </ul>
          <t>Note that:</t>
          <ul spacing="normal">
            <li>
              <t>A peer running KUDOS can have none of the pairs above associated with another peer, only one, or both.</t>
            </li>
            <li>
              <t>A peer that has neither of the pairs above associated with another peer, cannot run KUDOS in any mode with that other peer.</t>
            </li>
            <li>
              <t>A peer that has only one of the pairs above associated with another peer can attempt to run KUDOS with that other peer, but the procedure might fail depending on the other peer's capabilities. In particular:  </t>
              <ul spacing="normal">
                <li>
                  <t>In order to run KUDOS in FS mode, a peer must be a CAPABLE device. It follows that two peers have to both be CAPABLE devices in order to be able to run KUDOS in FS mode with one another.</t>
                </li>
                <li>
                  <t>In order to run KUDOS in no-FS mode, a peer must have Bootstrap Master Secret and Bootstrap Master Salt available as stored on disk.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>A peer that is a non-CAPABLE device <bcp14>MUST</bcp14> support the no-FS mode. Note that an exception described in <xref target="non-capable-fs-mode"/> exists for non-CAPABLE devices that lack Bootstrap Master Secret and Bootstrap Master Salt.</t>
            </li>
            <li>
              <t>A peer that is a CAPABLE device <bcp14>MUST</bcp14> support the FS mode and the no-FS mode.</t>
            </li>
            <li>
              <t>As an exception to the nonces being generated as random values (see <xref target="ssec-nonces-x-bytes"/>), a peer that is a CAPABLE device <bcp14>MAY</bcp14> use a value obtained from a monotonically incremented counter as nonce N1 or N2. This has privacy implications, which are described in <xref target="sec-cons"/>. In such a case, the peer <bcp14>MUST</bcp14> enforce measures to ensure freshness of the nonce values. For example, the peer can use the same procedure described in <xref section="B.1.1" sectionFormat="of" target="RFC8613"/> for handling the OSCORE Sender Sequence Number values. These measures require to regularly store the used counter values in non-volatile memory, which makes non-CAPABLE devices unable to safely use counter values as nonce values.</t>
            </li>
          </ul>
          <t>As a general rule, once successfully generated a new OSCORE Security Context CTX (e.g., CTX is the CTX_NEW resulting from a KUDOS execution, or it has been established through the EDHOC protocol <xref target="RFC9528"/>), 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 <bcp14>MUST</bcp14> store Latest Master Secret and Latest Master Salt on disk, with the exception of possible temporary OSCORE Security Contexts used during a key update procedure, such as CTX_1 used during the KUDOS execution. That is, the OSCORE Master Secret and Master Salt from such temporary Security Contexts are not stored on disk.</t>
            </li>
            <li>
              <t>The peer <bcp14>MUST</bcp14> store Latest Master Secret and Latest Master Salt in volatile memory, thus making them available to OSCORE message processing and possible key update procedures.</t>
            </li>
          </ul>
          <section anchor="actions-after-device-reboot">
            <name>Actions after Device Reboot</name>
            <t>Building on the above, after having experienced a reboot, a peer A checks whether it has stored on disk a pair P1 = (Latest Master Secret, Latest Master Salt) associated with any another peer B.</t>
            <ul spacing="normal">
              <li>
                <t>If a pair P1 is found, the peer A performs the following actions.  </t>
                <ul spacing="normal">
                  <li>
                    <t>The peer A loads the Latest Master Secret and Latest Master Salt to volatile memory, and uses them to derive an OSCORE Security Context CTX_OLD.</t>
                  </li>
                  <li>
                    <t>The peer A runs KUDOS with the other peer B, acting as initiator. If the peer A is a CAPABLE device, it stores on disk the Master Secret and Master Salt from the newly established OSCORE Security Context CTX_NEW, as Latest Master Secret and Latest Master Salt, respectively.</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>If a pair P1 is not found, the peer A checks whether it has stored on disk a pair P2 = (Bootstrap Master Secret, Bootstrap Master Salt) associated with the other peer B.  </t>
                <ul spacing="normal">
                  <li>
                    <t>If a pair P2 is found, the peer A performs the following actions.      </t>
                    <ul spacing="normal">
                      <li>
                        <t>The peer A loads the Bootstrap Master Secret and Bootstrap Master Salt to volatile memory, and uses them to derive an OSCORE Security Context CTX_OLD.</t>
                      </li>
                      <li>
                        <t>If the peer A is a CAPABLE device, it stores on disk Bootstrap Master Secret and Bootstrap Master Salt as Latest Master Secret and Latest Master Salt, respectively. This supports the situation where A is a CAPABLE device and has never run KUDOS with the other peer B before.</t>
                      </li>
                      <li>
                        <t>The peer A runs KUDOS with the other peer B, acting as initiator. If the peer A is a CAPABLE device, it stores on disk the Master Secret and Master Salt from the newly established OSCORE Security Context CTX_NEW, as Latest Master Secret and Latest Master Salt, respectively.</t>
                      </li>
                    </ul>
                  </li>
                  <li>
                    <t>If a pair P2 is not found, the peer A has to use alternative ways to establish a first OSCORE Security Context CTX_NEW with the other peer B, e.g., by running the EDHOC protocol. After that, if A is a CAPABLE device, it stores on disk the OSCORE Master Secret and Master Salt from the newly established OSCORE Security Context CTX_NEW, as Latest Master Secret and Latest Master Salt, respectively.</t>
                  </li>
                </ul>
              </li>
            </ul>
            <t>Following a state loss (e.g., due to a reboot), a device <bcp14>MUST</bcp14> complete a successful KUDOS execution (with either of the flows) before performing an exchange of OSCORE-protected application data with another peer, unless:</t>
            <ul spacing="normal">
              <li>
                <t>The device is CAPABLE and implements a functionality for safely reusing old keying material, such as that described in <xref section="B.1" sectionFormat="of" target="RFC8613"/>; or</t>
              </li>
              <li>
                <t>The device is exchanging OSCORE-protected data as part of a KUDOS execution in either of the KUDOS messages, as described in <xref target="ssec-message-handling"/>. In such case, the plain CoAP request composed before OSCORE protection of the KUDOS message may include an application payload, if admitted by the request method.</t>
              </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>
              <t>If the 'p' bit is set to 0 (FS mode), the updateCtx() function used to derive CTX_1 or CTX_NEW considers as input CTX_OLD the current OSCORE Security Context shared with the other peer as is. In particular, CTX_OLD includes Latest Master Secret as OSCORE Master Secret and Latest Master Salt as OSCORE Master Salt.</t>
            </li>
            <li>
              <t>If the 'p' bit is set to 1 (no-FS mode), the updateCtx() function used to derive CTX_1 or CTX_NEW considers as input CTX_OLD the current OSCORE Security Context shared with the other peer, with the following difference: Bootstrap Master Secret is used as OSCORE Master Secret and Bootstrap Master Salt is used as OSCORE Master Salt. That is, every execution of KUDOS in no-FS mode between these two peers considers the same pair (Master Secret, Master Salt) in the OSCORE Security Context CTX_OLD provided as input to the updateCtx() function, hence the impossibility to achieve forward secrecy.</t>
            </li>
          </ul>
          <t>A peer determines to run KUDOS either in FS or no-FS mode with another peer as follows.</t>
          <ul spacing="normal">
            <li>
              <t>If a peer A is a non-CAPABLE device, it <bcp14>MUST</bcp14> run KUDOS only in no-FS mode. That is, when sending a KUDOS message, it <bcp14>MUST</bcp14> set to 1 the 'p' bit of the 'x' byte in the OSCORE Option value. Note that, if peer A lacks a Bootstrap Master Secret and Bootstrap Master Salt to use with the other peer B, it can still run KUDOS in FS mode according to what is defined in <xref target="non-capable-fs-mode"/>.</t>
            </li>
            <li>
              <t>If a peer A is a CAPABLE device, it <bcp14>SHOULD</bcp14> run KUDOS only in FS mode. That is, when sending a KUDOS message, it <bcp14>SHOULD</bcp14> set to 0 the 'p' bit of the 'x' byte in the OSCORE Option value. An exception applies in the following cases.  </t>
              <ul spacing="normal">
                <li>
                  <t>The peer A is running KUDOS with another peer B, which A has learned to be a non-CAPABLE device (and hence not able to run KUDOS in FS mode).      </t>
                  <t>
Note that, if the peer A is a CAPABLE device, it is able to store such information about the other peer B on disk and it <bcp14>MUST</bcp14> do so. From then on, the peer A will perform every execution of KUDOS with the peer B in no-FS mode, including after a possible reboot.</t>
                </li>
                <li>
                  <t>The peer A is acting as responder and running KUDOS with another peer B without knowing its capabilities, and A receives a KUDOS message where the 'p' bit of the 'x' byte in the OSCORE Option value is set to 1.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>If a peer A is a CAPABLE device and has learned that another peer B is also a CAPABLE device (and hence able to run KUDOS in FS mode), then the peer A <bcp14>MUST NOT</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> do so. This ensures that the peer A will perform every execution of KUDOS with the peer B in FS mode. In turn, this prevents a possible downgrading attack, aimed at making A believe that B is a non-CAPABLE device, and thus to run KUDOS in no-FS mode although the FS mode can actually be used by both peers.</t>
            </li>
          </ul>
          <t>Within the limitations above, two peers running KUDOS generate the new OSCORE Security Context CTX_NEW according to the mode indicated per the bit 'p' set by the responder in the second KUDOS message.</t>
          <t>If, after having received the first KUDOS message, the responder can continue performing KUDOS, the bit 'p' in the reply message has the same value as in the bit 'p' set by the initiator, unless such latter value is 0 and the responder is a non-CAPABLE device. More specifically:</t>
          <ul spacing="normal">
            <li>
              <t>If both peers are CAPABLE devices, they will run KUDOS in FS mode. That is, both initiator and responder sets the 'p' bit to 0 in the respective sent KUDOS message.</t>
            </li>
            <li>
              <t>If both peers are non-CAPABLE devices or only the peer acting as initiator is a non-CAPABLE device, they will run KUDOS in no-FS mode. That is, both initiator and responder sets the 'p' bit to 1 in the respective sent KUDOS message.</t>
            </li>
            <li>
              <t>If only the peer acting as initiator is a CAPABLE device and it has knowledge of the other peer being a non-CAPABLE device, they will run KUDOS in no-FS mode. That is, both initiator and responder sets the 'p' bit to 1 in the respective sent KUDOS message.</t>
            </li>
            <li>
              <t>If only the peer acting as initiator is a CAPABLE device and it has no knowledge of the other peer being a non-CAPABLE device, they will not run KUDOS in FS mode and will rather set to ground for possibly retrying in no-FS mode. In particular, the initiator sets the 'p' bit of its sent KUDOS message to 0. Then:  </t>
              <ul spacing="normal">
                <li>
                  <t>If the responder is a server, it <bcp14>MUST</bcp14> consider the KUDOS execution unsuccessful and <bcp14>MUST</bcp14> reply with a 5.03 (Service Unavailable) error response. The response <bcp14>MUST</bcp14> be protected with the newly derived OSCORE Security Context CTX_NEW. The diagnostic payload <bcp14>MAY</bcp14> provide additional information. This response is a KUDOS message, and it <bcp14>MUST</bcp14> have the 'd' bit and the 'p' bit set to 1.      </t>
                  <t>
When receiving the error response, the initiator learns that the responder is a non-CAPABLE device (and hence not able to run KUDOS in FS mode), since the 'p' bit in the error response is set to 1, while the 'p' bit in the corresponding request was set to 0. Hence, the initiator <bcp14>MUST</bcp14> consider the KUDOS execution unsuccessful, and <bcp14>MAY</bcp14> try running KUDOS again. If it does so, the initiator <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> consider the KUDOS execution unsuccessful and <bcp14>MUST</bcp14> send to the initiator the second KUDOS message as a new request, which <bcp14>MUST</bcp14> be protected with the newly derived OSCORE Security Context CTX_NEW. In the newly sent request, the 'p' bit <bcp14>MUST</bcp14> be set to 1.      </t>
                  <t>
When receiving the new request above, the initiator learns that the responder is a non-CAPABLE device (and hence not able to run KUDOS in FS mode), since the 'p' bit in the request is set to 1, while the 'p' bit in the response previously sent as first KUDOS message was set to 0. Also, the initiator <bcp14>SHOULD NOT</bcp14> send any response to such a request, and the responder <bcp14>SHOULD NOT</bcp14> expect any such response.</t>
                </li>
              </ul>
              <t>
In either case, both KUDOS peers delete the OSCORE Security Contexts CTX_1 and CTX_NEW. Also, both peers <bcp14>MUST</bcp14> retain CTX_OLD for use during the next KUDOS execution in the no-FS mode. This is in contrast with the typical behavior where CTX_OLD is deleted upon reception of a message protected with CTX_NEW.</t>
            </li>
          </ul>
        </section>
        <section anchor="non-capable-fs-mode">
          <name>Non-CAPABLE Devices Operating in FS Mode</name>
          <t>Devices may not be pre-provisioned with Bootstrap material, for instance due to storage limitations of persistent memory or to fulfil particular use cases. Bootstrap material means specifically the Bootstrap Master Secret and Bootstrap Master Salt, and Latest material means the Latest Master Secret and Latest Master Salt as defined in <xref target="key-material-handling"/>. Normally, a non-CAPABLE device always uses KUDOS in no-FS mode. An exception is possible, if the Bootstrap material is dynamically installed at that device through an in-band process between that device and the peer device. In such a case, it is possible for this device to run KUDOS in FS mode with the peer device.</t>
          <t>Note that, under the assumption that peer A does not have any Bootstrap material with another peer B, peer A cannot use the no-FS mode with peer B, even though peer A is a non-CAPABLE device. Thus, allowing peer A to use KUDOS in FS mode ensures that peer A can perform a key update using KUDOS at all.</t>
          <t>The following describes how a non-CAPABLE device in the situation outlined above, namely peer A, runs KUDOS in FS mode with another peer B:</t>
          <ul spacing="normal">
            <li>
              <t>Peer A is not provisioned with Bootstrap material associated with peer B at the time of manufacturing or commissioning.</t>
            </li>
            <li>
              <t>Peer A establishes OSCORE keying material associated with peer B through an in-band procedure run with peer B. Then, peer A considers that keying material as the Latest material with peer B, and stores it only in volatile memory.
              </t>
              <ul spacing="normal">
                <li>
                  <t>An example of such an in-band procedure is the EDHOC and OSCORE profile of ACE <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>, according to which the two peers run the EDHOC protocol <xref target="RFC9528"/> for establishing an OSCORE Security Context to associate with access rights. This in-band procedure may occur multiple times over the device's lifetime.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Peer A runs KUDOS in FS mode with peer B, thereby achieving forward secrecy for subsequent key update epochs, as long as the OSCORE keying material was originally established with forward secrecy. Peer A stores each newly derived Security Context in volatile memory.</t>
            </li>
          </ul>
          <t>As long as peer A does not reboot, executions of KUDOS rely on the Latest material stored in volatile memory. If peer A reboots, no OSCORE keying material associated with the peer B will be retained, as peer A is non-CAPABLE and therefore stores it only in volatile memory. Consequently, peer A must first establish new OSCORE keying material to use as Latest material with peer B, before running KUDOS again with peer B. This can be accomplished by running again the in-band procedure mentioned above.</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, e.g., against an Observe request protected with CTX_OLD and an Observe request protected with CTX_NEW.</t>
        <t>The actual preservation of ongoing observations has to be agreed by the two peers at each execution of KUDOS that they run with one another, as defined in <xref target="preserving-observe-management"/>. If, at the end of a KUDOS execution, the two peers have not agreed on that, they <bcp14>MUST</bcp14> terminate the ongoing observations that they have with one another, just as defined in <xref target="ssec-context-handling"/>.</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 <bcp14>MUST NOT</bcp14> simply forget about an ongoing observation if not interested in it anymore. Instead, the client <bcp14>MUST</bcp14> 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 <bcp14>MUST NOT</bcp14> consider the observation terminated. The client <bcp14>MAY</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> ignore the bit 'b' in the follow-up KUDOS message that it receives from the other peer.</t>
          <t>After successfully completing the KUDOS execution (i.e., after having successfully derived the new OSCORE Security Context CTX_NEW), both peers have expressed their interest in preserving their common ongoing observations if and only if the bit 'b' was set to 1 in both the exchanged KUDOS messages. In such a case, each peer X performs the following actions.</t>
          <ol spacing="normal" type="1"><li>
              <t>The peer X considers all the still ongoing observations that it has with the other peer, such that X acts as client in those observations. If there are no such observations, the peer X takes no further actions. Otherwise, it moves to step 2.</t>
            </li>
            <li>
              <t>The peer X considers all the OSCORE Partial IV values used in the Observe registration request associated with any of the still ongoing observations determined at step 1.</t>
            </li>
            <li>
              <t>The peer X determines the value PIV* as the highest OSCORE Partial IV value among those considered at step 2.</t>
            </li>
            <li>
              <t>In the Sender Context of the OSCORE Security Context shared with the other peer, the peer X sets its own Sender Sequence Number to (PIV* + 1), rather than to 0.</t>
            </li>
          </ol>
          <t>As a result, each peer X will "jump" beyond the OSCORE Partial IV (PIV) values that are occupied and in use for ongoing observations with the other peer where X acts as client.</t>
          <t>Note that, each time it runs KUDOS, a peer must determine if it wishes to preserve ongoing observations with the other peer or not, before sending its KUDOS message.</t>
          <t>To this end, the peer should also assess the new value that PIV* would take after a successful completion of KUDOS, in case ongoing observations with the other peer are going to be preserved. If the peer considers such a new value of PIV* to be too close to or equal to the maximum possible value admitted for the OSCORE Partial IV, then the peer may choose to run KUDOS with no intention to preserve its ongoing observations with the other peer, in order to "start over" from a fresh, entirely unused PIV space.</t>
          <t>Application policies can further influence whether attempting to preserve observations beyond a key update is appropriate or not.</t>
        </section>
      </section>
      <section anchor="ssec-retention">
        <name>Retention Policies</name>
        <t>Applications <bcp14>MAY</bcp14> define policies that allow a peer to temporarily keep the old Security Context CTX_OLD beyond having established the new Security Context CTX_NEW and having achieved key confirmation, rather than simply overwriting CTX_OLD with CTX_NEW. This allows the peer to decrypt late, still on-the-fly incoming messages protected with CTX_OLD.</t>
        <t>When enforcing such policies, the following applies.</t>
        <ul spacing="normal">
          <li>
            <t>Outgoing non KUDOS messages <bcp14>MUST</bcp14> be protected by using only CTX_NEW.</t>
          </li>
          <li>
            <t>Incoming non KUDOS messages <bcp14>MUST</bcp14> first be attempted to decrypt by using CTX_NEW. If decryption fails, a second attempt can use CTX_OLD.</t>
          </li>
          <li>
            <t>When an amount of time defined by the policy has elapsed since the establishment of CTX_NEW, the peer deletes CTX_OLD.</t>
          </li>
        </ul>
        <t>A peer <bcp14>MUST NOT</bcp14> retain CTX_OLD beyond the establishment of CTX_NEW and the achievement of key confirmation, if any of the following conditions holds: CTX_OLD is expired; limits set for safe key usage have been reached <xref target="I-D.ietf-core-oscore-key-limits"/>, for the Recipient Key of the Recipient Context of CTX_OLD.</t>
      </section>
      <section anchor="ssec-discussion">
        <name>Discussion</name>
        <t>KUDOS is intended to deprecate and replace the procedure defined in <xref section="B.2" sectionFormat="of" target="RFC8613"/>, as fundamentally achieving the same goal, while displaying a number of improvements and advantages.</t>
        <t>In particular, it is especially convenient for the handling of failure events concerning the JRC node in 6TiSCH networks (see <xref target="sec-current-methods"/>). That is, among its intrinsic advantages compared to the procedure defined in <xref section="B.2" sectionFormat="of" target="RFC8613"/>, KUDOS preserves the same ID Context value, when establishing a new OSCORE Security Context.</t>
        <t>Since the JRC uses ID Context values as identifiers of network nodes, namely "pledge identifiers", the above implies that the JRC does not have to perform anymore a mapping between a new, different ID Context value and a certain pledge identifier (see <xref section="8.3.3" sectionFormat="of" target="RFC9031"/>). It follows that pledge identifiers can remain constant once assigned, and thus ID Context values used as pledge identifiers can be employed in the long-term as originally intended.</t>
        <section anchor="kudos-interleaved-with-other-message-exchanges">
          <name>KUDOS Interleaved with Other Message Exchanges</name>
          <t>During a KUDOS execution, a peer that is a CoAP Client must be ready to receive CoAP responses that are not KUDOS messages and that are protected with a different OSCORE Security Context than the one that was used to protect the corresponding request.</t>
          <t>This can happen, for instance, when a CoAP client sends a request and, shortly after that, it executes KUDOS. In such a case, the CoAP request is protected with CTX_OLD, while the CoAP response from the server is protected with CTX_NEW. Another case is when incoming responses are Observe notifications protected with CTX_NEW, while the corresponding request from the CoAP client that started the observation was protected with CTX_OLD.</t>
          <t>Another case is when running KUDOS in the reverse message flow, if the client uses NSTART &gt; 1 and one of its requests triggers a KUDOS execution, i.e., the server replies with the first KUDOS message by acting as responder. The other requests would be latest served by the server after KUDOS has been completed.</t>
        </section>
        <section anchor="communication-overhead">
          <name>Communication Overhead</name>
          <t>Each of the two KUDOS messages results in communication overhead. This is determined by the following, additional information conveyed in the OSCORE Option (see <xref target="ssec-oscore-option-extensions"/>).</t>
          <ul spacing="normal">
            <li>
              <t>The second byte of the OSCORE Option value.</t>
            </li>
            <li>
              <t>The byte 'x' of the OSCORE Option value.</t>
            </li>
            <li>
              <t>The nonce conveyed in the 'nonce' field of the OSCORE Option. Its size ranges from 1 to 16 bytes as indicated in the 'x' byte, and is typically of 8 bytes.</t>
            </li>
            <li>
              <t>The byte 'y' of the OSCORE Option value, if present.</t>
            </li>
            <li>
              <t>The nonce conveyed in the 'old_nonce' field of the OSCORE Option value, if present. When present, its size ranges from 1 to 16 bytes as indicated in the 'y' byte, and is typically of 8 bytes.</t>
            </li>
            <li>
              <t>The 'Partial IV' parameter of the OSCORE Option value, in a CoAP response message that is a KUDOS message.  </t>
              <t>
This takes into account the fact that OSCORE-protected CoAP response messages normally do not include the 'Partial IV' parameter, but they have to when they are KUDOS messages (see Section 3).</t>
            </li>
            <li>
              <t>The first byte of the OSCORE Option value (i.e., the first OSCORE flag byte), in a CoAP response message that is a KUDOS message.  </t>
              <t>
This takes into account the fact that OSCORE-protected CoAP response messages normally convey an OSCORE Option that only consists of the all zero (0x00) flag byte. In turn, this results in the OSCORE Option being encoded as with empty value (see <xref section="2" sectionFormat="of" target="RFC8613"/>.</t>
            </li>
            <li>
              <t>The possible presence of the 1-byte Option Length (extended) field in the OSCORE Option (see <xref section="3.1" sectionFormat="of" target="RFC7252"/>). This is the case where the length of the OSCORE Option value is between 13 and 255 bytes (see <xref section="2" sectionFormat="of" target="RFC8613"/>).</t>
            </li>
          </ul>
          <t>The results shown below are the minimum, typical, and maximum communication overhead introduced by KUDOS, when considering a nonce with size 1, 8, and 16 bytes. <xref target="_table-overhead-forward"/> and <xref target="_table-overhead-reverse"/> refer to the KUDOS forward message flow and reverse message flow, respectively. All the indicated values are in bytes.</t>
          <t>In particular, the shown results build on the following assumptions.</t>
          <ul spacing="normal">
            <li>
              <t>Both messages of the same KUDOS execution use nonces of the same size, and do not include the 'kid context' parameter in the OSCORE Option value.</t>
            </li>
            <li>
              <t>When included in the OSCORE Option value, the 'Partial IV' parameter has size 1 byte.</t>
            </li>
            <li>
              <t>CoAP request messages include the 'kid' parameter with size 1 byte in the OSCORE Option value.</t>
            </li>
            <li>
              <t>CoAP response messages do not include the 'kid' parameter in the OSCORE Option value.</t>
            </li>
          </ul>
          <table align="center" anchor="_table-overhead-forward">
            <name>Communication overhead (forward message flow)</name>
            <thead>
              <tr>
                <th align="left">Nonce size</th>
                <th align="left">First KUDOS message</th>
                <th align="left">Second KUDOS message</th>
                <th align="left">Total</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">1</td>
                <td align="left">3</td>
                <td align="left">5</td>
                <td align="left">8</td>
              </tr>
              <tr>
                <td align="left">8</td>
                <td align="left">11</td>
                <td align="left">12</td>
                <td align="left">23</td>
              </tr>
              <tr>
                <td align="left">16</td>
                <td align="left">19</td>
                <td align="left">21</td>
                <td align="left">40</td>
              </tr>
            </tbody>
          </table>
          <table align="center" anchor="_table-overhead-reverse">
            <name>Communication overhead (reverse message flow)</name>
            <thead>
              <tr>
                <th align="left">Nonce size</th>
                <th align="left">First KUDOS message</th>
                <th align="left">Second KUDOS message</th>
                <th align="left">Total</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">1</td>
                <td align="left">5</td>
                <td align="left">5</td>
                <td align="left">10</td>
              </tr>
              <tr>
                <td align="left">8</td>
                <td align="left">12</td>
                <td align="left">20</td>
                <td align="left">32</td>
              </tr>
              <tr>
                <td align="left">16</td>
                <td align="left">21</td>
                <td align="left">36</td>
                <td align="left">57</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="core-kudos-resource-type">
          <name>Resource Type core.kudos</name>
          <t>The "core.kudos" resource type registered in <xref target="rt-kudos"/> is defined to ensure a means for clients to send KUDOS requests without incurring any side effects. Specifically, a resource of this type does not pertain to any real application, which ensures that no application-level actions are triggered as a result of the KUDOS request. This allows clients to issue KUDOS requests when they do not include any actionable application payload in the plain CoAP request composed before OSCORE protection, or when no application-layer processing is intended to occur on the server.</t>
        </section>
        <section anchor="well-known-kudos-desc">
          <name>Well-Known KUDOS Resource</name>
          <t>According to this specification, KUDOS is transferred in POST requests and 2.04 (Changed) responses. If a client wishes to execute the KUDOS procedure as initiator without triggering any application processing on the server, then the request sent as first KUDOS message can target a KUDOS resource with resource type "core.kudos" (see <xref target="core-kudos-resource-type"/>), e.g., at the Uri-Path "/.well-known/kudos" (see <xref target="well-known-kudos"/>). An alternative KUDOS resource can be discovered, e.g., by using a resource directory <xref target="RFC9176"/>, by using the resource type "core.kudos" as filter criterion.</t>
        </section>
        <section anchor="rekeying-when-using-schc-with-oscore">
          <name>Rekeying when Using SCHC with OSCORE</name>
          <t>In the interest of rekeying, the following points must be taken into account when using the Static Context Header Compression and fragmentation (SCHC) framework <xref target="RFC8724"/> for compressing CoAP messages protected with OSCORE, as defined in <xref target="RFC8824"/>.</t>
          <t>Compression of the OSCORE Partial IV has implications for the frequency of rekeying. That is, if the Partial IV is compressed, the communicating peers must perform rekeying more often, as the available Partial IV space becomes smaller due to the compression. For instance, if only 3 bits of the Partial IV are sent, then the maximum PIV before having to rekey is only 2^3 - 1 = 7.</t>
          <t>Furthermore, any time the SCHC context Rules are updated on an OSCORE endpoint, that endpoint must perform a rekeying (see <xref section="9" sectionFormat="of" target="RFC8824"/>).</t>
          <t>That is, the use of SCHC plays a role in triggering KUDOS executions and in affecting their cadence. Hence, the used SCHC Rules and their update policies should ensure that the KUDOS executions occurring as their side effect do not significantly impair the gain from message compression.</t>
        </section>
      </section>
      <section anchor="signaling-support-for-kudos">
        <name>Signaling Support for KUDOS</name>
        <t>This section describes how support for KUDOS can be signaled when using the EDHOC protocol <xref target="RFC9528"/> and the OSCORE Profile of the ACE Framework <xref target="RFC9203"/>.</t>
        <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="RFC9528"/>). An EAD field is composed of one or multiple EAD items, each of which specifies an identifying 'ead_label' encoded as a CBOR integer, and an optional 'ead_value' encoded as a CBOR bstr.</t>
          <t>This document defines a new EDHOC EAD item KUDOS_EAD and registers its 'ead_label' in <xref target="iana-edhoc-aad"/>. By including this EAD item in an outgoing EDHOC message, a sender peer can indicate whether it supports KUDOS and in which modes, as well as query the other peer about its support. Note that peers do not have to use this EDHOC EAD item to be able to run KUDOS with each other, irrespective of the modes they support. A KUDOS peer <bcp14>MUST</bcp14> only use the EDHOC EAD item KUDOS_EAD as non-critical. That is, when included in an EDHOC message, its 'ead_label' <bcp14>MUST</bcp14> be used with positive sign. The possible values of the 'ead_value' are as follows:</t>
          <table align="center" anchor="_table-kudos-ead">
            <name>Values for the EDHOC EAD item KUDOS_EAD</name>
            <thead>
              <tr>
                <th align="left">Name</th>
                <th align="left">Value</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">ASK</td>
                <td align="left">h'' (0x40)</td>
                <td align="left">Used only in EDHOC message_1. It asks the recipient peer to specify in EDHOC message_2 whether it supports KUDOS.</td>
              </tr>
              <tr>
                <td align="left">NONE</td>
                <td align="left">h'00' (0x4100)</td>
                <td align="left">Used only in EDHOC message_2 and message_3. It specifies that the sender peer does not support KUDOS.</td>
              </tr>
              <tr>
                <td align="left">FULL</td>
                <td align="left">h'01' (0x4101)</td>
                <td align="left">Used only in EDHOC message_2 and message_3. It specifies that the sender peer supports KUDOS in FS mode and no-FS mode.</td>
              </tr>
              <tr>
                <td align="left">PART</td>
                <td align="left">h'02' (0x4102)</td>
                <td align="left">Used only in EDHOC message_2 and message_3. It specifies that the sender peer supports KUDOS in no-FS mode only.</td>
              </tr>
            </tbody>
          </table>
          <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 <bcp14>MUST</bcp14> 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 <bcp14>MAY</bcp14> 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 <bcp14>SHOULD</bcp14> 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 <bcp14>MUST NOT</bcp14> specify whether it supports KUDOS in EDHOC message_3.</t>
          <t>In the following cases, the recipient peer silently ignores the KUDOS_EAD item specified in the received EDHOC message, and does not include a KUDOS_EAD item in the next EDHOC message it sends (if any).</t>
          <ul spacing="normal">
            <li>
              <t>The recipient peer does not support the KUDOS_EAD item.</t>
            </li>
            <li>
              <t>The KUDOS_EAD item is included in EDHOC message_1 with 'ead_value' different than ASK</t>
            </li>
            <li>
              <t>The KUDOS_EAD item is included in EDHOC message_2 or message_3 with 'ead_value' ASK.</t>
            </li>
            <li>
              <t>The KUDOS_EAD item is included in EDHOC message_4.</t>
            </li>
          </ul>
          <t>That is, by specifying 'ead_value' ASK in EDHOC message_1, a peer A can indicate to the other peer B that it wishes to know if B supports KUDOS and in what mode(s). In the following EDHOC message_2, B indicates whether it supports KUDOS and in what mode(s), by specifying either NONE, FULL, or PART as 'ead_value'. Specifying the 'ead_value' FULL or PART in EDHOC message_2 also asks A to indicate whether it supports KUDOS in EDHOC message_3.</t>
          <t>To further illustrate the functionality, two examples are presented below as EDHOC executions where only the new KUDOS_EAD item is shown when present, and assuming that no other EAD items are used by the two peers.</t>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="272" width="480" viewBox="0 0 480 272" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,64 L 8,256" fill="none" stroke="black"/>
                <path d="M 472,64 L 472,256" fill="none" stroke="black"/>
                <path d="M 8,96 L 464,96" fill="none" stroke="black"/>
                <path d="M 16,160 L 472,160" fill="none" stroke="black"/>
                <path d="M 8,224 L 464,224" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="472,224 460,218.4 460,229.6" fill="black" transform="rotate(0,464,224)"/>
                <polygon class="arrowhead" points="472,96 460,90.4 460,101.6" fill="black" transform="rotate(0,464,96)"/>
                <polygon class="arrowhead" points="24,160 12,154.4 12,165.6" fill="black" transform="rotate(180,16,160)"/>
                <g class="text">
                  <text x="24" y="36">EDHOC</text>
                  <text x="456" y="36">EDHOC</text>
                  <text x="40" y="52">Initiator</text>
                  <text x="440" y="52">Responder</text>
                  <text x="164" y="84">EAD_1:</text>
                  <text x="240" y="84">(TBD_LABEL,</text>
                  <text x="308" y="84">ASK)</text>
                  <text x="240" y="116">message_1</text>
                  <text x="164" y="148">EAD_2:</text>
                  <text x="240" y="148">(TBD_LABEL,</text>
                  <text x="312" y="148">FULL)</text>
                  <text x="240" y="180">message_2</text>
                  <text x="164" y="212">EAD_3:</text>
                  <text x="240" y="212">(TBD_LABEL,</text>
                  <text x="312" y="212">FULL)</text>
                  <text x="240" y="244">message_3</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" 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>
          </artset>
          <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>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="256" width="480" viewBox="0 0 480 256" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,64 L 8,240" fill="none" stroke="black"/>
                <path d="M 472,64 L 472,240" fill="none" stroke="black"/>
                <path d="M 8,96 L 464,96" fill="none" stroke="black"/>
                <path d="M 16,160 L 472,160" fill="none" stroke="black"/>
                <path d="M 8,208 L 464,208" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="472,208 460,202.4 460,213.6" fill="black" transform="rotate(0,464,208)"/>
                <polygon class="arrowhead" points="472,96 460,90.4 460,101.6" fill="black" transform="rotate(0,464,96)"/>
                <polygon class="arrowhead" points="24,160 12,154.4 12,165.6" fill="black" transform="rotate(180,16,160)"/>
                <g class="text">
                  <text x="24" y="36">EDHOC</text>
                  <text x="456" y="36">EDHOC</text>
                  <text x="40" y="52">Initiator</text>
                  <text x="440" y="52">Responder</text>
                  <text x="164" y="84">EAD_1:</text>
                  <text x="240" y="84">(TBD_LABEL,</text>
                  <text x="308" y="84">ASK)</text>
                  <text x="240" y="116">message_1</text>
                  <text x="164" y="148">EAD_2:</text>
                  <text x="240" y="148">(TBD_LABEL,</text>
                  <text x="312" y="148">NONE)</text>
                  <text x="240" y="180">message_2</text>
                  <text x="240" y="228">message_3</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
EDHOC                                                 EDHOC
Initiator                                         Responder
|                                                         |
|                EAD_1: (TBD_LABEL, ASK)                  |
+-------------------------------------------------------->|
|                        message_1                        |
|                                                         |
|                EAD_2: (TBD_LABEL, NONE)                 |
|<--------------------------------------------------------+
|                        message_2                        |
|                                                         |
+-------------------------------------------------------->|
|                        message_3                        |
|                                                         |
]]></artwork>
          </artset>
          <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>
    <section anchor="sec-cons">
      <name>Security Considerations</name>
      <t>Depending on the specific key update procedure used to establish a new OSCORE Security Context, the related security considerations also apply.</t>
      <t>As mentioned in <xref target="ssec-nonces-x-bytes"/>, it is <bcp14>RECOMMENDED</bcp14> that the size for nonces N1 and N2 is 8 bytes. The application needs to set the size of each nonce such that the probability of its value being repeated is negligible. Note that the probability of collision of nonce values is heightened by the birthday paradox. However, considering a nonce size of 8 bytes there will be a collision on average after approximately 2^32 instances of Response #1 messages.</t>
      <t>Overall, the size of the nonces N1 and N2 should be set such that the security level is harmonized with other components of the deployment. Considering the constraints of embedded implementations, there might be a need for allowing N1 and N2 values that are smaller in size. This is acceptable, provided that safety, reliability, and robustness within the system can still be assured. Although using nonces that are smaller in size means that there will be a collision on average after fewer KUDOS messages have been sent, this should not pose significant problems even for a constrained server operating at a capacity of one request per second.</t>
      <t>The nonces exchanged in the KUDOS messages are sent in the clear, so using random nonces is preferable for maintaining privacy. If instead a counter value is used, this can leak some information about the peers. Specifically, using counters will reveal the frequency of rekeying procedures performed.</t>
      <t>As discussed in <xref target="Symmetric-Security"/>, key update methods built on symmetric key exchange have weaker security properties compared to methods built on ephemeral Diffie-Hellman key exchange. In fact, while the two approaches can co-exist, rekeying with symmetric key exchange is not intended as a substitute for ephemeral Diffie-Hellman key exchange. Peers should periodically perform a key update based on ephemeral Diffie-Hellman key exchange (e.g., by running the EDHOC protocol <xref target="RFC9528"/>). The cadence of such periodic key updates should be determined based on how much the two peers and their network environment are constrained, as well as on the maximum amount of time and of exchanged data that are acceptable between two consecutive key updates.</t>
    </section>
    <section anchor="sec-iana">
      <name>IANA Considerations</name>
      <t>This document has the following actions for IANA.</t>
      <t>Note to RFC Editor: Please replace all occurrences of "[RFC-XXXX]" with the RFC number of this specification and delete this paragraph.</t>
      <section anchor="iana-cons-flag-bits">
        <name>OSCORE Flag Bits Registry</name>
        <t>IANA is asked to add the following entries to the "OSCORE Flag Bits" registry within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <table align="center" anchor="_table-iana-oscore-flag-bits">
          <name>Registrations in the OSCORE Flag Bits Registry</name>
          <thead>
            <tr>
              <th align="left">Bit Position</th>
              <th align="left">Name</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">Extension-1 Flag</td>
              <td align="left">Set to 1 if the OSCORE Option specifies a second byte, which includes the OSCORE flag bits 8-15</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
            <tr>
              <td align="left">8</td>
              <td align="left">Extension-2 Flag</td>
              <td align="left">Set to 1 if the OSCORE Option specifies a third byte, which includes the OSCORE flag bits 16-23</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
            <tr>
              <td align="left">15</td>
              <td align="left">Nonce Flag</td>
              <td align="left">Set to 1 if nonce is present in the compressed COSE object</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
            <tr>
              <td align="left">16</td>
              <td align="left">Extension-3 Flag</td>
              <td align="left">Set to 1 if the OSCORE Option specifies a fourth byte, which includes the OSCORE flag bits 24-31</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
            <tr>
              <td align="left">24</td>
              <td align="left">Extension-4 Flag</td>
              <td align="left">Set to 1 if the OSCORE Option specifies a fifth byte, which includes the OSCORE flag bits 32-39</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
            <tr>
              <td align="left">32</td>
              <td align="left">Extension-5 Flag</td>
              <td align="left">Set to 1 if the OSCORE Option specifies a sixth byte, which includes the OSCORE flag bits 40-47</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
            <tr>
              <td align="left">40</td>
              <td align="left">Extension-6 Flag</td>
              <td align="left">Set to 1 if the OSCORE Option specifies a seventh byte, which includes the OSCORE flag bits 48-55</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
            <tr>
              <td align="left">48</td>
              <td align="left">Extension-7 Flag</td>
              <td align="left">Set to 1 if the OSCORE Option specifies an eighth byte, which includes the OSCORE flag bits 56-63</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
          </tbody>
        </table>
        <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>
        <table align="center" anchor="_table-iana-oscore-flag-bits-2">
          <name>Update in the OSCORE Flag Bits Registry</name>
          <thead>
            <tr>
              <th align="left">Bit Position</th>
              <th align="left">Name</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">1</td>
              <td align="left">Unassigned</td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="coap-option-numbers-registry">
        <name>CoAP Option Numbers Registry</name>
        <t>IANA is asked to add this document as a reference for the OSCORE Option in the "CoAP Option Numbers" registry within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
      </section>
      <section anchor="iana-edhoc-aad">
        <name>EDHOC External Authorization Data Registry</name>
        <t>IANA is asked to add the following entries to the "EDHOC External Authorization Data" registry defined in <xref section="10.5" sectionFormat="of" target="RFC9528"/> within the "Ephemeral Diffie-Hellman Over COSE (EDHOC)" registry group.</t>
        <table align="center" anchor="_table-iana-edhoc-ead">
          <name>Registrations in the EDHOC External Authorization Data Registry</name>
          <thead>
            <tr>
              <th align="left">Label</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD1</td>
              <td align="left">Indicates whether this peer supports KUDOS and in which mode(s)</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="well-known-kudos">
        <name>The Well-Known URI Registry</name>
        <t>IANA is asked to add the 'kudos' well-known URI to the Well-Known URIs registry as defined by <xref target="RFC8615"/>.</t>
        <ul spacing="normal">
          <li>
            <t>URI suffix: kudos</t>
          </li>
          <li>
            <t>Change controller: IETF</t>
          </li>
          <li>
            <t>Specification document(s): [RFC-XXXX]</t>
          </li>
          <li>
            <t>Related information: None</t>
          </li>
        </ul>
      </section>
      <section anchor="rt-kudos">
        <name>Resource Type (rt=) Link Target Attribute Values Registry</name>
        <t>IANA is requested to add the resource type "core.kudos" to the "Resource Type (rt=) Link Target Attribute Values" registry under the registry group "Constrained RESTful Environments (CoRE) Parameters".</t>
        <ul spacing="normal">
          <li>
            <t>Value: "core.kudos"</t>
          </li>
          <li>
            <t>Description: KUDOS resource.</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC7641">
          <front>
            <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <date month="September" year="2015"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks. The state of a resource on a CoAP server can change over time. This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time. The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7641"/>
          <seriesInfo name="DOI" value="10.17487/RFC7641"/>
        </reference>
        <reference anchor="RFC8613">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <date month="July" year="2019"/>
            <abstract>
              <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE). OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
              <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration. Therefore, this document updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8613"/>
          <seriesInfo name="DOI" value="10.17487/RFC8613"/>
        </reference>
        <reference anchor="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="RFC9528">
          <front>
            <title>Ephemeral Diffie-Hellman Over COSE (EDHOC)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Preuß Mattsson" initials="J." surname="Preuß Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <date month="March" year="2024"/>
            <abstract>
              <t>This document specifies Ephemeral Diffie-Hellman Over COSE (EDHOC), a very compact and lightweight authenticated Diffie-Hellman key exchange with ephemeral keys. EDHOC provides mutual authentication, forward secrecy, and identity protection. EDHOC is intended for usage in constrained scenarios, and a main use case is to establish an Object Security for Constrained RESTful Environments (OSCORE) security context. By reusing CBOR Object Signing and Encryption (COSE) for cryptography, Concise Binary Object Representation (CBOR) for encoding, and Constrained Application Protocol (CoAP) for transport, the additional code size can be kept very low.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9528"/>
          <seriesInfo name="DOI" value="10.17487/RFC9528"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC7554">
          <front>
            <title>Using IEEE 802.15.4e Time-Slotted Channel Hopping (TSCH) in the Internet of Things (IoT): Problem Statement</title>
            <author fullname="T. Watteyne" initials="T." role="editor" surname="Watteyne"/>
            <author fullname="M. Palattella" initials="M." surname="Palattella"/>
            <author fullname="L. Grieco" initials="L." surname="Grieco"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This document describes the environment, problem statement, and goals for using the Time-Slotted Channel Hopping (TSCH) Medium Access Control (MAC) protocol of IEEE 802.14.4e in the context of Low-Power and Lossy Networks (LLNs). The set of goals enumerated in this document form an initial set only.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7554"/>
          <seriesInfo name="DOI" value="10.17487/RFC7554"/>
        </reference>
        <reference anchor="RFC8180">
          <front>
            <title>Minimal IPv6 over the TSCH Mode of IEEE 802.15.4e (6TiSCH) Configuration</title>
            <author fullname="X. Vilajosana" initials="X." role="editor" surname="Vilajosana"/>
            <author fullname="K. Pister" initials="K." surname="Pister"/>
            <author fullname="T. Watteyne" initials="T." surname="Watteyne"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>This document describes a minimal mode of operation for an IPv6 over the TSCH mode of IEEE 802.15.4e (6TiSCH) network. This minimal mode of operation specifies the baseline set of protocols that need to be supported and the recommended configurations and modes of operation sufficient to enable a 6TiSCH functional network. 6TiSCH provides IPv6 connectivity over a Time-Slotted Channel Hopping (TSCH) mesh composed of IEEE Std 802.15.4 TSCH links. This minimal mode uses a collection of protocols with the respective configurations, including the IPv6 Low-Power Wireless Personal Area Network (6LoWPAN) framework, enabling interoperable IPv6 connectivity over IEEE Std 802.15.4 TSCH. This minimal configuration provides the necessary bandwidth for network and security bootstrapping and defines the proper link between the IETF protocols that interface to IEEE Std 802.15.4 TSCH. This minimal mode of operation should be implemented by all 6TiSCH-compliant devices.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="210"/>
          <seriesInfo name="RFC" value="8180"/>
          <seriesInfo name="DOI" value="10.17487/RFC8180"/>
        </reference>
        <reference anchor="RFC9031">
          <front>
            <title>Constrained Join Protocol (CoJP) for 6TiSCH</title>
            <author fullname="M. Vučinić" initials="M." role="editor" surname="Vučinić"/>
            <author fullname="J. Simon" initials="J." surname="Simon"/>
            <author fullname="K. Pister" initials="K." surname="Pister"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes the minimal framework required for a new device, called a "pledge", to securely join a 6TiSCH (IPv6 over the Time-Slotted Channel Hopping mode of IEEE 802.15.4) network. The framework requires that the pledge and the JRC (Join Registrar/Coordinator, a central entity), share a symmetric key. How this key is provisioned is out of scope of this document. Through a single CoAP (Constrained Application Protocol) request-response exchange secured by OSCORE (Object Security for Constrained RESTful Environments), the pledge requests admission into the network, and the JRC configures it with link-layer keying material and other parameters. The JRC may at any time update the parameters through another request-response exchange secured by OSCORE. This specification defines the Constrained Join Protocol and its CBOR (Concise Binary Object Representation) data structures, and it describes how to configure the rest of the 6TiSCH communication stack for this join process to occur in a secure manner. Additional security mechanisms may be added on top of this minimal framework.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9031"/>
          <seriesInfo name="DOI" value="10.17487/RFC9031"/>
        </reference>
        <reference anchor="RFC9200">
          <front>
            <title>Authentication and Authorization for Constrained Environments Using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This specification defines a framework for authentication and authorization in Internet of Things (IoT) environments called ACE-OAuth. The framework is based on a set of building blocks including OAuth 2.0 and the Constrained Application Protocol (CoAP), thus transforming a well-known and widely used authorization solution into a form suitable for IoT devices. Existing specifications are used where possible, but extensions are added and profiles are defined to better serve the IoT use cases.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9200"/>
          <seriesInfo name="DOI" value="10.17487/RFC9200"/>
        </reference>
        <reference anchor="RFC9203">
          <front>
            <title>The Object Security for Constrained RESTful Environments (OSCORE) Profile of the Authentication and Authorization for Constrained Environments (ACE) Framework</title>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="M. Gunnarsson" initials="M." surname="Gunnarsson"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document specifies a profile for the Authentication and Authorization for Constrained Environments (ACE) framework. It utilizes Object Security for Constrained RESTful Environments (OSCORE) to provide communication security and proof-of-possession for a key owned by the client and bound to an OAuth 2.0 access token.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9203"/>
          <seriesInfo name="DOI" value="10.17487/RFC9203"/>
        </reference>
        <reference anchor="RFC9176">
          <front>
            <title>Constrained RESTful Environments (CoRE) Resource Directory</title>
            <author fullname="C. Amsüss" initials="C." role="editor" surname="Amsüss"/>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="M. Koster" initials="M." surname="Koster"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. van der Stok" initials="P." surname="van der Stok"/>
            <date month="April" year="2022"/>
            <abstract>
              <t>In many Internet of Things (IoT) applications, direct discovery of resources is not practical due to sleeping nodes or networks where multicast traffic is inefficient. These problems can be solved by employing an entity called a Resource Directory (RD), which contains information about resources held on other servers, allowing lookups to be performed for those resources. The input to an RD is composed of links, and the output is composed of links constructed from the information stored in the RD. This document specifies the web interfaces that an RD supports for web servers to discover the RD and to register, maintain, look up, and remove information on resources. Furthermore, new target attributes useful in conjunction with an RD are defined.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9176"/>
          <seriesInfo name="DOI" value="10.17487/RFC9176"/>
        </reference>
        <reference anchor="RFC8615">
          <front>
            <title>Well-Known Uniform Resource Identifiers (URIs)</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="May" year="2019"/>
            <abstract>
              <t>This memo defines a path prefix for "well-known locations", "/.well-known/", in selected Uniform Resource Identifier (URI) schemes.</t>
              <t>In doing so, it obsoletes RFC 5785 and updates the URI schemes defined in RFC 7230 to reserve that space. It also updates RFC 7595 to track URI schemes that support well-known URIs in their registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8615"/>
          <seriesInfo name="DOI" value="10.17487/RFC8615"/>
        </reference>
        <reference anchor="RFC8724">
          <front>
            <title>SCHC: Generic Framework for Static Context Header Compression and Fragmentation</title>
            <author fullname="A. Minaburo" initials="A." surname="Minaburo"/>
            <author fullname="L. Toutain" initials="L." surname="Toutain"/>
            <author fullname="C. Gomez" initials="C." surname="Gomez"/>
            <author fullname="D. Barthel" initials="D." surname="Barthel"/>
            <author fullname="JC. Zuniga" initials="JC." surname="Zuniga"/>
            <date month="April" year="2020"/>
            <abstract>
              <t>This document defines the Static Context Header Compression and fragmentation (SCHC) framework, which provides both a header compression mechanism and an optional fragmentation mechanism. SCHC has been designed with Low-Power Wide Area Networks (LPWANs) in mind.</t>
              <t>SCHC compression is based on a common static context stored both in the LPWAN device and in the network infrastructure side. This document defines a generic header compression mechanism and its application to compress IPv6/UDP headers.</t>
              <t>This document also specifies an optional fragmentation and reassembly mechanism. It can be used to support the IPv6 MTU requirement over the LPWAN technologies. Fragmentation is needed for IPv6 datagrams that, after SCHC compression or when such compression was not possible, still exceed the Layer 2 maximum payload size.</t>
              <t>The SCHC header compression and fragmentation mechanisms are independent of the specific LPWAN technology over which they are used. This document defines generic functionalities and offers flexibility with regard to parameter settings and mechanism choices. This document standardizes the exchange over the LPWAN between two SCHC entities. Settings and choices specific to a technology or a product are expected to be grouped into profiles, which are specified in other documents. Data models for the context and profiles are out of scope.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8724"/>
          <seriesInfo name="DOI" value="10.17487/RFC8724"/>
        </reference>
        <reference anchor="RFC8824">
          <front>
            <title>Static Context Header Compression (SCHC) for the Constrained Application Protocol (CoAP)</title>
            <author fullname="A. Minaburo" initials="A." surname="Minaburo"/>
            <author fullname="L. Toutain" initials="L." surname="Toutain"/>
            <author fullname="R. Andreasen" initials="R." surname="Andreasen"/>
            <date month="June" year="2021"/>
            <abstract>
              <t>This document defines how to compress Constrained Application Protocol (CoAP) headers using the Static Context Header Compression and fragmentation (SCHC) framework. SCHC defines a header compression mechanism adapted for Constrained Devices. SCHC uses a static description of the header to reduce the header's redundancy and size. While RFC 8724 describes the SCHC compression and fragmentation framework, and its application for IPv6/UDP headers, this document applies SCHC to CoAP headers. The CoAP header structure differs from IPv6 and UDP, since CoAP uses a flexible header with a variable number of options, themselves of variable length. The CoAP message format is asymmetric: the request messages have a header format different from the format in the response messages. This specification gives guidance on applying SCHC to flexible headers and how to leverage the asymmetry for more efficient compression Rules.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8824"/>
          <seriesInfo name="DOI" value="10.17487/RFC8824"/>
        </reference>
        <reference anchor="RFC7967">
          <front>
            <title>Constrained Application Protocol (CoAP) Option for No Server Response</title>
            <author fullname="A. Bhattacharyya" initials="A." surname="Bhattacharyya"/>
            <author fullname="S. Bandyopadhyay" initials="S." surname="Bandyopadhyay"/>
            <author fullname="A. Pal" initials="A." surname="Pal"/>
            <author fullname="T. Bose" initials="T." surname="Bose"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>There can be machine-to-machine (M2M) scenarios where server responses to client requests are redundant. This kind of open-loop exchange (with no response path from the server to the client) may be desired to minimize resource consumption in constrained systems while updating many resources simultaneously or performing high-frequency updates. CoAP already provides Non-confirmable (NON) messages that are not acknowledged by the recipient. However, the request/response semantics still require the server to respond with a status code indicating "the result of the attempt to understand and satisfy the request", per RFC 7252.</t>
              <t>This specification introduces a CoAP option called 'No-Response'. Using this option, the client can explicitly express to the server its disinterest in all responses against the particular request. This option also provides granular control to enable expression of disinterest to a particular response class or a combination of response classes. The server MAY decide to suppress the response by not transmitting it back to the client according to the value of the No-Response option in the request. This option may be effective for both unicast and multicast requests. This document also discusses a few examples of applications that benefit from this option.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7967"/>
          <seriesInfo name="DOI" value="10.17487/RFC7967"/>
        </reference>
        <reference anchor="RFC4086">
          <front>
            <title>Randomness Requirements for Security</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="J. Schiller" initials="J." surname="Schiller"/>
            <author fullname="S. Crocker" initials="S." surname="Crocker"/>
            <date month="June" year="2005"/>
            <abstract>
              <t>Security systems are built on strong cryptographic algorithms that foil pattern analysis attempts. However, the security of these systems is dependent on generating secret quantities for passwords, cryptographic keys, and similar quantities. The use of pseudo-random processes to generate secret quantities can result in pseudo-security. A sophisticated attacker may find it easier to reproduce the environment that produced the secret quantities and to search the resulting small set of possibilities than to locate the quantities in the whole of the potential number space.</t>
              <t>Choosing random quantities to foil a resourceful and motivated adversary is surprisingly difficult. This document points out many pitfalls in using poor entropy sources or traditional pseudo-random number generation techniques for generating such quantities. It recommends the use of truly random hardware techniques and shows that the existing hardware on many systems can be used for this purpose. It provides suggestions to ameliorate the problem when a hardware solution is not available, and it gives examples of how large such quantities need to be for some applications. 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="106"/>
          <seriesInfo name="RFC" value="4086"/>
          <seriesInfo name="DOI" value="10.17487/RFC4086"/>
        </reference>
        <reference anchor="I-D.irtf-cfrg-aead-limits">
          <front>
            <title>Usage Limits on AEAD Algorithms</title>
            <author fullname="Felix Günther" initials="F." surname="Günther">
              <organization>IBM Research Europe - 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="9" month="October" year="2024"/>
            <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-09"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-key-limits">
          <front>
            <title>Key Usage Limits for OSCORE</title>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t>   Object Security for Constrained RESTful Environments (OSCORE) uses
   AEAD algorithms to ensure confidentiality and integrity of exchanged
   messages.  Due to known issues allowing forgery attacks against AEAD
   algorithms, limits should be followed on the number of times a
   specific key is used for encryption or decryption.  Among other
   reasons, approaching key usage limits requires updating the OSCORE
   keying material before communications can securely continue.  This
   document defines how two OSCORE peers can follow these key usage
   limits and what steps they should take to preserve the security of
   their communications.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-key-limits-03"/>
        </reference>
        <reference anchor="I-D.ietf-ace-edhoc-oscore-profile">
          <front>
            <title>Ephemeral Diffie-Hellman Over COSE (EDHOC) and Object Security for Constrained Environments (OSCORE) Profile for Authentication and Authorization for Constrained Environments (ACE)</title>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson</organization>
            </author>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE</organization>
            </author>
            <date day="21" month="October" year="2024"/>
            <abstract>
              <t>   This document specifies a profile for the Authentication and
   Authorization for Constrained Environments (ACE) framework.  It
   utilizes Ephemeral Diffie-Hellman Over COSE (EDHOC) for achieving
   mutual authentication between an ACE-OAuth Client and Resource
   Server, and it binds an authentication credential of the Client to an
   ACE-OAuth access token.  EDHOC also establishes an Object Security
   for Constrained RESTful Environments (OSCORE) Security Context, which
   is used to secure communications when accessing protected resources
   according to the authorization information indicated in the access
   token.  This profile can be used to delegate management of
   authorization information from a resource-constrained server to a
   trusted host with less severe limitations regarding processing power
   and memory.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-edhoc-oscore-profile-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="Symmetric-Security" target="https://eprint.iacr.org/2024/220">
          <front>
            <title>Security of Symmetric Ratchets and Key Chains - Implications for Protocols like TLS 1.3, Signal, and PQ3</title>
            <author fullname="John Preuß Mattsson">
              <organization>Ericsson Research</organization>
            </author>
            <date year="2024" month="February"/>
          </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>
    <?line 1243?>

<section anchor="ssec-derive-ctx-client-init-requests-only">
      <name>Forward Message Flow using two CoAP Requests</name>
      <t>This section presents an example of KUDOS run in the forward message flow, with the client acting as KUDOS initiator, and both KUDOS messages being CoAP requests.</t>
      <t>The example uses the same notation 'Comb(a,b)' used in <xref target="ssec-derive-ctx-client-init"/>.</t>
      <figure anchor="fig-message-exchange-client-init-requests-only">
        <name>Example of the KUDOS forward message flow where both KUDOS messages are requests.</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1216" width="576" viewBox="0 0 576 1216" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 200,64 L 200,768" fill="none" stroke="black"/>
              <path d="M 200,848 L 200,1200" fill="none" stroke="black"/>
              <path d="M 384,64 L 384,768" fill="none" stroke="black"/>
              <path d="M 384,848 L 384,1200" fill="none" stroke="black"/>
              <path d="M 200,208 L 376,208" fill="none" stroke="black"/>
              <path d="M 208,544 L 384,544" fill="none" stroke="black"/>
              <path d="M 200,880 L 376,880" fill="none" stroke="black"/>
              <path d="M 208,1056 L 384,1056" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="384,880 372,874.4 372,885.6" fill="black" transform="rotate(0,376,880)"/>
              <polygon class="arrowhead" points="384,208 372,202.4 372,213.6" fill="black" transform="rotate(0,376,208)"/>
              <polygon class="arrowhead" points="216,1056 204,1050.4 204,1061.6" fill="black" transform="rotate(180,208,1056)"/>
              <polygon class="arrowhead" points="216,544 204,538.4 204,549.6" fill="black" transform="rotate(180,208,544)"/>
              <g class="text">
                <text x="200" y="36">Client/Server</text>
                <text x="384" y="36">Client/Server</text>
                <text x="200" y="52">(initiator)</text>
                <text x="384" y="52">(responder)</text>
                <text x="36" y="84">Generate</text>
                <text x="84" y="84">N1</text>
                <text x="24" y="116">CTX_1</text>
                <text x="56" y="116">=</text>
                <text x="108" y="116">updateCtx(</text>
                <text x="80" y="132">X1,</text>
                <text x="80" y="148">N1,</text>
                <text x="96" y="164">CTX_OLD</text>
                <text x="136" y="164">)</text>
                <text x="280" y="196">Request</text>
                <text x="324" y="196">#1</text>
                <text x="32" y="212">Protect</text>
                <text x="84" y="212">with</text>
                <text x="128" y="212">CTX_1</text>
                <text x="468" y="212">/.well-known/kudos</text>
                <text x="236" y="228">Token:</text>
                <text x="284" y="228">0x4a</text>
                <text x="236" y="244">OSCORE</text>
                <text x="272" y="244">{</text>
                <text x="232" y="260">...</text>
                <text x="248" y="276">Partial</text>
                <text x="296" y="276">IV:</text>
                <text x="320" y="276">0</text>
                <text x="232" y="292">...</text>
                <text x="224" y="308">d</text>
                <text x="256" y="308">flag:</text>
                <text x="288" y="308">1</text>
                <text x="416" y="308">CTX_1</text>
                <text x="448" y="308">=</text>
                <text x="500" y="308">updateCtx(</text>
                <text x="228" y="324">x:</text>
                <text x="252" y="324">X1</text>
                <text x="472" y="324">X1,</text>
                <text x="244" y="340">nonce:</text>
                <text x="284" y="340">N1</text>
                <text x="472" y="340">N1,</text>
                <text x="232" y="356">...</text>
                <text x="488" y="356">CTX_OLD</text>
                <text x="528" y="356">)</text>
                <text x="216" y="372">}</text>
                <text x="248" y="388">Encrypted</text>
                <text x="320" y="388">Payload</text>
                <text x="360" y="388">{</text>
                <text x="420" y="388">Verify</text>
                <text x="468" y="388">with</text>
                <text x="512" y="388">CTX_1</text>
                <text x="232" y="404">...</text>
                <text x="216" y="420">}</text>
                <text x="428" y="420">Generate</text>
                <text x="476" y="420">N2</text>
                <text x="424" y="452">CTX_NEW</text>
                <text x="464" y="452">=</text>
                <text x="516" y="452">updateCtx(</text>
                <text x="524" y="468">Comb(X1,X2),</text>
                <text x="524" y="484">Comb(N1,N2),</text>
                <text x="504" y="500">CTX_OLD</text>
                <text x="544" y="500">)</text>
                <text x="280" y="532">Request</text>
                <text x="324" y="532">#2</text>
                <text x="116" y="548">/.well-known/kudos</text>
                <text x="424" y="548">Protect</text>
                <text x="476" y="548">with</text>
                <text x="528" y="548">CTX_NEW</text>
                <text x="236" y="564">Token:</text>
                <text x="284" y="564">0x7c</text>
                <text x="236" y="580">OSCORE</text>
                <text x="272" y="580">{</text>
                <text x="232" y="596">...</text>
                <text x="32" y="612">CTX_NEW</text>
                <text x="72" y="612">=</text>
                <text x="124" y="612">updateCtx(</text>
                <text x="248" y="612">Partial</text>
                <text x="296" y="612">IV:</text>
                <text x="320" y="612">0</text>
                <text x="132" y="628">Comb(X1,X2),</text>
                <text x="232" y="628">...</text>
                <text x="132" y="644">Comb(N1,N2),</text>
                <text x="224" y="644">d</text>
                <text x="256" y="644">flag:</text>
                <text x="288" y="644">1</text>
                <text x="112" y="660">CTX_OLD</text>
                <text x="152" y="660">)</text>
                <text x="228" y="660">x:</text>
                <text x="252" y="660">X2</text>
                <text x="244" y="676">nonce:</text>
                <text x="284" y="676">N2</text>
                <text x="28" y="692">Verify</text>
                <text x="76" y="692">with</text>
                <text x="128" y="692">CTX_NEW</text>
                <text x="232" y="692">...</text>
                <text x="216" y="708">}</text>
                <text x="32" y="724">Discard</text>
                <text x="96" y="724">CTX_OLD</text>
                <text x="248" y="724">Encrypted</text>
                <text x="320" y="724">Payload</text>
                <text x="360" y="724">{</text>
                <text x="232" y="740">...</text>
                <text x="216" y="756">}</text>
                <text x="16" y="804">The</text>
                <text x="60" y="804">actual</text>
                <text x="104" y="804">key</text>
                <text x="148" y="804">update</text>
                <text x="208" y="804">process</text>
                <text x="260" y="804">ends</text>
                <text x="304" y="804">here.</text>
                <text x="16" y="820">The</text>
                <text x="48" y="820">two</text>
                <text x="88" y="820">peers</text>
                <text x="128" y="820">can</text>
                <text x="160" y="820">use</text>
                <text x="192" y="820">the</text>
                <text x="224" y="820">new</text>
                <text x="276" y="820">Security</text>
                <text x="344" y="820">Context</text>
                <text x="412" y="820">CTX_NEW.</text>
                <text x="284" y="868">Response</text>
                <text x="332" y="868">#1</text>
                <text x="32" y="884">Protect</text>
                <text x="84" y="884">with</text>
                <text x="136" y="884">CTX_NEW</text>
                <text x="236" y="900">Token:</text>
                <text x="284" y="900">0x7c</text>
                <text x="236" y="916">OSCORE</text>
                <text x="272" y="916">{</text>
                <text x="232" y="932">...</text>
                <text x="216" y="948">}</text>
                <text x="420" y="948">Verify</text>
                <text x="468" y="948">with</text>
                <text x="520" y="948">CTX_NEW</text>
                <text x="248" y="964">Encrypted</text>
                <text x="320" y="964">Payload</text>
                <text x="360" y="964">{</text>
                <text x="232" y="980">...</text>
                <text x="424" y="980">Discard</text>
                <text x="488" y="980">CTX_OLD</text>
                <text x="264" y="996">Application</text>
                <text x="344" y="996">Payload</text>
                <text x="216" y="1012">}</text>
                <text x="284" y="1044">Response</text>
                <text x="332" y="1044">#2</text>
                <text x="424" y="1060">Protect</text>
                <text x="476" y="1060">with</text>
                <text x="528" y="1060">CTX_NEW</text>
                <text x="236" y="1076">Token:</text>
                <text x="284" y="1076">0x4a</text>
                <text x="236" y="1092">OSCORE</text>
                <text x="272" y="1092">{</text>
                <text x="232" y="1108">...</text>
                <text x="28" y="1124">Verify</text>
                <text x="76" y="1124">with</text>
                <text x="128" y="1124">CTX_NEW</text>
                <text x="216" y="1124">}</text>
                <text x="248" y="1140">Encrypted</text>
                <text x="320" y="1140">Payload</text>
                <text x="360" y="1140">{</text>
                <text x="232" y="1156">...</text>
                <text x="264" y="1172">Application</text>
                <text x="344" y="1172">Payload</text>
                <text x="216" y="1188">}</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[
                  Client/Server          Client/Server
                   (initiator)            (responder)
                        |                      |
Generate N1             |                      |
                        |                      |
CTX_1 = updateCtx(      |                      |
        X1,             |                      |
        N1,             |                      |
        CTX_OLD )       |                      |
                        |                      |
                        |      Request #1      |
Protect with CTX_1      +--------------------->| /.well-known/kudos
                        | Token: 0x4a          |
                        | OSCORE {             |
                        |  ...                 |
                        |  Partial IV: 0       |
                        |  ...                 |
                        |  d flag: 1           | CTX_1 = updateCtx(
                        |  x: X1               |         X1,
                        |  nonce: N1           |         N1,
                        |  ...                 |         CTX_OLD )
                        | }                    |
                        | Encrypted Payload {  | Verify with CTX_1
                        |  ...                 |
                        | }                    | Generate N2
                        |                      |
                        |                      | CTX_NEW = updateCtx(
                        |                      |           Comb(X1,X2),
                        |                      |           Comb(N1,N2),
                        |                      |           CTX_OLD )
                        |                      |
                        |      Request #2      |
     /.well-known/kudos |<---------------------+ Protect with CTX_NEW
                        | Token: 0x7c          |
                        | OSCORE {             |
                        |  ...                 |
CTX_NEW = updateCtx(    |  Partial IV: 0       |
          Comb(X1,X2),  |  ...                 |
          Comb(N1,N2),  |  d flag: 1           |
          CTX_OLD )     |  x: X2               |
                        |  nonce: N2           |
Verify with CTX_NEW     |  ...                 |
                        | }                    |
Discard CTX_OLD         | Encrypted Payload {  |
                        |  ...                 |
                        | }                    |
                        |                      |

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

                        |                      |
                        |      Response #1     |
Protect with CTX_NEW    +--------------------->|
                        | Token: 0x7c          |
                        | OSCORE {             |
                        |  ...                 |
                        | }                    | Verify with CTX_NEW
                        | Encrypted Payload {  |
                        |  ...                 | Discard CTX_OLD
                        |  Application Payload |
                        | }                    |
                        |                      |
                        |      Response #2     |
                        |<---------------------+ Protect with CTX_NEW
                        | Token: 0x4a          |
                        | OSCORE {             |
                        |  ...                 |
Verify with CTX_NEW     | }                    |
                        | Encrypted Payload {  |
                        |  ...                 |
                        |  Application Payload |
                        | }                    |
                        |                      |
]]></artwork>
        </artset>
      </figure>
    </section>
    <section anchor="ssec-derive-ctx-client-init-unrelated">
      <name>Forward Message Flow with Response #1 unrelated to Request #1</name>
      <t>This section presents an example of KUDOS run in the forward message flow, with the client acting as KUDOS initiator, and where the second KUDOS message Response #1 is not a response to the first KUDOS message Request #2, but rather an unrelated Observe notification as a response to the non-KUDOS message Request #1</t>
      <t>The example uses the same notation 'Comb(a,b)' used in <xref target="ssec-derive-ctx-client-init"/>.</t>
      <figure anchor="fig-message-exchange-client-init-unrelated-response">
        <name>Example of the KUDOS forward message flow where the second KUDOS message Response #1 is not a response to Request #1.</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1312" width="576" viewBox="0 0 576 1312" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 200,64 L 200,1056" fill="none" stroke="black"/>
              <path d="M 200,1136 L 200,1296" fill="none" stroke="black"/>
              <path d="M 384,64 L 384,1056" fill="none" stroke="black"/>
              <path d="M 384,1136 L 384,1296" fill="none" stroke="black"/>
              <path d="M 200,112 L 376,112" fill="none" stroke="black"/>
              <path d="M 200,448 L 376,448" fill="none" stroke="black"/>
              <path d="M 208,800 L 384,800" fill="none" stroke="black"/>
              <path d="M 208,1152 L 384,1152" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="384,448 372,442.4 372,453.6" fill="black" transform="rotate(0,376,448)"/>
              <polygon class="arrowhead" points="384,112 372,106.4 372,117.6" fill="black" transform="rotate(0,376,112)"/>
              <polygon class="arrowhead" points="216,1152 204,1146.4 204,1157.6" fill="black" transform="rotate(180,208,1152)"/>
              <polygon class="arrowhead" points="216,800 204,794.4 204,805.6" fill="black" transform="rotate(180,208,800)"/>
              <g class="text">
                <text x="196" y="36">Client</text>
                <text x="388" y="36">Server</text>
                <text x="200" y="52">(initiator)</text>
                <text x="384" y="52">(responder)</text>
                <text x="280" y="84">Request</text>
                <text x="324" y="84">#1</text>
                <text x="292" y="100">(Registration)</text>
                <text x="32" y="116">Protect</text>
                <text x="84" y="116">with</text>
                <text x="136" y="116">CTX_OLD</text>
                <text x="412" y="116">/obs</text>
                <text x="236" y="132">Token:</text>
                <text x="284" y="132">0x4a</text>
                <text x="244" y="148">Observe:</text>
                <text x="288" y="148">0</text>
                <text x="236" y="164">OSCORE</text>
                <text x="272" y="164">{</text>
                <text x="232" y="180">...</text>
                <text x="248" y="196">Partial</text>
                <text x="296" y="196">IV:</text>
                <text x="332" y="196">4324</text>
                <text x="232" y="212">...</text>
                <text x="216" y="228">}</text>
                <text x="248" y="244">Encrypted</text>
                <text x="320" y="244">Payload</text>
                <text x="360" y="244">{</text>
                <text x="420" y="244">Verify</text>
                <text x="468" y="244">with</text>
                <text x="520" y="244">CTX_OLD</text>
                <text x="252" y="260">Observe:</text>
                <text x="296" y="260">-</text>
                <text x="232" y="276">...</text>
                <text x="216" y="292">}</text>
                <text x="36" y="324">Generate</text>
                <text x="84" y="324">N1</text>
                <text x="24" y="356">CTX_1</text>
                <text x="56" y="356">=</text>
                <text x="108" y="356">updateCtx(</text>
                <text x="80" y="372">X1,</text>
                <text x="80" y="388">N1,</text>
                <text x="96" y="404">CTX_OLD</text>
                <text x="136" y="404">)</text>
                <text x="280" y="436">Request</text>
                <text x="324" y="436">#2</text>
                <text x="32" y="452">Protect</text>
                <text x="84" y="452">with</text>
                <text x="128" y="452">CTX_1</text>
                <text x="468" y="452">/.well-known/kudos</text>
                <text x="236" y="468">Token:</text>
                <text x="284" y="468">0x7c</text>
                <text x="236" y="484">OSCORE</text>
                <text x="272" y="484">{</text>
                <text x="232" y="500">...</text>
                <text x="248" y="516">Partial</text>
                <text x="296" y="516">IV:</text>
                <text x="320" y="516">0</text>
                <text x="232" y="532">...</text>
                <text x="224" y="548">d</text>
                <text x="256" y="548">flag:</text>
                <text x="288" y="548">1</text>
                <text x="416" y="548">CTX_1</text>
                <text x="448" y="548">=</text>
                <text x="500" y="548">updateCtx(</text>
                <text x="228" y="564">x:</text>
                <text x="252" y="564">X1</text>
                <text x="472" y="564">X1,</text>
                <text x="244" y="580">nonce:</text>
                <text x="284" y="580">N1</text>
                <text x="472" y="580">N1,</text>
                <text x="232" y="596">...</text>
                <text x="488" y="596">CTX_OLD</text>
                <text x="528" y="596">)</text>
                <text x="216" y="612">}</text>
                <text x="248" y="628">Encrypted</text>
                <text x="320" y="628">Payload</text>
                <text x="360" y="628">{</text>
                <text x="420" y="628">Verify</text>
                <text x="468" y="628">with</text>
                <text x="512" y="628">CTX_1</text>
                <text x="232" y="644">...</text>
                <text x="216" y="660">}</text>
                <text x="428" y="660">Generate</text>
                <text x="476" y="660">N2</text>
                <text x="424" y="692">CTX_NEW</text>
                <text x="464" y="692">=</text>
                <text x="516" y="692">updateCtx(</text>
                <text x="524" y="708">Comb(X1,X2),</text>
                <text x="524" y="724">Comb(N1,N2),</text>
                <text x="504" y="740">CTX_OLD</text>
                <text x="544" y="740">)</text>
                <text x="284" y="772">Response</text>
                <text x="332" y="772">#1</text>
                <text x="292" y="788">(Notification)</text>
                <text x="424" y="804">Protect</text>
                <text x="476" y="804">with</text>
                <text x="528" y="804">CTX_NEW</text>
                <text x="236" y="820">Token:</text>
                <text x="284" y="820">0x4a</text>
                <text x="244" y="836">Observe:</text>
                <text x="288" y="836">1</text>
                <text x="236" y="852">OSCORE</text>
                <text x="272" y="852">{</text>
                <text x="232" y="868">...</text>
                <text x="32" y="884">CTX_NEW</text>
                <text x="72" y="884">=</text>
                <text x="124" y="884">updateCtx(</text>
                <text x="248" y="884">Partial</text>
                <text x="296" y="884">IV:</text>
                <text x="320" y="884">0</text>
                <text x="132" y="900">Comb(X1,X2),</text>
                <text x="232" y="900">...</text>
                <text x="132" y="916">Comb(N1,N2),</text>
                <text x="224" y="916">d</text>
                <text x="256" y="916">flag:</text>
                <text x="288" y="916">1</text>
                <text x="112" y="932">CTX_OLD</text>
                <text x="152" y="932">)</text>
                <text x="228" y="932">x:</text>
                <text x="252" y="932">X2</text>
                <text x="244" y="948">nonce:</text>
                <text x="284" y="948">N2</text>
                <text x="28" y="964">Verify</text>
                <text x="76" y="964">with</text>
                <text x="128" y="964">CTX_NEW</text>
                <text x="232" y="964">...</text>
                <text x="216" y="980">}</text>
                <text x="32" y="996">Discard</text>
                <text x="96" y="996">CTX_OLD</text>
                <text x="248" y="996">Encrypted</text>
                <text x="320" y="996">Payload</text>
                <text x="360" y="996">{</text>
                <text x="244" y="1012">Observe:</text>
                <text x="288" y="1012">-</text>
                <text x="232" y="1028">...</text>
                <text x="216" y="1044">}</text>
                <text x="16" y="1092">The</text>
                <text x="60" y="1092">actual</text>
                <text x="104" y="1092">key</text>
                <text x="148" y="1092">update</text>
                <text x="208" y="1092">process</text>
                <text x="260" y="1092">ends</text>
                <text x="304" y="1092">here.</text>
                <text x="16" y="1108">The</text>
                <text x="48" y="1108">two</text>
                <text x="88" y="1108">peers</text>
                <text x="128" y="1108">can</text>
                <text x="160" y="1108">use</text>
                <text x="192" y="1108">the</text>
                <text x="224" y="1108">new</text>
                <text x="276" y="1108">Security</text>
                <text x="344" y="1108">Context</text>
                <text x="412" y="1108">CTX_NEW.</text>
                <text x="284" y="1140">Response</text>
                <text x="332" y="1140">#2</text>
                <text x="424" y="1156">Protect</text>
                <text x="476" y="1156">with</text>
                <text x="528" y="1156">CTX_NEW</text>
                <text x="236" y="1172">Token:</text>
                <text x="284" y="1172">0x7c</text>
                <text x="236" y="1188">OSCORE</text>
                <text x="272" y="1188">{</text>
                <text x="232" y="1204">...</text>
                <text x="28" y="1220">Verify</text>
                <text x="76" y="1220">with</text>
                <text x="128" y="1220">CTX_NEW</text>
                <text x="216" y="1220">}</text>
                <text x="248" y="1236">Encrypted</text>
                <text x="320" y="1236">Payload</text>
                <text x="360" y="1236">{</text>
                <text x="232" y="1252">...</text>
                <text x="264" y="1268">Application</text>
                <text x="344" y="1268">Payload</text>
                <text x="216" y="1284">}</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[
                     Client                  Server
                   (initiator)            (responder)
                        |                      |
                        |      Request #1      |
                        |    (Registration)    |
Protect with CTX_OLD    +--------------------->| /obs
                        | Token: 0x4a          |
                        | Observe: 0           |
                        | OSCORE {             |
                        |  ...                 |
                        |  Partial IV: 4324    |
                        |  ...                 |
                        | }                    |
                        | Encrypted Payload {  | Verify with CTX_OLD
                        |  Observe: -          |
                        |  ...                 |
                        | }                    |
                        |                      |
Generate N1             |                      |
                        |                      |
CTX_1 = updateCtx(      |                      |
        X1,             |                      |
        N1,             |                      |
        CTX_OLD )       |                      |
                        |                      |
                        |      Request #2      |
Protect with CTX_1      +--------------------->| /.well-known/kudos
                        | Token: 0x7c          |
                        | OSCORE {             |
                        |  ...                 |
                        |  Partial IV: 0       |
                        |  ...                 |
                        |  d flag: 1           | CTX_1 = updateCtx(
                        |  x: X1               |         X1,
                        |  nonce: N1           |         N1,
                        |  ...                 |         CTX_OLD )
                        | }                    |
                        | Encrypted Payload {  | Verify with CTX_1
                        |  ...                 |
                        | }                    | Generate N2
                        |                      |
                        |                      | CTX_NEW = updateCtx(
                        |                      |           Comb(X1,X2),
                        |                      |           Comb(N1,N2),
                        |                      |           CTX_OLD )
                        |                      |
                        |      Response #1     |
                        |    (Notification)    |
                        |<---------------------+ Protect with CTX_NEW
                        | Token: 0x4a          |
                        | Observe: 1           |
                        | OSCORE {             |
                        |  ...                 |
CTX_NEW = updateCtx(    |  Partial IV: 0       |
          Comb(X1,X2),  |  ...                 |
          Comb(N1,N2),  |  d flag: 1           |
          CTX_OLD )     |  x: X2               |
                        |  nonce: N2           |
Verify with CTX_NEW     |  ...                 |
                        | }                    |
Discard CTX_OLD         | Encrypted Payload {  |
                        | Observe: -           |
                        |  ...                 |
                        | }                    |
                        |                      |

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

                        |      Response #2     |
                        |<---------------------+ Protect with CTX_NEW
                        | Token: 0x7c          |
                        | OSCORE {             |
                        |  ...                 |
Verify with CTX_NEW     | }                    |
                        | Encrypted Payload {  |
                        |  ...                 |
                        |  Application Payload |
                        | }                    |
                        |                      |
]]></artwork>
        </artset>
      </figure>
    </section>
    <section anchor="ssec-derive-ctx-client-init-normal-resource">
      <name>Forward Message Flow Targeting a non-KUDOS Resource at Server</name>
      <t>This section presents an example of KUDOS run in the forward message flow, with the client acting as KUDOS initiator, and with the KUDOS message Request #1 targeting a non-KUDOS resource at the Uri-Path "/temp". The server application has freshness requirements on the requests targeting the resource at "/temp".</t>
      <t>Note the presence of an application payload in the KUDOS message Request #1 and in the non-KUDOS message Request #2, both of which are composed as PUT requests. That request method is part of the encrypted payload, since it is protected by OSCORE.</t>
      <t>Also note the fact that the KUDOS message Response #1 is composed as a 4.01 (Unauthorized) response, while the non-KUDOS message Response #2 is composed as a 2.04 (Changed) response. Those response codes are part of the encrypted payload, since they are protected by OSCORE.</t>
      <t>The example uses the same notation 'Comb(a,b)' used in <xref target="ssec-derive-ctx-client-init"/>.</t>
      <figure anchor="fig-message-exchange-client-init-normal-resource">
        <name>Example of the KUDOS forward message flow where the KUDOS message Request #1 targets a non-KUDOS resource.</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1248" width="576" viewBox="0 0 576 1248" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 200,64 L 200,800" fill="none" stroke="black"/>
              <path d="M 200,880 L 200,1232" fill="none" stroke="black"/>
              <path d="M 384,64 L 384,800" fill="none" stroke="black"/>
              <path d="M 384,880 L 384,1232" fill="none" stroke="black"/>
              <path d="M 200,208 L 376,208" fill="none" stroke="black"/>
              <path d="M 208,560 L 384,560" fill="none" stroke="black"/>
              <path d="M 200,912 L 376,912" fill="none" stroke="black"/>
              <path d="M 208,1088 L 384,1088" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="384,912 372,906.4 372,917.6" fill="black" transform="rotate(0,376,912)"/>
              <polygon class="arrowhead" points="384,208 372,202.4 372,213.6" fill="black" transform="rotate(0,376,208)"/>
              <polygon class="arrowhead" points="216,1088 204,1082.4 204,1093.6" fill="black" transform="rotate(180,208,1088)"/>
              <polygon class="arrowhead" points="216,560 204,554.4 204,565.6" fill="black" transform="rotate(180,208,560)"/>
              <g class="text">
                <text x="196" y="36">Client</text>
                <text x="388" y="36">Server</text>
                <text x="200" y="52">(initiator)</text>
                <text x="384" y="52">(responder)</text>
                <text x="36" y="84">Generate</text>
                <text x="84" y="84">N1</text>
                <text x="24" y="116">CTX_1</text>
                <text x="56" y="116">=</text>
                <text x="108" y="116">updateCtx(</text>
                <text x="80" y="132">X1,</text>
                <text x="80" y="148">N1,</text>
                <text x="96" y="164">CTX_OLD</text>
                <text x="136" y="164">)</text>
                <text x="280" y="196">Request</text>
                <text x="324" y="196">#1</text>
                <text x="32" y="212">Protect</text>
                <text x="84" y="212">with</text>
                <text x="128" y="212">CTX_1</text>
                <text x="416" y="212">/temp</text>
                <text x="236" y="228">OSCORE</text>
                <text x="272" y="228">{</text>
                <text x="232" y="244">...</text>
                <text x="248" y="260">Partial</text>
                <text x="296" y="260">IV:</text>
                <text x="320" y="260">0</text>
                <text x="232" y="276">...</text>
                <text x="224" y="292">d</text>
                <text x="256" y="292">flag:</text>
                <text x="288" y="292">1</text>
                <text x="416" y="292">CTX_1</text>
                <text x="448" y="292">=</text>
                <text x="500" y="292">updateCtx(</text>
                <text x="228" y="308">x:</text>
                <text x="252" y="308">X1</text>
                <text x="472" y="308">X1,</text>
                <text x="244" y="324">nonce:</text>
                <text x="284" y="324">N1</text>
                <text x="472" y="324">N1,</text>
                <text x="232" y="340">...</text>
                <text x="488" y="340">CTX_OLD</text>
                <text x="528" y="340">)</text>
                <text x="216" y="356">}</text>
                <text x="248" y="372">Encrypted</text>
                <text x="320" y="372">Payload</text>
                <text x="360" y="372">{</text>
                <text x="420" y="372">Verify</text>
                <text x="468" y="372">with</text>
                <text x="512" y="372">CTX_1</text>
                <text x="236" y="388">0.03</text>
                <text x="280" y="388">(PUT)</text>
                <text x="232" y="404">...</text>
                <text x="264" y="420">Application</text>
                <text x="344" y="420">Payload</text>
                <text x="216" y="436">}</text>
                <text x="428" y="436">Generate</text>
                <text x="476" y="436">N2</text>
                <text x="424" y="468">CTX_NEW</text>
                <text x="464" y="468">=</text>
                <text x="516" y="468">updateCtx(</text>
                <text x="524" y="484">Comb(X1,X2),</text>
                <text x="524" y="500">Comb(N1,N2),</text>
                <text x="504" y="516">CTX_OLD</text>
                <text x="544" y="516">)</text>
                <text x="284" y="548">Response</text>
                <text x="332" y="548">#1</text>
                <text x="424" y="564">Protect</text>
                <text x="476" y="564">with</text>
                <text x="528" y="564">CTX_NEW</text>
                <text x="236" y="580">OSCORE</text>
                <text x="272" y="580">{</text>
                <text x="232" y="596">...</text>
                <text x="32" y="612">CTX_NEW</text>
                <text x="72" y="612">=</text>
                <text x="124" y="612">updateCtx(</text>
                <text x="248" y="612">Partial</text>
                <text x="296" y="612">IV:</text>
                <text x="320" y="612">0</text>
                <text x="132" y="628">Comb(X1,X2),</text>
                <text x="232" y="628">...</text>
                <text x="132" y="644">Comb(N1,N2),</text>
                <text x="224" y="644">d</text>
                <text x="256" y="644">flag:</text>
                <text x="288" y="644">1</text>
                <text x="112" y="660">CTX_OLD</text>
                <text x="152" y="660">)</text>
                <text x="228" y="660">x:</text>
                <text x="252" y="660">X2</text>
                <text x="244" y="676">nonce:</text>
                <text x="284" y="676">N2</text>
                <text x="28" y="692">Verify</text>
                <text x="76" y="692">with</text>
                <text x="128" y="692">CTX_NEW</text>
                <text x="232" y="692">...</text>
                <text x="216" y="708">}</text>
                <text x="32" y="724">Discard</text>
                <text x="96" y="724">CTX_OLD</text>
                <text x="248" y="724">Encrypted</text>
                <text x="320" y="724">Payload</text>
                <text x="360" y="724">{</text>
                <text x="236" y="740">4.01</text>
                <text x="316" y="740">(Unauthorized)</text>
                <text x="232" y="756">...</text>
                <text x="264" y="772">Application</text>
                <text x="344" y="772">Payload</text>
                <text x="216" y="788">}</text>
                <text x="16" y="836">The</text>
                <text x="60" y="836">actual</text>
                <text x="104" y="836">key</text>
                <text x="148" y="836">update</text>
                <text x="208" y="836">process</text>
                <text x="260" y="836">ends</text>
                <text x="304" y="836">here.</text>
                <text x="16" y="852">The</text>
                <text x="48" y="852">two</text>
                <text x="88" y="852">peers</text>
                <text x="128" y="852">can</text>
                <text x="160" y="852">use</text>
                <text x="192" y="852">the</text>
                <text x="224" y="852">new</text>
                <text x="276" y="852">Security</text>
                <text x="344" y="852">Context</text>
                <text x="412" y="852">CTX_NEW.</text>
                <text x="280" y="900">Request</text>
                <text x="324" y="900">#2</text>
                <text x="32" y="916">Protect</text>
                <text x="84" y="916">with</text>
                <text x="136" y="916">CTX_NEW</text>
                <text x="416" y="916">/temp</text>
                <text x="236" y="932">OSCORE</text>
                <text x="272" y="932">{</text>
                <text x="232" y="948">...</text>
                <text x="216" y="964">}</text>
                <text x="420" y="964">Verify</text>
                <text x="468" y="964">with</text>
                <text x="520" y="964">CTX_NEW</text>
                <text x="248" y="980">Encrypted</text>
                <text x="320" y="980">Payload</text>
                <text x="360" y="980">{</text>
                <text x="236" y="996">0.03</text>
                <text x="280" y="996">(PUT)</text>
                <text x="232" y="1012">...</text>
                <text x="424" y="1012">Discard</text>
                <text x="488" y="1012">CTX_OLD</text>
                <text x="264" y="1028">Application</text>
                <text x="344" y="1028">Payload</text>
                <text x="216" y="1044">}</text>
                <text x="284" y="1076">Response</text>
                <text x="332" y="1076">#2</text>
                <text x="424" y="1092">Protect</text>
                <text x="476" y="1092">with</text>
                <text x="528" y="1092">CTX_NEW</text>
                <text x="236" y="1108">OSCORE</text>
                <text x="272" y="1108">{</text>
                <text x="232" y="1124">...</text>
                <text x="28" y="1140">Verify</text>
                <text x="76" y="1140">with</text>
                <text x="128" y="1140">CTX_NEW</text>
                <text x="216" y="1140">}</text>
                <text x="248" y="1156">Encrypted</text>
                <text x="320" y="1156">Payload</text>
                <text x="360" y="1156">{</text>
                <text x="236" y="1172">2.04</text>
                <text x="296" y="1172">(Changed)</text>
                <text x="232" y="1188">...</text>
                <text x="264" y="1204">Application</text>
                <text x="344" y="1204">Payload</text>
                <text x="216" y="1220">}</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[
                     Client                  Server
                   (initiator)            (responder)
                        |                      |
Generate N1             |                      |
                        |                      |
CTX_1 = updateCtx(      |                      |
        X1,             |                      |
        N1,             |                      |
        CTX_OLD )       |                      |
                        |                      |
                        |      Request #1      |
Protect with CTX_1      +--------------------->| /temp
                        | OSCORE {             |
                        |  ...                 |
                        |  Partial IV: 0       |
                        |  ...                 |
                        |  d flag: 1           | CTX_1 = updateCtx(
                        |  x: X1               |         X1,
                        |  nonce: N1           |         N1,
                        |  ...                 |         CTX_OLD )
                        | }                    |
                        | Encrypted Payload {  | Verify with CTX_1
                        |  0.03 (PUT)          |
                        |  ...                 |
                        |  Application Payload |
                        | }                    | Generate N2
                        |                      |
                        |                      | CTX_NEW = updateCtx(
                        |                      |           Comb(X1,X2),
                        |                      |           Comb(N1,N2),
                        |                      |           CTX_OLD )
                        |                      |
                        |      Response #1     |
                        |<---------------------+ Protect with CTX_NEW
                        | OSCORE {             |
                        |  ...                 |
CTX_NEW = updateCtx(    |  Partial IV: 0       |
          Comb(X1,X2),  |  ...                 |
          Comb(N1,N2),  |  d flag: 1           |
          CTX_OLD )     |  x: X2               |
                        |  nonce: N2           |
Verify with CTX_NEW     |  ...                 |
                        | }                    |
Discard CTX_OLD         | Encrypted Payload {  |
                        |  4.01 (Unauthorized) |
                        |  ...                 |
                        |  Application Payload |
                        | }                    |
                        |                      |

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

                        |                      |
                        |      Request #2      |
Protect with CTX_NEW    +--------------------->| /temp
                        | OSCORE {             |
                        |  ...                 |
                        | }                    | Verify with CTX_NEW
                        | Encrypted Payload {  |
                        |  0.03 (PUT)          |
                        |  ...                 | Discard CTX_OLD
                        |  Application Payload |
                        | }                    |
                        |                      |
                        |      Response #2     |
                        |<---------------------+ Protect with CTX_NEW
                        | OSCORE {             |
                        |  ...                 |
Verify with CTX_NEW     | }                    |
                        | Encrypted Payload {  |
                        |  2.04 (Changed)      |
                        |  ...                 |
                        |  Application Payload |
                        | }                    |
                        |                      |
]]></artwork>
        </artset>
      </figure>
    </section>
    <section anchor="sec-document-updates" removeInRFC="true">
      <name>Document Updates</name>
      <section anchor="sec-08-09">
        <name>Version -08 to -09</name>
        <ul spacing="normal">
          <li>
            <t>Merge text about avoiding in-transit requests during a key update into a single subsection.</t>
          </li>
          <li>
            <t>Improved error handling.</t>
          </li>
          <li>
            <t>Editorial improvements and clarifications.</t>
          </li>
          <li>
            <t>State that the EDHOC EAD item must be used as non-critical.</t>
          </li>
          <li>
            <t>Extended description and updates values for KUDOS communication overhead.</t>
          </li>
          <li>
            <t>Introduce special case when non-CAPABLE devices may operate in FS Mode.</t>
          </li>
          <li>
            <t>Add parameter for signaling KUDOS support when using the ACE OSCORE profile.</t>
          </li>
          <li>
            <t>Enable using the reverse message flow for peers that are only CoAP servers.</t>
          </li>
          <li>
            <t>Further clarifications about achieving key confirmation and deletion of old contexts.</t>
          </li>
          <li>
            <t>Restructure distribution of content about FS and no-FS mode.</t>
          </li>
          <li>
            <t>Warn of consequences of running KUDOS with insufficient margin.</t>
          </li>
          <li>
            <t>Stressed usefulness of core.kudos for safe KUDOS requests without side effects.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-07-08">
        <name>Version -07 to -08</name>
        <ul spacing="normal">
          <li>
            <t>Add note about usage of the CoAP No-Response Option.</t>
          </li>
          <li>
            <t>Avoid problems for two simultaneously started key updates.</t>
          </li>
          <li>
            <t>Set Notification Number to be uninitialized for new OSCORE Security Contexts.</t>
          </li>
          <li>
            <t>Handle corner case for responder that reached its key usage limits.</t>
          </li>
          <li>
            <t>Re-organizing main section about Forward Secrecy mode into subsections.</t>
          </li>
          <li>
            <t>IANA considerations for CoAP Option Numbers Registry to refer to this draft for the OSCORE option.</t>
          </li>
          <li>
            <t>Use AASVG in diagrams.</t>
          </li>
          <li>
            <t>Use actual tables instead of figures.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
          <li>
            <t>Extended security considerations with reference to relevant paper.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-06-07">
        <name>Version -06 to -07</name>
        <ul spacing="normal">
          <li>
            <t>Removed material about the ID update procedure, which has been split out into a separate draft.</t>
          </li>
          <li>
            <t>Allow non-random nonces for CAPABLE devices.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
          <li>
            <t>Permit flexible message flow with KUDOS messages as any request/response.</t>
          </li>
          <li>
            <t>Enable sending KUDOS messages as regular application messages.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-05-06">
        <name>Version -05 to -06</name>
        <ul spacing="normal">
          <li>
            <t>Mandate support for both the forward and reverse message flow.</t>
          </li>
          <li>
            <t>Mention the EDHOC and OSCORE profile of ACE as method for rekeying.</t>
          </li>
          <li>
            <t>Clarify definition of KUDOS (request/response) message.</t>
          </li>
          <li>
            <t>Further extend the OSCORE option to transport N1 in the second KUDOS message as a request.</t>
          </li>
          <li>
            <t>Mandate support for the no-FS mode on CAPABLE devices.</t>
          </li>
          <li>
            <t>Explain when KUDOS fails during selection of mode.</t>
          </li>
          <li>
            <t>Explicitly forbid using old keying material after reboot.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-04-05">
        <name>Version -04 to -05</name>
        <ul spacing="normal">
          <li>
            <t>Note on client retransmissions if KUDOS execution fails in reverse message flow.</t>
          </li>
          <li>
            <t>Specify what information needs to be written to non-volatile memory to handle reboots.</t>
          </li>
          <li>
            <t>Extended recommendations and considerations on minimum size of nonces N1 &amp; N2.</t>
          </li>
          <li>
            <t>Arbitrary maximum size of the Recipient-ID Option.</t>
          </li>
          <li>
            <t>Detailed lifecycle of the OSCORE IDs update procedure.</t>
          </li>
          <li>
            <t>Described examples of OSCORE IDs update procedure.</t>
          </li>
          <li>
            <t>Examples of OSCORE IDs update procedure integrated in KUDOS.</t>
          </li>
          <li>
            <t>Considerations about using SCHC for CoAP with OSCORE.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-03-04">
        <name>Version -03 to -04</name>
        <ul spacing="normal">
          <li>
            <t>Removed content about key usage limits.</t>
          </li>
          <li>
            <t>Use of "forward message flow" and "reverse message flow".</t>
          </li>
          <li>
            <t>Update to RFC 8613 extended to include protection of responses.</t>
          </li>
          <li>
            <t>Include EDHOC_KeyUpdate() in the methods for rekeying.</t>
          </li>
          <li>
            <t>Describe reasons for using the OSCORE ID update procedure.</t>
          </li>
          <li>
            <t>Clarifications on deletion of CTX_OLD and CTX_NEW.</t>
          </li>
          <li>
            <t>Added new section on preventing deadlocks.</t>
          </li>
          <li>
            <t>Clarified that peers can decide to run KUDOS at any point.</t>
          </li>
          <li>
            <t>Defined preservation of observations beyond OSCORE ID updates.</t>
          </li>
          <li>
            <t>Revised discussion section, including also communication overhead.</t>
          </li>
          <li>
            <t>Defined a well-known KUDOS resource and a KUDOS resource type.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-02-03">
        <name>Version -02 to -03</name>
        <ul spacing="normal">
          <li>
            <t>Use of the OSCORE flag bit 0 to signal more flag bits.</t>
          </li>
          <li>
            <t>In UpdateCtx(), open for future key derivation different than HKDF.</t>
          </li>
          <li>
            <t>Simplified updateCtx() to use only Expand(); used to be METHOD 2.</t>
          </li>
          <li>
            <t>Included the Partial IV if the second KUDOS message is a response.</t>
          </li>
          <li>
            <t>Added signaling of support for KUDOS in EDHOC.</t>
          </li>
          <li>
            <t>Clarifications on terminology and reasons for rekeying.</t>
          </li>
          <li>
            <t>Updated IANA considerations.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-01-02">
        <name>Version -01 to -02</name>
        <ul spacing="normal">
          <li>
            <t>Extended terminology.</t>
          </li>
          <li>
            <t>Moved procedure for preserving observations across key updates to main body.</t>
          </li>
          <li>
            <t>Moved procedure to update OSCORE Sender/Recipient IDs to main body.</t>
          </li>
          <li>
            <t>Moved key update without forward secrecy section to main body.</t>
          </li>
          <li>
            <t>Define signaling bits present in the 'x' byte.</t>
          </li>
          <li>
            <t>Modifications and alignment of updateCtx() with EDHOC.</t>
          </li>
          <li>
            <t>Rules for deletion of old EDHOC keys PRK_out and PRK_exporter.</t>
          </li>
          <li>
            <t>Describe CBOR wrapping of involved nonces with examples.</t>
          </li>
          <li>
            <t>Renamed 'id detail' to 'nonce'.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-00-01">
        <name>Version -00 to -01</name>
        <ul spacing="normal">
          <li>
            <t>Recommendation on limits for CCM_8. Details in Appendix.</t>
          </li>
          <li>
            <t>Improved message processing, also covering corner cases.</t>
          </li>
          <li>
            <t>Example of method to estimate and not store 'count_q'.</t>
          </li>
          <li>
            <t>Added procedure to update OSCORE Sender/Recipient IDs.</t>
          </li>
          <li>
            <t>Added method for preserving observations across key updates.</t>
          </li>
          <li>
            <t>Added key update without forward secrecy.</t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank <contact fullname="Christian Amsüss"/>, <contact fullname="Carsten Bormann"/>, <contact fullname="Simon Bouget"/>, <contact fullname="Rafa Marin-Lopez"/>, <contact fullname="John Preuß Mattsson"/>, and <contact fullname="Göran Selander"/> for their feedback and comments.</t>
      <t>The work on this document has been partly supported by the Sweden's Innovation Agency VINNOVA and the Celtic-Next projects CRITISEC and CYPRESS; and by the H2020 projects SIFIS-Home (Grant agreement 952652) and ARCADIAN-IoT (Grant agreement 101020259).</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
Jz9SxrzmLH2qm2PLbYsoosF+TlpHyAvgXuaXWeWRVqEb7tyURSjRf67Z9Exq
57erlVlaYvMMfLhs82V2/e8OfHZMNaJ1aE9cglyPZnUJ++7KQkmMSpOQEXua
f8icKkgUoK5ibyz9w69+F8RzygTIqwgfPQt5gClLJQALXONUdWE7SN5QFcT0
jG+gY19XtDQygM0b06whraujGe8WwU1bGW1q4GSf8TMUZWjzJ+CqmqhSLwUI
o/sx/boZBAfb0yRM+n0Jb/V2tY5Yl8KRVo0vZaRyv3rJFOtupOd6fFJD0JRi
pF4TDs1vy4SrutX6AaskMef1aFHXbVrX6ybPTpvYWEBo0LaVkLe5nkv0tElu
JAlmeeL6IHleXmWU9miqCiJBcQvDasfGsBM6VWqbclmhFueXtGKp35mZKGy6
QWe5tS64XqZaaqPw+CB5nkinaIF+vSoNP+UIbbbnUykzymFdmpjf18n7mO5H
VcjIxOd5EjiAlthg0MwKp/T2MFg946KQFthLZ1M25hDWOtRLnUuo+EIyaMgC
KdIjTOr048DRKygFgsOZyfLJAexclbEW4faWq3E4mUMrNWLluOybqbllBXu1
OAHk8YOHALW8aHN5LeMJMkKaV8YAZHPslXY7RT3WOKwCizpP+0pA1zoyKypI
9iJBpy0hSMT8iVQDWhEx7xYf6oyY9yoUrRcxHytG1IqYN/pSK8HOlCfmGYyT
nbgHEBO+6m74vLbHWVEwY/2Q9K6Y9CUh6U66j/uxjVT/NWKnJVDtnz80anmg
0pcKjXJyAH7+uJgbBmwv/3hFwPbyj1cEbC//+J8rBHfZuX7JANyOPI/lAbiR
PI/l1ymS57E8ADeS5xFNBLhx8H8rsm1oX/hC0a5O5HzwwpcKheuOnF4Z2daK
nF7rBTdyeuULYeT0qheCb275wpeIv/2NJeh0p8/cJFUiGrju/L5uqkQ0nj0c
Z41Uiet96n3cvZ516LRpU+zc7183kn3N1J3l4bu/VujrTWKtox//c0bs/x6d
3cWSupNI/sWisx2tcWl0drxY7g2Cs62fC7XqllfdtZS2Yi2aVfHYNt2/yxm/
u044rlMpW+o3mBpxXtVlmhFtUgssq7c8IG7oNA/4LYTTftH4l+EXjH75MqHY
8QCV//uCaX7xuPGfEubyMyP6etEuS9yskQjY7pQTr13ILx3vs0yMsNXiixhl
bkc6LaXJK+Lf1kjNWBb+5mZnAOX/4b1Gxf1iqRe1f4ecRSyNSnOu4C8Vz9ai
6A6ipw1VI/IIA4YljNGTPgI6JYdsvvRihFLrJAyZw/LIt6+5YHE48w+fECoX
0vmZnM/G2W2ajEUwcflkXAGKJqKNa38dtP9n4/qnp7X8ErfSC89bK2L/V4jO
C246VmhUr6jrKu12kno+Cm+vxmd+o8guN2pDKcHqMDmXh94oTu7eF4uTU9K7
JE5ONh8LlIsRPSqdfuwF77SuRDnxx56k+bT2hsRCi1cp+634OM5TjRlaLbhT
VUZub4M1yql6JzxAzosQSSjSYse/LqbwXKYUGSa0i+Y4hioTN5xWL6J63syI
6QalfgzpUlDfOIa0C/RhlKGpM9UVZUglZn9SqKGJe1gZathSwTpCDS2RXD/U
0Aihtw81lCF+YqihRgT+hIDD9frJiO/2HbeBVLcqkMs3Cw0JYPdjbVsxz+Gr
/qhM50ICsUndC7huFLN4JgQs1SjB1NwnLUXsFmnW4KDcIXYmPM6PjeOUqxyP
B7u81u2msBh0hv/63QRX9HZ1C5ymhVvuP6xlJwBd2UN3R3A1x0L/83lW1C0E
s8GfVl6PO7AdVL4y9YydlpISgRTEJYCQM0s/SIclbGAntZ+1mq1jDLFBk05o
RT3KirTKy4DVci1q+JP1V79dGtVEzuQrTsbx6Qc2p8jSsfZ7aIfbrNmeAlBQ
++j2ubS29BPzi7VLl+gpB4RkgiqGAreBTfFCOQbw5F6A4qwcm3ZV2Okxm9fa
AkaTdPyS4U64ox8L1OOg0QZYFUmJFLv0BFvBmUy+UJ/WSyFM3z3mswUlb9QN
BaxmxL8Zj1tBNxLdEDJQn//VXFS+QXsARdZJ3JM9FFOkuZaIr3px1keAaNow
/U4R+N0h+ZgGvf/vC4DU541vk71BOthX2q6qi9vLSO8pSvoF8NDcj3x+dfA3
LfmqBX27abaJZz6IT0AIALSSpCWaC0UPLs+MwqJ0q6Ye1rHOrEh/JoQlAW2y
AaraotolJhUSk0l13k/herhkBM9snKfnRQmHPDLFyAWHvT0RILCnnIo4nL+X
bL6QjdS6WGk8t2k4qj9Obm9mGHRaKCjaFs0VnYC0EZTh90taVFvZQwv+tmPI
TMQxPee2kca7IuezCunlUiqa1wGS07VHwRkphbwbx+97S/D7RFCaBo8gXREH
R1rX5ShPPRhT9dxB8jRDKl5pV5nD16dHSXn2d1R/tnVND3bM6S6/SRKmPTZj
4tskSutXNL4hk/QNsx3qd0xYcV7iR4/+Wa4Vijy24PZT+HJajj7UiC02rtXr
VY2Bb/g8BgfK46QSmUBB5Ze1yFOnyj+HEnuLA8tnPd5r2JlLYAvo/Obo6IQK
lLSj1JjoR0v5O6/uOa/aOtqeuUnnYOZBjaNrR+/ndlE6WvC1kWao4ZNebUeT
ZSOOnULY/ToCr7vT61XFzTl4041btZkqAY1ao54N7RqkHyQiXgNuQ7S4cWjm
GkgQFBOnb7fa29yiFtp4XO66aHyRnJWInS9a0l3OpdeCnjnsHgsn2ZiKzTNN
Q9wcDiyKNAgRrr7sWBRiYDbWkzWguGWPYE2ij3qRiV2Hx8cLE/aK4cV1B76P
IwCU/gS6bo/yw8Fd5jjLNd80IpAKDGR6fpaXWopzp4a1n7O3KCyOxUQOv1/J
dYbdEu9a+NOocghf+AzsEXQgcrfv0aC4zT270SEEN+Kn3IYkURYWPU+x9wg4
yTLMiw8IlV+m/cYb+posv9jcJ44fntx9U6xYvUtr+F260Z+yN9xBOlL6fntI
KaFdahze6vnY6B1VG20ilUXWwx/cmuzNnA5rDbG+EYbwRyTbKJPbCvn83v/t
fH5vKZ+XxK4mn2Ud2/1NMfsvypd6biP6X0lWGMYPYH15YfizyQvOSXQLXMuD
Zb4Iu7ml7DBcLjv8VPZw1xNTHLcMWag7SRrZp8jj2dcc5XRWLjgvEJGgZ5Sq
VdZuX4whI39HQjzpgrpU8oEtsXTzAmfpx3y2mPW8lRYcgCIrrQda8Eda2taZ
Q3OcehQxTLw5YVgPHx0F4Ge427Ddp0ps5NL22jgQ+ha+EK1CB2xsCrxs0sw2
/wIeKNjmvUHYZEuszwC/3lJqZmfMg7JvP+18l9RI/aXE2lDgU9uZG9TSLV39
vEKVhmeEdO12ghUjZq9bwLofx4/4TOZ6CLQCkERv788FnxUqtk+iLO52AuKm
OoLx6Hbs2pKs9gNLKEmsxTy6PddWzz2J+e7GBlXZNRnbK3I5u/yZXhjGThgc
UuX1B/VS5QWn94oFj1u2StNna/ZF5MrZu3VRTsemtbhtNJXK75RqDcNd5rbf
revHBDYZiAQiUS+cAIspRXKy61JJp5eE/db6OgoS0DC2gICaaQdNumWgWC1M
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
f7wz2Pj/AfLMWR7W/QEA

-->

</rfc>
