<?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.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-amsuess-core-cachable-oscore-10" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.22.0 -->
  <front>
    <title abbrev="Cacheable OSCORE">Cacheable OSCORE</title>
    <seriesInfo name="Internet-Draft" value="draft-amsuess-core-cachable-oscore-10"/>
    <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="January" day="08"/>
    <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>This allows a trusted intermediary proxy which is also a member of the OSCORE group to populate its cache with responses from origin servers. Later on, the proxy can possibly reply to a request in the group with a response from its cache, if recognized as an eligible server by the client.</t>
      <t>However, an untrusted proxy which is not a member of the OSCORE group only sees protected responses as opaque, uncacheable ciphertext. In particular, different clients in the group that originate a same plain CoAP request would send different protected requests, as a result of their Group OSCORE processing. Such protected requests cannot yield a cache hit at the proxy, which makes the whole caching of protected responses pointless.</t>
      <t>This document addresses this complication and enables cacheability of protected responses, also 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>
          <t>maintaining request-response bindings in the absence of request source authentication; and</t>
        </li>
        <li>
          <t>building and processing of Deterministic Requests
(which have no source authentication, and thus require the former).</t>
        </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 relying on Information-Centric Networking (ICN) for multiparty dissemination of cacheable content, CoAP and CoAP proxies can be used to enable asynchronous group communication. This leverages CoAP proxies performing request aggregation, as well as response replication and cacheability <xref target="ICN-paper"/>. By restoring cacheability of OSCORE-protected responses, the Deterministic Requests defined in this document make it possible to attain dissemination of cacheable content in ICN-based deployments, also when the content is protected end-to-end.</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>
            <t>Deterministic Request: a Consensus Request generated by the Deterministic Client. The use of Deterministic Requests is defined in <xref target="sec-deterministic-requests"/>.</t>
          </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>The request-response binding is achieved by the items (request_kid, request_piv) in OSCORE and by the items (request_kid, request_piv, request_kid_context) in Group OSCORE. Those items are present in both the request's and the response's AAD, and are hereafter referred to as "request_details".</t>
      <t>The security of such binding depends on the server obtaining source authentication for the request:
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>
          <t>Requests are built exclusively using shared keying material, like in the case of a Deterministic Client.</t>
        </li>
        <li>
          <t>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)</t>
        </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>
          <t>The response can contain the full request. An option that allows doing that is presented in <xref target="I-D.bormann-core-responses"/>.</t>
        </li>
        <li>
          <t>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"/>.</t>
        </li>
        <li>
          <t>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.</t>
        </li>
        <li>
          <t>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.</t>
        </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 plain 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>Clients build the unprotected Deterministic Request in a way which is as much reproducible as possible.
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>
            <t>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.</t>
          </li>
          <li>
            <t>In block-wise transfers, maximally sized large inner blocks (szx=6) should 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. <!--
MT: proposed  s/should be selected/SHOULD be selected
-->  </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).</t>
          </li>
          <li>
            <t>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.</t>
          </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>
            <t>It is not repeatable.</t>
          </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>
            <t>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.</t>
          </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>
              <t>The hash algorithm to use for computing the hash of a plain CoAP request, when producing the associated Deterministic Request.</t>
            </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.</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, and the AEAD nonce:  </t>
              <ul spacing="normal">
                <li>
                  <t>The used Sender ID is the Deterministic Client's Sender ID.</t>
                </li>
                <li>
                  <t>The used Partial IV is 0.</t>
                </li>
              </ul>
              <t>
When preparing the external_aad, the element 'sender_cred' in the aad_array takes the empty CBOR byte string (0x40).</t>
            </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>
                  <t>The Sender Key of the Deterministic Client is used as first argument of the HKDF.</t>
                </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>
                  <t>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.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>The client includes a Request-Hash option in the request to protect, with value set to the hash H from Step 2.</t>
            </li>
            <li>
              <t>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"/>).</t>
            </li>
            <li>
              <t>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.</t>
            </li>
            <li>
              <t>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.</t>
            </li>
            <li>
              <t>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"/>.</t>
            </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>
              <t>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.</t>
            </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>
              <t>The server retrieves the hash H from the Request-Hash option.</t>
            </li>
            <li>
              <t>The server derives a Recipient Context for processing the Deterministic Request. In particular:  </t>
              <ul spacing="normal">
                <li>
                  <t>The Recipient ID is the Sender ID of the Deterministic Client.</t>
                </li>
                <li>
                  <t>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"/>.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>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).</t>
            </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>
              <t>The server sets a non-zero Max-Age option, thus making the Deterministic Request usable for the proxy cache.</t>
            </li>
            <li>
              <t>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.</t>
            </li>
            <li>
              <t>If the Deterministic Request included an inner Observe option but not an outer Observe option, the server <bcp14>MUST</bcp14> include an inner Observe option in the response.</t>
            </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>
              <t>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"/>).</t>
            </li>
            <li>
              <t>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.</t>
            </li>
            <li>
              <t>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"/>.</t>
            </li>
            <li>
              <t>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.</t>
            </li>
          </ol>
          <t>Upon receiving the response, the client performs the following actions.</t>
          <ol spacing="normal" type="1"><li>
              <t>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"/>).</t>
            </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>
              <t>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.</t>
            </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>
          <t>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.</t>
        </li>
        <li>
          <t>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.</t>
        </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 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>
              <t>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.</t>
            </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>
              <t>It is more recent than any other response from the same group member that conveys a smaller sequence number as Partial IV.</t>
            </li>
            <li>
              <t>It is more recent than the original creation of the deterministic keying material in the Group OSCORE Security Context.</t>
            </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>
            <t>Name: det_senderId</t>
          </li>
          <li>
            <t>CBOR Label: TBD3</t>
          </li>
          <li>
            <t>CBOR Type: byte string</t>
          </li>
          <li>
            <t>Registry: -</t>
          </li>
          <li>
            <t>Description: OSCORE Sender ID assigned to the Deterministic Client of an OSCORE group</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX] (<xref target="sec-obtaining-info"/>)</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Name: det_hash_alg</t>
          </li>
          <li>
            <t>CBOR Label: TBD4</t>
          </li>
          <li>
            <t>CBOR Type: text string / integer</t>
          </li>
          <li>
            <t>Registry: <xref target="COSE.Algorithms"/> Values</t>
          </li>
          <li>
            <t>Description: Hash algorithm to use in an OSCORE group when producing a Deterministic Request</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX] (<xref target="sec-obtaining-info"/>)</t>
          </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="Chonggang Wang" initials="C." surname="Wang">
              <organization>InterDigital</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="21" month="October" year="2024"/>
            <abstract>
              <t>   This document specifies the use of the Constrained Application
   Protocol (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-12"/>
        </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="26" month="September" year="2024"/>
            <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 any 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-23"/>
        </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 OSCORE Groups in ACE</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Jiye Park" initials="J." surname="Park">
              <organization>Universitaet Duisburg-Essen</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="6" month="March" year="2023"/>
            <abstract>
              <t>   This document defines an application profile of the ACE framework for
   Authentication and Authorization, to request and provision keying
   material in group communication scenarios that are based on CoAP and
   are secured with Group Object Security for Constrained RESTful
   Environments (Group OSCORE).  This application profile delegates the
   authentication and authorization of Clients, that 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-16"/>
        </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="21" month="October" year="2024"/>
            <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-10"/>
        </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="21" month="October" year="2024"/>
            <abstract>
              <t>   This document defines a protocol for sending DNS messages over the
   Constrained Application Protocol (CoAP).  These CoAP messages are
   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-09"/>
        </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="1" month="September" year="2024"/>
            <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-03"/>
        </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>
      </references>
    </references>
    <?line 572?>

<section anchor="change-log">
      <name>Change log</name>
      <t>Since -09:</t>
      <ul spacing="normal">
        <li>
          <t>Fixed registrations in the "OSCORE Security Context Parameters" registry.</t>
        </li>
        <li>
          <t>Updated references.</t>
        </li>
        <li>
          <t>Editorial fixes.</t>
        </li>
      </ul>
      <t>Since -08:</t>
      <ul spacing="normal">
        <li>
          <t>The Request-Hash option is not repeatable.</t>
        </li>
        <li>
          <t>Clarifications and editorial improvements.</t>
        </li>
      </ul>
      <t>Since -07:</t>
      <ul spacing="normal">
        <li>
          <t>Use of "Consensus Request" instead of "Deterministic Request" in one sentence.</t>
        </li>
        <li>
          <t>Added DNS over CoAP as possible use case.</t>
        </li>
        <li>
          <t>The computation of the Request Hash takes as input the aad_array (i.e., not the external_aad).</t>
        </li>
        <li>
          <t>Corrected parameter name 'sender_cred'.</t>
        </li>
        <li>
          <t>Simplified parameter provisioning to the external signature verifier.</t>
        </li>
      </ul>
      <t>Since -06:</t>
      <ul spacing="normal">
        <li>
          <t>Clarifications, terminology alignment, and editorial improvements.</t>
        </li>
      </ul>
      <t>Since -05:</t>
      <ul spacing="normal">
        <li>
          <t>Updated references.</t>
        </li>
      </ul>
      <t>Since -04:</t>
      <ul spacing="normal">
        <li>
          <t>Revised and extended list of use cases.</t>
        </li>
        <li>
          <t>Added further note on Deterministic Requests to a group of servers as still protected with the pairwise mode.</t>
        </li>
        <li>
          <t>Suppression of error responses for servers in a CoAP group.</t>
        </li>
        <li>
          <t>Extended security considerations with discussion on replayed requests.</t>
        </li>
      </ul>
      <t>Since -03:</t>
      <ul spacing="normal">
        <li>
          <t>Processing steps in case only inner Observe is included.</t>
        </li>
        <li>
          <t>Clarified preserving/eliding the Request-Hash option in responses.</t>
        </li>
        <li>
          <t>Clarified limited use of the Echo option.</t>
        </li>
        <li>
          <t>Clarifications on using the Padding option.</t>
        </li>
      </ul>
      <t>Since -02:</t>
      <ul spacing="normal">
        <li>
          <t>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).</t>
        </li>
        <li>
          <t>Inner Observe is set unconditionally in Deterministic Requests.</t>
        </li>
        <li>
          <t>Clarifications around padding and security considerations.</t>
        </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>
          <t>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.</t>
        </li>
        <li>
          <t>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.</t>
        </li>
        <li>
          <t>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.</t>
        </li>
        <li>
          <t>Alignment with changes in core-oscore-groupcomm-12.</t>
        </li>
        <li>
          <t>Editorial improvements.</t>
        </li>
      </ul>
      <t>Since -00:</t>
      <ul spacing="normal">
        <li>
          <t>More precise specification of the hashing (guided by first implementations)</t>
        </li>
        <li>
          <t>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)</t>
        </li>
        <li>
          <t>Aligned with draft-tiloca-core-observe-responses-multicast-05 (not submitted at the time of submission)</t>
        </li>
        <li>
          <t>List the security properties lost compared to OSCORE</t>
        </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>All or none of the Deterministic Requests should have an inner observe option.
Preferably none -- that makes messages shorter, and clients need to ignore that option either way when checking whether a Consensus Request matches their intended request.</t>
        </li>
      </ul>
      <!--
MT: How can clients start an observation then? That would require an inner Observe option, right?

Also the guidelines in Section 2 suggest to have an inner observe option, regardless the resource being actually observable.
-->

<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.</t>
        </li>
      </ul>
    </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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

-->

</rfc>
