<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.14 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-oscore-key-update-03" category="std" consensus="true" submissionType="IETF" updates="8613" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.2 -->
  <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-03"/>
    <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="October" day="24"/>
    <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. Accordingly, it updates the use of the OSCORE flag bits in the CoAP OSCORE Option. 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>With reference to the "OSCORE Flag Bits" registry defined in <xref section="13.7" sectionFormat="of" target="RFC8613"/> as part of the "Constrained RESTful Environments (CoRE) Parameters" registry group, it updates the entries with Bit Position 0 and 1 (see <xref target="sec-iana"/>), both originally marked as "Reserved". That is, it defines and registers the usage of the OSCORE flag bit with Bit Position 0, as the one intended to expand the space for the OSCORE flag bits in the OSCORE Option (see <xref target="ssec-oscore-option-extensions"/>). Also, it marks the bit with Bit Position of 1 as "Unassigned".</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-req-resp">
          <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>Two peers communicating using OSCORE may choose to renew their shared keying information by establishing a new OSCORE Security Context for a variety of reasons. A particular reason is approaching the limits set for key usage defined in <xref target="limits"/>. Practically, when the relevant limits have been reached for an OSCORE Security Context, the two peers have to establish a new OSCORE Security Context, in order to continue using OSCORE for secure communication. That is, the two peers have to establish new Sender and Recipient Keys, as the keys actually used by the AEAD algorithm.</t>
      <t>In addition to approaching the key usage limits, there may be other reasons for a peer to initiate a key update procedure. These include: the OSCORE Security Context approaching its expiration time, 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>
      <t>It is RECOMMENDED that the peer initiating the key update procedure starts it with some margin, i.e., well before actually experiencing the trigger event forcing to perform a key update, e.g., the OSCORE Security Context expiration or the exhaustion of the Sender Sequence Number space. If the rekeying is not initiated ahead of these events, it may become practically impossible to perform a key update with certain methods.</t>
      <t>Other specifications define a number of ways for rekeying OSCORE, as summarized below.</t>
      <ul spacing="normal">
        <li>
          <t>The two peers can run the procedure defined in <xref section="B.2" sectionFormat="of" target="RFC8613"/>. That is, the two peers exchange three or four messages, protected with temporary Security Contexts adding randomness to the ID Context.  </t>
          <t>
As a result, the two peers establish a new OSCORE Security Context with new ID Context, Sender Key and Recipient Key, while keeping the same OSCORE Master Secret and OSCORE Master Salt from the old OSCORE Security Context.  </t>
          <t>
This procedure does not require any additional components to what OSCORE already provides, and it does not provide forward secrecy.  </t>
          <t>
The procedure defined in <xref section="B.2" sectionFormat="of" target="RFC8613"/> is used in 6TiSCH networks <xref target="RFC7554"/><xref target="RFC8180"/> when handling failure events. That is, a node acting as Join Registrar/Coordinator (JRC) assists new devices, namely "pledges", to securely join the network as per the Constrained Join Protocol <xref target="RFC9031"/>. In particular, a pledge exchanges OSCORE-protected messages with the JRC, from which it obtains a short identifier, link-layer keying material and other configuration parameters. As per <xref section="8.3.3" sectionFormat="of" target="RFC9031"/>, a JRC that experiences a failure event may likely lose information about joined nodes, including their assigned identifiers. Then, the reinitialized JRC can establish a new OSCORE Security Context with each pledge, through the procedure defined in <xref section="B.2" sectionFormat="of" target="RFC8613"/>.</t>
        </li>
        <li>
          <t>The two peers can run the OSCORE profile <xref target="RFC9203"/> of the Authentication and Authorization for Constrained Environments (ACE) Framework <xref target="RFC9200"/>.  </t>
          <t>
When a CoAP client uploads an Access Token to a CoAP server as an access credential, the two peers also exchange two nonces. Then, the two peers use the two nonces together with information provided by the ACE Authorization Server that issued the Access Token, in order to derive an OSCORE Security Context.  </t>
          <t>
This procedure does not provide forward secrecy.</t>
        </li>
        <li>
          <t>The two peers can run the EDHOC key exchange protocol based on Diffie-Hellman and defined in <xref target="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>
    </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 eight 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 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 ----->
+-+-+-+-+-+-+-+-+---+---+---+---+---+---+---+---+---------------------+
|1|0|0|h|k|  n  | 0 | 0 | 0 | 0 | 0 | 0 | 0 | d | Partial IV (if any) |
+-+-+-+-+-+-+-+-+---+---+---+---+---+---+---+---+---------------------+


 <- 1 byte -> <----- s bytes ------> <- 1 byte -> <--- m + 1 bytes --->
+------------+----------------------+---------------------------------+
| s (if any) | kid context (if any) | x (if any) | nonce (if any)     |
+------------+----------------------+------------+--------------------+
                                   /              \____
                                  /                    |
                                 /   0 1 2 3 4 5 6 7   |
+------------------+             |  +-+-+-+-+-+-+-+-+  |
| 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 X_N, as 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. In particular, the new Master Secret is derived through a KUDOS-Expand() step, which takes as input the Master Secret value from the Security Context CTX_IN, the literal string "key update", X_N and the length of the Master Secret. Instead, the new Master Salt takes N as value.</t>
        <t>The definition of KUDOS-Expand depends on the key derivation function used for OSCORE by the two peers, as specified in CTX_IN.</t>
        <t>If the key derivation function is an HKDF Algorithm (see <xref section="3.1" sectionFormat="of" target="RFC8613"/>), then KUDOS-Expand is mapped to HKDF-Expand <xref target="RFC5869"/>, as shown below. Also, the hash algorithm is the same one used by the HKDF Algorithm specified in CTX_IN.</t>
        <artwork><![CDATA[
     KUDOS-Expand(CTX_IN.MasterSecret, ExpandLabel, oscore_key_length) =
        HKDF-Expand(CTX_IN.MasterSecret, ExpandLabel, oscore_key_length)
]]></artwork>
        <t>If a future specification updates <xref target="RFC8613"/> by admitting different key derivation functions than HKDF Algorithms (e.g., KMAC as based on the SHAKE128 or SHAKE256 hash functions), that specification has to update also the present document in order to define the mapping between such key derivation functions and KUDOS-Expand.</t>
        <t>When an HKDF Algorithm is used, the derivation of new values follows the same approach used in TLS 1.3, which is also based on HKDF-Expand (see <xref section="7.1" sectionFormat="of" target="RFC8446"/>) and used for computing new keying material in case of key update (see <xref section="4.6.3" sectionFormat="of" target="RFC8446"/>).</t>
        <t>After that, the new Master Secret and Master Salt parameters are used to derive a new Security Context CTX_OUT as per <xref section="3.2" sectionFormat="of" target="RFC8613"/>. Any other parameter required for the derivation takes the same value as in the Security Context CTX_IN. 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>
        <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 = X_cbor | N_cbor

  oscore_key_length = < Size of CTX_IN.MasterSecret in bytes >

  Label = "key update"

  MSECRET_NEW = KUDOS-Expand-Label(CTX_IN.MasterSecret, Label,
                                   X_N, oscore_key_length)
               = KUDOS-Expand(CTX_IN.MasterSecret, ExpandLabel,
                             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 ExpandLabel is defined as

struct {
    uint16 length = oscore_key_length;
    opaque label<7..255> = "oscore " + Label;
    opaque context<0..255> = X_N;
} ExpandLabel;
]]></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>If the client acts as initiator (see <xref target="ssec-derive-ctx-client-init"/>), the server MUST include its Sender Sequence Number as Partial IV in its response sent as the second KUDOS message. This prevents the AEAD nonce used for the request from being reused for a later response protected with the new OSCORE keying material.</t>
        <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), |   Partial IV: 0    |
              CTX_OLD)  |   ...              |
                        |                    |
Verify with CTX_NEW     |  d flag: 1         |
                        |  X2                |
Discard CTX_OLD         |  Nonce: N2         |
                        |  ...               |
                        |                    |

// 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>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 the byte concatenation of X_cbor and N_cbor
   X_N = 0x418048018a278f7faab55a
]]></artwork>
          </figure>
          <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 the byte concatenation of X_cbor and N_cbor
   X_N = 0x44418041805248018a278f7faab55a4825a8991cd700ac01
]]></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'. Also, the server MUST include its Sender Sequence Number as Partial IV in the response. 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>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>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>
            <t>During an ongoing KUDOS execution the client MUST NOT send any non-KUDOS requests to the server. This could otherwise be possible, if the client is using a value of NSTART greater than 1 (see <xref section="4.7" sectionFormat="of" target="RFC7252"/>).</t>
          </section>
        </section>
        <section anchor="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>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>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>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>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>
            <t>During an ongoing KUDOS execution the client MUST NOT send any non-KUDOS requests to the server. This could otherwise be possible, if the client is using a value of NSTART greater than 1 (see <xref section="4.7" sectionFormat="of" target="RFC7252"/>).</t>
          </section>
          <section 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 does not 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. If that is not the case, the device will be denoted as "non-CAPABLE".</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>
            <li>A peer that is a non-CAPABLE device MUST support no-FS mode.</li>
            <li>A peer that is a CAPABLE device MUST support the FS mode and SHOULD support the no-FS mode.</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 non-CAPABLE devices or only the peer acting as initiator is a non-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 non-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 non-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 temporarily keep the old Security Context CTX_OLD beyond having established the new Security Context CTX_NEW and having achieved key confirmation, rather than simply overwriting CTX_OLD with 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>
        <t>A peer MUST NOT retain CTX_OLD beyond the establishment of CTX_NEW and the achievement of key confirmation, if any of the following conditions holds: CTX_OLD is expired (see <xref target="common-context"/>); an amount 'limit_v' of failed decryptions and verifications of incoming messages has been experienced, by using the Recipient Key of the Recipient Context of CTX_OLD (see <xref target="verifying-req-resp"/>).</t>
      </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 anchor="edhoc-ead-signaling">
        <name>Signaling KUDOS support in EDHOC</name>
        <t>The EDHOC protocol defines the transport of additional External Authorization Data (EAD) within an optional EAD field of the EDHOC messages (see <xref section="3.8" sectionFormat="of" target="I-D.ietf-lake-edhoc"/>). An EAD field is composed of one or multiple EAD items, each of which specifies an identifying 'ead_label' encoded as a CBOR integer, and an 'ead_value' encoded as a CBOR bstr.</t>
        <t>This document defines a new EDHOC EAD item KUDOS_EAD and registers its 'ead_label' in <xref target="iana-edhoc-aad"/>. By including this EAD item in an outgoing EDHOC message, a sender peer can indicate whether it supports KUDOS and in which modes, as well as query the other peer about its support. The possible values of the 'ead_value' are as follows:</t>
        <artwork align="center"><![CDATA[
+------+--------==+----------------------------------------------+
| Name | Value    | Description                                  |
+======+==========+==============================================+
| ASK  | h''      | Used only in EDHOC message_1. It asks the    |
|      | (0x40)   | recipient peer to specify in EDHOC message_2 |
|      |          | whether it supports KUDOS.                   |
+------+----------+----------------------------------------------+
| NONE | h'00'    | Used only in EDHOC message_2 and message_3.  |
|      | (0x4100) | It specifies that the sender peer does not   |
|      |          | support KUDOS.                               |
+------+----------+----------------------------------------------+
| FULL | h'01'    | Used only in EDHOC message_2 and message_3.  |
|      | (0x4101) | It specifies that the sender peer supports   |
|      |          | KUDOS in FS mode and no-FS mode.             |
+------+----------+----------------------------------------------+
| PART | h'02'    | Used only in EDHOC message_2 and message_3.  |
|      | (0x4102) | It specifies that the sender peer supports   |
|      |          | KUDOS in no-FS mode only.                    |
+------+----------+----------------------------------------------+
]]></artwork>
        <t>When the KUDOS_EAD item is included in EDHOC message_1 with 'ead_value' ASK, a recipient peer that supports the KUDOS_EAD item MUST specify whether it supports KUDOS in EDHOC message_2.</t>
        <t>When the KUDOS_EAD item is not included in EDHOC message_1 with 'ead_value' ASK, a recipient peer that supports the KUDOS_EAD item MAY still specify whether it supports KUDOS in EDHOC message_2.</t>
        <t>When the KUDOS_EAD item is included in EDHOC message_2 with 'ead_value' FULL or PART, a recipient peer that supports the KUDOS_EAD item SHOULD specify whether it supports KUDOS in EDHOC message_3. An exception applies in case, based on application policies or other context information, the recipient peer that receives EDHOC message_2 already knows that the sender peer is supposed to have such knowledge.</t>
        <t>When the KUDOS_EAD item is included in EDHOC message_2 with 'ead_value' NONE, a recipient peer that supports the KUDOS_EAD item MUST NOT specify whether it supports KUDOS in EDHOC message_3.</t>
        <t>In the following cases, the recipient peer silently ignores the KUDOS_EAD item specified in the received EDHOC message, and does not include a KUDOS_EAD item in the next EDHOC message it sends (if any).</t>
        <ul spacing="normal">
          <li>The recipient peer does not support the KUDOS_EAD item.</li>
          <li>The KUDOS_EAD item is included in EDHOC message_1 with 'ead_value' different than ASK</li>
          <li>The KUDOS_EAD item is included in EDHOC message_2 or message_3 with 'ead_value' ASK.</li>
          <li>The KUDOS_EAD item is included in EDHOC message_4.</li>
        </ul>
        <t>That is, by specifying 'ead_value' ASK in EDHOC message_1, a peer A can indicate to the other peer B that it wishes to know if B supports KUDOS and in what mode(s). In the following EDHOC message_2, B indicates whether it supports KUDOS and in what mode(s), by specifying either NONE, FULL or PART as 'ead_value'. Specifying the 'ead_value' FULL or PART in EDHOC message_2 also asks A to indicate whether it supports KUDOS in EDHOC message_3.</t>
        <t>To further illustrate the functionality, two examples are presented below as EDHOC executions where only the new KUDOS_EAD item is shown when present, and assuming that no other EAD items are used by the two peers.</t>
        <artwork align="center"><![CDATA[
EDHOC                                                 EDHOC
Initiator                                         Responder
|                                                         |
|                EAD_1: (TBD_LABEL, ASK)                  |
+-------------------------------------------------------->|
|                        message_1                        |
|                                                         |
|                EAD_2: (TBD_LABEL, FULL)                 |
|<--------------------------------------------------------+
|                        message_2                        |
|                                                         |
|                EAD_3: (TBD_LABEL, FULL)                 |
+-------------------------------------------------------->|
|                        message_3                        |
|                                                         |
]]></artwork>
        <t>In the example above, the Initiator asks the EDHOC Responder about its support for KUDOS ('ead_value' = ASK). In EDHOC message_2, the Responder indicates that it supports both the FS and no-FS mode of KUDOS ('ead_value' = FULL). Finally, in EDHOC message_3, the Initiator indicates that it also supports both the FS and no-FS mode of KUDOS ('ead_value' = FULL). After the EDHOC execution has successfully finished, both peers are aware that they both support KUDOS, in the FS and no-FS modes.</t>
        <artwork align="center"><![CDATA[
EDHOC                                                 EDHOC
Initiator                                         Responder
|                                                         |
|                EAD_1: (TBD_LABEL, ASK)                  |
+-------------------------------------------------------->|
|                        message_1                        |
|                                                         |
|                EAD_2: (TBD_LABEL, NONE)                 |
|<--------------------------------------------------------+
|                        message_2                        |
|                                                         |
+-------------------------------------------------------->|
|                        message_3                        |
|                                                         |
]]></artwork>
        <t>In this second example, the Initiator asks the EDHOC Responder about its support for KUDOS ('ead_value' = ASK). In EDHOC message_2, the Responder indicates that it does not support KUDOS at all ('ead_value' = NONE). Finally, in EDHOC message_3, the Initiator does not include the KUDOS_EAD item, since it already knows that using KUDOS with the other peer will not be possible. After the EDHOC execution has successfully finished, the Initiator is aware that the Responder does not support KUDOS, which the two peers are not going to use with each other.</t>
      </section>
    </section>
    <section anchor="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="sec-iana">
      <name>IANA Considerations</name>
      <t>This document has the following actions for IANA.</t>
      <t>Note to RFC Editor: Please replace all occurrences of "[RFC-XXXX]" with the RFC number of this specification and delete this paragraph.</t>
      <section anchor="iana-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 |             |                               |            |
+----------+-------------+-------------------------------+------------+
|     0    | Extension-1 | Set to 1 if the OSCORE Option | [RFC-XXXX] |
|          | Flag        | specifies a second byte,      |            |
|          |             | which includes the OSCORE     |            |
|          |             | flag bits 8-15                |            |
+----------+-------------+-------------------------------+------------+
|     8    | Extension-2 | Set to 1 if the OSCORE Option | [RFC-XXXX] |
|          | Flag        | specifies a third byte,       |            |
|          |             | which includes the OSCORE     |            |
|          |             | flag bits 16-23               |            |
+----------+-------------+-------------------------------+------------+
|    15    | Nonce Flag  | Set to 1 if nonce is present  | [RFC-XXXX] |
|          |             | in the compressed COSE object |            |
+----------+-------------+-------------------------------+------------+
|    16    | Extension-3 | Set to 1 if the OSCORE Option | [RFC-XXXX] |
|          | Flag        | specifies a fourth byte,      |            |
|          |             | which includes the OSCORE     |            |
|          |             | flag bits 24-31               |            |
|          |             |                               |            |
+----------+-------------+-------------------------------+------------+
|    24    | Extension-4 | Set to 1 if the OSCORE Option | [RFC-XXXX] |
|          | Flag        | specifies a fifth byte,       |            |
|          |             | which includes the OSCORE     |            |
|          |             | flag bits 32-39               |            |
|          |             |                               |            |
+----------+-------------+-------------------------------+------------+
|    32    | Extension-5 | Set to 1 if the OSCORE Option | [RFC-XXXX] |
|          | Flag        | specifies a sixth byte,       |            |
|          |             | which includes the OSCORE     |            |
|          |             | flag bits 40-47               |            |
|          |             |                               |            |
+----------+-------------+-------------------------------+------------+
|    40    | Extension-6 | Set to 1 if the OSCORE Option | [RFC-XXXX] |
|          | Flag        | specifies a seventh byte,     |            |
|          |             | which includes the OSCORE     |            |
|          |             | flag bits 48-55               |            |
|          |             |                               |            |
+----------+-------------+-------------------------------+------------+
|    48    | Extension-7 | Set to 1 if the OSCORE Option | [RFC-XXXX] |
|          | Flag        | specifies an eigth byte,      |            |
|          |             | which includes the OSCORE     |            |
|          |             | flag bits 56-63               |            |
|          |             |                               |            |
+----------+-------------+-------------------------------+------------+
]]></artwork>
        <t>In the same registry, IANA is asked to mark as 'Unassigned' the entry with Bit Position of 1, i.e., to update the entry as follows.</t>
        <artwork><![CDATA[
+----------+------------------+--------------------------+------------+
| Bit      | Name             | Description              | Reference  |
| Position |                  |                          |            |
+----------+------------------+--------------------------+------------+
|     1    | Unassigned       |                          |            |
+----------+------------------+--------------------------+------------+
]]></artwork>
      </section>
      <section anchor="iana-edhoc-aad">
        <name>EDHOC External Authorization Data Registry</name>
        <t>IANA is asked to add the following entries to the "EDHOC External Authorization Data" registry within the "Ephemeral Diffie-Hellman Over COSE (EDHOC)" registry group.</t>
        <artwork><![CDATA[
+---------+--------------------------------------+--------------------+
| Label   | Description                          | Reference          |
+=========+======================================+====================+
| TBD1    | Indicates whether this peer supports | [RFC-XXXX]         |
|         | KUDOS and in which mode(s)           |                    |
+---------+--------------------------------------+--------------------+
]]></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="RFC5869" target="https://www.rfc-editor.org/info/rfc5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk">
              <organization/>
            </author>
            <author fullname="P. Eronen" initials="P." surname="Eronen">
              <organization/>
            </author>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications.  The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions.  This document is not an Internet  Standards Track specification; it is published for informational  purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
        <reference anchor="RFC7252" 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>
      </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="RFC9200" target="https://www.rfc-editor.org/info/rfc9200">
          <front>
            <title>Authentication and Authorization for Constrained Environments Using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author fullname="L. Seitz" initials="L." surname="Seitz">
              <organization/>
            </author>
            <author fullname="G. Selander" initials="G." surname="Selander">
              <organization/>
            </author>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem">
              <organization/>
            </author>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman">
              <organization/>
            </author>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
              <organization/>
            </author>
            <date month="August" year="2022"/>
            <abstract>
              <t>This specification defines a framework for authentication and authorization in Internet of Things (IoT) environments called ACE-OAuth. The framework is based on a set of building blocks including OAuth 2.0 and the Constrained Application Protocol (CoAP), thus transforming a well-known and widely used authorization solution into a form suitable for IoT devices.  Existing specifications are used where possible, but extensions are added and profiles are defined to better serve the IoT use cases.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9200"/>
          <seriesInfo name="DOI" value="10.17487/RFC9200"/>
        </reference>
        <reference anchor="RFC9203" target="https://www.rfc-editor.org/info/rfc9203">
          <front>
            <title>The Object Security for Constrained RESTful Environments (OSCORE) Profile of the Authentication and Authorization for Constrained Environments (ACE) Framework</title>
            <author fullname="F. Palombini" initials="F." surname="Palombini">
              <organization/>
            </author>
            <author fullname="L. Seitz" initials="L." surname="Seitz">
              <organization/>
            </author>
            <author fullname="G. Selander" initials="G." surname="Selander">
              <organization/>
            </author>
            <author fullname="M. Gunnarsson" initials="M." surname="Gunnarsson">
              <organization/>
            </author>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document specifies a profile for the Authentication and Authorization for Constrained Environments (ACE) framework.  It utilizes Object Security for Constrained RESTful Environments (OSCORE) to provide communication security and proof-of-possession for a key owned by the client and bound to an OAuth 2.0 access token.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9203"/>
          <seriesInfo name="DOI" value="10.17487/RFC9203"/>
        </reference>
        <reference anchor="I-D.ietf-lake-edhoc" target="https://www.ietf.org/archive/id/draft-ietf-lake-edhoc-17.txt">
          <front>
            <title>Ephemeral Diffie-Hellman Over COSE (EDHOC)</title>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="12" month="October" 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-17"/>
        </reference>
        <reference anchor="I-D.irtf-cfrg-aead-limits" target="https://www.ietf.org/archive/id/draft-irtf-cfrg-aead-limits-05.txt">
          <front>
            <title>Usage Limits on AEAD Algorithms</title>
            <author fullname="Felix Günther" initials="F." surname="Günther">
              <organization>ETH Zurich</organization>
            </author>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="11" month="July" 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-05"/>
        </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-02-03">
        <name>Version -02 to -03</name>
        <ul spacing="normal">
          <li>Use of the OSCORE flag bit 0 to signal more flag bits.</li>
          <li>In UpdateCtx(), open for future key derivation different than HKDF.</li>
          <li>Simplified updateCtx() to use only Expand(); used to be METHOD 2.</li>
          <li>Included the Partial IV if the second KUDOS message is a response.</li>
          <li>Added signaling of support for KUDOS in EDHOC.</li>
          <li>Clarifications on terminology and reasons for rekeying.</li>
          <li>Updated IANA considerations.</li>
          <li>Editorial improvements.</li>
        </ul>
      </section>
      <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="Carsten Bormann"/>, <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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
5tm+hi/1D9yWFzyxn2pmTMW7+GB1wQrKGzADxnztUgQwuRpJuMPutDE2jMcH
Y+CwuWhA8AgHdpiOBViwk8+DyNUGAOr9JLyIJhsgiAxSyYQJg/3nJ6cE/kvy
MLItnZ6mQ656+gI0deXjHqaD+ZRrpjOU+b4yJNQy+Rh/eY9/M81WPgwkOvbS
iJLEYRIyYNphOEQ/5vNbx0IP8+qh5UyUoOQcAQskpBjrIjvahmvll3tVMEVh
ZYhOmUCgfSYCARD+Cxq2lDKz1ShyblAMGQ8m5gZH58l1eLcFXyo3rZN99txm
R99zT6fvVXOnZ8++r2j51PDz/dpdcIy09i74mQgLdVk6oIgEFt0W/tytff+M
fuQ/3q/L/OAq+mc/4dTjjQ3V6+ktYbdk+TgHR6100AB0xdeWVnGn3tvc/rCz
vUW/ZloCUVI734CKIXv2EFbHqVo88JqRKVh4J+L8uvSJnBwfEiy2tzcWwqJH
CKn+etgpwaK7DdC4Q4CZ6281Nzf4rzlVUAMLRWhr9/8VYPHi7atXDIvuF4FF
dzlY6LOug0VlUKodYfoVYPEGK3ITLHpfBBa9Lw0LK+sBF1WJIl8EFl7Ht9o+
bbrOuMVimC/kKp14WEFeWEO3yTCQJ3YIuwTFKZJcNQ/7roTo1POU8ul1mhfP
3vDfYgP9fxXjxlfYRf0OeuUdECUAMQdvwb22olI4V9/Hw/q8TQnLDPkiqjAh
17qHZm2aStR0O35a5bmU96IdeKV7PckALLcUYV9zZVUJFElEJ9WDzEo6Kv9L
ngzyq/vfDgoFuc+ZlAuuct5sJUhzUNCpeAJ7VKvX4zSqkkE4S8kXHO3C8QIr
FZtgA1KFP8OZOyMYJ/Umm4G27FxSb+l6IrtWnzeV/frn0jqjd5KtFCjHfQfv
kVqiDqySKN174TukY6h8mFuFQlqbMVNUbNqueGZL/RWBDtoJa/xCeInQfPe8
VjXAXELggpv5lnbyGST1YNSiHEZeQL6M3mEG9zcuoeJ8H216SY3pDFQ6wZl5
ydc4nPeqxAr2TYHs3ed+Dgs1psq7e26cysBd5uTeZUuNKrMQcqglBp9KhXhO
PyNTUVKoCDPcGw+vYxVy8Q7qPCZUOiuwKx+jc5SsSjKo6Lh5PjeRVNiSiNap
9WpTutiP3+24Chqva9UfemvtSIeTLPtzqoJv1io75S71c1d+F7b9vrsXbJ4/
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
hHaGTGDNk06g+617SAAANlVup7NwgI5R2JgaHDYjDVNzHlhOCjERHaBmg9HQ
GbaeizdfyfIHQC9KSCFk4chGvlv4YN/7YK0uZmzxvEinfn3GQL+W/07gv7sw
DZzuzo5Nn/i4HRqH73YfLffubtW7S877tOJdtWac3373qfdu05oXvdu05kXv
Nq55x3n30bb3buOaF7zbuOYF7zau2T2jR6vgxqJ3G9e84F1vzV/8Ljyuuws7
FWt+tNy7u1XvLjnv04p3/bvwuO4uNKx50btNa170buOad5x3y3ehac0L3m1c
84J3G9fsnlH5LjStecG7jWte8K675s/hR35wY6U8oQIb3zjCUY3kqDvTDcZp
DvIRSgHE6ybCb5uqcYKKBSIAN6oj5jvAvvLvf93gFsv6uzZ93v61vtw6V9NG
YQMdHnPqzh7IAFpEoVFA8DTT6MLcGGpjdblvBWNSRVC2yECOiTMWUHSb1wID
MGLqCe2FEnkV12VhWUQN/USSHaGwgiJNiwr+JyiucclOgP3UDREygTbvqTFX
XrwPDo/3QVDbPDs7Dr4P4N+/fLeFjZIxRpekfFNR3FoYlVulvlV7GJ6FL8e5
EzpkyXOiEG3kNUWzOzLEL9/VDmLiLutHMRVT9VhYGxWks8hBDJHfKUQ6J9UX
A4LeYIwgiJhHPyv5UOlx1GwAVkOnMFcFWSV/SqLR/AqsChnMU204+jZOSxih
Q9QoOo03rV61qpyKeVDhHgWv/vL+1+CvHJUEv8opqC/0Qb7boovzDqEwxKiB
KSkJjnnpu+CIxy+tHkGnYdTiUfBBC0il4LhBmknRBxwpk0wGD5bwX+uhIrUl
8nfBX+TkwskNCtrjdDJcap00lbXMcXw5xsmt5TImobmOoaCbJarK2IJbp1y3
/e9ct302medorwNytW0FDaqIW4xi5xunk+nUykZZOvUjhm+jwkLSptU6wFVD
6iVXjK1NitZ4OcZk1pSpl2tg9TIwB9HiUDEFGC6+Xns4D4IDFf3FAeomREyF
hUnoOKr+FPN1cHR+croXvHl12D87DE4PX5/8fBicvzw6C84O98+PTo45SOfn
KEODedDe7iGZbG8/5JAsHHq7B39+QtR4m0derKMyQsORIXUFNgFApSA3bZ5W
5eZ5xfvFh024k+kM4IWcaTQvMAoPQ/OozwBTDq/T5MufDl4w4QJ9ccKHNTfD
qUrJFF57+GEGl3Fz60cd2XcRBa8Pz1+eHAQ9WYsUdPZumRAAiSFhK1HlJaVR
+pQAyjsmW8eoouuM6vdCb+yDHq6j5ZilEKlIJ+nlrTS4D3Nl7FH9JuhVht2Q
beJe+CB+z6F9uA8AUAZkmKKZ/KPt8tH2rKPtwp90tOQzIaCYNdHQr1O8BiZe
Etdml+G3y++HgwzD5k2cZc52ewDDRTqsHs8Y5hvDZ6uHsSI6FW/xWzMokaM0
wgHJINYJki9FBWwIod34sEFeHplzaJ0fmV9QMKL7CMdvYyQ5I8zRn84nIolR
gKQwR7jVYqqmsNg3pz/98h63gCPTH9EHxCdh2myOBWTef35yGtxk4WwmeBcn
1+kEwUFhJ7n0ypHOmDx/lIQoiWzEGKKJtsENBMgGvbCxAgptMwp1LRTahj8/
8SQgwsFbQ+H+iYTz0r5J6OyIeZNCgPszMhN+4DvJcw4rGLOQSIo0pla+aZZg
y2Ts6Msrl8Z8AAkjTWoRkjsaFCL5aQnSusMr4qL1pky32pWw3l+MvkT0+wPV
nZmDFMno6372CbUCjtSMhs/Wk1RFb4bkisg5WDyLqO1pmFyBuPRxf5zFACXs
5DvN/+v/5vknNEjiF2GWAzUInmP/hSRRH/9LOk6CN1k0/6//HbwOiyLPsUPF
J4IwfP23//o/WYhMcBIi0PAbiRCNgcxH0RBN3PQwowkhFy4RVQwWsP3wZsp0
wIQSWLYQV7by/nx0fHzyc193gNmPJkU8aB9jdg0cJ0VK7Z8enR8Bk/uRnpJ+
rC97271t/cjZ0Yujs/bLdAoy5N9g8XD1LrOIMD94+qj3+FFvq7P2/wM+lKBZ
caQBAA==

-->

</rfc>
