<?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-rfc2629 version 1.6.6 (Ruby 2.7.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-oscore-key-update-02" category="std" consensus="true" submissionType="IETF" updates="8613" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.4 -->
  <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-02"/>
    <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="2022" month="July" day="11"/>
    <area>Internet</area>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <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.</t>
      <t>This document defines how two OSCORE peers must follow these key usage limits and what steps they must take to preserve the security of their communications. Also, it specifies Key Update for OSCORE (KUDOS), a lightweight procedure that two peers can use to update their keying material and establish a new OSCORE Security Context. Finally, this document specifies a method that two peers can use to update their OSCORE identifiers, as a stand-alone procedure or embedded in a KUDOS execution. 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>
    <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>In particular, OSCORE uses AEAD algorithms to provide confidentiality and integrity of messages exchanged between two peers. Due to known issues allowing forgery attacks against AEAD algorithms, limits should be followed on the number of times a specific key is used to perform encryption or decryption <xref target="I-D.irtf-cfrg-aead-limits"/>.</t>
      <t>The original OSCORE specification <xref target="RFC8613"/> does not consider such key usage limits. However, should they be exceeded, an adversary may break the security properties of the AEAD algorithm, such as message confidentiality and integrity, e.g., by performing a message forgery attack. Among other reasons, approaching the key usage 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>It defines what steps an OSCORE peer takes to preserve the security of its communications, by stopping using the OSCORE Security Context shared with another peer when approaching the key usage limits.</li>
        <li>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"/>.</li>
        <li>It specifies a method that two peers can use to update their OSCORE identifiers. This can be run as a stand-alone procedure, or instead embedded in a KUDOS execution.</li>
      </ul>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>
        <t>Readers are expected to be familiar with the terms and concepts related to the CoAP <xref target="RFC7252"/>, Observe <xref target="RFC7641"/>, CBOR <xref target="RFC8949"/>, OSCORE <xref target="RFC8613"/> and EDHOC <xref target="I-D.ietf-lake-edhoc"/>.</t>
        <t>This document additionally defines the following terminology.</t>
        <ul spacing="normal">
          <li>Initiator: the peer starting the KUDOS execution, by sending the first KUDOS message.</li>
          <li>Responder: the peer that receives the first KUDOS message in a KUDOS execution.</li>
          <li>FS mode: the KUDOS execution mode that achieves forward secrecy (see <xref target="ssec-derive-ctx"/>).</li>
          <li>No-FS mode: the KUDOS execution mode that does not achieve forward secrecy (see <xref target="no-fs-mode"/>).</li>
        </ul>
      </section>
    </section>
    <section anchor="aead-key-usage-limits-in-oscore">
      <name>AEAD Key Usage Limits in OSCORE</name>
      <t>This section details how key usage limits for AEAD algorithms must be considered when using OSCORE. In particular, it discusses specific limits for common AEAD algorithms used with OSCORE; necessary additions to the OSCORE Security Context; and updates to the OSCORE message processing.</t>
      <section anchor="problem-overview">
        <name>Problem Overview</name>
        <t>The OSCORE security protocol <xref target="RFC8613"/> uses AEAD algorithms to provide integrity and confidentiality of messages, as exchanged between two peers sharing an OSCORE Security Context.</t>
        <t>When processing messages with OSCORE, each peer should follow specific limits as to the number of times it uses a specific key. This applies separately to the Sender Key used to encrypt outgoing messages, and to the Recipient Key used to decrypt and verify incoming protected messages.</t>
        <t>Exceeding these limits may allow an adversary to break the security properties of the AEAD algorithm, such as message confidentiality and integrity, e.g., by performing a message forgery attack.</t>
        <t>The following refers to the two parameters 'q' and 'v' introduced in <xref target="I-D.irtf-cfrg-aead-limits"/>, to use when deploying an AEAD algorithm.</t>
        <ul spacing="normal">
          <li>'q': this parameter has as value the number of messages protected with a specific key, i.e., the number of times the AEAD algorithm has been invoked to encrypt data with that key.</li>
          <li>'v': this parameter has as value the number of alleged forgery attempts that have been made against a specific key, i.e., the amount of failed decryptions that have occurred with the AEAD algorithm for that key.</li>
        </ul>
        <t>When a peer uses OSCORE:</t>
        <ul spacing="normal">
          <li>The key used to protect outgoing messages is its Sender Key from its Sender Context.</li>
          <li>The key used to decrypt and verify incoming messages is its Recipient Key from its Recipient Context.</li>
        </ul>
        <t>Both keys are derived as part of the establishment of the OSCORE Security Context, as defined in <xref section="3.2" sectionFormat="of" target="RFC8613"/>.</t>
        <t>As mentioned above, exceeding specific limits for the 'q' or 'v' value can weaken the security properties of the AEAD algorithm used, thus compromising secure communication requirements.</t>
        <t>Therefore, in order to preserve the security of the used AEAD algorithm, OSCORE has to observe limits for the 'q' and 'v' values, throughout the lifetime of the used AEAD keys.</t>
        <section anchor="limits">
          <name>Limits for 'q' and 'v'</name>
          <t>Formulas for calculating the security levels, as Integrity Advantage (IA) and Confidentiality Advantage (CA) probabilities, are presented in <xref target="I-D.irtf-cfrg-aead-limits"/>. These formulas take as input specific values for 'q' and 'v' (see section <xref target="problem-overview"/>) and for 'l', i.e., the maximum length of each message (in cipher blocks).</t>
          <t>For the algorithms shown in <xref target="algorithm-limits"/> that can be used as AEAD Algorithm for OSCORE, the key property to achieve is having IA and CA values which are no larger than p = 2^-64, which will ensure a safe security level for the AEAD Algorithm. This can be entailed by using the values q = 2^20, v = 2^20, and l = 2^10, that this document recommends to use for these algorithms.</t>
          <t><xref target="algorithm-limits"/> also shows the resulting IA and CA probabilities enjoyed by the considered algorithms, when taking the value of 'q', 'v' and 'l' above as input to the formulas defined in <xref target="I-D.irtf-cfrg-aead-limits"/>.</t>
          <figure anchor="algorithm-limits">
            <name>Probabilities for algorithms based on chosen q, v and l values.</name>
            <artwork align="center"><![CDATA[
+------------------------+----------------+----------------+
| Algorithm name         | IA probability | CA probability |
|------------------------+----------------+----------------|
| AEAD_AES_128_CCM       | 2^-64          | 2^-66          |
| AEAD_AES_128_GCM       | 2^-97          | 2^-89          |
| AEAD_AES_256_GCM       | 2^-97          | 2^-89          |
| AEAD_CHACHA20_POLY1305 | 2^-73          | -              |
+------------------------+----------------+----------------+
]]></artwork>
          </figure>
          <t>When AEAD_AES_128_CCM_8 is used as AEAD Algorithm for OSCORE, the triplet (q, v, l) considered above yields larger values of IA and CA. Hence, specifically for AEAD_AES_128_CCM_8, this document recommends using the triplet (q, v, l) = (2^20, 2^14, 2^8). This is appropriate, since the resulting CA and IA values are not greater than the threshold value of 2^-50 defined in <xref target="I-D.irtf-cfrg-aead-limits"/>, and thus yields an acceptable security level. Achieving smaller values of CA and IA would require to inconveniently reduce 'q', 'v' or 'l', with no corresponding increase in terms of security, as further elaborated in <xref target="aead-aes-128-ccm-8-details"/>.</t>
          <figure anchor="l-values-as-bytes">
            <name>Maximum length of each message (in bytes)</name>
            <artwork align="center"><![CDATA[
+------------------------+----------+----------+-----------+
| Algorithm name         | l=2^6 in | l=2^8 in | l=2^10 in |
|                        | bytes    | bytes    | bytes     |
|------------------------+----------+----------|-----------|
| AEAD_AES_128_CCM       | 1024     | 4096     | 16384     |
| AEAD_AES_128_GCM       | 1024     | 4096     | 16384     |
| AEAD_AES_256_GCM       | 1024     | 4096     | 16384     |
| AEAD_AES_128_CCM_8     | 1024     | 4096     | 16384     |
| AEAD_CHACHA20_POLY1305 | 4096     | 16384    | 65536     |
+------------------------+----------+----------+-----------+
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="context">
        <name>Additional Information in the Security Context</name>
        <t>In addition to what defined in <xref section="3.1" sectionFormat="of" target="RFC8613"/>, the OSCORE Security Context MUST also include the following information.</t>
        <section anchor="common-context">
          <name>Common Context</name>
          <t>The Common Context is extended to include the following parameter.</t>
          <ul spacing="normal">
            <li>
              <t>'exp': with value the expiration time of the OSCORE Security Context, as a non-negative integer. The parameter contains a numeric value representing the number of seconds from 1970-01-01T00:00:00Z UTC until the specified UTC date/time, ignoring leap seconds, analogous to what specified for NumericDate in <xref section="2" sectionFormat="of" target="RFC7519"/>.  </t>
              <t>
At the time indicated in this field, a peer MUST stop using this Security Context to process any incoming or outgoing message, and is required to establish a new Security Context to continue OSCORE-protected communications with the other peer.</t>
            </li>
          </ul>
        </section>
        <section anchor="sender-context">
          <name>Sender Context</name>
          <t>The Sender Context is extended to include the following parameters.</t>
          <ul spacing="normal">
            <li>'count_q': a non-negative integer counter, keeping track of the current 'q' value for the Sender Key. At any time, 'count_q' has as value the number of messages that have been encrypted using the Sender Key. The value of 'count_q' is set to 0 when establishing the Sender Context.</li>
            <li>
              <t>'limit_q': a non-negative integer, which specifies the highest value that 'count_q' is allowed to reach, before stopping using the Sender Key to process outgoing messages.  </t>
              <t>
The value of 'limit_q' depends on the AEAD algorithm specified in the Common Context, considering the properties of that algorithm. The value of 'limit_q' is determined according to <xref target="limits"/>.</t>
            </li>
          </ul>
          <t>Note for implementation: it is possible to avoid storing and maintaining the counter 'count_q'. Rather, an estimated value to be compared against 'limit_q' can be computed, by leveraging the Sender Sequence Number of the peer and (an estimate of) the other peer's. A possible method to achieve this is described in <xref target="estimation-count-q"/>. While this relieves peers from storing and maintaining the precise 'count_q' value, it results in overestimating the number of encryptions performed with a Sender Key. This in turn results in approaching 'limit_q' sooner and thus in performing a key update procedure more frequently.</t>
        </section>
        <section anchor="recipient-context">
          <name>Recipient Context</name>
          <t>The Recipient Context is extended to include the following parameters.</t>
          <ul spacing="normal">
            <li>'count_v': a non-negative integer counter, keeping track of the current 'v' value for the Recipient Key. At any time, 'count_v' has as value the number of failed decryptions occurred on incoming messages using the Recipient Key. The value of 'count_v' is set to 0 when establishing the Recipient Context.</li>
            <li>
              <t>'limit_v': a non-negative integer, which specifies the highest value that 'count_v' is allowed to reach, before stopping using the Recipient Key to process incoming messages.  </t>
              <t>
The value of 'limit_v' depends on the AEAD algorithm specified in the Common Context, considering the properties of that algorithm. The value of 'limit_v' is determined according to <xref target="limits"/>.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="oscore-messages-processing">
        <name>OSCORE Messages Processing</name>
        <t>In order to keep track of the 'q' and 'v' values and ensure that AEAD keys are not used beyond reaching their limits, the processing of OSCORE messages is extended as defined in this section. A limitation that is introduced is that, in order to not exceed the selected value for 'l', the total size of the COSE plaintext, authentication Tag, and possible cipher padding for a message may not exceed the block size for the selected algorithm multiplied with 'l'.</t>
        <t>In particular, the processing of OSCORE messages follows the steps outlined in <xref section="8" sectionFormat="of" target="RFC8613"/>, with the additions defined below.</t>
        <section anchor="protecting-req-resp">
          <name>Protecting a Request or a Response</name>
          <t>Before encrypting the COSE object using the Sender Key, the 'count_q' counter MUST be incremented.</t>
          <t>If 'count_q' exceeds the 'limit_q' limit, the message processing MUST be aborted. From then on, the Sender Key MUST NOT be used to encrypt further messages.</t>
        </section>
        <section anchor="verifying-a-request-or-a-response">
          <name>Verifying a Request or a Response</name>
          <t>If an incoming message is detected to be a replay (see <xref section="7.4" sectionFormat="of" target="RFC8613"/>), the 'count_v' counter MUST NOT be incremented.</t>
          <t>If the decryption and verification of the COSE object using the Recipient Key fails, the 'count_v' counter MUST be incremented.</t>
          <t>After 'count_v' has exceeded the 'limit_v' limit, incoming messages MUST NOT be decrypted and verified using the Recipient Key, and their processing MUST be aborted.</t>
        </section>
      </section>
    </section>
    <section anchor="sec-current-methods">
      <name>Current methods for Rekeying OSCORE</name>
      <t>Before the limit of 'q' or 'v' defined in <xref target="limits"/> has 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.</t>
      <t>In practice, the two peers have to establish new Sender and Recipient Keys, as the keys actually used by the AEAD algorithm. When this happens, both peers reset their 'count_q' and 'count_v' values to 0 (see <xref target="context"/>).</t>
      <t>Other specifications define a number of ways to accomplish this, 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="I-D.ietf-ace-oscore-profile"/> of the Authentication and Authorization for Constrained Environments (ACE) Framework <xref target="I-D.ietf-ace-oauth-authz"/>.  </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="I-D.ietf-lake-edhoc"/>, 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>
        </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 RECOMMENDED 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>
      <t>It is RECOMMENDED that the peer initiating the key update procedure starts it before reaching the 'q' or 'v' limits. Otherwise, the AEAD keys to be possibly used during the key update procedure itself may already be or become invalid before the rekeying is completed, which may prevent a successful establishment of the new OSCORE Security Context altogether.</t>
      <t>In addition to approaching the 'q' or 'v' limits, there may be other reasons for a peer to initiate a key update procedure. These include: the OSCORE Security Context approaching its expiration, as per the 'exp' parameter defined in <xref target="common-context"/>; application policies prescribing a regular key rollover; approaching the exhaustion of the Sender Sequence Number space in the OSCORE Sender Context.</t>
    </section>
    <section anchor="sec-rekeying-method">
      <name>Key Update for OSCORE (KUDOS)</name>
      <t>This section defines KUDOS, a lightweight procedure that two OSCORE peers can use to update their keying material and establish a new OSCORE Security Context.</t>
      <t>KUDOS relies on the OSCORE Option defined in <xref target="RFC8613"/> and extended as defined in <xref target="ssec-oscore-option-extensions"/>, as well as on the support function updateCtx() defined in <xref target="ssec-update-function"/>.</t>
      <t>The message exchange between the two peers is defined in <xref target="ssec-derive-ctx"/>, with particular reference to the stateful FS mode providing forward secrecy. Building on the same message exchange, the possible use of the stateless no-FS mode is defined in <xref target="no-fs-mode"/>, as intended to peers that are not able to write in non-volatile memory. Two peers MUST run KUDOS in FS mode if they are both capable to.</t>
      <t>The key update procedure fulfills the following properties.</t>
      <ul spacing="normal">
        <li>KUDOS can be initiated by either peer. In particular, the client or the server may start KUDOS by sending the first rekeying message.</li>
        <li>The new OSCORE Security Context enjoys forward secrecy, unless KUDOS is run in no-FS mode (see <xref target="no-fs-mode"/>).</li>
        <li>The same ID Context value used in the old OSCORE Security Context is preserved in the new Security Context. Furthermore, the ID Context value never changes throughout the KUDOS execution.</li>
        <li>KUDOS is robust against a peer rebooting, and it especially avoids the reuse of AEAD (nonce, key) pairs.</li>
        <li>KUDOS completes in one round trip. The two peers achieve mutual proof-of-possession in the following exchange, which is protected with the newly established OSCORE Security Context.</li>
      </ul>
      <section anchor="ssec-oscore-option-extensions">
        <name>Extensions to the OSCORE Option</name>
        <t>In order to support the message exchange for establishing a new OSCORE Security Context, this document extends the use of the OSCORE Option originally defined in <xref target="RFC8613"/> as follows.</t>
        <ul spacing="normal">
          <li>
            <t>This document defines the usage of the seventh least significant bit, called "Extension-1 Flag", in the first byte of the OSCORE Option containing the OSCORE flag bits. This flag bit 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 MUST include the set of 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 'nonce', to be used for the steps defined in <xref target="ssec-derive-ctx"/>. The 1 byte 'x' following 'kid context' (if any) encodes the length of 'nonce', together with signaling bits that indicate the specific behavior to adopt during the KUDOS execution. Specifically, the encoding of 'x' is as follows:  </t>
            <ul spacing="normal">
              <li>The four least significant bits encode the 'nonce' length in bytes minus 1, namely 'm'.</li>
              <li>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 MUST 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"/>.</li>
              <li>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"/>.</li>
              <li>The seventh and eight least significant bits are reserved for future use. These bits SHALL be set to zero when not in use. According to this specification, if any of these bits are set to 1, the message is considered to be malformed and decompression fails as specified in item 2 of <xref section="8.2" sectionFormat="of" target="RFC8613"/>.</li>
            </ul>
            <t>
Hereafter, this document refers to a message where the 'd' flag is set to 0 as "non KUDOS (request/response) message", and to a message where the 'd' flag is set to 1 as "KUDOS (request/response) message".</t>
          </li>
          <li>The second-to-eighth least significant bits in the second byte of the OSCORE Option containing the OSCORE flag bits are reserved for future use. These bits SHALL be set to zero when not in use. According to this specification, if any of these bits are set to 1, the message is considered to be malformed and decompression fails as specified in item 2 of <xref section="8.2" sectionFormat="of" target="RFC8613"/>.</li>
        </ul>
        <t><xref target="fig-oscore-option"/> shows the OSCORE Option value including also 'nonce'.</t>
        <figure anchor="fig-oscore-option">
          <name>The OSCORE Option value, including 'nonce'</name>
          <artwork align="center"><![CDATA[
 0 1 2 3 4 5 6 7  8   9   10  11  12  13  14  15 <----- n bytes ----->
+-+-+-+-+-+-+-+-+---+---+---+---+---+---+---+---+---------------------+
|0|1|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   |
+------------------+             |  +-+-+-+-+-+-+-+-+  |
| kid (if any) ... |             |  |0|0|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 three parameters X, N and CTX_IN. In particular, X and N are built from the 'x' and 'nonce' fields transported in the OSCORE Option value of the exchanged KUDOS messages (see <xref target="ssec-derive-ctx-client-init"/>), while CTX_IN is the OSCORE Security Context to update. The function returns a new OSCORE Security Context CTX_OUT.</t>
        <t>As a first step, the updateCtx() function builds the two CBOR byte strings X_cbor and N_cbor, with value the input parameter X and N, respectively. Then, it builds the CBOR byte string X_N, with value the byte concatenation of X_cbor and N_cbor.</t>
        <t>After that, the updateCtx() function derives the new values of the Master Secret and Master Salt for CTX_OUT. Specifically, the updateCtx() function uses one of the two following methods, depending on how the two peers established their original Security Context, i.e., the Security Context that they shared before performing KUDOS with one another for the first time.</t>
        <ul spacing="normal">
          <li>
            <t>METHOD 1 - If the original Security Context was established by running the EDHOC protocol <xref target="I-D.ietf-lake-edhoc"/>, the following applies.  </t>
            <t>
First, the EDHOC-KeyUpdate() function defined in <xref section="4.2.2" sectionFormat="of" target="I-D.ietf-lake-edhoc"/> is invoked. This results in deriving a new EDHOC key PRK_out shared by the two peers, and in using it to derive a new EDHOC key PRK_exporter, as per <xref section="4.2.1" sectionFormat="of" target="I-D.ietf-lake-edhoc"/>.  </t>
            <t>
After that, the EDHOC-Exporter() function defined in <xref section="4.2.1" sectionFormat="of" target="I-D.ietf-lake-edhoc"/> is used to derive the new values for the OSCORE Master Secret and Master Salt, consistently with what is defined in <xref section="A.1" sectionFormat="of" target="I-D.ietf-lake-edhoc"/>. In particular, the EDHOC-Exporter() function takes the new EDHOC key PRK_exporter derived above as first argument, while the context parameter provided as second argument is the empty CBOR byte string (0x40) <xref target="RFC8949"/>, which is denoted as h''.  </t>
            <t>
Note that, compared to the compliance requirements in <xref section="7" sectionFormat="of" target="I-D.ietf-lake-edhoc"/>, a peer MUST support the EDHOC-KeyUpdate() function, in case it establishes an original Security Context through the EDHOC protocol and intends to perform KUDOS.  </t>
            <t>
The points in time when the two peers can delete the old EDHOC keys PRK_out and PRK_exporter are defined in <xref target="ssec-derive-ctx-client-init"/> and <xref target="ssec-derive-ctx-server-init"/>, when specifying the client-initiated and server-initiated key update procedure, respectively. Until that point in time, a peer MUST retain the old EDHOC keys and MUST NOT replace them with the newly derived ones.</t>
          </li>
          <li>METHOD 2 - If the original Security Context was established through other means than the EDHOC protocol, the new Master Secret is derived through an HKDF-Expand() step, which takes as input the Master Secret value from the Security Context CTX_IN, the literal string "key update", X_N and the length of the Master Secret. Instead, the new Master Salt takes N as value.</li>
        </ul>
        <t>In either case, 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. Finally, the 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>
        <t>[</t>
        <t>NOTE: In the case its EDHOC session has become invalid, a peer is unable to utilize the first method based on the EDHOC-KeyUpdate() function. In such a case, rather than running the EDHOC protocol again, it is preferable to fall back for the second method based on HKDF-Expand(). In order for the peer to signal the need for such a fall back, the seventh least significant bit in the 'x' byte of the OSCORE Option can be used. This may further justify a possible restructuring of the pseudocode, as two distinct updateCtx() functions implementing one method each.</t>
        <t>]</t>
        <figure anchor="function-update">
          <name>Function for deriving a new OSCORE Security Context</name>
          <artwork align="center"><![CDATA[
updateCtx(X, N, CTX_IN) {

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

  X_cbor = bstr .cbor X // CBOR bstr wrapping of X
  N_cbor = bstr .cbor N // CBOR bstr wrapping of N
  X_N = bstr .cbor (X_cbor | N_cbor) // CBOR bstr wrapping of above

  oscore_key_length = < Size of CTX_IN.MasterSecret in bytes >

  if <the original Security Context was established through EDHOC> {
    // METHOD 1

    // Update the EDHOC key PRK_out, and use the
    // new one to update the EDHOC key PRK_exporter
    (new PRK_out, new PRK_exporter) = EDHOC-KeyUpdate(X_N)

    MSECRET_NEW = EDHOC-Exporter(0, h'', oscore_key_length)
      = EDHOC-KDF(new PRK_exporter, 0, h'', oscore_key_length)

    oscore_salt_length = < Size of CTX_IN.MasterSalt in bytes >

    MSALT_NEW = EDHOC-Exporter(1, h'', oscore_salt_length)
      = EDHOC-KDF(new PRK_exporter, 1, h'', oscore_salt_length)

  }
  else {
    // METHOD 2

    Label = "key update"

    MSECRET_NEW = HKDF-Expand-Label(CTX_IN.MasterSecret, Label,
                                    X_N, oscore_key_length)
                = HKDF-Expand(CTX_IN.MasterSecret, HkdfLabel,
                              oscore_key_length)

    MSALT_NEW = N;
  }

  < Derive CTX_OUT using MSECRET_NEW and MSALT_NEW,
    together with other parameters from CTX_IN >

  Return CTX_OUT;

}

Where HkdfLabel is defined as

struct {
    uint16 length = oscore_key_length;
    opaque label<7..255> = "oscore " + Label;
    opaque context<0..255> = X_N;
} HkdfLabel;
]]></artwork>
        </figure>
      </section>
      <section anchor="ssec-derive-ctx">
        <name>Key Update with Forward Secrecy</name>
        <t>This section defines the actual KUDOS procedure performed by two peers to update their OSCORE keying material. Before starting KUDOS, the two peers share the OSCORE Security Context CTX_OLD. Once successfully completed the KUDOS execution, the two peers agree on a newly established OSCORE Security Context CTX_NEW.</t>
        <t>The following specifically defines how KUDOS is run in its stateful FS mode achieving forward secrecy. That is, in the OSCORE Option value of all the exchanged KUDOS messages, the "No Forward Secrecy" bit is set to 0.</t>
        <t>In order to run KUDOS in FS mode, both peers have to be able to write in non-volatile memory the OSCORE Master Secret and OSCORE Master Salt from the newly derived Security Context CTX_NEW. If this is not the case, the two peers have to run KUDOS in its stateless no-FS mode (see <xref target="no-fs-mode"/>).</t>
        <t>When running KUDOS, each peer contributes by generating a fresh value N1 or N2, and providing it to the other peer. Furthermore, X1 and X2 are the value of the 'x' byte specified in the OSCORE Option of the first and second KUDOS message, respectively. As defined in <xref target="ssec-derive-ctx-client-init"/>, these values are used by the peers to build the input N and X to the updateCtx() function, in order to derive a new OSCORE Security Context. As for any new OSCORE Security Context, the Sender Sequence Number and the replay window are re-initialized accordingly (see <xref section="3.2.2" sectionFormat="of" target="RFC8613"/>).</t>
        <t>Once a peer has successfully derived the new OSCORE Security Context CTX_NEW, that peer MUST use CTX_NEW to protect outgoing non KUDOS messages.</t>
        <t>Also, that peer MUST 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"/>. 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 that 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>
        <t>Once a peer has successfully decrypted and verified an incoming message protected with CTX_NEW, that peer MUST discard the old Security Context CTX_OLD.</t>
        <t>KUDOS can be started by the client or the server, as defined in <xref target="ssec-derive-ctx-client-init"/> and <xref target="ssec-derive-ctx-server-init"/>, respectively. The following properties hold for both the client- and server-initiated version of KUDOS.</t>
        <ul spacing="normal">
          <li>The initiator always offers the fresh value N1.</li>
          <li>The responder always offers the fresh value N2</li>
          <li>The responder is always the first one deriving the new OSCORE Security Context CTX_NEW.</li>
          <li>The initiator is always the first one achieving key confirmation, hence the first one able to safely discard the old OSCORE Security Context CTX_OLD.</li>
          <li>Both the initiator and the responder use the same respective OSCORE Sender ID and Recipient ID. Also, they both preserve and use the same OSCORE ID Context from CTX_OLD.</li>
        </ul>
        <t>The length of the nonces N1 and N2 is application specific. The application needs to set the length of each nonce such that the probability of its value being repeated is negligible. To this end, each nonce is typically at least 8 bytes long.</t>
        <t>Once a peer acting as initiator (responder) has sent (received) the first KUDOS message, that peer MUST NOT send a non KUDOS message to the other peer, until having completed the key update process on its side. The initiator completes the key update process when receiving the second KUDOS message and successfully verifying it with the new OSCORE Security Context CTX_NEW. The responder completes the key update process when sending the second KUDOS message, as protected with the new OSCORE Security Context CTX_NEW.</t>
        <t>In the following sections, 'Comb(a,b)' denotes the byte concatenation of two CBOR byte strings, where the first one has value 'a' and the second one has value 'b'. That is, Comb(a,b) = bstr .cbor a | bstr .cbor b, where | denotes byte concatenation.</t>
        <section anchor="ssec-derive-ctx-client-init">
          <name>Client-Initiated Key Update</name>
          <t><xref target="fig-message-exchange-client-init"/> shows the KUDOS workflow with the client acting as initiator.</t>
          <figure anchor="fig-message-exchange-client-init">
            <name>Client-Initiated KUDOS Workflow</name>
            <artwork align="center"><![CDATA[
                   Client               Server
                   (initiator)          (responder)
                        |                    |
Generate N1             |                    |
                        |                    |
CTX_1 =                 |                    |
  updateCtx(X1, N1,     |                    |
            CTX_OLD)    |                    |
                        |                    |
                        |     Request #1     |
Protect with CTX_1      |------------------->|
                        | OSCORE Option:     | CTX_1 =
                        |   ...              |  updateCtx(X1, N1,
                        |   d flag: 1        |            CTX_OLD)
                        |   X1               |
                        |   Nonce: N1        | Verify with CTX_1
                        |   ...              |
                        |                    | Generate N2
                        |                    |
                        |                    | CTX_NEW =
                        |                    |  updateCtx(Comb(X1,X2),
                        |                    |            Comb(N1,N2),
                        |                    |            CTX_OLD)
                        |                    |
                        |     Response #1    |
                        |<-------------------| Protect with CTX_NEW
CTX_NEW =               | OSCORE Option:     |
 updateCtx(Comb(X1,X2), |   ...              |
           Comb(N1,N2), |                    |
              CTX_OLD)  |   d flag: 1        |
                        |   X2               |
Verify with CTX_NEW     |   Nonce: N2        |
                        |   ...              |
Discard CTX_OLD         |                    |
                        |                    |

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

                        |                    |
                        |     Request #2     |
Protect with CTX_NEW    |------------------->|
                        |                    | Verify with CTX_NEW
                        |                    |
                        |                    | Discard CTX_OLD
                        |                    |
                        |     Response #2    |
                        |<-------------------| Protect with CTX_NEW
Verify with CTX_NEW     |                    |
                        |                    |
]]></artwork>
          </figure>
          <t>First, the client generates a random value N1, and uses the nonce N = N1 and X = X1 together with the old Security Context CTX_OLD, in order to derive a temporary Security Context CTX_1.</t>
          <t>If the peers' original Security Context was derived through the EDHOC protocol and the updateCtx() function in <xref target="ssec-update-function"/> used METHOD 1 to derive CTX_1, then the client deletes the newly derived EDHOC keys PRK_out and PRK_exporter, which do not replace the old ones.</t>
          <t>Then, the client sends an OSCORE request to the server, protected with the Security Context CTX_1. In particular, the request has the 'd' flag bit set to 1, and specifies X1 as 'x' and N1 as 'nonce' (see <xref target="ssec-oscore-option-extensions"/>). After that, the client deletes CTX_1.</t>
          <t>Upon receiving the OSCORE request, the server retrieves the value N1 from the 'nonce' field of the request, the value X1 from the 'x' byte of the OSCORE Option, and provides the updateCtx() function with the input N = N1, X = X1 and the old Security Context CTX_OLD, in order to derive the temporary Security Context CTX_1.</t>
          <t><xref target="fig-kudos-x-n-example-mess-one"/> shows an example of how the two peers compute X and N provided as input to the updateCtx() function, and how they compute X_N within the updateCtx() function, when deriving CTX_1 (see <xref target="ssec-update-function"/>).</t>
          <figure anchor="fig-kudos-x-n-example-mess-one">
            <name>Example of X, N and X\_N computing for the first KUDOS message</name>
            <artwork><![CDATA[
   X1 and N1 expressed as raw values
   X1 = 0x80
   N1 = 0x018a278f7faab55a

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

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

   In updateCtx(), X_N is built from N_cbor and X_cbor
   X_N = 0x4b418048018a278f7faab55a (h'418048018a278f7faab55a')
]]></artwork>
          </figure>
          <t>If the peers' original Security Context was derived through the EDHOC protocol and the updateCtx() function in <xref target="ssec-update-function"/> used METHOD 1 to derive CTX_1, then the server deletes the newly derived EDHOC keys PRK_out and PRK_exporter, which do not replace the old ones.</t>
          <t>Then, the server verifies the request by using the Security Context CTX_1.</t>
          <t>After that, the server generates a random value N2, and uses N = Comb(N1, N2) and X = Comb(X1, X2) together with the old Security Context CTX_OLD, in order to derive the new Security Context CTX_NEW.</t>
          <t>An example of this nonce processing on the server with values for N1, X1, N2 and X2 is presented in <xref target="fig-kudos-x-n-example-mess-two"/>.</t>
          <figure anchor="fig-kudos-x-n-example-mess-two">
            <name>Example of X, N and X\_N computing for the second KUDOS message</name>
            <artwork><![CDATA[
   X1, X2, N1 and N2 expressed as raw values
   X1 = 0x80
   X2 = 0x80
   N1 = 0x018a278f7faab55a
   N2 = 0x25a8991cd700ac01

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

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

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

   In updateCtx(), X_N is built from N_cbor and X_cbor
   X_N = 0x581844418041805248018a278f7faab55a4825a8991cd700ac01
         (h'44418041805248018a278f7faab55a4825a8991cd700ac01')
]]></artwork>
          </figure>
          <t>Then, the server sends an OSCORE response to the client, protected with the new Security Context CTX_NEW. In particular, the response has the 'd' flag bit set to 1 and specifies N2 as 'nonce'. After that, the server deletes CTX_1.</t>
          <t>Upon receiving the OSCORE response, the client retrieves the value N2 from the 'nonce' field of the response, and the value X2 from the 'x' byte of the OSCORE Option. Since the client has received a response to an OSCORE request it made with the 'd' flag bit set to 1, the client provides the updateCtx() function with the input N = Comb(N1, N2), X = Comb(X1, X2) and the old Security Context CTX_OLD, in order to derive the new Security Context CTX_NEW. Finally, the client verifies the response by using the Security Context CTX_NEW and deletes the old Security Context CTX_OLD.</t>
          <t>If the peers' original Security Context was derived through the EDHOC protocol and the updateCtx() function in <xref target="ssec-update-function"/> used METHOD 1 to derive CTX_NEW, then the client replaces the old EDHOC keys PRK_out and PRK_exporter with the newly derived ones.</t>
          <t>Then, the client can send a new OSCORE request protected with the new Security Context CTX_NEW.</t>
          <t>When successfully verifying the request using the Security Context CTX_NEW, the server deletes the old Security Context CTX_OLD and can reply with an OSCORE response protected with the new Security Context CTX_NEW.</t>
          <t>If the peers' original Security Context was derived through the EDHOC protocol and the updateCtx() function in <xref target="ssec-update-function"/> used METHOD 1 to derive CTX_NEW, then the server replaces the old EDHOC keys PRK_out and PRK_exporter with the newly derived ones.</t>
          <t>From then on, the two peers can protect their message exchanges by using the new Security Context CTX_NEW.</t>
          <t>Note that the server achieves key confirmation only when receiving a message from the client as protected with the new Security Context CTX_NEW. If the server sends a non KUDOS request to the client protected with CTX_NEW before then, and the server receives a 4.01 (Unauthorized) error response as reply, the server SHOULD delete the new Security Context CTX_NEW and start a new client-initiated key update process, by taking the role of initiator as per <xref target="fig-message-exchange-client-init"/>.</t>
          <t>Also note that, if both peers reboot simultaneously, they will run the client-initiated version of KUDOS defined in this section. That is, one of the two peers implementing a CoAP client will send KUDOS Request #1 in <xref target="fig-message-exchange-client-init"/>.</t>
          <section anchor="avoiding-in-transit-requests-during-a-key-update">
            <name>Avoiding In-Transit Requests During a Key Update</name>
            <t>Before sending the KUDOS message Request #1 in <xref target="fig-message-exchange-client-init"/>, the client MUST ensure that it has no outstanding interactions with the server (see <xref section="4.7" sectionFormat="of" target="RFC7252"/>), with the exception of ongoing observations <xref target="RFC7641"/> with that server.</t>
            <t>If there are any, the client MUST NOT initiate 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 server.</t>
            <t>Later on, this prevents a non KUDOS response protected with the new Security Context CTX_NEW to cryptographically match 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>
          </section>
        </section>
        <section anchor="ssec-derive-ctx-server-init">
          <name>Server-Initiated Key Update</name>
          <t><xref target="fig-message-exchange-server-init"/> shows the KUDOS workflow with the server acting as initiator.</t>
          <figure anchor="fig-message-exchange-server-init">
            <name>Server-Initiated KUDOS Workflow</name>
            <artwork align="center"><![CDATA[
                      Client               Server
                   (responder)          (initiator)
                        |                    |
                        |     Request #1     |
Protect with CTX_OLD    |------------------->|
                        |                    | Verify with CTX_OLD
                        |                    |
                        |                    | Generate N1
                        |                    |
                        |                    | CTX_1 =
                        |                    |  updateCtx(X1, N1,
                        |                    |            CTX_OLD)
                        |                    |
                        |     Response #1    |
                        |<-------------------| Protect with CTX_1
CTX_1 =                 | OSCORE Option:     |
  updateCtx(X1, N1,     |   ...              |
            CTX_OLD)    |   d flag: 1        |
                        |   X1               |
Verify with CTX_1       |   Nonce: N1        |
                        |   ...              |
Generate N2             |                    |
                        |                    |
CTX_NEW =               |                    |
 updateCtx(Comb(X1,X2), |                    |
           Comb(N1,N2   |                    |
              CTX_OLD)  |                    |
                        |                    |
                        |     Request #2     |
Protect with CTX_NEW    |------------------->|
                        | OSCORE Option:     | CTX_NEW =
                        |   ...              |  updateCtx(Comb(X1,X2),
                        |                    |            Comb(N1,N2),
                        |   d flag: 1        |            CTX_OLD)
                        |   X2               |
                        |   Nonce: N1|N2     | Verify with CTX_NEW
                        |   ...              |
                        |                    | Discard CTX_OLD
                        |                    |

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

                        |     Response #2    |
                        |<-------------------| Protect with CTX_NEW
Verify with CTX_NEW     |                    |
                        |                    |
Discard CTX_OLD         |                    |
                        |                    |

]]></artwork>
          </figure>
          <t>First, the client sends a normal OSCORE request to the server, protected with the old Security Context CTX_OLD and with the 'd' flag bit set to 0.</t>
          <t>Upon receiving the OSCORE request and after having verified it with the old Security Context CTX_OLD as usual, the server generates a random value N1 and provides the updateCtx() function with the input N = N1, X = X1 and the old Security Context CTX_OLD, in order to derive the temporary Security Context CTX_1.</t>
          <t>If the peers' original Security Context was derived through the EDHOC protocol and the updateCtx() function in <xref target="ssec-update-function"/> used METHOD 1 to derive CTX_1, then the server deletes the newly derived EDHOC keys PRK_out and PRK_exporter, which do not replace the old ones.</t>
          <t>Then, the server sends an OSCORE response to the client, protected with the Security Context CTX_1. In particular, the response has the 'd' flag bit set to 1 and specifies N1 as 'nonce' (see <xref target="ssec-oscore-option-extensions"/>). After that, the server deletes CTX_1.</t>
          <t>Upon receiving the OSCORE response, the client retrieves the value N1 from the 'nonce' field of the response, the value X1 from the 'x' byte of the OSCORE Option, and provides the updateCtx() function with the input N = N1, X = X1 and the old Security Context CTX_OLD, in order to derive the temporary Security Context CTX_1.</t>
          <t>If the peers' original Security Context was derived through the EDHOC protocol and the updateCtx() function in <xref target="ssec-update-function"/> used METHOD 1 to derive CTX_1, then the client deletes the newly derived EDHOC keys PRK_out and PRK_exporter, which do not replace the old ones.</t>
          <t>Then, the client verifies the response by using the Security Context CTX_1.</t>
          <t>After that, the client generates a random value N2, and provides the updateCtx() function with the input N = Comb(N1, N2), X = Comb(X1, X2) and the old Security Context CTX_OLD, in order to derive the new Security Context CTX_NEW. Then, the client sends an OSCORE request to the server, protected with the new Security Context CTX_NEW. In particular, the request has the 'd' flag bit set to 1 and specifies N1 | N2 as 'nonce'. After that, the client deletes CTX_1.</t>
          <t>Upon receiving the OSCORE request, the server retrieves the value N1 | N2 from the request and the value X2 from the 'x' byte of the OSCORE Option. Then, the server verifies that: i) the value N1 is identical to the value N1 specified in a previous OSCORE response with the 'd' flag bit set to 1; and ii) the value N1 | N2 has not been received before in an OSCORE request with the 'd' flag bit set to 1.</t>
          <t>If the verification succeeds, the server provides the updateCtx() function with the input N = Comb(N1, N2), X = Comb(X1, X2) and the old Security Context CTX_OLD, in order to derive the new Security Context CTX_NEW. Finally, the server verifies the request by using the Security Context CTX_NEW and deletes the old Security Context CTX_OLD.</t>
          <t>If the peers' original Security Context was derived through the EDHOC protocol and the updateCtx() function in <xref target="ssec-update-function"/> used METHOD 1 to derive CTX_NEW, then the server replaces the old EDHOC keys PRK_out and PRK_exporter with the newly derived ones.</t>
          <t>After that, the server can send an OSCORE response protected with the new Security Context CTX_NEW.</t>
          <t>When successfully verifying the response using the Security Context CTX_NEW, the client deletes the old Security Context CTX_OLD.</t>
          <t>If the peers' original Security Context was derived through the EDHOC protocol and the updateCtx() function in <xref target="ssec-update-function"/> used METHOD 1 to derive CTX_NEW, then the client replaces the old EDHOC keys PRK_out and PRK_exporter with the newly derived ones.</t>
          <t>From then on, the two peers can protect their message exchanges by using the new Security Context CTX_NEW.</t>
          <t>Note that the client achieves key confirmation only when receiving a message from the server as protected with the new Security Context CTX_NEW. If the client sends a non KUDOS request to the server protected with CTX_NEW before then, and the client receives a 4.01 (Unauthorized) error response as reply, the client SHOULD delete the new Security Context CTX_NEW and start a new client-initiated key update process, by taking the role of initiator as per <xref target="fig-message-exchange-client-init"/> in <xref target="ssec-derive-ctx-client-init"/>.</t>
          <section anchor="avoiding-in-transit-requests-during-a-key-update-1">
            <name>Avoiding In-Transit Requests During a Key Update</name>
            <t>Before sending the KUDOS message Request #2 in <xref target="fig-message-exchange-server-init"/>, the client MUST ensure that it has no outstanding interactions with the server (see <xref section="4.7" sectionFormat="of" target="RFC7252"/>), with the exception of ongoing observations <xref target="RFC7641"/> with that server.</t>
            <t>If there are any, the client MUST NOT initiate 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 server.</t>
            <t>Later on, this prevents a non KUDOS response protected with the new Security Context CTX_NEW to cryptographically match 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>
          </section>
          <section anchor="preventing-deadlock-situations">
            <name>Preventing Deadlock Situations</name>
            <t>When the server-initiated version of KUDOS is used, the two peers risk to run into a deadlock, if all the following conditions hold.</t>
            <ul spacing="normal">
              <li>The client is a client-only device, i.e., it is not capable to act as CoAP server and thus does not listen for incoming requests.</li>
              <li>The server needs to execute KUDOS, which, due to the previous point, can only be performed in its server-initiated version as per <xref target="fig-message-exchange-server-init"/>. That is, the server has to wait for an incoming non KUDOS request, in order to initiate KUDOS by replying with the first KUDOS message as a response.</li>
              <li>The client sends only Non-confirmable CoAP requests to the server and does not expect responses sent back as reply, hence freeing up a request's Token value once the request is sent.</li>
            </ul>
            <t>In such a case, in order to avoid experiencing a deadlock situation where the server needs to execute KUDOS but cannot practically initiate it, a client-only device that supports KUDOS SHOULD intersperse Non-confirmable requests it sends to that server with confirmable requests.</t>
          </section>
        </section>
      </section>
      <section anchor="no-fs-mode">
        <name>Key Update with or without Forward Secrecy</name>
        <t>The FS mode of the KUDOS procedure defined in <xref target="ssec-derive-ctx"/> ensures forward secrecy of the OSCORE keying material. However, it requires peers executing KUDOS to preserve their state (e.g., across a device reboot), by writing information such as data from the newly derived OSCORE Security Context CTX_NEW in non-volatile memory.</t>
        <t>This can be problematic for devices that cannot dynamically write information to non-volatile memory. For example, some devices may support only a single writing in persistent memory when initial keying material is provided (e.g., at manufacturing or commissioning time), but no further writing after that. Therefore, these devices cannot perform a stateful key update procedure, and thus are not capable to run KUDOS in FS mode to achieve forward secrecy.</t>
        <t>In order to address these limitations, KUDOS can be run in its stateless no-FS mode, as defined in the following. This allows two peers to achieve the same results as when running KUDOS in FS mode (see <xref target="ssec-derive-ctx"/>), with the difference that no forward secrecy is achieved and no state information is required to be dynamically written in non-volatile memory.</t>
        <t>From a practical point of view, the two modes differ as to what exact OSCORE Master Secret and Master Salt are used as part of the OSCORE Security Context CTX_OLD provided as input to the updateCtx() function (see <xref target="ssec-update-function"/>).</t>
        <t>If either or both peers are not able to write in non-volatile memory the OSCORE Master Secret and OSCORE Master Salt from the newly derived Security Context CTX_NEW, then the two peers have to run KUDOS in no-FS mode.</t>
        <section anchor="handling-and-use-of-keying-material">
          <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.</t>
          <t>The following terms are used to refer to OSCORE keying material.</t>
          <ul spacing="normal">
            <li>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.</li>
            <li>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.</li>
          </ul>
          <t>Note that:</t>
          <ul spacing="normal">
            <li>A peer running KUDOS can have none of the pairs above associated with another peer, only one or both.</li>
            <li>A peer that has neither of the pairs above associated with another peer, cannot run KUDOS in any mode with that other peer.</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>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.</li>
                <li>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.</li>
              </ul>
            </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="I-D.ietf-lake-edhoc"/>), 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 SHOULD store Latest Master Secret and Latest Master Salt on disk.  </t>
              <t>
As an exception, this does not apply to possible temporary OSCORE Security Contexts used during a key update procedure, such as CTX_1 used during the KUDOS execution. That is, the OSCORE Master Secret and Master Salt from such temporary Security Contexts MUST NOT be stored on disk.</t>
            </li>
            <li>The peer MUST store Latest Master Secret and Latest Master Salt in volatile memory, thus making them available to OSCORE message processing and possible key update procedures.</li>
          </ul>
          <section anchor="actions-after-device-reboot">
            <name>Actions after Device Reboot</name>
            <t>Building on the above, after having experienced a reboot, a peer A checks whether it has stored on disk a pair P1 = (Latest Master Secret, Latest Master Salt) associated with any another peer B.</t>
            <ul spacing="normal">
              <li>
                <t>If a pair P1 is found, the peer A performs the following actions.  </t>
                <ul spacing="normal">
                  <li>The peer A loads the Latest Master Secret and Latest Master Salt to volatile memory, and uses them to derive an OSCORE Security Context CTX_OLD.</li>
                  <li>The peer A runs KUDOS with the other peer B, acting as initiator. If the peer A is a CAPABLE device, it stores on disk the Master Secret and Master Salt from the newly established OSCORE Security Context CTX_NEW, as Latest Master Secret and Latest Master Salt, respectively.</li>
                </ul>
              </li>
              <li>
                <t>If a pair P1 is not found, the peer A checks whether it has stored on disk a pair P2 = (Bootstrap Master Secret, Bootstrap Master Salt) associated with the other peer B.  </t>
                <ul spacing="normal">
                  <li>
                    <t>If a pair P2 is found, the peer A performs the following actions.      </t>
                    <ul spacing="normal">
                      <li>The peer A loads the Bootstrap Master Secret and Bootstrap Master Salt to volatile memory, and uses them to derive an OSCORE Security Context CTX_OLD.</li>
                      <li>If the peer A is a CAPABLE device, it stores on disk Bootstrap Master Secret and Bootstrap Master Salt as Latest Master Secret and Latest Master Salt, respectively. This supports the situation where A is a CAPABLE device and has never run KUDOS with the other peer B before.</li>
                      <li>The peer A runs KUDOS with the other peer B, acting as initiator. If the peer A is a CAPABLE device, it stores on disk the Master Secret and Master Salt from the newly established OSCORE Security Context CTX_NEW, as Latest Master Secret and Latest Master Salt, respectively.</li>
                    </ul>
                  </li>
                  <li>If a pair P2 is not found, the peer A has to use alternative ways to establish a first OSCORE Security Context CTX_NEW with the other peer B, e.g., by running the EDHOC protocol. After that, if A is a CAPABLE device, it stores on disk the OSCORE Master Secret and Master Salt from the newly established OSCORE Security Context CTX_NEW, as Latest Master Secret and Latest Master Salt, respectively.</li>
                </ul>
              </li>
            </ul>
          </section>
        </section>
        <section anchor="no-fs-signaling">
          <name>Selection of KUDOS Mode</name>
          <t>During a KUDOS execution, the two peers agree on whether to perform the key update procedure in FS mode or no-FS mode, by leveraging the "No Forward Secrecy" bit, 'p', in the 'x' byte of the OSCORE Option value of the KUDOS messages (see <xref target="ssec-oscore-option-extensions"/>). The 'p' bit practically determines what OSCORE Security Context to use as CTX_OLD during the KUDOS execution, consistently with the indicated mode.</t>
          <ul spacing="normal">
            <li>If the 'p' bit is set to 0 (FS mode), the updateCtx() function used to derive CTX_1 or CTX_NEW considers as input CTX_OLD the current OSCORE Security Context shared with the other peer as is. In particular, CTX_OLD includes Latest Master Secret as OSCORE Master Secret and Latest Master Salt as OSCORE Master Salt.</li>
            <li>If the 'p' bit is set to 1 (no-FS mode), the updateCtx() function used to derive CTX_1 or CTX_NEW considers as input CTX_OLD the current OSCORE Security Context shared with the other peer, with the following difference: Bootstrap Master Secret is used as OSCORE Master Secret and Bootstrap Master Salt is used as OSCORE Master Salt. That is, every execution of KUDOS in no-FS mode between these two peers considers the same pair (Master Secret, Master Salt) in the OSCORE Security Context CTX_OLD provided as input to the updateCtx() function, hence the impossibility to achieve forward secrecy.</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>If a peer A is not a CAPABLE device, it MUST run KUDOS only in no-FS mode. That is, when sending a KUDOS message, it MUST set to 1 the 'p' bit of the 'x' byte in the OSCORE Option value.</li>
            <li>
              <t>If a peer A is a CAPABLE device, it SHOULD run KUDOS only in FS mode and SHOULD NOT run KUDOS as initiator in no-FS mode. That is, when sending a KUDOS message, it SHOULD 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 not be a 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 MUST 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>The peer A is acting as responder and running KUDOS with another peer B without knowing its capabilities, and A receives a KUDOS message where the 'p' bit of the 'x' byte in the OSCORE Option value is set to 1.</li>
              </ul>
            </li>
            <li>
              <t>If the 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 MUST NOT run KUDOS with the peer B in no-FS mode. This also means that, if the peer A acts as responder when running KUDOS with the peer B, the peer A MUST terminate the KUDOS execution if it receives a KUDOS message from the peer B where the 'p' bit of the 'x' byte in the OSCORE Option value is set to 1.  </t>
              <t>
Note that, if the peer A is a CAPABLE device, it is able to store such information about the other peer B on disk and it MUST do so. This ensures that the peer A will perform every execution of KUDOS with the peer B in FS mode. In turn, this prevents a possible downgrading attack, aimed at making A believe that B is not a CAPABLE device, and thus to run KUDOS in no-FS mode although the FS mode can actually be used by both peers.</t>
            </li>
          </ul>
          <t>Within the limitations above, two peers running KUDOS generate the new OSCORE Security Context CTX_NEW according to the mode indicated per the bit 'p' set by the responder in the second KUDOS message.</t>
          <t>If, after having received the first KUDOS message, the responder can continue performing KUDOS, the bit 'p' in the reply message has the same value as in the bit 'p' set by the initiator, unless the value is 0 and the responder is not a CAPABLE device. More specifically:</t>
          <ul spacing="normal">
            <li>If both peers are CAPABLE devices, they will run KUDOS in FS mode. That is, both initiator and responder sets the 'p' bit to 0 in the respective sent KUDOS message.</li>
            <li>If both peers are not CAPABLE devices or only the peer acting as initiator is not a CAPABLE device, they will run KUDOS in no-FS mode. That is, both initiator and responder sets the 'p' bit to 1 in the respective sent KUDOS message.</li>
            <li>If only the peer acting as initiator is a CAPABLE device and it has knowledge of the other peer being a not CAPABLE device, they will run KUDOS in no-FS mode. That is, both initiator and responder sets the 'p' bit to 1 in the respective sent KUDOS message.</li>
            <li>
              <t>If only the peer acting as initiator is a CAPABLE device and it has no knowledge of the other peer being a not CAPABLE device, they will not run KUDOS in FS mode and will rather set to ground for possibly retrying in no-FS mode. In particular, the initiator sets the 'p' bit of its sent KUDOS message to 0. Then:  </t>
              <ul spacing="normal">
                <li>
                  <t>If the responder is a server, it MUST reply with a 5.03 (Service Unavailable) error response. The response MUST be protected with the newly derived OSCORE Security Context CTX_NEW. The diagnostic payload MAY provide additional information. In the error response, the 'p' bit MUST be set to 1.      </t>
                  <t>
When receiving the error response, the initiator learns that the responder is not a CAPABLE device (and hence not able to run KUDOS in FS mode). The initiator MAY try running KUDOS again. If it does so, the initiator MUST set the 'p' bit to 1, when sending a new request as first KUDOS message.</t>
                </li>
                <li>
                  <t>If the responder is a client, it sends to the initiator the second KUDOS message as a new request, which MUST be protected with the newly derived OSCORE Security Context CTX_NEW. In the newly sent request, the 'p' bit MUST be set to 1.      </t>
                  <t>
When receiving the new request above (i.e., with the 'p' bit set to 1 as a follow-up to the previous KUDOS response having the 'p' bit set to 0), the initiator learns that the responder is not a CAPABLE device (and hence not able to run KUDOS in FS mode).</t>
                </li>
              </ul>
            </li>
          </ul>
          <t>In either case, both KUDOS peers delete the OSCORE Security Contexts CTX_1 and CTX_NEW.</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, i.e., 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 MUST terminate the ongoing observations that they have with one another, just as defined in <xref target="ssec-derive-ctx"/>.</t>
        <t>[</t>
        <t>NOTE: While a dedicated signaling would have to be introduced, this rationale may be of more general applicability, i.e., in case an update of the OSCORE keying material is performed through a different means than KUDOS.</t>
        <t>]</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 MUST NOT simply forget about an ongoing observation if not interested in it anymore. Instead, the client MUST 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 MUST NOT consider the observation terminated. The client MAY try again to terminate the observation by sending a new cancellation request.</t>
          <t>In case a peer A performs a KUDOS execution with another peer B, and A has ongoing observations with B that it is interested to preserve beyond the key update, then A can explicitly indicate its interest to do so. To this end, the peer A sets to 1 the bit "Preserve Observations", 'b', in the 'x' byte of the OSCORE Option value (see <xref target="ssec-oscore-option-extensions"/>), in the KUDOS message it sends to the other peer B.</t>
          <t>If a peer acting as responder receives the first KUDOS message with the bit 'b' set to 0, then the peer MUST set to 0 the bit 'b' in the KUDOS message it sends as follow-up, regardless of its wish to preserve ongoing observations with the other peer.</t>
          <t>If a peer acting as initiator has sent the first KUDOS message with the bit 'b' set to 0, the peer MUST ignore the bit 'b' in the follow-up KUDOS message that it receives from the other peer.</t>
          <t>After successfully completing the KUDOS execution (i.e., after having successfully derived the new OSCORE Security Context CTX_NEW), both peers have expressed their interest in preserving their common ongoing observations if and only if the bit 'b' was set to 1 in both the exchanged KUDOS messages. In such a case, each peer X performs the following actions.</t>
          <ol spacing="normal" type="1"><li>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.</li>
            <li>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.</li>
            <li>The peer X determines the value PIV* as the highest OSCORE Partial IV value among those considered at step 2.</li>
            <li>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.</li>
          </ol>
          <t>As a result, each peer X will "jump" beyond the OSCORE Partial IV (PIV) values that are occupied and in use for ongoing observations with the other peer where X acts as client.</t>
          <t>Note that, each time it runs KUDOS, a peer must determine if it wishes to preserve ongoing observations with the other peer or not, before sending its KUDOS message.</t>
          <t>To this end, the peer should also assess the new value that PIV* would take after a successful completion of KUDOS, in case ongoing observations with the other peer are going to be preserved. If the peer considers such a new value of PIV* to be too close to 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 MAY define policies that allow a peer to also temporarily keep the old Security Context CTX_OLD, rather than simply overwriting it to become CTX_NEW. This allows the peer to decrypt late, still on-the-fly incoming messages protected with CTX_OLD.</t>
        <t>When enforcing such policies, the following applies.</t>
        <ul spacing="normal">
          <li>Outgoing non KUDOS messages MUST be protected by using only CTX_NEW.</li>
          <li>Incoming non KUDOS messages MUST first be attempted to decrypt by using CTX_NEW. If decryption fails, a second attempt can use CTX_OLD.</li>
          <li>When an amount of time defined by the policy has elapsed since the establishment of CTX_NEW, the peer deletes CTX_OLD.</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>
    </section>
    <section anchor="update-oscore-ids">
      <name>Update of OSCORE Sender/Recipient IDs</name>
      <t>This section defines a procedure that two peers can perform, in order to update the OSCORE Sender/Recipient IDs that they use in their shared OSCORE Security Context.</t>
      <t>This procedure can be initiated by either peer. In particular, the client or the server may start it by sending the first OSCORE IDs update message. When sending an OSCORE IDs update message, a peer provides its new intended OSCORE Recipient ID to the other peer.</t>
      <t>Furthermore, this procedure can be executed stand-alone, or instead seamlessly integrated in an execution of KUDOS (see <xref target="sec-rekeying-method"/>) using its FS mode or no-FS mode (see <xref target="no-fs-mode"/>).</t>
      <ul spacing="normal">
        <li>
          <t>In the former stand-alone case, updating the OSCORE Sender/Recipient IDs effectively results in updating part of the current OSCORE Security Context.  </t>
          <t>
That is, both peers derive a new Sender Key, Recipient Key and Common IV, as defined in <xref section="3.2" sectionFormat="of" target="RFC8613"/>. Also, both peer re-initialize the Sender Sequence Number and the replay window accordingly, as defined in <xref section="3.2.2" sectionFormat="of" target="RFC8613"/>. Since the same Master Secret is preserved, forward secrecy is not achieved.  </t>
          <t>
As defined in <xref target="id-update-additional-actions"/>, the two peers must take additional actions to ensure a safe execution of the OSCORE IDs update procedure.</t>
        </li>
        <li>In the latter integrated case, the KUDOS initiator (responder) also acts as initiator (responder) for the OSCORE IDs update procedure.</li>
      </ul>
      <t>[TODO: think about the possibility of safely preserving ongoing observations following an update of OSCORE IDs alone.]</t>
      <section anchor="sec-recipient-id-option">
        <name>The Recipient-ID Option</name>
        <t>The Recipient ID Option defined in this section has the properties summarized in <xref target="fig-recipient-id-option"/>, which extends Table 4 of <xref target="RFC7252"/>. That is, the option is elective, safe to forward, part of the cache key and non repeatable.</t>
        <figure anchor="fig-recipient-id-option">
          <name>The Recipient-ID Option.</name>
          <artwork align="center"><![CDATA[
+------+---+---+---+---+--------------+--------+--------+---------+
| No.  | C | U | N | R | Name         | Format | Length | Default |
+------+---+---+---+---+--------------+--------+--------+---------+
|      |   |   |   |   |              |        |        |         |
| TBD1 |   |   |   |   | Recipient-ID | opaque |  0-7   | (none)  |
|      |   |   |   |   |              |        |        |         |
+------+---+---+---+---+--------------+--------+--------+---------+
         C=Critical, U=Unsafe, N=NoCacheKey, R=Repeatable
]]></artwork>
        </figure>
        <t>This document particularly defines how this option is used in messages protected with OSCORE. That is, when the option is included in an outgoing message, the option value specifies the new OSCORE Recipient ID that the sender endpoint intends to use with the other endpoint sharing the OSCORE Security Context.</t>
        <t>The Recipient-ID Option is of class E in terms of OSCORE processing (see <xref section="4.1" sectionFormat="of" target="RFC8613"/>).</t>
        <section anchor="example-client-initiated-id-update">
          <name>Client-Initiated OSCORE IDs Update</name>
          <t><xref target="fig-id-update-client-init"/> shows the stand-alone OSCORE IDs update workflow, with the client acting as initiator.</t>
          <t>On each peer, SID and RID denote the OSCORE Sender ID and Recipient ID of that peer, respectively.</t>
          <figure anchor="fig-id-update-client-init">
            <name>Client-Initiated OSCORE IDs Update Workflow</name>
            <artwork align="center"><![CDATA[
          Client                             Server
       (initiator)                         (responder)
            |                                   |
CTX_A {     |                                   | CTX_A {
 SID = 1    |                                   |  SID = 0
 RID = 0    |                                   |  RID = 1
}           |                                   | }
            |                                   |
            |            Request #1             |
Protect     |---------------------------------->|
with CTX_A  | OSCORE Option: ..., kid:1         | Verify
            | Encrypted_Payload {               | with CTX_A
            |    ...                            |
            |    RecipientID: 42                |
            |    ...                            |
            |    Application Payload            |
            | }                                 |
            |                                   |

          // When embedded in KUDOS, CTX_1 is CTX_A,
          // and there cannot be application payload.

            |                                   |
            |            Response #1            |
            |<----------------------------------| Protect
Verify      | OSCORE Option: ...                | with CTX_A
with CTX_A  | Encrypted_Payload {               |
            |    ...                            |
            |    Recipient-ID: 78               |
            |    ...                            |
            |    Application Payload            |
            | }                                 |
            |                                   |

           // When embedded in KUDOS, this message
           // is protected using CTX_NEW, and there
           // cannot be application payload.
           //
           // Then, CTX_B builds on CTX_NEW by updating
           // the new Sender/Recipient IDs

            |                                   |
CTX_B {     |                                   | CTX_B {
 SID = 78   |                                   |  SID = 42
 RID = 42   |                                   |  RID = 78
}           |                                   | }
            |                                   |
            |            Request #2             |
Protect     |---------------------------------->|
with CTX_B  | OSCORE Option: ..., kid:78        | Verify
            | Encrypted_Payload {               | with  CTX_B
            |    ...                            |
            |    Application Payload            |
            | }                                 |
            |                                   |
            |            Response #2            |
            |<----------------------------------| Protect
Verify      | OSCORE Option: ...                | with CTX_B
with CTX_B  | Encrypted_Payload {               |
            |    ...                            |
            |    Application Payload            |
            | }                                 |
            |                                   |
Discard     |                                   |
CTX_A       |                                   |
            |                                   |
            |            Request #3             |
Protect     |---------------------------------->|
with CTX_B  | OSCORE Option: ..., kid:78        | Verify
            | Encrypted_Payload {               | with CTX_B
            |    ...                            |
            |    Application Payload            |
            | }                                 |
            |                                   | Discard
            |                                   | CTX_A
            |                                   |
            |            Response #3            |
            |<----------------------------------| Protect
Verify      | OSCORE Option: ...                | with CTX_B
with CTX_B  | Encrypted_Payload {               |
            |    ...                            |
            |    Application Payload            |
            | }                                 |
            |                                   |
]]></artwork>
          </figure>
          <t>[TODO: discuss the example]</t>
        </section>
        <section anchor="example-server-initiated-id-update">
          <name>Server-Initiated OSCORE IDs Update</name>
          <t><xref target="fig-id-update-server-init"/> shows the stand-alone OSCORE IDs update workflow, with the server acting as initiator.</t>
          <t>On each peer, SID and RID denote the OSCORE Sender ID and Recipient ID of that peer, respectively.</t>
          <figure anchor="fig-id-update-server-init">
            <name>Server-Initiated OSCORE IDs Update Workflow</name>
            <artwork align="center"><![CDATA[
          Client                             Server
       (responder)                         (initiator)
            |                                   |
CTX_A {     |                                   | CTX_A {
 SID = 1    |                                   |  SID = 0
 RID = 0    |                                   |  RID = 1
}           |                                   | }
            |                                   |
            |            Request #1             |
Protect     |---------------------------------->|
with CTX_A  | OSCORE Option: ..., kid:1         | Verify
            | Encrypted_Payload {               | with CTX_A
            |    ...                            |
            |    Application Payload            |
            | }                                 |
            |                                   |

          // When (to be) embedded in KUDOS,
          // CTX_OLD is CTX_A

            |                                   |
            |            Response #1            |
            |<----------------------------------| Protect
Verify      | OSCORE Option: ...                | with CTX_A
with CTX_A  | Encrypted_Payload {               |
            |    ...                            |
            |    Recipient-ID: 78               |
            |    Application Payload            |
            | }                                 |

          // When embedded in KUDOS, this message is
          // protected with CTX_1 instead, and
          // there cannot be application payload.

            |                                   |
CTX_A {     |                                   | CTX_A {
 SID = 1    |                                   |  SID = 0
 RID = 0    |                                   |  RID = 1
}           |                                   | }
            |                                   |
            |            Request #2             |
Protect     |---------------------------------->|
with CTX_A  | OSCORE Option: ..., kid:1         | Verify
            | Encrypted_Payload {               | with CTX_A
            |    ...                            |
            |    Recipient-ID: 42               |
            |    Application Payload            |
            | }                                 |
            |                                   |

          // When embedded in KUDOS, this message is
          // protected with CTX_NEW instead, and
          // there cannot be application payload.

            |                                   |
            |            Response #2            |
            |<----------------------------------| Protect
Verify      | OSCORE Option: ...                | with CTX_A
with CTX_A  | Encrypted_Payload {               |
            |    ...                            |
            |    Application Payload            |
            | }                                 |
            |                                   |

          // When embedded in KUDOS, this message is
          // protected with CTX_NEW instead, and
          // there cannot be application payload.

            |                                   |
CTX_B {     |                                   | CTX_B {
 SID = 78   |                                   |  SID = 42
 RID = 42   |                                   |  RID = 78
}           |                                   | }
            |                                   |
            |            Request #3             |
Protect     |---------------------------------->|
with CTX_B  | OSCORE Option: ..., kid:78        | Verify
            | Encrypted_Payload {               | with CTX_B
            |    ...                            |
            |    Application Payload            |
            | }                                 |
            |                                   |
            |            Response #3            |
            |<----------------------------------| Protect
Verify      | OSCORE Option: ...                | with CTX_B
with CTX_B  | Encrypted_Payload {               |
            |    ...                            |
            |    Application Payload            |
            | }                                 |
            |                                   |
Discard     |                                   |
CTX_A       |                                   |
            |                                   |
            |            Request #4             |
Protect     |---------------------------------->|
with CTX_B  | OSCORE Option: ..., kid:78        | Verify
            | Encrypted_Payload {               | with CTX_B
            |    ...                            |
            |    Application Payload            |
            | }                                 |
            |                                   |
            |                                   | Discard
            |                                   | CTX_A
            |                                   |
            |            Response #4            |
            |<----------------------------------| Protect
Verify      | OSCORE Option: ...                | with CTX_B
with CTX_B  | Encrypted_Payload {               |
            |    ...                            |
            |    Application Payload            |
            | }                                 |
            |                                   |
]]></artwork>
          </figure>
          <t>[TODO: discuss the example]</t>
        </section>
        <section anchor="id-update-additional-actions">
          <name>Additional Actions for Stand-Alone Execution</name>
          <t>After having experienced a loss of state, a peer MUST NOT participate in a stand-alone OSCORE IDs update procedure with another peer, until having performed a full-fledged establishment/renewal of an OSCORE Security Context with the other peer (e.g., by running KUDOS or the EDHOC protocol <xref target="I-D.ietf-lake-edhoc"/>).</t>
          <t>More precisely, a peer has experienced a loss of state if it cannot access the latest snapshot of the latest OSCORE Security Context CTX_OLD or the whole set of OSCORE Sender/Recipient IDs that have been used with the triplet (Master Secret, Master Salt, ID Context) of CTX_OLD. This can happen, for instance, after a device reboot.</t>
          <t>Furthermore, when participating in a stand-alone OSCORE IDs update procedure, a peer performs the following additional steps.</t>
          <ul spacing="normal">
            <li>When sending an OSCORE IDs update message, the peer MUST specify its new intended OSCORE Recipient ID as value of the Recipient-ID Option only if such a Recipient ID is not only available (see <xref section="3.3" sectionFormat="of" target="RFC8613"/>, but it has also never been used as Recipient ID with the current triplet (Master Secret, Master Salt, ID Context).</li>
            <li>When receiving an OSCORE IDs update message, the peer MUST abort the procedure if it has already used the identifier specified in the Recipient-ID Option as its own Sender ID with current triplet (Master Secret, Master Salt, ID Context).</li>
          </ul>
          <t>In order to fulfill the conditions above, a peer has to keep track of the OSCORE Sender/Recipient IDs that it has used with the current triplet (Master Secret, Master Salt, ID Context) since the latest update of OSCORE Master Secret (e.g, performed by running KUDOS).</t>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document mainly covers security considerations about using AEAD keys in OSCORE and their usage limits, in addition to the security considerations of <xref target="RFC8613"/>.</t>
      <t>Depending on the specific key update procedure used to establish a new OSCORE Security Context, the related security considerations also apply.</t>
      <t>[TODO: Add more considerations.]</t>
    </section>
    <section anchor="iana-considerations">
      <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-coap-options">
        <name>CoAP Option Numbers Registry</name>
        <t>IANA is asked to enter the following option number to the "CoAP Option Numbers" registry within the "CoRE Parameters" registry group.</t>
        <artwork align="center"><![CDATA[
+--------+--------------+------------+
| Number |     Name     | Reference  |
+--------+--------------+------------+
|  TBD   | Recipient-ID | [RFC-XXXX] |
+--------+--------------+------------+
]]></artwork>
        <t>The number suggested to IANA for the Recipient-ID Option is 24.</t>
      </section>
      <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>
        <artwork><![CDATA[
+----------+------------------+------------------------+------------+
| Bit      |       Name       |      Description       | Reference  |
| Position |                  |                        |            |
+----------+------------------+------------------------+------------+
|    1     | Extension-1 Flag | Set to 1 if the OSCORE | [RFC-XXXX] |
|          |                  | Option specifies a     |            |
|          |                  | second byte of OSCORE  |            |
|          |                  | flag bits              |            |
+----------+------------------+------------------------+------------+
|    15    |  Nonce Flag      | Set to 1 if the        | [RFC-XXXX] |
|          |                  | compressed COSE object |            |
|          |                  | contains 'nonce'       |            |
+----------+------------------+------------------------+------------+
]]></artwork>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <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="RFC7252" target="https://www.rfc-editor.org/info/rfc7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby">
              <organization/>
            </author>
            <author fullname="K. Hartke" initials="K." surname="Hartke">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <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" target="https://www.rfc-editor.org/info/rfc7641">
          <front>
            <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
            <author fullname="K. Hartke" initials="K." surname="Hartke">
              <organization/>
            </author>
            <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="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <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>
        <reference anchor="RFC8613" target="https://www.rfc-editor.org/info/rfc8613">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="G. Selander" initials="G." surname="Selander">
              <organization/>
            </author>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson">
              <organization/>
            </author>
            <author fullname="F. Palombini" initials="F." surname="Palombini">
              <organization/>
            </author>
            <author fullname="L. Seitz" initials="L." surname="Seitz">
              <organization/>
            </author>
            <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" target="https://www.rfc-editor.org/info/rfc8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman">
              <organization/>
            </author>
            <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="I-D.ietf-lake-edhoc" target="https://www.ietf.org/archive/id/draft-ietf-lake-edhoc-15.txt">
          <front>
            <title>Ephemeral Diffie-Hellman Over COSE (EDHOC)</title>
            <author fullname="Göran Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="John Preuß Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Francesca Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="10" month="July" year="2022"/>
            <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
   OSCORE security context.  By reusing COSE for cryptography, CBOR for
   encoding, and CoAP for transport, the additional code size can be
   kept very low.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-lake-edhoc-15"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <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="RFC7519" target="https://www.rfc-editor.org/info/rfc7519">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones">
              <organization/>
            </author>
            <author fullname="J. Bradley" initials="J." surname="Bradley">
              <organization/>
            </author>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura">
              <organization/>
            </author>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties.  The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7519"/>
          <seriesInfo name="DOI" value="10.17487/RFC7519"/>
        </reference>
        <reference anchor="RFC7554" target="https://www.rfc-editor.org/info/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">
              <organization/>
            </author>
            <author fullname="M. Palattella" initials="M." surname="Palattella">
              <organization/>
            </author>
            <author fullname="L. Grieco" initials="L." surname="Grieco">
              <organization/>
            </author>
            <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" target="https://www.rfc-editor.org/info/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">
              <organization/>
            </author>
            <author fullname="K. Pister" initials="K." surname="Pister">
              <organization/>
            </author>
            <author fullname="T. Watteyne" initials="T." surname="Watteyne">
              <organization/>
            </author>
            <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" target="https://www.rfc-editor.org/info/rfc9031">
          <front>
            <title>Constrained Join Protocol (CoJP) for 6TiSCH</title>
            <author fullname="M. Vučinić" initials="M." role="editor" surname="Vučinić">
              <organization/>
            </author>
            <author fullname="J. Simon" initials="J." surname="Simon">
              <organization/>
            </author>
            <author fullname="K. Pister" initials="K." surname="Pister">
              <organization/>
            </author>
            <author fullname="M. Richardson" initials="M." surname="Richardson">
              <organization/>
            </author>
            <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="I-D.ietf-ace-oauth-authz" target="https://www.ietf.org/archive/id/draft-ietf-ace-oauth-authz-46.txt">
          <front>
            <title>Authentication and Authorization for Constrained Environments (ACE) using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author fullname="Ludwig Seitz">
              <organization>Combitech</organization>
            </author>
            <author fullname="Goeran Selander">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Erik Wahlstroem">
	 </author>
            <author fullname="Samuel Erdtman">
              <organization>Spotify AB</organization>
            </author>
            <author fullname="Hannes Tschofenig">
              <organization>Arm Ltd.</organization>
            </author>
            <date day="8" month="November" year="2021"/>
            <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="Internet-Draft" value="draft-ietf-ace-oauth-authz-46"/>
        </reference>
        <reference anchor="I-D.ietf-ace-oscore-profile" target="https://www.ietf.org/archive/id/draft-ietf-ace-oscore-profile-19.txt">
          <front>
            <title>OSCORE Profile of the Authentication and Authorization for Constrained Environments Framework</title>
            <author fullname="Francesca Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Ludwig Seitz">
              <organization>Combitech</organization>
            </author>
            <author fullname="Göran Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Martin Gunnarsson">
              <organization>RISE</organization>
            </author>
            <date day="6" month="May" year="2021"/>
            <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="Internet-Draft" value="draft-ietf-ace-oscore-profile-19"/>
        </reference>
        <reference anchor="I-D.irtf-cfrg-aead-limits" target="https://www.ietf.org/archive/id/draft-irtf-cfrg-aead-limits-04.txt">
          <front>
            <title>Usage Limits on AEAD Algorithms</title>
            <author fullname="Felix Günther">
              <organization>ETH Zurich</organization>
            </author>
            <author fullname="Martin Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Christopher A. Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="7" month="March" year="2022"/>
            <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-04"/>
        </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="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>
    <section anchor="aead-aes-128-ccm-8-details">
      <name>Detailed considerations for AEAD_AES_128_CCM_8</name>
      <t>For the AEAD_AES_128_CCM_8 algorithm when used as AEAD Algorithm for OSCORE, larger IA and CA values are achieved, depending on the value of 'q', 'v' and 'l'. <xref target="algorithm-limits-ccm8"/> shows the resulting IA and CA probabilities enjoyed by AEAD_AES_128_CCM_8, when taking different values of 'q', 'v' and 'l' as input to the formulas defined in <xref target="I-D.irtf-cfrg-aead-limits"/>.</t>
      <t>As shown in <xref target="algorithm-limits-ccm8"/>, it is especially possible to achieve the lowest IA = 2^-50 and a good CA = 2^-70 by considering the largest possible value of the (q, v, l) triplet equal to (2^20, 2^10, 2^8), while still keeping a good security level. Note that the value of 'l' does not impact on IA, while CA displays good values for every considered value of 'l'.</t>
      <figure anchor="algorithm-limits-ccm8">
        <name>Probabilities for AEAD_AES_128_CCM_8 based on chosen q, v and l values.</name>
        <artwork align="center"><![CDATA[
+-----------------------+----------------+----------------+
| 'q', 'v' and 'l'      | IA probability | CA probability |
|-----------------------+----------------+----------------|
| q=2^20, v=2^20, l=2^8 | 2^-44          | 2^-70          |
| q=2^15, v=2^20, l=2^8 | 2^-44          | 2^-80          |
| q=2^10, v=2^20, l=2^8 | 2^-44          | 2^-90          |
| q=2^20, v=2^15, l=2^8 | 2^-49          | 2^-70          |
| q=2^15, v=2^15, l=2^8 | 2^-49          | 2^-80          |
| q=2^10, v=2^15, l=2^8 | 2^-49          | 2^-90          |
| q=2^20, v=2^14, l=2^8 | 2^-50          | 2^-70          |
| q=2^15, v=2^14, l=2^8 | 2^-50          | 2^-80          |
| q=2^10, v=2^14, l=2^8 | 2^-50          | 2^-90          |
| q=2^20, v=2^10, l=2^8 | 2^-54          | 2^-70          |
| q=2^15, v=2^10, l=2^8 | 2^-54          | 2^-80          |
| q=2^10, v=2^10, l=2^8 | 2^-54          | 2^-90          |
|-----------------------+----------------+----------------|
| q=2^20, v=2^20, l=2^6 | 2^-44          | 2^-74          |
| q=2^15, v=2^20, l=2^6 | 2^-44          | 2^-84          |
| q=2^10, v=2^20, l=2^6 | 2^-44          | 2^-94          |
| q=2^20, v=2^15, l=2^6 | 2^-49          | 2^-74          |
| q=2^15, v=2^15, l=2^6 | 2^-49          | 2^-84          |
| q=2^10, v=2^15, l=2^6 | 2^-49          | 2^-94          |
| q=2^20, v=2^14, l=2^6 | 2^-50          | 2^-74          |
| q=2^15, v=2^14, l=2^6 | 2^-50          | 2^-84          |
| q=2^10, v=2^14, l=2^6 | 2^-50          | 2^-94          |
| q=2^20, v=2^10, l=2^6 | 2^-54          | 2^-74          |
| q=2^15, v=2^10, l=2^6 | 2^-54          | 2^-84          |
| q=2^10, v=2^10, l=2^6 | 2^-54          | 2^-94          |
+-----------------------+----------------+----------------+
]]></artwork>
      </figure>
    </section>
    <section anchor="estimation-count-q">
      <name>Estimation of 'count_q'</name>
      <t>This section defines a method to compute an estimate of the counter 'count_q' (see <xref target="sender-context"/>), hence not requiring a peer to store it in its own Sender Context.</t>
      <t>This method relies on the fact that, at any point in time, a peer has performed <em>at most</em> ENC = (SSN + SSN*) encryptions using its own Sender Key, where:</t>
      <ul spacing="normal">
        <li>SSN is the current value of this peer's Sender Sequence Number.</li>
        <li>SSN* is the current value of other peer's Sender Sequence Number. That is, SSN* is an overestimation of the responses without Partial IV that this peer has sent.</li>
      </ul>
      <t>Thus, when protecting an outgoing message (see <xref target="protecting-req-resp"/>), the peer aborts the message processing if the estimated est_q &gt; limit_q, where est_q = (SSN + X) and X is determined as follows.</t>
      <ul spacing="normal">
        <li>If the outgoing message is a response, X is the Partial IV specified in the corresponding request that this peer is responding to. Note that X &lt; SSN* always holds.</li>
        <li>If the outgoing message is a request, X is the highest Partial IV value marked as received in this peer's Replay Window plus 1, or 0 if it has not accepted any protected message from the other peer yet. That is, X is the highest Partial IV specified in message received from the other peer, i.e., the highest seen Sender Sequence Number of the other peer. Note that, also in this case, X &lt; SSN* always holds.</li>
      </ul>
    </section>
    <section anchor="sec-document-updates">
      <name>Document Updates</name>
      <t>RFC EDITOR: PLEASE REMOVE THIS SECTION.</t>
      <section anchor="sec-01-02">
        <name>Version -01 to -02</name>
        <ul spacing="normal">
          <li>Extended terminology.</li>
          <li>Moved procedure for preserving observations across key updates to main body.</li>
          <li>Moved procedure to update OSCORE Sender/Recipient IDs to main body.</li>
          <li>Moved key update without forward secrecy section to main body.</li>
          <li>Define signaling bits present in the 'x' byte.</li>
          <li>Modifications and alignment of updateCtx() with EDHOC.</li>
          <li>Rules for deletion of old EDHOC keys PRK_out and PRK_exporter.</li>
          <li>Describe CBOR wrapping of involved nonces with examples.</li>
          <li>Renamed 'id detail' to 'nonce'.</li>
          <li>Editorial improvements.</li>
        </ul>
      </section>
      <section anchor="sec-00-01">
        <name>Version -00 to -01</name>
        <ul spacing="normal">
          <li>Recommendation on limits for CCM_8. Details in Appendix.</li>
          <li>Improved message processing, also covering corner cases.</li>
          <li>Example of method to estimate and not store 'count_q'.</li>
          <li>Added procedure to update OSCORE Sender/Recipient IDs.</li>
          <li>Added method for preserving observations across key updates.</li>
          <li>Added key update without forward secrecy.</li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank <contact fullname="Christian Amsüss"/>, <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 VINNOVA and the Celtic-Next project CRITISEC; and by the H2020 project SIFIS-Home (Grant agreement 952652).</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
zsMHO1u9tf8Nz522PVGAAQA=

-->

</rfc>
