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

<t>This document defines Key Update for OSCORE (KUDOS), a lightweight procedure that two CoAP endpoints can use to update their keying material by establishing a new OSCORE Security Context. Accordingly, it updates the use of the OSCORE flag bits in the CoAP OSCORE Option as well as the protection of CoAP response messages with OSCORE, and it deprecates the key update procedure specified in Appendix B.2 of RFC 8613. Thus, this document updates RFC 8613.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Constrained RESTful Environments Working Group mailing list (core@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/core/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/core-wg/oscore-key-update"/>.</t>
    </note>
  </front>
  <middle>
    <?line 90?>

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

<t>Readers are expected to be familiar with the terms and concepts related to CoAP <xref target="RFC7252"/>, Observe <xref target="RFC7641"/>, CBOR <xref target="RFC8949"/>, OSCORE <xref target="RFC8613"/>, and EDHOC <xref target="RFC9528"/>.</t>
        <t>This document additionally defines the following terminology.</t>
        <ul spacing="normal">
          <li>
            <t>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 approaching limits set for safe key usage <xref target="I-D.ietf-core-oscore-key-limits"/>. Practically, when the relevant limits have been reached for an OSCORE Security Context, the two peers have to establish a new OSCORE Security Context, in order to continue using OSCORE for secure communication. That is, the two peers have to establish new Sender and Recipient Keys, as the keys actually used by the AEAD algorithm.</t>
      <t>In addition to approaching the key usage limits, there may be other reasons for a peer to initiate a key update procedure. These include: the OSCORE Security Context approaching its expiration time; application policies prescribing a regular key rollover; approaching the exhaustion of the Sender Sequence Number space in the OSCORE Sender Context.</t>
      <t>It is <bcp14>RECOMMENDED</bcp14> that the peer initiating the key update procedure starts it with some margin, i.e., well before actually experiencing the trigger event forcing to perform a key update, e.g., the OSCORE Security Context expiration or the exhaustion of the Sender Sequence Number space. If the rekeying is not initiated ahead of these events, it may become practically impossible to perform a key update with certain methods, and/or without aborting ongoing message exchanges.</t>
      <t>Other specifications define a number of ways for rekeying OSCORE, as summarized below.</t>
      <ul spacing="normal">
        <li>
          <t>The two peers can run the procedure defined in <xref section="B.2" sectionFormat="of" target="RFC8613"/>. That is, the two peers exchange three or four messages, protected with temporary Security Contexts adding randomness to the ID Context.  </t>
          <t>
As a result, the two peers establish a new OSCORE Security Context with new ID Context, Sender Key, and Recipient Key, while keeping the same OSCORE Master Secret and OSCORE Master Salt from the old OSCORE Security Context.  </t>
          <t>
This procedure does not require any additional components to what OSCORE already provides, and it does not provide forward secrecy.  </t>
          <t>
The procedure defined in <xref section="B.2" sectionFormat="of" target="RFC8613"/> is used in 6TiSCH networks <xref target="RFC7554"/><xref target="RFC8180"/> when handling failure events. That is, a node acting as Join Registrar/Coordinator (JRC) assists new devices, namely "pledges", to securely join the network as per the Constrained Join Protocol <xref target="RFC9031"/>. In particular, a pledge exchanges OSCORE-protected messages with the JRC, from which it obtains a short identifier, link-layer keying material and other configuration parameters. As per <xref section="8.3.3" sectionFormat="of" target="RFC9031"/>, a JRC that experiences a failure event may likely lose information about joined nodes, including their assigned identifiers. Then, the reinitialized JRC can establish a new OSCORE Security Context with each pledge, through the procedure defined in <xref section="B.2" sectionFormat="of" target="RFC8613"/>.</t>
        </li>
        <li>
          <t>The two peers can run the OSCORE profile <xref target="RFC9203"/> of the Authentication and Authorization for Constrained Environments (ACE) Framework <xref target="RFC9200"/>.  </t>
          <t>
When a CoAP client uploads an Access Token to a CoAP server as an access credential, the two peers also exchange two nonces. Then, the two peers use the two nonces together with information provided by the ACE Authorization Server that issued the Access Token, in order to derive an OSCORE Security Context.  </t>
          <t>
This procedure does not provide forward secrecy.</t>
        </li>
        <li>
          <t>The two peers can run the EDHOC key exchange protocol based on Diffie-Hellman and defined in <xref target="RFC9528"/>, in order to establish a pseudo-random key in a mutually authenticated way.  </t>
          <t>
Then, the two peers can use the established pseudo-random key to derive external application keys. This allows the two peers to securely derive an OSCORE Master Secret and an OSCORE Master Salt, from which an OSCORE Security Context can be established.  </t>
          <t>
This procedure additionally provides forward secrecy.  </t>
          <t>
EDHOC also specifies an optional function, EDHOC_KeyUpdate, to perform a key update in a more efficient way than re-running EDHOC. The two communicating peers call EDHOC_KeyUpdate with equivalent input, which results in derivation of a new shared pseudo-random key. Usage of EDHOC_KeyUpdate preserves forward secrecy.  </t>
          <t>
Note that EDHOC may be run standalone or as part of other workflows, such as when using the EDHOC and OSCORE profile of ACE <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>.</t>
        </li>
        <li>
          <t>If one peer is acting as LwM2M Client and the other peer as LwM2M Server, according to the OMA Lightweight Machine to Machine Core specification <xref target="LwM2M"/>, then the LwM2M Client peer may take the initiative to bootstrap again with the LwM2M Bootstrap Server, and receive again an OSCORE Security Context. Alternatively, the LwM2M Server can instruct the LwM2M Client to initiate this procedure.  </t>
          <t>
If the OSCORE Security Context information on the LwM2M Bootstrap Server has been updated, the LwM2M Client will thus receive a fresh OSCORE Security Context to use with the LwM2M Server.  </t>
          <t>
In addition to that, the LwM2M Client, the LwM2M Server as well as the LwM2M Bootstrap server are required to use the procedure defined in <xref section="B.2" sectionFormat="of" target="RFC8613"/> and overviewed above, when they use a certain OSCORE Security Context for the first time <xref target="LwM2M-Transport"/>.</t>
        </li>
      </ul>
      <t>Manually updating the OSCORE Security Context at the two peers should be a last resort option, and it might often be not practical or feasible.</t>
      <t>Even when any of the alternatives mentioned above is available, it is <bcp14>RECOMMENDED</bcp14> that two OSCORE peers update their Security Context by using the KUDOS procedure as defined in <xref target="sec-rekeying-method"/> of this document.</t>
    </section>
    <section anchor="sec-updated-response-protection">
      <name>Updated Protection of Responses with OSCORE</name>
      <t>The protection of CoAP responses with OSCORE is updated, by adding the following text at the end of Step 3 of <xref section="8.3" sectionFormat="of" target="RFC8613"/>.</t>
      <blockquote>
        <t>If the server is using a different Security Context for the response compared to what was used to verify the request (e.g., due to an occurred key update), then the server <bcp14>MUST</bcp14> take the second alternative. That is, the server <bcp14>MUST</bcp14> include its Sender Sequence Number as Partial IV in the response and use it to build the AEAD nonce to protect the response.</t>
        <t>This prevents the server from using the same AEAD (key, nonce) pair for two responses, protected with different OSCORE Security Contexts.</t>
        <t>An exception is the procedure in <xref section="B.2" sectionFormat="of" target="RFC8613"/>, which is secure although not complying with the above. The reason is that, in that procedure, the server uses the new OSCORE Security Context only and solely to protect the outgoing response (response #1), and no other message is protected with that OSCORE Security Context. Other procedures where that holds would also remain secure.</t>
      </blockquote>
    </section>
    <section anchor="sec-rekeying-method">
      <name>Key Update for OSCORE (KUDOS)</name>
      <t>This section defines KUDOS, a lightweight procedure that two OSCORE peers can use to update their keying material and establish a new OSCORE Security Context. Hereafter, the document refers to two specific peers that run KUDOS to update specifically one of their OSCORE Security Contexts.</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 defined 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 defined in <xref target="no-fs-mode"/>, as intended to peers that are not able to write in non-volatile memory. Two peers <bcp14>MUST</bcp14> run KUDOS in FS mode if they are both capable to.</t>
      <t>The key update procedure has the following properties.</t>
      <ul spacing="normal">
        <li>
          <t>KUDOS can be initiated by either peer.</t>
        </li>
        <li>
          <t>The new OSCORE Security Context enjoys forward secrecy, unless KUDOS is run in no-FS mode (see <xref target="no-fs-mode"/>).</t>
        </li>
        <li>
          <t>The same ID Context value used in the old OSCORE Security Context (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>KUDOS is robust against a peer rebooting and loss of state, and it especially avoids the reuse of AEAD (nonce, key) pairs.</t>
        </li>
        <li>
          <t>KUDOS typically completes in one round trip by exchanging two OSCORE-protected CoAP messages. The two peers achieve mutual key confirmation in a following exchange, which is protected with the newly established OSCORE Security Context.</t>
        </li>
      </ul>
      <section anchor="ssec-oscore-option-extensions">
        <name>Extensions to the OSCORE Option</name>
        <t>This document extends the use of the OSCORE Option originally defined in <xref target="RFC8613"/> as follows.</t>
        <ul spacing="normal">
          <li>
            <t>This document defines the usage of the eight least significant bit, called "Extension-1 Flag", in the first byte of the OSCORE Option containing the OSCORE flag bits. The registration of this flag bit in the "OSCORE Flag Bits" registry is specified in <xref target="iana-cons-flag-bits"/>.  </t>
            <t>
When the Extension-1 Flag is set to 1, the second byte of the OSCORE Option <bcp14>MUST</bcp14> include the OSCORE flag bits 8-15.</t>
          </li>
          <li>
            <t>This document defines the usage of the least significant bit "Nonce Flag", 'd', in the second byte of the OSCORE Option containing the OSCORE flag bits 8-15. This flag bit is specified in <xref target="iana-cons-flag-bits"/>.  </t>
            <t>
When it is set to 1, the compressed COSE object contains a field 'x' and a field 'nonce', to be used for the steps defined in <xref target="ssec-derive-ctx"/>. In particular, the 1 byte 'x' following 'kid context' (if any) encodes the size of the following field 'nonce', together with signaling bits that indicate the specific behavior to adopt during the KUDOS execution.  </t>
            <t>
Hereafter, a message is referred to as a "KUDOS 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 'x' is as follows:  </t>
            <ul spacing="normal">
              <li>
                <t>The four least significant bits encode the 'nonce' size in bytes minus 1, namely 'm'.</t>
              </li>
              <li>
                <t>The fifth least significant bit is the "No Forward Secrecy" 'p' bit. The sender peer indicates its wish to run KUDOS in FS mode or in no-FS mode, by setting the 'p' bit to 0 or 1, respectively. This makes KUDOS possible to run also for peers that cannot support the FS mode. At the same time, two peers <bcp14>MUST</bcp14> run KUDOS in FS mode if they are both capable to, as per <xref target="ssec-derive-ctx"/>. The execution of KUDOS in no-FS mode is defined in <xref target="no-fs-mode"/>.</t>
              </li>
              <li>
                <t>The sixth least significant bit is the "Preserve Observations" 'b' bit. The sender peer indicates its wish to preserve ongoing observations beyond the KUDOS execution or not, by setting the 'b' bit to 1 or 0, respectively. The related processing is defined in <xref target="preserving-observe"/>.</t>
              </li>
              <li>
                <t>The seventh least significant bit is the 'z' bit. The meaning of 'z' is as follows:      </t>
                <ul spacing="normal">
                  <li>
                    <t>z = 0: This is a "divergent" message, that is a KUDOS message protected with a temporary OSCORE Security Context and indicating that the sender peer is moving away from "equilibrium". The sender peer is offering its own nonce in the 'nonce' field of this message and is waiting to receive the other peer's nonce.</t>
                  </li>
                  <li>
                    <t>z = 1: This is a "convergent" message, that is a KUDOS message protected with the newly established OSCORE Security Context and indicating that the sender peer is offering its own nonce in the 'nonce' field of this message, has received the other peer's nonce, and is going to wait for key confirmation (to return to equilibrium).</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>The eight least significant bit is reserved for future use. This bit <bcp14>SHALL</bcp14> be set to zero when not in use. According to this specification, if this bit is set to 1: i) if the message is a request, it is considered to be malformed and decompression fails as specified in item 2 of <xref section="8.2" sectionFormat="of" target="RFC8613"/>; ii) if the message is a response, it is considered to be malformed and decompression fails as specified in item 2 of <xref section="8.4" sectionFormat="of" target="RFC8613"/> and the client <bcp14>SHALL</bcp14> discard the response as specified in item 8 of <xref section="8.4" sectionFormat="of" target="RFC8613"/>.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t><xref target="fig-oscore-option"/> shows extended OSCORE Option value, with the presence of 'nonce'.</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 ------> <- 1 byte -> <--- m + 1 bytes --->
+------------+----------------------+------------+--------------------+
| s (if any) | kid context (if any) | x (if any) | nonce (if any)     |
+------------+----------------------+------------+--------------------+
                                   /              \____
                                  /                    |
                                 /   0 1 2 3 4 5 6 7   |
                                 |  +-+-+-+-+-+-+-+-+  |
                                 |  |0|z|b|p|   m   |  |
                                 |  +-+-+-+-+-+-+-+-+  |
]]></artwork>
        </figure>
      </section>
      <section anchor="ssec-update-function">
        <name>Function for Security Context Update</name>
        <t>The updateCtx() function shown in <xref target="function-update"/> takes as input the three parameters input1, input2, and CTX_IN. 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. The function returns a new OSCORE Security Context CTX_OUT.</t>
        <t>As a first step, the updateCtx() function builds the two CBOR byte strings input1_cbor and input2_cbor, with value the input parameter input1 and input2, respectively. Then, it builds X_N, as the byte concatenation of input1_cbor and input2_cbor. In order for updateCtx() to be agnostic of the order the nonce values were exchanged, the input1_cbor and input2_cbor values are first sorted in lexicographical order before they are concatenated. E.g., if input1_cbor comes before input2_cbor in lexicographical ordering, then X_N takes the value input1_cbor | input2_cbor and vice-versa.</t>
        <t>After that, the updateCtx() function derives the new values of the Master Secret and Master Salt for CTX_OUT. In particular, the new Master Secret is derived through a KUDOS-Expand step, which takes as input the Master Secret value from the Security Context CTX_IN, the literal string "key update", X_N, and the length of the Master Secret. Instead, the new Master Salt takes X_N as value.</t>
        <t>The definition of KUDOS-Expand depends on the key derivation function used for OSCORE by the two peers, as specified in CTX_IN. If the key derivation function is an HKDF Algorithm (see <xref section="3.1" sectionFormat="of" target="RFC8613"/>), then KUDOS-Expand is mapped to HKDF-Expand <xref target="RFC5869"/>, as shown below. Also, the hash algorithm is the same one used by the HKDF Algorithm specified in CTX_IN.</t>
        <artwork align="left"><![CDATA[
KUDOS-Expand(CTX_IN.MasterSecret, ExpandLabel, key_length) =
   HKDF-Expand(CTX_IN.MasterSecret, ExpandLabel, key_length)
]]></artwork>
        <t>If a future specification updates <xref target="RFC8613"/> by admitting different key derivation functions than HKDF Algorithms (e.g., KMAC as based on the SHAKE128 or SHAKE256 hash functions), that specification has to update also the present document in order to define the mapping between such key derivation functions and KUDOS-Expand.</t>
        <t>When an HKDF Algorithm is used, the derivation of new values follows the same approach used in TLS 1.3, which is also based on HKDF-Expand (see <xref section="7.1" sectionFormat="of" target="RFC8446"/>) and used for computing new keying material in case of key update (see <xref section="4.6.3" sectionFormat="of" target="RFC8446"/>).</t>
        <t>After that, the new Master Secret and Master Salt parameters are used to derive a new Security Context CTX_OUT as per <xref section="3.2" sectionFormat="of" target="RFC8613"/>. Any other parameter required for the derivation takes the same value as in the Security Context CTX_IN.</t>
        <t>Note that the following holds for the newly derived CTX_OUT:</t>
        <ul spacing="normal">
          <li>
            <t>In its Sender Context, the Sender Sequence Number is initialized to 0 as per <xref section="3.2.2" sectionFormat="of" target="RFC8613"/>.</t>
          </li>
          <li>
            <t>If the peer that has derived CTX_OUT supports CoAP Observe <xref target="RFC7641"/>, the Notification Number used for the replay protection of Observe notifications (see <xref section="7.4.1" sectionFormat="of" target="RFC8613"/>) is left as not initialized.</t>
          </li>
        </ul>
        <t>Finally, the updateCtx() function returns the newly derived Security Context CTX_OUT.</t>
        <t>Since the updateCtx() function also takes X as input, the derivation of CTX_OUT also considers as input the information from the 'x' field transported in the OSCORE Option value of the exchanged KUDOS messages. In turn, this ensures that, if successfully completed, a KUDOS execution occurs as intended by the two peers.</t>
        <figure anchor="function-update">
          <name>Functions for deriving a new OSCORE Security Context</name>
          <artwork align="left"><![CDATA[
function updateCtx(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_lexicographic_shorter(input1_cbor, input2_cbor) ?
       (input1_cbor | input2_cbor) : (input2_cbor | input1_cbor)

 // 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)

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

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

 // Return the new Security Context
 return CTX_OUT


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

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

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-aead-limits-09"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-key-limits">
          <front>
            <title>Key Usage Limits for OSCORE</title>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="8" month="January" year="2025"/>
            <abstract>
              <t>   Object Security for Constrained RESTful Environments (OSCORE) uses
   AEAD algorithms to ensure confidentiality and integrity of exchanged
   messages.  Due to known issues allowing forgery attacks against AEAD
   algorithms, limits should be followed on the number of times a
   specific key is used for encryption or decryption.  Among other
   reasons, approaching key usage limits requires updating the OSCORE
   keying material before communications can securely continue.  This
   document defines how two OSCORE peers can follow these key usage
   limits and what steps they should take to preserve the security of
   their communications.

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-edhoc-oscore-profile-06"/>
        </reference>
        <reference anchor="LwM2M" target="http://www.openmobilealliance.org/release/LightweightM2M/V1_2-20201110-A/OMA-TS-LightweightM2M_Core-V1_2-20201110-A.pdf">
          <front>
            <title>Lightweight Machine to Machine Technical Specification - Core, Approved Version 1.2, OMA-TS-LightweightM2M_Core-V1_2-20201110-A</title>
            <author>
              <organization>Open Mobile Alliance</organization>
            </author>
            <date year="2020" month="November"/>
          </front>
        </reference>
        <reference anchor="Symmetric-Security" target="https://eprint.iacr.org/2024/220">
          <front>
            <title>Security of Symmetric Ratchets and Key Chains - Implications for Protocols like TLS 1.3, Signal, and PQ3</title>
            <author fullname="John Preuß Mattsson">
              <organization>Ericsson Research</organization>
            </author>
            <date year="2024" month="February"/>
          </front>
        </reference>
        <reference anchor="LwM2M-Transport" target="http://www.openmobilealliance.org/release/LightweightM2M/V1_2-20201110-A/OMA-TS-LightweightM2M_Transport-V1_2-20201110-A.pdf">
          <front>
            <title>Lightweight Machine to Machine Technical Specification - Transport Bindings, Approved Version 1.2, OMA-TS-LightweightM2M_Transport-V1_2-20201110-A</title>
            <author>
              <organization>Open Mobile Alliance</organization>
            </author>
            <date year="2020" month="November"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 906?>

<section anchor="examples">
      <name>Examples</name>
      <t>The following sections shows two examples of KUDOS being executed and successfully completing.</t>
      <section anchor="successful-kudos-initiated-with-a-request">
        <name>Successful KUDOS Initiated with a Request</name>
        <t>The following shows a succesful execution of KUDOS where KUDOS is started by the client sending a divergent KUDOS message.</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-initiated-with-a-response">
        <name>Successful KUDOS Initiated with a Response</name>
        <t>The following shows a succesful execution of KUDOS where KUDOS is started by the Server sending a divergent KUDOS message.</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>
    <section anchor="sec-document-updates" removeInRFC="true">
      <name>Document Updates</name>
      <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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
KmM9E6eWy9CpqeKep6bWsNZtVquLNFRT+6Vq71Fff3V26Lp03WvrigaqkKkU
X7/JEiBi7EbS2IsvoYutFA1o+z9i3kkNu6ska786Gn5g2iIGIhAQLFNqb8Cr
jmLbeh4uxNDkly0uJOQGWmp3V4daLXY/udfBDdTEAYLFXtxDaPSf2mJhK2hk
uUuDJUfKXpJpY/GxbrtEML1jS/UPTAPeKA349CCcA0L3xMPjjiXFlLiIcdsE
qPX9wdvBi9eH61STkMt+t6Z7hzep5AfzVNLyA9IXLk0fo6mkizSnS1RP6Qz3
PxS1skGxNouku9UkW0vaQ4Q3h6vVDTZy+NAu5NesInM0/tLCICkAy3RYbWJz
8zvAa1r4jLsIX6e4JXQw8nZX2LzS35WvkDAMtLziAY70XNjOjMiLPN7WPweK
gI1dlRKIcs3wpB2/Zu9ec+baF7TX89UXq2lwDjmSLqC1RbjOGhYkCChcXnOC
bn5rgr3l60V9fP39u/W99tiwws2sGmZGGiGzTfe4NZW0da07uuLMFWMJz/OM
8/yRaGw7M5kaXZkSlrsOL8zXoxyoERJbsZ0ba/F19el1kXednw0SFWZJV82U
o/rULGZUV650zg13sVi7VLJke2pNG9goWUhIJyk1i/MzmbkfRDc6WpqxKvrI
FDuYkQlFSIHFq8op4ie1Q2oZrkj34V3/zdIznTlZsEGBhoCD4BZYbi/bgCeb
OHugRd2Z/tguxJRWWr8TPnqkog13/Q1LEq7TysXhV26+YRZMWpR+KllXZD+n
OEjyMS2lFEVzWjmWCbq77k53g3tbti+Top2N6vuk8Up/jyJhSI4nJ9Q50SCl
nwvpCR21bFiU/uJlqx38LI22RT310hLR/wEYlmdCTNMMAITlMxPMpZtzZKf2
BGG59oocXul1jBLl1NjlSs1eiUnV9I5RfKWlNMVqWoAdWxqc6pCau0hVllzt
a9QznbJQ3SxczRj1NSkzqCnkowK3qw57a1S1/MV2r5YsTYimcpIvXS6Iq1K2
ZnYiEjXLDJdzsuBqjvqVyBMKck0NbhEQGdDcXCl0A5zyO1zzYE7mWW9sPVWb
ckuVwhkRJ0BcEI55o0aFg6jLPNUq4+GvUj/CqN2s91A0NaNhwzCEZkBmPcSX
3eoWWtsZRzw8eHWyT1apfJhP2Pb5/HH/mXs3bLFFfGOxgMHRcAidO4kwtgTq
Xr3KZuBSkrHEqVFwh6mUCreZNm2XrWV1ScSMOlKbeFgVVyOLDQxx3wpYgWst
xleS6ggHaCa76uZyVYkKsCPfyX93oMJFC2hhc2pgJvucOjzRSvtOgJtxe2FB
AT2FEFApvd31lJP+TR1Ra23frQks9piP2jQXutnVGi9Wl1SL2NjY/0bX03AJ
Il+cZLHZuHCtDqUozkWdYH1TMZSrihxP8DiRmApVwoxDEuYmo6YnXxGPGFs7
ra41CsqLxrqcEkuNDZtNpo1s/LLTqNEmTLjhR3e4WtCrqUiy3KvpWW7Na3dz
dYot4CyZ2EElXACFFLUbm/aQX+o6rg2wokv/4uTk/Oz8FPYR13vNNqi+TTkM
3nvhAovEMpdC081sewW/bK9nYX0PK9dRgrUTmjuVtVo9Bn6nxFqbxAnqyvGl
0sdgQR3qa7sxsw1UsYRBe/dUr/jB/fqPcPqjFvIxtjmylUvVVIm6W2o7qyXW
1lKb21lDhzkx2avRtKMMTJ3lIyszCwMN1B2KNgXWWwtKPdcKilvmpT0lUAax
YoGzs4vEdYVJtSdbNLYNNhKw1hIfltb1UbdEGt/sNnmjbOegAT7WfFyVmlaA
9rCjdvcPgamhJIiLmB2ZUKXFpV02tVQ/G7Xs1fXlOhLv/XncE7RfHx13VjL3
dqKrRGMjseoNsvSUeNhCd4MX2ya328/e9piK1vwMpvJ1vIVR0B3WGg8QZt4N
+RCo/jNeQQbvovKDbuykU2EgEPTgkPYADtG2MdJAmxqi6aIWV5YtllYw5M8d
3W3ibMod2Mcbzf6sCU98Nw1NXHpEq3Ukv04MP2smDohjS5zLoYTxUZO3NKd1
Q2aMfBqPRqkJRwwn+2AOpunZpIS/uUq2a+34+ToGL0w0skPhPbuRmBSZm3mM
LGDIqzV2p9BB+mLQZgGyao6dUjOvXVuQURgIfVujbozOpITLRRenFBSx0fZS
eNve/RzrHiaUoR3fw1Ym/DBE+190NG6yrPDyBm19Xq2HG7Hj1NoKB8xg4VMI
nIBEXTXP4B4HIGMZZnzfIxi4BjGSaBNTK8LeAsrEc/um2p36Fvgmtr5QK8mA
bAgYXJQZb2bQXLlJBRmI4ruuutCRbWl73BoqVd4Sg4fR8JWR2uA6zLj4Qh2R
PI+M3oQRDJLbSolZpOKtLIIYhhKYVmZri8jxTDVrMgso1tcfW+2W1dN7HpCp
l4xxuBTPUPk2fI4DGGiafrO3cJMlrY6CNe619CaZch0Gk9h27e1Im/U0XnZw
ayFe1dnFwAZGNRwn4fPyk+IXAM8EzOhpfCVgtmwh/X3Sr9d+4x1EYzcZbU2c
7rKjNLEp7TfYmui4nJO5rWJB9yqOf43ras/ea+ziBCvaUk75TXZZxHyfqwqY
HlyzdMoh62LtGmDnNIlTgU9ftPN3Fxgt7ihbH911lQxNFDqwogtbkc/GTNjK
oGbWAzFvn8y0qCfv3dg1mlxybe3AiadCuk7hXL5jnSBqebu1QY2pmSKGlg5N
aRk8c1MyXEJH0e7aiMTKyZQAMuM4nTiqH9viibEF5pQ6MF6p4GUmk6BU0nFV
xNroOOBdrKP1tKN2o4utARVksfHkJr4lu3MZQpWaWJCWzaDLAMRQWHLCAei8
KBsprtR4SJObjpAopncvpO4r0RarYNrHTbYGC9AmqMBzXjExMZeLKZoz5SLv
bn1wJ9QArazaijQuy/nUqdcktMIvj4b+/ABogmKRDCBhAeocq4v++rSbnLVY
2lelPlbpTR53uyW4QPCooF2UEyXomN7mbusMjHmeNEJzVKvmmtpB/FNtPAXC
w0R1Xk0IrymQoRMBGiWkk+FqKJusbDk9H6pkDn9rwEPBjssJTCNwQii6cAXt
ZLA4PnPbzmx9ZG0Jcm0ztt0NMnYiCjsPa6NePTLHCBNXgQldcuNjpuIYN2bN
C6obaLSTZlwh8HoiEOTklSzsljWL2Zi9g/iVtbWPU355sH/o9q6Ih0k3GV3l
xogqj1L3Cl9Do+axnhEZQbTYG8ndHvSAxBmzoPmzrVfB6EZ2k6jAWJhSxIjm
rpHHUaBcNEXvKkIJkaikYC1aIF+EDRBj03FCIXIO5i5Adz0qxPkEC0q2VaNn
/878oiSneOXe4WSWD6/KRgOaBX1nnIzg5d1nZBOCSFQSfEnl+CCSDezq6qRW
48iMUFZaqaxIKD4qiOzisAxMR2F+Kqjj4CUlGK54eV3pXfJxuZ6UlIOfOQTJ
0kJhbIX2AFl27xBccprI2GVQCi5iE5VtgOQEBNTXbp0GC0mBNjDxy9NxsXuf
BNnofLydGIdCuIEFseRlfo0dDI2bwgnBSvk59eKtSaeWHpUi3g04McFmZpTU
gCqQfU3oszjPQoIqnE4nC9t+NHtf3LVWQMfhsJnIZza/uVyc4Lwg793rBtqe
BL+0eUyjb5ey8ViyNK2e5Jj+bYMucSa7mSXhvegwEu5ZD7EzIcjk7+EzqRWN
d4Icjur9yLE3NS/XbyiVBfud0gY4qNbPVgrngjEulwwFHc8kZqGi7uVj+xn7
kughIzgLWpIKxsG/qz1u+51IbrEchymDEjwRaWSEd5hLHdSbh6IoRJQ8oAfb
4zQCineay4slgBKTgSqHtIBbYnRU9MIktNC5BxtgkLVQSjVkkWmDfFuvOHF/
xPw7Etv6fsIVSL6I3vzGbM223NX80ADlckFBRKzeTFgDLcyF1/w3amWWXKak
LqIJjxIwEU8w3vVCCWrs5fbHJikeTtzam3mcwq+QYO2PLvKL+YlgxTaoHc6/
IAGfBjfLkro0TpUFCmimk+i4L+BKSq6U4vmqTIInmYQWLUh9hlKOhR+SINes
Km5tQJt37ePRKBlZ9ZFBa/cjoDa2PK7lcpWE10gx2ca8p4A2VjkZjLayCoQ4
g8qkhDrHTuRL5X8vuy+I5ibDw5EJHaS+SECRa67TZoZiUBHJl5RtT1ZyJ7PU
XXw6lkIJjIl8Y1LqqIflPpB6w6exZDu7E3H6aWaqsISLdmhNbgGt1FW4M8Y2
UkKb1T4ksFCvSCViT2NJ9axUR2YlnFGkdpL1fQStn7/BU0O/AtDCY7HnXxvB
vsihJ/ri4OcIL4JIZ3mdQDojeLQBRZ3Qzh30NPb7BYXVgyYR9jNcWZwPZIa/
iDTBPy1dzHLR3hEgLI4LSrNxw6nuY0pEeEQTAyzYq3OeR9Kee+Q5dbgpjPo/
0VC//lYX4NL59Q62SLlTgNGKoURmzJqHvxIC2kjVBoldas1w9kyrQ0cFR+3v
on7GoBvdc0LWOsK0rMz4sLtYwRioH2iQEwkpx2PQ+keLCVm4UoDdH9XQIhp7
p/05W3O8JbWNmeXX0+MFOQ1sw4WzbdrFkp4Ov7lTj6xXl8/RJka/CsEVlW+m
doH8/ZaQsmhTiG8zWuOe6tJWs2sdXFpMGuZB0sKTcJw98ZdDbusW1qbGRGpY
0/Y7Gd3ETkQWxsosadbXtEXbJmg/WQJoUYao6FAB3XO6Ifzk2PB0Wg5XaJdW
2/VCidylp37CGenWabEEsiWXiX/u4rLE9roU4i3FSmplx8xqK8l7MLnoui23
aAws0ET4UAwNdsbpL9l1o4aFV3BE/Z9GHQoIq81UOFNAYQFITXwOOS1oueiU
fuQt1w3iudJb9vbox1++UUvaVXp5hYto2Qa2dCM0zUu3+4eZEiG0yz7EK1M0
WK/Hkrzq9vhH7+iIdyGhxZJfLekzcGCbvK0/RT24jQDhq0SKaFTceJIyVTiF
xMd7MoOt/30+na27zLgJEJxhS0+XJfSCu0PMUsmMT9nCgIRrVS4gTvQ62vuu
HVov2fbTyjG5+ml75rAlxdr2bLsza+LArirQh7XeQigscUjlMfaGAxUsTZcc
QSsCH5/YDT1KIYoaLOKoKL5RRXZtunCsuh3qw+ckIitARn7og73dQiXtgmFy
Xi4PUOU5HFTO1iS00v/7nA2WONY0/phO51Pr45OrpHXFNIihgWJ1kQVt88Or
XKapRXNkuS1S6B0y3ZWVKw+6Gabr1KiBLP/rmmRFKXQd1ERTslfPMyJsAAzT
TXsQaNRNkqsS2zQbT/i+asC8ZPfKiVj8XKb7cdPMIp8VWl0qo2CiBw+iU9PT
4K2u4YFGyNqGBt5qS9IsWJm0K5em7hPyCHKiZG6SjFIAwYckmRlbZXuhUVm/
CBh+MtqyIk+xfXFByVaXzImqSyV48TXbn9mrLKKoRUHZZDmkqtodw2q68Eh3
zGmd3EOiWYy1zfq3La1WOSNTxKorp3l7TbTgGD5yJ520l341jUztrBe34t0l
scixJmLB5fZl00DsgED7IeOgRqgzMMzIZlCkEE69ZkwqpyY9gFeEnpKnrtZl
BxbfBOdHBdjbjBtF7e7NG4nDkDOnxSqxA2MIkcaUCGk2GCWTeIYXFYaSeHSD
gWrhC5Tn1XYpztwDR2inoDJuP1JH84UzmMgIQWb9vonS6diVf5ywTqxgJhZg
uHacTOb2jAeBO+W+ZN9ErzHOhmVjTR1jIkJqjxP1jXw1GbkuXVZgWY/FmBUK
2SnReqlU22+0LAs9dWqWGuHHASLQp4O0HM7JA2/p0sh8BoTJtPQ27QEIL4E4
ksqPIJTu63xe4SJdNs/N78VJxu3xPBvFCHxyE1iHrNHDLnOMYeJK8bA4bAYq
phQWtFDnnWKYgmbq4Q0YXcdZJaWTaz4ONn0kFJsUs2qWXScZQUoBatKkYXC8
XbglCULDXp9JkekS/3q6D9d6RIrik/P0bP8VkNGKOxCpHQIN3Jx402XfiiYy
SbgyC7RiPwF1tkyHzg68Qrz3grJGJDJHc9JMjg4MbpA8IJHTvn9/kbpJZTz1
MiMoKCaqPizJkCDEZOg4QlEGlidAItiVJmJlHQSrEVo67MPr0tKAzMGUqO+G
HOKcfgyRk/cmdlL0wAFdx81ohBRtquO4mupLlr5LcNJEWRrLqps8n20/2n4k
YH++84iNnvUaG83NidthinOgpEcNqdmxWmJmI3nANTixCVZTMio8MJB04AOT
/NZqfRgT0EWZPPLjEvR+i9sFm7rPMxWgTkD4ukri0draIQr9NQ6itb9oC+5r
ubymcR6egijcwa3SZNJJvChUboXs6K2ewW/VrEHN8xUOucSCaB6n59DkuMKz
XIagvtwN+lj7OoeGQTwpuS97gSYSsXn1yIbyhJthc2qUphfWTKGms1t1OxNv
q+nRXprlbViZfgPpIVy4KikWbKzDuU5+cVzfTtcwfVJ0E502WzcArXIKbJhL
b0kMAOOXG0nMwYlK6+sf5V7Z6Kp1T6b6zq2hCDeiw3DdpFDmqfFdWFwRqWyZ
sdnm5vEL8tB4El/Sy1v/aoBkFHUCt06cuEySXiW/1ZQoQcPSr0mRR5s7H7Fl
o9lbPVTboQVNeHGJGNC5cqlUR4I6Sqq3vuFez8LnY7ZCguqwxNHw0skye1RP
Rqd7zV3lN4kQwIxbcgcX0ZGAo1iKmhoaRs4j1PRtpoHtX9+GJKkNzu09ouva
f/xYrvbCTW9JOIICtrxCkxNsYZxeogTwqaI4cSW1XQkn+0J4Top/mqHi31Hi
wMRCzQFhgo3j89pQHslH8yETbDF1cHam2CVERCDaR+dJhKzXiZ7xTErBsOk2
WyctHVPhgDPRlVzhdu1KkJNNUHIjPUQ7q4KqM0wyUH1zjm/win8bXz0fVqCp
GXOdRHpK+/el9nao61FdoqycA8KW8ab5q5sIqeHPpZTSA1CZq6mm1YADgxQ4
qbHkPoZgZgiH6OKHdBRJTIVL7BekshmFrt5SPMgZ2okve40IB5hCkFLkHo/Z
dX3F7igOKi3NwnNmqNO8FtisDJPPmLgxZGhHn7UCe81n9dn0qGh8cZ6DWhN9
hnF6kfn5HD2KQj+fo8fBz+GLZ/zvmv4mH/d64cd7/ZZx+o90HLiXzvPPWx4P
jg9f7O7wOJ/2ogdhChRVaTVJvlvfD1OYTbrtW+vAWkDM/W59SG0l17+w+Hmq
MTbn2PnCNr4gLZX1YGp3obE4XeyQIQVAvD4ZfgsNDRNRjck2yHBTVW2prlgS
TVArZBO4baSm4bJaVFySAAHTtL4nVqtPR9SUBUg7EMAzr5GNE0lE95rlt8Rq
MzPRPZDxZ7fcRMYpmqJpWV6Ynt/Vo4slPCaRWx1fel0k0jWGqZZfkUMDEjwj
nbP9FEhZ0ti/EbBqVw6XzgvgMnyBDghpoBfDiv0zqL4WzV3feXybeD1oazYM
Di8XMi1dPRj3/oY9VX5wmrkYZETkC3dcWVsb+I3uUyf3iddpLCnUngG0TsHC
tyeYV65gJMlge2c32txnd+mWIWrsXzTxataTwqzCbWXgNOcStJRjV7xs6XTi
gUMM/7HDVjPJXWzW9dHeIffsY9N6pTFIwxT4xrW9K9Lu2xgGXW/21Wlti8MR
SAsb7mhB1hR0yGu8HzqvMX0693WUFoB+mBzHmRG9p0/QzGIeFXmgbdNUFAGX
Eg2xfnKRUi8ppnsSb04o/Y4GO9t/te+2aDcFjo37nkrD8ot1czZVrC5NGVDU
JTJfl6CZ7LKxL3c6NHaGV0CryXs6pdABDeQeF/ElmexYdsYlYqcL4Khk0yGo
PHva35V8kaG+nl16ea8Noz3vsBnzisM9w+EATu5afInb8YuiEOIWdTSGvXHB
btpbF2qOKU7CGZyh0tKs38SOWZ4m+WECYjU86cDclSsfV5hoJAKlLb/mTEJu
K9N+sEQ9DS3fc9MvYmh3zTUiNZ+TlkxK2yMMwjBCojN4zN7SynHlqfyPLjOh
reLaoWRiNExrf5/+//0o6oL48l30FAu+sftsmnN9+1s2+RPmIJ6KzBmdzici
2GtZY8Ic20tnRJgpMf36pw/E2IKxrZcQ4QSrSE6tvjmXS6YFobWYGF0uTe0t
IawJ2qV6y2Pi104kDFwBKhv6KsmkeRAb3mgC2WmmQTVaY0s9d+J2dpvrWELt
ZuDYwuClDOVID8pV0SZITIUqTwGGYytSHI+iEMlu5FZpU4whY/+ZVkqTybX0
K7zI+V7I3zh1DOW4emG1Wk4Y309p/YcsjTs8jF0z3uFHoreTaDAHNlSkvzK9
OMBqdZuHg4MtU7MOrvJMXxoc+MYynrheJ8xq6s/U7MrlMonS20Hk+pIUQfH7
5KE1eWX4INDgaSkBDfAIi1XCvuls1bBKuLgBwPnlPdzgZLLhGjNAj3xxckpU
+VLbpLn74vdIsQi9d1FWheaQjPLhnNxRCmS2wTMgdMV8ir+8x7/ZD6Mx0EgF
vFUSDU3jLJbMwDgeYaLAi1svxBcmNmPLmagD1DsCdjRSzIupTWuCQNWZjqGK
jF+aiie3S2q+stUfbUDAq/FfoMrFbSNGgqKjyW/Gg7kFl5nuysVQQx/nAeNW
fGC11apmExSdfEU5Cin1JkLkujZ2JW7wQNKtWcdAZS3jiCRqqXnIobPio+Is
NuT8qAnUi9a42nec1QHfOFl1Q9tOUoDpKa0d7++2by+zndJJEXYREkm1rYy0
R5ovmhk+Rz+SAcvR/Q4os4n15D/yB7XWwdkPuISrjQ00Re7ubMma3rFdiDP/
PKC975EfJi4/lCKXqVdUYw74pgfe7Ldj87azpuOT40Na084Or6qHJtKFa+qz
EU7+ekQrtATHMAn3lhm1UMm2t446nF6+e/2a19TTNfW+/ppqN9ytBUUtWWxB
BFzTW+wlRWvq65r6f8SanJIAOMu2hZO1XrDugYYJMVv8yFdFxca26xywX/xN
ZSyHPjNNLb3b7e30l/c9vr7epQRsZzuBj7K4bbPN0EwcVi5o3U6Rm4voby9e
v6PY/+57GPws8T+/x0YWbKIf2ARdJ0AFROF77Ubrjd1jK4/aq4xxwLQ1iodi
3jDsk+Yammxx41vtBCkibsaE3zeAE08KgMwtVbtquYKpsOvSqWhIQVf4Dnmq
v+7pIAG+/z2hnKx7nUuz1RAXxAmCtUwnXC6WcyLCC1LaZmxicg6jhgRGdv+k
9E1tTVhKHUc8d28Em0qyydFNW271s9rSG6wnsHT39d9O+JyWzBhHCDTk3sP3
Sdw3hxamUPdf/a6rfGKiF2OSVRTsJKG9m2jpgS9GB1KPIk1YsJY/vE+o/r9o
lbWxGBYwvs1yywTEW2StQ6pDVbh4BeUqkrwdvb53qcjJNxOpZ0fJJ0qZLmTU
LH6rFqhWwhs8XAnnBuFu4PUrvutNPrdpGMBz5pQQwZK8V/a9Q0nTUrqFDRzs
hK408xP3x+M7yj27iknGqSTONoBm7NslNUAGFS0SfYcmwxF78tI6jepq+3jV
885hY//T/kRxXF5frvHq7vpDbwHBox66cCKr/rBrDHgDSID3/fncfBc2/763
F22evzh4/3rw4hAQDK7YVujdP3Xv+fN9YF79MdrFHda88k/Lfvv+fvFuNDcM
7/75vhv+0/L9hh2Lv89+H62239/1fMOe2t+8X+dWohYSFxQM2W0oE0KztVaU
lPfCj+xNNKotX2xz4ZrWE1JnmApuemT2O7o8xCKaTKGiWGId1DII5UeGvpoG
zy/PagqgrXZRn5cOdTt6yWGInRB1ru+3uQJiAl9jGdr+JqmTcI5qcPMxx2lG
iROden/M+CZ2DL1SCtJT2k3ecWOB/0mw/yMTbJSG/qMQ7P/wRJdLOWGssNeN
7V+H7IYNglJVsjER4d7d6GxDvwyofR3J5SEi3DAMuNUug2mmaN7RYrZipL4n
Ea6xiLJGhh1IhuHWCdZD1FZdJk/TFMi3LgN0rnl5ERQWaWoUmZ6BWMK31vZT
Q0TCzXm0UYmtS7cwFUOtDhwpWeq3Q39BrC/NZhOpEWgLyNliTPXujJoyc3q4
f/LmzeHxweGBY/jByDhpYYkxisc94mnHfXxDY9BJsXbNU1mSjCSWyhkG2DPX
O9R+fVd2HuxdH0vfEqlywaG1HFVcAGw5Nh5bzF7ClWZksu6iwCBDUIVTDSRw
uwjiKFcJFqlMnFyFixQUxFF8S8GDo/zjdvQqv0koVCYUDatbEiDgEBSRwxUO
Y3f2LIqp15JJN8Z80o8p1hZkD3zf+PvJfWPiDR/0bCWFtTXM04Dr3fEgSgpn
/WzEK32R0AH4kDaow9Fj1CqzmOYZjCc+JjUoTmERFBUm04wSTDZBlNo2F0HV
espuKeJUHsdq5VQsyrRYcyokmG653OMgkfxkU5HX7qOe+a6RE2lG+7dR21h4
dEa2/o5tls4WwnicoGIPNycV3GC1G3BlXlbUqVPc1ASd2xLVddsL44JrG2Oe
XzTQGuFM+QTsbaszZawZ8Ksixzi5SZSfGK+40/lZIj1SE3tAwYSYsO1ED9BV
mKDxgCojE3jtGREBoVJiualRTuXOsC75UG4PutJNLT0q7oTsUgK4Zeu27Eeo
oE1pQlP06yG2JQCmkgsEpYWsjMa14MewIq1SjYlTGCRJcTjczJXC5FIujEV7
ctqF4ghzCeORwpsw4QeYb+p3e7fNK9iOUovd5MXJ0CUfGxapjyftQUZO40QN
caF0K6y0ySmXJpHvdjpNqiIddpXGIw12eIQkEVKsOXXSLPUNesr0RuQyfLBB
Ph2+1ZipnhRVWkssbIyZzK7gXmIP1YN0PE6T7qtkMpkCxNwpSHbBVBRN0FT+
SRQMM1kZysO8S92OOxYcHOEdXrhxNUnAJoVJYDXeKq0w1JGKEK+2vrfEyOUm
zDDYbiQ5UsEC3caZstLw2ujSqdZq5ZZgM1epIcYhRab2s67LWUnp0Gg3bU7X
h8XBp/OmxGICkTTBMsmu0yLPKJ4Er5tzyb0AjNyPDKsldcdcSdLeZ2o5aSib
Ja+2CD2sCeci4e3arSRGPRGio8HxoC4uPRCBCWNVvtSDYa7iljpAhA44nClQ
kmM8UHQ4SkEY3IveYi+vxCQqo3jM0VaJ8tP1T5/+y9nh65dfvqxbQRWHsCnG
zZhedsJwwyruUwFiAZU85XgrkdNeYq7UC5RXTrnSzi1skoJxEDpdTKXqYuAe
Kh4IEmRW5Qe+lPFoVNsyVl9MbcOv9fok61rP59ZlWuv7DmU/PTw7xzImhxYx
ymhzPz8F5fStpkW4A10W+XxGyRAwQ/SWAkxg+xIh4ulYf0BwCGZbkHMIjhL1
wR3/y0NN++z2GCqfQVLWelShBC0n0MvNDjVdT7SvofMmp7/hkT7r9h7TtAaB
6kka/pr6d18THGJxlyX1nnQpy6O+pt5jb02c10Kr0Y/cNbEIywzXY9AmFDba
Pzk7jPKLv2N44spnV1vTE+9LC6dHd4fTOEf/zR0A1d/tPuo119TfbVnT7j3W
lI7vtKRH/e6j5wE4Peq3rOnxPXA8/XinNe3udHefBta0u9Oypif3uXdYW+FO
q3rWffy4uaZnLWt6euc1gQSAKshd1vT4SffJozqgbIwR0XzJUTdUX+ONTp0q
bPX02SYHCYQdiaeAcgOVcneiBkeZxiASoAv2XaYVBjbYxZApz/CpPLC+nuk/
qh1ynTe8doqLOITPG+pU3DPLfo7s6iLf4uf+tRS4QG4FvO+kVNPd4UrFEAZv
FUO4uJt9o5Vpu5KLpFrpfmu1tmRky6obs/2eTB32J8FtC4K165KLDSO+l9Cy
dEJnncESJ72d7cde1LcHl8M20R3tI8y2NmkJW0Eh5zWG1jYQ9j4/dSQ/f3HQ
48+PGmEWLEEGIhgbcdOb5dZiGmNi+BcSl9VPPXwrUI9xcuXenR65aNJIwVqA
KBv0xEZk36HRBFv8OUp7Ym7NbcnEevak95iShLo0QjmH4/+4F9H4+CEn1VEo
XJGjKWYvOjo8f4lfnXmivV5dgPWeBTU+dyoGVsdasIfCVCIF39zE1c2i+m4r
ep1mH6JzTpAbVHATLlCFlQBTB2QmG9WCSswrPrgWZJbpBbvrMpx7YDt2+Vfj
XuSGToLn2PNWSp8712uvlo/HL5rb459Bt0tlwFGJPJRInHoTLenCwTE1pR+0
Y5zAUo+C0ydHzQ4ltmSvJNDUuz6Lw8EUSdX88MZqaBFaQxLfD/VDJAugSROl
sofW9ixZn7bopa1qUK8b0nQgS75PFVfzcm9l6uW9hZfn/CesHLYXdTvdVcfw
38Jrhn3B4dYdvAYivNPZCTiAA4M03loLPrjPQGr8nJEtM/xOFEUtPsXPa39J
soTiwI5BBPqpt/yFO8+A0KHm8985HdJXmQFW85mWteqSdj52/G+WvSAHF22t
+kLjm3u+oEUWHvT0hbecJWoKOzLIoijshP7+c9TMDV4wqYhhn2qrbLs0sMrt
7WbexecoeJZrBv9/gsM69nDIpmjuGSuGBRoc2Jrg/Yt3Zz9Hmz17W1rXoD+K
HotgPSLVZc8Tve0I5vgXDfERtwX7vdjYwZ9er7ex+HzJrLDnwgE//jEpKPra
Pd5FowT3vuCFL8GPF7xwmFFtTawpKzUKPi1B3N99SeGP7/xCjarf+XWHnEfd
u7/uIfROp7cQu4If/wEgsmS/D2S//wfMiFDFkqQe5bjzKPbnpz5e//7Wwvu/
dBCmIb9tkJXISPDj5WzC+sCXvBCOr/pT1OArcAZ3ZxQL1hkm0v4VDJ29vB5m
EJajAHoeu+jpCwWt88slfHt4fHB0/BdkLN49FOSJOjpKkFE4L/iSgrCFPrOF
3p3YgmfmXKuzBYTSoo3dndw+bFT7jR7KDCEWsBgnA2tC0SXpktiKrQkcOaJ1
SQfsUHKkHDvDshfgEDpGzvh6BHSBJBR+QQ6LmcQqL7RpBV9vD25Pv3q0VUmt
AjDiB/RTejDQoPGqvTy61Pm+85qWvGDk4L6+EKJX+E27HIx1wH9/inbni9eQ
+BYT3ruLY275f30HwBG47n/AZms04O7stEYTftMATCPqnGO1cf4p0qYhJPeW
NpeZDSLnyqlMwXfua8kU7Zzsn3UD/6nKT/h6/gHakhsBvqpFjzHidzDpndlm
nf9p0mu9my02vfua9Ja8sILtCSXd6D8Cz4WN/P5UIKrZUH9/qtBih1sw7+KP
VzGlLf4YLXn3fvn/LAV6iXjy+2nQLUb0ZRo06UqLbOQLNWhrl11kl1+sPgfM
7F/HqtoQOlSd/JeUIUIr+kNEgjsrt21cc8ELDavn4hfuvIc7v1CzcP4OMyyw
ai2bQexP1oq19IW62WvZCw2D1bIXat/c84WvodD/ExxbLsaz4mhfCPuQgubs
btDuaAhew17ojLgKCw6aEN0xBKvuzmzszyq8+CuRyjtaSL6SCnZXC8lXIsL/
ihYSXzJYdZw/3ELSdW0k9zCRrK6I/VMZ1p1f+D/S3vv7GJ/ap/1aqmi7eetr
CY4LHDVfyfj0n46aVV74/R01vokuOtAY6neSFacpYhqh2ZWcsi9rn/aKBHul
p1kxHnKMKiAm5dB2d55jbGS3txM90AF2nsOfX7B3zJv473kRwfmPEow55xY+
kqYfEzgxLW54hR15R0VqulPWanhv16Z8RlPCzHbKZ/AnT4mGvogICqeaxtd5
SnOmWZfKaWNTbe0KMZpLYrnbdZiK+GP5hctJQrmRHPLIDWe5H+YoSooiL0w3
S/qOs+JQKW50zRxO4sLEwHKfIjpwmxteq4OqfQW0D6FX2Zgmk95b0cgJpcap
NMnx2tZZZXC2tBDkNrrSjCqS3p2mD1dGM+8P3g5eAGKOkusUE/uwVTXnLydS
m/YNFqPFoQajkdMCiBqytlRHr/VHGOwfOl1IxumExzvk7iZu+wdYudPmbYyl
4XAeZjO2VTs1C8aQf064ZqhLlf3agSiqmBapDZpoMhLFDI3NoKXuJw8MPKYq
5sAWC+p1wVHA8jA9mClCNmoTcYeouNBnS+l3TwG1mv3q1PpIMwq/HpL5dhoX
l2kmGCX5Y4A04/mE8utpRNPkx/THbemx43XVqV26p3zpnjmX7in8+UUPPcP8
UN4hd96V0gV0BMd51zBh6c1I7+HdtAnzlL4BAkOZYhX5OEvyeQmHqNZ9P8/1
G8o4Os4rG1vOSR1SkRxQnVwOE6quQHU02kt88ICv8DZTV6SMqq+XnFFSmAon
UsGV+whjeovtM8ytgwUVunlxGWfpr9SoAvsHCAlRDJBGTrCKIhnecgUtIjuW
2vBQFK5eKzSCS1qUOMONJsbSyZzSZYp4XNWTY3J7DO9go4PB2Y9/wcs8SjHV
dlqab0TWozSI0uT/Y/teapTHD+7X7hNW9wmSQ594tRVTke42muJBO5ok11Re
IZ5JRyEHOZ8wcj51kPMJ/PmFj2NKFBtrftBybAmCo4NGcRhNSMOcaK76ADJN
FXEHKmYMCdK3KmGwMh5T/3iklH5ZBToqn3Yu4BT01VvMR4fDmiQfqbK8R+YI
LPVCD6U0saK7/FCbGrnEUx1hzTeL5BIb7XkVZJyyJx6MHzOMnzgwfgx/CqPP
CIxuXSZTLU77lnEvhSb13ma+nUmrTOWF+LjPEBDpkE3EpRRVkOspvWYsHkpy
U+o7DTfrMNpyHIGWNXBXy+ZVoetk+nGAfKl1Szi12W/dJIlp3O+rDUJcQMap
oR5Glo/cv4v4Jc9CbelVeCnhZgx1p4af4FvAIrAuMkx1kY6EhSLj0hY65kJQ
9ZMiucjzajF+egixywjx2EGIXfiTEIKqBWCPYXYyFglBbppS15QSc0Tr3Rh5
T2nWjiJnppZ07BXbtjWPgOzfADmpEjosvI/X+QSeoXs0zZk2XjGV5+3W6FGB
fYJgsyOHjtVIE94Q7vxpCgHZIkD/JTruM0UAkMOWYUYt++BWDTIN5EExcvnh
QVIBFGAdkxR48O1wUu+Pe3RQNiiWvIlS4EUy8rJxlr11uNqz3Hql0A7J3B+B
e0P6JbCE+5vmWoZVOT2o7swuPJx7xDi36+DcI/jTI/S+uBVk0e+4kdG6kiYX
19ZpOeshNFznlyVTl2thYDfZSDvhcqVkLupme+lxsRptNscCNz9DlO79D8kt
j7m5pURFi8Y0CJweNIohpYoDVjo2pxg+8BrcMR/PEWpBaf2FzLAIAPqD7TEk
4MHmUIBSSYb621FyOU49ApFgkg8/eMKA1oGy9p8R4P2o1icGxXXgX9SmSnbI
qYdUH6G4jo3IfWH+RNZ8m1v+YLarAth1inKwVP+h/HPtamj78lDBtgVKka4j
dtMna83tuJd97UPMHrwDGe0zSj9yULoPf35x8DSQFB/tUJE30q24GZpJlxcM
EzxFF8FWB9U1LkY1npOOgtcCi4gJfGt14V/9cPCSaS71eqOztB6HLS3YRzoW
cBoAw+bWt6auHmDnm8PzVycHUd/FduapbgO4cTsDTaWJphVmGAetNkklfupl
ILX6Ygu2c7WffJJf3oo4Yi+Rd83eSXO1gAB+h6Pt8dH2naPtwZ9fPJ7jrIkl
BSJilviSbst3gbbtXoN4WORl6RU3olIE2PQ5H4XHs7UGjDKEys1Dw5SIB7QM
49hJVGlUGlqKNqMUojECXyjnBKlMQ60MysbHDdvd+E0+qnEJypcmsxUcv4uR
xGHs0XPzOARdXWtn4RL2UUZvT3/45T0p/jAy/ZF8RHwi/cIhtdRG7KYAIVnw
Ls1ArkBwCOfnwpXCTIUEZfEUHthI0W6AXH0DAbJBL2zcAYV2GIV6DgrtwJ/C
8FxpBfGbWRzz3f03759ti0hBgtVgRlUyP/qGLL1wtltpR0njNRcZdPRhFZe4
aDbKmyyHczFNKqsoxo0K1HakShtUy+39v284d/iOuOi86Yj9q18J5/3l6EsV
tAZDbajCJjwEfex/hlZRrmGVjL5bHwPEknXp5xdTwn/JBVyLhFoTxBk27/y0
f1WAjp5i541p+Y//tyy/YAE6/CIuShRbX6BQm2X6MZDfHD+cXyaVfnYaj2NQ
J+Bouq+Bqv+qn/81v8rQ3zf/x/+Cr6uqBMpG3+GBwPd/+cf/BhkcIDyJEcZf
pIUo1zQbgwiNqd8i8U4VF3E/VOwsz2qlN4yCjP3aJ6Z/mxOFeZOMkmyjBPKf
5cJmBpdUvO/Ho+Pjkx8HWlMt2k8mVTrsHqPVFpADCx+V0f7p0fnR2SErgvs/
vz09PDv7lv6QCV71d/o79vmzo5dHZ91XWHBw8y8FmgriyyKhWxU9f9x/8ri/
RW8PTvcHB0DXu0f5efPJ3k4PRu0/fo59W/5/8mtNYE9sAQA=

-->

</rfc>
