<?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.29 (Ruby 2.7.0) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-oscore-key-update-12" category="std" consensus="true" submissionType="IETF" updates="8613" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="Key Update for OSCORE (KUDOS)">Key Update for OSCORE (KUDOS)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-key-update-12"/>
    <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="2025" month="October" day="20"/>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 84?>

<t>Communications with the Constrained Application Protocol (CoAP) can be protected end-to-end at the application-layer by using the security protocol Object Security for Constrained RESTful Environments (OSCORE). Under some circumstances, two CoAP endpoints need to update their OSCORE keying material before communications can securely continue, e.g., due to approaching key usage limits. This document defines Key Update for OSCORE (KUDOS), a lightweight key update procedure that two CoAP endpoints can use to update their OSCORE keying material by establishing a new OSCORE Security Context. Accordingly, this document updates the use of the OSCORE flag bits in the CoAP OSCORE Option as well as the protection of CoAP response messages with OSCORE. Also, it deprecates the key update procedure specified in Appendix B.2 of RFC 8613. Therefore, this document updates RFC 8613.</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 88?>

<section anchor="intro">
      <name>Introduction</name>
      <t>The security protocol Object Security for Constrained RESTful Environments (OSCORE) <xref target="RFC8613"/> provides end-to-end protection at the application-layer for messages exchanged with the Constrained Application Protocol (CoAP) <xref target="RFC7252"/>. In particular, OSCORE ensures message confidentiality and integrity, replay protection, and binding of response to request between a sender and a recipient.</t>
      <t>Under some circumstances, two CoAP endpoints using OSCORE may need to update their shared keying material in order to ensure the security of their communications. 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 defines Key Update for OSCORE (KUDOS), a lightweight key update procedure that two CoAP endpoints can use to update their OSCORE keying material by establishing a new OSCORE Security Context.</t>
      <t>Accordingly, this document updates <xref target="RFC8613"/> as follows:</t>
      <ul spacing="normal">
        <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 of which were originally marked as "Reserved".  </t>
          <t>
In particular, 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 that was 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>
        <li>
          <t>It deprecates the key update procedure specified in <xref section="B.2" sectionFormat="of" target="RFC8613"/>, as intended to be superseded by KUDOS.</t>
        </li>
      </ul>
      <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"/>, Concise Binary Object Representation (CBOR) <xref target="RFC8949"/>, OSCORE <xref target="RFC8613"/>, and Ephemeral Diffie-Hellman Over COSE (EDHOC) <xref target="RFC9528"/>.</t>
        <t>This document additionally defines the following terminology.</t>
        <ul spacing="normal">
          <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>
          <li>
            <t>Equilibrium: The situation where a peer has no execution of KUDOS currently ongoing with the other KUDOS peer for updating one of their OSCORE Security Contexts.</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 the approaching of limits that have been set for safe key usage <xref target="I-D.ietf-core-oscore-key-limits"/>. Practically, when the relevant limits are 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 the approaching of 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 that forces 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, which are 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 that are protected with temporary Security Contexts, thus adding randomness to the OSCORE 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 use 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 shared pseudo-random secret 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, namely 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 the derivation of a new shared pseudo-random secret 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>
The LwM2M Client, the LwM2M Server, and the LwM2M Bootstrap server are also 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"/> as well as before the text "Then, go to 4." of <xref section="8.3.1" 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>Hereafter, this document refers to two specific peers that run KUDOS to update specifically one OSCORE Security Context that they share with each other.</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 exchange OSCORE-protected CoAP messages. The key update procedure is described in detail in <xref target="ssec-derive-ctx"/>, with particular reference to the stateful FS mode providing forward secrecy. The possible use of the stateless no-FS mode is described 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 do so.</t>
      <t>The key update procedure has the following properties:</t>
      <ul spacing="normal">
        <li>
          <t>It can be initiated by either peer.</t>
        </li>
        <li>
          <t>The new OSCORE Security Context enjoys forward secrecy, unless the no-FS mode is used (see <xref target="no-fs-mode"/>).</t>
        </li>
        <li>
          <t>The same ID Context value used in the old OSCORE Security Context (if set) is preserved in the new OSCORE Security Context.</t>
        </li>
        <li>
          <t>The same Sender and Recipient IDs used in the old OSCORE Security Context are preserved in the new OSCORE Security Context.</t>
        </li>
        <li>
          <t>It is robust against a peer rebooting and loss of state, avoiding the reuse of AEAD (nonce, key) pairs also in such cases.</t>
        </li>
        <li>
          <t>It typically completes in one round trip by exchanging two OSCORE-protected CoAP messages. The two peers achieve mutual key confirmation in a 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>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. The registration of this flag bit in the "OSCORE Flag Bits" registry 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) includes the size of the following field 'nonce' as well as a number of signaling bits that indicate the specific behavior to adopt during the KUDOS execution.  </t>
            <t>
Hereafter, a message is referred to as a "KUDOS 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 message".  </t>
            <t>
The encoding of the 'x' field 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.      </t>
                <t>
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 do so, 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 or terminate the ongoing observations with the other peer beyond the KUDOS execution, 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, which has the following meaning:      </t>
                <ul spacing="normal">
                  <li>
                    <t>If the bit 'z' is set to 0, the present message is a "divergent" KUDOS message, i.e., it is protected with a temporary OSCORE Security Context and indicates that the sender peer is moving away from "equilibrium".          </t>
                    <t>
That is, the sender peer is offering its own nonce in the 'nonce' field of the message and is waiting to receive the other peer's nonce.</t>
                  </li>
                  <li>
                    <t>If the bit 'z' is set to 1, the present message is a "convergent" KUDOS message, i.e., it is protected with the newly established OSCORE Security Context and indicates that the sender peer is attempting to return to "equilibrium".          </t>
                    <t>
That is, the sender peer is offering its own nonce in the 'nonce' field of the message, has received the other peer's nonce, and is going to wait for key confirmation (as a pre-condition to return to equilibrium).</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>The eight least significant bit is reserved for future use. This bit <bcp14>SHALL</bcp14> be set to 0 when not in use. According to this specification, if this bit is set to 1, the following applies:      </t>
                <ul spacing="normal">
                  <li>
                    <t>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"/>.</t>
                  </li>
                  <li>
                    <t>If the message is a response, it is considered to be malformed, 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>
              </li>
            </ul>
          </li>
        </ul>
        <t><xref target="fig-oscore-option"/> shows the extended OSCORE Option value, with the presence of the 'x' and 'nonce' fields.</t>
        <figure anchor="fig-oscore-option">
          <name>The Extended OSCORE Option Value</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 ------>
+----------------------+----------------------+
|      s (if any)      | kid context (if any) |
+----------------------+----------------------+

 <----- 1 byte ------> <--- m + 1 bytes --->
+---------------------+---------------------+------------------+
|     x (if any)      |   nonce (if any)    |   kid (if any)   |
+---------------------+---------------------+------------------+
|                     |
|   0 1 2 3 4 5 6 7   |
|  +-+-+-+-+-+-+-+-+  |
|  |0|z|b|p|   m   |  |
|  +-+-+-+-+-+-+-+-+  |
]]></artwork>
        </figure>
      </section>
      <section anchor="ssec-update-function">
        <name>Function for Security Context Update</name>
        <t>This section defines the updateCtx() function shown in <xref target="function-update"/>, which takes as input the three parameters input1, input2, and CTX_IN.</t>
        <t>In particular, input1 and input2 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 through the KUDOS execution. The function returns a new OSCORE Security Context CTX_OUT.</t>
        <figure anchor="function-update">
          <name>Functions for Deriving a new OSCORE Security Context</name>
          <artwork align="left"><![CDATA[
function updateCtx(input1, input2, CTX_IN):

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

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

 // Create CBOR byte strings from input1 and input2
 input1_cbor = create_cbor_bstr(input1)
 input2_cbor = create_cbor_bstr(input2)

 // Concatenate the CBOR-encoded input1 and input2
 // according to their lexicographic order
 X_N = is_lexicographically_shorter(input1_cbor, input2_cbor) ?
       (input1_cbor | input2_cbor) : (input2_cbor | input1_cbor)

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

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

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

 // 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>
        <t>The updateCtx() function builds the two CBOR byte strings input1_cbor and input2_cbor, whose values are the input parameter input1 and input2, respectively. Then, it builds X_N as the byte concatenation of input1_cbor and input2_cbor.</t>
        <t>In order to be agnostic of the order according to which the nonce values were exchanged, the binary representations of input1_cbor and input2_cbor are sorted in lexicographical order before they are concatenated. That is, with | denoting byte concatenation, X_N <bcp14>MUST</bcp14> take input1_cbor | input2_cbor if input1_cbor comes before input2_cbor in lexicographical order, or input2_cbor | input1_cbor otherwise.</t>
        <t>After that, the updateCtx() function derives the new values of the Master Salt and Master Secret for the Security Context CTX_OUT. In particular, the new Master Salt takes X_N as value. Instead, the new Master Secret is derived through a KUDOS-Expand step that is invoked through the KUDOS_Expand_Label() function. The latter 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 in bytes.</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. 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. In particular, 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 also update 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 is 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 newly computed Master Secret and Master Salt 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 that 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>Note that, thanks to the input parameters input1 and input2 provided to the updateCtx() function, the derivation of CTX_OUT also considers as input the information from the 'x' field conveyed in the OSCORE Option value of the exchanged KUDOS messages. In turn, this ensures that a successfully completed KUDOS execution has occurred as intended by the two peers.</t>
      </section>
      <section anchor="ssec-derive-ctx">
        <name>Key Update</name>
        <t>When using KUDOS as described in this section, forward secrecy is achieved for the new OSCORE keying material that results from the KUDOS execution, as long as the original OSCORE keying material was also established with forward secrecy. For peers that are unable to store information to persistent memory, <xref target="no-fs-mode"/> provides an alternative approach that does not achieve forward secrecy but allows also such very constrained peers to perform a key update.</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 the limits for the corresponding key usage <xref target="I-D.ietf-core-oscore-key-limits"/>, the enforcement of application policies, and the (approaching) 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 exchanging application data 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. In particular, CTX_OLD is the most recent OSCORE Security Context that a peer has with the other peer, before initiating the KUDOS procedure or upon having received and successfully verified a divergent KUDOS message. During an execution of KUDOS, a temporary OSCORE Security Context CTX_TEMP is also derived.</t>
        <t>Once successfully completed a KUDOS execution, the two peers agree on a newly established OSCORE Security Context CTX_NEW that replaces CTX_OLD. In particular, CTX_NEW is the most recent OSCORE Security Context that a peer has with the other peer, before sending a convergent KUDOS message to the other peer or upon having received and successfully verified a convergent KUDOS message from that other peer. CTX_OLD can be safely deleted upon receiving key confirmation from the other peer, i.e., upon gaining knowledge that the other peer also has CTX_NEW.</t>
        <t>The following specifically defines how KUDOS is run in its stateful FS mode achieving forward secrecy. That is, in the OSCORE Option value of all the exchanged KUDOS messages, the "No Forward Secrecy" 'p' 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 either or both peers are 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>In the following, X1 and X2 denote the value of the 'x' field specified in the OSCORE Option value of a KUDOS message. From one peer's point of view, X1 and N1 are generated by that peer, while X2 and N2 are obtained from the other peer.</t>
          <t>In a KUDOS message, the sender peer sets the X1 value based on: the length of N1 in bytes, the specific settings that the peer wishes to run KUDOS with, and the message being divergent or convergent. During the same KUDOS execution, all the KUDOS messages sent by a peer <bcp14>MUST</bcp14> have the same value of the bit 'b' in the 'x' field conveying X1.</t>
          <t>N1, N2, X1, and X2 are used by the peers to build the 'input1' and 'input2' values provided as input to the updateCtx() function, in order to derive an OSCORE Security Context (see <xref target="ssec-update-function"/>). As for any newly derived 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>Specifically, the input to updateCtx() is built as follows, where | denotes byte concatenation:</t>
          <ul spacing="normal">
            <li>
              <t>When deriving CTX_TEMP to protect a divergent outgoing message, input1 is X1 | N1 and input2 is 0x.</t>
            </li>
            <li>
              <t>When deriving CTX_TEMP to unprotect a divergent incoming message, input1 is X2 | N2 and input2 is 0x.</t>
            </li>
            <li>
              <t>When deriving CTX_NEW to protect or unprotect a convergent message, input1 is X1 | N1 and input2 is X2 | N2.</t>
            </li>
          </ul>
          <t>For any divergent KUDOS message, the sender peer's (X, nonce) are included in the 'x' and 'nonce' field of the OSCORE Option value, respectively. Also, both peers use those as input to updateCtx() for deriving CTX_TEMP, which is used to protect and unprotect the KUDOS message.</t>
          <t>For any convergent KUDOS message, the sender peer's (X, nonce) are included in the 'x' and 'nonce' field of the OSCORE Option value, respectively. Both the sender peer's (X, nonce) and the recipient peer's (X, nonce) are used as input to updateCtx() for deriving CTX_NEW, which is used to protect and unprotect the KUDOS message.</t>
          <t>A pair (X, nonce) offered by a peer is bound to CTX_OLD, and is reused as much as possible during the same KUDOS execution. A peer generates its (X, nonce) pair before invoking updateCtx(), if the peer does not have one such pair already associated with the CTX_OLD to use as input CTX_IN for updateCtx(). The peer associates the newly generated pair with CTX_OLD before entering updateCtx().</t>
        </section>
        <section anchor="ssec-states">
          <name>KUDOS States</name>
          <t>A peer performs a KUDOS execution according to the state machine specified in <xref target="ssec-state-machine"/> and illustrated as a figure in <xref target="kudos-state-machine-figure"/>, where the following states are considered.</t>
          <t>The peer can be in three possible states: IDLE, BUSY, and PENDING.</t>
          <t>Normally, the peer is in the IDLE state, i.e., in "equilibrium". The peer starts a KUDOS execution upon entering the BUSY state from a state different than BUSY. The peer successfully completes a KUDOS execution by entering the IDLE state, at which point the peer has the OSCORE Security Context CTX_NEW and has achieved key confirmation.</t>
          <t>The sending of a KUDOS message is per the KUDOS state machine and is based on the perception that the sender peer has about the state of the other peer.</t>
          <t>The processing of a received KUDOS message is per the KUDOS state machine and is based on the local status of the recipient peer. Moving to a state due to a received KUDOS message occurs only in case of successful decryption and verification of the message with OSCORE.</t>
          <t>In its local status, a peer tracks its current KUDOS state by means of the bits (c_tx, c_rx) as follows:</t>
          <ul spacing="normal">
            <li>
              <t>(00) IDLE - The peer is not running KUDOS.</t>
            </li>
            <li>
              <t>BUSY - The peer is running KUDOS and:
              </t>
              <ul spacing="normal">
                <li>
                  <t>(01) has not offered a nonce, but has received the nonce from the other peer; or</t>
                </li>
                <li>
                  <t>(10) has offered a nonce, but has not received the nonce from the other peer.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>(11) PENDING: the peer is running KUDOS, has offered its nonce, has received the nonce from the other peer, and is waiting for key confirmation.</t>
            </li>
          </ul>
          <t>While in the <strong>BUSY</strong> or the <strong>PENDING</strong> state, the peer <bcp14>MUST NOT</bcp14> send non KUDOS messages.</t>
        </section>
        <section anchor="ssec-state-machine">
          <name>KUDOS State Machine</name>
          <t>From a peer's point of view, KUDOS states evolve as follows.</t>
          <section anchor="startup">
            <name>Startup</name>
            <t>At startup, the peer enters a <strong>Pre-IDLE</strong> stage.</t>
          </section>
          <section anchor="ssec-state-machine-pre-idle">
            <name>Pre-IDLE Stage</name>
            <t>Upon entering the <strong>Pre-IDLE</strong> stage, perform the following steps:</t>
            <ol spacing="normal" type="1"><li>
                <t>If the peer has any CTX_TEMP Security Contexts, delete them.</t>
              </li>
              <li>
                <t>If the peer has both an old and a new OSCORE Security Context:  </t>
                <ul spacing="normal">
                  <li>
                    <t>Delete the (X, nonce) pair associated with the old OSCORE Security Context.</t>
                  </li>
                  <li>
                    <t>Delete the old OSCORE Security Context, or retain it only for processing late incoming messages as allowed by retention policies (see <xref target="ssec-retention"/>).</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>Move to <strong>IDLE</strong>.</t>
              </li>
            </ol>
          </section>
          <section anchor="idle">
            <name>IDLE</name>
            <t>While in <strong>IDLE</strong>, the following applies:</t>
            <ul spacing="normal">
              <li>
                <t>Upon receiving a divergent message, move to <strong>BUSY</strong>.</t>
              </li>
              <li>
                <t>Upon sending a divergent message, move to <strong>BUSY</strong>.</t>
              </li>
              <li>
                <t>Upon receiving a convergent message:  </t>
                <ol spacing="normal" type="1"><li>
                    <t>Ignore the message for the sake of KUDOS processing, but process it as a CoAP message.</t>
                  </li>
                  <li>
                    <t>Stay in <strong>IDLE</strong>.</t>
                  </li>
                </ol>
              </li>
            </ul>
          </section>
          <section anchor="busy">
            <name>BUSY</name>
            <t>Upon entering <strong>BUSY</strong> due to receiving a divergent message:</t>
            <ol spacing="normal" type="1"><li>
                <t>Send a convergent message.</t>
              </li>
              <li>
                <t>Move to <strong>PENDING</strong>.</t>
              </li>
            </ol>
            <t>While in <strong>BUSY</strong>, the following applies:</t>
            <ul spacing="normal">
              <li>
                <t>Upon receiving a divergent message:  </t>
                <ol spacing="normal" type="1"><li>
                    <t>Send a convergent message.</t>
                  </li>
                  <li>
                    <t>Move to <strong>PENDING</strong>.</t>
                  </li>
                </ol>
              </li>
              <li>
                <t>Upon receiving a convergent message:  </t>
                <ol spacing="normal" type="1"><li>
                    <t>Achieve key confirmation.</t>
                  </li>
                  <li>
                    <t>Move to the <strong>Pre-IDLE</strong> stage.</t>
                  </li>
                </ol>
              </li>
              <li>
                <t>Upon sending a divergent message:  </t>
                <ul spacing="normal">
                  <li>
                    <t>If, as in most cases, CTX_TEMP is usable to protect the intended divergent message:      </t>
                    <ol spacing="normal" type="1"><li>
                        <t>Send the message protected with CTX_TEMP.</t>
                      </li>
                      <li>
                        <t>Stay in <strong>BUSY</strong>.</t>
                      </li>
                    </ol>
                  </li>
                  <li>
                    <t>Otherwise, perform the following steps (e.g., this happens upon eventually exhausting the Sender Sequence Number space of CTX_TEMP):      </t>
                    <ol spacing="normal" type="1"><li>
                        <t>Delete CTX_TEMP.</t>
                      </li>
                      <li>
                        <t>Delete the (X, nonce) pair associated with the Security Context CTX_IN that was used to generate the CTX_TEMP deleted at the previous step.</t>
                      </li>
                      <li>
                        <t>Generate a new (X, nonce) pair and associate it with CTX_IN.</t>
                      </li>
                      <li>
                        <t>Generate a new CTX_TEMP from CTX_IN.</t>
                      </li>
                      <li>
                        <t>Send the message protected with the CTX_TEMP generated at the previous step.</t>
                      </li>
                      <li>
                        <t>Stay in <strong>BUSY</strong>.</t>
                      </li>
                    </ol>
                  </li>
                </ul>
              </li>
            </ul>
          </section>
          <section anchor="pending">
            <name>Pending</name>
            <t>While in <strong>PENDING</strong>, the following applies:</t>
            <ul spacing="normal">
              <li>
                <t>Upon needing to send a message (e.g., the application wants to send a request):  </t>
                <ol spacing="normal" type="1"><li>
                    <t>Send the message as a convergent message.</t>
                  </li>
                  <li>
                    <t>Stay in <strong>PENDING</strong>.</t>
                  </li>
                </ol>
              </li>
              <li>
                <t>Upon receiving a non KUDOS message protected with the latest CTX_NEW:  </t>
                <ol spacing="normal" type="1"><li>
                    <t>Achieve key confirmation.</t>
                  </li>
                  <li>
                    <t>Move to the <strong>Pre-IDLE</strong> stage.</t>
                  </li>
                </ol>
              </li>
              <li>
                <t>Upon receiving a convergent message:  </t>
                <ol spacing="normal" type="1"><li>
                    <t>Achieve key confirmation.</t>
                  </li>
                  <li>
                    <t>Move to the <strong>Pre-IDLE</strong> stage.</t>
                  </li>
                </ol>
              </li>
              <li>
                <t>Upon receiving a divergent message:  </t>
                <ul spacing="normal">
                  <li>
                    <t>In case of successful decryption and verification of the message using a CTX_TEMP derived from CTX_OLD:      </t>
                    <ol spacing="normal" type="1"><li>
                        <t>Delete CTX_NEW.</t>
                      </li>
                      <li>
                        <t>Delete the pair (X, nonce) associated with the Security Context CTX_IN that was used to generate the CTX_NEW deleted at the previous step.</t>
                      </li>
                      <li>
                        <t>Abort the ongoing KUDOS execution.</t>
                      </li>
                      <li>
                        <t>Move to <strong>BUSY</strong> and enter it consistently with the reception of a divergent message.</t>
                      </li>
                    </ol>
                  </li>
                  <li>
                    <t>Otherwise, in case of successful decryption and verification of the message using a CTX_TEMP derived from CTX_NEW:      </t>
                    <ol spacing="normal" type="1"><li>
                        <t>Delete the oldest CTX_TEMP.</t>
                      </li>
                      <li>
                        <t>Delete the Security Context that was used as CTX_IN to generate the CTX_TEMP deleted at the previous step.</t>
                      </li>
                      <li>
                        <t>CTX_NEW becomes the oldest Security Context. From this point on, that Security Context is what this KUDOS execution refers to as CTX_OLD.</t>
                      </li>
                      <li>
                        <t>Abort the ongoing KUDOS execution.</t>
                      </li>
                      <li>
                        <t>Move to <strong>BUSY</strong> and enter it consistently with the reception of a divergent message.</t>
                      </li>
                    </ol>
                  </li>
                </ul>
              </li>
            </ul>
          </section>
        </section>
        <section anchor="ssec-state-machine-optimization">
          <name>Optimization upon Receiving a Divergent Message while in PENDING</name>
          <t>When a peer is in the <strong>PENDING</strong> state and receives a divergent message, an optimization can be applied to avoid unnecessary state transitions and cryptographic derivations. It builds on comparing the just received divergent message MSG_A with a previously received divergent message MSG_B that originally caused the latest transition to <strong>PENDING</strong> or <strong>BUSY</strong>. Normally the reception of MSG_A would move the peer to <strong>BUSY</strong> state.</t>
          <t>If the two messages MSG_A and MSG_B contain the same X byte and Nonce from the other peer, then the peer stays in <strong>PENDING</strong>. Otherwise, the peer moves to <strong>BUSY</strong> upon reception of the divergent message MSG_\A, as normal.</t>
          <t>If upon reception of MSG_A, CTX_NEW is not usable to protect outgoing messages (e.g., this happens upon eventually exhausting the Sender Sequence Number values of CTX_TEMP), the peer moves to <strong>BUSY</strong>, as normal.</t>
          <t>This optimization avoids repeated cryptographic operations and redundant transitions in the state machine when divergent messages originate from the same peer and carry identical X byte and Nonce.</t>
          <t>To determine whether message MSG_A and MSG_B are equivalent, the peer <bcp14>MUST</bcp14>:</t>
          <ol spacing="normal" type="1"><li>
              <t>Decompose the Master Salt from the current CTX_NEW into its CBOR byte string components, as described in <xref target="ssec-update-function"/>. Then identify:
              </t>
              <ul spacing="normal">
                <li>
                  <t>The component containing the peer's own X and Nonce, i.e., the (X, nonce) pair associated with the Security Context CTX_IN that was used to generate the CTX_TEMP used to unprotect MSG_A.</t>
                </li>
                <li>
                  <t>The component containing the other peer's X and Nonce that was used in the divergent message MSG_B, i.e., the result of removing from the Master Salt the component above related to this peer.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Extract the X and Nonce values from the latest received divergent message MSG_A.</t>
            </li>
            <li>
              <t>There is a match if the X and Nonce from message MSG_A are the same as those from message MSG_B identified above.</t>
            </li>
          </ol>
        </section>
        <section anchor="ssec-context-handling">
          <name>Handling of OSCORE Security Contexts</name>
          <t>A peer completes the key update procedure when it has derived the new OSCORE Security Context CTX_NEW and achieved key confirmation, and thus has moved back to the IDLE state.</t>
          <t>Once the peer has successfully derived CTX_NEW, 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>
          <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 all be cancelled following a successful KUDOS execution.</t>
          <t>Note that, even in case a peer has no fundamental 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>
        </section>
        <section anchor="ssec-message-handling">
          <name>KUDOS Messages as CoAP Requests or Responses</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 (see <xref target="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"/>).  </t>
              <t>
In such a case, no application processing is expected at the CoAP server and the plain CoAP request composed before OSCORE protection <bcp14>SHOULD NOT</bcp14> 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.  </t>
              <t>
In such a case, the plain CoAP request composed before OSCORE protection can include an application payload, if admitted by the request method.</t>
            </li>
          </ul>
          <t>In either case, the link to the target resource can be accompanied by 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 protection <bcp14>SHOULD NOT</bcp14> include an application payload. Otherwise, an application payload <bcp14>MAY</bcp14> be included.</t>
        </section>
        <section anchor="ssec-in-transit">
          <name>Avoiding In-Transit Requests During a Key Update</name>
          <t>Before sending a KUDOS message, a peer <bcp14>MUST</bcp14> ensure that it has no outstanding interactions with the other peer (see <xref section="4.7" sectionFormat="of" target="RFC7252"/>), with the exception of ongoing observations <xref target="RFC7641"/>.</t>
          <t>If any such outstanding interactions are found, the peer <bcp14>MUST NOT</bcp14> initiate or continue the KUDOS execution, before either:</t>
          <ul spacing="normal">
            <li>
              <t>having all those outstanding interactions cleared; or</t>
            </li>
            <li>
              <t>freeing up the Token values used with those outstanding interactions, with the exception of ongoing observations with the other peer.</t>
            </li>
          </ul>
          <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, a peer <bcp14>MUST NOT</bcp14> send a non KUDOS message to the other peer, until having aborted or successfully completed the key update procedure on its side. Note that, without the constraint above, this could otherwise be possible if a client running KUDOS uses a value of NSTART greater than 1 (see <xref section="4.7" sectionFormat="of" target="RFC7252"/>).</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 running KUDOS to preserve their state (e.g., across a device reboot occurred in an unprepared way), 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 accomplish the same results as when running KUDOS in FS mode (see <xref target="ssec-derive-ctx"/>), with the difference that forward secrecy is not 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 in which exact OSCORE Master Secret and Master Salt are used as part of the OSCORE Security Context CTX_IN that is provided as input to the updateCtx() function (see <xref target="ssec-update-function"/>).</t>
        <t>If either or both peers are unable to write in non-volatile memory, 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>If a peer has neither of the pairs above associated with another peer, then the peer cannot run KUDOS in any mode with that other peer.</t>
            </li>
            <li>
              <t>If a peer has only one of the pairs above associated with another peer, then the 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, with the exception described in <xref target="non-capable-fs-mode"/> 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. Related privacy implications are described in <xref target="sec-cons"/>.  </t>
              <t>
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_TEMP 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>
          <t>Following a state loss (e.g., due to a reboot occurred in an unprepared way), a device <bcp14>MUST</bcp14> complete a successful KUDOS execution 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 within a KUDOS message, as described in <xref target="ssec-message-handling"/>. In such a case, the plain CoAP message composed before OSCORE protection can include an application payload, if admitted.</t>
            </li>
          </ul>
        </section>
        <section anchor="no-fs-signaling">
          <name>Selection of KUDOS Mode</name>
          <t>The following refers to CTX_BOOTSTRAP as to the OSCORE Security Context where the OSCORE Master Secret is the Bootstrap Master Secret and the Master Salt is the Bootstrap Master Salt <xref target="key-material-handling"/>.</t>
          <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"/>).</t>
          <t>The 'p' bit practically determines what OSCORE Security Context CTX_IN to use as input to updateCtx() during the KUDOS execution, consistently with the indicated mode. That is:</t>
          <ul spacing="normal">
            <li>
              <t>If the 'p' bit is set to 0 (FS mode), the updateCtx() function used to derive CTX_TEMP or CTX_NEW considers CTX_IN to be CTX_OLD, i.e., 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_TEMP or CTX_NEW considers CTX_IN to be CTX_BOOTSTRAP. Thus, every execution of KUDOS in no-FS mode between these two peers considers the same CTX_BOOTSTRAP, i.e., the same CTX_IN as input to the updateCtx() function, hence the impossibility to achieve forward secrecy.  </t>
              <t>
In particular, updateCtx() will take CTX_BOOTSTRAP as input when creating every OSCORE Security Context for protecting or unprotecting a KUDOS message where the 'p' bit is set to 1.  </t>
              <t>
If at least one KUDOS message in a successful KUDOS execution had the 'p' bit set to 1, then that KUDOS execution was run in no-FS mode.  </t>
              <t>
When a peer moves to the <strong>Pre-IDLE</strong> stage after having successfully completed a KUDOS execution in no-FS mode, then the peer <bcp14>MUST</bcp14> additionally perform the following Step A before Step 1 in <xref target="ssec-state-machine-pre-idle"/>:  </t>
              <t>
A. Delete CTX_BOOTSTRAP.</t>
            </li>
          </ul>
          <t>A peer determines to run KUDOS either in FS mode or in 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 the 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>While the peer A is running KUDOS with another peer B without knowing its capabilities, the peer 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. If the peer A 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, then the peer A <bcp14>MUST</bcp14> ignore the message for the sake of KUDOS processing, but processes it as a CoAP message.  </t>
              <t>
Note that, if the peer A is a CAPABLE device, it is able to remember that the peer B is also a CAPABLE device and thus to store such information on disk, which it <bcp14>MUST</bcp14> do. This ensures that the peer A will perform every execution of KUDOS with the peer B in FS mode. This also prevents a possible downgrading attack aimed at making A believe that B is a non-CAPABLE device, hence at making A run KUDOS in no-FS mode although the FS mode can actually be used by both peers.</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 their persistent memory or to fulfill particular use cases. Bootstrap material specifically consists in the Bootstrap Master Secret and Bootstrap Master Salt, while Latest material specifically consists in the Latest Master Secret and Latest Master Salt as defined in <xref target="key-material-handling"/>.</t>
          <t>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 that 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>In the situation outlined above, the following describes how a non-CAPABLE device, 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>
              <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>
            <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 successfully completed the KUDOS execution and derived the new OSCORE Security Context CTX_NEW, that peer normally terminates all the ongoing observations that it has with the other peer <xref target="RFC7641"/> and that are 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 that it sends to the other peer B.</t>
          <t>If a peer receives a 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 that it sends as follow-up, regardless of its wish to preserve ongoing observations with the other peer.</t>
          <t>If a peer has sent a 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>Note that during the same KUDOS execution, all the KUDOS messages sent by a peer <bcp14>MUST</bcp14> have the same value in the bit 'b' for preserving ongoing observations.</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 all 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 requests 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 a 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 Sender Sequence Number 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 deleting CTX_OLD. This allows the peer to decrypt late, still on-the-fly incoming non KUDOS messages that are 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 only by using 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>KUDOS messages <bcp14>MUST NOT</bcp14> be protected or unprotected by using 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:</t>
        <ul spacing="normal">
          <li>
            <t>CTX_OLD is expired.</t>
          </li>
          <li>
            <t>Limits set for safe key usage have been reached for the Recipient Key of the Recipient Context of CTX_OLD (see <xref target="I-D.ietf-core-oscore-key-limits"/>).</t>
          </li>
        </ul>
      </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="communication-overhead">
          <name>Communication Overhead</name>
          <t>Each 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 1-byte 'x' field of the OSCORE Option value.</t>
            </li>
            <li>
              <t>The nonce conveyed in the 'nonce' field of the OSCORE Option value. Its size ranges from 1 to 16 bytes, is typically of 8 bytes, and is indicated in the 'x' field.</t>
            </li>
            <li>
              <t>The 'Partial IV' field 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' field, but they have to when they are KUDOS messages (see <xref target="sec-updated-response-protection"/>).</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 in figure <xref target="_table-overhead-forward"/> are the minimum, typical, and maximum communication overhead in bytes introduced by KUDOS, when considering a nonce with size 1, 8, and 16 bytes. All the indicated values are in bytes.</t>
          <t>The overhead is calculated considering a scenario where a CoAP request serves as the divergent message and a following, corresponding CoAP response serves as the convergent message.</t>
          <t>In particular, the 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' field in the OSCORE Option value.</t>
            </li>
            <li>
              <t>When included in the OSCORE Option value, the 'Partial IV' field has size 1 byte.</t>
            </li>
            <li>
              <t>CoAP request messages include the 'kid' field with size 1 byte in the OSCORE Option value.</t>
            </li>
            <li>
              <t>CoAP response messages do not include the 'kid' field in the OSCORE Option value.</t>
            </li>
          </ul>
          <table align="center" anchor="_table-overhead-forward">
            <name>Communication Overhead (Bytes)</name>
            <thead>
              <tr>
                <th align="left">Nonce size</th>
                <th align="left">Request KUDOS message</th>
                <th align="left">Response 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>
        </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.</t>
          <t>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>If a client wishes to run the KUDOS procedure without triggering any application processing on the server, then a request sent as a 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>The SCHC compression of the 'Partial IV' field in the OSCORE Option value has implications for the frequency of rekeying. That is, if the 'Partial IV' field is compressed, the communicating peers must perform rekeying more often, as the available Sender Sequence Number space that is used for the Partial IV becomes effectively smaller due to the compression. For instance, if only 3 bits of the Partial IV are sent, then the maximum Partial IV that can be used before having to rekey is only 2<sup>3</sup> - 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 employed SCHC Rules and their update policies should ensure that the KUDOS executions occurring as their side effect do not significantly impair the gain expected from message compression.</t>
        </section>
        <section anchor="combining-kudos-with-access-control">
          <name>Combining KUDOS with Access Control</name>
          <t>Resource where messages can be sent at the server might be following the enforcement of access control means on the request. For example, when combining KUDOS with the EDHOC and OSCORE profile of ACE <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>, certain considerations must be taken into account to ensure proper access control behavior:</t>
          <ul spacing="normal">
            <li>
              <t>A KUDOS request that targets a non-KUDOS resource <bcp14>MUST</bcp14> trigger standard ACE-based access control checks.</t>
            </li>
            <li>
              <t>A KUDOS request that targets a KUDOS resource <bcp14>MUST NOT</bcp14> trigger ACE-based access control.</t>
            </li>
          </ul>
          <t>To support this, the path of any KUDOS resource can be included in the ACE access control exclusion list (i.e., the "do not enforce access control" list). The same principles have to be applied if other means are used to enforce access control.</t>
          <t>In some deployment scenarios, an ACE Access Token may be bound to both CTX_OLD and CTX_NEW, allowing it to be valid and still usable after the execution of a KUDOS procedure.</t>
          <t>It is important to note that KUDOS is not compatible with the OSCORE profile of ACE <xref target="RFC9203"/>, this is because KUDOS changes the OSCORE Master Secret, which is used as proof-of-possession key in that profile. However, as described above, KUDOS is compatible with the EDHOC and OSCORE profile of ACE <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>.</t>
        </section>
      </section>
      <section anchor="edhoc-ead-signaling">
        <name>Signaling KUDOS support in EDHOC</name>
        <t>The EDHOC protocol defines the transport of additional External Authorization Data (EAD) within an optional EAD field of the EDHOC messages (see <xref section="3.8" sectionFormat="of" target="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 byte string.</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 that 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, the peer 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 signaling process defined above, the following presents two examples of EDHOC execution where only the new KUDOS_EAD item is shown when present, assuming that no other EAD items are used by the two peers.</t>
        <t>In the example shown in <xref target="fig-edhoc-ead-example-1"/>, the EDHOC 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 been successfully completed, both peers are aware that they both support KUDOS, in the FS and no-FS modes.</t>
        <figure anchor="fig-edhoc-ead-example-1">
          <name>Example of EDHOC Execution with Signaling of Support for KUDOS (Both Peers Support KUDOS)</name>
          <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>
        </figure>
        <t>In the example shown in <xref target="fig-edhoc-ead-example-2"/>, the EDHOC 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 been successfully completed, the Initiator is aware that the Responder does not support KUDOS, which the two peers are not going to use with each other.</t>
        <figure anchor="fig-edhoc-ead-example-2">
          <name>Example of EDHOC Execution with Signaling of Support for KUDOS (the EDHOC Responder Does Not Support KUDOS)</name>
          <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>
        </figure>
      </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 the nonces N1 and N2 is 8 bytes. Applications need to set the size of each nonce such that the probability of its value being repeated is negligible throughout executions of KUDOS that aim to update a given OSCORE Security Context, even in case of loss of state (e.g., due to a reboot occurred in an unprepared way).</t>
      <t>Considering the birthday paradox and a nonce size of 8 bytes, the average collision for each nonce will happen after the generation of 2<sup>32</sup> (X, nonce) pairs generated by a given peer (see <xref target="ssec-nonces-x-bytes"/>), which is considerably more than the number of such pairs that a peer is expected to generate throughout the update of a given OSCORE Security Context using KUDOS (in fact, that number is expected to typically be 1). Yet, determining the appropriate nonce size also ought to take into account the possible use of KUDOS in no-FS mode (see <xref target="no-fs-mode"/>), in which case every execution in no-FS mode between two given peers considers the same CTX_BOOTSTRAP as the OSCORE Security Context to update (see <xref target="no-fs-signaling"/>), hence raising the chances of reusing a nonce.</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 have a size smaller than the recommended one. This is acceptable, provided that safety, reliability, and robustness within the system can still be assured. That is, if nonces with a smaller size are used and thus a collision will occur on average after fewer KUDOS executions that aim to update a given OSCORE Security Context, care must be taken to ensure that this does not pose significant problems, e.g., considering as benchmark 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. Instead, if counter values are used (see <xref target="key-material-handling"/>), this can leak information such as the frequency according to which two peers perform a key update.</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 such 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 (suggested)</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 entry 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">Name</th>
              <th align="left">Label</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">KUDOS_EAD</td>
              <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="8" month="April" year="2025"/>
            <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-10"/>
        </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="7" month="July" year="2025"/>
            <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-05"/>
        </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="7" month="July" year="2025"/>
            <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 between the client and resource
   server 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-08"/>
        </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 1029?>

<section anchor="examples">
      <name>Examples</name>
      <t>The following sections show two examples of KUDOS being executed, both showing successfully completion of KUDOS and the procedure failing.</t>
      <section anchor="successful-kudos-execution-initiated-with-a-request-message">
        <name>Successful KUDOS Execution Initiated with a Request Message</name>
        <t>The following shows a successful execution of KUDOS where KUDOS is started by the client sending a divergent KUDOS message as a CoAP request.</t>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1472" width="592" viewBox="0 0 592 1472" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 112,736 L 112,752" fill="none" stroke="black"/>
              <path d="M 152,752 L 152,760" fill="none" stroke="black"/>
              <path d="M 200,96 L 200,976" fill="none" stroke="black"/>
              <path d="M 200,1056 L 200,1456" fill="none" stroke="black"/>
              <path d="M 384,96 L 384,976" fill="none" stroke="black"/>
              <path d="M 384,1056 L 384,1456" fill="none" stroke="black"/>
              <path d="M 504,592 L 504,608" fill="none" stroke="black"/>
              <path d="M 544,608 L 544,616" fill="none" stroke="black"/>
              <path d="M 200,240 L 376,240" fill="none" stroke="black"/>
              <path d="M 208,672 L 384,672" fill="none" stroke="black"/>
              <path d="M 200,1088 L 376,1088" fill="none" stroke="black"/>
              <path d="M 208,1328 L 384,1328" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="384,1088 372,1082.4 372,1093.6" fill="black" transform="rotate(0,376,1088)"/>
              <polygon class="arrowhead" points="384,240 372,234.4 372,245.6" fill="black" transform="rotate(0,376,240)"/>
              <polygon class="arrowhead" points="216,1328 204,1322.4 204,1333.6" fill="black" transform="rotate(180,208,1328)"/>
              <polygon class="arrowhead" points="216,672 204,666.4 204,677.6" fill="black" transform="rotate(180,208,672)"/>
              <g class="text">
                <text x="24" y="36">KUDOS</text>
                <text x="80" y="36">status:</text>
                <text x="456" y="36">KUDOS</text>
                <text x="512" y="36">status:</text>
                <text x="8" y="52">-</text>
                <text x="52" y="52">CTX_OLD:</text>
                <text x="104" y="52">-,-</text>
                <text x="440" y="52">-</text>
                <text x="484" y="52">CTX_OLD:</text>
                <text x="536" y="52">-,-</text>
                <text x="8" y="68">-</text>
                <text x="44" y="68">State:</text>
                <text x="92" y="68">IDLE</text>
                <text x="136" y="68">(0,0)</text>
                <text x="440" y="68">-</text>
                <text x="476" y="68">State:</text>
                <text x="524" y="68">IDLE</text>
                <text x="568" y="68">(0,0)</text>
                <text x="196" y="84">Client</text>
                <text x="388" y="84">Server</text>
                <text x="36" y="116">Generate</text>
                <text x="88" y="116">N1,</text>
                <text x="116" y="116">X1</text>
                <text x="36" y="148">CTX_TEMP</text>
                <text x="80" y="148">=</text>
                <text x="132" y="148">updateCtx(</text>
                <text x="76" y="164">X1</text>
                <text x="96" y="164">|</text>
                <text x="120" y="164">N1,</text>
                <text x="80" y="180">0x,</text>
                <text x="96" y="196">CTX_OLD</text>
                <text x="136" y="196">)</text>
                <text x="280" y="228">Request</text>
                <text x="324" y="228">#1</text>
                <text x="32" y="244">Protect</text>
                <text x="84" y="244">with</text>
                <text x="140" y="244">CTX_TEMP</text>
                <text x="468" y="244">/.well-known/kudos</text>
                <text x="236" y="260">OSCORE</text>
                <text x="272" y="260">{</text>
                <text x="24" y="276">KUDOS</text>
                <text x="80" y="276">status:</text>
                <text x="232" y="276">...</text>
                <text x="428" y="276">CTX_TEMP</text>
                <text x="472" y="276">=</text>
                <text x="524" y="276">updateCtx(</text>
                <text x="36" y="292">CTX_OLD:</text>
                <text x="88" y="292">X1,</text>
                <text x="116" y="292">N1</text>
                <text x="248" y="292">Partial</text>
                <text x="296" y="292">IV:</text>
                <text x="320" y="292">0</text>
                <text x="472" y="292">0x,</text>
                <text x="28" y="308">State:</text>
                <text x="76" y="308">BUSY</text>
                <text x="120" y="308">(1,0)</text>
                <text x="232" y="308">...</text>
                <text x="468" y="308">X1</text>
                <text x="488" y="308">|</text>
                <text x="512" y="308">N1,</text>
                <text x="224" y="324">d</text>
                <text x="256" y="324">flag:</text>
                <text x="288" y="324">1</text>
                <text x="488" y="324">CTX_OLD</text>
                <text x="528" y="324">)</text>
                <text x="228" y="340">x:</text>
                <text x="252" y="340">X1</text>
                <text x="272" y="340">=</text>
                <text x="328" y="340">b'00000111'</text>
                <text x="244" y="356">nonce:</text>
                <text x="284" y="356">N1</text>
                <text x="420" y="356">Verify</text>
                <text x="468" y="356">with</text>
                <text x="524" y="356">CTX_TEMP</text>
                <text x="232" y="372">...</text>
                <text x="216" y="388">}</text>
                <text x="248" y="404">Encrypted</text>
                <text x="320" y="404">Payload</text>
                <text x="360" y="404">{</text>
                <text x="232" y="420">...</text>
                <text x="216" y="436">}</text>
                <text x="416" y="468">KUDOS</text>
                <text x="472" y="468">status:</text>
                <text x="428" y="484">CTX_OLD:</text>
                <text x="476" y="484">-,</text>
                <text x="496" y="484">-</text>
                <text x="420" y="500">State:</text>
                <text x="468" y="500">BUSY</text>
                <text x="512" y="500">(0,1)</text>
                <text x="428" y="548">Generate</text>
                <text x="480" y="548">N2,</text>
                <text x="508" y="548">X2</text>
                <text x="424" y="580">CTX_NEW</text>
                <text x="464" y="580">=</text>
                <text x="516" y="580">updateCtx(</text>
                <text x="484" y="596">X2</text>
                <text x="532" y="596">N2),</text>
                <text x="484" y="612">X1</text>
                <text x="528" y="612">N1)</text>
                <text x="504" y="628">CTX_OLD</text>
                <text x="544" y="628">)</text>
                <text x="284" y="660">Response</text>
                <text x="332" y="660">#1</text>
                <text x="424" y="676">Protect</text>
                <text x="476" y="676">with</text>
                <text x="528" y="676">CTX_NEW</text>
                <text x="236" y="692">OSCORE</text>
                <text x="272" y="692">{</text>
                <text x="232" y="708">...</text>
                <text x="416" y="708">KUDOS</text>
                <text x="472" y="708">status:</text>
                <text x="32" y="724">CTX_NEW</text>
                <text x="72" y="724">=</text>
                <text x="124" y="724">updateCtx(</text>
                <text x="248" y="724">Partial</text>
                <text x="296" y="724">IV:</text>
                <text x="320" y="724">0</text>
                <text x="428" y="724">CTX_OLD:</text>
                <text x="480" y="724">X2,</text>
                <text x="508" y="724">N2</text>
                <text x="92" y="740">X1</text>
                <text x="136" y="740">N1,</text>
                <text x="232" y="740">...</text>
                <text x="420" y="740">State:</text>
                <text x="480" y="740">PENDING</text>
                <text x="536" y="740">(1,1)</text>
                <text x="92" y="756">X2</text>
                <text x="132" y="756">N2</text>
                <text x="224" y="756">d</text>
                <text x="256" y="756">flag:</text>
                <text x="288" y="756">1</text>
                <text x="112" y="772">CTX_OLD</text>
                <text x="152" y="772">)</text>
                <text x="228" y="772">x:</text>
                <text x="252" y="772">X2</text>
                <text x="272" y="772">=</text>
                <text x="328" y="772">b'01000111'</text>
                <text x="244" y="788">nonce:</text>
                <text x="284" y="788">N2</text>
                <text x="28" y="804">Verify</text>
                <text x="76" y="804">with</text>
                <text x="128" y="804">CTX_NEW</text>
                <text x="232" y="804">...</text>
                <text x="216" y="820">}</text>
                <text x="8" y="836">/</text>
                <text x="32" y="836">key</text>
                <text x="100" y="836">confirmation</text>
                <text x="160" y="836">/</text>
                <text x="256" y="836">Encrypted</text>
                <text x="328" y="836">Payload</text>
                <text x="368" y="836">{</text>
                <text x="240" y="852">...</text>
                <text x="36" y="868">Pre-IDLE</text>
                <text x="100" y="868">steps:</text>
                <text x="216" y="868">}</text>
                <text x="28" y="884">Delete</text>
                <text x="92" y="884">CTX_TEMP</text>
                <text x="28" y="900">Delete</text>
                <text x="92" y="900">CTX_OLD,</text>
                <text x="144" y="900">X1,</text>
                <text x="172" y="900">N1</text>
                <text x="24" y="932">KUDOS</text>
                <text x="80" y="932">status:</text>
                <text x="36" y="948">CTX_NEW:</text>
                <text x="84" y="948">-,</text>
                <text x="104" y="948">-</text>
                <text x="28" y="964">State:</text>
                <text x="76" y="964">IDLE</text>
                <text x="120" y="964">(0,0)</text>
                <text x="16" y="1012">The</text>
                <text x="60" y="1012">actual</text>
                <text x="104" y="1012">key</text>
                <text x="148" y="1012">update</text>
                <text x="208" y="1012">process</text>
                <text x="260" y="1012">ends</text>
                <text x="304" y="1012">here.</text>
                <text x="16" y="1028">The</text>
                <text x="48" y="1028">two</text>
                <text x="88" y="1028">peers</text>
                <text x="128" y="1028">can</text>
                <text x="160" y="1028">use</text>
                <text x="192" y="1028">the</text>
                <text x="224" y="1028">new</text>
                <text x="276" y="1028">Security</text>
                <text x="344" y="1028">Context</text>
                <text x="412" y="1028">CTX_NEW.</text>
                <text x="280" y="1076">Request</text>
                <text x="324" y="1076">#2</text>
                <text x="32" y="1092">Protect</text>
                <text x="84" y="1092">with</text>
                <text x="136" y="1092">CTX_NEW</text>
                <text x="416" y="1092">/temp</text>
                <text x="236" y="1108">OSCORE</text>
                <text x="272" y="1108">{</text>
                <text x="232" y="1124">...</text>
                <text x="216" y="1140">}</text>
                <text x="420" y="1140">Verify</text>
                <text x="468" y="1140">with</text>
                <text x="520" y="1140">CTX_NEW</text>
                <text x="248" y="1156">Encrypted</text>
                <text x="320" y="1156">Payload</text>
                <text x="360" y="1156">{</text>
                <text x="264" y="1172">Application</text>
                <text x="344" y="1172">Payload</text>
                <text x="400" y="1172">/</text>
                <text x="424" y="1172">key</text>
                <text x="492" y="1172">confirmation</text>
                <text x="552" y="1172">/</text>
                <text x="232" y="1188">...</text>
                <text x="216" y="1204">}</text>
                <text x="428" y="1204">Pre-IDLE</text>
                <text x="492" y="1204">steps:</text>
                <text x="420" y="1220">Delete</text>
                <text x="484" y="1220">CTX_TEMP</text>
                <text x="420" y="1236">Delete</text>
                <text x="484" y="1236">CTX_OLD,</text>
                <text x="536" y="1236">X2,</text>
                <text x="564" y="1236">N2</text>
                <text x="416" y="1268">KUDOS</text>
                <text x="472" y="1268">status:</text>
                <text x="428" y="1284">CTX_NEW:</text>
                <text x="476" y="1284">-,</text>
                <text x="496" y="1284">-</text>
                <text x="420" y="1300">State:</text>
                <text x="468" y="1300">IDLE</text>
                <text x="512" y="1300">(0,0)</text>
                <text x="284" y="1316">Response</text>
                <text x="332" y="1316">#2</text>
                <text x="424" y="1332">Protect</text>
                <text x="476" y="1332">with</text>
                <text x="528" y="1332">CTX_NEW</text>
                <text x="28" y="1348">Verify</text>
                <text x="76" y="1348">with</text>
                <text x="128" y="1348">CTX_NEW</text>
                <text x="236" y="1348">OSCORE</text>
                <text x="272" y="1348">{</text>
                <text x="232" y="1364">...</text>
                <text x="216" y="1380">}</text>
                <text x="248" y="1396">Encrypted</text>
                <text x="320" y="1396">Payload</text>
                <text x="360" y="1396">{</text>
                <text x="232" y="1412">...</text>
                <text x="264" y="1428">Application</text>
                <text x="344" y="1428">Payload</text>
                <text x="216" y="1444">}</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
KUDOS status:                                         KUDOS status:
- CTX_OLD: -,-                                        - CTX_OLD: -,-
- State: IDLE (0,0)                                   - State: IDLE (0,0)
                     Client                  Server
                        |                      |
Generate N1, X1         |                      |
                        |                      |
CTX_TEMP = updateCtx(   |                      |
        X1 | N1,        |                      |
        0x,             |                      |
        CTX_OLD )       |                      |
                        |                      |
                        |      Request #1      |
Protect with CTX_TEMP   +--------------------->| /.well-known/kudos
                        | OSCORE {             |
KUDOS status:           |  ...                 | CTX_TEMP = updateCtx(
CTX_OLD: X1, N1         |  Partial IV: 0       |         0x,
State: BUSY (1,0)       |  ...                 |         X1 | N1,
                        |  d flag: 1           |         CTX_OLD )
                        |  x: X1 = b'00000111' |
                        |  nonce: N1           | Verify with CTX_TEMP
                        |  ...                 |
                        | }                    |
                        | Encrypted Payload {  |
                        |  ...                 |
                        | }                    |
                        |                      |
                        |                      | KUDOS status:
                        |                      | CTX_OLD: -, -
                        |                      | State: BUSY (0,1)
                        |                      |
                        |                      |
                        |                      | Generate N2, X2
                        |                      |
                        |                      | CTX_NEW = updateCtx(
                        |                      |           X2 | N2),
                        |                      |           X1 | N1),
                        |                      |           CTX_OLD )
                        |                      |
                        |      Response #1     |
                        |<---------------------+ Protect with CTX_NEW
                        | OSCORE {             |
                        |  ...                 | KUDOS status:
CTX_NEW = updateCtx(    |  Partial IV: 0       | CTX_OLD: X2, N2
          X1 | N1,      |  ...                 | State: PENDING (1,1)
          X2 | N2 ,     |  d flag: 1           |
          CTX_OLD )     |  x: X2 = b'01000111' |
                        |  nonce: N2           |
Verify with CTX_NEW     |  ...                 |
                        | }                    |
/ key confirmation /    |  Encrypted Payload { |
                        |   ...                |
Pre-IDLE steps:         | }                    |
Delete CTX_TEMP         |                      |
Delete CTX_OLD, X1, N1  |                      |
                        |                      |
KUDOS status:           |                      |
CTX_NEW: -, -           |                      |
State: IDLE (0,0)       |                      |
                        |                      |

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 {  |
                        |  Application Payload | / key confirmation /
                        |  ...                 |
                        | }                    | Pre-IDLE steps:
                        |                      | Delete CTX_TEMP
                        |                      | Delete CTX_OLD, X2, N2
                        |                      |
                        |                      | KUDOS status:
                        |                      | CTX_NEW: -, -
                        |                      | State: IDLE (0,0)
                        |      Response #2     |
                        |<---------------------+ Protect with CTX_NEW
Verify with CTX_NEW     | OSCORE {             |
                        |  ...                 |
                        | }                    |
                        | Encrypted Payload {  |
                        |  ...                 |
                        |  Application Payload |
                        | }                    |
                        |                      |
]]></artwork>
        </artset>
      </section>
      <section anchor="successful-kudos-execution-initiated-with-a-response-message">
        <name>Successful KUDOS Execution Initiated with a Response Message</name>
        <t>The following shows a successful execution of KUDOS where KUDOS is started by the server sending a divergent KUDOS message as a CoAP response.</t>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1472" width="592" viewBox="0 0 592 1472" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 112,688 L 112,704" fill="none" stroke="black"/>
              <path d="M 200,96 L 200,1120" fill="none" stroke="black"/>
              <path d="M 200,1200 L 200,1456" fill="none" stroke="black"/>
              <path d="M 384,96 L 384,1120" fill="none" stroke="black"/>
              <path d="M 384,1200 L 384,1456" fill="none" stroke="black"/>
              <path d="M 504,832 L 504,848" fill="none" stroke="black"/>
              <path d="M 200,128 L 376,128" fill="none" stroke="black"/>
              <path d="M 208,336 L 384,336" fill="none" stroke="black"/>
              <path d="M 200,768 L 376,768" fill="none" stroke="black"/>
              <path d="M 208,1232 L 384,1232" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="384,768 372,762.4 372,773.6" fill="black" transform="rotate(0,376,768)"/>
              <polygon class="arrowhead" points="384,128 372,122.4 372,133.6" fill="black" transform="rotate(0,376,128)"/>
              <polygon class="arrowhead" points="216,1232 204,1226.4 204,1237.6" fill="black" transform="rotate(180,208,1232)"/>
              <polygon class="arrowhead" points="216,336 204,330.4 204,341.6" fill="black" transform="rotate(180,208,336)"/>
              <g class="text">
                <text x="24" y="36">KUDOS</text>
                <text x="80" y="36">status:</text>
                <text x="456" y="36">KUDOS</text>
                <text x="512" y="36">status:</text>
                <text x="8" y="52">-</text>
                <text x="52" y="52">CTX_OLD:</text>
                <text x="104" y="52">-,-</text>
                <text x="440" y="52">-</text>
                <text x="484" y="52">CTX_OLD:</text>
                <text x="536" y="52">-,-</text>
                <text x="8" y="68">-</text>
                <text x="44" y="68">State:</text>
                <text x="92" y="68">IDLE</text>
                <text x="136" y="68">(0,0)</text>
                <text x="440" y="68">-</text>
                <text x="476" y="68">State:</text>
                <text x="524" y="68">IDLE</text>
                <text x="568" y="68">(0,0)</text>
                <text x="204" y="84">Client</text>
                <text x="388" y="84">Server</text>
                <text x="280" y="116">Request</text>
                <text x="324" y="116">#1</text>
                <text x="32" y="132">Protect</text>
                <text x="84" y="132">with</text>
                <text x="136" y="132">CTX_OLD</text>
                <text x="416" y="132">/temp</text>
                <text x="236" y="148">OSCORE</text>
                <text x="272" y="148">{</text>
                <text x="232" y="164">...</text>
                <text x="216" y="180">}</text>
                <text x="420" y="180">Verify</text>
                <text x="468" y="180">with</text>
                <text x="520" y="180">CTX_OLD</text>
                <text x="248" y="196">Encrypted</text>
                <text x="320" y="196">Payload</text>
                <text x="360" y="196">{</text>
                <text x="232" y="212">...</text>
                <text x="428" y="212">Generate</text>
                <text x="480" y="212">N1,</text>
                <text x="508" y="212">X1</text>
                <text x="264" y="228">Application</text>
                <text x="344" y="228">Payload</text>
                <text x="216" y="244">}</text>
                <text x="428" y="244">CTX_TEMP</text>
                <text x="472" y="244">=</text>
                <text x="524" y="244">updateCtx(</text>
                <text x="468" y="260">X1</text>
                <text x="488" y="260">|</text>
                <text x="512" y="260">N1,</text>
                <text x="472" y="276">0x,</text>
                <text x="488" y="292">CTX_OLD</text>
                <text x="528" y="292">)</text>
                <text x="284" y="324">Response</text>
                <text x="332" y="324">#1</text>
                <text x="424" y="340">Protect</text>
                <text x="476" y="340">with</text>
                <text x="532" y="340">CTX_TEMP</text>
                <text x="236" y="356">OSCORE</text>
                <text x="272" y="356">{</text>
                <text x="232" y="372">...</text>
                <text x="416" y="372">KUDOS</text>
                <text x="472" y="372">status:</text>
                <text x="36" y="388">CTX_TEMP</text>
                <text x="80" y="388">=</text>
                <text x="132" y="388">updateCtx(</text>
                <text x="248" y="388">Partial</text>
                <text x="296" y="388">IV:</text>
                <text x="320" y="388">0</text>
                <text x="428" y="388">CTX_OLD:</text>
                <text x="480" y="388">X1,</text>
                <text x="508" y="388">N1</text>
                <text x="80" y="404">0x,</text>
                <text x="232" y="404">...</text>
                <text x="420" y="404">State:</text>
                <text x="468" y="404">BUSY</text>
                <text x="512" y="404">(1,0)</text>
                <text x="76" y="420">X1</text>
                <text x="96" y="420">|</text>
                <text x="120" y="420">N1,</text>
                <text x="224" y="420">d</text>
                <text x="256" y="420">flag:</text>
                <text x="288" y="420">1</text>
                <text x="96" y="436">CTX_OLD</text>
                <text x="136" y="436">)</text>
                <text x="228" y="436">x:</text>
                <text x="252" y="436">X1</text>
                <text x="272" y="436">=</text>
                <text x="328" y="436">b'00000111'</text>
                <text x="244" y="452">nonce:</text>
                <text x="284" y="452">N1</text>
                <text x="28" y="468">Verify</text>
                <text x="76" y="468">with</text>
                <text x="132" y="468">CTX_TEMP</text>
                <text x="232" y="468">...</text>
                <text x="216" y="484">}</text>
                <text x="248" y="500">Encrypted</text>
                <text x="320" y="500">Payload</text>
                <text x="360" y="500">{</text>
                <text x="224" y="516">...</text>
                <text x="216" y="532">}</text>
                <text x="24" y="564">KUDOS</text>
                <text x="80" y="564">status:</text>
                <text x="8" y="580">-</text>
                <text x="52" y="580">CTX_OLD:</text>
                <text x="104" y="580">-,-</text>
                <text x="8" y="596">-</text>
                <text x="44" y="596">State:</text>
                <text x="92" y="596">BUSY</text>
                <text x="136" y="596">(0,1)</text>
                <text x="36" y="644">Generate</text>
                <text x="88" y="644">N2,</text>
                <text x="116" y="644">X2</text>
                <text x="32" y="676">CTX_NEW</text>
                <text x="72" y="676">=</text>
                <text x="124" y="676">updateCtx(</text>
                <text x="92" y="692">X2</text>
                <text x="136" y="692">N2,</text>
                <text x="92" y="708">X1</text>
                <text x="136" y="708">N1,</text>
                <text x="112" y="724">CTX_OLD</text>
                <text x="152" y="724">)</text>
                <text x="280" y="756">Request</text>
                <text x="324" y="756">#2</text>
                <text x="32" y="772">Protect</text>
                <text x="84" y="772">with</text>
                <text x="136" y="772">CTX_NEW</text>
                <text x="468" y="772">/.well-known/kudos</text>
                <text x="236" y="788">OSCORE</text>
                <text x="272" y="788">{</text>
                <text x="24" y="804">KUDOS</text>
                <text x="80" y="804">status:</text>
                <text x="232" y="804">...</text>
                <text x="8" y="820">-</text>
                <text x="52" y="820">CTX_OLD:</text>
                <text x="104" y="820">X2,</text>
                <text x="132" y="820">N2</text>
                <text x="224" y="820">d</text>
                <text x="256" y="820">flag:</text>
                <text x="288" y="820">1</text>
                <text x="424" y="820">CTX_NEW</text>
                <text x="464" y="820">=</text>
                <text x="516" y="820">updateCtx(</text>
                <text x="8" y="836">-</text>
                <text x="44" y="836">State:</text>
                <text x="104" y="836">PENDING</text>
                <text x="160" y="836">(1,1)</text>
                <text x="228" y="836">x:</text>
                <text x="252" y="836">X2</text>
                <text x="272" y="836">=</text>
                <text x="328" y="836">b'01000111'</text>
                <text x="484" y="836">X1</text>
                <text x="528" y="836">N1,</text>
                <text x="244" y="852">nonce:</text>
                <text x="284" y="852">N2</text>
                <text x="484" y="852">X2</text>
                <text x="528" y="852">N2,</text>
                <text x="232" y="868">...</text>
                <text x="504" y="868">CTX_OLD</text>
                <text x="544" y="868">)</text>
                <text x="216" y="884">}</text>
                <text x="248" y="900">Encrypted</text>
                <text x="320" y="900">Payload</text>
                <text x="360" 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="232" y="916">...</text>
                <text x="264" y="932">Application</text>
                <text x="344" y="932">Payload</text>
                <text x="400" y="932">/</text>
                <text x="424" y="932">key</text>
                <text x="492" y="932">confirmation</text>
                <text x="552" y="932">/</text>
                <text x="216" y="948">}</text>
                <text x="428" y="964">Pre-IDLE</text>
                <text x="492" y="964">steps:</text>
                <text x="420" y="980">Delete</text>
                <text x="484" y="980">CTX_TEMP</text>
                <text x="420" y="996">Delete</text>
                <text x="484" y="996">CTX_OLD,</text>
                <text x="536" y="996">X1,</text>
                <text x="564" y="996">N1</text>
                <text x="416" y="1028">KUDOS</text>
                <text x="472" y="1028">status:</text>
                <text x="400" y="1044">-</text>
                <text x="444" y="1044">CTX_NEW:</text>
                <text x="496" y="1044">-,-</text>
                <text x="400" y="1060">-</text>
                <text x="436" y="1060">State:</text>
                <text x="484" y="1060">IDLE</text>
                <text x="528" y="1060">(0,0)</text>
                <text x="16" y="1156">The</text>
                <text x="60" y="1156">actual</text>
                <text x="104" y="1156">key</text>
                <text x="148" y="1156">update</text>
                <text x="208" y="1156">process</text>
                <text x="260" y="1156">ends</text>
                <text x="304" y="1156">here.</text>
                <text x="16" y="1172">The</text>
                <text x="48" y="1172">two</text>
                <text x="88" y="1172">peers</text>
                <text x="128" y="1172">can</text>
                <text x="160" y="1172">use</text>
                <text x="192" y="1172">the</text>
                <text x="224" y="1172">new</text>
                <text x="276" y="1172">Security</text>
                <text x="344" y="1172">Context</text>
                <text x="412" y="1172">CTX_NEW.</text>
                <text x="284" y="1220">Response</text>
                <text x="332" y="1220">#2</text>
                <text x="424" y="1236">Protect</text>
                <text x="476" y="1236">with</text>
                <text x="528" y="1236">CTX_NEW</text>
                <text x="236" y="1252">OSCORE</text>
                <text x="272" y="1252">{</text>
                <text x="232" y="1268">...</text>
                <text x="28" y="1284">Verify</text>
                <text x="76" y="1284">with</text>
                <text x="128" y="1284">CTX_NEW</text>
                <text x="216" y="1284">}</text>
                <text x="248" y="1300">Encrypted</text>
                <text x="320" y="1300">Payload</text>
                <text x="360" y="1300">{</text>
                <text x="8" y="1316">/</text>
                <text x="32" y="1316">key</text>
                <text x="100" y="1316">confirmation</text>
                <text x="160" y="1316">/</text>
                <text x="232" y="1316">...</text>
                <text x="264" y="1332">Application</text>
                <text x="344" y="1332">Payload</text>
                <text x="36" y="1348">Pre-IDLE</text>
                <text x="100" y="1348">steps:</text>
                <text x="216" y="1348">}</text>
                <text x="28" y="1364">Delete</text>
                <text x="92" y="1364">CTX_TEMP</text>
                <text x="28" y="1380">Delete</text>
                <text x="92" y="1380">CTX_OLD,</text>
                <text x="144" y="1380">X1,</text>
                <text x="172" y="1380">N1</text>
                <text x="24" y="1412">KUDOS</text>
                <text x="80" y="1412">status:</text>
                <text x="36" y="1428">CTX_NEW:</text>
                <text x="84" y="1428">-,</text>
                <text x="104" y="1428">-</text>
                <text x="28" y="1444">State:</text>
                <text x="76" y="1444">IDLE</text>
                <text x="120" y="1444">(0,0)</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
KUDOS status:                                         KUDOS status:
- CTX_OLD: -,-                                        - CTX_OLD: -,-
- State: IDLE (0,0)                                   - State: IDLE (0,0)
                      Client                 Server
                        |                      |
                        |      Request #1      |
Protect with CTX_OLD    +--------------------->| /temp
                        | OSCORE {             |
                        |  ...                 |
                        | }                    | Verify with CTX_OLD
                        | Encrypted Payload {  |
                        |  ...                 | Generate N1, X1
                        |  Application Payload |
                        | }                    | CTX_TEMP = updateCtx(
                        |                      |         X1 | N1,
                        |                      |         0x,
                        |                      |         CTX_OLD )
                        |                      |
                        |      Response #1     |
                        |<---------------------+ Protect with CTX_TEMP
                        | OSCORE {             |
                        |  ...                 | KUDOS status:
CTX_TEMP = updateCtx(   |  Partial IV: 0       | CTX_OLD: X1, N1
        0x,             |  ...                 | State: BUSY (1,0)
        X1 | N1,        |  d flag: 1           |
        CTX_OLD )       |  x: X1 = b'00000111' |
                        |  nonce: N1           |
Verify with CTX_TEMP    |  ...                 |
                        | }                    |
                        | Encrypted Payload {  |
                        | ...                  |
                        | }                    |
                        |                      |
KUDOS status:           |                      |
- CTX_OLD: -,-          |                      |
- State: BUSY (0,1)     |                      |
                        |                      |
                        |                      |
Generate N2, X2         |                      |
                        |                      |
CTX_NEW = updateCtx(    |                      |
          X2 | N2,      |                      |
          X1 | N1,      |                      |
          CTX_OLD )     |                      |
                        |                      |
                        |      Request #2      |
Protect with CTX_NEW    +--------------------->| /.well-known/kudos
                        | OSCORE {             |
KUDOS status:           |  ...                 |
- CTX_OLD: X2, N2       |  d flag: 1           | CTX_NEW = updateCtx(
- State: PENDING (1,1)  |  x: X2 = b'01000111' |           X1 | N1,
                        |  nonce: N2           |           X2 | N2,
                        |  ...                 |           CTX_OLD )
                        | }                    |
                        | Encrypted Payload {  | Verify with CTX_NEW
                        |  ...                 |
                        |  Application Payload | / key confirmation /
                        | }                    |
                        |                      | Pre-IDLE steps:
                        |                      | Delete CTX_TEMP
                        |                      | Delete CTX_OLD, X1, N1
                        |                      |
                        |                      | KUDOS status:
                        |                      | - CTX_NEW: -,-
                        |                      | - State: IDLE (0,0)
                        |                      |
                        |                      |
                        |                      |
                        |                      |

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 {  |
/ key confirmation /    |  ...                 |
                        |  Application Payload |
Pre-IDLE steps:         | }                    |
Delete CTX_TEMP         |                      |
Delete CTX_OLD, X1, N1  |                      |
                        |                      |
KUDOS status:           |                      |
CTX_NEW: -, -           |                      |
State: IDLE (0,0)       |                      |
                        |                      |
]]></artwork>
        </artset>
      </section>
      <section anchor="successful-kudos-execution-initiated-with-a-request-message-with-non-capable-server-that-has-rebooted">
        <name>Successful KUDOS Execution Initiated with a Request Message, with Non-capable Server that has Rebooted</name>
        <t>The peers have run KUDOS prior to this KUDOS execution and have learned that they must from now on run KUDOS only in no-FS mode.</t>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1552" width="648" viewBox="0 0 648 1552" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 112,752 L 112,768" fill="none" stroke="black"/>
              <path d="M 200,112 L 200,1024" fill="none" stroke="black"/>
              <path d="M 200,1104 L 200,1520" fill="none" stroke="black"/>
              <path d="M 384,112 L 384,1024" fill="none" stroke="black"/>
              <path d="M 384,1104 L 384,1520" fill="none" stroke="black"/>
              <path d="M 504,608 L 504,624" fill="none" stroke="black"/>
              <path d="M 528,496 L 528,504" fill="none" stroke="black"/>
              <path d="M 200,256 L 376,256" fill="none" stroke="black"/>
              <path d="M 208,688 L 384,688" fill="none" stroke="black"/>
              <path d="M 200,1136 L 376,1136" fill="none" stroke="black"/>
              <path d="M 208,1392 L 384,1392" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="384,1136 372,1130.4 372,1141.6" fill="black" transform="rotate(0,376,1136)"/>
              <polygon class="arrowhead" points="384,256 372,250.4 372,261.6" fill="black" transform="rotate(0,376,256)"/>
              <polygon class="arrowhead" points="216,1392 204,1386.4 204,1397.6" fill="black" transform="rotate(180,208,1392)"/>
              <polygon class="arrowhead" points="216,688 204,682.4 204,693.6" fill="black" transform="rotate(180,208,688)"/>
              <g class="text">
                <text x="24" y="36">KUDOS</text>
                <text x="80" y="36">status:</text>
                <text x="456" y="36">KUDOS</text>
                <text x="512" y="36">status:</text>
                <text x="8" y="52">-</text>
                <text x="52" y="52">CTX_OLD:</text>
                <text x="104" y="52">-,-</text>
                <text x="440" y="52">-</text>
                <text x="460" y="52">No</text>
                <text x="504" y="52">CTX_OLD</text>
                <text x="552" y="52">due</text>
                <text x="580" y="52">to</text>
                <text x="620" y="52">reboot</text>
                <text x="8" y="68">-</text>
                <text x="44" y="68">State:</text>
                <text x="92" y="68">IDLE</text>
                <text x="136" y="68">(0,0)</text>
                <text x="440" y="68">-</text>
                <text x="476" y="68">State:</text>
                <text x="524" y="68">IDLE</text>
                <text x="568" y="68">(0,0)</text>
                <text x="196" y="84">Client</text>
                <text x="388" y="84">Server</text>
                <text x="200" y="100">(initiator)</text>
                <text x="384" y="100">(responder)</text>
                <text x="36" y="132">Generate</text>
                <text x="88" y="132">N1,</text>
                <text x="116" y="132">X1</text>
                <text x="36" y="164">CTX_TEMP</text>
                <text x="80" y="164">=</text>
                <text x="132" y="164">updateCtx(</text>
                <text x="76" y="180">X1</text>
                <text x="96" y="180">|</text>
                <text x="120" y="180">N1,</text>
                <text x="80" y="196">0x,</text>
                <text x="120" y="212">CTX_BOOTSTRAP</text>
                <text x="184" y="212">)</text>
                <text x="280" y="244">Request</text>
                <text x="324" y="244">#1</text>
                <text x="32" y="260">Protect</text>
                <text x="84" y="260">with</text>
                <text x="140" y="260">CTX_TEMP</text>
                <text x="468" y="260">/.well-known/kudos</text>
                <text x="236" y="276">OSCORE</text>
                <text x="272" y="276">{</text>
                <text x="24" y="292">KUDOS</text>
                <text x="80" y="292">status:</text>
                <text x="232" y="292">...</text>
                <text x="428" y="292">CTX_TEMP</text>
                <text x="472" y="292">=</text>
                <text x="524" y="292">updateCtx(</text>
                <text x="60" y="308">CTX_BOOTSTRAP:</text>
                <text x="136" y="308">X1,</text>
                <text x="164" y="308">N1</text>
                <text x="248" y="308">Partial</text>
                <text x="296" y="308">IV:</text>
                <text x="320" y="308">0</text>
                <text x="472" y="308">0x,</text>
                <text x="28" y="324">State:</text>
                <text x="76" y="324">BUSY</text>
                <text x="120" y="324">(1,0)</text>
                <text x="232" y="324">...</text>
                <text x="468" y="324">X1</text>
                <text x="488" y="324">|</text>
                <text x="512" y="324">N1,</text>
                <text x="224" y="340">d</text>
                <text x="256" y="340">flag:</text>
                <text x="288" y="340">1</text>
                <text x="512" y="340">CTX_BOOTSTRAP</text>
                <text x="576" y="340">)</text>
                <text x="228" y="356">x:</text>
                <text x="252" y="356">X1</text>
                <text x="272" y="356">=</text>
                <text x="328" y="356">b'00010111'</text>
                <text x="244" y="372">nonce:</text>
                <text x="284" y="372">N1</text>
                <text x="420" y="372">Verify</text>
                <text x="468" y="372">with</text>
                <text x="524" y="372">CTX_TEMP</text>
                <text x="232" y="388">...</text>
                <text x="216" y="404">}</text>
                <text x="248" y="420">Encrypted</text>
                <text x="320" y="420">Payload</text>
                <text x="360" y="420">{</text>
                <text x="232" y="436">...</text>
                <text x="216" y="452">}</text>
                <text x="416" y="484">KUDOS</text>
                <text x="472" y="484">status:</text>
                <text x="452" y="500">CTX_BOOTSTRAP:</text>
                <text x="520" y="500">-</text>
                <text x="536" y="500">-</text>
                <text x="420" y="516">State:</text>
                <text x="468" y="516">BUSY</text>
                <text x="512" y="516">(0,1)</text>
                <text x="428" y="564">Generate</text>
                <text x="480" y="564">N2,</text>
                <text x="508" y="564">X2</text>
                <text x="424" y="596">CTX_NEW</text>
                <text x="464" y="596">=</text>
                <text x="516" y="596">updateCtx(</text>
                <text x="484" y="612">X2</text>
                <text x="532" y="612">N2),</text>
                <text x="484" y="628">X1</text>
                <text x="532" y="628">N1),</text>
                <text x="528" y="644">CTX_BOOTSTRAP</text>
                <text x="592" y="644">)</text>
                <text x="284" y="676">Response</text>
                <text x="332" y="676">#1</text>
                <text x="424" y="692">Protect</text>
                <text x="476" y="692">with</text>
                <text x="528" y="692">CTX_NEW</text>
                <text x="236" y="708">OSCORE</text>
                <text x="272" y="708">{</text>
                <text x="232" y="724">...</text>
                <text x="416" y="724">KUDOS</text>
                <text x="472" y="724">status:</text>
                <text x="32" y="740">CTX_NEW</text>
                <text x="72" y="740">=</text>
                <text x="124" y="740">updateCtx(</text>
                <text x="248" y="740">Partial</text>
                <text x="296" y="740">IV:</text>
                <text x="320" y="740">0</text>
                <text x="452" y="740">CTX_BOOTSTRAP:</text>
                <text x="528" y="740">X2,</text>
                <text x="556" y="740">N2</text>
                <text x="92" y="756">X1</text>
                <text x="136" y="756">N1,</text>
                <text x="232" y="756">...</text>
                <text x="420" y="756">State:</text>
                <text x="480" y="756">PENDING</text>
                <text x="536" y="756">(1,1)</text>
                <text x="92" y="772">X2</text>
                <text x="132" y="772">N2</text>
                <text x="152" y="772">,</text>
                <text x="224" y="772">d</text>
                <text x="256" y="772">flag:</text>
                <text x="288" y="772">1</text>
                <text x="140" y="788">CTX_BOOTSTRAP)</text>
                <text x="228" y="788">x:</text>
                <text x="252" y="788">X2</text>
                <text x="272" y="788">=</text>
                <text x="328" y="788">b'01010111'</text>
                <text x="244" y="804">nonce:</text>
                <text x="284" y="804">N2</text>
                <text x="28" y="820">Verify</text>
                <text x="76" y="820">with</text>
                <text x="128" y="820">CTX_NEW</text>
                <text x="232" y="820">...</text>
                <text x="216" y="836">}</text>
                <text x="8" y="852">/</text>
                <text x="32" y="852">key</text>
                <text x="100" y="852">confirmation</text>
                <text x="160" y="852">/</text>
                <text x="256" y="852">Encrypted</text>
                <text x="328" y="852">Payload</text>
                <text x="368" y="852">{</text>
                <text x="240" y="868">...</text>
                <text x="36" y="884">Pre-IDLE</text>
                <text x="100" y="884">steps:</text>
                <text x="216" y="884">}</text>
                <text x="28" y="900">Delete</text>
                <text x="112" y="900">CTX_BOOTSTRAP</text>
                <text x="44" y="916">Delete</text>
                <text x="88" y="916">X1,</text>
                <text x="116" y="916">N1</text>
                <text x="28" y="932">Delete</text>
                <text x="92" y="932">CTX_TEMP</text>
                <text x="28" y="948">Delete</text>
                <text x="88" y="948">CTX_OLD</text>
                <text x="24" y="980">KUDOS</text>
                <text x="80" y="980">status:</text>
                <text x="36" y="996">CTX_NEW:</text>
                <text x="84" y="996">-,</text>
                <text x="104" y="996">-</text>
                <text x="28" y="1012">State:</text>
                <text x="76" y="1012">IDLE</text>
                <text x="120" y="1012">(0,0)</text>
                <text x="16" y="1060">The</text>
                <text x="60" y="1060">actual</text>
                <text x="104" y="1060">key</text>
                <text x="148" y="1060">update</text>
                <text x="208" y="1060">process</text>
                <text x="260" y="1060">ends</text>
                <text x="304" y="1060">here.</text>
                <text x="16" y="1076">The</text>
                <text x="48" y="1076">two</text>
                <text x="88" y="1076">peers</text>
                <text x="128" y="1076">can</text>
                <text x="160" y="1076">use</text>
                <text x="192" y="1076">the</text>
                <text x="224" y="1076">new</text>
                <text x="276" y="1076">Security</text>
                <text x="344" y="1076">Context</text>
                <text x="412" y="1076">CTX_NEW.</text>
                <text x="280" y="1124">Request</text>
                <text x="324" y="1124">#2</text>
                <text x="32" y="1140">Protect</text>
                <text x="84" y="1140">with</text>
                <text x="136" y="1140">CTX_NEW</text>
                <text x="416" y="1140">/temp</text>
                <text x="236" y="1156">OSCORE</text>
                <text x="272" y="1156">{</text>
                <text x="232" y="1172">...</text>
                <text x="216" y="1188">}</text>
                <text x="420" y="1188">Verify</text>
                <text x="468" y="1188">with</text>
                <text x="520" y="1188">CTX_NEW</text>
                <text x="248" y="1204">Encrypted</text>
                <text x="320" y="1204">Payload</text>
                <text x="360" y="1204">{</text>
                <text x="264" y="1220">Application</text>
                <text x="344" y="1220">Payload</text>
                <text x="400" y="1220">/</text>
                <text x="424" y="1220">key</text>
                <text x="492" y="1220">confirmation</text>
                <text x="552" y="1220">/</text>
                <text x="232" y="1236">...</text>
                <text x="216" y="1252">}</text>
                <text x="428" y="1252">Pre-IDLE</text>
                <text x="492" y="1252">steps:</text>
                <text x="420" y="1268">Delete</text>
                <text x="504" y="1268">CTX_BOOTSTRAP</text>
                <text x="436" y="1284">Delete</text>
                <text x="480" y="1284">X2,</text>
                <text x="508" y="1284">N2</text>
                <text x="420" y="1300">Delete</text>
                <text x="484" y="1300">CTX_TEMP</text>
                <text x="416" y="1332">KUDOS</text>
                <text x="472" y="1332">status:</text>
                <text x="428" y="1348">CTX_NEW:</text>
                <text x="476" y="1348">-,</text>
                <text x="496" y="1348">-</text>
                <text x="420" y="1364">State:</text>
                <text x="468" y="1364">IDLE</text>
                <text x="512" y="1364">(0,0)</text>
                <text x="284" y="1380">Response</text>
                <text x="332" y="1380">#2</text>
                <text x="424" y="1396">Protect</text>
                <text x="476" y="1396">with</text>
                <text x="528" y="1396">CTX_NEW</text>
                <text x="28" y="1412">Verify</text>
                <text x="76" y="1412">with</text>
                <text x="128" y="1412">CTX_NEW</text>
                <text x="236" y="1412">OSCORE</text>
                <text x="272" y="1412">{</text>
                <text x="232" y="1428">...</text>
                <text x="216" y="1444">}</text>
                <text x="248" y="1460">Encrypted</text>
                <text x="320" y="1460">Payload</text>
                <text x="360" y="1460">{</text>
                <text x="232" y="1476">...</text>
                <text x="264" y="1492">Application</text>
                <text x="344" y="1492">Payload</text>
                <text x="216" y="1508">}</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
KUDOS status:                                         KUDOS status:
- CTX_OLD: -,-                                        - No CTX_OLD due to reboot
- State: IDLE (0,0)                                   - State: IDLE (0,0)
                     Client                  Server
                   (initiator)            (responder)
                        |                      |
Generate N1, X1         |                      |
                        |                      |
CTX_TEMP = updateCtx(   |                      |
        X1 | N1,        |                      |
        0x,             |                      |
        CTX_BOOTSTRAP ) |                      |
                        |                      |
                        |      Request #1      |
Protect with CTX_TEMP   +--------------------->| /.well-known/kudos
                        | OSCORE {             |
KUDOS status:           |  ...                 | CTX_TEMP = updateCtx(
CTX_BOOTSTRAP: X1, N1   |  Partial IV: 0       |         0x,
State: BUSY (1,0)       |  ...                 |         X1 | N1,
                        |  d flag: 1           |         CTX_BOOTSTRAP )
                        |  x: X1 = b'00010111' |
                        |  nonce: N1           | Verify with CTX_TEMP
                        |  ...                 |
                        | }                    |
                        | Encrypted Payload {  |
                        |  ...                 |
                        | }                    |
                        |                      |
                        |                      | KUDOS status:
                        |                      | CTX_BOOTSTRAP: -,-
                        |                      | State: BUSY (0,1)
                        |                      |
                        |                      |
                        |                      | Generate N2, X2
                        |                      |
                        |                      | CTX_NEW = updateCtx(
                        |                      |           X2 | N2),
                        |                      |           X1 | N1),
                        |                      |           CTX_BOOTSTRAP )
                        |                      |
                        |      Response #1     |
                        |<---------------------+ Protect with CTX_NEW
                        | OSCORE {             |
                        |  ...                 | KUDOS status:
CTX_NEW = updateCtx(    |  Partial IV: 0       | CTX_BOOTSTRAP: X2, N2
          X1 | N1,      |  ...                 | State: PENDING (1,1)
          X2 | N2 ,     |  d flag: 1           |
          CTX_BOOTSTRAP)|  x: X2 = b'01010111' |
                        |  nonce: N2           |
Verify with CTX_NEW     |  ...                 |
                        | }                    |
/ key confirmation /    |  Encrypted Payload { |
                        |   ...                |
Pre-IDLE steps:         | }                    |
Delete CTX_BOOTSTRAP    |                      |
  Delete X1, N1         |                      |
Delete CTX_TEMP         |                      |
Delete CTX_OLD          |                      |
                        |                      |
KUDOS status:           |                      |
CTX_NEW: -, -           |                      |
State: IDLE (0,0)       |                      |
                        |                      |

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 {  |
                        |  Application Payload | / key confirmation /
                        |  ...                 |
                        | }                    | Pre-IDLE steps:
                        |                      | Delete CTX_BOOTSTRAP
                        |                      |   Delete X2, N2
                        |                      | Delete CTX_TEMP
                        |                      |
                        |                      | KUDOS status:
                        |                      | CTX_NEW: -, -
                        |                      | State: IDLE (0,0)
                        |      Response #2     |
                        |<---------------------+ Protect with CTX_NEW
Verify with CTX_NEW     | OSCORE {             |
                        |  ...                 |
                        | }                    |
                        | Encrypted Payload {  |
                        |  ...                 |
                        |  Application Payload |
                        | }                    |
                        |                      |

]]></artwork>
        </artset>
      </section>
      <section anchor="successful-kudos-execution-initiated-with-a-request-message-where-the-client-executes-kudos-again-after-the-first-execution">
        <name>Successful KUDOS Execution Initiated with a Request Message, where the Client Executes KUDOS again after the first Execution</name>
        <t>A second KUDOS execution is started by the client immediately after a successful KUDOS key update.</t>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="2624" width="616" viewBox="0 0 616 2624" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 112,752 L 112,768" fill="none" stroke="black"/>
              <path d="M 112,1872 L 112,1888" fill="none" stroke="black"/>
              <path d="M 152,768 L 152,776" fill="none" stroke="black"/>
              <path d="M 152,1888 L 152,1896" fill="none" stroke="black"/>
              <path d="M 200,112 L 200,992" fill="none" stroke="black"/>
              <path d="M 200,1104 L 200,2112" fill="none" stroke="black"/>
              <path d="M 200,2192 L 200,2608" fill="none" stroke="black"/>
              <path d="M 384,112 L 384,992" fill="none" stroke="black"/>
              <path d="M 384,1104 L 384,2112" fill="none" stroke="black"/>
              <path d="M 384,2192 L 384,2608" fill="none" stroke="black"/>
              <path d="M 504,608 L 504,624" fill="none" stroke="black"/>
              <path d="M 504,1712 L 504,1728" fill="none" stroke="black"/>
              <path d="M 544,624 L 544,632" fill="none" stroke="black"/>
              <path d="M 544,1728 L 544,1736" fill="none" stroke="black"/>
              <path d="M 200,256 L 376,256" fill="none" stroke="black"/>
              <path d="M 208,688 L 384,688" fill="none" stroke="black"/>
              <path d="M 200,1248 L 376,1248" fill="none" stroke="black"/>
              <path d="M 208,1808 L 384,1808" fill="none" stroke="black"/>
              <path d="M 200,2224 L 376,2224" fill="none" stroke="black"/>
              <path d="M 208,2480 L 384,2480" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="384,2224 372,2218.4 372,2229.6" fill="black" transform="rotate(0,376,2224)"/>
              <polygon class="arrowhead" points="384,1248 372,1242.4 372,1253.6" fill="black" transform="rotate(0,376,1248)"/>
              <polygon class="arrowhead" points="384,256 372,250.4 372,261.6" fill="black" transform="rotate(0,376,256)"/>
              <polygon class="arrowhead" points="216,2480 204,2474.4 204,2485.6" fill="black" transform="rotate(180,208,2480)"/>
              <polygon class="arrowhead" points="216,1808 204,1802.4 204,1813.6" fill="black" transform="rotate(180,208,1808)"/>
              <polygon class="arrowhead" points="216,688 204,682.4 204,693.6" fill="black" transform="rotate(180,208,688)"/>
              <g class="text">
                <text x="24" y="36">KUDOS</text>
                <text x="80" y="36">status:</text>
                <text x="456" y="36">KUDOS</text>
                <text x="512" y="36">status:</text>
                <text x="8" y="52">-</text>
                <text x="52" y="52">CTX_OLD:</text>
                <text x="104" y="52">-,-</text>
                <text x="440" y="52">-</text>
                <text x="484" y="52">CTX_OLD:</text>
                <text x="536" y="52">-,-</text>
                <text x="8" y="68">-</text>
                <text x="44" y="68">State:</text>
                <text x="92" y="68">IDLE</text>
                <text x="136" y="68">(0,0)</text>
                <text x="440" y="68">-</text>
                <text x="476" y="68">State:</text>
                <text x="524" y="68">IDLE</text>
                <text x="568" y="68">(0,0)</text>
                <text x="196" y="84">Client</text>
                <text x="388" y="84">Server</text>
                <text x="200" y="100">(initiator)</text>
                <text x="384" y="100">(responder)</text>
                <text x="36" y="132">Generate</text>
                <text x="88" y="132">N1,</text>
                <text x="116" y="132">X1</text>
                <text x="36" y="164">CTX_TEMP</text>
                <text x="80" y="164">=</text>
                <text x="132" y="164">updateCtx(</text>
                <text x="76" y="180">X1</text>
                <text x="96" y="180">|</text>
                <text x="120" y="180">N1,</text>
                <text x="80" y="196">0x,</text>
                <text x="96" y="212">CTX_OLD</text>
                <text x="136" y="212">)</text>
                <text x="280" y="244">Request</text>
                <text x="324" y="244">#1</text>
                <text x="32" y="260">Protect</text>
                <text x="84" y="260">with</text>
                <text x="140" y="260">CTX_TEMP</text>
                <text x="468" y="260">/.well-known/kudos</text>
                <text x="236" y="276">OSCORE</text>
                <text x="272" y="276">{</text>
                <text x="24" y="292">KUDOS</text>
                <text x="80" y="292">status:</text>
                <text x="232" y="292">...</text>
                <text x="428" y="292">CTX_TEMP</text>
                <text x="472" y="292">=</text>
                <text x="524" y="292">updateCtx(</text>
                <text x="36" y="308">CTX_OLD:</text>
                <text x="88" y="308">X1,</text>
                <text x="116" y="308">N1</text>
                <text x="248" y="308">Partial</text>
                <text x="296" y="308">IV:</text>
                <text x="320" y="308">0</text>
                <text x="472" y="308">0x,</text>
                <text x="28" y="324">State:</text>
                <text x="76" y="324">BUSY</text>
                <text x="120" y="324">(1,0)</text>
                <text x="232" y="324">...</text>
                <text x="468" y="324">X1</text>
                <text x="488" y="324">|</text>
                <text x="512" y="324">N1,</text>
                <text x="224" y="340">d</text>
                <text x="256" y="340">flag:</text>
                <text x="288" y="340">1</text>
                <text x="488" y="340">CTX_OLD</text>
                <text x="528" y="340">)</text>
                <text x="228" y="356">x:</text>
                <text x="252" y="356">X1</text>
                <text x="272" y="356">=</text>
                <text x="328" y="356">b'00000111'</text>
                <text x="244" y="372">nonce:</text>
                <text x="284" y="372">N1</text>
                <text x="420" y="372">Verify</text>
                <text x="468" y="372">with</text>
                <text x="524" y="372">CTX_TEMP</text>
                <text x="232" y="388">...</text>
                <text x="216" y="404">}</text>
                <text x="248" y="420">Encrypted</text>
                <text x="320" y="420">Payload</text>
                <text x="360" y="420">{</text>
                <text x="232" y="436">...</text>
                <text x="216" y="452">}</text>
                <text x="416" y="484">KUDOS</text>
                <text x="472" y="484">status:</text>
                <text x="428" y="500">CTX_OLD:</text>
                <text x="476" y="500">-,</text>
                <text x="496" y="500">-</text>
                <text x="420" y="516">State:</text>
                <text x="468" y="516">BUSY</text>
                <text x="512" y="516">(0,1)</text>
                <text x="428" y="564">Generate</text>
                <text x="480" y="564">N2,</text>
                <text x="508" y="564">X2</text>
                <text x="424" y="596">CTX_NEW</text>
                <text x="464" y="596">=</text>
                <text x="516" y="596">updateCtx(</text>
                <text x="484" y="612">X2</text>
                <text x="532" y="612">N2),</text>
                <text x="484" y="628">X1</text>
                <text x="528" y="628">N1)</text>
                <text x="504" y="644">CTX_OLD</text>
                <text x="544" y="644">)</text>
                <text x="284" y="676">Response</text>
                <text x="332" y="676">#1</text>
                <text x="424" y="692">Protect</text>
                <text x="476" y="692">with</text>
                <text x="528" y="692">CTX_NEW</text>
                <text x="236" y="708">OSCORE</text>
                <text x="272" y="708">{</text>
                <text x="232" y="724">...</text>
                <text x="416" y="724">KUDOS</text>
                <text x="472" y="724">status:</text>
                <text x="32" y="740">CTX_NEW</text>
                <text x="72" y="740">=</text>
                <text x="124" y="740">updateCtx(</text>
                <text x="248" y="740">Partial</text>
                <text x="296" y="740">IV:</text>
                <text x="320" y="740">0</text>
                <text x="428" y="740">CTX_NEW:</text>
                <text x="480" y="740">X2,</text>
                <text x="508" y="740">N2</text>
                <text x="92" y="756">X1</text>
                <text x="136" y="756">N1,</text>
                <text x="232" y="756">...</text>
                <text x="420" y="756">State:</text>
                <text x="480" y="756">PENDING</text>
                <text x="536" y="756">(1,1)</text>
                <text x="92" y="772">X2</text>
                <text x="132" y="772">N2</text>
                <text x="224" y="772">d</text>
                <text x="256" y="772">flag:</text>
                <text x="288" y="772">1</text>
                <text x="112" y="788">CTX_OLD</text>
                <text x="152" y="788">)</text>
                <text x="228" y="788">x:</text>
                <text x="252" y="788">X2</text>
                <text x="272" y="788">=</text>
                <text x="328" y="788">b'01000111'</text>
                <text x="244" y="804">nonce:</text>
                <text x="284" y="804">N2</text>
                <text x="28" y="820">Verify</text>
                <text x="76" y="820">with</text>
                <text x="128" y="820">CTX_NEW</text>
                <text x="232" y="820">...</text>
                <text x="216" y="836">}</text>
                <text x="8" y="852">/</text>
                <text x="32" y="852">key</text>
                <text x="100" y="852">confirmation</text>
                <text x="160" y="852">/</text>
                <text x="256" y="852">Encrypted</text>
                <text x="328" y="852">Payload</text>
                <text x="368" y="852">{</text>
                <text x="240" y="868">...</text>
                <text x="36" y="884">Pre-IDLE</text>
                <text x="100" y="884">steps:</text>
                <text x="216" y="884">}</text>
                <text x="28" y="900">Delete</text>
                <text x="92" y="900">CTX_TEMP</text>
                <text x="28" y="916">Delete</text>
                <text x="92" y="916">CTX_OLD,</text>
                <text x="144" y="916">X1,</text>
                <text x="172" y="916">N1</text>
                <text x="24" y="948">KUDOS</text>
                <text x="80" y="948">status:</text>
                <text x="36" y="964">CTX_NEW:</text>
                <text x="84" y="964">-,</text>
                <text x="104" y="964">-</text>
                <text x="28" y="980">State:</text>
                <text x="76" y="980">IDLE</text>
                <text x="120" y="980">(0,0)</text>
                <text x="16" y="1028">The</text>
                <text x="60" y="1028">actual</text>
                <text x="104" y="1028">key</text>
                <text x="148" y="1028">update</text>
                <text x="208" y="1028">process</text>
                <text x="260" y="1028">ends</text>
                <text x="304" y="1028">here.</text>
                <text x="16" y="1044">The</text>
                <text x="48" y="1044">two</text>
                <text x="88" y="1044">peers</text>
                <text x="128" y="1044">can</text>
                <text x="160" y="1044">use</text>
                <text x="192" y="1044">the</text>
                <text x="224" y="1044">new</text>
                <text x="276" y="1044">Security</text>
                <text x="344" y="1044">Context</text>
                <text x="412" y="1044">CTX_NEW.</text>
                <text x="20" y="1076">Here</text>
                <text x="56" y="1076">the</text>
                <text x="100" y="1076">client</text>
                <text x="152" y="1076">sends</text>
                <text x="184" y="1076">a</text>
                <text x="232" y="1076">divergent</text>
                <text x="304" y="1076">message</text>
                <text x="36" y="1124">Generate</text>
                <text x="88" y="1124">N3,</text>
                <text x="116" y="1124">X3</text>
                <text x="40" y="1156">CTX_TEMP'</text>
                <text x="88" y="1156">=</text>
                <text x="140" y="1156">updateCtx(</text>
                <text x="76" y="1172">X3</text>
                <text x="96" y="1172">|</text>
                <text x="120" y="1172">N3,</text>
                <text x="80" y="1188">0x,</text>
                <text x="96" y="1204">CTX_NEW</text>
                <text x="136" y="1204">)</text>
                <text x="280" y="1236">Request</text>
                <text x="324" y="1236">#2</text>
                <text x="32" y="1252">Protect</text>
                <text x="84" y="1252">with</text>
                <text x="144" y="1252">CTX_TEMP'</text>
                <text x="468" y="1252">/.well-known/kudos</text>
                <text x="236" y="1268">OSCORE</text>
                <text x="272" y="1268">{</text>
                <text x="24" y="1284">KUDOS</text>
                <text x="80" y="1284">status:</text>
                <text x="232" y="1284">...</text>
                <text x="432" y="1284">CTX_TEMP'</text>
                <text x="480" y="1284">=</text>
                <text x="532" y="1284">updateCtx(</text>
                <text x="36" y="1300">CTX_NEW:</text>
                <text x="88" y="1300">X3,</text>
                <text x="116" y="1300">N3</text>
                <text x="248" y="1300">Partial</text>
                <text x="296" y="1300">IV:</text>
                <text x="320" y="1300">0</text>
                <text x="472" y="1300">0x,</text>
                <text x="28" y="1316">State:</text>
                <text x="76" y="1316">BUSY</text>
                <text x="120" y="1316">(1,0)</text>
                <text x="232" y="1316">...</text>
                <text x="468" y="1316">X3</text>
                <text x="488" y="1316">|</text>
                <text x="512" y="1316">N3,</text>
                <text x="224" y="1332">d</text>
                <text x="256" y="1332">flag:</text>
                <text x="288" y="1332">1</text>
                <text x="488" y="1332">CTX_OLD</text>
                <text x="528" y="1332">)</text>
                <text x="228" y="1348">x:</text>
                <text x="252" y="1348">X3</text>
                <text x="272" y="1348">=</text>
                <text x="328" y="1348">b'00000111'</text>
                <text x="244" y="1364">nonce:</text>
                <text x="284" y="1364">N3</text>
                <text x="420" y="1364">Verify</text>
                <text x="468" y="1364">with</text>
                <text x="528" y="1364">CTX_TEMP'</text>
                <text x="232" y="1380">...</text>
                <text x="400" y="1380">/</text>
                <text x="460" y="1380">verification</text>
                <text x="536" y="1380">fails</text>
                <text x="568" y="1380">/</text>
                <text x="216" y="1396">}</text>
                <text x="248" y="1412">Encrypted</text>
                <text x="320" y="1412">Payload</text>
                <text x="360" y="1412">{</text>
                <text x="232" y="1428">...</text>
                <text x="432" y="1428">CTX_TEMP'</text>
                <text x="480" y="1428">=</text>
                <text x="532" y="1428">updateCtx(</text>
                <text x="216" y="1444">}</text>
                <text x="472" y="1444">0x,</text>
                <text x="468" y="1460">X3</text>
                <text x="488" y="1460">|</text>
                <text x="512" y="1460">N3,</text>
                <text x="488" y="1476">CTX_NEW</text>
                <text x="528" y="1476">)</text>
                <text x="420" y="1508">Verify</text>
                <text x="468" y="1508">with</text>
                <text x="528" y="1508">CTX_TEMP'</text>
                <text x="400" y="1524">/</text>
                <text x="452" y="1524">successful</text>
                <text x="548" y="1524">verification</text>
                <text x="608" y="1524">/</text>
                <text x="428" y="1556">Cleanup:</text>
                <text x="420" y="1572">Delete</text>
                <text x="484" y="1572">CTX_TEMP</text>
                <text x="420" y="1588">Delete</text>
                <text x="484" y="1588">CTX_OLD,</text>
                <text x="532" y="1588">-,</text>
                <text x="552" y="1588">-</text>
                <text x="416" y="1620">KUDOS</text>
                <text x="472" y="1620">status:</text>
                <text x="428" y="1636">CTX_NEW:</text>
                <text x="480" y="1636">X2,</text>
                <text x="508" y="1636">N2</text>
                <text x="420" y="1652">State:</text>
                <text x="468" y="1652">BUSY</text>
                <text x="512" y="1652">(0,1)</text>
                <text x="428" y="1700">CTX_NEW'</text>
                <text x="472" y="1700">=</text>
                <text x="524" y="1700">updateCtx(</text>
                <text x="484" y="1716">X2</text>
                <text x="532" y="1716">N2),</text>
                <text x="484" y="1732">X3</text>
                <text x="528" y="1732">N3)</text>
                <text x="504" y="1748">CTX_NEW</text>
                <text x="544" y="1748">)</text>
                <text x="284" y="1796">Response</text>
                <text x="332" y="1796">#3</text>
                <text x="424" y="1812">Protect</text>
                <text x="476" y="1812">with</text>
                <text x="532" y="1812">CTX_NEW'</text>
                <text x="236" y="1828">OSCORE</text>
                <text x="272" y="1828">{</text>
                <text x="232" y="1844">...</text>
                <text x="416" y="1844">KUDOS</text>
                <text x="472" y="1844">status:</text>
                <text x="36" y="1860">CTX_NEW'</text>
                <text x="80" y="1860">=</text>
                <text x="132" y="1860">updateCtx(</text>
                <text x="248" y="1860">Partial</text>
                <text x="296" y="1860">IV:</text>
                <text x="320" y="1860">0</text>
                <text x="432" y="1860">CTX_NEW':</text>
                <text x="484" y="1860">-,</text>
                <text x="504" y="1860">-</text>
                <text x="92" y="1876">X3</text>
                <text x="136" y="1876">N3,</text>
                <text x="232" y="1876">...</text>
                <text x="420" y="1876">State:</text>
                <text x="480" y="1876">PENDING</text>
                <text x="536" y="1876">(1,1)</text>
                <text x="92" y="1892">X2</text>
                <text x="132" y="1892">N2</text>
                <text x="224" y="1892">d</text>
                <text x="256" y="1892">flag:</text>
                <text x="288" y="1892">1</text>
                <text x="112" y="1908">CTX_NEW</text>
                <text x="152" y="1908">)</text>
                <text x="228" y="1908">x:</text>
                <text x="252" y="1908">X2</text>
                <text x="272" y="1908">=</text>
                <text x="328" y="1908">b'01000111'</text>
                <text x="244" y="1924">nonce:</text>
                <text x="284" y="1924">N2</text>
                <text x="28" y="1940">Verify</text>
                <text x="76" y="1940">with</text>
                <text x="132" y="1940">CTX_NEW'</text>
                <text x="232" y="1940">...</text>
                <text x="216" y="1956">}</text>
                <text x="8" y="1972">/</text>
                <text x="32" y="1972">key</text>
                <text x="100" y="1972">confirmation</text>
                <text x="160" y="1972">/</text>
                <text x="256" y="1972">Encrypted</text>
                <text x="328" y="1972">Payload</text>
                <text x="368" y="1972">{</text>
                <text x="240" y="1988">...</text>
                <text x="36" y="2004">Pre-IDLE</text>
                <text x="100" y="2004">steps:</text>
                <text x="216" y="2004">}</text>
                <text x="28" y="2020">Delete</text>
                <text x="96" y="2020">CTX_TEMP'</text>
                <text x="28" y="2036">Delete</text>
                <text x="92" y="2036">CTX_NEW,</text>
                <text x="144" y="2036">X3,</text>
                <text x="172" y="2036">N3</text>
                <text x="24" y="2068">KUDOS</text>
                <text x="80" y="2068">status:</text>
                <text x="40" y="2084">CTX_NEW':</text>
                <text x="92" y="2084">-,</text>
                <text x="112" y="2084">-</text>
                <text x="28" y="2100">State:</text>
                <text x="76" y="2100">IDLE</text>
                <text x="120" y="2100">(0,0)</text>
                <text x="16" y="2148">The</text>
                <text x="60" y="2148">actual</text>
                <text x="104" y="2148">key</text>
                <text x="148" y="2148">update</text>
                <text x="208" y="2148">process</text>
                <text x="260" y="2148">ends</text>
                <text x="304" y="2148">here.</text>
                <text x="16" y="2164">The</text>
                <text x="48" y="2164">two</text>
                <text x="88" y="2164">peers</text>
                <text x="128" y="2164">can</text>
                <text x="160" y="2164">use</text>
                <text x="192" y="2164">the</text>
                <text x="224" y="2164">new</text>
                <text x="276" y="2164">Security</text>
                <text x="344" y="2164">Context</text>
                <text x="412" y="2164">CTX_NEW.</text>
                <text x="280" y="2212">Request</text>
                <text x="324" y="2212">#3</text>
                <text x="32" y="2228">Protect</text>
                <text x="84" y="2228">with</text>
                <text x="140" y="2228">CTX_NEW'</text>
                <text x="416" y="2228">/temp</text>
                <text x="236" y="2244">OSCORE</text>
                <text x="272" y="2244">{</text>
                <text x="232" y="2260">...</text>
                <text x="216" y="2276">}</text>
                <text x="420" y="2276">Verify</text>
                <text x="468" y="2276">with</text>
                <text x="524" y="2276">CTX_NEW'</text>
                <text x="248" y="2292">Encrypted</text>
                <text x="320" y="2292">Payload</text>
                <text x="360" y="2292">{</text>
                <text x="264" y="2308">Application</text>
                <text x="344" y="2308">Payload</text>
                <text x="400" y="2308">/</text>
                <text x="424" y="2308">key</text>
                <text x="492" y="2308">confirmation</text>
                <text x="552" y="2308">/</text>
                <text x="232" y="2324">...</text>
                <text x="216" y="2340">}</text>
                <text x="428" y="2340">Pre-IDLE</text>
                <text x="492" y="2340">steps:</text>
                <text x="420" y="2356">Delete</text>
                <text x="488" y="2356">CTX_TEMP'</text>
                <text x="420" y="2372">Delete</text>
                <text x="484" y="2372">CTX_NEW,</text>
                <text x="536" y="2372">X2,</text>
                <text x="564" y="2372">N2</text>
                <text x="416" y="2420">KUDOS</text>
                <text x="472" y="2420">status:</text>
                <text x="432" y="2436">CTX_NEW':</text>
                <text x="484" y="2436">-,</text>
                <text x="504" y="2436">-</text>
                <text x="420" y="2452">State:</text>
                <text x="468" y="2452">IDLE</text>
                <text x="512" y="2452">(0,0)</text>
                <text x="284" y="2468">Response</text>
                <text x="332" y="2468">#3</text>
                <text x="424" y="2484">Protect</text>
                <text x="476" y="2484">with</text>
                <text x="532" y="2484">CTX_NEW'</text>
                <text x="28" y="2500">Verify</text>
                <text x="76" y="2500">with</text>
                <text x="132" y="2500">CTX_NEW'</text>
                <text x="236" y="2500">OSCORE</text>
                <text x="272" y="2500">{</text>
                <text x="232" y="2516">...</text>
                <text x="216" y="2532">}</text>
                <text x="248" y="2548">Encrypted</text>
                <text x="320" y="2548">Payload</text>
                <text x="360" y="2548">{</text>
                <text x="232" y="2564">...</text>
                <text x="264" y="2580">Application</text>
                <text x="344" y="2580">Payload</text>
                <text x="216" y="2596">}</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
KUDOS status:                                         KUDOS status:
- CTX_OLD: -,-                                        - CTX_OLD: -,-
- State: IDLE (0,0)                                   - State: IDLE (0,0)
                     Client                  Server
                   (initiator)            (responder)
                        |                      |
Generate N1, X1         |                      |
                        |                      |
CTX_TEMP = updateCtx(   |                      |
        X1 | N1,        |                      |
        0x,             |                      |
        CTX_OLD )       |                      |
                        |                      |
                        |      Request #1      |
Protect with CTX_TEMP   +--------------------->| /.well-known/kudos
                        | OSCORE {             |
KUDOS status:           |  ...                 | CTX_TEMP = updateCtx(
CTX_OLD: X1, N1         |  Partial IV: 0       |         0x,
State: BUSY (1,0)       |  ...                 |         X1 | N1,
                        |  d flag: 1           |         CTX_OLD )
                        |  x: X1 = b'00000111' |
                        |  nonce: N1           | Verify with CTX_TEMP
                        |  ...                 |
                        | }                    |
                        | Encrypted Payload {  |
                        |  ...                 |
                        | }                    |
                        |                      |
                        |                      | KUDOS status:
                        |                      | CTX_OLD: -, -
                        |                      | State: BUSY (0,1)
                        |                      |
                        |                      |
                        |                      | Generate N2, X2
                        |                      |
                        |                      | CTX_NEW = updateCtx(
                        |                      |           X2 | N2),
                        |                      |           X1 | N1),
                        |                      |           CTX_OLD )
                        |                      |
                        |      Response #1     |
                        |<---------------------+ Protect with CTX_NEW
                        | OSCORE {             |
                        |  ...                 | KUDOS status:
CTX_NEW = updateCtx(    |  Partial IV: 0       | CTX_NEW: X2, N2
          X1 | N1,      |  ...                 | State: PENDING (1,1)
          X2 | N2 ,     |  d flag: 1           |
          CTX_OLD )     |  x: X2 = b'01000111' |
                        |  nonce: N2           |
Verify with CTX_NEW     |  ...                 |
                        | }                    |
/ key confirmation /    |  Encrypted Payload { |
                        |   ...                |
Pre-IDLE steps:         | }                    |
Delete CTX_TEMP         |                      |
Delete CTX_OLD, X1, N1  |                      |
                        |                      |
KUDOS status:           |                      |
CTX_NEW: -, -           |                      |
State: IDLE (0,0)       |                      |
                        |                      |

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

Here the client sends a divergent message

                        |                      |
Generate N3, X3         |                      |
                        |                      |
CTX_TEMP' = updateCtx(  |                      |
        X3 | N3,        |                      |
        0x,             |                      |
        CTX_NEW )       |                      |
                        |                      |
                        |      Request #2      |
Protect with CTX_TEMP'  +--------------------->| /.well-known/kudos
                        | OSCORE {             |
KUDOS status:           |  ...                 | CTX_TEMP' = updateCtx(
CTX_NEW: X3, N3         |  Partial IV: 0       |         0x,
State: BUSY (1,0)       |  ...                 |         X3 | N3,
                        |  d flag: 1           |         CTX_OLD )
                        |  x: X3 = b'00000111' |
                        |  nonce: N3           | Verify with CTX_TEMP'
                        |  ...                 | / verification fails /
                        | }                    |
                        | Encrypted Payload {  |
                        |  ...                 | CTX_TEMP' = updateCtx(
                        | }                    |         0x,
                        |                      |         X3 | N3,
                        |                      |         CTX_NEW )
                        |                      |
                        |                      | Verify with CTX_TEMP'
                        |                      | / successful verification /
                        |                      |
                        |                      | Cleanup:
                        |                      | Delete CTX_TEMP
                        |                      | Delete CTX_OLD, -, -
                        |                      |
                        |                      | KUDOS status:
                        |                      | CTX_NEW: X2, N2
                        |                      | State: BUSY (0,1)
                        |                      |
                        |                      |
                        |                      | CTX_NEW' = updateCtx(
                        |                      |           X2 | N2),
                        |                      |           X3 | N3),
                        |                      |           CTX_NEW )
                        |                      |
                        |                      |
                        |      Response #3     |
                        |<---------------------+ Protect with CTX_NEW'
                        | OSCORE {             |
                        |  ...                 | KUDOS status:
CTX_NEW' = updateCtx(   |  Partial IV: 0       | CTX_NEW': -, -
          X3 | N3,      |  ...                 | State: PENDING (1,1)
          X2 | N2 ,     |  d flag: 1           |
          CTX_NEW )     |  x: X2 = b'01000111' |
                        |  nonce: N2           |
Verify with CTX_NEW'    |  ...                 |
                        | }                    |
/ key confirmation /    |  Encrypted Payload { |
                        |   ...                |
Pre-IDLE steps:         | }                    |
Delete CTX_TEMP'        |                      |
Delete CTX_NEW, X3, N3  |                      |
                        |                      |
KUDOS status:           |                      |
CTX_NEW': -, -          |                      |
State: IDLE (0,0)       |                      |
                        |                      |

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

                        |                      |
                        |      Request #3      |
Protect with CTX_NEW'   +--------------------->| /temp
                        | OSCORE {             |
                        |  ...                 |
                        | }                    | Verify with CTX_NEW'
                        | Encrypted Payload {  |
                        |  Application Payload | / key confirmation /
                        |  ...                 |
                        | }                    | Pre-IDLE steps:
                        |                      | Delete CTX_TEMP'
                        |                      | Delete CTX_NEW, X2, N2
                        |                      |
                        |                      |
                        |                      | KUDOS status:
                        |                      | CTX_NEW': -, -
                        |                      | State: IDLE (0,0)
                        |      Response #3     |
                        |<---------------------+ Protect with CTX_NEW'
Verify with CTX_NEW'    | OSCORE {             |
                        |  ...                 |
                        | }                    |
                        | Encrypted Payload {  |
                        |  ...                 |
                        |  Application Payload |
                        | }                    |
                        |                      |
]]></artwork>
        </artset>
      </section>
      <section anchor="successful-kudos-execution-initiated-with-a-request-message-where-kudos-response-1-is-lost">
        <name>Successful KUDOS Execution Initiated with a Request Message, where KUDOS Response #1 is Lost</name>
        <t>The server's first response is dropped by the network, thus the client retries and both sides end up deriving the same a CTX_NEW.</t>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="2240" width="616" viewBox="0 0 616 2240" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 112,1472 L 112,1488" fill="none" stroke="black"/>
              <path d="M 152,1488 L 152,1496" fill="none" stroke="black"/>
              <path d="M 200,112 L 200,896" fill="none" stroke="black"/>
              <path d="M 200,960 L 200,1712" fill="none" stroke="black"/>
              <path d="M 200,1792 L 200,2224" fill="none" stroke="black"/>
              <path d="M 384,112 L 384,896" fill="none" stroke="black"/>
              <path d="M 384,960 L 384,1712" fill="none" stroke="black"/>
              <path d="M 384,1792 L 384,2224" fill="none" stroke="black"/>
              <path d="M 504,608 L 504,624" fill="none" stroke="black"/>
              <path d="M 504,1328 L 504,1344" fill="none" stroke="black"/>
              <path d="M 544,624 L 544,632" fill="none" stroke="black"/>
              <path d="M 544,1344 L 544,1352" fill="none" stroke="black"/>
              <path d="M 200,256 L 376,256" fill="none" stroke="black"/>
              <path d="M 256,688 L 272,688" fill="none" stroke="black"/>
              <path d="M 328,688 L 384,688" fill="none" stroke="black"/>
              <path d="M 200,992 L 376,992" fill="none" stroke="black"/>
              <path d="M 208,1408 L 384,1408" fill="none" stroke="black"/>
              <path d="M 200,1824 L 376,1824" fill="none" stroke="black"/>
              <path d="M 208,2096 L 384,2096" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="384,1824 372,1818.4 372,1829.6" fill="black" transform="rotate(0,376,1824)"/>
              <polygon class="arrowhead" points="384,992 372,986.4 372,997.6" fill="black" transform="rotate(0,376,992)"/>
              <polygon class="arrowhead" points="384,256 372,250.4 372,261.6" fill="black" transform="rotate(0,376,256)"/>
              <polygon class="arrowhead" points="264,688 252,682.4 252,693.6" fill="black" transform="rotate(180,256,688)"/>
              <polygon class="arrowhead" points="216,2096 204,2090.4 204,2101.6" fill="black" transform="rotate(180,208,2096)"/>
              <polygon class="arrowhead" points="216,1408 204,1402.4 204,1413.6" fill="black" transform="rotate(180,208,1408)"/>
              <g class="text">
                <text x="24" y="36">KUDOS</text>
                <text x="80" y="36">status:</text>
                <text x="456" y="36">KUDOS</text>
                <text x="512" y="36">status:</text>
                <text x="8" y="52">-</text>
                <text x="52" y="52">CTX_OLD:</text>
                <text x="104" y="52">-,-</text>
                <text x="440" y="52">-</text>
                <text x="484" y="52">CTX_OLD:</text>
                <text x="536" y="52">-,-</text>
                <text x="8" y="68">-</text>
                <text x="44" y="68">State:</text>
                <text x="92" y="68">IDLE</text>
                <text x="136" y="68">(0,0)</text>
                <text x="440" y="68">-</text>
                <text x="476" y="68">State:</text>
                <text x="524" y="68">IDLE</text>
                <text x="568" y="68">(0,0)</text>
                <text x="196" y="84">Client</text>
                <text x="388" y="84">Server</text>
                <text x="200" y="100">(initiator)</text>
                <text x="384" y="100">(responder)</text>
                <text x="36" y="132">Generate</text>
                <text x="88" y="132">N1,</text>
                <text x="116" y="132">X1</text>
                <text x="36" y="164">CTX_TEMP</text>
                <text x="80" y="164">=</text>
                <text x="132" y="164">updateCtx(</text>
                <text x="76" y="180">X1</text>
                <text x="96" y="180">|</text>
                <text x="120" y="180">N1,</text>
                <text x="80" y="196">0x,</text>
                <text x="96" y="212">CTX_OLD</text>
                <text x="136" y="212">)</text>
                <text x="280" y="244">Request</text>
                <text x="324" y="244">#1</text>
                <text x="32" y="260">Protect</text>
                <text x="84" y="260">with</text>
                <text x="140" y="260">CTX_TEMP</text>
                <text x="468" y="260">/.well-known/kudos</text>
                <text x="236" y="276">OSCORE</text>
                <text x="272" y="276">{</text>
                <text x="24" y="292">KUDOS</text>
                <text x="80" y="292">status:</text>
                <text x="232" y="292">...</text>
                <text x="428" y="292">CTX_TEMP</text>
                <text x="472" y="292">=</text>
                <text x="524" y="292">updateCtx(</text>
                <text x="36" y="308">CTX_OLD:</text>
                <text x="88" y="308">X1,</text>
                <text x="116" y="308">N1</text>
                <text x="248" y="308">Partial</text>
                <text x="296" y="308">IV:</text>
                <text x="320" y="308">0</text>
                <text x="472" y="308">0x,</text>
                <text x="28" y="324">State:</text>
                <text x="76" y="324">BUSY</text>
                <text x="120" y="324">(1,0)</text>
                <text x="232" y="324">...</text>
                <text x="468" y="324">X1</text>
                <text x="488" y="324">|</text>
                <text x="512" y="324">N1,</text>
                <text x="224" y="340">d</text>
                <text x="256" y="340">flag:</text>
                <text x="288" y="340">1</text>
                <text x="488" y="340">CTX_OLD</text>
                <text x="528" y="340">)</text>
                <text x="228" y="356">x:</text>
                <text x="252" y="356">X1</text>
                <text x="272" y="356">=</text>
                <text x="328" y="356">b'00000111'</text>
                <text x="244" y="372">nonce:</text>
                <text x="284" y="372">N1</text>
                <text x="420" y="372">Verify</text>
                <text x="468" y="372">with</text>
                <text x="524" y="372">CTX_TEMP</text>
                <text x="232" y="388">...</text>
                <text x="216" y="404">}</text>
                <text x="248" y="420">Encrypted</text>
                <text x="320" y="420">Payload</text>
                <text x="360" y="420">{</text>
                <text x="232" y="436">...</text>
                <text x="216" y="452">}</text>
                <text x="416" y="484">KUDOS</text>
                <text x="472" y="484">status:</text>
                <text x="428" y="500">CTX_OLD:</text>
                <text x="476" y="500">-,</text>
                <text x="496" y="500">-</text>
                <text x="420" y="516">State:</text>
                <text x="468" y="516">BUSY</text>
                <text x="512" y="516">(0,1)</text>
                <text x="428" y="564">Generate</text>
                <text x="480" y="564">X2,</text>
                <text x="508" y="564">N2</text>
                <text x="424" y="596">CTX_NEW</text>
                <text x="464" y="596">=</text>
                <text x="516" y="596">updateCtx(</text>
                <text x="484" y="612">X2</text>
                <text x="532" y="612">N2),</text>
                <text x="484" y="628">X1</text>
                <text x="528" y="628">N1)</text>
                <text x="504" y="644">CTX_OLD</text>
                <text x="544" y="644">)</text>
                <text x="284" y="676">Response</text>
                <text x="332" y="676">#1</text>
                <text x="300" y="692">LOST</text>
                <text x="424" y="692">Protect</text>
                <text x="476" y="692">with</text>
                <text x="528" y="692">CTX_NEW</text>
                <text x="236" y="708">OSCORE</text>
                <text x="272" y="708">{</text>
                <text x="232" y="724">...</text>
                <text x="416" y="724">KUDOS</text>
                <text x="472" y="724">status:</text>
                <text x="248" y="740">Partial</text>
                <text x="296" y="740">IV:</text>
                <text x="320" y="740">0</text>
                <text x="428" y="740">CTX_OLD:</text>
                <text x="480" y="740">X2,</text>
                <text x="508" y="740">N2</text>
                <text x="232" y="756">...</text>
                <text x="420" y="756">State:</text>
                <text x="480" y="756">PENDING</text>
                <text x="536" y="756">(1,1)</text>
                <text x="224" y="772">d</text>
                <text x="256" y="772">flag:</text>
                <text x="288" y="772">1</text>
                <text x="228" y="788">x:</text>
                <text x="252" y="788">X2</text>
                <text x="272" y="788">=</text>
                <text x="328" y="788">b'01000111'</text>
                <text x="244" y="804">nonce:</text>
                <text x="284" y="804">N2</text>
                <text x="232" y="820">...</text>
                <text x="216" y="836">}</text>
                <text x="256" y="852">Encrypted</text>
                <text x="328" y="852">Payload</text>
                <text x="368" y="852">{</text>
                <text x="240" y="868">...</text>
                <text x="216" y="884">}</text>
                <text x="212" y="932">time</text>
                <text x="260" y="932">passes</text>
                <text x="304" y="932">...</text>
                <text x="280" y="980">Request</text>
                <text x="324" y="980">#2</text>
                <text x="32" y="996">Protect</text>
                <text x="84" y="996">with</text>
                <text x="140" y="996">CTX_TEMP</text>
                <text x="468" y="996">/.well-known/kudos</text>
                <text x="236" y="1012">OSCORE</text>
                <text x="272" y="1012">{</text>
                <text x="24" y="1028">KUDOS</text>
                <text x="80" y="1028">status:</text>
                <text x="232" y="1028">...</text>
                <text x="428" y="1028">CTX_TEMP</text>
                <text x="472" y="1028">=</text>
                <text x="524" y="1028">updateCtx(</text>
                <text x="36" y="1044">CTX_OLD:</text>
                <text x="88" y="1044">X1,</text>
                <text x="116" y="1044">N1</text>
                <text x="248" y="1044">Partial</text>
                <text x="296" y="1044">IV:</text>
                <text x="320" y="1044">1</text>
                <text x="472" y="1044">0x,</text>
                <text x="28" y="1060">State:</text>
                <text x="76" y="1060">BUSY</text>
                <text x="120" y="1060">(1,0)</text>
                <text x="232" y="1060">...</text>
                <text x="468" y="1060">X1</text>
                <text x="488" y="1060">|</text>
                <text x="512" y="1060">N1,</text>
                <text x="224" y="1076">d</text>
                <text x="256" y="1076">flag:</text>
                <text x="288" y="1076">1</text>
                <text x="488" y="1076">CTX_OLD</text>
                <text x="528" y="1076">)</text>
                <text x="228" y="1092">x:</text>
                <text x="252" y="1092">X1</text>
                <text x="272" y="1092">=</text>
                <text x="328" y="1092">b'00000111'</text>
                <text x="244" y="1108">nonce:</text>
                <text x="284" y="1108">N1</text>
                <text x="420" y="1108">Verify</text>
                <text x="468" y="1108">with</text>
                <text x="524" y="1108">CTX_TEMP</text>
                <text x="232" y="1124">...</text>
                <text x="400" y="1124">/</text>
                <text x="452" y="1124">successful</text>
                <text x="548" y="1124">verification</text>
                <text x="608" y="1124">/</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="428" y="1156">Cleanup:</text>
                <text x="232" y="1172">...</text>
                <text x="420" y="1172">Delete</text>
                <text x="480" y="1172">CTX_NEW</text>
                <text x="216" y="1188">}</text>
                <text x="420" y="1188">Delete</text>
                <text x="464" y="1188">X2,</text>
                <text x="492" y="1188">N2</text>
                <text x="416" y="1220">KUDOS</text>
                <text x="472" y="1220">status:</text>
                <text x="428" y="1236">CTX_OLD:</text>
                <text x="480" y="1236">-,-</text>
                <text x="420" y="1252">State:</text>
                <text x="468" y="1252">BUSY</text>
                <text x="512" y="1252">(0,1)</text>
                <text x="428" y="1284">Generate</text>
                <text x="480" y="1284">X3,</text>
                <text x="508" y="1284">N3</text>
                <text x="424" y="1316">CTX_NEW</text>
                <text x="464" y="1316">=</text>
                <text x="516" y="1316">updateCtx(</text>
                <text x="484" y="1332">X3</text>
                <text x="532" y="1332">N3),</text>
                <text x="484" y="1348">X1</text>
                <text x="528" y="1348">N1)</text>
                <text x="504" y="1364">CTX_OLD</text>
                <text x="544" y="1364">)</text>
                <text x="284" y="1396">Response</text>
                <text x="332" y="1396">#2</text>
                <text x="424" y="1412">Protect</text>
                <text x="476" y="1412">with</text>
                <text x="528" y="1412">CTX_NEW</text>
                <text x="236" y="1428">OSCORE</text>
                <text x="272" y="1428">{</text>
                <text x="232" y="1444">...</text>
                <text x="416" y="1444">KUDOS</text>
                <text x="472" y="1444">status:</text>
                <text x="32" y="1460">CTX_NEW</text>
                <text x="72" y="1460">=</text>
                <text x="124" y="1460">updateCtx(</text>
                <text x="248" y="1460">Partial</text>
                <text x="296" y="1460">IV:</text>
                <text x="320" y="1460">0</text>
                <text x="428" y="1460">CTX_OLD:</text>
                <text x="480" y="1460">X3,</text>
                <text x="508" y="1460">N3</text>
                <text x="92" y="1476">X1</text>
                <text x="136" y="1476">N1,</text>
                <text x="232" y="1476">...</text>
                <text x="420" y="1476">State:</text>
                <text x="480" y="1476">PENDING</text>
                <text x="536" y="1476">(1,1)</text>
                <text x="92" y="1492">X3</text>
                <text x="132" y="1492">N3</text>
                <text x="224" y="1492">d</text>
                <text x="256" y="1492">flag:</text>
                <text x="288" y="1492">1</text>
                <text x="112" y="1508">CTX_OLD</text>
                <text x="152" y="1508">)</text>
                <text x="228" y="1508">x:</text>
                <text x="252" y="1508">X3</text>
                <text x="272" y="1508">=</text>
                <text x="328" y="1508">b'01000111'</text>
                <text x="244" y="1524">nonce:</text>
                <text x="284" y="1524">N3</text>
                <text x="28" y="1540">Verify</text>
                <text x="76" y="1540">with</text>
                <text x="128" y="1540">CTX_NEW</text>
                <text x="232" y="1540">...</text>
                <text x="216" y="1556">}</text>
                <text x="8" y="1572">/</text>
                <text x="32" y="1572">key</text>
                <text x="100" y="1572">confirmation</text>
                <text x="160" y="1572">/</text>
                <text x="256" y="1572">Encrypted</text>
                <text x="328" y="1572">Payload</text>
                <text x="368" y="1572">{</text>
                <text x="240" y="1588">...</text>
                <text x="36" y="1604">Pre-IDLE</text>
                <text x="100" y="1604">steps:</text>
                <text x="216" y="1604">}</text>
                <text x="28" y="1620">Delete</text>
                <text x="92" y="1620">CTX_TEMP</text>
                <text x="28" y="1636">Delete</text>
                <text x="92" y="1636">CTX_OLD,</text>
                <text x="144" y="1636">X1,</text>
                <text x="172" y="1636">N1</text>
                <text x="24" y="1668">KUDOS</text>
                <text x="80" y="1668">status:</text>
                <text x="36" y="1684">CTX_NEW:</text>
                <text x="84" y="1684">-,</text>
                <text x="104" y="1684">-</text>
                <text x="28" y="1700">State:</text>
                <text x="76" y="1700">IDLE</text>
                <text x="120" y="1700">(0,0)</text>
                <text x="16" y="1748">The</text>
                <text x="60" y="1748">actual</text>
                <text x="104" y="1748">key</text>
                <text x="148" y="1748">update</text>
                <text x="208" y="1748">process</text>
                <text x="260" y="1748">ends</text>
                <text x="304" y="1748">here.</text>
                <text x="16" y="1764">The</text>
                <text x="48" y="1764">two</text>
                <text x="88" y="1764">peers</text>
                <text x="128" y="1764">can</text>
                <text x="160" y="1764">use</text>
                <text x="192" y="1764">the</text>
                <text x="224" y="1764">new</text>
                <text x="276" y="1764">Security</text>
                <text x="344" y="1764">Context</text>
                <text x="412" y="1764">CTX_NEW.</text>
                <text x="280" y="1812">Request</text>
                <text x="324" y="1812">#3</text>
                <text x="32" y="1828">Protect</text>
                <text x="84" y="1828">with</text>
                <text x="136" y="1828">CTX_NEW</text>
                <text x="416" y="1828">/temp</text>
                <text x="236" y="1844">OSCORE</text>
                <text x="272" y="1844">{</text>
                <text x="232" y="1860">...</text>
                <text x="216" y="1876">}</text>
                <text x="420" y="1876">Verify</text>
                <text x="468" y="1876">with</text>
                <text x="520" y="1876">CTX_NEW</text>
                <text x="248" y="1892">Encrypted</text>
                <text x="320" y="1892">Payload</text>
                <text x="360" y="1892">{</text>
                <text x="264" y="1908">Application</text>
                <text x="344" y="1908">Payload</text>
                <text x="400" y="1908">/</text>
                <text x="424" y="1908">key</text>
                <text x="492" y="1908">confirmation</text>
                <text x="552" y="1908">/</text>
                <text x="232" y="1924">...</text>
                <text x="216" y="1940">}</text>
                <text x="428" y="1940">Pre-IDLE</text>
                <text x="492" y="1940">steps:</text>
                <text x="420" y="1956">Delete</text>
                <text x="484" y="1956">CTX_TEMP</text>
                <text x="420" y="1972">Delete</text>
                <text x="480" y="1972">CTX_OLD</text>
                <text x="436" y="1988">Delete</text>
                <text x="480" y="1988">X3,</text>
                <text x="508" y="1988">N3</text>
                <text x="416" y="2036">KUDOS</text>
                <text x="472" y="2036">status:</text>
                <text x="428" y="2052">CTX_NEW:</text>
                <text x="476" y="2052">-,</text>
                <text x="496" y="2052">-</text>
                <text x="420" y="2068">State:</text>
                <text x="468" y="2068">IDLE</text>
                <text x="512" y="2068">(0,0)</text>
                <text x="284" y="2084">Response</text>
                <text x="332" y="2084">#3</text>
                <text x="424" y="2100">Protect</text>
                <text x="476" y="2100">with</text>
                <text x="528" y="2100">CTX_NEW</text>
                <text x="28" y="2116">Verify</text>
                <text x="76" y="2116">with</text>
                <text x="128" y="2116">CTX_NEW</text>
                <text x="236" y="2116">OSCORE</text>
                <text x="272" y="2116">{</text>
                <text x="232" y="2132">...</text>
                <text x="216" y="2148">}</text>
                <text x="248" y="2164">Encrypted</text>
                <text x="320" y="2164">Payload</text>
                <text x="360" y="2164">{</text>
                <text x="232" y="2180">...</text>
                <text x="264" y="2196">Application</text>
                <text x="344" y="2196">Payload</text>
                <text x="216" y="2212">}</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
KUDOS status:                                         KUDOS status:
- CTX_OLD: -,-                                        - CTX_OLD: -,-
- State: IDLE (0,0)                                   - State: IDLE (0,0)
                     Client                  Server
                   (initiator)            (responder)
                        |                      |
Generate N1, X1         |                      |
                        |                      |
CTX_TEMP = updateCtx(   |                      |
        X1 | N1,        |                      |
        0x,             |                      |
        CTX_OLD )       |                      |
                        |                      |
                        |      Request #1      |
Protect with CTX_TEMP   +--------------------->| /.well-known/kudos
                        | OSCORE {             |
KUDOS status:           |  ...                 | CTX_TEMP = updateCtx(
CTX_OLD: X1, N1         |  Partial IV: 0       |         0x,
State: BUSY (1,0)       |  ...                 |         X1 | N1,
                        |  d flag: 1           |         CTX_OLD )
                        |  x: X1 = b'00000111' |
                        |  nonce: N1           | Verify with CTX_TEMP
                        |  ...                 |
                        | }                    |
                        | Encrypted Payload {  |
                        |  ...                 |
                        | }                    |
                        |                      |
                        |                      | KUDOS status:
                        |                      | CTX_OLD: -, -
                        |                      | State: BUSY (0,1)
                        |                      |
                        |                      |
                        |                      | Generate X2, N2
                        |                      |
                        |                      | CTX_NEW = updateCtx(
                        |                      |           X2 | N2),
                        |                      |           X1 | N1),
                        |                      |           CTX_OLD )
                        |                      |
                        |      Response #1     |
                        |      <-- LOST -------+ Protect with CTX_NEW
                        | OSCORE {             |
                        |  ...                 | KUDOS status:
                        |  Partial IV: 0       | CTX_OLD: X2, N2
                        |  ...                 | State: PENDING (1,1)
                        |  d flag: 1           |
                        |  x: X2 = b'01000111' |
                        |  nonce: N2           |
                        |  ...                 |
                        | }                    |
                        |  Encrypted Payload { |
                        |   ...                |
                        | }                    |
                        |                      |

                        time passes ...

                        |                      |
                        |      Request #2      |
Protect with CTX_TEMP   +--------------------->| /.well-known/kudos
                        | OSCORE {             |
KUDOS status:           |  ...                 | CTX_TEMP = updateCtx(
CTX_OLD: X1, N1         |  Partial IV: 1       |         0x,
State: BUSY (1,0)       |  ...                 |         X1 | N1,
                        |  d flag: 1           |         CTX_OLD )
                        |  x: X1 = b'00000111' |
                        |  nonce: N1           | Verify with CTX_TEMP
                        |  ...                 | / successful verification /
                        | }                    |
                        | Encrypted Payload {  | Cleanup:
                        |  ...                 | Delete CTX_NEW
                        | }                    | Delete X2, N2
                        |                      |
                        |                      | KUDOS status:
                        |                      | CTX_OLD: -,-
                        |                      | State: BUSY (0,1)
                        |                      |
                        |                      | Generate X3, N3
                        |                      |
                        |                      | CTX_NEW = updateCtx(
                        |                      |           X3 | N3),
                        |                      |           X1 | N1),
                        |                      |           CTX_OLD )
                        |                      |
                        |      Response #2     |
                        |<---------------------+ Protect with CTX_NEW
                        | OSCORE {             |
                        |  ...                 | KUDOS status:
CTX_NEW = updateCtx(    |  Partial IV: 0       | CTX_OLD: X3, N3
          X1 | N1,      |  ...                 | State: PENDING (1,1)
          X3 | N3 ,     |  d flag: 1           |
          CTX_OLD )     |  x: X3 = b'01000111' |
                        |  nonce: N3           |
Verify with CTX_NEW     |  ...                 |
                        | }                    |
/ key confirmation /    |  Encrypted Payload { |
                        |   ...                |
Pre-IDLE steps:         | }                    |
Delete CTX_TEMP         |                      |
Delete CTX_OLD, X1, N1  |                      |
                        |                      |
KUDOS status:           |                      |
CTX_NEW: -, -           |                      |
State: IDLE (0,0)       |                      |
                        |                      |

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

                        |                      |
                        |      Request #3      |
Protect with CTX_NEW    +--------------------->| /temp
                        | OSCORE {             |
                        |  ...                 |
                        | }                    | Verify with CTX_NEW
                        | Encrypted Payload {  |
                        |  Application Payload | / key confirmation /
                        |  ...                 |
                        | }                    | Pre-IDLE steps:
                        |                      | Delete CTX_TEMP
                        |                      | Delete CTX_OLD
                        |                      |   Delete X3, N3
                        |                      |
                        |                      |
                        |                      | KUDOS status:
                        |                      | CTX_NEW: -, -
                        |                      | State: IDLE (0,0)
                        |      Response #3     |
                        |<---------------------+ Protect with CTX_NEW
Verify with CTX_NEW     | OSCORE {             |
                        |  ...                 |
                        | }                    |
                        | Encrypted Payload {  |
                        |  ...                 |
                        |  Application Payload |
                        | }                    |
                        |                      |
]]></artwork>
        </artset>
      </section>
      <section anchor="successful-kudos-execution-completed-using-two-request-messages">
        <name>Successful KUDOS Execution Completed using two Request Messages</name>
        <t>Both peers independently initiate KUDOS and exchange two request messages that ultimately result in the the same CTX_NEW.</t>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="2816" width="592" viewBox="0 0 592 2816" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 32,1864 L 32,1888" fill="none" stroke="black"/>
              <path d="M 200,128 L 200,2800" fill="none" stroke="black"/>
              <path d="M 384,128 L 384,2800" fill="none" stroke="black"/>
              <path d="M 512,1216 L 512,1232" fill="none" stroke="black"/>
              <path d="M 552,1232 L 552,1240" fill="none" stroke="black"/>
              <path d="M 200,272 L 304,272" fill="none" stroke="black"/>
              <path d="M 256,672 L 384,672" fill="none" stroke="black"/>
              <path d="M 344,976 L 376,976" fill="none" stroke="black"/>
              <path d="M 256,1296 L 384,1296" fill="none" stroke="black"/>
              <path d="M 208,1600 L 232,1600" fill="none" stroke="black"/>
              <path d="M 200,1936 L 328,1936" fill="none" stroke="black"/>
              <path d="M 208,2176 L 336,2176" fill="none" stroke="black"/>
              <path d="M 240,2544 L 376,2544" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="384,2544 372,2538.4 372,2549.6" fill="black" transform="rotate(0,376,2544)"/>
              <polygon class="arrowhead" points="384,976 372,970.4 372,981.6" fill="black" transform="rotate(0,376,976)"/>
              <polygon class="arrowhead" points="336,1936 324,1930.4 324,1941.6" fill="black" transform="rotate(0,328,1936)"/>
              <polygon class="arrowhead" points="312,272 300,266.4 300,277.6" fill="black" transform="rotate(0,304,272)"/>
              <polygon class="arrowhead" points="264,1296 252,1290.4 252,1301.6" fill="black" transform="rotate(180,256,1296)"/>
              <polygon class="arrowhead" points="264,672 252,666.4 252,677.6" fill="black" transform="rotate(180,256,672)"/>
              <polygon class="arrowhead" points="216,2176 204,2170.4 204,2181.6" fill="black" transform="rotate(180,208,2176)"/>
              <polygon class="arrowhead" points="216,1600 204,1594.4 204,1605.6" fill="black" transform="rotate(180,208,1600)"/>
              <g class="text">
                <text x="24" y="36">KUDOS</text>
                <text x="80" y="36">status:</text>
                <text x="456" y="36">KUDOS</text>
                <text x="512" y="36">status:</text>
                <text x="8" y="52">-</text>
                <text x="52" y="52">CTX_OLD:</text>
                <text x="104" y="52">-,-</text>
                <text x="440" y="52">-</text>
                <text x="484" y="52">CTX_OLD:</text>
                <text x="536" y="52">-,-</text>
                <text x="8" y="68">-</text>
                <text x="44" y="68">State:</text>
                <text x="92" y="68">IDLE</text>
                <text x="136" y="68">(0,0)</text>
                <text x="440" y="68">-</text>
                <text x="476" y="68">State:</text>
                <text x="524" y="68">IDLE</text>
                <text x="568" y="68">(0,0)</text>
                <text x="196" y="100">Client</text>
                <text x="388" y="100">Server</text>
                <text x="200" y="116">(initiator)</text>
                <text x="384" y="116">(responder)</text>
                <text x="36" y="148">Generate</text>
                <text x="88" y="148">N1,</text>
                <text x="116" y="148">X1</text>
                <text x="44" y="180">CTX_TEMP_A</text>
                <text x="96" y="180">=</text>
                <text x="148" y="180">updateCtx(</text>
                <text x="92" y="196">X1</text>
                <text x="112" y="196">|</text>
                <text x="136" y="196">N1,</text>
                <text x="96" y="212">0x,</text>
                <text x="112" y="228">CTX_OLD</text>
                <text x="152" y="228">)</text>
                <text x="280" y="260">Request</text>
                <text x="332" y="260">#1_A</text>
                <text x="32" y="276">Protect</text>
                <text x="84" y="276">with</text>
                <text x="148" y="276">CTX_TEMP_A</text>
                <text x="328" y="276">...</text>
                <text x="468" y="276">/.well-known/kudos</text>
                <text x="236" y="292">OSCORE</text>
                <text x="272" y="292">{</text>
                <text x="24" y="308">KUDOS</text>
                <text x="80" y="308">status:</text>
                <text x="232" y="308">...</text>
                <text x="36" y="324">CTX_OLD:</text>
                <text x="88" y="324">X1,</text>
                <text x="116" y="324">N1</text>
                <text x="248" y="324">Partial</text>
                <text x="296" y="324">IV:</text>
                <text x="320" y="324">0</text>
                <text x="28" y="340">State:</text>
                <text x="76" y="340">BUSY</text>
                <text x="120" y="340">(1,0)</text>
                <text x="232" y="340">...</text>
                <text x="224" y="356">d</text>
                <text x="256" y="356">flag:</text>
                <text x="288" y="356">1</text>
                <text x="228" y="372">x:</text>
                <text x="252" y="372">X1</text>
                <text x="272" y="372">=</text>
                <text x="328" y="372">b'00000111'</text>
                <text x="244" y="388">nonce:</text>
                <text x="284" y="388">N1</text>
                <text x="232" y="404">...</text>
                <text x="216" y="420">}</text>
                <text x="248" y="436">Encrypted</text>
                <text x="320" y="436">Payload</text>
                <text x="360" y="436">{</text>
                <text x="232" y="452">...</text>
                <text x="216" y="468">}</text>
                <text x="428" y="548">Generate</text>
                <text x="480" y="548">N2,</text>
                <text x="508" y="548">X2</text>
                <text x="436" y="580">CTX_TEMP_B</text>
                <text x="488" y="580">=</text>
                <text x="540" y="580">updateCtx(</text>
                <text x="500" y="596">X2</text>
                <text x="520" y="596">|</text>
                <text x="548" y="596">N2),</text>
                <text x="508" y="612">0x),</text>
                <text x="520" y="628">CTX_OLD</text>
                <text x="560" y="628">)</text>
                <text x="280" y="660">Request</text>
                <text x="332" y="660">#1_B</text>
                <text x="424" y="676">Protect</text>
                <text x="476" y="676">with</text>
                <text x="540" y="676">CTX_TEMP_B</text>
                <text x="236" y="692">OSCORE</text>
                <text x="272" y="692">{</text>
                <text x="232" y="708">...</text>
                <text x="416" y="708">KUDOS</text>
                <text x="472" y="708">status:</text>
                <text x="248" y="724">Partial</text>
                <text x="296" y="724">IV:</text>
                <text x="320" y="724">0</text>
                <text x="428" y="724">CTX_OLD:</text>
                <text x="480" y="724">X2,</text>
                <text x="508" y="724">N2</text>
                <text x="232" y="740">...</text>
                <text x="420" y="740">State:</text>
                <text x="468" y="740">BUSY</text>
                <text x="512" y="740">(1,0)</text>
                <text x="224" y="756">d</text>
                <text x="256" y="756">flag:</text>
                <text x="288" y="756">1</text>
                <text x="228" y="772">x:</text>
                <text x="252" y="772">X2</text>
                <text x="272" y="772">=</text>
                <text x="328" y="772">b'00000111'</text>
                <text x="244" y="788">nonce:</text>
                <text x="284" y="788">N2</text>
                <text x="232" y="804">...</text>
                <text x="216" y="820">}</text>
                <text x="256" y="836">Encrypted</text>
                <text x="328" y="836">Payload</text>
                <text x="368" y="836">{</text>
                <text x="240" y="852">...</text>
                <text x="216" y="868">}</text>
                <text x="236" y="932">(Request</text>
                <text x="292" y="932">#1_A</text>
                <text x="348" y="932">arrives)</text>
                <text x="280" y="964">Request</text>
                <text x="332" y="964">#1_A</text>
                <text x="320" y="980">...</text>
                <text x="468" y="980">/.well-known/kudos</text>
                <text x="236" y="996">OSCORE</text>
                <text x="272" y="996">{</text>
                <text x="232" y="1012">...</text>
                <text x="436" y="1012">CTX_TEMP_A</text>
                <text x="488" y="1012">=</text>
                <text x="540" y="1012">updateCtx(</text>
                <text x="248" y="1028">Partial</text>
                <text x="296" y="1028">IV:</text>
                <text x="320" y="1028">0</text>
                <text x="472" y="1028">0x,</text>
                <text x="232" y="1044">...</text>
                <text x="468" y="1044">X1</text>
                <text x="488" y="1044">|</text>
                <text x="512" y="1044">N1,</text>
                <text x="224" y="1060">d</text>
                <text x="256" y="1060">flag:</text>
                <text x="288" y="1060">1</text>
                <text x="488" y="1060">CTX_OLD</text>
                <text x="528" y="1060">)</text>
                <text x="236" y="1076">x:X1</text>
                <text x="264" y="1076">=</text>
                <text x="320" y="1076">b'00000111'</text>
                <text x="244" y="1092">nonce:</text>
                <text x="284" y="1092">N1</text>
                <text x="420" y="1092">Verify</text>
                <text x="468" y="1092">with</text>
                <text x="532" y="1092">CTX_TEMP_A</text>
                <text x="232" y="1108">...</text>
                <text x="216" y="1124">}</text>
                <text x="416" y="1124">KUDOS</text>
                <text x="472" y="1124">status:</text>
                <text x="248" y="1140">Encrypted</text>
                <text x="320" y="1140">Payload</text>
                <text x="360" y="1140">{</text>
                <text x="428" y="1140">CTX_OLD:</text>
                <text x="480" y="1140">X2,</text>
                <text x="508" y="1140">N2</text>
                <text x="232" y="1156">...</text>
                <text x="420" y="1156">State:</text>
                <text x="468" y="1156">BUSY</text>
                <text x="512" y="1156">(1,0)</text>
                <text x="216" y="1172">}</text>
                <text x="424" y="1204">CTX_NEW</text>
                <text x="464" y="1204">=</text>
                <text x="516" y="1204">updateCtx(</text>
                <text x="492" y="1220">X2</text>
                <text x="540" y="1220">N2),</text>
                <text x="492" y="1236">X1</text>
                <text x="536" y="1236">N1)</text>
                <text x="512" y="1252">CTX_OLD</text>
                <text x="552" y="1252">)</text>
                <text x="284" y="1284">Response</text>
                <text x="340" y="1284">#2_A</text>
                <text x="424" y="1300">Protect</text>
                <text x="476" y="1300">with</text>
                <text x="528" y="1300">CTX_NEW</text>
                <text x="236" y="1316">OSCORE</text>
                <text x="272" y="1316">{</text>
                <text x="232" y="1332">...</text>
                <text x="416" y="1332">KUDOS</text>
                <text x="472" y="1332">status:</text>
                <text x="248" y="1348">Partial</text>
                <text x="296" y="1348">IV:</text>
                <text x="320" y="1348">0</text>
                <text x="428" y="1348">CTX_OLD:</text>
                <text x="480" y="1348">X2,</text>
                <text x="508" y="1348">N2</text>
                <text x="232" y="1364">...</text>
                <text x="420" y="1364">State:</text>
                <text x="480" y="1364">PENDING</text>
                <text x="536" y="1364">(1,1)</text>
                <text x="224" y="1380">d</text>
                <text x="256" y="1380">flag:</text>
                <text x="288" y="1380">1</text>
                <text x="228" y="1396">x:</text>
                <text x="252" y="1396">X2</text>
                <text x="272" y="1396">=</text>
                <text x="328" y="1396">b'01000111'</text>
                <text x="244" y="1412">nonce:</text>
                <text x="284" y="1412">N2</text>
                <text x="232" y="1428">...</text>
                <text x="216" y="1444">}</text>
                <text x="256" y="1460">Encrypted</text>
                <text x="328" y="1460">Payload</text>
                <text x="368" y="1460">{</text>
                <text x="240" y="1476">...</text>
                <text x="216" y="1492">}</text>
                <text x="236" y="1556">(Request</text>
                <text x="292" y="1556">#1_B</text>
                <text x="348" y="1556">arrives)</text>
                <text x="280" y="1588">Request</text>
                <text x="332" y="1588">#1_B</text>
                <text x="256" y="1604">...</text>
                <text x="424" y="1604">Protect</text>
                <text x="476" y="1604">with</text>
                <text x="540" y="1604">CTX_TEMP_B</text>
                <text x="236" y="1620">OSCORE</text>
                <text x="272" y="1620">{</text>
                <text x="232" y="1636">...</text>
                <text x="44" y="1652">CTX_TEMP_B</text>
                <text x="96" y="1652">=</text>
                <text x="148" y="1652">updateCtx(</text>
                <text x="248" y="1652">Partial</text>
                <text x="296" y="1652">IV:</text>
                <text x="320" y="1652">0</text>
                <text x="80" y="1668">0x,</text>
                <text x="232" y="1668">...</text>
                <text x="76" y="1684">X2</text>
                <text x="96" y="1684">|</text>
                <text x="120" y="1684">N2,</text>
                <text x="224" y="1684">d</text>
                <text x="256" y="1684">flag:</text>
                <text x="288" y="1684">1</text>
                <text x="96" y="1700">CTX_OLD</text>
                <text x="136" y="1700">)</text>
                <text x="228" y="1700">x:</text>
                <text x="252" y="1700">X2</text>
                <text x="272" y="1700">=</text>
                <text x="328" y="1700">b'00000111'</text>
                <text x="244" y="1716">nonce:</text>
                <text x="284" y="1716">N2</text>
                <text x="28" y="1732">Verify</text>
                <text x="76" y="1732">with</text>
                <text x="140" y="1732">CTX_TEMP_B</text>
                <text x="232" y="1732">...</text>
                <text x="216" y="1748">}</text>
                <text x="248" y="1764">Encrypted</text>
                <text x="320" y="1764">Payload</text>
                <text x="360" y="1764">{</text>
                <text x="224" y="1780">...</text>
                <text x="216" y="1796">}</text>
                <text x="32" y="1860">CTX_NEW</text>
                <text x="72" y="1860">=</text>
                <text x="124" y="1860">updateCtx(</text>
                <text x="12" y="1876">X1</text>
                <text x="56" y="1876">N1,</text>
                <text x="12" y="1892">X2</text>
                <text x="56" y="1892">N2,</text>
                <text x="32" y="1908">CTX_OLD</text>
                <text x="72" y="1908">)</text>
                <text x="284" y="1924">Response</text>
                <text x="340" y="1924">#2_B</text>
                <text x="32" y="1940">Protect</text>
                <text x="84" y="1940">with</text>
                <text x="136" y="1940">CTX_NEW</text>
                <text x="468" y="1940">/.well-known/kudos</text>
                <text x="236" y="1956">OSCORE</text>
                <text x="272" y="1956">{</text>
                <text x="24" y="1972">KUDOS</text>
                <text x="80" y="1972">status:</text>
                <text x="232" y="1972">...</text>
                <text x="8" y="1988">-</text>
                <text x="52" y="1988">CTX_OLD:</text>
                <text x="104" y="1988">X1,</text>
                <text x="132" y="1988">N1</text>
                <text x="224" y="1988">d</text>
                <text x="256" y="1988">flag:</text>
                <text x="288" y="1988">1</text>
                <text x="8" y="2004">-</text>
                <text x="44" y="2004">State:</text>
                <text x="104" y="2004">PENDING</text>
                <text x="160" y="2004">(1,1)</text>
                <text x="228" y="2004">x:</text>
                <text x="252" y="2004">X1</text>
                <text x="272" y="2004">=</text>
                <text x="328" y="2004">b'01000111'</text>
                <text x="244" y="2020">nonce:</text>
                <text x="284" y="2020">N1</text>
                <text x="232" y="2036">...</text>
                <text x="216" y="2052">}</text>
                <text x="248" y="2068">Encrypted</text>
                <text x="320" y="2068">Payload</text>
                <text x="360" y="2068">{</text>
                <text x="232" y="2084">...</text>
                <text x="264" y="2100">Application</text>
                <text x="344" y="2100">Payload</text>
                <text x="284" y="2164">Response</text>
                <text x="340" y="2164">#2_A</text>
                <text x="360" y="2180">.....</text>
                <text x="424" y="2180">Protect</text>
                <text x="476" y="2180">with</text>
                <text x="528" y="2180">CTX_NEW</text>
                <text x="236" y="2196">OSCORE</text>
                <text x="272" y="2196">{</text>
                <text x="232" y="2212">...</text>
                <text x="248" y="2228">Partial</text>
                <text x="296" y="2228">IV:</text>
                <text x="320" y="2228">0</text>
                <text x="232" y="2244">...</text>
                <text x="224" y="2260">d</text>
                <text x="256" y="2260">flag:</text>
                <text x="288" y="2260">1</text>
                <text x="228" y="2276">x:</text>
                <text x="252" y="2276">X2</text>
                <text x="272" y="2276">=</text>
                <text x="328" y="2276">b'01000111'</text>
                <text x="244" y="2292">nonce:</text>
                <text x="284" y="2292">N2</text>
                <text x="28" y="2308">Verify</text>
                <text x="76" y="2308">with</text>
                <text x="128" y="2308">CTX_NEW</text>
                <text x="232" y="2308">...</text>
                <text x="216" y="2324">}</text>
                <text x="8" y="2340">/</text>
                <text x="32" y="2340">key</text>
                <text x="100" y="2340">confirmation</text>
                <text x="160" y="2340">/</text>
                <text x="256" y="2340">Encrypted</text>
                <text x="328" y="2340">Payload</text>
                <text x="368" y="2340">{</text>
                <text x="240" y="2356">...</text>
                <text x="36" y="2372">Pre-IDLE</text>
                <text x="100" y="2372">steps:</text>
                <text x="216" y="2372">}</text>
                <text x="28" y="2388">Delete</text>
                <text x="100" y="2388">CTX_TEMP_A</text>
                <text x="28" y="2404">Delete</text>
                <text x="100" y="2404">CTX_TEMP_B</text>
                <text x="28" y="2420">Delete</text>
                <text x="92" y="2420">CTX_OLD,</text>
                <text x="144" y="2420">X1,</text>
                <text x="172" y="2420">N1</text>
                <text x="24" y="2452">KUDOS</text>
                <text x="80" y="2452">status:</text>
                <text x="36" y="2468">CTX_NEW:</text>
                <text x="84" y="2468">-,</text>
                <text x="104" y="2468">-</text>
                <text x="28" y="2484">State:</text>
                <text x="76" y="2484">IDLE</text>
                <text x="120" y="2484">(0,0)</text>
                <text x="284" y="2532">Response</text>
                <text x="340" y="2532">#2_B</text>
                <text x="32" y="2548">Protect</text>
                <text x="84" y="2548">with</text>
                <text x="136" y="2548">CTX_NEW</text>
                <text x="220" y="2548">....</text>
                <text x="236" y="2564">OSCORE</text>
                <text x="272" y="2564">{</text>
                <text x="232" y="2580">...</text>
                <text x="224" y="2596">d</text>
                <text x="256" y="2596">flag:</text>
                <text x="288" y="2596">1</text>
                <text x="420" y="2596">Verify</text>
                <text x="468" y="2596">with</text>
                <text x="520" y="2596">CTX_NEW</text>
                <text x="228" y="2612">x:</text>
                <text x="252" y="2612">X1</text>
                <text x="272" y="2612">=</text>
                <text x="328" y="2612">b'01000111'</text>
                <text x="400" y="2612">/</text>
                <text x="424" y="2612">key</text>
                <text x="492" y="2612">confirmation</text>
                <text x="552" y="2612">/</text>
                <text x="244" y="2628">nonce:</text>
                <text x="284" y="2628">N1</text>
                <text x="232" y="2644">...</text>
                <text x="428" y="2644">Pre-IDLE</text>
                <text x="492" y="2644">steps:</text>
                <text x="216" y="2660">}</text>
                <text x="420" y="2660">Delete</text>
                <text x="492" y="2660">CTX_TEMP_A</text>
                <text x="248" y="2676">Encrypted</text>
                <text x="320" y="2676">Payload</text>
                <text x="360" y="2676">{</text>
                <text x="420" y="2676">Delete</text>
                <text x="492" y="2676">CTX_TEMP_B</text>
                <text x="232" y="2692">...</text>
                <text x="420" y="2692">Delete</text>
                <text x="484" y="2692">CTX_OLD,</text>
                <text x="536" y="2692">X2,</text>
                <text x="564" y="2692">N2</text>
                <text x="264" y="2708">Application</text>
                <text x="344" y="2708">Payload</text>
                <text x="216" y="2724">}</text>
                <text x="416" y="2740">KUDOS</text>
                <text x="472" y="2740">status:</text>
                <text x="428" y="2772">CTX_NEW:</text>
                <text x="476" y="2772">-,</text>
                <text x="496" y="2772">-</text>
                <text x="420" y="2788">State:</text>
                <text x="468" y="2788">IDLE</text>
                <text x="512" y="2788">(0,0)</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
KUDOS status:                                         KUDOS status:
- CTX_OLD: -,-                                        - CTX_OLD: -,-
- State: IDLE (0,0)                                   - State: IDLE (0,0)

                     Client                  Server
                   (initiator)            (responder)
                        |                      |
Generate N1, X1         |                      |
                        |                      |
CTX_TEMP_A = updateCtx( |                      |
          X1 | N1,      |                      |
          0x,           |                      |
          CTX_OLD )     |                      |
                        |                      |
                        |      Request #1_A    |
Protect with CTX_TEMP_A +------------> ...     | /.well-known/kudos
                        | OSCORE {             |
KUDOS status:           |  ...                 |
CTX_OLD: X1, N1         |  Partial IV: 0       |
State: BUSY (1,0)       |  ...                 |
                        |  d flag: 1           |
                        |  x: X1 = b'00000111' |
                        |  nonce: N1           |
                        |  ...                 |
                        | }                    |
                        | Encrypted Payload {  |
                        |  ...                 |
                        | }                    |
                        |                      |
                        |                      |
                        |                      |
                        |                      |
                        |                      | Generate N2, X2
                        |                      |
                        |                      | CTX_TEMP_B = updateCtx(
                        |                      |             X2 | N2),
                        |                      |             0x),
                        |                      |             CTX_OLD )
                        |                      |
                        |      Request #1_B    |
                        |      <---------------+ Protect with CTX_TEMP_B
                        | OSCORE {             |
                        |  ...                 | KUDOS status:
                        |  Partial IV: 0       | CTX_OLD: X2, N2
                        |  ...                 | State: BUSY (1,0)
                        |  d flag: 1           |
                        |  x: X2 = b'00000111' |
                        |  nonce: N2           |
                        |  ...                 |
                        | }                    |
                        |  Encrypted Payload { |
                        |   ...                |
                        | }                    |
                        |                      |
                        |                      |
                        |                      |
                        |(Request #1_A arrives)|
                        |                      |
                        |      Request #1_A    |
                        |             ... ---->| /.well-known/kudos
                        | OSCORE {             |
                        |  ...                 | CTX_TEMP_A = updateCtx(
                        |  Partial IV: 0       |         0x,
                        |  ...                 |         X1 | N1,
                        |  d flag: 1           |         CTX_OLD )
                        |  x:X1 = b'00000111'  |
                        |  nonce: N1           | Verify with CTX_TEMP_A
                        |  ...                 |
                        | }                    | KUDOS status:
                        | Encrypted Payload {  | CTX_OLD: X2, N2
                        |  ...                 | State: BUSY (1,0)
                        | }                    |
                        |                      |
                        |                      | CTX_NEW = updateCtx(
                        |                      |            X2 | N2),
                        |                      |            X1 | N1),
                        |                      |            CTX_OLD )
                        |                      |
                        |      Response #2_A   |
                        |      <---------------+ Protect with CTX_NEW
                        | OSCORE {             |
                        |  ...                 | KUDOS status:
                        |  Partial IV: 0       | CTX_OLD: X2, N2
                        |  ...                 | State: PENDING (1,1)
                        |  d flag: 1           |
                        |  x: X2 = b'01000111' |
                        |  nonce: N2           |
                        |  ...                 |
                        | }                    |
                        |  Encrypted Payload { |
                        |   ...                |
                        | }                    |
                        |                      |
                        |                      |
                        |                      |
                        |(Request #1_B arrives)|
                        |                      |
                        |      Request #1_B    |
                        |<--- ...              + Protect with CTX_TEMP_B
                        | OSCORE {             |
                        |  ...                 |
CTX_TEMP_B = updateCtx( |  Partial IV: 0       |
        0x,             |  ...                 |
        X2 | N2,        |  d flag: 1           |
        CTX_OLD )       |  x: X2 = b'00000111' |
                        |  nonce: N2           |
Verify with CTX_TEMP_B  |  ...                 |
                        | }                    |
                        | Encrypted Payload {  |
                        | ...                  |
                        | }                    |
                        |                      |
                        |                      |
                        |                      |
CTX_NEW = updateCtx(    |                      |
X1 | N1,                |                      |
X2 | N2,                |                      |
CTX_OLD )               |                      |
                        |      Response #2_B   |
Protect with CTX_NEW    +--------------->      | /.well-known/kudos
                        | OSCORE {             |
KUDOS status:           |  ...                 |
- CTX_OLD: X1, N1       |  d flag: 1           |
- State: PENDING (1,1)  |  x: X1 = b'01000111' |
                        |  nonce: N1           |
                        |  ...                 |
                        | }                    |
                        | Encrypted Payload {  |
                        |  ...                 |
                        |  Application Payload |
                        |                      |
                        |                      |
                        |                      |
                        |      Response #2_A   |
                        |<---------------......+ Protect with CTX_NEW
                        | OSCORE {             |
                        |  ...                 |
                        |  Partial IV: 0       |
                        |  ...                 |
                        |  d flag: 1           |
                        |  x: X2 = b'01000111' |
                        |  nonce: N2           |
Verify with CTX_NEW     |  ...                 |
                        | }                    |
/ key confirmation /    |  Encrypted Payload { |
                        |   ...                |
Pre-IDLE steps:         | }                    |
Delete CTX_TEMP_A       |                      |
Delete CTX_TEMP_B       |                      |
Delete CTX_OLD, X1, N1  |                      |
                        |                      |
KUDOS status:           |                      |
CTX_NEW: -, -           |                      |
State: IDLE (0,0)       |                      |
                        |                      |
                        |                      |
                        |      Response #2_B   |
Protect with CTX_NEW    +.....---------------->|
                        | OSCORE {             |
                        |  ...                 |
                        |  d flag: 1           | Verify with CTX_NEW
                        |  x: X1 = b'01000111' | / key confirmation /
                        |  nonce: N1           |
                        |  ...                 | Pre-IDLE steps:
                        | }                    | Delete CTX_TEMP_A
                        | Encrypted Payload {  | Delete CTX_TEMP_B
                        |  ...                 | Delete CTX_OLD, X2, N2
                        |  Application Payload |
                        | }                    |
                        |                      | KUDOS status:
                        |                      |
                        |                      | CTX_NEW: -, -
                        |                      | State: IDLE (0,0)
                        |                      |
]]></artwork>
        </artset>
      </section>
    </section>
    <section anchor="kudos-state-machine-figure">
      <name>KUDOS State Machine</name>
      <t>The following illustrates the states and transitions of the KUDOS state machine.</t>
      <artset>
        <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="800" width="568" viewBox="0 0 568 800" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
            <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
            <path d="M 8,144 L 8,176" fill="none" stroke="black"/>
            <path d="M 8,304 L 8,336" fill="none" stroke="black"/>
            <path d="M 8,528 L 8,560" fill="none" stroke="black"/>
            <path d="M 48,72 L 48,136" fill="none" stroke="black"/>
            <path d="M 48,184 L 48,296" fill="none" stroke="black"/>
            <path d="M 48,344 L 48,520" fill="none" stroke="black"/>
            <path d="M 48,568 L 48,784" fill="none" stroke="black"/>
            <path d="M 104,32 L 104,64" fill="none" stroke="black"/>
            <path d="M 104,144 L 104,176" fill="none" stroke="black"/>
            <path d="M 104,304 L 104,336" fill="none" stroke="black"/>
            <path d="M 104,528 L 104,560" fill="none" stroke="black"/>
            <path d="M 224,160 L 224,224" fill="none" stroke="black"/>
            <path d="M 256,544 L 256,624" fill="none" stroke="black"/>
            <path d="M 280,320 L 280,384" fill="none" stroke="black"/>
            <path d="M 296,48 L 296,704" fill="none" stroke="black"/>
            <path d="M 8,32 L 104,32" fill="none" stroke="black"/>
            <path d="M 112,48 L 296,48" fill="none" stroke="black"/>
            <path d="M 8,64 L 104,64" fill="none" stroke="black"/>
            <path d="M 8,144 L 104,144" fill="none" stroke="black"/>
            <path d="M 112,160 L 224,160" fill="none" stroke="black"/>
            <path d="M 8,176 L 104,176" fill="none" stroke="black"/>
            <path d="M 192,224 L 224,224" fill="none" stroke="black"/>
            <path d="M 8,304 L 104,304" fill="none" stroke="black"/>
            <path d="M 112,320 L 280,320" fill="none" stroke="black"/>
            <path d="M 8,336 L 104,336" fill="none" stroke="black"/>
            <path d="M 184,384 L 280,384" fill="none" stroke="black"/>
            <path d="M 200,432 L 296,432" fill="none" stroke="black"/>
            <path d="M 8,528 L 104,528" fill="none" stroke="black"/>
            <path d="M 112,544 L 256,544" fill="none" stroke="black"/>
            <path d="M 8,560 L 104,560" fill="none" stroke="black"/>
            <path d="M 208,624 L 256,624" fill="none" stroke="black"/>
            <path d="M 184,704 L 296,704" fill="none" stroke="black"/>
            <path d="M 64,784 L 248,784" fill="none" stroke="black"/>
            <polygon class="arrowhead" points="256,784 244,778.4 244,789.6" fill="black" transform="rotate(0,248,784)"/>
            <polygon class="arrowhead" points="120,544 108,538.4 108,549.6" fill="black" transform="rotate(180,112,544)"/>
            <polygon class="arrowhead" points="120,320 108,314.4 108,325.6" fill="black" transform="rotate(180,112,320)"/>
            <polygon class="arrowhead" points="120,160 108,154.4 108,165.6" fill="black" transform="rotate(180,112,160)"/>
            <polygon class="arrowhead" points="120,48 108,42.4 108,53.6" fill="black" transform="rotate(180,112,48)"/>
            <polygon class="arrowhead" points="56,520 44,514.4 44,525.6" fill="black" transform="rotate(90,48,520)"/>
            <polygon class="arrowhead" points="56,296 44,290.4 44,301.6" fill="black" transform="rotate(90,48,296)"/>
            <polygon class="arrowhead" points="56,136 44,130.4 44,141.6" fill="black" transform="rotate(90,48,136)"/>
            <g class="text">
              <text x="52" y="52">PRE-IDLE</text>
              <text x="88" y="100">Clean</text>
              <text x="124" y="100">up</text>
              <text x="152" y="100">and</text>
              <text x="196" y="100">delete</text>
              <text x="132" y="116">CTX_TEMP/CTX_OLD</text>
              <text x="52" y="164">IDLE</text>
              <text x="88" y="212">Receive</text>
              <text x="168" y="212">CONVERGENT:</text>
              <text x="72" y="228">-</text>
              <text x="100" y="228">Stay</text>
              <text x="132" y="228">in</text>
              <text x="164" y="228">IDLE</text>
              <text x="76" y="260">Send</text>
              <text x="108" y="260">or</text>
              <text x="152" y="260">receive</text>
              <text x="228" y="260">DIVERGENT:</text>
              <text x="72" y="276">-</text>
              <text x="92" y="276">Go</text>
              <text x="116" y="276">to</text>
              <text x="148" y="276">BUSY</text>
              <text x="52" y="324">BUSY</text>
              <text x="76" y="372">Send</text>
              <text x="136" y="372">DIVERGENT</text>
              <text x="220" y="372">(stalled):</text>
              <text x="64" y="388">-</text>
              <text x="92" y="388">Stay</text>
              <text x="124" y="388">in</text>
              <text x="156" y="388">BUSY</text>
              <text x="88" y="420">Receive</text>
              <text x="168" y="420">CONVERGENT:</text>
              <text x="64" y="436">-</text>
              <text x="84" y="436">Go</text>
              <text x="108" y="436">to</text>
              <text x="156" y="436">PRE-IDLE</text>
              <text x="76" y="468">Send</text>
              <text x="140" y="468">CONVERGENT</text>
              <text x="68" y="484">or</text>
              <text x="112" y="484">Receive</text>
              <text x="188" y="484">DIVERGENT:</text>
              <text x="64" y="500">-</text>
              <text x="84" y="500">Go</text>
              <text x="108" y="500">to</text>
              <text x="152" y="500">PENDING</text>
              <text x="56" y="548">PENDING</text>
              <text x="76" y="596">Need</text>
              <text x="108" y="596">to</text>
              <text x="140" y="596">send</text>
              <text x="204" y="596">something:</text>
              <text x="64" y="612">-</text>
              <text x="92" y="612">Send</text>
              <text x="124" y="612">as</text>
              <text x="180" y="612">CONVERGENT</text>
              <text x="64" y="628">-</text>
              <text x="92" y="628">Stay</text>
              <text x="124" y="628">in</text>
              <text x="168" y="628">PENDING</text>
              <text x="88" y="660">Receive</text>
              <text x="164" y="660">CONVERGENT</text>
              <text x="68" y="676">OR</text>
              <text x="120" y="676">non-KUDOS</text>
              <text x="192" y="676">message</text>
              <text x="96" y="692">protected</text>
              <text x="156" y="692">with</text>
              <text x="212" y="692">CTX_NEW:</text>
              <text x="68" y="708">Go</text>
              <text x="92" y="708">to</text>
              <text x="140" y="708">PRE-IDLE</text>
              <text x="88" y="740">Receive</text>
              <text x="164" y="740">DIVERGENT:</text>
              <text x="88" y="756">Attempt</text>
              <text x="132" y="756">to</text>
              <text x="176" y="756">decrypt</text>
              <text x="232" y="756">using</text>
              <text x="292" y="756">CTX_OLD,</text>
              <text x="348" y="756">then</text>
              <text x="400" y="756">CTX_NEW</text>
              <text x="444" y="756">as</text>
              <text x="480" y="756">input</text>
              <text x="536" y="756">context</text>
              <text x="84" y="772">Revert</text>
              <text x="124" y="772">to</text>
              <text x="160" y="772">using</text>
              <text x="216" y="772">CTX_NEW</text>
              <text x="260" y="772">as</text>
              <text x="308" y="772">CTX_OLD,</text>
              <text x="356" y="772">or</text>
              <text x="404" y="772">continue</text>
              <text x="464" y="772">using</text>
              <text x="520" y="772">CTX_OLD</text>
              <text x="272" y="788">(Go</text>
              <text x="300" y="788">to</text>
              <text x="336" y="788">BUSY)</text>
            </g>
          </svg>
        </artwork>
        <artwork type="ascii-art"><![CDATA[
+-----------+
| PRE-IDLE  |<----------------------+
+-----------+                       |
     |                              |
     |  Clean up and delete         |
     |  CTX_TEMP/CTX_OLD            |
     v                              |
+-----------+                       |
|   IDLE    |<-------------+        |
+-----------+              |        |
     |                     |        |
     | Receive CONVERGENT: |        |
     |  - Stay in IDLE ----+        |
     |                              |
     | Send or receive DIVERGENT:   |
     |  - Go to BUSY                |
     v                              |
+-----------+                       |
|   BUSY    |<--------------------+ |
+-----------+                     | |
     |                            | |
     | Send DIVERGENT (stalled):  | |
     | - Stay in BUSY ------------+ |
     |                              |
     | Receive CONVERGENT:          |
     | - Go to PRE-IDLE ------------+
     |                              |
     | Send CONVERGENT              |
     | or Receive DIVERGENT:        |
     | - Go to PENDING              |
     v                              |
+-----------+                       |
|  PENDING  |<-----------------+    |
+-----------+                  |    |
     |                         |    |
     | Need to send something: |    |
     | - Send as CONVERGENT    |    |
     | - Stay in PENDING ------+    |
     |                              |
     | Receive CONVERGENT           |
     | OR non-KUDOS message         |
     | protected with CTX_NEW:      |
     | Go to PRE-IDLE --------------+
     |
     | Receive DIVERGENT:
     | Attempt to decrypt using CTX_OLD, then CTX_NEW as input context
     | Revert to using CTX_NEW as CTX_OLD, or continue using CTX_OLD
     | -----------------------> (Go to BUSY)
]]></artwork>
      </artset>
    </section>
    <section anchor="sec-document-updates" removeInRFC="true">
      <name>Document Updates</name>
      <section anchor="sec-11-12">
        <name>Version -11 to -12</name>
        <ul spacing="normal">
          <li>
            <t>Add multiple additional message flow examples.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
          <li>
            <t>Add diagram of KUDOS state machine.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-10-11">
        <name>Version -10 to -11</name>
        <ul spacing="normal">
          <li>
            <t>Extended security considerations.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
          <li>
            <t>Updates to IANA considerations according to IANA early reviews.</t>
          </li>
          <li>
            <t>Extended section about updated protection of CoAP responses.</t>
          </li>
          <li>
            <t>Discussion about combining usage of KUDOS with profiles of ACE.</t>
          </li>
          <li>
            <t>Optimization for traversing the state machine upon reception of a divergent message.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-09-10">
        <name>Version -09 to -10</name>
        <ul spacing="normal">
          <li>
            <t>Major re-design building on a state machine driving the KUDOS execution.</t>
          </li>
        </ul>
      </section>
      <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:
H4sIAAAAAAAAA+2921YcR7Yo+s5X5EFjbMCuwhS6WKbbXqcEyKItIW1Abnts
76GRVCWQrarMWplZICxp/8o+X7GfztNZP3bmNS6ZkXVBSLLdYi23oCozYsaM
GfMW89Ltdlcud6K7KytVWo2SnSj6KbmOXk6GcZVEZ3kRPT/efX60H63/9HLv
+fHGSnx6WiTwwuynhvkgi8cw2rCIz6pumlRn3UFeJN28pH9eJ9fdKb3dHcH/
lNXKSjopdqKqmJbV9tbWd1vbK1fnO9FuDoP+My9ep9l59GORTycrr692ooOs
Soosqbp7OPzKIK52orIarpTT03FalmmeVdcTmP1g/+TxCs9T7kQPH/RgmYN8
CIPtRFMA6eHKSjytLvJiZyWin678G0VpBm8cbUZP/uv/nI+m2dB8wes6Sl/H
xbD5bV7A0EcHx/tR/5H5sKyKJAEQD8r47F95MSzP4yrOou1t88Qgra4Bp2lZ
xfazfAgTHe93ew/u3duKjqt88PoiH42dB6ZZVcB7x1fJMMnM58k4Tkc7UUEg
bl7kBOH/XaSbZRJe5rPN6CQd5YO4tshncTHI61/9gVY4Rvg2K4JP1reS5cU4
rtLLBLf06PHu/YcPvpNfv92+v62/PrjXk1+RKvTX7+7ps9/d3364A0SZndXG
e3jv3gMd5P79e/pp7+GWvrl1V4f+DijZ/qqzfNf79oGd+77++u22Geyh+fXb
7x58K7/e23pIrx109zbTAs/TWXHejZN42B2l47QqzZehwxZ4JB4k3WR4kQ/0
uUmRn6UjWujTq2fbz/hQ+AeEdv/5JMmiZ/kpPBz1R6M0zgZMWcJCnqbnF9VV
gv8LNDS4SLMkqnLz60kyuMjSQTyKjifJID2DXys4slEXjnuRdKL+BCC5TIbR
z0mBZznqbW53oufP+t2T464zNoD4Ct/o/tx7td3d3tre6vV6W90+gYJnfifC
D7u9HgMXF+dIoxdVNdn55purq6vNHBYypnXEsoxNWOA3RQIflMk3/lzf1Kb5
ZnGINifDM4Dh+Ho8TqoiHXSPk8G0wBMRQPHZdDTi8/eP/CKLXhTJ9L/+NyCv
qsoyz9x92Ieh8LPoKCkTOAsX7iboFFF+ZieOjuJqcJFUZRRnQ+Lhuxcx8ADA
/cF4MpKdKImlvyhyOJD5qIxG6WvYtafHsBF3O9Fxep7Fow6N8OK/3/Wxfa+7
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

-->

</rfc>
