<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.3.7) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-tiloca-core-oscore-piv-enc-01" category="std" consensus="true" submissionType="IETF" updates="8613" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="OSCORE - Stand-in KID and Encrypted PIV">Stand-in Key Identifier and Encrypted Partial IV in the Constrained Application Protocol (CoAP) OSCORE Option</title>
    <seriesInfo name="Internet-Draft" value="draft-tiloca-core-oscore-piv-enc-01"/>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>164 40</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <author initials="J" surname="Preuß Mattsson" fullname="John Preuß Mattsson">
      <organization>Ericsson AB</organization>
      <address>
        <postal>
          <city>Kista</city>
          <code>164 40</code>
          <country>Sweden</country>
        </postal>
        <email>john.mattsson@ericsson.com</email>
      </address>
    </author>
    <author initials="R." surname="Höglund" fullname="Rikard Höglund">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>164 40</code>
          <country>Sweden</country>
        </postal>
        <email>rikard.hoglund@ri.se</email>
      </address>
    </author>
    <author initials="G." surname="Selander" fullname="Göran Selander">
      <organization>Ericsson AB</organization>
      <address>
        <postal>
          <city>Kista</city>
          <code>164 40</code>
          <country>Sweden</country>
        </postal>
        <email>goran.selander@ericsson.com</email>
      </address>
    </author>
    <date year="2025" month="October" day="20"/>
    <area>WIT</area>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 87?>

<t>The security protocol Object Security for Constrained RESTful Environments (OSCORE) provides end-to-end protection of messages exchanged with the Constrained Application Protocol (CoAP). Messages protected with OSCORE include a CoAP OSCORE option, where the "Partial IV" field specifies the sequence number value used by the message sender and the "kid" field specifies the identifier of the message sender. In order to reduce the information exposed on the wire that can be used for fingerprinting traffic and for tracking endpoints, this document defines a lightweight add-on method that obfuscates certain fields of the OSCORE option, by encrypting the "Partial IV" field and overwriting the "kid" field with a stand-in identifier. Therefore, it updates RFC 8613. With minor adaptations, the defined method is applicable also to the security protocol Group Object Security for Constrained RESTful Environments (Group OSCORE) that protects group communication for CoAP.</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://gitlab.com/crimson84/draft-tiloca-core-oscore-piv-enc"/>.</t>
    </note>
  </front>
  <middle>
    <?line 91?>

<section anchor="intro">
      <name>Introduction</name>
      <t>The security protocol Object Security for Constrained RESTful Environments (OSCORE) <xref target="RFC8613"/> provides end-to-end protection of messages exchanged with the Constrained Application Protocol (CoAP) <xref target="RFC7252"/>. OSCORE operates at the application layer by using CBOR Object Signing and Encryption (COSE) <xref target="RFC9052"/> and is independent of the specific transport used to exchange CoAP messages.</t>
      <t>Messages protected with OSCORE include the CoAP OSCORE option, which specifies information for the message recipient to correctly perform decryption and verification upon message reception. In particular, some of the fields that can be included in the OSCORE option comprise:</t>
      <ul spacing="normal">
        <li>
          <t>The "Partial IV" field, which specifies the sequence number value used by a sender endpoint when protecting an outgoing message. This field is always present in request messages, while it is typically absent in response messages, with a few exceptions mandating its presence.</t>
        </li>
        <li>
          <t>The "kid" field, which specifies the identifier of the sender endpoint protecting an outgoing message (i.e., the sender endpoint's OSCORE Sender ID). This field is always present in request messages, while it is typically absent in response messages.</t>
        </li>
      </ul>
      <t>Following a message protection with OSCORE, the OSCORE option added to the message is not encrypted, since its content provides a recipient endpoint with information for processing the OSCORE-protected incoming message.</t>
      <t>However, the information conveyed in plaintext by the "Partial IV" and "kid" fields could be used for fingerprinting traffic from OSCORE endpoints, e.g., by giving hints about the order of messages sent by an endpoint, from which behavioral patterns could be implied. Also, such information could be used to perform trivial tracking of OSCORE endpoints across different network paths, by correlating the values of those fields that are observed in those network paths (e.g., following a network path migration, possibly across different network segments).</t>
      <t>In order to reduce the information exposed on the wire that can be used for fingerprinting traffic and for tracking endpoints, this document updates <xref target="RFC8613"/> and defines a lightweight add-on method that obfuscates certain fields of the OSCORE option, by encrypting the "Partial IV" field and overwriting the "kid" field with a stand-in identifier.</t>
      <t>This method does not require an in-band signaling and its use does not arbitrarily change on a per-message basis. Instead, upon establishing an OSCORE Security Context, the communicating OSCORE endpoints already have an agreement about obfuscating the two fields of the OSCORE option when that Security Context is used, for every OSCORE-protected message that includes the "Partial IV" field or the "kid" field.</t>
      <t>Like for the overall protection of messages with OSCORE, this method is agnostic of how exactly the OSCORE Security Context was established and of how the agreement on using this method was reached. Nevertheless, this document also defines means that endpoints can use to reach that agreement. Absent an explicit agreement, the "Partial IV" and "kid" fields in the OSCORE option are not obfuscated and retain their original values, in order to preserve interoperability.</t>
      <t>With minor adaptations, the method defined in this document is applicable also to the security protocol Group Object Security for Constrained RESTful Environments (Group OSCORE) <xref target="I-D.ietf-core-oscore-groupcomm"/> that protects group communication for CoAP <xref target="I-D.ietf-core-groupcomm-bis"/>. In the interest of such a case, this document also defines means to align the members of an OSCORE group about obfuscating the "Partial IV" and "kid" fields of protected messages exchanged within the group.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

<t>Readers are expected to be familiar with the terms and concepts related to CoAP <xref target="RFC7252"/>, Concise Data Definition Language (CDDL) <xref target="RFC8610"/>, Concise Binary Object Representation (CBOR) <xref target="RFC8949"/>, COSE <xref target="RFC9052"/>, OSCORE <xref target="RFC8613"/>, and Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
      </section>
    </section>
    <section anchor="sec-obfuscation-key">
      <name>Obfuscation Key</name>
      <t>When obfuscation is enabled for the "Partial IV" and "kid" fields of the OSCORE option, the (Group) OSCORE Security Context is extended with one additional parameter in the Common Context.</t>
      <t>The new parameter Obfuscation Key specifies the encryption key for deriving two separate keystreams, namely PIV_KEYSTREAM and KID_KEYSTREAM. On the sender side, PIV_KEYSTREAM and KID_KEYSTREAM are used to obfuscate the "Partial IV" and "kid" fields, respectively, when those are included in an outgoing message protected with (Group) OSCORE. On the recipient side, the same keystreams are used to reverse the obfuscation of the two fields.</t>
      <t>The Obfuscation Key is derived as defined for the Sender/Recipient Keys in <xref section="3.2.1" sectionFormat="of" target="RFC8613"/>, with the following differences.</t>
      <ul spacing="normal">
        <li>
          <t>The 'id' element of the 'info' array is the empty byte string.</t>
        </li>
        <li>
          <t>The 'type' element of the 'info' array is "OBFKey". The label is an ASCII string and does not include a trailing NUL byte.</t>
        </li>
        <li>
          <t>If the Security Context is used for Group OSCORE and the Group Encryption Algorithm in the Common Context is set (see <xref section="2.1.7" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>), then:  </t>
          <ul spacing="normal">
            <li>
              <t>The 'alg_aead' element of the 'info' array specifies the Group Encryption Algorithm from the Common Context encoded as a CBOR integer or text string, consistently with the "Value" field in the entry of the "COSE Algorithms" Registry for this algorithm <xref target="COSE.Algorithms"/>.</t>
            </li>
            <li>
              <t>The L parameter of the HKDF and the 'L' element of the 'info' array are the length in bytes of the key for the Group Encryption Algorithm specified in the Common Context. While the obtained Obfuscation Key is never used with the Group Encryption Algorithm, its length was chosen to obtain a matching level of security.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>If the Security Context is used for Group OSCORE and the Group Encryption Algorithm in the Common Context is not set (see <xref section="2.1.7" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>), then:  </t>
          <ul spacing="normal">
            <li>
              <t>The 'alg_aead' element of the 'info' array specifies the AEAD Algorithm from the Common Context (see <xref section="2.1.1" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>) encoded as a CBOR integer or text string, consistently with the "Value" field in the entry of the "COSE Algorithms" Registry for this algorithm <xref target="COSE.Algorithms"/>.</t>
            </li>
            <li>
              <t>The L parameter of the HKDF and the 'L' element of the 'info' array are the length in bytes of the key for the AEAD Algorithm specified in the Common Context. While the obtained Obfuscation Key is never used with the AEAD Algorithm, its length was chosen to obtain a matching level of security.</t>
            </li>
          </ul>
        </li>
      </ul>
    </section>
    <section anchor="sec-oscore">
      <name>Processing in OSCORE</name>
      <t>This section describes how the method defined in this document is specifically employed for messages protected with OSCORE <xref target="RFC8613"/>.</t>
      <section anchor="sec-oscore-sender">
        <name>Sender Side</name>
        <t>When a sender endpoint uses a fresh Sender Sequence Number value from its own Sender Context to protect an outgoing message, that Sender Sequence Number value <bcp14>MUST</bcp14> be at least 65536. Consequently, the "Partial IV" field of the OSCORE option will have a length of at least 3 bytes. As an exception, this requirement does not apply to the special case discussed in <xref target="edhoc-oscore-request"/>.</t>
        <t>When composing a protected outgoing message MSG, the OSCORE option <bcp14>MUST NOT</bcp14> include the "s" and "kid context" fields. As an exception, this requirement does not apply to the special case discussed in <xref target="six-tisch"/>.</t>
        <t>Once composed MSG, if at least one among the "Partial IV" and "kid" fields is included in the OSCORE option (see <xref section="6.1" sectionFormat="of" target="RFC8613"/>), the sender endpoint performs the following steps.</t>
        <ol spacing="normal" type="1"><li>
            <t>Compose SAMPLE_1 as the first N bytes of the CoAP payload of MSG, where N = min(LENGTH, 16) and LENGTH denotes the length in bytes of the CoAP payload of MSG.  </t>
            <t>
Note that the CoAP payload is the ciphertext of the COSE object and LENGTH is guaranteed to have a minimum value of 9.</t>
          </li>
          <li>
            <t>Compose the 16-byte INPUT_1 as follows:  </t>
            <ul spacing="normal">
              <li>
                <t>If the length of SAMPLE_1 is less than 16 bytes, INPUT_1 is obtained by left-padding SAMPLE_1 with zeroes to exactly 16 bytes.</t>
              </li>
              <li>
                <t>If the length of SAMPLE_1 is 16 bytes, then INPUT_1 takes SAMPLE_1.</t>
              </li>
            </ul>
            <t>
If the OSCORE option of MSG includes the "Partial IV" field, move to Step 3. Otherwise, move to Step 6.</t>
          </li>
          <li>
            <t>Compute the 16-byte PIV_KEYSTREAM as below:  </t>
            <t>
PIV_KEYSTREAM = AES-ECB(ENC_KEY, INPUT_1)  </t>
            <t>
where:  </t>
            <ul spacing="normal">
              <li>
                <t>AES-ECB is the AES algorithm in ECB mode <xref target="AES"/>.</t>
              </li>
              <li>
                <t>ENC_KEY is the Obfuscation Key from the Common Context of the Security Context used to produce MSG (see <xref target="sec-obfuscation-key"/>). ENC_KEY is used as the encryption key for the AES-ECB encryption.</t>
              </li>
              <li>
                <t>INPUT_1 is the result of Step 2. It is used as the plaintext for the AES-ECB encryption.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Compute the ENC_PIV value, by XORing with each other:  </t>
            <ul spacing="normal">
              <li>
                <t>The PIV value encoded within the "Partial IV" field of the OSCORE option of MSG; and</t>
              </li>
              <li>
                <t>The Q bytes from PIV_KEYSTREAM's start, where Q is the length in bytes of the "Partial IV" field and PIV_KEYSTREAM is the result of Step 3.</t>
              </li>
            </ul>
            <t>
For example, if the PIV value encoded within the "Partial IV" field of the OSCORE option of MSG is 0x001122 (Q = 3 bytes) and PIV_KEYSTREAM is 0xffeeddccbbaa99887766554433221100 (16 bytes), then the bytes of PIV_KEYSTREAM to XOR with the PIV value are 0xffeedd.</t>
          </li>
          <li>
            <t>In the "Partial IV" field of the OSCORE option of MSG, replace its current PIV value with the ENC_PIV value computed at Step 4.  </t>
            <t>
If the OSCORE option of MSG includes the "kid" field, move to Step 6. Otherwise, terminate this algorithm.</t>
          </li>
          <li>
            <t>Compose the 16-byte INPUT_2, by taking INPUT_1 from Step 2 and negating its last bit.</t>
          </li>
          <li>
            <t>Compute the 16-byte KID_KEYSTREAM as below:  </t>
            <t>
KID_KEYSTREAM = AES-ECB(ENC_KEY, INPUT_2)  </t>
            <t>
where:  </t>
            <ul spacing="normal">
              <li>
                <t>AES-ECB is the AES algorithm in ECB mode <xref target="AES"/>.</t>
              </li>
              <li>
                <t>ENC_KEY is the Obfuscation Key from the Common Context of the Security Context used to produce MSG (see <xref target="sec-obfuscation-key"/>). ENC_KEY is used as the encryption key for the AES-ECB encryption.</t>
              </li>
              <li>
                <t>INPUT_2 is the result of Step 6. It is used as the plaintext for the AES-ECB encryption.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Compute the 2-byte STAND_IN_KID value, by XORing with each other:  </t>
            <ul spacing="normal">
              <li>
                <t>The 2 bytes from LATEST_PIV's start, where LATEST_PIV is determined as follows.      </t>
                <ul spacing="normal">
                  <li>
                    <t>If the OSCORE option of MSG includes the "Partial IV" field, then LATEST_PIV is the ENC_PIV value computed at Step 4. Otherwise,</t>
                  </li>
                  <li>
                    <t>MSG is a response and LATEST_PIV is the value encoded within the "Partial IV" field of the OSCORE option of the corresponding request as it was sent on the wire (i.e., in its obfuscated form).</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>The 2 bytes from KID_KEYSTREAM's start, where KID_KEYSTREAM is the result of Step 7.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>In the "kid" field of the OSCORE option of MSG, replace the current KID value with the STAND_IN_KID value computed at Step 8.  </t>
            <t>
Unless the original KID value had a length of 2 bytes, this step alters the length of the OSCORE option value. In such a case, the sender endpoint <bcp14>MUST</bcp14> update the "Option Length" field of the OSCORE option accordingly (see <xref section="3.1" sectionFormat="of" target="RFC7252"/>).</t>
          </li>
        </ol>
        <t>Once completed the steps above, the sender endpoint transmits MSG as expected.</t>
      </section>
      <section anchor="sec-oscore-recipient">
        <name>Recipient Side</name>
        <t>Upon receiving a protected incoming message MSG, the recipient endpoint has to determine the OSCORE Security Context to use for decrypting and verifying MSG (see <xref target="context-retrieval"/>).</t>
        <t>If a Security Context CTX is found and this includes an Obfuscation Key in the Common Context, the recipient endpoint uses CTX to reverse the obfuscation of the "Partial IV" and "kid" fields in the OSCORE option of MSG (see <xref target="reverse-obfuscation"/>). Finally the recipient endpoint uses CTX to decrypt and verify MSG.</t>
        <section anchor="context-retrieval">
          <name>Retrieving the Security Context to Use</name>
          <t>If the recipient endpoint is a client, hence MSG is a response, the Security Context CTX to use is the one associated with the CoAP Token value that is specified in the "Token" field of MSG and was specified in the "Token" field of the corresponding request. Then, the following two cases are possible:</t>
          <ul spacing="normal">
            <li>
              <t>CTX does not include an Obfuscation Key in the Common Context. In this case, the client uses CTX to decrypt and verify MSG, as defined in <xref section="8.4" sectionFormat="of" target="RFC8613"/>.</t>
            </li>
            <li>
              <t>CTX includes an Obfuscation Key in the Common Context. In this case, the client performs the steps defined in <xref target="reverse-obfuscation"/>, in order to reverse the obfuscation of the "Partial IV" and "kid" fields in the OSCORE option of MSG by using CTX. Building on the result, the client uses CTX to decrypt and verify MSG, as defined in <xref section="8.4" sectionFormat="of" target="RFC8613"/>.</t>
            </li>
          </ul>
          <t>If the recipient endpoint is a server, hence MSG is a request, the Security Context CTX to use is determined as follows.</t>
          <ol spacing="normal" type="1"><li>
              <t>In case the server stores at least one Security Context that does not include an Obfuscation Key in the Common Context, then move to Step 2. Otherwise, move to Step 3.</t>
            </li>
            <li>
              <t>The server assumes that the "Partial IV" and "kid" fields in the OSCORE option of MSG were not obfuscated. Then, the server attempts to retrieve a Security Context as defined in <xref section="8.2" sectionFormat="of" target="RFC8613"/>.  </t>
              <t>
If this results in retrieving a Security Context CTX that does not include an Obfuscation Key in the Common Context, the server uses CTX to decrypt and verify MSG, as defined in <xref section="8.2" sectionFormat="of" target="RFC8613"/>. In case of successful decryption and verification, this algorithm terminates and the server continues processing MSG as expected.  </t>
              <t>
Instead, if no such CTX is found or if decryption and verification of MSG fail, then move to Step 3.</t>
            </li>
            <li>
              <t>In case the server stores at least one Security Context that includes an Obfuscation Key in the Common Context, then move to Step 4. Otherwise, move to Step 12.</t>
            </li>
            <li>
              <t>Compose SAMPLE_1 by means of the same method at Step 1 of <xref target="sec-oscore-sender"/>, with reference to the present incoming message MSG.</t>
            </li>
            <li>
              <t>Compose INPUT_1 by means of the same method at Step 2 of <xref target="sec-oscore-sender"/>, using as SAMPLE_1 the result of Step 4 of the present algorithm.</t>
            </li>
            <li>
              <t>Compose the 16-byte INPUT_2, by taking INPUT_1 from Step 5 and negating its last bit.</t>
            </li>
            <li>
              <t>Select a Security Context CTX that includes an Obfuscation Key in the Common Context and has not been selected yet during this execution of the present algorithm. If no such CTX is found, then move to Step 12. Otherwise, move to Step 8.</t>
            </li>
            <li>
              <t>Compute the 16-byte KID_KEYSTREAM by means of the same method at Step 7 of <xref target="sec-oscore-sender"/>. In particular:  </t>
              <ul spacing="normal">
                <li>
                  <t>ENC_KEY is the Obfuscation Key from the Common Context of the latest CTX selected at Step 7 of the present algorithm.</t>
                </li>
                <li>
                  <t>INPUT_2 is the result of Step 6 of the present algorithm.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Compute the 2-byte STAND_IN_KID value, by XORing with each other:  </t>
              <ul spacing="normal">
                <li>
                  <t>The 2 bytes from ENC_PIV's start, where ENC_PIV is the value encoded within the "Partial IV" field of the OSCORE option of MSG.</t>
                </li>
                <li>
                  <t>The 2 bytes from KID_KEYSTREAM's start, where KID_KEYSTREAM is the result of Step 8.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>If the STAND_IN_KID value computed at Step 9 is not equal to the value encoded in the "kid" field of the OSCORE option of MSG, then move to Step 7.  </t>
              <t>
Otherwise, the latest CTX selected at Step 7 is the Security Context to use for decrypting and verifying MSG, and this algorithm moves to Step 11.</t>
            </li>
            <li>
              <t>Run the algorithm in <xref target="reverse-obfuscation"/>, in order to reverse the obfuscation of the "Partial IV" and "kid" fields in the OSCORE option of MSG, by using the Security Context CTX determined at Step 10.  </t>
              <t>
Building on the result, the server uses CTX to decrypt and verify MSG, as defined in <xref section="8.2" sectionFormat="of" target="RFC8613"/>. In case of successful decryption and verification, this algorithm terminates and the server continues processing MSG as expected.  </t>
              <t>
Otherwise, in case of failed decryption and verification, the following applies:  </t>
              <ul spacing="normal">
                <li>
                  <t>The OSCORE option of MSG is restored to be as it was before running the algorithm in <xref target="reverse-obfuscation"/>.</t>
                </li>
                <li>
                  <t>This algorithm moves to Step 7.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>The server performs the same error handling defined in <xref section="8.2" sectionFormat="of" target="RFC8613"/> for the case where a Security Context is not found.</t>
            </li>
          </ol>
        </section>
        <section anchor="reverse-obfuscation">
          <name>Reversing the Field Obfuscation</name>
          <t>Given a Security Context CTX that includes an Obfuscation Key in the Common Context and was retrieved according to what is specified in <xref target="context-retrieval"/>, the recipient endpoint performs the following steps, in order to reverse the obfuscation of the "Partial IV" and "kid" fields in the OSCORE option of the protected incoming message MSG.</t>
          <ol spacing="normal" type="1"><li>
              <t>If the OSCORE option of MSG includes the "kid" field, move to Step 2. Otherwise, move to Step 3.</t>
            </li>
            <li>
              <t>In the "kid" field of the OSCORE option of MSG, replace the current STAND_IN_KID value with the Recipient ID specified in the Recipient Context of CTX.  </t>
              <t>
Unless the Recipient ID has a length of 2 bytes, this step alters the length of the OSCORE option value. In such a case, the recipient endpoint <bcp14>MUST</bcp14> update the "Option Length" field of the OSCORE option accordingly (see <xref section="3.1" sectionFormat="of" target="RFC7252"/>).</t>
            </li>
            <li>
              <t>If the OSCORE option of MSG includes the "Partial IV" field, move to Step 4. Otherwise, terminate this algorithm.</t>
            </li>
            <li>
              <t>Compute the 16-byte PIV_KEYSTREAM by means of the same method defined at Step 3 of <xref target="sec-oscore-sender"/>. In particular:  </t>
              <ul spacing="normal">
                <li>
                  <t>ENC_KEY is the Obfuscation Key from the Common Context of the Security Context CTX that is used during this execution of the present algorithm.</t>
                </li>
                <li>
                  <t>INPUT_1 is composed by means of the same method defined at Step 5 of <xref target="context-retrieval"/>. Note that, if the recipient endpoint is a server, then INPUT_1 was already computed when actually performing Step 5 of <xref target="context-retrieval"/>.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Compute the PIV value, by XORing with each other:  </t>
              <ul spacing="normal">
                <li>
                  <t>The ENC_PIV value encoded within the "Partial IV" field of the OSCORE option of MSG; and</t>
                </li>
                <li>
                  <t>The Q bytes from PIV_KEYSTREAM's start, where Q is the length in bytes of the "Partial IV" field and PIV_KEYSTREAM is the result of Step 4.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>In the "Partial IV" field of the OSCORE option of MSG, replace its current ENC_PIV value with the PIV value computed at Step 5.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="special-cases">
        <name>Special Cases</name>
        <t>This section discusses some special cases where the use of the method defined in this document deviates from what is specified in <xref target="sec-oscore-sender"/> and <xref target="sec-oscore-recipient"/>.</t>
        <section anchor="edhoc-oscore-request">
          <name>EDHOC + OSCORE Request</name>
          <t>Two endpoints can run the authenticated key agreement Ephemeral Diffie-Hellman over COSE (EDHOC) <xref target="RFC9528"/> in order to establish an OSCORE Security Context (see <xref section="A.1" sectionFormat="of" target="RFC9528"/>). In particular, EDHOC messages can be transported over CoAP (see <xref section="A.2" sectionFormat="of" target="RFC9528"/>).</t>
          <t>When doing so, if the endpoint that sends the first EDHOC message acts as a CoAP client, it is possible to use the optimized workflow defined in <xref section="3" sectionFormat="of" target="RFC9668"/>. In such a case, the first OSCORE-protected CoAP request sent by the client additionally embeds the final EDHOC message, and it is protected with the OSCORE Security Context established from the present and still ongoing EDHOC session.</t>
          <t>Upon receiving such an EDHOC + OSCORE request, the server first extracts and processes the EDHOC message embedded therein, completes the EDHOC session, establishes the OSCORE Security Context, and finally uses the latter to decrypt and verify the OSCORE-protected CoAP request.</t>
          <t>When using this optimized workflow, the method defined in this document cannot be used to obfuscate the "Partial IV" and "kid" fields in the OSCORE option of the EDHOC + OSCORE request.</t>
          <t>Therefore, the following applies for the OSCORE option of that specific request:</t>
          <ul spacing="normal">
            <li>
              <t>The "Partial IV" field conveys the Sender Sequence Number of the client in plaintext. As an exception to the requirement defined in <xref target="sec-oscore-sender"/>, the "Partial IV" field can have a length smaller than 3 bytes. In fact, it is expected to have a length of 1 byte and to encode the Sender Sequence Number 0.</t>
            </li>
            <li>
              <t>The "kid" field conveys the actual OSCORE Sender ID of the client, which the server offered earlier in the EDHOC session as its own EDHOC connection identifier C_R. Upon receiving the EDHOC + OSCORE request, the server needs to retrieve such an identifier as-is from the request, in order to correctly retrieve the EDHOC session and complete it, before establishing the OSCORE Security Context shared with the client.  </t>
              <t>
Note that, if EDHOC is instead run as per the original workflow (see <xref section="A.2.1" sectionFormat="of" target="RFC9528"/>, the OSCORE Sender ID of the client is anyway exposed at least once, since C_R is prepended to EDHOC message_3 within the CoAP payload of a request sent by the client.</t>
            </li>
          </ul>
        </section>
        <section anchor="kudos">
          <name>KUDOS</name>
          <t>Two endpoints can use Key Update for OSCORE (KUDOS) <xref target="I-D.ietf-core-oscore-key-update"/>, a lightweight procedure for updating their OSCORE keying material by establishing a new OSCORE Security Context.</t>
          <t>Given the Security Context CTX_OLD to be replaced, there are two possible types of KUDOS messages that are exchanged during a KUDOS execution:</t>
          <ul spacing="normal">
            <li>
              <t>A divergent KUDOS message is protected with a temporary OSCORE Security Context CTX_TEMP, which is derived from CTX_OLD.</t>
            </li>
            <li>
              <t>A convergent KUDOS message is protected with the OSCORE Security Context CTX_NEW, which is derived from CTX_OLD and is intended to replace CTX_OLD.</t>
            </li>
          </ul>
          <t>When using the method defined in this document to obfuscate the "Partial IV" and "kid" fields in the OSCORE option of a KUDOS message, the following applies.</t>
          <ul spacing="normal">
            <li>
              <t>The Obfuscation Key to use <bcp14>MUST</bcp14> be the one specified in the Common Context of the Security Context CTX_OLD, from which the Security Context CTX_TEMP (CTX_NEW) is derived for protecting a divergent (convergent) KUDOS message.  </t>
              <t>
That is, with reference to a divergent (convergent) KUDOS message, the Obfuscation Key to use is not the one specified in the Common Context of the Security Context CTX_TEMP (CTX_NEW) that is used to protect the message.</t>
            </li>
          </ul>
        </section>
        <section anchor="six-tisch">
          <name>6TiSCH</name>
          <t>The Constrained Join Protocol (CoJP) defined in <xref target="RFC9031"/> specifies a "secure join" solution for a new device, called a "pledge", to securely join a 6TiSCH network where communications are protected with OSCORE. The Join process is assisted by a central entity called Join Registrar/Coordinator (JRC).</t>
          <t>In particular, as defined in <xref section="7.3" sectionFormat="of" target="RFC9031"/>, the following holds for a given pledge and the JRC using OSCORE:</t>
          <ul spacing="normal">
            <li>
              <t>The OSCORE ID Context in the shared OSCORE Security Context is set to the pledge identifier.</t>
            </li>
            <li>
              <t>The OSCORE Sender ID of the pledge is set to the empty byte string.</t>
            </li>
            <li>
              <t>The OSCORE Sender ID of the JRC is set to the byte string 0x4a5243 ("JRC" in ASCII).</t>
            </li>
          </ul>
          <t>In the Join Request that the pledge sends to the JRC, the OSCORE option includes the "s" and "kid context" fields, with the latter encoding the OSCORE ID Context.</t>
          <t>When using the method defined in this document to obfuscate the "Partial IV" and "kid" fields in the OSCORE option of CoJP messages, the following applies:</t>
          <ul spacing="normal">
            <li>
              <t>If the "s" and "kid context" fields are present in the OSCORE option of an outgoing CoJP message, the sender endpoint <bcp14>MUST</bcp14> remove the "kid context" field and <bcp14>MUST</bcp14> update the "s" field to encode the value 0.  </t>
              <t>
This step alters the length of the OSCORE option value. Therefore, the sender endpoint <bcp14>MUST</bcp14> update the "Option Length" field of the OSCORE option accordingly (see <xref section="3.1" sectionFormat="of" target="RFC7252"/>).</t>
            </li>
            <li>
              <t>If the OSCORE option of an incoming CoJP message MSG does not include the "kid context" field and includes the "s" field encoding the value 0, the recipient endpoint performs the following steps in addition to those compiled in <xref target="reverse-obfuscation"/>:  </t>
              <ul spacing="normal">
                <li>
                  <t>Add the "kid context" field to the OSCORE option of MSG.</t>
                </li>
                <li>
                  <t>In the "kid context" field of the OSCORE option, set as value the ID Context that is specified in the OSCORE Security Context CTX to be used for decrypting and verifying MSG.</t>
                </li>
                <li>
                  <t>In the "s" field of the OSCORE option, set as value the length in bytes of the "kid context" field.</t>
                </li>
              </ul>
              <t>
Unless the ID Context has a length of 0 bytes, this step alters the length of the OSCORE option value. In such a case, the recipient endpoint <bcp14>MUST</bcp14> update the "Option Length" field of the OSCORE option accordingly (see <xref section="3.1" sectionFormat="of" target="RFC7252"/>).</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="processing-in-group-oscore">
      <name>Processing in Group OSCORE</name>
      <t>This section describes how the method defined in this document is specifically employed for messages protected with Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
      <t>In particular, the following presents the differences that apply with respect to the case where OSCORE is used (see <xref target="sec-oscore"/>).</t>
      <section anchor="group-oscore-keying-material">
        <name>Keying Material</name>
        <t>The Group OSCORE Security Context is extended with one additional parameter Obfuscation Sender Key in the Sender Context (see <xref target="obf-sender-key"/>) and with one additional parameter Obfuscation Recipient Key in each Recipient Context (see <xref target="obf-recipient-key"/>).</t>
        <section anchor="obf-sender-key">
          <name>Obfuscation Sender Key</name>
          <t>Within the Sender Context, the new parameter Obfuscation Sender Key specifies the encryption key for deriving the keystreams PIV_KEYSTREAM and KID_KEYSTREAM, when those are used to obfuscate the "Partial IV" and "kid" fields in the OSCORE option of an outgoing message.</t>
          <t>The Obfuscation Sender Key is derived as the output OKM of an HKDF-Expand step <xref target="RFC5869"/>, i.e., OKM = HKDF-Expand(PRK, info, L), where:</t>
          <ul spacing="normal">
            <li>
              <t>The used HKDF is the HKDF Algorithm specified in the Common Context.</t>
            </li>
            <li>
              <t>PRK is the Obfuscation Key from the Common Context.</t>
            </li>
            <li>
              <t>info is the Sender ID specified in the Sender Context.</t>
            </li>
            <li>
              <t>L is the length in bytes of the Obfuscation Key from the Common Context.</t>
            </li>
          </ul>
        </section>
        <section anchor="obf-recipient-key">
          <name>Obfuscation Recipient Key</name>
          <t>Within a given Recipient Context, the new parameter Obfuscation Recipient Key specifies the encryption key for deriving the keystreams PIV_KEYSTREAM and KID_KEYSTREAM, when those are used to reverse the obfuscation of the "Partial IV" and "kid" fields in the OSCORE option of an incoming message.</t>
          <t>The Obfuscation Recipient Key is derived as the output OKM of an HKDF-Expand step <xref target="RFC5869"/>, i.e., OKM = HKDF-Expand(PRK, info, L), where:</t>
          <ul spacing="normal">
            <li>
              <t>The used HKDF is the HKDF Algorithm specified in the Common Context.</t>
            </li>
            <li>
              <t>PRK is the Obfuscation Key from the Common Context.</t>
            </li>
            <li>
              <t>info is the Recipient ID specified in the Recipient Context.</t>
            </li>
            <li>
              <t>L is the length in bytes of the Obfuscation Key from the Common Context.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="group-oscore-sender-side">
        <name>Sender Side</name>
        <t>When composing a protected outgoing message MSG, the OSCORE option includes the "s" and "kid context" fields according to what is specified for Group OSCORE in <xref target="I-D.ietf-core-oscore-groupcomm"/>. That is, the OSCORE option always includes those fields in a request and may include those fields in a response.</t>
        <t>Once composed MSG, if at least one among the "Partial IV" and "kid" fields is included in the OSCORE option (see <xref section="6.1" sectionFormat="of" target="RFC8613"/>), the sender endpoint performs the same steps of <xref target="sec-oscore-sender"/>, with the following differences:</t>
        <ul spacing="normal">
          <li>
            <t>At Step 1, LENGTH is guaranteed to have a minimum value of 9. In particular:  </t>
            <ul spacing="normal">
              <li>
                <t>If MSG is protected with the group mode of Group OSCORE (see <xref section="7" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>), then the CoAP payload is the ciphertext of the COSE object concatenated with the encrypted countersignature.</t>
              </li>
              <li>
                <t>If MSG is protected with the pairwise mode of Group OSCORE (see <xref section="8" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>), then the CoAP payload is the ciphertext of the COSE object.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>At Step 3, ENC_KEY is the Obfuscation Sender Key from the Sender Context.</t>
          </li>
          <li>
            <t>At Step 7, ENC_KEY is the Obfuscation Sender Key from the Sender Context.</t>
          </li>
        </ul>
      </section>
      <section anchor="group-oscore-recipient-side">
        <name>Recipient Side</name>
        <t>Upon receiving a protected incoming message MSG, the recipient endpoint determines the Group OSCORE Security Context CTX to use according to what is specified in <xref target="I-D.ietf-core-oscore-groupcomm"/>, i.e.:</t>
        <ul spacing="normal">
          <li>
            <t>If MSG is a request, CTX is retrieved by leveraging the Group Identifier value (Gid) of the group, which is encoded within the "kid context" field in the OSCORE option of MSG.</t>
          </li>
          <li>
            <t>If MSG is a response, CTX is retrieved by leveraging the CoAP Token value that is specified in the "Token" field of MSG and was specified in the "Token" field of the corresponding request. The possible presence of the "kid context" field in the OSCORE option can further aid the client, e.g., in case the group has been rekeyed and its Gid has changed.</t>
          </li>
        </ul>
        <t>If the retrieved Group OSCORE Security Context CTX includes an Obfuscation Key in the Common Context, then the method defined in this document is used to obfuscate the "Partial IV" and "kid" fields in the OSCORE option of every protected message exchanged within the group.</t>
        <t>Consequently, within CTX, the recipient endpoint has to determine the specific Recipient Context REC_CTX to use for decrypting and verifying MSG (see <xref target="group-oscore-retrieve-rec-ctx"/>).</t>
        <t>Then, the recipient endpoint uses REC_CTX to reverse the obfuscation of the "Partial IV" and "kid" fields in the OSCORE option of MSG (see <xref target="group-oscore-reverse-obfuscation"/>). Finally the recipient endpoint uses REC_CTX to decrypt and verify MSG.</t>
        <section anchor="group-oscore-retrieve-rec-ctx">
          <name>Retrieving the Recipient Context to Use</name>
          <t>Given the retrieved Group OSCORE Security Context CTX, the following describes how the recipient endpoint retrieves from CTX the specific Recipient Context REC_CTX to use.</t>
          <t>If the recipient endpoint is a client, hence MSG is a response, the client is able to simply retrieve the Recipient Context REC_CTX to use, in case both the following conditions apply:</t>
          <ul spacing="normal">
            <li>
              <t>The request corresponding to MSG was protected with the pairwise mode of Group OSCORE.</t>
            </li>
            <li>
              <t>The "kid" field is not included in the OSCORE option of MSG.</t>
            </li>
          </ul>
          <t>In such a case, REC_CTX is the Recipient Context associated with the other endpoint for which the request corresponding to MSG was protected. That is, this client protected such request by using its Pairwise Sender Key associated with that other endpoint. Consequently, the client performs the steps defined in <xref target="group-oscore-reverse-obfuscation"/>, in order to reverse the obfuscation of the "Partial IV" field (if present) in the OSCORE option of MSG by using REC_CTX. Building on the result, the client uses REC_CTX to decrypt and verify MSG, as defined in <xref target="I-D.ietf-core-oscore-groupcomm"/>. The specific operations to perform depend on whether MSG is protected with the group mode or with the pairwise mode of Group OSCORE.</t>
          <t>In any other case, the recipient endpoint determines the Recipient Context REC_CTX to use as follows.</t>
          <ol spacing="normal" type="1"><li>
              <t>Compose SAMPLE_1 as the first N bytes of the CoAP payload of MSG, where N = min(LENGTH, 16) and LENGTH denotes the length in bytes of the CoAP payload of MSG.  </t>
              <t>
The same considerations about LENGTH from <xref target="group-oscore-sender-side"/> apply.</t>
            </li>
            <li>
              <t>Compose INPUT_1 by means of the same method at Step 2 of <xref target="sec-oscore-sender"/>, using as SAMPLE_1 the result of Step 1 of the present algorithm.</t>
            </li>
            <li>
              <t>Compose the 16-byte INPUT_2, by taking INPUT_1 from Step 2 and negating its last bit.</t>
            </li>
            <li>
              <t>Within CTX, select a Recipient Context REC_CTX that has not been selected yet during this execution of the present algorithm. If no such REC_CTX is found, then move to Step 9. Otherwise, move to Step 5.</t>
            </li>
            <li>
              <t>Compute the 16-byte KID_KEYSTREAM by means of the same method at Step 7 of <xref target="sec-oscore-sender"/>. In particular:  </t>
              <ul spacing="normal">
                <li>
                  <t>ENC_KEY is the Obfuscation Recipient Key from the latest REC_CTX selected at Step 4 of the present algorithm.</t>
                </li>
                <li>
                  <t>INPUT_2 is the result of Step 3 of the present algorithm.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Compute the 2-byte STAND_IN_KID value, by XORing with each other:  </t>
              <ul spacing="normal">
                <li>
                  <t>The 2 bytes from LATEST_PIV's start, where LATEST_PIV is determined as follows.      </t>
                  <ul spacing="normal">
                    <li>
                      <t>If the OSCORE option of MSG includes the "Partial IV" field, then LATEST_PIV is the value encoded within that field. Otherwise,</t>
                    </li>
                    <li>
                      <t>MSG is a response and LATEST_PIV is the value encoded within the "Partial IV" field of the OSCORE option of the corresponding request as it was sent on the wire (i.e., in its obfuscated form).</t>
                    </li>
                  </ul>
                </li>
                <li>
                  <t>The 2 bytes from KID_KEYSTREAM's start, where KID_KEYSTREAM is the result of Step 5.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>If the STAND_IN_KID value computed at Step 6 is not equal to the value encoded in the "kid" field of the OSCORE option of MSG, then move to Step 4.  </t>
              <t>
Otherwise, the latest REC_CTX selected at Step 4 is the Recipient Context to use for decrypting and verifying MSG, and this algorithm moves to Step 8.</t>
            </li>
            <li>
              <t>Run the algorithm in <xref target="group-oscore-reverse-obfuscation"/>, in order to reverse the obfuscation of the "Partial IV" and "kid" fields in the OSCORE option of MSG, by using the latest REC_CTX determined at Step 7.  </t>
              <t>
Building on the result, the recipient endpoint uses REC_CTX to decrypt and verify MSG, as defined in <xref target="I-D.ietf-core-oscore-groupcomm"/>. The specific operations to perform depend on whether MSG is protected with the group mode or with the pairwise mode of Group OSCORE.  </t>
              <t>
In case of successful decryption and verification, this algorithm terminates and the recipient endpoint continues processing MSG as expected.  </t>
              <t>
Otherwise, in case of failed decryption and verification, the following applies:  </t>
              <ul spacing="normal">
                <li>
                  <t>The OSCORE option of MSG is restored to be as it was before running the algorithm in <xref target="group-oscore-reverse-obfuscation"/>.</t>
                </li>
                <li>
                  <t>This algorithm moves to Step 4.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>If the application admits the dynamic derivation of new Recipient Contexts and the recipient endpoint intends to take advantage of that, move to Step 10. Otherwise, move to Step 17.</t>
            </li>
            <li>
              <t>The recipient endpoint contacts the Group Manager responsible for the OSCORE group (see <xref section="12" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>) and retrieves a set of pairs P = (ID, CRED), where ID and CRED in each pair P are the Sender ID and the public authentication credential of a current group member.  </t>
              <t>
Depending on the particular realization of Group Manager, it can also be possible to retrieve a selected subset of those pairs, e.g., such that the ID specified therein is not part of a list provided in the request to the Group Manager. The realization of Group Manager specified in <xref target="I-D.ietf-ace-key-groupcomm-oscore"/> makes it possible to do so.</t>
            </li>
            <li>
              <t>From the set obtained at Step 10, select a pair P such that:  </t>
              <ul spacing="normal">
                <li>
                  <t>P has not been selected yet during this execution of the present algorithm; and</t>
                </li>
                <li>
                  <t>The ID specified within P is not the Recipient ID stored in any of the Recipient Contexts within CTX.</t>
                </li>
              </ul>
              <t>
If no such P is found, then move to Step 17. Otherwise, move to Step 12.</t>
            </li>
            <li>
              <t>Within CTX, establish a new Recipient Context REC_CTX associated with the same other group member with which the latest pair P selected at Step 11 is associated. That is, within REC_CTX, ID and CRED from P are stored as the Recipient ID and authentication credential associated with the other group member.</t>
            </li>
            <li>
              <t>Compute the 16-byte KID_KEYSTREAM by means of the same method at Step 7 of <xref target="sec-oscore-sender"/>. In particular:  </t>
              <ul spacing="normal">
                <li>
                  <t>ENC_KEY is the Obfuscation Recipient Key from the latest REC_CTX established at Step 12 of the present algorithm.</t>
                </li>
                <li>
                  <t>INPUT_2 is the result of Step 3 of the present algorithm.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Compute the 2-byte STAND_IN_KID value, by XORing with each other:  </t>
              <ul spacing="normal">
                <li>
                  <t>The 2 bytes from LATEST_PIV's start, where LATEST_PIV is the same one determined at Step 6.</t>
                </li>
                <li>
                  <t>The 2 bytes from KID_KEYSTREAM's start, where KID_KEYSTREAM is the result of Step 13.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>If the STAND_IN_KID value computed at Step 14 is not equal to the value encoded in the "kid" field of the OSCORE option of MSG, then the following applies:  </t>
              <ul spacing="normal">
                <li>
                  <t>Depending on what is specified by the application, the recipient endpoint <bcp14>MAY</bcp14> delete the latest REC_CTX established at Step 12.      </t>
                  <t>
If REC_CTX is deleted in this particular circumstance, then this deletion does not require the recipient endpoint to initialize as invalid the Replay Window of any new Recipient Context created later within CTX (see <xref section="2.6.1.2" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>).</t>
                </li>
                <li>
                  <t>This algorithm moves to Step 11.</t>
                </li>
              </ul>
              <t>
Otherwise, the latest REC_CTX established at Step 12 is the Recipient Context to use for decrypting and verifying MSG, and this algorithm moves to Step 16.</t>
            </li>
            <li>
              <t>Run the algorithm in <xref target="group-oscore-reverse-obfuscation"/>, in order to reverse the obfuscation of the "Partial IV" and "kid" fields in the OSCORE option of MSG, by using the latest REC_CTX determined at Step 15.  </t>
              <t>
Building on the result, the recipient endpoint uses REC_CTX to decrypt and verify MSG, as defined in <xref target="I-D.ietf-core-oscore-groupcomm"/>. The specific operations to perform depend on whether MSG is protected with the group mode or with the pairwise mode of Group OSCORE.  </t>
              <t>
In case of successful decryption and verification, this algorithm terminates and the recipient endpoint continues processing MSG as expected.  </t>
              <t>
Otherwise, in case of failed decryption and verification, the following applies:  </t>
              <ul spacing="normal">
                <li>
                  <t>Depending on what is specified by the application, the recipient endpoint <bcp14>MAY</bcp14> delete the latest REC_CTX determined at Step 15.      </t>
                  <t>
If REC_CTX is deleted in this particular circumstance, then this deletion does not require the recipient endpoint to initialize as invalid the Replay Window of any new Recipient Context created later within CTX (see <xref section="2.6.1.2" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>).</t>
                </li>
                <li>
                  <t>The OSCORE option of MSG is restored to be as it was before running the algorithm in <xref target="group-oscore-reverse-obfuscation"/>.</t>
                </li>
                <li>
                  <t>This algorithm moves to Step 11.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>The recipient endpoint performs the same error handling defined in <xref target="I-D.ietf-core-oscore-groupcomm"/> for the case where a Recipient Context is ultimately not found.</t>
            </li>
          </ol>
        </section>
        <section anchor="group-oscore-reverse-obfuscation">
          <name>Reversing the Field Obfuscation</name>
          <t>Given a Recipient Context RX_CTX that was retrieved according to what is specified in <xref target="group-oscore-retrieve-rec-ctx"/>, the recipient endpoint performs the following steps, in order to reverse the obfuscation of the "Partial IV" and "kid" fields in the OSCORE option of the protected incoming message MSG.</t>
          <ol spacing="normal" type="1"><li>
              <t>If the OSCORE option of MSG includes the "kid" field, move to Step 2. Otherwise, move to Step 3.</t>
            </li>
            <li>
              <t>In the "kid" field of the OSCORE option of MSG, replace the current STAND_IN_KID value with the Recipient ID specified in RX_CTX.  </t>
              <t>
Unless the Recipient ID has a length of 2 bytes, this step alters the length of the OSCORE option value. In such a case, the recipient endpoint <bcp14>MUST</bcp14> update the "Option Length" field of the OSCORE option accordingly (see <xref section="3.1" sectionFormat="of" target="RFC7252"/>).</t>
            </li>
            <li>
              <t>If the OSCORE option of MSG includes the "Partial IV" field, move to Step 4. Otherwise, terminate this algorithm.</t>
            </li>
            <li>
              <t>Compute the 16-byte PIV_KEYSTREAM by means of the same method defined at Step 3 of <xref target="sec-oscore-sender"/>. In particular:  </t>
              <ul spacing="normal">
                <li>
                  <t>ENC_KEY is the Obfuscation Recipient Key from the RX_CTX that is used during this execution of the present algorithm.</t>
                </li>
                <li>
                  <t>INPUT_1 is composed by means of the same method defined at Step 2 of <xref target="group-oscore-retrieve-rec-ctx"/>. Note that, except for the particular case discussed at the beginning of <xref target="group-oscore-retrieve-rec-ctx"/> where the recipient endpoint is a client, INPUT_1 was already computed when actually performing Step 2 of <xref target="group-oscore-retrieve-rec-ctx"/>.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Compute the PIV value, by XORing with each other:  </t>
              <ul spacing="normal">
                <li>
                  <t>The ENC_PIV value encoded within the "Partial IV" field of the OSCORE option of MSG; and</t>
                </li>
                <li>
                  <t>The Q bytes from PIV_KEYSTREAM's start, where Q is the length in bytes of the "Partial IV" field and PIV_KEYSTREAM is the result of Step 4.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>In the "Partial IV" field of the OSCORE option of MSG, replace its current ENC_PIV value with the PIV value computed at Step 5.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="signature-checker">
        <name>External Signature Checker</name>
        <t>TBD</t>
        <t>Editor's note: describe how to ensure that an external signature checker (see <xref section="7.5" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>) can still perform its intended operations, when the "Partial IV" and "kid" fields of the OSCORE option are obfuscated.</t>
      </section>
    </section>
    <section anchor="sec-agreement">
      <name>Agreement on Obfuscating Fields in the OSCORE Option</name>
      <t>If an endpoint does not have an explicit agreement with its peer(s) about employing the method specified in this document when using a (Group) OSCORE Security Context CTX, the following applies in order to preserve interoperability:</t>
      <ul spacing="normal">
        <li>
          <t>The endpoint <bcp14>MUST NOT</bcp14> obfuscate the "Partial IV" and "kid" fields in the OSCORE option of its outgoing messages protected with CTX.</t>
        </li>
        <li>
          <t>The endpoint <bcp14>MUST NOT</bcp14> attempt to reverse the obfuscation of the "Partial IV" and "kid" fields in the OSCORE option of incoming messages protected with CTX.</t>
        </li>
      </ul>
      <t>The rest of this section defines means that endpoints can use to reach an agreement about obfuscating the "Partial IV" and "kid" fields as per the method specified in this document.</t>
      <section anchor="agreement-for-oscore">
        <name>Agreement for OSCORE</name>
        <t>TBD</t>
        <t>Editor's note: expected means to cover include:</t>
        <ul spacing="normal">
          <li>
            <t>Pre-provisioning</t>
          </li>
          <li>
            <t>In EDHOC</t>
          </li>
          <li>
            <t>In the OSCORE profile of the ACE framework</t>
          </li>
          <li>
            <t>In OMA Lightweight Machine-to-Machine (LwM2M)</t>
          </li>
        </ul>
      </section>
      <section anchor="agreement-for-group-oscore">
        <name>Agreement for Group OSCORE</name>
        <t>TBD</t>
        <t>Editor's note: expected means to cover include:</t>
        <ul spacing="normal">
          <li>
            <t>The OSCORE Group Manager based on the ACE framework  </t>
            <ul spacing="normal">
              <li>
                <t>Messages to (candidate) group members</t>
              </li>
              <li>
                <t>Messages to external signature verifiers</t>
              </li>
              <li>
                <t>Message to/from an Administrator</t>
              </li>
            </ul>
          </li>
          <li>
            <t>A CoAP server supporting observe multicast notifications and self-managing the OSCORE group for its group observations.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="sec-security-considerations">
      <name>Security Considerations</name>
      <t>The same security considerations from <xref target="RFC8613"/> and <xref target="I-D.ietf-core-oscore-groupcomm"/> hold for this document when messages are protected with OSCORE or Group OSCORE, respectively. Furthermore, the following considerations also apply.</t>
      <section anchor="minimum-length-of-sender-sequence-numbers">
        <name>Minimum Length of Sender Sequence Numbers</name>
        <t>As per <xref target="sec-oscore-sender"/>, a Sender Sequence Number value has to be at least 65536 when using the method defined in this document.</t>
        <t>This ensures that the "Partial IV" field of the OSCORE option has a length of at least 3 bytes. In turn, this defeats possible attempts to track an endpoint or to fingerprint its traffic that leverage a transition of the length of the "Partial IV" field from 1 to 2 bytes, or from 2 to 3 bytes.</t>
        <t>An exception applies to the special case discussed in <xref target="edhoc-oscore-request"/>, where the requirement above does not apply for the one-off EDHOC + OSCORE request <xref target="RFC9668"/>. However, the requirement does apply for all the messages that the two endpoints exchange after the EDHOC + OSCORE request and that are protected with the same OSCORE Security Context.</t>
      </section>
      <section anchor="limitations">
        <name>Limitations</name>
        <t>The method defined in this document provides confidentiality protection of the Partial IV against passive adversaries.</t>
        <t>An active adversary could guess the plain Partial IV and have a recipient OSCORE endpoint confirm the guesses, e.g., taking advantage of timing side channels. For instance, this can be the case when the recipient endpoint discards an incoming message that is detected as a replay, i.e., without attempting to decrypt and verify the message and hence revealing information through timing side channels.</t>
        <t>Similarly, depending on whether the processing of an incoming request message fails due to a replay detection or instead to a failed decryption and verification, the recipient endpoint would follow-up by sending different, unprotected error response messages, which the adversary can leverage to confirm the guesses.</t>
      </section>
      <section anchor="encryption-robustness">
        <name>Encryption Robustness</name>
        <t>When performing the steps at <xref target="sec-oscore-sender"/> and <xref target="sec-oscore-recipient"/>, using the same Obfuscation Key and SAMPLE_1 more than once risks compromising the encryption of the PIV value in the "Partial IV" field. That is, encrypting the PIV_A and PIV_B values of two different "Partial IV" fields by leveraging the same Obfuscation Key and SAMPLE_1 reveals the exclusive OR of PIV_A and PIV_B.</t>
        <t>Assuming that SAMPLE_1 is consistent with the outcome of a pseudorandom function (PRF), if L bits are sampled, then the odds that two SAMPLE_1 byte strings of length L are identical approach P = 2<sup>-L/2</sup>, that is, the birthday bound. For messages protected with (Group) OSCORE, SAMPLE_1 has a minimum length L_MIN of 72 bits and a maximum length L_MAX of 128 bits. Therefore, P is at least 2<sup>36</sup> (when the CoAP payload has a length of L_MIN bits) and at most 2<sup>64</sup> (when the CoAP payload has a length of L_MAX bits or more).</t>
      </section>
      <section anchor="impact-on-endpoint-trackability">
        <name>Impact on Endpoint Trackability</name>
        <t>The tracking of an OSCORE endpoint that migrates to a new network path can be largely counteracted by using the method defined in this document, if combined with the use of new source addressing information (e.g., IP address and link-layer address). If addressing information does not change upon network migration, an on-path adversary might still be able to track an endpoint.</t>
        <t>Even if combined with the change of addressing information upon network migration, the method defined in this document does not prevent other properties of network packets, e.g., their timing or length, from being used to correlate activities of the same endpoint across different network paths.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>TBD</t>
      <t>Editor's note: expected actions are registrations of new parameters that effectively enable the means defined in <xref target="sec-agreement"/>.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC8613">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <date month="July" year="2019"/>
            <abstract>
              <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE). OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
              <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration. Therefore, this document updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8613"/>
          <seriesInfo name="DOI" value="10.17487/RFC8613"/>
        </reference>
        <reference anchor="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="RFC9031">
          <front>
            <title>Constrained Join Protocol (CoJP) for 6TiSCH</title>
            <author fullname="M. Vučinić" initials="M." role="editor" surname="Vučinić"/>
            <author fullname="J. Simon" initials="J." surname="Simon"/>
            <author fullname="K. Pister" initials="K." surname="Pister"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes the minimal framework required for a new device, called a "pledge", to securely join a 6TiSCH (IPv6 over the Time-Slotted Channel Hopping mode of IEEE 802.15.4) network. The framework requires that the pledge and the JRC (Join Registrar/Coordinator, a central entity), share a symmetric key. How this key is provisioned is out of scope of this document. Through a single CoAP (Constrained Application Protocol) request-response exchange secured by OSCORE (Object Security for Constrained RESTful Environments), the pledge requests admission into the network, and the JRC configures it with link-layer keying material and other parameters. The JRC may at any time update the parameters through another request-response exchange secured by OSCORE. This specification defines the Constrained Join Protocol and its CBOR (Concise Binary Object Representation) data structures, and it describes how to configure the rest of the 6TiSCH communication stack for this join process to occur in a secure manner. Additional security mechanisms may be added on top of this minimal framework.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9031"/>
          <seriesInfo name="DOI" value="10.17487/RFC9031"/>
        </reference>
        <reference anchor="RFC9052">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
              <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="96"/>
          <seriesInfo name="RFC" value="9052"/>
          <seriesInfo name="DOI" value="10.17487/RFC9052"/>
        </reference>
        <reference anchor="RFC9528">
          <front>
            <title>Ephemeral Diffie-Hellman Over COSE (EDHOC)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Preuß Mattsson" initials="J." surname="Preuß Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <date month="March" year="2024"/>
            <abstract>
              <t>This document specifies Ephemeral Diffie-Hellman Over COSE (EDHOC), a very compact and lightweight authenticated Diffie-Hellman key exchange with ephemeral keys. EDHOC provides mutual authentication, forward secrecy, and identity protection. EDHOC is intended for usage in constrained scenarios, and a main use case is to establish an Object Security for Constrained RESTful Environments (OSCORE) security context. By reusing CBOR Object Signing and Encryption (COSE) for cryptography, Concise Binary Object Representation (CBOR) for encoding, and Constrained Application Protocol (CoAP) for transport, the additional code size can be kept very low.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9528"/>
          <seriesInfo name="DOI" value="10.17487/RFC9528"/>
        </reference>
        <reference anchor="RFC9668">
          <front>
            <title>Using Ephemeral Diffie-Hellman Over COSE (EDHOC) with the Constrained Application Protocol (CoAP) and Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="M. Tiloca" initials="M." surname="Tiloca"/>
            <author fullname="R. Höglund" initials="R." surname="Höglund"/>
            <author fullname="S. Hristozov" initials="S." surname="Hristozov"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <date month="November" year="2024"/>
            <abstract>
              <t>The lightweight authenticated key exchange protocol Ephemeral Diffie-Hellman Over COSE (EDHOC) can be run over the Constrained Application Protocol (CoAP) and used by two peers to establish a Security Context for the security protocol Object Security for Constrained RESTful Environments (OSCORE). This document details this use of the EDHOC protocol by specifying a number of additional and optional mechanisms, including an optimization approach for combining the execution of EDHOC with the first OSCORE transaction. This combination reduces the number of round trips required to set up an OSCORE Security Context and to complete an OSCORE transaction using that Security Context.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9668"/>
          <seriesInfo name="DOI" value="10.17487/RFC9668"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-groupcomm">
          <front>
            <title>Group Object Security for Constrained RESTful Environments (Group OSCORE)</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <date day="12" month="September" year="2025"/>
            <abstract>
              <t>   This document defines the security protocol Group Object Security for
   Constrained RESTful Environments (Group OSCORE), providing end-to-end
   security of messages exchanged with the Constrained Application
   Protocol (CoAP) between members of a group, e.g., sent over IP
   multicast.  In particular, the described protocol defines how OSCORE
   is used in a group communication setting to provide source
   authentication for CoAP group requests, sent by a client to multiple
   servers, and for protection of the corresponding CoAP responses.
   Group OSCORE also defines a pairwise mode where each member of the
   group can efficiently derive a symmetric pairwise key with each other
   member of the group for pairwise OSCORE communication.  Group OSCORE
   can be used between endpoints communicating with CoAP or CoAP-
   mappable HTTP.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-groupcomm-27"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-key-update">
          <front>
            <title>Key Update for OSCORE (KUDOS)</title>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="7" month="July" year="2025"/>
            <abstract>
              <t>   Communications with the Constrained Application Protocol (CoAP) can
   be protected end-to-end at the application-layer by using the
   security protocol Object Security for Constrained RESTful
   Environments (OSCORE).  Under some circumstances, two CoAP endpoints
   need to update their OSCORE keying material before communications can
   securely continue, e.g., due to approaching key usage limits.  This
   document defines Key Update for OSCORE (KUDOS), a lightweight key
   update procedure that two CoAP endpoints can use to update their
   OSCORE keying material by establishing a new OSCORE Security Context.
   Accordingly, this document updates the use of the OSCORE flag bits in
   the CoAP OSCORE Option as well as the protection of CoAP response
   messages with OSCORE.  Also, it deprecates the key update procedure
   specified in Appendix B.2 of RFC 8613.  Therefore, this document
   updates RFC 8613.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-key-update-11"/>
        </reference>
        <reference anchor="AES" target="https://doi.org/10.6028/NIST.FIPS.197-upd1">
          <front>
            <title>Advanced encryption standard (AES)</title>
            <author>
              <organization>NIST</organization>
            </author>
            <date year="2023" month="May"/>
          </front>
        </reference>
        <reference anchor="COSE.Algorithms" target="https://www.iana.org/assignments/cose/cose.xhtml#algorithms">
          <front>
            <title>COSE Algorithms</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.ietf-core-groupcomm-bis">
          <front>
            <title>Group Communication for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Esko Dijk" initials="E." surname="Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="25" month="September" year="2025"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP) is a web transfer
   protocol for constrained devices and constrained networks.  In a
   number of use cases, constrained devices often naturally operate in
   groups (e.g., in a building automation scenario, all lights in a
   given room may need to be switched on/off as a group).  This document
   specifies the use of CoAP for group communication, including the use
   of UDP/IP multicast as the default underlying data transport.  Both
   unsecured and secured CoAP group communication are specified.
   Security is achieved by use of the Group Object Security for
   Constrained RESTful Environments (Group OSCORE) protocol.  The target
   application area of this specification is any group communication use
   cases that involve resource-constrained devices or networks that
   support CoAP.  This document replaces and obsoletes RFC 7390, while
   it updates RFC 7252 and RFC 7641.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-groupcomm-bis-15"/>
        </reference>
        <reference anchor="I-D.ietf-ace-key-groupcomm-oscore">
          <front>
            <title>Key Management for Group Object Security for Constrained RESTful Environments (Group OSCORE) Using Authentication and Authorization for Constrained Environments (ACE)</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="28" month="August" year="2025"/>
            <abstract>
              <t>   This document defines an application profile of the Authentication
   and Authorization for Constrained Environments (ACE) framework, to
   request and provision keying material in group communication
   scenarios that are based on the Constrained Application Protocol
   (CoAP) and are secured with Group Object Security for Constrained
   RESTful Environments (Group OSCORE).  This application profile
   delegates the authentication and authorization of Clients, which join
   an OSCORE group through a Resource Server acting as Group Manager for
   that group.  This application profile leverages protocol-specific
   transport profiles of ACE to achieve communication security, server
   authentication, and proof of possession for a key owned by the Client
   and bound to an OAuth 2.0 access token.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-key-groupcomm-oscore-18"/>
        </reference>
      </references>
    </references>
    <?line 687?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank <contact fullname="Christian Amsüss"/>, <contact fullname="Carsten Bormann"/>, and <contact fullname="Martine Lenders"/> for their comments and feedback.</t>
      <t>This work was supported by the Sweden's Innovation Agency VINNOVA within the EUREKA CELTIC-NEXT project CYPRESS.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
k9C/98Z8QPuJPe7j8oDuE/tfpfvE7tLuE0v4rdIwfLwWFNIKpqIBxVMaXl/Q
jSKHuZI+FNLwY5lt9tmu4W/XTqNWW0/QJqMEleu3zHiSjhlP1jBjNUfY9jpL
2G5X2vgyX8i3bnmbQ+oRi4+H96E/A3qhvKVhJEz1FiTC0rPg+nku6/SvsXzj
xg9TDFrJ7a18I7LtJU3KXkiPn6vqc6eLfTbMe+KHPn5FStQVxS5zl8mYnnPp
hVZ7rfyC/mSxRDx8KvqCF5EZwFkFQ3+zd1T3Di+6Rzo9i1lQfAufmeoUHA/D
9XehbJWAxux80Z/il9TtrVwKpgId4T/9KV8L0HehhUXpq7wi/4+Iwx1xZK02
/OrzNPirOeQM5uiWGQZt6RvAfZW5tep0NjQaJFn0BQmcMyRU6Ngumbam7jeT
D075jqVWiggeb2oaJBQbuAkcjagtAdGaGZA1fVRvqjLr4A/42o/9XrKup/Jm
9EETQIaLgCFY65H0UXqjbVnavv72im1O5DgUctwGG6bTzvmjORP21r/Iowyy
xSA7d283ZPP0LKMCca5H5bZA4oSThc4cF+Z8eY+4Fyu6EWJ/H9cdc66Ml8sh
oz3LQlfk13CQwOUOHmCDWKLd9QHlzaJWS24jyPzN7OUTLG5nGOoZNudWC8Te
gli/pDYCh1czeHU8LsftrYqv3zy53/cYjp97Ndwgvb3C+fsy76+1+1ju35f4
f5ZGQ1VmVO43K5f4Yt+lhW2MWnsP8l5au0/lviyxrGD3GT1WTCLLzVDHqKmu
aO78DIimm7lrE6J2yBFTToSGp7H5P0e3DoJ4sJjBZHQZVjaoX6EaZn0ZQO6Q
V4ELCKYvhqNWY7MxBGRLBvUCbybeg7gMh9EtV5TdVwhJECkkRHC/sSO/ix/v
3G+2muuZQQ5truo4uNoXrRABX8EfbSGTwX/+7jzS1t4anRH/MX3SX6FT+kR9
HL+e7FxGgb+LzkrR+YvGDNYS3mizV/jeD2u/uQot5W04iyeC9TXTNMDbK9P7
z2rJuRI/tj9nicPxk80CPbzb5ooCmN87b/6qO2/y2f/eY/P3HpvrObqurPhl
O2lKen6F+Ml01eSGV0Yqu0o6+0lriez11ThglbTOUk4nxVU1X1/QsnPNbf/e
vvO31b6zeweCAm+DXuq7Bt7hRA2uQQNyvxR52hjwU7zh+vqoVusOA7CpviED
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

-->

</rfc>
