<?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.14 (Ruby 3.3.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-amsuess-core-cachable-oscore-11" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.0 -->
  <front>
    <title abbrev="Cacheable OSCORE">Cacheable OSCORE</title>
    <seriesInfo name="Internet-Draft" value="draft-amsuess-core-cachable-oscore-11"/>
    <author initials="C." surname="Amsüss" fullname="Christian Amsüss">
      <organization/>
      <address>
        <postal>
          <country>Austria</country>
        </postal>
        <email>christian@amsuess.com</email>
      </address>
    </author>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <date year="2025" month="July" day="06"/>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>CoAP, OSCORE, multicast, caching, proxy</keyword>
    <abstract>
      <?line 83?>

<t>Group communication with the Constrained Application Protocol (CoAP) can be secured end-to-end using Group Object Security for Constrained RESTful Environments (Group OSCORE), also across untrusted intermediary proxies. However, this sidesteps the proxies' abilities to cache responses from the origin server(s). This specification restores cacheability of protected responses at proxies, by introducing consensus requests which any client in a group can send to one server or multiple servers in the same group.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
  CORE 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/chrysn/core-cachable-oscore/"/>.</t>
    </note>
  </front>
  <middle>
    <?line 87?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Constrained Application Protocol (CoAP) <xref target="RFC7252"/> supports also group communication, for instance over UDP and IP multicast <xref target="I-D.ietf-core-groupcomm-bis"/>. In a group communication environment, exchanged messages can be secured end-to-end by using Group Object Security for Constrained RESTful Environments (Group OSCORE) <xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
      <t>Requests and responses protected with the group mode of Group OSCORE can be read by all group members, i.e., not only by the intended recipient(s), thus achieving group-level confidentiality.</t>
      <t>A core functionality of intermediary proxies is caching.
With any security mechanism for CoAP, this presents operators with a trade-off between required trust and provided performance:</t>
      <ul spacing="normal">
        <li>If an intermediary proxy is trusted, it can inspect traffic that is going through, cache it, and provide cached responses.
<!-- This can be realized in TLS or any other 1:1 scheme by handing broad certificates to proxies, or in Group OSCORE by sending the request in group mode and then inspecting whether the response is from origin or from the proxy –
but those details would just distract here. -->
        </li>
        <li>An untrusted proxy, while possible with OSCORE (and group OSCORE),
sees different ciphertext for different requests even when they access the same resource,
and even if it could somehow produce a cache hit,
cached responses would be rejected by OSCORE's request-response matching.</li>
      </ul>
      <t>This document provides a way out of the trade-off situation: It enables cacheability of protected responses for proxies that are not members of the OSCORE group (and are unaware of OSCORE in general). To this end, it builds on the concept of "consensus request" initially considered in <xref target="I-D.ietf-core-observe-multicast-notifications"/>, and defines "Deterministic Request" as a convenient incarnation of such concept.</t>
      <t>All clients wishing to send a particular GET or FETCH request are able to deterministically compute the same protected request, using a variation of the pairwise mode of Group OSCORE. It follows that cache hits become possible at the proxy, which can thus serve clients in the group from its cache. Like in <xref target="I-D.ietf-core-observe-multicast-notifications"/>, this requires that clients and servers are already members of a suitable OSCORE group.</t>
      <t>Cacheability of protected responses is useful also in applications where several clients wish to retrieve the same object from a single server.
Some security properties of OSCORE are dispensed with, in order to gain other desirable properties.</t>
      <t>In order to clearly handle the protocol's security properties,
and to broaden applicability to group situations outside the deterministic case,
the technical implementation is split into two halves:</t>
      <ul spacing="normal">
        <li>maintaining request-response bindings in the absence of request source authentication; and</li>
        <li>building and processing of Deterministic Requests
(which have no source authentication, and thus require the former).</li>
      </ul>
      <section anchor="use-cases">
        <name>Use Cases</name>
        <t>When firmware updates are delivered using CoAP, many similar devices fetch the same large data at the same time. Collecting such large data at a proxy from its cache not only keeps the traffic low, but also lets the clients ride single file to hide their numbers <xref target="SW-EPIV"/> and identities. By using protected Deterministic Requests as defined in this document, it is possible to efficiently perform data collection at a proxy also when the firmware updates are protected end-to-end.</t>
        <t>When relying on intermediaries to fan out the delivery of multicast data protected end-to-end as in <xref target="I-D.ietf-core-observe-multicast-notifications"/>, the use of protected Deterministic Requests as defined in this document allows for a more efficient setup, by reducing the amount of message exchanges and enabling early population of cache entries (see <xref target="det-requests-for-notif"/>).</t>
        <t>When building RESTful networks following the patterns of Information-Centric Networking (ICN),
CoAP proxies take the role of forwarding nodes.
Caching plays a large role in such networks,
and cacheable OSCORE provides a compatible security mechanism <xref target="ICN-paper"/>.</t>
        <t>When DNS messages are transported over CoAP <xref target="I-D.ietf-core-dns-over-coap"/>, it is recommended to use OSCORE for protecting such messages. By restoring cacheability of OSCORE-protected responses, it becomes possible to benefit from the cache retrieval of such CoAP responses that particularly transport DNS messages.</t>
      </section>
      <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 terms and concepts of CoAP <xref target="RFC7252"/> and its method FETCH <xref target="RFC8132"/>, group communication for CoAP <xref target="I-D.ietf-core-groupcomm-bis"/>, COSE <xref target="RFC9052"/><xref target="RFC9053"/>, OSCORE <xref target="RFC8613"/>, and Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
        <t>This document also introduces the following new terms.</t>
        <ul spacing="normal">
          <li>
            <t>Consensus Request: a CoAP request that multiple clients use to repeatedly access a particular resource.
In this document, it exclusively refers to requests protected with Group OSCORE to a resource hosted at one or more servers in the OSCORE group.  </t>
            <t>
A Consensus Request has all the properties relevant to caching, but its transport dependent properties (e.g., Token or Message ID) are not defined. Thus, different requests on the wire can be said to "be the same Consensus Request" even if they have different Tokens or source addresses.  </t>
            <t>
The Consensus Request is the reference for request-response binding.
 In general, a client processing a response to a Consensus Request did not generate (and thus sign) the consensus request.
 The client not only needs to decrypt the Consensus Request to understand a corresponding response (for example to tell which path was requested),
 but it also needs to verify that this is the only Consensus Request that could elicit this response.</t>
          </li>
          <li>
            <t>Deterministic Client: a fictitious member of an OSCORE group, having no Sender Sequence Number, no asymmetric key pair, and no Recipient Context.  </t>
            <t>
The Group Manager responsible for the OSCORE group (see <xref section="12" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>) sets up the Deterministic Client, and assigns it a unique Sender ID like for other group members. Furthermore, the Deterministic Client has only the minimum common set of privileges shared by all group members.</t>
          </li>
          <li>Deterministic Request: a Consensus Request generated by the Deterministic Client. The use of Deterministic Requests is defined in <xref target="sec-deterministic-requests"/>.</li>
          <li>
            <t>Ticket Request: a Consensus Request generated by the server itself.  </t>
            <t>
This term is not used in the main document, but is useful in comparison with other applications of Consensus Requests
that are generated in a different way than as Deterministic Requests.
The prototypical Ticket Request is the Phantom Request defined in <xref target="I-D.ietf-core-observe-multicast-notifications"/>.  </t>
            <t>
In <xref target="sec-ticket-requests"/>, the term is used to bridge the gap with that document.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="oscore-nosourceauth">
      <name>OSCORE Message Processing without Source Authentication</name>
      <t>In OSCORE, the response is cryptographically bound to the request through CBOR items in their authenticated encryption's AAD (Additional Authenticated Data):
"request_kid" and "request_piv".
Group OSCORE adds "request_kid_context" to that list.
Hereafter, those items are referred to as "request_details".</t>
      <t>The security of such binding depends on the server obtaining source authentication for the request,
and on that source matching the request_details:
if this precondition is not fulfilled, a malicious group member could alter a request to the server (without altering the request_details above),
and the client would still accept the response as if it were a response to its request.</t>
      <t>Source authentication is thus a precondition for the secure use of OSCORE and Group OSCORE.
However, it is hard to provide when:</t>
      <ul spacing="normal">
        <li>Requests are built exclusively using shared keying material, like in the case of a Deterministic Client.</li>
        <li>Requests are sent without source authentication, or their source authentication is not checked. (This was part of <xref target="I-D.ietf-core-oscore-groupcomm"/> in revisions before version -12)</li>
      </ul>
      <t>This document does not [ yet? ] give full guidance on how to restore request-response binding for the general case,
but currently only offers suggestions:</t>
      <ul spacing="normal">
        <li>The response can contain the full request. An option that allows doing that is presented in <xref target="I-D.bormann-core-responses"/>.</li>
        <li>The response can contain a cryptographic hash of the full request. This is used by the method specified in this document, as defined in <xref target="ssec-request-hash-option"/>.
<!-- * The request_details above can be transported in a Class E option (encrypted and integrity protected) or a Class I option (unencrypted, but part of the AAD hence integrity protected).
The latter has the advantage that the option can be removed in transit and reconstructed at the receiver. -->
        </li>
        <li>Alternatively, the agreed-on request data can be placed in a different position in the AAD,
or take part to the derivation of the OSCORE Security Context.
In the latter case, care needs to be taken to never initialize a Security Context twice with the same input,
as that would lead to reuse of the AEAD nonce.</li>
      </ul>
      <t>[ Suggestion for any OSCORE v2: avoid request_details in the request's AAD as individual elements. Rather than having 'request_kid', 'request_piv' (and, in Group OSCORE, 'request_kid_context') as separate fields, they can better be something more pluggable.
This would avoid the need to make up an option before processing, and would allow just plugging in the (hash of the) request in there as replacing the elements for the request_details. ]</t>
      <t>Additional care has to be taken in ensuring that request_details that are not expressed in the request itself are captured. For instance, these include an indication of the Security Context from which the request is assumed to have been originated.</t>
      <t>Requests without source authentication have to be processed assuming only the minimal possible privilege of the requester
[ which is currently described as the authorization of the Deterministic Client, and may be moved up here in later versions of this document ].
If a response is built to such a request and contains data more sensitive than that
(which might be justified if the response is protected for an authorized group member in pairwise mode),
special consideration for any side channels like response size or timing is required.</t>
    </section>
    <section anchor="sec-deterministic-requests">
      <name>Deterministic Requests</name>
      <t>This section defines a method for clients starting from a same intended CoAP request to independently build the same, corresponding Deterministic Request protected with Group OSCORE.</t>
      <section anchor="sec-deterministic-requests-unprotected">
        <name>Deterministic Unprotected Request</name>
        <t>When clients build their unprotected request,
they can already minimize variability
and thus maximize reproducibility.</t>
        <t>This document does not set out full guidelines for minimizing the variation,
but considered starting points are:</t>
        <ul spacing="normal">
          <li>
            <t>Set the inner Observe option to 0 even if no observation is intended (and hence no outer Observe option is set). Thus, both Observe and non-Observe requests can be aggregated into a single request, which is upstreamed as an observation at the latest when any Observe request reaches a caching proxy.  </t>
            <t>
In this case, following a Deterministic Request that includes only an inner Observe option, servers include an inner Observe option (but no outer Observe option) in a successful response sent as reply. Also, when receiving a response to such a Deterministic Request previously sent, clients have to silently ignore the inner Observe option in that response.</t>
          </li>
          <li>Avoid setting the ETag option in requests on a whim.
Only set it when there was a recent response with that ETag.
When obtaining later blocks, do not send the known-stale ETag.</li>
          <li>
            <t>In block-wise transfers, maximally sized large inner blocks (szx=6) <bcp14>SHOULD</bcp14> be selected.
This serves not only to align the clients on consistent cache entries,
but also helps amortize the additional data transferred in the per-message signatures.  </t>
            <t>
Outer block-wise transfer can then be used if these messages exceed a hop's efficiently usable MTU size.  </t>
            <t>
(If BERT <xref target="RFC8323"/> is usable with OSCORE, its use is fine as well;
in that case, the server picks a consistent block size for all clients anyway).
<!-- see https://github.com/core-wg/corrclar/pull/45 -->
            </t>
          </li>
          <li>The Padding option defined in <xref target="sec-padding"/> can be used to limit an adversary's ability to deduce the content and the target resource of Deterministic Requests from their length. In particular, all Deterministic Requests of the same class (ideally, all requests to a particular server) can be padded to reach the same total length, that should be agreed on among all users of the same OSCORE Security Context.</li>
        </ul>
        <!--
MT: proposed  s/should be agreed/SHOULD be agreed
-->

<ul spacing="normal">
          <li>
            <t>Clients should not send any inner Echo options <xref target="RFC9175"/> in Deterministic Requests.  </t>
            <t>
This limits the use of the Echo option in combination with Deterministic Requests to unprotected (outer) options,
and thus is limited to testing the reachability of the client.
This is not practically limiting, since the use as an inner option would be to prove freshness,
which is something Deterministic Requests simply cannot provide anyway.</t>
          </li>
        </ul>
        <t>These guidelines only serve to ensure that cache entries are utilized; failure to follow them has no more severe consequences than decreasing the utility and effectiveness of a cache.</t>
      </section>
      <section anchor="ssec-deterministic-requests-design">
        <name>Design Considerations</name>
        <t>The hard part is determining a consensus pair (key, nonce) to be used with the AEAD cipher for encrypting the plain CoAP request and obtaining the Deterministic Request as a result, while also avoiding the reuse of the same (key, nonce) pair across different requests.</t>
        <t>Diversity can conceptually be enforced by applying a cryptographic hash function to the complete input of the encryption operation over the plain CoAP request (i.e., the AAD and the plaintext of the COSE object), and then using the result as source of uniqueness.
Any non-malleable cryptographically secure hash of sufficient length to make collisions sufficiently unlikely is suitable for this purpose.</t>
        <t>A tempting possibility is to use a fixed (group) key, and use the hash as a deterministic AEAD nonce for each Deterministic Request through the Partial IV component (see <xref section="5.2" sectionFormat="of" target="RFC8613"/>). However, the 40 bit available for the Partial IV are by far insufficient to ensure that the deterministic nonce is not reused across different Deterministic Requests. Even if the full deterministic AEAD nonce could be set, the sizes used by common algorithms would still be too small.</t>
        <t>As a consequence, the proposed method takes the opposite approach, by considering a fixed deterministic AEAD nonce, while deriving a different deterministic encryption key for each Deterministic Request. That is, the hash computed over the plain CoAP request is taken as input to the key derivation. As an advantage, this approach does not require to transport the computed hash in the OSCORE option.</t>
        <t>[ Note: This has a further positive side effect arising with version -11 of Group OSCORE. That is, since the full encoded OSCORE option is part of the AAD, it avoids a circular dependency from feeding the AAD into the hash computation, which in turn needs crude workarounds like building the full AAD twice, or zeroing out the hash-to-be. ]</t>
      </section>
      <section anchor="ssec-request-hash-option">
        <name>Request-Hash</name>
        <t>In order to transport the hash of the plain CoAP request, a new CoAP option is defined, which <bcp14>MUST</bcp14> be supported by clients and servers that support Deterministic Requests.</t>
        <t>The option is called Request-Hash and its properties are summarized in <xref target="request-hash-table"/>, which extends Table 4 of <xref target="RFC7252"/>. The option is Elective, Safe-to-Forward, part of the Cache-Key, and not repeatable.</t>
        <table align="center" anchor="request-hash-table">
          <name>The Request-Hash Option (C=Critical, U=Unsafe, N=NoCacheKey, R=Repeatable)</name>
          <thead>
            <tr>
              <th align="left">No.</th>
              <th align="left">C</th>
              <th align="left">U</th>
              <th align="left">N</th>
              <th align="left">R</th>
              <th align="left">Name</th>
              <th align="left">Format</th>
              <th align="left">Length</th>
              <th align="left">Default</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD1</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left">Request-Hash</td>
              <td align="left">opaque</td>
              <td align="left">any</td>
              <td align="left">(none)</td>
            </tr>
          </tbody>
        </table>
        <t>The Request-Hash option is identical in all its properties to the Request-Tag option defined in <xref target="RFC9175"/>, with the following exceptions:</t>
        <ul spacing="normal">
          <li>It is not repeatable.</li>
          <li>
            <t>It may be arbitrarily long.  </t>
            <t>
Implementations can limit its length to that of the longest output of the supported hash functions.</t>
          </li>
          <li>
            <t>It may be present in responses (TBD: Does this affect any other properties?).  </t>
            <t>
A response's Request-Hash option is, as a matter of default value,
equal to the request's Request-Hash option.
The response is only valid if the value of its Request-Hash option is equal to the value of the Request-Hash option in the corresponding request.  </t>
            <t>
Servers (including proxies) thus generally should not need to include the Request-Hash option explicitly in responses,
especially as a matter of bandwidth efficiency.  </t>
            <t>
A reason (and, currently, the only known) to actually include a Request-Hash option in a response
is the possible use of non-traditional responses as described in <xref target="I-D.bormann-core-responses"/>,
which in terms of that document are non-matching to the request (and thus easily usable).
The Request-Hash option in the response allows populating caches (see below) and enables the decryption of a response sent as a reply to a Consensus Request.
In the context of non-traditional responses, the Request-Hash value of the request corresponding to a response can be inferred from the value of the Request-Hash option in the response.</t>
          </li>
          <li>
            <t>A proxy <bcp14>MAY</bcp14> use any fresh cached response from the selected server to respond to a request with the same Request-Hash;
this may save it some memory.  </t>
            <t>
When responding to a request that includes a Request-Hash option, the proxy <bcp14>MAY</bcp14> add a Request-Hash option to the response, if the option is not already present in the response, or remove the Request-Hash option from the response, if the option is already present in the response. In either case, the Request-Hash option in the response <bcp14>MUST</bcp14> have the same value of the Request-Hash option in the request.</t>
          </li>
          <li>When used with a Deterministic Request, this option is created at message protection time by the sender, and used before message unprotection by the recipient. Therefore, in this use case, it is treated as Class U for OSCORE <xref target="RFC8613"/> in requests. In the same application, for responses, it is treated as Class I, and often elided from sending (but reconstructed at the receiver). Other uses of this option can put it into different classes for the OSCORE processing.</li>
        </ul>
        <t>This option achieves the request-response binding described in <xref target="oscore-nosourceauth"/>.</t>
      </section>
      <section anchor="ssec-use-deterministic-requests">
        <name>Use of Deterministic Requests</name>
        <t>This section defines how a Deterministic Request is built on the client side and then processed on the server side.</t>
        <section anchor="sssec-use-deterministic-requests-pre-conditions">
          <name>Preconditions</name>
          <t>The use of Deterministic Requests in an OSCORE group requires that the interested group members are aware of the Deterministic Client in the group. In particular, they need to know:</t>
          <ul spacing="normal">
            <li>
              <t>The Sender ID of the Deterministic Client, to be used as 'kid' parameter for the Deterministic Requests. This allows all group members to compute the Sender Key of the Deterministic Client.  </t>
              <t>
The Sender ID of the Deterministic Client is immutable throughout the lifetime of the OSCORE group. That is, it is not relinquished and it does not change upon changes of the group keying material following a group rekeying performed by the Group Manager.</t>
            </li>
            <li>The hash algorithm to use for computing the hash of a plain CoAP request, when producing the associated Deterministic Request.</li>
          </ul>
          <t>Group members have to obtain this information from the Group Manager. A group member can do that, for instance, when obtaining the group keying material upon joining the OSCORE group, or later on as an active member by interacting with the Group Manager.</t>
          <t>The joining process based on the Group Manager defined in <xref target="I-D.ietf-ace-key-groupcomm-oscore"/> can be easily extended to support the provisioning of information about the Deterministic Client. Such an extension is defined in <xref target="sec-obtaining-info"/> of this document.
No such extension is needed for the management interface of the Group Manager, as <xref target="I-D.ietf-ace-oscore-gm-admin"/> already includes the relevant parameters.</t>
        </section>
        <section anchor="sssec-use-deterministic-requests-client-req">
          <name>Client Processing of Deterministic Requests</name>
          <t>In order to build a Deterministic Request, the client protects the plain CoAP request using the pairwise mode of Group OSCORE (see <xref section="8" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>), with the following alterations.</t>
          <ol spacing="normal" type="1"><li>
              <t>When preparing the OSCORE option, the external_aad, the AEAD nonce:  </t>
              <ul spacing="normal">
                <li>The used Sender ID is the Deterministic Client's Sender ID.</li>
                <li>The element 'sender_cred' in the aad_array takes the empty CBOR byte string (0x40).</li>
                <li>The used Partial IV is 0.</li>
              </ul>
            </li>
            <li>
              <t>The client uses the hash function indicated for the Deterministic Client, and computes a hash H over the following input: the Sender Key of the Deterministic Client, concatenated with the binary serialization of the aad_array from Step 1, concatenated with the COSE plaintext.  </t>
              <t>
Note that the payload of the plain CoAP request (if any) is not self-delimiting, and thus hash functions are limited to non-malleable ones.</t>
            </li>
            <li>
              <t>The client derives the deterministic Pairwise Sender Key K as defined in <xref section="2.5.1" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>, with the following differences:  </t>
              <ul spacing="normal">
                <li>The Sender Key of the Deterministic Client is used as first argument of the HKDF.</li>
                <li>
                  <t>The hash H from Step 2 is used as second argument of the HKDF, i.e., as a pseudo IKM-Sender computable by all the group members.      </t>
                  <t>
Note that an actual IKM-Sender cannot be obtained, since there is no authentication credential (and public key included therein) associated with the Deterministic Client, to be used as Sender Authentication Credential and for computing an actual Diffie-Hellman Shared Secret.</t>
                </li>
                <li>The Sender ID of the Deterministic Client is used as value for the 'id' element of the 'info' parameter used as third argument of the HKDF.</li>
              </ul>
            </li>
            <li>The client includes a Request-Hash option in the request to protect, with value set to the hash H from Step 2.</li>
            <li>The client <bcp14>MAY</bcp14> include an inner Observe option set to 0 to be protected with OSCORE, even if no observation is intended (see <xref target="sec-deterministic-requests-unprotected"/>).</li>
            <li>The client protects the request using the pairwise mode of Group OSCORE as defined in <xref section="8.3" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>, using the AEAD nonce from Step 1, the deterministic Pairwise Sender Key K from Step 3 as AEAD encryption key, and the finalized AAD.</li>
            <li>The client <bcp14>MUST NOT</bcp14> include an unprotected (outer) Observe option if no observation is intended, even in case an inner Observe option was included at Step 5.</li>
            <li>The client <bcp14>MUST</bcp14> set FETCH as the outer code of the protected request to make it usable for a proxy's cache, even if no observation is intended <xref target="RFC7641"/>.</li>
          </ol>
          <t>The result is the Deterministic Request to be sent.</t>
          <t>Since the encryption key K is derived using material from the whole plain CoAP request, this (key, nonce) pair is only used for this very message, which is deterministically encrypted unless there is a hash collision between two Deterministic Requests.</t>
          <t>The deterministic encryption requires the used AEAD algorithm to be deterministic in itself. This is the case for all the AEAD algorithms currently registered with COSE in <xref target="COSE.Algorithms"/>. For future algorithms, a flag in the COSE registry is to be added.</t>
          <t>Note that, while the process defined above is based on the pairwise mode of Group OSCORE, no information about the server takes part to the key derivation or is included in the AAD. This is intentional, since it allows sending a Deterministic Request to multiple servers at once (see <xref target="det-req-one-to-many"/>). On the other hand, it requires later checks at the client when verifying a response to a Deterministic Request (see <xref target="ssec-use-deterministic-requests-response"/>).</t>
        </section>
        <section anchor="sssec-use-deterministic-requests-server-req">
          <name>Server Processing of Deterministic Requests</name>
          <t>Upon receiving a Deterministic Request, a server performs the following actions.</t>
          <t>A server that does not support Deterministic Requests would not be able to create the necessary Recipient Context, and thus will fail decrypting the request.</t>
          <ol spacing="normal" type="1"><li>If not already available, the server retrieves the information about the Deterministic Client from the Group Manager, and derives the Sender Key of the Deterministic Client.</li>
            <li>
              <t>The server recognizes the request to be a Deterministic Request, due to the presence of the Request-Hash option and to the 'kid' parameter of the OSCORE option set to the Sender ID of the Deterministic Client.  </t>
              <t>
If the 'kid' parameter of the OSCORE option specifies a different Sender ID than the one of the Deterministic Client, the server <bcp14>MUST NOT</bcp14> take the following steps, and instead processes the request as per <xref section="8.4" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>.</t>
            </li>
            <li>The server retrieves the hash H from the Request-Hash option.</li>
            <li>
              <t>The server derives a Recipient Context for processing the Deterministic Request. In particular:  </t>
              <ul spacing="normal">
                <li>The Recipient ID is the Sender ID of the Deterministic Client.</li>
                <li>The Recipient Key is derived as the key K in Step 3 of <xref target="sssec-use-deterministic-requests-client-req"/>, with the hash H retrieved at Step 3 of the present <xref target="sssec-use-deterministic-requests-server-req"/>.</li>
              </ul>
            </li>
            <li>The server verifies the request using the pairwise mode of Group OSCORE, as defined in <xref section="8.4" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>, using the Recipient Context from Step 4, with the difference that the server does not perform replay checks against a Replay Window (see below).</li>
          </ol>
          <t>In case of successful verification, the server <bcp14>MUST</bcp14> also perform the following actions, before possibly delivering the request to the application.</t>
          <ul spacing="normal">
            <li>
              <t>Starting from the recovered plain CoAP request, the server <bcp14>MUST</bcp14> recompute the same hash that the client computed at Step 2 of <xref target="sssec-use-deterministic-requests-client-req"/>.  </t>
              <t>
If the recomputed hash value differs from the value retrieved from the Request-Hash option at Step 3, the server <bcp14>MUST</bcp14> treat the request as invalid and <bcp14>MAY</bcp14> reply with an unprotected 4.00 (Bad Request) error response. The server <bcp14>MAY</bcp14> set an Outer Max-Age option with value zero. The diagnostic payload <bcp14>MAY</bcp14> contain the string "Decryption failed".  </t>
              <t>
This prevents an attacker that guessed a valid authentication tag for a given Request-Hash value to poison caches with incorrect responses.</t>
            </li>
            <li>
              <t>The server <bcp14>MUST</bcp14> verify that the unprotected request is safe to be processed in the REST sense, i.e., that it has no side effects. If verification fails, the server <bcp14>MUST</bcp14> discard the message and <bcp14>SHOULD</bcp14> reply with a protected 4.01 (Unauthorized) error response.  </t>
              <t>
Note that some CoAP implementations may not be able to prevent that an application produces side effects from a safe request. This may incur checking whether the particular resource handler is explicitly marked as eligible for processing Deterministic Requests. An implementation may also have a configured list of requests that are known to be side effect free, or even a pre-built list of valid hashes for all sensible requests for them, and reject any other request.  </t>
              <t>
These checks replace the otherwise present requirement that the server needs to check the Replay Window of the Recipient Context (see Step 5 above), which is inapplicable with the Recipient Context derived at Step 4 from the value of the Request-Hash option. The reasoning is analogous to the one in <xref target="I-D.amsuess-lwig-oscore"/> to treat the potential replay as answerable, if the handled request is side effect free.</t>
            </li>
          </ul>
        </section>
        <section anchor="ssec-use-deterministic-requests-response">
          <name>Response to a Deterministic Request</name>
          <t>When preparing a response to a Deterministic Request, the server treats the Request-Hash option as a Class I option. The value of the Request-Hash option <bcp14>MUST</bcp14> be equal to the value of the Request-Hash option that was specified in the corresponding Deterministic Request. Since the client is aware of the Request-Hash value to expect in the response, the server usually elides the Request-Hash option from the actually transmitted response.</t>
          <t>Treating the Request-Hash option as a Class I option creates the request-response binding, thus ensuring that no mismatched responses can be successfully unprotected and verified by the client (see <xref target="oscore-nosourceauth"/>).</t>
          <t>The client <bcp14>MUST</bcp14> reject a response to a Deterministic Request, if the Request-Hash value of the response is not equal to the value that was specified in the Request-Hash option of that Deterministic Request.</t>
          <!--
MT: Is there any possible reason in this application of the Request-Hash option to not elide it the from the response?
-->

<t>When preparing the response, the server performs the following actions.</t>
          <ol spacing="normal" type="1"><li>The server sets a non-zero Max-Age option, thus making the Deterministic Request usable for the proxy cache.</li>
            <li>The server preliminarily sets the Request-Hash option with the full Request-Hash value, i.e., the same value of the Request-Hash option that was specified in the Deterministic Request.</li>
            <li>If the Deterministic Request included an inner Observe option but not an outer Observe option and the resource is observable, the server <bcp14>MUST</bcp14> include an inner Observe option in the response.</li>
            <li>
              <t>The server <bcp14>MUST</bcp14> protect the response using the group mode of Group OSCORE, as defined in <xref section="7.3" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>. This is required to ensure that the client can verify the source authentication of the response, since the "pairwise" key used for producing the Deterministic Request is actually shared among all the group members.  </t>
              <t>
Note that the Request-Hash option is treated as Class I here.</t>
            </li>
            <li>The server <bcp14>MUST</bcp14> use its own Sender Sequence Number as Partial IV to protect the response, and include it as Partial IV in the OSCORE option of the response. This is required since the server does not perform replay protection on the Deterministic Request (see <xref target="ssec-use-deterministic-requests-response"/>).</li>
            <li>The server uses 2.05 (Content) as outer code even though the response is not necessarily an Observe notification <xref target="RFC7641"/>, in order to make the response cacheable.</li>
            <li>The server <bcp14>SHOULD</bcp14> remove the Request-Hash option from the response before sending the response to the client, as per the general option mechanism defined in <xref target="ssec-request-hash-option"/>.</li>
            <li>If the Deterministic Request included an inner Observe option but not an outer Observe option, the server <bcp14>MUST NOT</bcp14> include an outer Observe option in the response.</li>
          </ol>
          <t>Upon receiving the response, the client performs the following actions.</t>
          <ol spacing="normal" type="1"><li>In case the response includes a 'kid' in the OSCORE option, the client <bcp14>MUST</bcp14> verify it to be exactly the 'kid' of the server to which the Deterministic Request was sent, unless responses from multiple servers are expected (see <xref target="det-req-one-to-many"/>).</li>
            <li>
              <t>In case the response does not include the Request-Hash option, the client adds the Request-Hash option to the response, setting its value to the same value of the Request-Hash option that was specified in the Deterministic Request.  </t>
              <t>
Otherwise, the client <bcp14>MUST</bcp14> reject the response if the value of the Request-Hash option is different from the value of the Request-Hash option that was specified in the Deterministic Request.</t>
            </li>
            <li>The client verifies the response using the group mode of Group OSCORE, as defined in <xref section="7.4" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>. In particular, the client verifies the countersignature in the response, based on the 'kid' either retrieved from the OSCORE option of the response if present therein, or otherwise of the server to which the request was sent to. When verifying the response, the Request-Hash option is treated as a Class I option.</li>
            <li>
              <t>If the Deterministic Request included an inner Observe option but not an outer Observe option (see <xref target="sec-deterministic-requests-unprotected"/>), the client <bcp14>MUST</bcp14> silently ignore the inner Observe option in the response, which <bcp14>MUST NOT</bcp14> result in stopping the processing of the response.  </t>
              <t>
[ Note: This deviates from <xref section="4.1.3.5.2" sectionFormat="of" target="RFC8613"/>, but it is limited to a very specific situation, where the client and server both know exactly what happens. This does not affect the use of Group OSCORE in other situations. ]</t>
            </li>
          </ol>
        </section>
        <section anchor="det-req-one-to-many">
          <name>Deterministic Requests to Multiple Servers</name>
          <t>A Deterministic Request <em>can</em> be sent to a CoAP group, e.g., over UDP and IP multicast <xref target="I-D.ietf-core-groupcomm-bis"/>, thus targeting multiple servers at once.</t>
          <t>To simplify key derivation, such a Deterministic Request is still created in the same way as a one-to-one request and still protected with the pairwise mode of Group OSCORE, as defined in <xref target="sssec-use-deterministic-requests-client-req"/>.</t>
          <t>Note that this deviates from the recommendation in <xref section="7" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>, since the Deterministic Request in this case is indeed intended to multiple recipients, but yet it is protected with the pairwise mode. However, this is limited to a very specific situation, where the client and servers both know exactly what happens. This does not affect the use of Group OSCORE in other situations.</t>
          <t>[ Note: If it was protected with the group mode, the request hash would need to be fed into a group key derivation just for this corner case. Furthermore, there would need to be a signature in spite of no authentication credential (and public key included therein) associated with the Deterministic Client. ]</t>
          <t>When a server receives a request from the Deterministic Client as addressed to a CoAP group, the server proceeds as defined in <xref target="sssec-use-deterministic-requests-server-req"/>, with the difference that it <bcp14>MUST</bcp14> include its own Sender ID in the response, as 'kid' parameter of the OSCORE option.</t>
          <t>Although it is normally optional for the server to include its Sender ID when replying to a request protected in pairwise mode, it is required in this case for allowing the client to retrieve the Recipient Context associated with the server originating the response.</t>
          <t>If a server is member of a CoAP group, and it fails to successfully decrypt and verify an incoming Deterministic Request, then it is <bcp14>RECOMMENDED</bcp14> for that server to not send back any error message, in case the server asserts that the Deterministic Request was sent to the CoAP group (e.g., to the associated IP multicast address) or in case the server is not able to assert that altogether.</t>
        </section>
      </section>
    </section>
    <section anchor="sec-obtaining-info">
      <name>Obtaining Information about the Deterministic Client</name>
      <t>This section extends the Joining Process defined in <xref target="I-D.ietf-ace-key-groupcomm-oscore"/>, and based on the ACE framework for Authentication and Authorization <xref target="RFC9200"/>. Upon joining the OSCORE group, this enables a new group member to obtain from the Group Manager the required information about the Deterministic Client (see <xref target="sssec-use-deterministic-requests-pre-conditions"/>).</t>
      <t>With reference to the 'key' parameter included in the Join Response defined in <xref section="6.3" sectionFormat="of" target="I-D.ietf-ace-key-groupcomm-oscore"/>, the Group_OSCORE_Input_Material object specified as its value contains also the two additional parameters 'det_senderId' and 'det_hash_alg'. These are registered in <xref target="ssec-iana-security-context-parameter-registry"/> of this document and are defined as follows:</t>
      <ul spacing="normal">
        <li>The 'det_senderId' parameter, if present, has as value the OSCORE Sender ID assigned to the Deterministic Client by the Group Manager. This parameter <bcp14>MUST</bcp14> be present if the OSCORE group uses Deterministic Requests as defined in this document. Otherwise, this parameter <bcp14>MUST NOT</bcp14> be present.</li>
        <li>The 'det_hash_alg' parameter, if present, has as value the hash algorithm to use for computing the hash of a plain CoAP request, when producing the associated Deterministic Request. This parameter takes values from the "Value" column of the "COSE Algorithms" Registry <xref target="COSE.Algorithms"/>. This parameter <bcp14>MUST</bcp14> be present if the OSCORE group uses Deterministic Requests as defined in this document. Otherwise, this parameter <bcp14>MUST NOT</bcp14> be present.</li>
      </ul>
      <t>The same extension above applies also to the 'key' parameter included in a Key Distribution Response (see Sections <xref target="I-D.ietf-ace-key-groupcomm-oscore" section="9.1.1" sectionFormat="bare"/> and <xref target="I-D.ietf-ace-key-groupcomm-oscore" section="9.1.2" sectionFormat="bare"/> of <xref target="I-D.ietf-ace-key-groupcomm-oscore"/>).</t>
      <t>With reference to the 'key' parameter included in a Signature Verification Data Response defined in <xref section="9.6" sectionFormat="of" target="I-D.ietf-ace-key-groupcomm-oscore"/>, the Group_OSCORE_Input_Material object specified as its value contains also the 'det_senderId' parameter defined above.</t>
    </section>
    <section removeInRFC="true" anchor="implementation-status">
      <name>Implementation Status</name>
      <t>Note to RFC Editor: when deleting this section, please also delete RFC 7942 from the references of this document.</t>
      <t>(Boilerplate as per <xref section="2.1" sectionFormat="of" target="RFC7942"/>:)</t>
      <t>This section records the status of known implementations of the
protocol defined by this specification at the time of posting of
this Internet-Draft, and is based on a proposal described in
<xref target="RFC7942"/>.  The description of implementations in this section is
intended to assist the IETF in its decision processes in
progressing drafts to RFCs.  Please note that the listing of any
individual implementation here does not imply endorsement by the
IETF.  Furthermore, no effort has been spent to verify the
information presented here that was supplied by IETF contributors.
This is not intended as, and must not be construed to be, a
catalog of available implementations or their features.  Readers
are advised to note that other implementations may exist.</t>
      <t>According to <xref target="RFC7942"/>, "this will allow reviewers and working
groups to assign due consideration to documents that have the
benefit of running code, which may serve as evidence of valuable
experimentation and feedback that have made the implemented
protocols more mature.  It is up to the individual working groups
to use this information as they see fit".
<?line -22?>
      </t>
      <section anchor="implementation-in-californium">
        <name>Implementation in Californium</name>
        <ul spacing="normal">
          <li>Responsible organization: RISE Research Institutes of Sweden AB</li>
          <li>Implementation's name: Cacheable OSCORE for Eclipse Californium</li>
          <li>Available at: https://github.com/rikard-sics/californium/tree/cacheable-oscore</li>
          <li>
            <t>Description: Implementation in Java, building on Eclipse Californium, see:  </t>
            <ul spacing="normal">
              <li>https://github.com/eclipse-californium/californium</li>
              <li>http://eclipse.dev/californium/</li>
            </ul>
          </li>
          <li>Implementation's level of maturity: prototype</li>
          <li>Version compatibility: -08 (which is the last time the wire format changed)</li>
          <li>
            <t>Licensing: according to the same dual license of Eclipse Californium, i.e., according to the "Eclipse Distribution License 1.0" and the "Eclipse Public License 2.0". See:  </t>
            <ul spacing="normal">
              <li>https://github.com/eclipse-californium/californium/blob/main/LICENSE</li>
              <li>https://www.eclipse.org/org/documents/edl-v10.php</li>
              <li>https://www.eclipse.org/legal/epl-2.0/</li>
            </ul>
          </li>
          <li>Contact point: Marco Tiloca - marco.tiloca@ri.se</li>
          <li>Last updated: 2025-06-27</li>
        </ul>
      </section>
      <section anchor="implementation-in-aiocoap">
        <name>Implementation in aiocoap</name>
        <ul spacing="normal">
          <li>Implementation: aiocoap <eref target="https://christian.amsuess.com/tools/aiocoap/">https://christian.amsuess.com/tools/aiocoap/</eref></li>
          <li>Description: General purpose unconstrained implementation of CoAP</li>
          <li>Implementation maturity: Cacheable OSCORE is part of the regular release, but not well integrated in the security setup.</li>
          <li>Version compatibility: -08 (which is the last time the wire format changed)</li>
          <li>Licensing: MIT</li>
          <li>Contact point: Christian Amsüss</li>
          <li>Last updated: 2025-06-30</li>
        </ul>
      </section>
    </section>
    <section anchor="sec-security-considerations">
      <name>Security Considerations</name>
      <t>The same security considerations from <xref target="RFC7252"/>, <xref target="I-D.ietf-core-groupcomm-bis"/>, <xref target="RFC8613"/>, and <xref target="I-D.ietf-core-oscore-groupcomm"/> hold for this document.</t>
      <t>The following elaborates on how, compared to Group OSCORE, Deterministic Requests dispense with some of the OSCORE security properties, by just so much as to make caching possible.</t>
      <ul spacing="normal">
        <li>
          <t>A Deterministic Request is intrinsically designed to be replayed, as intended to be identically sent multiple times by multiple clients to the same server(s).  </t>
          <t>
Consistently, as per the processing defined in <xref target="sssec-use-deterministic-requests-server-req"/>, a server receiving a Deterministic Request does not perform replay checks against an OSCORE Replay Window.  </t>
          <t>
This builds on the following considerations.  </t>
          <ul spacing="normal">
            <li>
              <t>For a given request, the level of tolerance to replay risk is specific to the resource it operates upon (and therefore only known to the origin server). In general, if processing a request does not have state-changing side effects, the consequences of replay are not significant.      </t>
              <t>
Just like for what concerns the lack of source authentication (see below), the server must verify that the received Deterministic Request (more precisely, its handler) is side effect free. The distinct semantics of the CoAP request codes can help the server make that assessment.</t>
            </li>
            <li>Consistently with the point above, a server can choose whether it will process a Deterministic Request on a per-resource basis. It is <bcp14>RECOMMENDED</bcp14> that origin servers allow resources to explicitly configure whether Deterministic Requests are appropriate to receive, as still limited to requests that are safe to be processed in the REST sense, i.e., they do not have state-changing side effects.</li>
          </ul>
        </li>
        <li>
          <t>Receiving a response to a Deterministic Request does not mean that the response was generated after the Deterministic Request was sent.  </t>
          <t>
However, a valid response to a Deterministic Request still contains two freshness statements.  </t>
          <ul spacing="normal">
            <li>It is more recent than any other response from the same group member that conveys a smaller sequence number as Partial IV.</li>
            <li>It is more recent than the original creation of the deterministic keying material in the Group OSCORE Security Context.</li>
          </ul>
        </li>
        <li>
          <t>Source authentication of Deterministic Requests is lost.  </t>
          <t>
Instead, the server must verify that the Deterministic Request (more precisely, its handler) is side effect free. The distinct semantics of the CoAP request codes can help the server make that assessment.  </t>
          <t>
Just like for what concerns the acceptance of replayed Deterministic Requests (see above), the server can choose whether it will process a Deterministic Request on a per-resource basis.</t>
        </li>
        <li>
          <t>The privacy of Deterministic Requests is limited.  </t>
          <t>
An intermediary can determine that two Deterministic Requests from different clients are identical, and associate the different responses generated for them.  </t>
          <t>
If a server produces responses in reply to a Deterministic Request and that vary in size, the server can use the Padding option defined in <xref target="sec-padding"/> in order to hide when the response is changing.</t>
        </li>
      </ul>
      <t>[ More on the verification of the Deterministic Request ]</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>Note to RFC Editor: Please replace "[RFC-XXXX]" with the RFC number of this document and delete this paragraph.</t>
      <t>This document has the following actions for IANA.</t>
      <section anchor="iana-coap-options">
        <name>CoAP Option Numbers Registry</name>
        <t>IANA is asked to add the following entries in the "CoAP Option Numbers" registry within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <table align="center" anchor="iana-coap-option-numbers-table">
          <name>Registrations in the CoAP Option Numbers Registry</name>
          <thead>
            <tr>
              <th align="left">Number</th>
              <th align="left">Name</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD1</td>
              <td align="left">Request-Hash</td>
              <td align="left">[RFC-XXXX] (<xref target="ssec-request-hash-option"/>)</td>
            </tr>
            <tr>
              <td align="left">TBD2</td>
              <td align="left">Padding</td>
              <td align="left">[RFC-XXXX] (<xref target="ssec-padding-option"/>)</td>
            </tr>
          </tbody>
        </table>
        <t>[</t>
        <t>For the Request-Hash option, the number suggested to IANA is 548.</t>
        <t>For the Padding option, the option number is picked to be the highest number in the Experts Review range; the high option number allows it to follow practically all other options, and thus to be set when the final unpadded message length including all options is known. Therefore, the number suggested to IANA is 64988.</t>
        <t>Applications that make use of the "Experimental use" range and want to preserve that property are invited to pick the largest suitable experimental number (65532).</t>
        <t>Note that unless other high options are used, this means that padding a message adds an overhead of at least 3 bytes, i.e., 1 byte for option delta/length and two more bytes of extended option delta. This is considered acceptable overhead, given that the application has already chosen to prefer the privacy gains of padding over wire transfer length.</t>
        <t>]</t>
      </section>
      <section anchor="ssec-iana-security-context-parameter-registry">
        <name>OSCORE Security Context Parameters Registry</name>
        <t>IANA is asked to add the following entries in the "OSCORE Security Context Parameters" registry within the "Authentication and Authorization for Constrained Environments (ACE)" registry group.</t>
        <ul spacing="normal">
          <li>Name: det_senderId</li>
          <li>CBOR Label: TBD3</li>
          <li>CBOR Type: byte string</li>
          <li>Registry: -</li>
          <li>Description: OSCORE Sender ID assigned to the Deterministic Client of an OSCORE group</li>
          <li>Reference: [RFC-XXXX] (<xref target="sec-obtaining-info"/>)</li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>Name: det_hash_alg</li>
          <li>CBOR Label: TBD4</li>
          <li>CBOR Type: text string / integer</li>
          <li>Registry: <xref target="COSE.Algorithms"/> Values</li>
          <li>Description: Hash algorithm to use in an OSCORE group when producing a Deterministic Request</li>
          <li>Reference: [RFC-XXXX] (<xref target="sec-obtaining-info"/>)</li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative 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="2" month="July" 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-14"/>
        </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="5" month="July" 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 CoAP messages exchanged 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-26"/>
        </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="RFC8132">
          <front>
            <title>PATCH and FETCH Methods for the Constrained Application Protocol (CoAP)</title>
            <author fullname="P. van der Stok" initials="P." surname="van der Stok"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="A. Sehgal" initials="A." surname="Sehgal"/>
            <date month="April" year="2017"/>
            <abstract>
              <t>The methods defined in RFC 7252 for the Constrained Application Protocol (CoAP) only allow access to a complete resource, not to parts of a resource. In case of resources with larger or complex data, or in situations where resource continuity is required, replacing or requesting the whole resource is undesirable. Several applications using CoAP need to access parts of the resources.</t>
              <t>This specification defines the new CoAP methods, FETCH, PATCH, and iPATCH, which are used to access and update parts of a resource.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8132"/>
          <seriesInfo name="DOI" value="10.17487/RFC8132"/>
        </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="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="RFC9053">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Initial Algorithms</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 a set of algorithms that can be used with the CBOR Object Signing and Encryption (COSE) protocol (RFC 9052).</t>
              <t>This document, along with RFC 9052, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9053"/>
          <seriesInfo name="DOI" value="10.17487/RFC9053"/>
        </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="RFC7641">
          <front>
            <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <date month="September" year="2015"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks. The state of a resource on a CoAP server can change over time. This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time. The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7641"/>
          <seriesInfo name="DOI" value="10.17487/RFC7641"/>
        </reference>
        <reference anchor="RFC9175">
          <front>
            <title>Constrained Application Protocol (CoAP): Echo, Request-Tag, and Token Processing</title>
            <author fullname="C. Amsüss" initials="C." surname="Amsüss"/>
            <author fullname="J. Preuß Mattsson" initials="J." surname="Preuß Mattsson"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <date month="February" year="2022"/>
            <abstract>
              <t>This document specifies enhancements to the Constrained Application Protocol (CoAP) that mitigate security issues in particular use cases. The Echo option enables a CoAP server to verify the freshness of a request or to force a client to demonstrate reachability at its claimed network address. The Request-Tag option allows the CoAP server to match block-wise message fragments belonging to the same request. This document updates RFC 7252 with respect to the following: processing requirements for client Tokens, forbidding non-secure reuse of Tokens to ensure response-to-request binding when CoAP is used with a security protocol, and amplification mitigation (where the use of the Echo option is now recommended).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9175"/>
          <seriesInfo name="DOI" value="10.17487/RFC9175"/>
        </reference>
        <reference anchor="RFC9200">
          <front>
            <title>Authentication and Authorization for Constrained Environments Using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This specification defines a framework for authentication and authorization in Internet of Things (IoT) environments called ACE-OAuth. The framework is based on a set of building blocks including OAuth 2.0 and the Constrained Application Protocol (CoAP), thus transforming a well-known and widely used authorization solution into a form suitable for IoT devices. Existing specifications are used where possible, but extensions are added and profiles are defined to better serve the IoT use cases.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9200"/>
          <seriesInfo name="DOI" value="10.17487/RFC9200"/>
        </reference>
        <reference anchor="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="11" month="April" 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-17"/>
        </reference>
        <reference anchor="I-D.amsuess-lwig-oscore">
          <front>
            <title>OSCORE Implementation Guidance</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <date day="29" month="April" year="2020"/>
            <abstract>
              <t>   Object Security for Constrained RESTful Environments (OSCORE) is a
   means of end-to-end protection of short request/response exchanges
   for tiny devices, typically transported using the Constrained
   Application Protocol (CoAP).  This document aims to assist
   implementers in leveraging the optimizations catered for by the
   combination of CoAP and OSCORE, and by generally providing experience
   from earlier implementations.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-amsuess-lwig-oscore-00"/>
        </reference>
        <reference anchor="I-D.ietf-core-observe-multicast-notifications">
          <front>
            <title>Observe Notifications as CoAP Multicast Responses</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="3" month="March" year="2025"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP) allows clients to
   "observe" resources at a server, and receive notifications as unicast
   responses upon changes of the resource state.  In some use cases,
   such as based on publish-subscribe, it would be convenient for the
   server to send a single notification addressed to all the clients
   observing a same target resource.  This document updates RFC7252 and
   RFC7641, and defines how a server sends observe notifications as
   response messages over multicast, synchronizing all the observers of
   a same resource on a same shared Token value.  Besides, this document
   defines how Group OSCORE can be used to protect multicast
   notifications end-to-end between the server and the observer clients.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-observe-multicast-notifications-11"/>
        </reference>
        <reference anchor="I-D.ietf-core-dns-over-coap">
          <front>
            <title>DNS over CoAP (DoC)</title>
            <author fullname="Martine Sophie Lenders" initials="M. S." surname="Lenders">
              <organization>TUD Dresden University of Technology</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Cenk Gündoğan" initials="C." surname="Gündoğan">
              <organization>NeuralAgent GmbH</organization>
            </author>
            <author fullname="Thomas C. Schmidt" initials="T. C." surname="Schmidt">
              <organization>HAW Hamburg</organization>
            </author>
            <author fullname="Matthias Wählisch" initials="M." surname="Wählisch">
              <organization>TUD Dresden University of Technology &amp; Barkhausen Institut</organization>
            </author>
            <date day="19" month="June" year="2025"/>
            <abstract>
              <t>   This document defines a protocol for exchanging DNS messages over the
   Constrained Application Protocol (CoAP).  These CoAP messages can be
   protected by DTLS-Secured CoAP (CoAPS) or Object Security for
   Constrained RESTful Environments (OSCORE) to provide encrypted DNS
   message exchange for constrained devices in the Internet of Things
   (IoT).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-dns-over-coap-15"/>
        </reference>
        <reference anchor="SW-EPIV">
          <front>
            <title>Star Wars</title>
            <author initials="G." surname="Lucas" fullname="George Lucas">
              <organization/>
            </author>
            <date year="1977"/>
          </front>
          <seriesInfo name="Lucasfilm Ltd." value=""/>
        </reference>
        <reference anchor="ICN-paper" target="https://ieeexplore.ieee.org/document/9525000">
          <front>
            <title>Group Communication with OSCORE: RESTful Multiparty Access to a Data-Centric Web of Things</title>
            <author initials="C." surname="Gündoğan" fullname="Cenk Gündoğan">
              <organization/>
            </author>
            <author initials="C." surname="Amsüss" fullname="Christian Amsüss">
              <organization/>
            </author>
            <author initials="T. C." surname="Schmidt" fullname="Thomas C. Schmidt">
              <organization/>
            </author>
            <author initials="M." surname="Wählisch" fullname="Matthias Wählisch">
              <organization/>
            </author>
            <date year="2021" month="October"/>
          </front>
        </reference>
        <reference anchor="I-D.bormann-core-responses">
          <front>
            <title>CoAP: Non-traditional response forms</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <date day="3" month="March" year="2025"/>
            <abstract>
              <t>   In CoAP as defined by RFC 7252, responses are always unicast back to
   a client that posed a request.  The present memo describes two forms
   of responses that go beyond that model.  These descriptions are not
   intended as advocacy for adopting these approaches immediately, they
   are provided to point out potential avenues for development that
   would have to be carefully evaluated.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-core-responses-04"/>
        </reference>
        <reference anchor="RFC8323">
          <front>
            <title>CoAP (Constrained Application Protocol) over TCP, TLS, and WebSockets</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="S. Lemay" initials="S." surname="Lemay"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="B. Silverajan" initials="B." surname="Silverajan"/>
            <author fullname="B. Raymor" initials="B." role="editor" surname="Raymor"/>
            <date month="February" year="2018"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP), although inspired by HTTP, was designed to use UDP instead of TCP. The message layer of CoAP over UDP includes support for reliable delivery, simple congestion control, and flow control.</t>
              <t>Some environments benefit from the availability of CoAP carried over reliable transports such as TCP or Transport Layer Security (TLS). This document outlines the changes required to use CoAP over TCP, TLS, and WebSockets transports. It also formally updates RFC 7641 for use with these transports and RFC 7959 to enable the use of larger messages over a reliable transport.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8323"/>
          <seriesInfo name="DOI" value="10.17487/RFC8323"/>
        </reference>
        <reference anchor="I-D.ietf-ace-oscore-gm-admin">
          <front>
            <title>Admin Interface for the OSCORE Group Manager</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Peter Van der Stok" initials="P." surname="Van der Stok">
         </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="8" month="January" year="2025"/>
            <abstract>
              <t>   Group communication for CoAP can be secured using Group Object
   Security for Constrained RESTful Environments (Group OSCORE).  A
   Group Manager is responsible for handling the joining of new group
   members, as well as managing and distributing the group keying
   material.  This document defines a RESTful admin interface at the
   Group Manager that allows an Administrator entity to create and
   delete OSCORE groups, as well as to retrieve and update their
   configuration.  The ACE framework for Authentication and
   Authorization is used to enforce authentication and authorization of
   the Administrator at the Group Manager.  Protocol-specific transport
   profiles of ACE are used to achieve communication security, proof-of-
   possession, and server authentication.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-oscore-gm-admin-13"/>
        </reference>
        <reference anchor="RFC7942">
          <front>
            <title>Improving Awareness of Running Code: The Implementation Status Section</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
              <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="205"/>
          <seriesInfo name="RFC" value="7942"/>
          <seriesInfo name="DOI" value="10.17487/RFC7942"/>
        </reference>
      </references>
    </references>
    <?line 663?>

<section anchor="change-log">
      <name>Change log</name>
      <t>Since -10:</t>
      <ul spacing="normal">
        <li>Added test vectors.</li>
        <li>Added implementation status section.</li>
        <li>Removed unclear bullet about transporting request_details.</li>
        <li>Updated open questions, removing closed ones and suggesting SHA-256/128.</li>
        <li>Editorial changes.</li>
      </ul>
      <t>Since -09:</t>
      <ul spacing="normal">
        <li>Fixed registrations in the "OSCORE Security Context Parameters" registry.</li>
        <li>Updated references.</li>
        <li>Editorial fixes.</li>
      </ul>
      <t>Since -08:</t>
      <ul spacing="normal">
        <li>The Request-Hash option is not repeatable.</li>
        <li>Clarifications and editorial improvements.</li>
      </ul>
      <t>Since -07:</t>
      <ul spacing="normal">
        <li>Use of "Consensus Request" instead of "Deterministic Request" in one sentence.</li>
        <li>Added DNS over CoAP as possible use case.</li>
        <li>The computation of the Request Hash takes as input the aad_array (i.e., not the external_aad).</li>
        <li>Corrected parameter name 'sender_cred'.</li>
        <li>Simplified parameter provisioning to the external signature verifier.</li>
      </ul>
      <t>Since -06:</t>
      <ul spacing="normal">
        <li>Clarifications, terminology alignment, and editorial improvements.</li>
      </ul>
      <t>Since -05:</t>
      <ul spacing="normal">
        <li>Updated references.</li>
      </ul>
      <t>Since -04:</t>
      <ul spacing="normal">
        <li>Revised and extended list of use cases.</li>
        <li>Added further note on Deterministic Requests to a group of servers as still protected with the pairwise mode.</li>
        <li>Suppression of error responses for servers in a CoAP group.</li>
        <li>Extended security considerations with discussion on replayed requests.</li>
      </ul>
      <t>Since -03:</t>
      <ul spacing="normal">
        <li>Processing steps in case only inner Observe is included.</li>
        <li>Clarified preserving/eliding the Request-Hash option in responses.</li>
        <li>Clarified limited use of the Echo option.</li>
        <li>Clarifications on using the Padding option.</li>
      </ul>
      <t>Since -02:</t>
      <ul spacing="normal">
        <li>Separate parts needed to respond to unauthenticated requests from the remaining deterministic response part.
(Currently this is mainly an addition; the document will undergo further refactoring if that split proves helpful).</li>
        <li>Inner Observe is set unconditionally in Deterministic Requests.</li>
        <li>Clarifications around padding and security considerations.</li>
      </ul>
      <t>Since -01:</t>
      <ul spacing="normal">
        <li>
          <t>Not meddling with request_kid any more.  </t>
          <t>
Instead, Request-Hash in responses is treated as Class I, but typically elided.  </t>
          <t>
In requests, this removes the need to compute the external_aad twice.</t>
        </li>
        <li>Derivation of the hash now uses the external_aad, rather than the full AAD. This is good enough because AAD is a function only of the external_aad, and the external_aad is easier to get your hands on if COSE manages all the rest.</li>
        <li>The Sender ID of the Deterministic Client is immutable throughout the group lifetime. Hence, no need for any related expiration/creation time and mechanisms to perform its update in the group.</li>
        <li>Extension to the ACE Group Manager of ace-key-groupcomm-oscore to provide required info about the Deterministic Client to new group members when joining the group.</li>
        <li>Alignment with changes in core-oscore-groupcomm-12.</li>
        <li>Editorial improvements.</li>
      </ul>
      <t>Since -00:</t>
      <ul spacing="normal">
        <li>More precise specification of the hashing (guided by first implementations)</li>
        <li>Focus shifted to Deterministic Requests (where it should have been in the first place; all the build-up of Token Requests was moved to a motivating appendix)</li>
        <li>Aligned with draft-tiloca-core-observe-responses-multicast-05 (not submitted at the time of submission)</li>
        <li>List the security properties lost compared to OSCORE</li>
      </ul>
    </section>
    <section anchor="sec-padding">
      <name>Padding</name>
      <t>As discussed in <xref target="sec-security-considerations"/>, information can be leaked by the length of a response or, in different contexts, of a request.</t>
      <t>In order to hide such information and mitigate the impact on privacy, the new CoAP option with name Padding is defined, in order to allow increasing a message's length without changing its meaning.</t>
      <t>The option can be used with any CoAP transport, but is especially useful with OSCORE as that does not provide any padding of its own.</t>
      <t>Before choosing to pad a message by using the Padding option, application designers should consider whether they can arrange for common message variants to have the same length, by picking a suitable content representation; the canonical example here is expressing "yes" and "no" with "y" and "n", respectively.</t>
      <section anchor="ssec-padding-option">
        <name>Definition of the Padding Option</name>
        <t>The option is called Padding and its properties are summarized in <xref target="padding-table"/>, which extends Table 4 of <xref target="RFC7252"/>. The option is Elective, Safe-to-Forward, not part of the Cache-Key, and repeatable. The option may be repeated, as that may be the only way to achieve a certain total length for the padded message.</t>
        <table align="center" anchor="padding-table">
          <name>The Padding Option (C=Critical, U=Unsafe, N=NoCacheKey, R=Repeatable)</name>
          <thead>
            <tr>
              <th align="left">No.</th>
              <th align="left">C</th>
              <th align="left">U</th>
              <th align="left">N</th>
              <th align="left">R</th>
              <th align="left">Name</th>
              <th align="left">Format</th>
              <th align="left">Length</th>
              <th align="left">Default</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD2</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left">x</td>
              <td align="left">x</td>
              <td align="left">Padding</td>
              <td align="left">opaque</td>
              <td align="left">any</td>
              <td align="left">(none)</td>
            </tr>
          </tbody>
        </table>
        <t>When used with OSCORE, the Padding option is of Class E, which makes it indistinguishable from other Class E options or the payload to third parties.</t>
      </section>
      <section anchor="using-and-processing-the-padding-option">
        <name>Using and Processing the Padding option</name>
        <t>When a server produces different responses of different length for a given class of requests
but wishes to produce responses of consistent length
(typically to hide the variation from anyone but the intended recipient),
the server can pick a length that all possible responses can be padded to,
and set the Padding option with a suitable all-zero option value in all responses to that class of requests.</t>
        <t>Likewise, a client can decide on a class of requests that it pads to reach a consistent length. This has considerably less efficacy and applicability when applied to Deterministic Requests. That is: an external observer can group together different requests even if they are of the same length; and padding would hinder convergence on a single Consensus Request, thus requiring all users of the same Group OSCORE Security Context to agree on the same total length in advance.</t>
        <t>Any party receiving a Padding option <bcp14>MUST</bcp14> ignore it.
In particular, a server <bcp14>MUST NOT</bcp14> make its choice of padding a response dependent on any padding present in the corresponding request.
A means driven by the client for coordinating response padding is out of scope for this document.</t>
        <t>Proxies that see a Padding option <bcp14>MAY</bcp14> discard it.</t>
      </section>
    </section>
    <section anchor="sec-ticket-requests">
      <name>Simple Cacheability using Ticket Requests</name>
      <t>Building on the concept of Phantom Requests and Informative Responses defined in <xref target="I-D.ietf-core-observe-multicast-notifications"/>,
basic caching is already possible without building a Deterministic Request.</t>
      <t>The approach discussed in this appendix is not provided for application. In fact, it is efficient only when dealing with very large representations and no OSCORE inner Block-Wise mode (which is inefficient for other reasons), or when dealing with observe notifications (which are already well covered in <xref target="I-D.ietf-core-observe-multicast-notifications"/>).</t>
      <t>Rather, it is more provided as a "mental exercise" for the authors and interested readers to bridge the gap between this document and <xref target="I-D.ietf-core-observe-multicast-notifications"/>.</t>
      <t>That is, instead of replying to a client with a regular response, a server can send an Informative Response, defined as a protected 5.03 (Service Unavailable) error message. The payload of the Informative Response contains the Phantom Request, which is a Ticket Request in the broader terminology used by this document.</t>
      <t>Unlike a Deterministic Request, a Phantom Request is protected with the Group Mode of Group OSCORE.
Instead of verifying a hash, the client can see from the countersignature that this was indeed the request the server is answering.
The client also verifies that the request URI is identical between the original request and the Ticket Request.</t>
      <t>The remaining exchange largely plays out like in <xref target="I-D.ietf-core-observe-multicast-notifications"/>'s "Example with a Proxy and Group OSCORE":
the client sends the Phantom Request to the proxy (but, lacking a <tt>tp_info</tt>, without a Listen-To-Multicast-Responses option),
which forwards it to the server for lack of the option.</t>
      <t>The server then produces a regular response and includes a non-zero Max-Age option as an outer CoAP option. Note that there is no point in including an inner Max-Age option, as the client could not pin it in time.</t>
      <t>When a second, different client later asks for the same resource at the same server, its new request uses a different 'kid' and 'Partial IV' than the first client's. Thus, the new request produces a cache miss at the proxy and is forwarded to the server, which responds with the same Ticket Request provided to the first client. After that, when the second client sends the Ticket Request, a cache hit at the proxy will be produced, and the Ticket Request can be served from the proxy's cache.</t>
      <t>When multiple proxies are in use, or the response has expired from the proxy's cache, the server receives the Ticket Request multiple times. It is a matter of perspective whether the server treats that as an acceptable replay (given that this whole mechanism only makes sense on requests free of side effects), or whether it is conceptualized as having an internal proxy where the request produces a cache hit.</t>
    </section>
    <section anchor="det-requests-for-notif">
      <name>Application for More Efficient End-to-End Protected Multicast Notifications</name>
      <t><xref target="I-D.ietf-core-observe-multicast-notifications"/> defines how a CoAP server can serve all clients observing a same resource at once, by sending notifications over multicast. The approach supports the possible presence of intermediaries such as proxies, also if Group OSCORE is used to protect notifications end-to-end.</t>
      <t>However, comparing the "Example with a Proxy" in <xref section="E" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/> and the "Example with a Proxy and Group OSCORE" in <xref section="F" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/> shows that, when using Group OSCORE, more requests need to hit the server. This is because every client originally protects its Observation request individually, and thus needs a custom response served to obtain the Phantom Request as a Ticket Request.</t>
      <t>If the clients send their requests as the same Deterministic Request, then the server can use these requests as Ticket Requests as well. Thus, there is no need for the server to provide a same Phantom Request to each client.</t>
      <t>Instead, the server can send a single, unprotected Informative Response - very much like in the example without Group OSCORE - hence setting the proxy up and optionally providing also the latest notification along the way. The proxy can thus be configured by the server following the first request from the clients, after which it has an active observation and a fresh cache entry in time for the second client to arrive. This is shown by the "Example with a Proxy and Deterministic Requests" in <xref section="G" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/></t>
    </section>
    <section anchor="open-questions">
      <name>Open Questions</name>
      <ul spacing="normal">
        <li>
          <t>Is "deterministic encryption" something worthwhile to consider in COSE?  </t>
          <t>
COSE would probably specify something more elaborate for the KDF
(the current KDF round is the pairwise mode's;
COSE would probably run through KDF with a KDF context structure).  </t>
          <t>
COSE would give a header parameter name to the Request-Hash
(which for the purpose of OSCORE Deterministic Requests would put back into Request-Hash by extending the option compression function across the two options).  </t>
          <t>
Conceptually, they should align well, and the implementation changes are likely limited to how the KDF is run.</t>
        </li>
        <li>
          <t>An unprotection failure from a mismatched hash will not be part of the ideally constant-time code paths that otherwise lead to AEAD unprotect failures. Is that a problem?  </t>
          <t>
After all, it does tell the attacker that they did succeed in producing a valid MAC (it's just not doing it any good, because this key is only used for Deterministic Requests and thus also needs to pass the Request-Hash check).</t>
        </li>
      </ul>
      <!--
MT: This second bullet point seems something that can already be said in the Security Considerations section.
-->

</section>
    <section anchor="unsorted-further-ideas">
      <name>Unsorted Further Ideas</name>
      <ul spacing="normal">
        <li>
          <t>We could allow clients to elide all other options than Request-Hash, and elide the payload,
if they have reason to believe that they can produce a cache hit with the abbreviated request alone.  </t>
          <t>
This may prove troublesome in terms of cache invalidation
(the server would have to use short-lived responses to indicate that it does need the full request,
or we'd need special handling for error responses,
or criteria by which proxies don't even forward these if they don't have a response at hand).  </t>
          <t>
That may be more trouble than it's worth without a strong use case (say, of complex but converging FETCH requests).  </t>
          <t>
Hashes could also be used in truncated form for that
-- should we suggest SHA-256/128 as a default? (Its birthday paradox starts to kickin around 2^64 deterministic requests).</t>
        </li>
      </ul>
    </section>
    <section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>This appendix includes test vectors for an example where the method defined in this document is used.</t>
      <t>In the following, a CoAP Client C and a CoAP Server S are member of the same OSCORE group, and exchange Deterministic Requests and corresponding responses.</t>
      <t>Note that, while they are consistent with the presented example, the values of the Token and Message ID in the CoAP messages are only indicative, as they are subject to change throughout different message exchanges.</t>
      <section anchor="setup">
        <name>Setup</name>
        <t>The Group OSCORE Security Context specifies the following parameters.</t>
        <ul spacing="normal">
          <li>AEAD Algorithm: AES-CCM-16-64-128 (10)</li>
          <li>HKDF Algorithm: HKDF SHA-256 (5)</li>
          <li>Group Encryption Algorithm: AES-CCM-16-64-128 (10)</li>
          <li>Signature Algorithm: EdDSA (used with curve Ed25519) (-8, 6)</li>
          <li>Pairwise Key Agreement Algorithm: ECDH-SS-HKDF-256 (used with curve X25519) (-27, 4)</li>
          <li>Hash algorithm for Deterministic Requests: SHA-256 (-16)</li>
          <li>Master Secret (16 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0x0102030405060708090a0b0c0d0e0f10
]]></artwork>
        <ul spacing="normal">
          <li>Master Salt (8 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0x9e7ca92223786340
]]></artwork>
        <ul spacing="normal">
          <li>ID Context (2 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0xdd11
]]></artwork>
        <ul spacing="normal">
          <li>Deterministic Client's Sender ID (1 byte):</li>
        </ul>
        <artwork><![CDATA[
   0xdc
]]></artwork>
        <ul spacing="normal">
          <li>Server's Sender ID (1 byte):</li>
        </ul>
        <artwork><![CDATA[
   0x52
]]></artwork>
        <ul spacing="normal">
          <li>Server's authentication credential as CCS (diagnostic notation):</li>
        </ul>
        <artwork><![CDATA[
   { 1: "coaps://server.example.com",
     2: "sender",
     3: "coaps://client.example.org",
     4: 1879067471,
     8: {
          1: {
                1: 1,
                3: -8,
               -1: 6,
               -2: h'77ec358c1d344e41ee0e87b8383d23a2
                     099acd39bdf989ce45b52e887463389b'
             }
        }
   }
]]></artwork>
        <ul spacing="normal">
          <li>Server's authentication credential as CCS (serialization) (118 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0xa501781a636f6170733a2f2f7365727665722e6578616d706c652e636f6d
     026673656e64657203781a636f6170733a2f2f636c69656e742e6578616d
     706c652e6f7267041a70004b4f08a101a401010327200621582077ec358c
     1d344e41ee0e87b8383d23a2099acd39bdf989ce45b52e887463389b
]]></artwork>
        <ul spacing="normal">
          <li>Server's private key (serialization) (32 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0x857eb61d3f6d70a278a36740d132c099
     f62880ed497e27bdfd4685fa1a304f26
]]></artwork>
        <ul spacing="normal">
          <li>Group Manager's authentication credential as CCS (diagnostic notation):</li>
        </ul>
        <artwork><![CDATA[
   { 1: "coaps://mysite.example.com",
     2: "groupmanager",
     3: "coaps://domain.example.org",
     4: 2879067471,
     8: {
          1: {
               1: 1,
               3: -8,
              -1: 6,
              -2: h'cde3efd3bc3f99c9c9ee210415c6cba55
                    061b5046e963b8a58c9143a61166472'
            }
        }
   }
]]></artwork>
        <ul spacing="normal">
          <li>Group Manager's authentication credential as CCS (serialization) (124 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0xa501781a636f6170733a2f2f6d79736974652e6578616d706c652e636f6d
     026c67726f75706d616e6167657203781a636f6170733a2f2f646f6d6169
     6e2e6578616d706c652e6f7267041aab9b154f08a101a401010327200621
     5820cde3efd3bc3f99c9c9ee210415c6cba55061b5046e963b8a58c9143a
     61166472
]]></artwork>
      </section>
      <section anchor="ssec-test-vectors-det-req-1">
        <name>Deterministic Request</name>
        <t>The client generates an unprotected CoAP GET request, which contains only the Uri-Path option with value "helloWorld". The request is Confirmable, with a Token length equal to 8 bytes.</t>
        <t>Unprotected CoAP request (23 bytes):</t>
        <artwork><![CDATA[
0x48019483f0aeef1c796812a0ba68656c6c6f576f726c64

0x48 (Version: 1, Type: CON, Token Length: 8 - 1 byte)
  01 (Code: GET - 1 byte)
  9483 (Message ID - 2 bytes)
  f0aeef1c796812a0 (Token - 8 bytes)
  ba 68656c6c6f576f726c64 (Uri-path:"helloWorld" - 11 bytes)
]]></artwork>
        <t>The client protects the CoAP request above to produce a Deterministic Request. When doing so, the client does not include an inner Observe option.</t>
        <t> </t>
        <t>The following information is used to compute the Request-Hash value.</t>
        <ul spacing="normal">
          <li>Deterministic Client's Sender Key (16 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0x761c3081b8d8329790a8b321b3b4c3a4
]]></artwork>
        <ul spacing="normal">
          <li>aad_array (diagnostic notation):</li>
        </ul>
        <artwork><![CDATA[
   [1,
    [10, 10, -8, -27],
    h'dc',
    h'00',
    h'',
    h'dd11',
    h'190002dd11dc',
    h'',
    h'a501781a636f6170733a2f2f6d79736974652e6578616d706c652e636f6d
      026c67726f75706d616e6167657203781a636f6170733a2f2f646f6d6169
      6e2e6578616d706c652e6f7267041aab9b154f08a101a401010327200621
      5820cde3efd3bc3f99c9c9ee210415c6cba55061b5046e963b8a58c9143a
      61166472'
   ]
]]></artwork>
        <ul spacing="normal">
          <li>aad_array (serialization) (150 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0x8901840a0a27381a41dc41004042dd1146190002dd11dc40587ca501781a
     636f6170733a2f2f6d79736974652e6578616d706c652e636f6d026c6772
     6f75706d616e6167657203781a636f6170733a2f2f646f6d61696e2e6578
     616d706c652e6f7267041aab9b154f08a101a4010103272006215820cde3
     efd3bc3f99c9c9ee210415c6cba55061b5046e963b8a58c9143a61166472
]]></artwork>
        <ul spacing="normal">
          <li>Plaintext (12 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0x01ba68656c6c6f576f726c64
]]></artwork>
        <ul spacing="normal">
          <li>Request-Hash value (32 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0x404b3a7c9f8c878a0b5246cca71e3926
     f0a8cebefdcabbc80e79579d5a1ee17d
]]></artwork>
        <t> </t>
        <t>The following information is used to produce the protected Deterministic Request.</t>
        <ul spacing="normal">
          <li>Partial IV (1 byte):</li>
        </ul>
        <artwork><![CDATA[
   0x00
]]></artwork>
        <ul spacing="normal">
          <li>kid (1 byte):</li>
        </ul>
        <artwork><![CDATA[
   0xdc
]]></artwork>
        <ul spacing="normal">
          <li>kid context (2 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0xdd11
]]></artwork>
        <ul spacing="normal">
          <li>AAD (serialization) (163 bytes):</li>
        </ul>
        <artwork><![CDATA[
    0x8368456e6372797074304058968901840a0a27381a41dc41004042dd114619
      0002dd11dc40587ca501781a636f6170733a2f2f6d79736974652e6578616d
      706c652e636f6d026c67726f75706d616e6167657203781a636f6170733a2f
      2f646f6d61696e2e6578616d706c652e6f7267041aab9b154f08a101a40101
      03272006215820cde3efd3bc3f99c9c9ee210415c6cba55061b5046e963b8a
      58c9143a61166472
]]></artwork>
        <ul spacing="normal">
          <li>Plaintext (12 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0x01ba68656c6c6f576f726c64
]]></artwork>
        <ul spacing="normal">
          <li>Encryption Key (16 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0x5d4671f0d12d27a59dec68c2e2ebcc88
]]></artwork>
        <ul spacing="normal">
          <li>Nonce (13 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0x46eb80969ab7389b084dd6f996
]]></artwork>
        <t> </t>
        <t>From the previous parameter, the following is derived:</t>
        <ul spacing="normal">
          <li>OSCORE option value (6 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0x190002dd11dc
]]></artwork>
        <ul spacing="normal">
          <li>Request-Hash option value (32 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0x404b3a7c9f8c878a0b5246cca71e3926
     f0a8cebefdcabbc80e79579d5a1ee17d
]]></artwork>
        <ul spacing="normal">
          <li>Ciphertext (20 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0x65bcd5d5edf413497bfdeec8975e2acafa702b45
]]></artwork>
        <t>From there, the protected CoAP request as Deterministic Request (76 bytes):</t>
        <artwork><![CDATA[
0x48059483f0aeef1c796812a096190002dd11dced010e13404b3a7c9f8c878a
  0b5246cca71e3926f0a8cebefdcabbc80e79579d5a1ee17dff65bcd5d5edf4
  13497bfdeec8975e2acafa702b45

0x48 (version:1, type: CON, Token Length: 8 - 1 byte)
  05 (Code: FETCH - 1 byte)
  9483 (Message ID - 2 bytes)
  f0aeef1c796812a0 (Token - 8 bytes)
  96 190002dd11dc (OSCORE option - 7 bytes)
  ed 010e 13 404b3a7c9f8c878a0b5246cca71e3926f0a8cebefdcabbc8
             0e79579d5a1ee17d (Request-Hash option - 36 bytes)
  ff (payload marker - 1 byte)
  65bcd5d5edf413497bfdeec8975e2acafa702b45 (payload - 20 bytes)
]]></artwork>
      </section>
      <section anchor="response-to-deterministic-request">
        <name>Response to Deterministic Request</name>
        <t>The server responds to the first request with an ACK message, to which a 2.05 (Content) response indicating a Max-Age of 3600 seconds is piggybacked. The payload of the response is the ASCII-encoded string ". ID: 42".</t>
        <t>Unprotected CoAP response (61 bytes):</t>
        <artwork><![CDATA[
0x68459483f0aeef1c796812a0d2010e10ed010913404b3a7c9f8c878a0b5246
  cca71e3926f0a8cebefdcabbc80e79579d5a1ee17dff2e2049443a203432

0x68 (version: 1, type: ACK, Token Length: 8 - 1 byte)
  45 (Code: 2.05 - 1 byte)
  9483 (Message ID - 2 bytes)
  f0aeef1c796812a0 (Token - 8 bytes)
  d2 01 0e10 (Max-Age:3600 - 4 bytes)
  ed 0109 13 404b3a7c9f8c878a0b5246cca71e3926f0a8cebefdcabbc8
             0e79579d5a1ee17d (Request-Hash - 36 bytes)
  ff (payload marker - 1 byte)
  2e2049443a203432 (payload - 8 bytes)
]]></artwork>
        <t>The server protects the CoAP response above as follows. When doing so, the server: does not include an inner Observe option; includes its own Sender ID in the 'kid' of the OSCORE option; elides the Request-Hash option from the response.</t>
        <t> </t>
        <t>The following information is used to protect the response.</t>
        <ul spacing="normal">
          <li>Partial IV (1 byte):</li>
        </ul>
        <artwork><![CDATA[
   0x00
]]></artwork>
        <ul spacing="normal">
          <li>kid (1 byte):</li>
        </ul>
        <artwork><![CDATA[
   0x52
]]></artwork>
        <ul spacing="normal">
          <li>kid context (2 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0xdd11
]]></artwork>
        <ul spacing="normal">
          <li>aad_array (diagnostic notation):</li>
        </ul>
        <artwork><![CDATA[
   [1,
    [10, 10, -8, -27],
    h'dc',
    h'00',
    h'ed011713404b3a7c9f8c878a0b5246cca71e3926f0a8cebefdcabbc80e79
      579d5a1ee17d',
    h'dd11',
    h'290052',
    h'a501781a636f6170733a2f2f7365727665722e6578616d706c652e636f6d
      026673656e64657203781a636f6170733a2f2f636c69656e742e6578616d
      706c652e6f7267041a70004b4f08a101a401010327200621582077ec358c
      1d344e41ee0e87b8383d23a2099acd39bdf989ce45b52e887463389b',
    h'a501781a636f6170733a2f2f6d79736974652e6578616d706c652e636f6d
      026c67726f75706d616e6167657203781a636f6170733a2f2f646f6d6169
      6e2e6578616d706c652e6f7267041aab9b154f08a101a401010327200621
      5820cde3efd3bc3f99c9c9ee210415c6cba55061b5046e963b8a58c9143a
      61166472'
   ]
]]></artwork>
        <ul spacing="normal">
          <li>aad_array (serialization) (303 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0x8901840a0a27381a41dc41005824ed011713404b3a7c9f8c878a0b5246cc
     a71e3926f0a8cebefdcabbc80e79579d5a1ee17d42dd11432900525876a5
     01781a636f6170733a2f2f7365727665722e6578616d706c652e636f6d02
     6673656e64657203781a636f6170733a2f2f636c69656e742e6578616d70
     6c652e6f7267041a70004b4f08a101a401010327200621582077ec358c1d
     344e41ee0e87b8383d23a2099acd39bdf989ce45b52e887463389b587ca5
     01781a636f6170733a2f2f6d79736974652e6578616d706c652e636f6d02
     6c67726f75706d616e6167657203781a636f6170733a2f2f646f6d61696e
     2e6578616d706c652e6f7267041aab9b154f08a101a40101032720062158
     20cde3efd3bc3f99c9c9ee210415c6cba55061b5046e963b8a58c9143a61
     166472
]]></artwork>
        <ul spacing="normal">
          <li>AAD (serialization) (317 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0x8368456e6372797074304059012f8901840a0a27381a41dc41005824ed01
     1713404b3a7c9f8c878a0b5246cca71e3926f0a8cebefdcabbc80e79579d
     5a1ee17d42dd11432900525876a501781a636f6170733a2f2f7365727665
     722e6578616d706c652e636f6d026673656e64657203781a636f6170733a
     2f2f636c69656e742e6578616d706c652e6f7267041a70004b4f08a101a4
     01010327200621582077ec358c1d344e41ee0e87b8383d23a2099acd39bd
     f989ce45b52e887463389b587ca501781a636f6170733a2f2f6d79736974
     652e6578616d706c652e636f6d026c67726f75706d616e6167657203781a
     636f6170733a2f2f646f6d61696e2e6578616d706c652e6f7267041aab9b
     154f08a101a4010103272006215820cde3efd3bc3f99c9c9ee210415c6cb
     a55061b5046e963b8a58c9143a61166472
]]></artwork>
        <ul spacing="normal">
          <li>Plaintext (14 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0x45d2010e10ff2e2049443a203432
]]></artwork>
        <ul spacing="normal">
          <li>Encryption Key (16 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0xa8c8b7db5d05cfc7faa2bb1afaca6c2f
]]></artwork>
        <ul spacing="normal">
          <li>Nonce (13 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0x46eb80969ab73815084dd6f996
]]></artwork>
        <t> </t>
        <t>From the previous parameter, the following is derived:</t>
        <ul spacing="normal">
          <li>OSCORE option value (3 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0x290052
]]></artwork>
        <ul spacing="normal">
          <li>Request-Hash option value (32 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0x404b3a7c9f8c878a0b5246cca71e3926
     f0a8cebefdcabbc80e79579d5a1ee17d
]]></artwork>
        <ul spacing="normal">
          <li>Ciphertext (22 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0xcbc7356c84c10b626fef8bd57ed2dfaeec175f8e44e1
]]></artwork>
        <ul spacing="normal">
          <li>Plain signature (64 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0x44879f32ab6e8533fd89dedada6e104d10d88ea42fa6d0
     c8e7ccb21e0088e0226ef98405a84f13525a22fd7cf327
     9f3b1cee59af3f45e96d38c48f38a0217405
]]></artwork>
        <ul spacing="normal">
          <li>Signature Encryption Key (16 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0x85ca7c0bc5b8ea2e267b203dc3b71ce6
]]></artwork>
        <ul spacing="normal">
          <li>Signature Keystream (64 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0xf6161f5ea4d6375819924cbcac00f45a469c517f0a435d
     e590b7a242064d5afc092fa2290b480166701088a1c4ad
     06d3e933a3f21a39b3204f7159b977193ce8
]]></artwork>
        <ul spacing="normal">
          <li>Encrypted Signature (64 bytes):</li>
        </ul>
        <artwork><![CDATA[
   0xb291806c0fb8b26be41b9266766ee4175644dfdb25e58d
     2d777b105c06c5bade67d6262ca30712342a3275dd378a
     99e8f5ddfa5d257c5a4d77b5d681d73848ed
]]></artwork>
        <t> </t>
        <t>From there, the protected CoAP response (106 bytes):</t>
        <artwork><![CDATA[
0x68459483f0aeef1c796812a093290052520e10ffcbc7356c84c10b626fef8b
  d57ed2dfaeec175f8e44e1b291806c0fb8b26be41b9266766ee4175644dfdb
  25e58d2d777b105c06c5bade67d6262ca30712342a3275dd378a99e8f5ddfa
  5d257c5a4d77b5d681d73848ed

0x68 (version:1, type: ACK, Token Length: 8 - 1 byte)
  45 (Code: 2.05 - 1 byte)
  9483 (Message ID - 2 bytes)
  f0aeef1c796812a0 (Token - 8 bytes)
  93 290052 (OSCORE option - 4 bytes)
  52 0e10 (Max age option - 3 bytes)
  ff (payload marker - 1 byte)
  cbc7356c84c10b626fef8bd57ed2dfaeec175f8e44e1b29180
    6c0fb8b26be41b9266766ee4175644dfdb25e58d2d777b10
    5c06c5bade67d6262ca30712342a3275dd378a99e8f5ddfa
    5d257c5a4d77b5d681d73848ed (payload - 86 bytes)
]]></artwork>
      </section>
    </section>
    <section numbered="false" anchor="acknowldegment">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank <contact fullname="Michael Richardson"/>, <contact fullname="Jim Schaad"/>, and <contact fullname="Göran Selander"/> for their comments and feedback.</t>
      <t>This work was supported by the Sweden's Innovation Agency VINNOVA within the EUREKA CELTIC-NEXT projects CRITISEC and CYPRESS; and by the H2020 project SIFIS-Home (Grant agreement 952652).</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
jeSvCSCpW9SBhK31e13E1ErWqE48a6GUxqrYQ6Bk1yHV71H8v0iTa5Z912rt
Zu5tpeR88tYJPYhHt/2oRdj8xQxUY+nmyjxsixpftFJHE/hvE1m0/W4G/tiJ
cbc3jA6x6xgyrLeZrXQ8CnuisCZbm1Hc9CYvwRPFdEi33kQBVWMLhuvNgVrI
mPRiDqTdmapdj0+9zSgzcM9Yttr7d/S4Ei9TQ3MwZPr2bvyRduiGCZrq8Q14
2ahbfRFdhzCewEkNutiNx5vzVKXUzCkgm/jKvYZKr73+i7UxNG/fXBDZmlQ/
D2O9vFW/aRr+IbwJO2nTuMv1+1gCrMhRgOFgZILFCMH/cyj3SYmJK2x0Cnq/
pp7juCf/Bg5OWh6US9t5pn6zdn4bLnIIKmmbkvf5tv7936v1z+gJ+fd/b1sG
rsglpLPOVd55YffpBAmLOlBhGWcXbP2ZXCLvspCdmEIBl9hkGimYcX/am7Sy
Tct+c+c97dx5gIX0hPRcNN2wcbWdBM25+mnmpyaZlpP1RvGSLmhnNJmRg+uU
2yqxd7frmSsYm2hvZZvKaEhVvrMDUFgdsxmyZmSJK9jhRGP0OxncJAe9P82O
e3FRLxiXrP3Ec9WTh5K38IQ04E3p3FleGy1zBVQDi2MV7PzKtcXAtDT37TI7
zE4ZHUQ1K73eWHicGlOzkkjW8DfZjU4l516ZhiXinsSQ1hbChyu37QFusBW4
v38KRXENAh7ViznUNmeGR+C5vA6swZhec9226GotuiGnjuE1tY01bHEZrRqK
DuxctjZMUtrKNewxLP8yJSEKs+qlIdsaeKz4n4I5RPX5KKoS4vFSuqRA6DBI
6EIGTWN/XX9tUrPYU1BySa8LUVEaPOnTXsGGVY0qySXnrDJ88UamQiu0/m4t
RYqJJldo2yXuxNsbUbu9BEGiNoognFul7TxL0HV1zk4IEXyW2yHX8FQ023CU
S91gOWbboJt/MoMXhaPECkYTEQ+UFeoegPqfpKjziuK9rLOLnCJR83vbMT3U
LXMuc5CtsK5iFW+ZrcroZdV4f9Cnl2+PqF1K8aOgepuFblpvNClT5r12/eGm
NIMe/gMXZStmOMhgPEGNMvAg7Dhz3tAh9EHouwrxRwnZ8I3PP+eN5Q0m2nrM
jI2/sF5V6mmEckwo9yb1lR8XazXxVU32jHBEo8Us7UwCbprzypshXlid0nSI
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
A1Anj7qt/w+T4d2h7R8BAA==

-->

</rfc>
