<?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.43 (Ruby 2.7.0) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-oscore-key-update-15" category="std" consensus="true" submissionType="IETF" updates="8613" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.35.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-15"/>
    <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="November" day="02"/>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 84?>

<t>Communications with the Constrained Application Protocol (CoAP) can be protected end-to-end at the application-layer by using the security protocol Object Security for Constrained RESTful Environments (OSCORE). Under some circumstances, two CoAP endpoints need to update their OSCORE keying material before communications can securely continue, e.g., due to approaching key usage limits. This document defines Key Update for OSCORE (KUDOS), a lightweight key update procedure that two CoAP endpoints can use to update their OSCORE keying material by establishing a new OSCORE Security Context. Accordingly, this document updates the use of the OSCORE flag bits in the CoAP OSCORE Option as well as the protection of CoAP response messages with OSCORE. Also, it deprecates the key update procedure specified in Appendix B.2 of RFC 8613. Therefore, this document updates RFC 8613.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Constrained RESTful Environments Working Group mailing list (core@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/core/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/core-wg/oscore-key-update"/>.</t>
    </note>
  </front>
  <middle>
    <?line 88?>

<section anchor="intro">
      <name>Introduction</name>
      <t>The security protocol Object Security for Constrained RESTful Environments (OSCORE) <xref target="RFC8613"/> provides end-to-end protection at the application-layer for messages exchanged with the Constrained Application Protocol (CoAP) <xref target="RFC7252"/>. In particular, OSCORE ensures message confidentiality and integrity, replay protection, and binding of response to request between a sender and a recipient.</t>
      <t>Under some circumstances, two CoAP endpoints using OSCORE may need to update their shared keying material in order to ensure 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 Lightweight Authenticated Key Exchange (LAKE) <xref target="RFC9528"/>.</t>
        <t>This document uses the acronym LAKE, expanded to Lightweight Authenticated Key Exchange, to denote the protocol specified as EDHOC in <xref target="RFC9528"/>. Identifiers defined literally in <xref target="RFC9528"/> or in IANA registries (e.g., the names of the EDHOC registries themselves) are unchanged.</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; and 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 LAKE protocol <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>
LAKE also specifies an optional function, namely EDHOC_KeyUpdate, to perform a key update in a more efficient way than re-running LAKE. 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 LAKE may be run standalone or as part of other workflows, such as when using the LAKE 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 not be 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"/>, intended for peers that cannot write to 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 (key, nonce) 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 eighth 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 eighth 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):

 // Encoded as per Section 3 of RFC8446, i.e., here each
 // variable-length field is prefixed by a 1-byte 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 parameters 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, specifically shortlex 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 input parameter required for that derivation (i.e., the Sender ID, the Recipient ID, the ID Context, the AEAD Algorithm, and the HKDF Algorithm) takes the same value as in the Security Context CTX_IN. Consequently, the Sender Key, the Recipient Key, and the Common IV of CTX_OUT are derived from the new Master Secret and Master Salt, and thus differ from those of 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>In its Recipient Context, the Replay Window is initialized as empty, i.e., no Partial IV is considered as already received.</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 a KUDOS execution has been successfully completed, 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 to 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 to 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, where 0x denotes the empty byte string.</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 write to 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 of running 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 to 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 a peer has 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 LAKE protocol <xref target="RFC9528"/>), the 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 downgrade 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 LAKE and OSCORE profile of ACE <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>, according to which the two peers run the LAKE 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 re-running 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 in preserving 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 no longer has to perform 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 message 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 LAKE 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 LAKE 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 LAKE</name>
        <t>The LAKE protocol defines the transport of additional External Authorization Data (EAD) within an optional EAD field of the LAKE 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 LAKE EAD item KUDOS_EAD and registers its 'ead_label' in <xref target="iana-edhoc-aad"/>. By including this EAD item in an outgoing LAKE 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 LAKE 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 LAKE EAD item KUDOS_EAD as non-critical. That is, when included in a LAKE 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 LAKE 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 LAKE message_1. It asks the recipient peer to specify in LAKE 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 LAKE 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 LAKE 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 LAKE 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 LAKE message_1 with 'ead_value' ASK, a recipient peer that supports the KUDOS_EAD item <bcp14>MUST</bcp14> specify whether it supports KUDOS in LAKE message_2.</t>
        <t>When the KUDOS_EAD item is not included in LAKE 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 LAKE message_2.</t>
        <t>When the KUDOS_EAD item is included in LAKE 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 LAKE message_3. An exception applies in case, based on application policies or other context information, the recipient peer that receives LAKE message_2 already knows that the sender peer is supposed to have such knowledge.</t>
        <t>When the KUDOS_EAD item is included in LAKE 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 LAKE message_3.</t>
        <t>In the following cases, the recipient peer silently ignores the KUDOS_EAD item specified in the received LAKE message and does not include a KUDOS_EAD item in the next LAKE 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 LAKE message_1 with 'ead_value' different than ASK.</t>
          </li>
          <li>
            <t>The KUDOS_EAD item is included in LAKE message_2 or message_3 with 'ead_value' ASK.</t>
          </li>
          <li>
            <t>The KUDOS_EAD item is included in LAKE message_4.</t>
          </li>
        </ul>
        <t>That is, by specifying 'ead_value' ASK in LAKE 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 LAKE 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 LAKE message_2 also asks A to indicate whether it supports KUDOS in LAKE message_3.</t>
        <t>To further illustrate the signaling process defined above, the following presents two examples of LAKE 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 LAKE Initiator asks the LAKE Responder about its support for KUDOS ('ead_value' = ASK). In LAKE message_2, the Responder indicates that it supports both the FS and no-FS mode of KUDOS ('ead_value' = FULL). Finally, in LAKE message_3, the Initiator indicates that it also supports both the FS and no-FS mode of KUDOS ('ead_value' = FULL). After the LAKE 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 LAKE 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="20" y="36">LAKE</text>
                  <text x="460" y="36">LAKE</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[
LAKE                                                   LAKE
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 LAKE Initiator asks the LAKE Responder about its support for KUDOS ('ead_value' = ASK). In LAKE message_2, the Responder indicates that it does not support KUDOS at all ('ead_value' = NONE). Finally, in LAKE 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 LAKE 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 LAKE Execution with Signaling of Support for KUDOS (the LAKE 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="20" y="36">LAKE</text>
                  <text x="460" y="36">LAKE</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[
LAKE                                                   LAKE
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>As 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-implementation-status" removeInRFC="true">
      <name>Implementation Status</name>
      <t>Note to RFC Editor: when deleting this section, please also delete RFC 7942 from the references of this document.</t>
      <t>(Boilerplate as per <xref section="2.1" sectionFormat="of" target="RFC7942"/>:)</t>
      <t>This section records the status of known implementations of the
protocol defined by this specification at the time of posting of
this Internet-Draft, and is based on a proposal described in
<xref target="RFC7942"/>.  The description of implementations in this section is
intended to assist the IETF in its decision processes in
progressing drafts to RFCs.  Please note that the listing of any
individual implementation here does not imply endorsement by the
IETF.  Furthermore, no effort has been spent to verify the
information presented here that was supplied by IETF contributors.
This is not intended as, and must not be construed to be, a
catalog of available implementations or their features.  Readers
are advised to note that other implementations may exist.</t>
      <t>According to <xref target="RFC7942"/>, "this will allow reviewers and working
groups to assign due consideration to documents that have the
benefit of running code, which may serve as evidence of valuable
experimentation and feedback that have made the implemented
protocols more mature.  It is up to the individual working groups
to use this information as they see fit".
<?line -22?>
      </t>
      <section anchor="sec-implementation-1">
        <name>Implementation #1</name>
        <ul spacing="normal">
          <li>
            <t>Responsible organization: RISE Research Institutes of Sweden AB</t>
          </li>
          <li>
            <t>Implementation's name: KUDOS in Californium</t>
          </li>
          <li>
            <t>Available at: https://github.com/rikard-sics/californium/tree/oscore_kudos</t>
          </li>
          <li>
            <t>Description: Implementation in Java, based on the Californium CoAP library, see:  </t>
            <ul spacing="normal">
              <li>
                <t>https://github.com/eclipse-californium/californium</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Implementation's level of maturity: Prototype</t>
          </li>
          <li>
            <t>The implementation supports:  </t>
            <ul spacing="normal">
              <li>
                <t>The FS mode and the no-FS mode.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>The implementation does not support:  </t>
            <ul spacing="normal">
              <li>
                <t>Preservation of observations.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Version compatibility: From version -13 onwards.</t>
          </li>
          <li>
            <t>Licensing: Eclipse Distribution License 1.0 / Eclipse Public License 2.0.</t>
          </li>
          <li>
            <t>Contact information: Rikard Höglund - rikard.hoglund@ri.se</t>
          </li>
          <li>
            <t>Information last updated on: 2026-07-06</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-implementation-2">
        <name>Implementation #2</name>
        <ul spacing="normal">
          <li>
            <t>Responsible organization: University of Murcia (Spain)</t>
          </li>
          <li>
            <t>Implementation's name: cKUDOS</t>
          </li>
          <li>
            <t>Available at: https://github.com/francislopezg/cKUDOS</t>
          </li>
          <li>
            <t>Description: Implementation in C, based on the uOSCORE-uEDHOC library, see:  </t>
            <ul spacing="normal">
              <li>
                <t>https://github.com/eriptic/uoscore-uedhoc</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Implementation's level of maturity: Prototype</t>
          </li>
          <li>
            <t>The implementation supports:  </t>
            <ul spacing="normal">
              <li>
                <t>The no-FS mode.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>The implementation does not support:  </t>
            <ul spacing="normal">
              <li>
                <t>Preservation of observations.</t>
              </li>
              <li>
                <t>The FS mode.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Version compatibility: From version -13 onwards.</t>
          </li>
          <li>
            <t>Licensing: Following Apache 2.0 license.</t>
          </li>
          <li>
            <t>Contact information: Francisco López-Gómez - francisco.lopezg@um.es</t>
          </li>
          <li>
            <t>Information last updated on: 2026-07-06</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="sec-cons">
      <name>Security Considerations</name>
      <t>Depending on the specific key update procedure used to establish a new OSCORE Security Context, the related security considerations also apply.</t>
      <t>As mentioned in <xref target="ssec-nonces-x-bytes"/>, it is <bcp14>RECOMMENDED</bcp14> that the size for the nonces N1 and N2 is 8 bytes. Applications need to set the size of each nonce such that the probability of its value being repeated is negligible throughout executions of KUDOS that aim to update a given OSCORE Security Context, even in case of loss of state (e.g., due to a reboot occurred in an unprepared way).</t>
      <t>Considering the birthday paradox and a nonce size of 8 bytes, the average collision for each nonce will happen after the generation of 2<sup>32</sup> (X, nonce) pairs generated by a given peer (see <xref target="ssec-nonces-x-bytes"/>), which is considerably more than the number of such pairs that a peer is expected to generate throughout the update of a given OSCORE Security Context using KUDOS (in fact, that number is expected to typically be 1). Yet, determining the appropriate nonce size also ought to take into account the possible use of KUDOS in no-FS mode (see <xref target="no-fs-mode"/>), in which case every execution in no-FS mode between two given peers considers the same CTX_BOOTSTRAP as the OSCORE Security Context to update (see <xref target="no-fs-signaling"/>), hence raising the chances of reusing a nonce.</t>
      <t>Overall, the size of the nonces N1 and N2 should be set such that the security level is harmonized with other components of the deployment. Considering the constraints of embedded implementations, there might be a need for allowing N1 and N2 values that have a size smaller than the recommended one. This is acceptable, provided that safety, reliability, and robustness within the system can still be assured. That is, if nonces with a smaller size are used and thus a collision will occur on average after fewer KUDOS executions that aim to update a given OSCORE Security Context, care must be taken to ensure that this does not pose significant problems, e.g., considering as benchmark a constrained server operating at a capacity of one request per second.</t>
      <t>The nonces exchanged in the KUDOS messages are sent in the clear, so using random nonces is preferable for maintaining privacy. Instead, if counter values are used (see <xref target="key-material-handling"/>), this can leak information such as the frequency according to which two peers perform a key update.</t>
      <t>As discussed in <xref target="Symmetric-Security"/>, key update methods built on symmetric key exchange have weaker security properties compared to methods built on ephemeral Diffie-Hellman key exchange. In fact, while the two approaches can co-exist, rekeying with symmetric key exchange is not intended as a substitute for ephemeral Diffie-Hellman key exchange. Peers should periodically perform a key update based on ephemeral Diffie-Hellman key exchange (e.g., by running the LAKE protocol <xref target="RFC9528"/>). The cadence of such periodic key updates should be determined based on how much the two peers and their network environment are constrained, as well as on the maximum amount of time and of exchanged data that are acceptable between two such consecutive key updates.</t>
    </section>
    <section anchor="sec-iana">
      <name>IANA Considerations</name>
      <t>This document has the following actions for IANA.</t>
      <t>Note to RFC Editor: Please replace all occurrences of "[RFC-XXXX]" with the RFC number of this specification and delete this paragraph.</t>
      <section anchor="iana-cons-flag-bits">
        <name>OSCORE Flag Bits Registry</name>
        <t>IANA is asked to add the following entries to the "OSCORE Flag Bits" registry within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <table align="center" anchor="_table-iana-oscore-flag-bits">
          <name>Registrations in the OSCORE Flag Bits Registry</name>
          <thead>
            <tr>
              <th align="left">Bit Position</th>
              <th align="left">Name</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0 (suggested)</td>
              <td align="left">Extension-1 Flag</td>
              <td align="left">Set to 1 if the OSCORE Option specifies a second byte, which includes the OSCORE flag bits 8-15</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
            <tr>
              <td align="left">8</td>
              <td align="left">Extension-2 Flag</td>
              <td align="left">Set to 1 if the OSCORE Option specifies a third byte, which includes the OSCORE flag bits 16-23</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
            <tr>
              <td align="left">15</td>
              <td align="left">Nonce Flag</td>
              <td align="left">Set to 1 if nonce is present in the compressed COSE object</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
            <tr>
              <td align="left">16</td>
              <td align="left">Extension-3 Flag</td>
              <td align="left">Set to 1 if the OSCORE Option specifies a fourth byte, which includes the OSCORE flag bits 24-31</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
            <tr>
              <td align="left">24</td>
              <td align="left">Extension-4 Flag</td>
              <td align="left">Set to 1 if the OSCORE Option specifies a fifth byte, which includes the OSCORE flag bits 32-39</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
            <tr>
              <td align="left">32</td>
              <td align="left">Extension-5 Flag</td>
              <td align="left">Set to 1 if the OSCORE Option specifies a sixth byte, which includes the OSCORE flag bits 40-47</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
            <tr>
              <td align="left">40</td>
              <td align="left">Extension-6 Flag</td>
              <td align="left">Set to 1 if the OSCORE Option specifies a seventh byte, which includes the OSCORE flag bits 48-55</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
            <tr>
              <td align="left">48</td>
              <td align="left">Extension-7 Flag</td>
              <td align="left">Set to 1 if the OSCORE Option specifies an eighth byte, which includes the OSCORE flag bits 56-63</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
          </tbody>
        </table>
        <t>In the same registry, IANA is asked to mark as 'Unassigned' the entry with Bit Position of 1, i.e., to update the entry as follows.</t>
        <table align="center" anchor="_table-iana-oscore-flag-bits-2">
          <name>Update in the OSCORE Flag Bits Registry</name>
          <thead>
            <tr>
              <th align="left">Bit Position</th>
              <th align="left">Name</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">1</td>
              <td align="left">Unassigned</td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="coap-option-numbers-registry">
        <name>CoAP Option Numbers Registry</name>
        <t>IANA is asked to add this document as a reference for the OSCORE Option in the "CoAP Option Numbers" registry within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
      </section>
      <section anchor="iana-edhoc-aad">
        <name>EDHOC External Authorization Data Registry</name>
        <t>IANA is asked to add the following entry to the "EDHOC External Authorization Data" registry defined in <xref section="10.5" sectionFormat="of" target="RFC9528"/> within the "Ephemeral Diffie-Hellman Over COSE (EDHOC)" registry group.</t>
        <table align="center" anchor="_table-iana-edhoc-ead">
          <name>Registrations in the EDHOC External Authorization Data Registry</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Label</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">KUDOS_EAD</td>
              <td align="left">TBD1</td>
              <td align="left">Indicates whether this peer supports KUDOS and in which mode(s)</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="well-known-kudos">
        <name>The Well-Known URI Registry</name>
        <t>IANA is asked to add the 'kudos' well-known URI to the Well-Known URIs registry as defined by <xref target="RFC8615"/>.</t>
        <ul spacing="normal">
          <li>
            <t>URI suffix: kudos</t>
          </li>
          <li>
            <t>Change controller: IETF</t>
          </li>
          <li>
            <t>Specification document(s): [RFC-XXXX]</t>
          </li>
          <li>
            <t>Related information: None</t>
          </li>
        </ul>
      </section>
      <section anchor="rt-kudos">
        <name>Resource Type (rt=) Link Target Attribute Values Registry</name>
        <t>IANA is 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="26" month="July" year="2026"/>
            <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, and it 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-10"/>
        </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="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="3" month="September" year="2026"/>
            <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.  This document is a product of the Crypto
   Forum Research Group (CFRG) in the IRTF.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-aead-limits-13"/>
        </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="September" 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 on the number of times a
   specific key is used for encryption or decryption.  Among other
   reasons, approaching key usage limits requires updating the OSCORE
   keying material before communications can securely continue.  This
   document defines how two OSCORE peers can follow these key usage
   limits and what steps they should take to preserve the security of
   their communications.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-key-limits-08"/>
        </reference>
        <reference anchor="I-D.ietf-ace-edhoc-oscore-profile">
          <front>
            <title>Lightweight Authenticated Key Exchange (LAKE) and Object Security for Constrained RESTful Environments (OSCORE) Profile of the Authentication and Authorization for Constrained Environments (ACE) Framework</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="22" month="October" year="2026"/>
            <abstract>
              <t>   This document specifies a profile for the Authentication and
   Authorization for Constrained Environments (ACE) framework.  It
   utilizes the Lightweight Authenticated Key Exchange (LAKE) protocol
   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.  LAKE 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-12"/>
        </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>
        <reference anchor="RFC7942">
          <front>
            <title>Improving Awareness of Running Code: The Implementation Status Section</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
              <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="205"/>
          <seriesInfo name="RFC" value="7942"/>
          <seriesInfo name="DOI" value="10.17487/RFC7942"/>
        </reference>
      </references>
    </references>
    <?line 1228?>

<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="308" 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 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>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1648" width="592" viewBox="0 0 592 1648" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 112,640 L 112,656" fill="none" stroke="black"/>
              <path d="M 200,128 L 200,816" fill="none" stroke="black"/>
              <path d="M 200,896 L 200,1168" fill="none" stroke="black"/>
              <path d="M 200,1232 L 200,1632" fill="none" stroke="black"/>
              <path d="M 384,128 L 384,816" fill="none" stroke="black"/>
              <path d="M 384,896 L 384,1168" fill="none" stroke="black"/>
              <path d="M 384,1232 L 384,1632" fill="none" stroke="black"/>
              <path d="M 504,512 L 504,528" fill="none" stroke="black"/>
              <path d="M 200,272 L 376,272" fill="none" stroke="black"/>
              <path d="M 208,592 L 384,592" fill="none" stroke="black"/>
              <path d="M 200,928 L 376,928" fill="none" stroke="black"/>
              <path d="M 256,1072 L 272,1072" fill="none" stroke="black"/>
              <path d="M 328,1072 L 384,1072" fill="none" stroke="black"/>
              <path d="M 200,1264 L 376,1264" fill="none" stroke="black"/>
              <path d="M 208,1408 L 384,1408" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="384,1264 372,1258.4 372,1269.6" fill="black" transform="rotate(0,376,1264)"/>
              <polygon class="arrowhead" points="384,928 372,922.4 372,933.6" fill="black" transform="rotate(0,376,928)"/>
              <polygon class="arrowhead" points="384,272 372,266.4 372,277.6" fill="black" transform="rotate(0,376,272)"/>
              <polygon class="arrowhead" points="264,1072 252,1066.4 252,1077.6" fill="black" transform="rotate(180,256,1072)"/>
              <polygon class="arrowhead" points="216,1408 204,1402.4 204,1413.6" fill="black" transform="rotate(180,208,1408)"/>
              <polygon class="arrowhead" points="216,592 204,586.4 204,597.6" fill="black" transform="rotate(180,208,592)"/>
              <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="36" y="180">CTX_TEMP</text>
                <text x="80" y="180">=</text>
                <text x="132" y="180">updateCtx(</text>
                <text x="76" y="196">X1</text>
                <text x="96" y="196">|</text>
                <text x="120" y="196">N1,</text>
                <text x="80" y="212">0x,</text>
                <text x="96" y="228">CTX_OLD</text>
                <text x="136" y="228">)</text>
                <text x="280" y="260">Request</text>
                <text x="324" y="260">#1</text>
                <text x="32" y="276">Protect</text>
                <text x="84" y="276">with</text>
                <text x="140" y="276">CTX_TEMP</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="428" y="308">CTX_TEMP</text>
                <text x="472" y="308">=</text>
                <text x="524" y="308">updateCtx(</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="472" y="324">0x,</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="224" y="340">d</text>
                <text x="256" y="340">flag:</text>
                <text x="288" y="340">1</text>
                <text x="468" y="340">X1</text>
                <text x="488" y="340">|</text>
                <text x="512" y="340">N1,</text>
                <text x="228" y="356">x:</text>
                <text x="252" y="356">X1</text>
                <text x="488" y="356">CTX_OLD</text>
                <text x="528" y="356">)</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="216" y="388">}</text>
                <text x="416" y="404">KUDOS</text>
                <text x="472" y="404">status:</text>
                <text x="428" y="420">CTX_OLD:</text>
                <text x="480" y="420">-,-</text>
                <text x="420" y="436">State:</text>
                <text x="468" y="436">BUSY</text>
                <text x="512" y="436">(0,1)</text>
                <text x="428" y="468">Generate</text>
                <text x="480" y="468">N2,</text>
                <text x="508" y="468">X2</text>
                <text x="424" y="500">CTX_NEW</text>
                <text x="464" y="500">=</text>
                <text x="516" y="500">updateCtx(</text>
                <text x="484" y="516">X2</text>
                <text x="528" y="516">N2,</text>
                <text x="484" y="532">X1</text>
                <text x="528" y="532">N1,</text>
                <text x="504" y="548">CTX_OLD</text>
                <text x="544" y="548">)</text>
                <text x="284" y="580">Response</text>
                <text x="332" y="580">#1</text>
                <text x="424" y="596">Protect</text>
                <text x="476" y="596">with</text>
                <text x="528" y="596">CTX_NEW</text>
                <text x="236" y="612">OSCORE</text>
                <text x="272" y="612">{</text>
                <text x="32" y="628">CTX_NEW</text>
                <text x="72" y="628">=</text>
                <text x="124" y="628">updateCtx(</text>
                <text x="248" y="628">Partial</text>
                <text x="296" y="628">IV:</text>
                <text x="320" y="628">0</text>
                <text x="416" y="628">KUDOS</text>
                <text x="472" y="628">status:</text>
                <text x="92" y="644">X1</text>
                <text x="136" y="644">N1,</text>
                <text x="224" y="644">d</text>
                <text x="256" y="644">flag:</text>
                <text x="288" y="644">1</text>
                <text x="428" y="644">CTX_OLD:</text>
                <text x="480" y="644">X2,</text>
                <text x="508" y="644">N2</text>
                <text x="92" y="660">X2</text>
                <text x="136" y="660">N2,</text>
                <text x="228" y="660">x:</text>
                <text x="252" y="660">X2</text>
                <text x="420" y="660">State:</text>
                <text x="480" y="660">PENDING</text>
                <text x="536" y="660">(1,1)</text>
                <text x="112" y="676">CTX_OLD</text>
                <text x="152" y="676">)</text>
                <text x="244" y="676">nonce:</text>
                <text x="284" y="676">N2</text>
                <text x="28" y="692">Verify</text>
                <text x="76" y="692">with</text>
                <text x="128" y="692">CTX_NEW</text>
                <text x="216" y="692">}</text>
                <text x="8" y="708">/</text>
                <text x="32" y="708">key</text>
                <text x="100" y="708">confirmation</text>
                <text x="160" y="708">/</text>
                <text x="36" y="724">Pre-IDLE</text>
                <text x="100" y="724">steps:</text>
                <text x="28" y="740">Delete</text>
                <text x="92" y="740">CTX_TEMP</text>
                <text x="28" y="756">Delete</text>
                <text x="92" y="756">CTX_OLD,</text>
                <text x="144" y="756">X1,</text>
                <text x="172" y="756">N1</text>
                <text x="24" y="788">KUDOS</text>
                <text x="80" y="788">status:</text>
                <text x="36" y="804">CTX_NEW:</text>
                <text x="84" y="804">-,</text>
                <text x="104" y="804">-</text>
                <text x="28" y="820">State:</text>
                <text x="76" y="820">IDLE</text>
                <text x="120" y="820">(0,0)</text>
                <text x="16" y="852">The</text>
                <text x="48" y="852">key</text>
                <text x="92" y="852">update</text>
                <text x="152" y="852">process</text>
                <text x="204" y="852">ends</text>
                <text x="248" y="852">here.</text>
                <text x="20" y="868">Both</text>
                <text x="64" y="868">peers</text>
                <text x="104" y="868">now</text>
                <text x="136" y="868">use</text>
                <text x="188" y="868">CTX_NEW.</text>
                <text x="280" y="916">Request</text>
                <text x="324" y="916">#2</text>
                <text x="32" y="932">Protect</text>
                <text x="84" y="932">with</text>
                <text x="136" y="932">CTX_NEW</text>
                <text x="416" y="932">/temp</text>
                <text x="236" y="948">OSCORE</text>
                <text x="272" y="948">{</text>
                <text x="248" y="964">Partial</text>
                <text x="296" y="964">IV:</text>
                <text x="320" y="964">1</text>
                <text x="216" y="980">}</text>
                <text x="420" y="980">Verify</text>
                <text x="468" y="980">with</text>
                <text x="520" y="980">CTX_NEW</text>
                <text x="248" y="996">Encrypted</text>
                <text x="320" y="996">Payload</text>
                <text x="360" y="996">{</text>
                <text x="264" y="1012">Application</text>
                <text x="344" y="1012">Payload</text>
                <text x="216" y="1028">}</text>
                <text x="284" y="1060">Response</text>
                <text x="332" y="1060">#2</text>
                <text x="300" y="1076">LOST</text>
                <text x="424" y="1076">Protect</text>
                <text x="476" y="1076">with</text>
                <text x="528" y="1076">CTX_NEW</text>
                <text x="236" y="1092">OSCORE</text>
                <text x="272" y="1092">{</text>
                <text x="248" y="1108">Partial</text>
                <text x="296" y="1108">IV:</text>
                <text x="320" y="1108">0</text>
                <text x="216" y="1124">}</text>
                <text x="248" y="1140">Encrypted</text>
                <text x="320" y="1140">Payload</text>
                <text x="360" y="1140">{</text>
                <text x="264" y="1156">Application</text>
                <text x="344" y="1156">Payload</text>
                <text x="216" y="1172">}</text>
                <text x="160" y="1204">(client</text>
                <text x="216" y="1204">times</text>
                <text x="256" y="1204">out</text>
                <text x="288" y="1204">and</text>
                <text x="356" y="1204">retransmits)</text>
                <text x="280" y="1252">Request</text>
                <text x="324" y="1252">#3</text>
                <text x="32" y="1268">Protect</text>
                <text x="84" y="1268">with</text>
                <text x="136" y="1268">CTX_NEW</text>
                <text x="416" y="1268">/temp</text>
                <text x="236" y="1284">OSCORE</text>
                <text x="272" y="1284">{</text>
                <text x="248" y="1300">Partial</text>
                <text x="296" y="1300">IV:</text>
                <text x="320" y="1300">2</text>
                <text x="216" y="1316">}</text>
                <text x="420" y="1316">Verify</text>
                <text x="468" y="1316">with</text>
                <text x="520" y="1316">CTX_NEW</text>
                <text x="248" y="1332">Encrypted</text>
                <text x="320" y="1332">Payload</text>
                <text x="360" y="1332">{</text>
                <text x="264" y="1348">Application</text>
                <text x="344" y="1348">Payload</text>
                <text x="216" y="1364">}</text>
                <text x="284" y="1396">Response</text>
                <text x="332" y="1396">#3</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="28" y="1428">Verify</text>
                <text x="76" y="1428">with</text>
                <text x="128" y="1428">CTX_NEW</text>
                <text x="236" y="1428">OSCORE</text>
                <text x="272" y="1428">{</text>
                <text x="248" y="1444">Partial</text>
                <text x="296" y="1444">IV:</text>
                <text x="320" y="1444">1</text>
                <text x="216" y="1460">}</text>
                <text x="248" y="1476">Encrypted</text>
                <text x="320" y="1476">Payload</text>
                <text x="360" y="1476">{</text>
                <text x="264" y="1492">Application</text>
                <text x="344" y="1492">Payload</text>
                <text x="216" y="1508">}</text>
                <text x="428" y="1540">Pre-IDLE</text>
                <text x="492" y="1540">steps:</text>
                <text x="420" y="1556">Delete</text>
                <text x="484" y="1556">CTX_TEMP</text>
                <text x="420" y="1572">Delete</text>
                <text x="484" y="1572">CTX_OLD,</text>
                <text x="536" y="1572">X2,</text>
                <text x="564" y="1572">N2</text>
                <text x="416" y="1604">KUDOS</text>
                <text x="472" y="1604">status:</text>
                <text x="428" y="1620">CTX_NEW:</text>
                <text x="480" y="1620">-,-</text>
                <text x="420" y="1636">State:</text>
                <text x="468" y="1636">IDLE</text>
                <text x="512" y="1636">(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 = 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>
        </artset>
      </section>
    </section>
    <section anchor="kudos-state-machine-figure">
      <name>KUDOS State Machine</name>
      <t>The following illustrates the states and transitions of the KUDOS state machine.</t>
      <artset>
        <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="800" width="568" viewBox="0 0 568 800" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
            <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
            <path d="M 8,144 L 8,176" fill="none" stroke="black"/>
            <path d="M 8,304 L 8,336" fill="none" stroke="black"/>
            <path d="M 8,528 L 8,560" fill="none" stroke="black"/>
            <path d="M 48,72 L 48,136" fill="none" stroke="black"/>
            <path d="M 48,184 L 48,296" fill="none" stroke="black"/>
            <path d="M 48,344 L 48,520" fill="none" stroke="black"/>
            <path d="M 48,568 L 48,784" fill="none" stroke="black"/>
            <path d="M 104,32 L 104,64" fill="none" stroke="black"/>
            <path d="M 104,144 L 104,176" fill="none" stroke="black"/>
            <path d="M 104,304 L 104,336" fill="none" stroke="black"/>
            <path d="M 104,528 L 104,560" fill="none" stroke="black"/>
            <path d="M 224,160 L 224,224" fill="none" stroke="black"/>
            <path d="M 256,544 L 256,624" fill="none" stroke="black"/>
            <path d="M 280,320 L 280,384" fill="none" stroke="black"/>
            <path d="M 296,48 L 296,704" fill="none" stroke="black"/>
            <path d="M 8,32 L 104,32" fill="none" stroke="black"/>
            <path d="M 112,48 L 296,48" fill="none" stroke="black"/>
            <path d="M 8,64 L 104,64" fill="none" stroke="black"/>
            <path d="M 8,144 L 104,144" fill="none" stroke="black"/>
            <path d="M 112,160 L 224,160" fill="none" stroke="black"/>
            <path d="M 8,176 L 104,176" fill="none" stroke="black"/>
            <path d="M 192,224 L 224,224" fill="none" stroke="black"/>
            <path d="M 8,304 L 104,304" fill="none" stroke="black"/>
            <path d="M 112,320 L 280,320" fill="none" stroke="black"/>
            <path d="M 8,336 L 104,336" fill="none" stroke="black"/>
            <path d="M 184,384 L 280,384" fill="none" stroke="black"/>
            <path d="M 200,432 L 296,432" fill="none" stroke="black"/>
            <path d="M 8,528 L 104,528" fill="none" stroke="black"/>
            <path d="M 112,544 L 256,544" fill="none" stroke="black"/>
            <path d="M 8,560 L 104,560" fill="none" stroke="black"/>
            <path d="M 208,624 L 256,624" fill="none" stroke="black"/>
            <path d="M 184,704 L 296,704" fill="none" stroke="black"/>
            <path d="M 64,784 L 248,784" fill="none" stroke="black"/>
            <polygon class="arrowhead" points="256,784 244,778.4 244,789.6" fill="black" transform="rotate(0,248,784)"/>
            <polygon class="arrowhead" points="120,544 108,538.4 108,549.6" fill="black" transform="rotate(180,112,544)"/>
            <polygon class="arrowhead" points="120,320 108,314.4 108,325.6" fill="black" transform="rotate(180,112,320)"/>
            <polygon class="arrowhead" points="120,160 108,154.4 108,165.6" fill="black" transform="rotate(180,112,160)"/>
            <polygon class="arrowhead" points="120,48 108,42.4 108,53.6" fill="black" transform="rotate(180,112,48)"/>
            <polygon class="arrowhead" points="56,520 44,514.4 44,525.6" fill="black" transform="rotate(90,48,520)"/>
            <polygon class="arrowhead" points="56,296 44,290.4 44,301.6" fill="black" transform="rotate(90,48,296)"/>
            <polygon class="arrowhead" points="56,136 44,130.4 44,141.6" fill="black" transform="rotate(90,48,136)"/>
            <g class="text">
              <text x="52" y="52">Pre-IDLE</text>
              <text x="88" y="100">Clean</text>
              <text x="124" y="100">up</text>
              <text x="152" y="100">and</text>
              <text x="196" y="100">delete</text>
              <text x="132" y="116">CTX_TEMP/CTX_OLD</text>
              <text x="52" y="164">IDLE</text>
              <text x="88" y="212">Receive</text>
              <text x="168" y="212">CONVERGENT:</text>
              <text x="72" y="228">-</text>
              <text x="100" y="228">Stay</text>
              <text x="132" y="228">in</text>
              <text x="164" y="228">IDLE</text>
              <text x="76" y="260">Send</text>
              <text x="108" y="260">or</text>
              <text x="152" y="260">receive</text>
              <text x="228" y="260">DIVERGENT:</text>
              <text x="72" y="276">-</text>
              <text x="92" y="276">Go</text>
              <text x="116" y="276">to</text>
              <text x="148" y="276">BUSY</text>
              <text x="52" y="324">BUSY</text>
              <text x="76" y="372">Send</text>
              <text x="136" y="372">DIVERGENT</text>
              <text x="220" y="372">(stalled):</text>
              <text x="64" y="388">-</text>
              <text x="92" y="388">Stay</text>
              <text x="124" y="388">in</text>
              <text x="156" y="388">BUSY</text>
              <text x="88" y="420">Receive</text>
              <text x="168" y="420">CONVERGENT:</text>
              <text x="64" y="436">-</text>
              <text x="84" y="436">Go</text>
              <text x="108" y="436">to</text>
              <text x="156" y="436">Pre-IDLE</text>
              <text x="76" y="468">Send</text>
              <text x="140" y="468">CONVERGENT</text>
              <text x="68" y="484">or</text>
              <text x="112" y="484">Receive</text>
              <text x="188" y="484">DIVERGENT:</text>
              <text x="64" y="500">-</text>
              <text x="84" y="500">Go</text>
              <text x="108" y="500">to</text>
              <text x="152" y="500">PENDING</text>
              <text x="56" y="548">PENDING</text>
              <text x="76" y="596">Need</text>
              <text x="108" y="596">to</text>
              <text x="140" y="596">send</text>
              <text x="204" y="596">something:</text>
              <text x="64" y="612">-</text>
              <text x="92" y="612">Send</text>
              <text x="124" y="612">as</text>
              <text x="180" y="612">CONVERGENT</text>
              <text x="64" y="628">-</text>
              <text x="92" y="628">Stay</text>
              <text x="124" y="628">in</text>
              <text x="168" y="628">PENDING</text>
              <text x="88" y="660">Receive</text>
              <text x="164" y="660">CONVERGENT</text>
              <text x="68" y="676">OR</text>
              <text x="120" y="676">non-KUDOS</text>
              <text x="192" y="676">message</text>
              <text x="96" y="692">protected</text>
              <text x="156" y="692">with</text>
              <text x="212" y="692">CTX_NEW:</text>
              <text x="68" y="708">Go</text>
              <text x="92" y="708">to</text>
              <text x="140" y="708">Pre-IDLE</text>
              <text x="88" y="740">Receive</text>
              <text x="164" y="740">DIVERGENT:</text>
              <text x="88" y="756">Attempt</text>
              <text x="132" y="756">to</text>
              <text x="176" y="756">decrypt</text>
              <text x="232" y="756">using</text>
              <text x="292" y="756">CTX_OLD,</text>
              <text x="348" y="756">then</text>
              <text x="400" y="756">CTX_NEW</text>
              <text x="444" y="756">as</text>
              <text x="480" y="756">input</text>
              <text x="536" y="756">context</text>
              <text x="84" y="772">Revert</text>
              <text x="124" y="772">to</text>
              <text x="160" y="772">using</text>
              <text x="216" y="772">CTX_NEW</text>
              <text x="260" y="772">as</text>
              <text x="308" y="772">CTX_OLD,</text>
              <text x="356" y="772">or</text>
              <text x="404" y="772">continue</text>
              <text x="464" y="772">using</text>
              <text x="520" y="772">CTX_OLD</text>
              <text x="272" y="788">(Go</text>
              <text x="300" y="788">to</text>
              <text x="336" y="788">BUSY)</text>
            </g>
          </svg>
        </artwork>
        <artwork type="ascii-art"><![CDATA[
+-----------+
| Pre-IDLE  |<----------------------+
+-----------+                       |
     |                              |
     |  Clean up and delete         |
     |  CTX_TEMP/CTX_OLD            |
     v                              |
+-----------+                       |
|   IDLE    |<-------------+        |
+-----------+              |        |
     |                     |        |
     | Receive CONVERGENT: |        |
     |  - Stay in IDLE ----+        |
     |                              |
     | Send or receive DIVERGENT:   |
     |  - Go to BUSY                |
     v                              |
+-----------+                       |
|   BUSY    |<--------------------+ |
+-----------+                     | |
     |                            | |
     | Send DIVERGENT (stalled):  | |
     | - Stay in BUSY ------------+ |
     |                              |
     | Receive CONVERGENT:          |
     | - Go to Pre-IDLE ------------+
     |                              |
     | Send CONVERGENT              |
     | or Receive DIVERGENT:        |
     | - Go to PENDING              |
     v                              |
+-----------+                       |
|  PENDING  |<-----------------+    |
+-----------+                  |    |
     |                         |    |
     | Need to send something: |    |
     | - Send as CONVERGENT    |    |
     | - Stay in PENDING ------+    |
     |                              |
     | Receive CONVERGENT           |
     | OR non-KUDOS message         |
     | protected with CTX_NEW:      |
     | Go to Pre-IDLE --------------+
     |
     | Receive DIVERGENT:
     | Attempt to decrypt using CTX_OLD, then CTX_NEW as input context
     | Revert to using CTX_NEW as CTX_OLD, or continue using CTX_OLD
     | -----------------------> (Go to BUSY)
]]></artwork>
      </artset>
    </section>
    <section anchor="sec-document-updates" removeInRFC="true">
      <name>Document Updates</name>
      <section anchor="sec-14-15">
        <name>Version -14 to -15</name>
        <ul spacing="normal">
          <li>
            <t>Renamed EDHOC to LAKE as appropriate.</t>
          </li>
          <li>
            <t>Editorial improvements and clarifications.</t>
          </li>
          <li>
            <t>Updates reflecting lessons learned from prior interop.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-13-14">
        <name>Version -13 to -14</name>
        <ul spacing="normal">
          <li>
            <t>Remove redundant YANG data model.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
          <li>
            <t>Added section "Implementation Status".</t>
          </li>
          <li>
            <t>Updated legal boilerplate and other metadata.</t>
          </li>
        </ul>
      </section>
      <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:
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
FnFEuwoRTCwKhwLHsaqZm3Dh4bolCYPufJvaTk6vELGEstBlNotCb8ITrmD7
9zQb5Zf1eWAKdFxeqdKW5V4uiOdYQnegVJRQL6OmThInSzQf+zwuG2jR4I1S
yi+HqsvhKIB6yzMFN15MVaMgL+JDh8uct8smn7lXv7NxhXjLRLFbUoZQA0t7
zIGPC2RRNUo2yWGRZdKQF10U2RsT0blchbKZ8fJKCKwQM7dnB9lyQEB0Uyo9
4zJr6uRrv/ooYzIJNogvSYrQSsxcPQZvNIz/wG4GNpp31KgNh8Rlsqbcept1
8Y/DZp0ME+MMcAJ55F50bF+c2+BE0leOo6DTqD+XmujgkcsY2kr8coqHJGMb
NDfiaACGSc75x6y3chBu26iXsVZjcCIaSBtsJBU89iOruHBgLPFXZcWKnaUE
TmbHSiocfoH5AJ1aIJNbX8bNSrNCwmql/AZYUYnlDM7ARxHnIikoLMFUwTBV
BkJJ9nilMyPSMgyMWio/RnYHW10JVw9XLceM5UWzkN1UKkvPksmEE6mksN1L
tzoZbdCWUyds2yt5tTCPudOoLya16ZSShnnBLvWRX3FthTJ4zASSjIp4kWSJ
mf6BWmj2sq2vol6myy9jFqzWJcpdrQgbTd2eVqzzN2qJx5QXUoxMS4PnOJ8U
7etoogEZM4B0Z042YUBGXOSQQnw7GQIumoCs4mAcHEItQr0lRUNdYiTBoz6l
cMJQcb+NjUf8GBVxMyyoXruDc7kWwc/c/clhQ3fUL1RjnOaUTT1ckCmp/NhU
xwwsvmONQF6FunpOM1XFJKZ9wSdIgpPI3uHye8qVpdKqkYmg86+PneiQg5Cx
4E8j7rKzUgwdYePl0dMXRj+R6xrLtCFpxcHrZiAKV+B6atTEOaMCaRlrAivG
mBFY6FyR2wEEHCyPs3hT8flPtKkYksZWZxth52+GSh/OcbjOVrcOLzcjgGxn
2LHELHlgWBuURC6WFGh6nle5pRfPZiuwOUtmsZdePZN0hTdZfslVu4wK4B57
JBvEoO6CsDyrJXimXI0sOAfZWyKES7qYUhbaGwmBfDu2JASKoXexDBZTOYt2
OYxpdlGguBvs2pZn6URTS2V9vzgqmt9FrFicXPjYUeCWCtDkVFNtozSsv2gb
nkVb4LkVATOjWpmLL+WG1bDd5ueGnGkYu00vl2mMCrukymCkoe6IOsWClG6h
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
fVSS3yq0svhjwys+g9i+Nq2EP77jmgE9slnoILmhRRxMkjibz76GXINr6ZRf
zrFxXVfO70IJllWuzBWWfnwzOinzh4/XST8Ti1hdib277IV1lNhFTOiTarF1
4XGpFnu7YUnyxcnPqsRaGfOTKrG3Fy3sj6jE3nZnWPYCIKhjBNQvr8Termux
f2wldm2YlrxgNKi7+kKQX0V/kDiaRYz3WyCNzxQ+agTmEp+pxteXEjGbl+OK
739E8MwNyyHt19+36JnfT1mwYPAMv+e6YdIyepKXFd9TXOjrdimhM1rEi1pv
FPlsZuNjpP1rh1tWOxbUIuH+EJhbSN0csPcq3XNw9UXYEvpC29hqB/Vf5R77
ynIIv8XOLH1h7Rm+xc40X/gWO0M/32JnWkf5A1yi32Jnvl6zoWH7n63+7rfY
mebHNxg7w/8BoT968vz0ZfR1xc4seH3dxgIrzr/E7NgYZZnZsfHCDZkd113Y
jbLbGzI73iRI4Rda36jSKfbHK0tQNwC2L5Jf9scT1Hr2Y/n5Jqi1jtIWV3Ad
X/FN1eJbxVcchts33a1vffy47LkvKer9PiQ9R3Aj18vvUXC7Cd/w70Zw+52V
xru5jlB18ryhoGcmno8Mer57HcHNiz/7FvT8Lej5xtbwh/UX4zd/CH/xN3fx
qu7ijxpgcYeP1o9V6PxMEtGXcjP/3r3M30o01F74HTiZD7iBPWBhXpIPFy6f
mp+53Nh4hE5fvpPSbJTM4MZKsopKxrKPWqs1ZKMoeTs8j7MzvsekVbxm3JRc
jXY+qdIpF2AokhL+wtKzrvf4X8p5/M17jPfK676vhKwww9ptNnz/8QovNJSL
ZS/UvrnmC9Z7DFiJgsKXoMwTvn4yHOoL9eVY10+8tsnxxi38N9DVaMELf4A7
7Ev5eL/CF75QPQI66Y9uzDp3Q45VZKYfO8KnNM8ZBvpopRfqYm5LJ7nXj/51
XKuBXnKBIT7Gr7oe1/3mV/0KeWL7C1ueEBMXRXqRlNufQ1ZabQbckRt04C6Y
dLEDtyb3rn/e9WdJvu9X4sJtSFw35cJ93f8MxrRVWXOb2/ZzsuYvFp130/7E
GxJYbsSj+HlcisTJbkJm+RYLFhrlWyzYN5kl+M2Wpzd8FpllmXqCh7y5E19Q
Pdlo0UnbjTz66qrNrM0Lft/dFY5uIN3jhtSNoMTx6PMc3d9P6+pP/8KCeJXw
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
63uD/OPNIw/CA1y1e/iCj27+Ax/3geDITgIA

-->

</rfc>
