<?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.31 (Ruby 2.7.0) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-oscore-key-update-13" 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-13"/>
    <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="2026" month="March" day="02"/>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 85?>

<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 89?>

<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 that their communications remain secure. 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 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 must establish new Sender and Recipient Keys, which are the keys actually used by the AEAD algorithm.</t>
      <t>In addition to approaching 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 it 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 again receive 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 cannot write in non-volatile memory. Two peers <bcp14>MUST</bcp14> run KUDOS in FS mode if they are both capable of doing 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' and signaling bits that indicate specific behavior during 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 of doing 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 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 takes 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, 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 regularly storing 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 of the Bootstrap Master Secret and Bootstrap Master Salt, while Latest material specifically consists of 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 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 preserving 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 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="I-D.ietf-schc-8824-update"/> and further specified in <xref target="schc"/> of the present document.</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="12" sectionFormat="of" target="I-D.ietf-schc-8824-update"/>).</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>A resource 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="schc">
      <name>CoAP Header Compression with SCHC</name>
      <t>In order to compress the header of CoAP messages, it is possible to use the Static Context Header Compression and fragmentation (SCHC) framework <xref target="RFC8724"/>. In particular, <xref section="6.4" sectionFormat="of" target="I-D.ietf-schc-8824-update"/> specifies how to use SCHC for compressing headers of CoAP messages also when messages are protected with OSCORE.</t>
      <t>The following <xref target="fig-oscore-option-schc"/> builds on <xref target="fig-oscore-option"/> from <xref target="ssec-oscore-option-extensions"/> of the present document and accordingly extends Figure 4 from <xref section="6.4" sectionFormat="of" target="I-D.ietf-schc-8824-update"/>.</t>
      <figure anchor="fig-oscore-option-schc">
        <name>The Extended OSCORE Option Value with Superimposed Subfields for SCHC Compression</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) |
+-+-+-+-+-+-+-+-+---+---+---+---+---+---+---+---+---------------------+
|                                               |                     |
|<------------------- flags ------------------->|<------- piv ------->|


 <- 1 byte -> <--------- s bytes --------->
+------------+----------------------------+
| s (if any) |    kid context (if any)    |
+------------+----------------------------+
|                                         |
|<--------------- kid_ctx --------------->|


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


+---------------------+
|   kid (if any) ...  |
+---------------------+
|                     |
|<------- kid ------->|
]]></artwork>
      </figure>
      <t>Like described in <xref section="6.4" sectionFormat="of" target="I-D.ietf-schc-8824-update"/>, the description of a SCHC compression Rule needs to identify the OSCORE Option value and its inner fields.</t>
      <t>In order to take into account the possible use of KUDOS, SCHC discerns six distinct pieces of information within the extended OSCORE Option value shown in <xref target="fig-oscore-option-schc"/> above: the flag bits, the Partial IV, the kid context prepended by its size s, the x byte, the nonce, and the kid. The SCHC Rule splits the OSCORE Option value into six corresponding Field Descriptors, in order to separately compress those pieces of information as distinct subfields:</t>
      <ul spacing="normal">
        <li>
          <t>flags</t>
        </li>
        <li>
          <t>piv</t>
        </li>
        <li>
          <t>kid_ctx</t>
        </li>
        <li>
          <t>x</t>
        </li>
        <li>
          <t>nonce</t>
        </li>
        <li>
          <t>kid</t>
        </li>
      </ul>
      <t>In <xref target="fig-oscore-option-schc"/>, the six subfields are superimposed on the shown extended format of the OSCORE Option value.</t>
      <t>Consistent with what is defined in <xref section="6.4" sectionFormat="of" target="I-D.ietf-schc-8824-update"/>, if a SCHC Rule is intended to compress a CoAP message that specifies the OSCORE Option as per <xref target="fig-oscore-option-schc"/>, then the related Field Descriptors must be listed in the same order according to which the corresponding pieces of information appear in the OSCORE Option value.</t>
      <t>As to the x subfield and the nonce subfield, the following applies.</t>
      <ul spacing="normal">
        <li>
          <t>For the x subfield, if both endpoints using SCHC know the value, then the corresponding Field Descriptor in the SCHC Rule describes the TV set to that value, with the MO set to "equal" and the CDA set to "not-sent". This models the following cases:  </t>
          <ul spacing="normal">
            <li>
              <t>The x subfield is not present, and thus TV is set to b''.</t>
            </li>
            <li>
              <t>Given a fixed z bit of the x subfield as denoting either a divergent or convergent KUDOS message, the two endpoints run KUDOS with a pre-agreed size of the nonce subfield as per the value encoded by m within the x subfield, as well as with a pre-agreed combination of its modes of operation, as per the bits b and p of the x subfield.      </t>
              <t>
Under the assumed pre-agreements above, this requires two distinct SCHC Rules, whose respective TV is set to a value that reflects the z bit as set or not set, respectively.</t>
            </li>
          </ul>
          <t>
As an alternative that is more flexible to changes in the value of the x subfield, the corresponding Field Descriptor in the SCHC Rule does not set the TV, while it sets the MO to "ignore" and the CDA to "value-sent". In the same spirit, the Rule may also use a "match-mapping" MO to compress this subfield, in case the two endpoints pre-agree on a set of alternative ways to run KUDOS, with respect to the size of the nonce subfield and the combination of the KUDOS modes of operation to use.</t>
        </li>
        <li>
          <t>If the nonce subfield is present, then the corresponding Field Descriptor in the SCHC Rule has the TV not set, while the MO is set to "ignore" and the CDA is set to "value-sent".  </t>
          <t>
For the value of the nonce subfield, SCHC <bcp14>MUST NOT</bcp14> send it as variable-length data in the Compression Residue. As a result, SCHC does not send the size of the residue resulting from the compression of the nonce subfield, which is otherwise requested for variable-size fields when the CDA specified in the Field Descriptor is "value-sent" or LSB (see <xref section="7.4.2" sectionFormat="of" target="RFC8724"/>).  </t>
          <t>
Instead, SCHC <bcp14>MUST</bcp14> use the value encoded by m within the x subfield to define the size of the Compression Residue. SCHC designates a specific function, "osc.x.m", that the Rule <bcp14>MUST</bcp14> use to complete the Field Descriptor. During the decompression, this function returns the length of the nonce subfield in bytes, as the value encoded by m within the x subfield, plus 1.  </t>
          <t>
This construct avoids ambiguity with the value m within the x subfield and results in a more efficient compression of the nonce subfield.</t>
        </li>
      </ul>
    </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 anchor="sec-security-considerations-yang-module">
        <name>YANG Module</name>
        <t>The YANG data model defined in <xref target="sec-yang-module"/> extends the ietf-schc module defined in <xref target="RFC9363"/>, complementing the update to that module made by the YANG data model defined in <xref section="A" sectionFormat="of" target="I-D.ietf-schc-8824-update"/>.</t>
        <t>Therefore, all the security considerations compiled in <xref section="8" sectionFormat="of" target="RFC9363"/> also apply to the resulting extended YANG data model.</t>
      </section>
    </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 asked 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 anchor="schc-coap-fields">
        <name>SCHC Compression of CoAP Fields</name>
        <t>IANA is asked to add the following two entries to the "SCHC Compression of CoAP Fields" registry defined in <xref target="I-D.ietf-schc-8824-update"/>, within the "Static Context Header Compression (SCHC) Parameters" registry group.</t>
        <ul spacing="normal">
          <li>
            <t>Field: CoAP.option(9).x</t>
          </li>
          <li>
            <t>Description: CoAP option OSCORE (subfield x) [RFC-XXXX]</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]  </t>
            <t>
Consistent with what is defined in <xref section="13.4.2" sectionFormat="of" target="I-D.ietf-schc-8824-update"/>, this entry has to be added immediately after the entry whose value in the "Field" column is "CoAP.option(9).kid_ctx".  </t>
            <t>
Note to RFC Editor: Once the registration above is completed, please delete the paragraph immediately preceding this note. Then, please delete this note.</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Field: CoAP.option(9).nonce</t>
          </li>
          <li>
            <t>Description: CoAP option OSCORE (subfield nonce) [RFC-XXXX]</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX]  </t>
            <t>
Consistent with what is defined in <xref section="13.4.2" sectionFormat="of" target="I-D.ietf-schc-8824-update"/>, this entry has to be added immediately before the entry whose value in the "Field" column is "CoAP.option(9).kid".  </t>
            <t>
Note to RFC Editor: Once the registration above is completed, please delete the paragraph immediately preceding this note. Then, please delete this note.</t>
          </li>
        </ul>
        <t>In the same registry, IANA is asked to update the two entries whose value in the "Field" column is "CoAP.option(9)" and "CoAP.option(9).flags". For both those entries, the value of the "Description" column is updated by adding a reference to [RFC-XXXX].</t>
      </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="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="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="RFC9363">
          <front>
            <title>A YANG Data Model for Static Context Header Compression (SCHC)</title>
            <author fullname="A. Minaburo" initials="A." surname="Minaburo"/>
            <author fullname="L. Toutain" initials="L." surname="Toutain"/>
            <date month="March" year="2023"/>
            <abstract>
              <t>This document describes a YANG data model for the Static Context Header Compression (SCHC) compression and fragmentation Rules.</t>
              <t>This document formalizes the description of the Rules for better interoperability between SCHC instances either to exchange a set of Rules or to modify the parameters of some Rules.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9363"/>
          <seriesInfo name="DOI" value="10.17487/RFC9363"/>
        </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="I-D.ietf-schc-8824-update">
          <front>
            <title>Static Context Header Compression (SCHC) for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Laurent Toutain" initials="L." surname="Toutain">
              <organization>IMT Atlantique</organization>
            </author>
            <author fullname="Iván Martínez" initials="I." surname="Martínez">
              <organization>IRISA</organization>
            </author>
            <author fullname="Ana Minaburo" initials="A." surname="Minaburo">
              <organization>Consultant</organization>
            </author>
            <date day="1" month="December" year="2025"/>
            <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 and UDP headers,
   this document applies SCHC to CoAP headers.  The CoAP header
   structure differs from that of IPv6 and UDP headers, since CoAP uses
   a flexible header with a variable number of options that are in turn
   of variable length.  The CoAP message format is asymmetric, i.e.,
   request messages have a header format different from that of response
   messages.  This specification gives guidance on applying SCHC to
   flexible headers and on leveraging the message format asymmetry for
   defining more efficient compression Rules.  This document replaces
   and obsoletes RFC 8824.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-schc-8824-update-07"/>
        </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="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="4" month="December" 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-11"/>
        </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="January" year="2026"/>
            <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 regarding 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-06"/>
        </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="20" month="October" 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-09"/>
        </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 1138?>

<section anchor="examples">
      <name>Examples</name>
      <t>The following sections show multiple examples of KUDOS being executed, including successful 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 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 anchor="successful-kudos-execution-initiated-with-a-request-message-final-response-is-lost">
        <name>Successful KUDOS Execution Initiated with a Request Message, Final Response is Lost</name>
        <artwork><![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)       |  d flag: 1           |         X1 | N1,
                        |  x: X1               |         CTX_OLD )
                        |  nonce: N1           | Verify with CTX_TEMP
                        | }                    |
                        |                      | 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 {             |
CTX_NEW = updateCtx(    |  Partial IV: 0       | KUDOS status:
          X1 | N1,      |  d flag: 1           | CTX_OLD: X2, N2
          X2 | N2,      |  x: X2               | State: PENDING (1,1)
          CTX_OLD )     |  nonce: N2           |
Verify with CTX_NEW     | }                    |
/ key confirmation /    |                      |
Pre-IDLE steps:         |                      |
Delete CTX_TEMP         |                      |
Delete CTX_OLD, X1, N1  |                      |
                        |                      |
KUDOS status:           |                      |
CTX_NEW: -, -           |                      |
State: IDLE (0,0)       |                      |

The key update process ends here.
Both peers now use CTX_NEW.

                        |                      |
                        |      Request #2      |
Protect with CTX_NEW    +--------------------->| /temp
                        | OSCORE {             |
                        |  Partial IV: 1       |
                        | }                    | Verify with CTX_NEW
                        | Encrypted Payload {  |
                        |  Application Payload |
                        | }                    |
                        |                      |
                        |      Response #2     |
                        |      <-- LOST -------+ Protect with CTX_NEW
                        | OSCORE {             |
                        |  Partial IV: 0       |
                        | }                    |
                        | Encrypted Payload {  |
                        |  Application Payload |
                        | }                    |

                (client times out and retransmits)

                        |                      |
                        |      Request #3      |
Protect with CTX_NEW    +--------------------->| /temp
                        | OSCORE {             |
                        |  Partial IV: 2       |
                        | }                    | Verify with CTX_NEW
                        | Encrypted Payload {  |
                        |  Application Payload |
                        | }                    |
                        |                      |
                        |      Response #3     |
                        |<---------------------+ Protect with CTX_NEW
Verify with CTX_NEW     | OSCORE {             |
                        |  Partial IV: 1       |
                        | }                    |
                        | Encrypted Payload {  |
                        |  Application Payload |
                        | }                    |
                        |                      |
                        |                      | Pre-IDLE steps:
                        |                      | Delete CTX_TEMP
                        |                      | Delete CTX_OLD, X2, N2
                        |                      |
                        |                      | KUDOS status:
                        |                      | CTX_NEW: -,-
                        |                      | State: IDLE (0,0)
]]></artwork>
      </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="96" y="676">non</text>
              <text x="136" y="676">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-yang-module">
      <name>YANG Data Model</name>
      <t>This appendix defines the ietf-schc-coap-kudos module, which extends the ietf-schc module defined in <xref target="RFC9363"/> to include the extended format of the CoAP OSCORE option (see <xref target="ssec-oscore-option-extensions"/> of the present document).</t>
      <t>This extension complements the update to the ietf-schc module made by the YANG data model defined in <xref section="A" sectionFormat="of" target="I-D.ietf-schc-8824-update"/>.</t>
      <figure anchor="fig-yang-data-model">
        <name>SCHC CoAP KUDOS Extension YANG Data Model.</name>
        <sourcecode type="yang" name="ietf-schc-coap-kudos@2026-03-02.yang" markers="true"><![CDATA[
module ietf-schc-coap-kudos {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-schc-coap-kudos";
  prefix schc-coap-kudos;

  import ietf-schc {
      prefix schc;
  }

  organization
    "IETF Constrained RESTful Environments (core) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/core/about/>
     WG List:  <mailto:core@ietf.org>
     Editor:   Marco Tiloca
       <mailto:marco.tiloca@ri.se>";
  description
    "Copyright (c) 2021 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.
     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Simplified BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).
     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.
     The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
     NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
     'MAY', and 'OPTIONAL' in this document are to be interpreted as
     described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
     they appear in all capitals, as shown here.
     ****************************************************************

     This module extends the ietf-schc module defined in RFC 9363 to
     include the extended format of the CoAP OSCORE option for using
     Key Update for OSCORE (KUDOS), as defined in RFC YYYY.";

  revision 2026-03-02 {
    description
      "Extended OSCORE fields for Key Update for OSCORE (KUDOS).";
    reference
      "RFC YYYY Key Update for OSCORE (KUDOS)
                (see Sections 4.1 and 5)";
  }

  // Field ID

  identity fid-coap-option-oscore-x {
       base "schc:fid-coap-option";
       description
         "CoAP option OSCORE x field.";
       reference
         "RFC YYYY Key Update for OSCORE (KUDOS)
                   (see Sections 4.1 and 5)";
  }

  identity fid-coap-option-oscore-nonce {
       base "schc:fid-coap-option";
       description
         "CoAP option OSCORE nonce field.";
       reference
         "RFC YYYY Key Update for OSCORE (KUDOS)
                   (see Sections 4.1 and 5)";
  }

  // Function Length

  identity fl-oscore-oscore-nonce-length {
       base "schc:fl-base-type";
       description
         "Size in bytes of the OSCORE nonce corresponding to m+1.";
       reference
         "RFC YYYY Key Update for OSCORE (KUDOS) (see Section 5)";
  }
}

]]></sourcecode>
      </figure>
    </section>
    <section anchor="sec-document-updates" removeInRFC="true">
      <name>Document Updates</name>
      <section anchor="sec-12-13">
        <name>Version -12 to -13</name>
        <ul spacing="normal">
          <li>
            <t>Defined SCHC compression of the extended OSCORE Option (originally defined in draft-ietf-schc-8824-update).</t>
          </li>
          <li>
            <t>Updated IANA considerations (SCHC-related actions).</t>
          </li>
          <li>
            <t>Added security considerations about the YANG data model.</t>
          </li>
          <li>
            <t>Added YANG data model.</t>
          </li>
          <li>
            <t>General editorial improvements.</t>
          </li>
          <li>
            <t>Add further message flow examples.</t>
          </li>
        </ul>
      </section>
      <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+y96Vocx7Yg+p+nyIu+7wJ2VYlCg2W27T4IkKWzJaEG5OFr
96cvqUogt6oy62RmgbCkfpW+T3Ef4PaL3TXGkBlZA0KDvcU52oaqzIgVK1as
KdbQ7XZXLrajOysrVVqNku0o+mdyFb2cDOMqiU7zIjo42j043I/W//ly7+Bo
YyU+OSkSeGH2U8N8kMVjGG1YxKdVN02q0+4gL5JuXtJ/XidX3Sm93R3B/5TV
yko6KbajqpiW1dbm5vebWyuXZ9vRbg6D/poXr9PsLPq5yKeTldeX29GTrEqK
LKm6ezj8yiCutqOyGq6U05NxWpZpnlVXE5j9yf7xoxWep9yOHtzvwzIH+RAG
246mANKDlZV4Wp3nxfZKRD9d+W8UpRm8cdiLHv+f//dsNM2G5gte12H6Oi6G
zW/zAoY+fHK0H+08NB+WVZEkAOKTMj79V14My7O4irNoa8s8MUirK8BpWlax
/SwfwkRH+93+/bt3N6OjKh+8Ps9HY+eBaVYV8N7RZTJMMvN5Mo7T0XZUEIi9
85wg/I8i7ZVJeJnPetFxOsoHcW2Rz+JikNe/+oJWOEb4ehXBJ+tbyfJiHFfp
RYJbevho996D+9/Lr99t3dvSX+/f7cuvSBX663dbd/XX7+/qa9/fua8PfH9v
6wH++qS71yOaLgfng+6DB1t3hZq3gY6z0xoID+7eva/z3rtnZug/2NRhN+8o
NN8D8dtfzbz97+5bcO/pYN/f/05+vbv54L4BrMDDdlqcdeMkHnZH6TitSg/q
+kkMPBIPkm4yPM8H+tykyE/TES3p6eWzrWd8YvzTQ6RxMEmy6Fl+Ag9HO6NR
GmcDJjvhL0/Ts/PqMsH/BQIbnKdZElW5+fU4GZxn6SAeRUeTZJCewq8VnOeo
C7ygSDrRzgQguUiG0S9JgQc96ve2OtHBs53u8VHXGRtAfIVvdH/pv9rqbm1u
bfb7/c3uDoFCWxXhh91+n4GLizMk4POqmmzfvn15ednLYSFjWkcsy+jBAm8X
CXxQJrf9uW7Xprm9OES9yfAUYDi6Go+TqkgH3aNkMC3wuARQfDodjfhw/md+
nkUvimT6f/43IK+qyjLP3H3Yh6Hws+gwKRM4KOfuJugUUX5qJ44O42pwnlRl
FGdDYvC75zEwCMD9k/FkJDtREr9/UeRwWvNRGY3S17BrT49gI+50oqP0LItH
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
ZPy2xVcmrPp4Jqa1S70zMYs71rUJ4j9aymetjKhFBT6JpU8MDLgvhVmBWplx
JWKEo1l+29LNw2e5eB+ag03BI/V160HI5CRywnvLREogABS8AnXYbdf8+QCf
OvBlGKVHCa93QpFpaIzvp2JszkFG2rJWgArjk4Q9tSqqyeGngttoY8a/1bRh
RR7VIoXIrYrOYEd5Z97ie8pyJ9L7ZM3ENdccEgjCb330qfQ7sAG4bx0lHuMI
FM+AsRxtcYo1drBIZBS7WNb0uBpXi/WTzPK5LFV+zguYauSsb1CdRi5RfVUT
kDMrVrdV7pCtPWTf2a8pnMBLKYfddf1+se2g0rxYqTv/kKEfOUpPx/Fhmcgt
xhLGV1M4mk2E6kgJCL0YTcrAvSg3ZkEpMNRLdavDO4UsXKvBFLSwMf7sRQMg
4DzBfM89jxp8vPmmN3ueaRaaKc3ARGibaYtm2lp0JrID7IJQrXbmdDTmxVel
IKAnU0ipxbZqcCDgh+u/mdoqcWG8HUP3IDbCCcMJnhJ17YcRcJ8VRzPhilV5
mXjHzTtqmF/Y2B7nakO9/gZvWJImc4ud+DLA4qXNIvkMiHmYi6BvnzXTIHpV
I8OQEToWRybp2B+Ayx2uweMAQSkqzH9jk7dywsn2uTHrTKYJJfcTxGOp4md0
neFsYUOdB3B8ldOcy+aAQqAZn8VFTs2SHXx0NLGUhjGuShJMqCSQL5IG0TLL
cVnmA64tYduyqaUqFdgM8jXe1TSN4FmldgeXB5Th3MsEq3bQ1DSPmUNWQ7HO
tdWIps1YOqpiR8cmbR11a8GYuK7Kpo+jWaCQ3o3GUouwZo3Y0bvyhBSDSUej
KWVt895iOvSZKaL0ejrMS/+1Ln/P8dKJOL4cM5uXI/E2kswixrjx/J5IIhRF
VSsR8Zvb0ZO9p/ud6OHLo9+lByuo40+e/0wXM8XYSjKlWDnY+JoWpZCssayW
t2W3U+r0N5FKLgezZzguAiKoJY0xlj/sHTldheNj7gQhT1VoQqxo4U7nLgML
kdGBZ+XXLFpzHud6rtQHaq5A6t6XnvZYNO0Ba8ov5d1J1W3+wqcy4Q3eZT88
r6ZPMM+OIKL605ZqNZjMVcUJmTaZlIAzDqwPhhI7bo/ouanxPfgsuxc94yxM
qsksuy4l39oAoauvUnLh7Q27JQdM4yqupI0ngMV+t4F3HaGDuS07yTJBrunC
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
mfvC0jN8jZ1pvvA1doZ+vsbOtI7yN5CiX2Nnvly/oWH7n6z+7tfYmebHNxg7
w/8BrT96enB0HH1ZsTMzXl+2scCC88/xOzZGmed3bLxwQ37HZRd2o+z2hvyO
NwlS+IXWN6p0jP3xyhLsDYDts+SX/f0Utb79WH6+Kmqto7QFFlznsvimavEt
clkchtv33S3vfvyw7LnPqer9NTQ9R3Gju5e/ouJ2E5fDfxnF7S9WGu/mOkLV
yfOGgp6ZeD4w6PnOdRQ3LwDta9Dz16DnG1vD3/bCGL/5W1wYf70vXvS++IMG
mN3ho/VjVTo/kUb0ue6Z/+rXzF9LNNRe+AvcMu9yA3vAwrSkS1wQPrWL5nJl
5SHe+rJMSrNhMgGJlWQVlYzlS2qt1pANo+TN4DzOzliOSat4zbgpuRrtdFSl
Yy7AUCQl/IWlZ8318b/b5fHX22OUK692fCNkgRmWbrPh3x8v8ELDuJj3Qu2b
a75gb48BK1FQ+RKUecrXT4ZDfaa+HMveEy/tcrxxD/8NdDWa8cLfQIZ9rjve
L/CFz1SPgE76wxvzzt3QxSoy0w8d4WO65wwDfbjQC3U1t6WT3KuH/z5Xq4Fe
coEhPuRedTmu+/Ve9Qvkie0vrHtKTFwU6UVSbnwKXWmxGXBHbvACd8aksy9w
a3rv8uddf+Yk/H4hV7gNjeumrnBf7XwCZ9qirLnt2vZTsubPFp130/eJN6Sw
3MiN4qe5UiROdhM6y9dYsNAoX2PBvuoswW/WPbvhk+gs88wTPOTNnfiM5slK
i03a7uTRVxdtZm1e8PvuLnB0A+keN2RuBDWOh5/m6P51Wld//BdmxKuEX6jn
GM2doU50C4HkEt3cF8KfB/WAh/TCojfvP+k4n70ps+v+bT21c/ov968jcP+d
XLNLXy+GP/78Lyyh+dZ13h79fLY+szNemC0Lb2KGz6XGfo2MI6+NnWGhFx4u
8cLXULrPwnvmSFtiNc04t8/LZsJOueUi3MLidumAtZuRwUsErM1OUVjIMdji
qGsc3uWX0TjOc50bnyla6AOD167tH/xk0W5NkG+0CsejNAMxf+jU1eDiG94k
X8OW/qZhS1+LXtgXvha9oJ85uZSzr9EWuYhjcd34WH4WuqG4kdTIL0MA/ZVz
/P7qjU1uIsXvi8/w+8xtTZZO0Ws7To1w2TAnar+O812jxqFQX8ec67hGTO2y
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

-->

</rfc>
