<?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  (Ruby 3.0.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-amsuess-core-cachable-oscore-06" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.13.1 -->
  <front>
    <title>Cacheable OSCORE</title>
    <seriesInfo name="Internet-Draft" value="draft-amsuess-core-cachable-oscore-06"/>
    <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="2023" month="January" day="11"/>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>CoAP, OSCORE, multicast, caching, proxy</keyword>
    <abstract>
      <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>
    <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 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 on 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 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 in two halves:</t>
      <ul spacing="normal">
        <li>maintaining request-response bindings in absence of request source authentication, and</li>
        <li>building and processing of Deterministic Requests
(which have no source authentication, and thus require the former).</li>
      </ul>
      <section anchor="use-cases">
        <name>Use cases</name>
        <t>When firmware updates are delivered using CoAP, many similar devices fetch the same large data at the same time. Collecting such large data at a proxy from its cache not only keeps the traffic low, but also lets the clients ride single file to hide their numbers <xref target="SW-EPIV"/> and identities. By using protected Deterministic Requests as defined in this document, it is possible to efficiently perform data collection at a proxy also when the firmware updates are protected end-to-end.</t>
        <t>When relying on intermediaries to fan out the delivery of multicast data protected end-to-end as in <xref target="I-D.ietf-core-observe-multicast-notifications"/>, the use of protected Deterministic Requests as defined in this document allows for a more efficient setup, by reducing the amount of message exchanges and enabling early population of cache entries (see <xref target="det-requests-for-notif"/>).</t>
        <t>When 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>
      </section>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>
        <t>Readers are expected to be familiar with 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 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 response to it (for example to tell which path was requested),
 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 sets up the Deterministic Client, and assigns it a unique Sender ID as for other group members. Furthermore, the Deterministic Client has only the minimum common set of privileges shared by all group members.</t>
          </li>
          <li>Deterministic Request: a Consensus Request generated by the Deterministic Client. The use of Deterministic Requests is defined in <xref target="sec-deterministic-requests"/>.</li>
          <li>
            <t>Ticket Request: a Consensus Request generated by the server itself.  </t>
            <t>
This term is not used in the main document, but is useful in comparison with other applications of consensus requests
that are generated in a different way than as a Deterministic Request.
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 to that draft.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="oscore-nosourceauth">
      <name>OSCORE processing without source authentication</name>
      <t>The request-response binding of OSCORE is achieved by the request_kid / request_piv items
(and, in group OSCORE, request_kid_context)
present in the response's AAD.
Its security depends on the server obtaining source authentication for the request:
Without, 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 to secure use of OSCORE.
However, it is hard to provide when:</t>
      <ul spacing="normal">
        <li>Requests are built exclusively using shared key material (as in a Deterministic Client).</li>
        <li>Requests are sent without source authentication, or where the source authentication is not checked. (This was part of <xref target="I-D.ietf-core-oscore-groupcomm"/> in revisions before -12).</li>
      </ul>
      <t>This document does not [ yet? ] give full guidance on how to restore request-response binding for the general case,
but currently only offers suggestions:</t>
      <ul spacing="normal">
        <li>The response can contain the full request. An option that allows doing that was presented in <xref target="I-D.bormann-core-responses"/>.</li>
        <li>The response can contain a cryptographic hash of the full request. This is used in <xref target="ssec-request-hash-option"/>.</li>
        <li>The above details can be transported in a Class E option (encrypted) or a a Class I option (unencrypted but part of the AAD).
The latter has the advantage that it can be removed in transit and reconstructed at the receiver.</li>
        <li>Alternatively, the agreed-on request data can be placed in a different position in the AAD,
or be part of the security context derivation.
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 nonce reuse.</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 or request in there replacing the request_ items. ]</t>
      <t>Additional care has to be taken that details not expressed in the request itself
(like the security context from which it is assumed to have originated) are captured.</t>
      <t>Processing of requests without source authentication has to be done assuming only the minimal possible privilege of the requester
[ which 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 that contains data more sensitive than that
(which might be justified if the response is protected for an authorized group member in pairwise response 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 arrive at a same 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 is set). Thus, both observing and non-observing requests can be aggregated into a single request, that is upstreamed as an observation at the latest when any observing request reaches a caching proxy.  </t>
            <t>
In this case, following a Deterministic Request that includes only an inner Observe option, servers include an inner Observe option (but no outer Observe option) in a successful response sent as reply. Also, when receiving a response to such a Deterministic Request previously sent, clients have to silently ignore the inner Observe option in that response.</t>
          </li>
          <li>Avoid setting the ETag option in requests on a whim.
Only set it when there was a recent response with that ETag.
When obtaining later blocks, do not send the known-stale ETag.</li>
          <li>In block-wise transfer, 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.</li>
        </ul>
        <!--
MT: proposed  s/should be selected/SHOULD be selected
-->

<t>Outer block-wise transfer can then be used if these messages excede 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>
        <ul spacing="normal">
          <li>The Padding option defined in <xref target="sec-padding"/> can be used to limit an adversary's ability to deduce the content and the target resource of Deterministic Requests from their length. In particular, all Deterministic Requests of the same class (ideally, all requests to a particular server) can be padded to reach the same total length, that should be agreed on among all users of the same OSCORE Security Context.</li>
        </ul>
        <!--
MT: proposed  s/should be agreed/SHOULD be agreed
-->

<ul spacing="normal">
          <li>
            <t>Clients should not send any inner Echo options <xref target="RFC9175"/> in Deterministic Requests.  </t>
            <t>
This limits the use of the Echo option in combination with Deterministic Requests to unprotected (outer) options,
and thus is limited to testing the reachability of the client.
This is not practically limiting, as 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 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 arriving at a consensus pair (key, nonce) to be used with the AEAD cipher for encrypting the Deterministic Request, while also avoiding 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 throught 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 generating 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 generation. 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 MUST be supported by clients and servers that support Deterministic Requests.</t>
        <t>The option is called Request-Hash. As summarized in <xref target="request-hash-table"/>, the Request-Hash option is elective, safe to forward, part of the cache key and repeatable.</t>
        <figure anchor="request-hash-table">
          <name>Request-Hash Option</name>
          <artwork align="center"><![CDATA[
+------+---+---+---+---+--------------+--------+--------+---------+
| No.  | C | U | N | R |     Name     | Format | Length | Default |
+------+---+---+---+---+--------------+--------+--------+---------+
| TBD1 |   |   |   | x | Request-Hash | opaque |  any   | (none)  |
+------+---+---+---+---+--------------+--------+--------+---------+
]]></artwork>
        </figure>
        <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 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 is, as a matter of default value,
equal to the request's.
The response is only valid if its Request-Hash is equal to the matching request's.  </t>
            <t>
Servers (including proxies) thus generally SHOULD NOT need to send 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 send a Request-Hash in a response
are 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 in the response allows populating caches (see below) and decryption of the response in Deterministic Request contexts.
In the context of non-traditional responses, a matching request's Request-Hash can be inferred from its value in the response.</t>
          </li>
          <li>
            <t>A proxy MAY 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>
A proxy can add or remove the request's Request-Tag value to / from a response.</t>
          </li>
          <li>When used with a Deterministic Request, this option is created at message protection time by the sender, and used before message unprotection by the recipient. Therefore, in this use case, it is treated as Class U for OSCORE <xref target="RFC8613"/> in requests. In the same application, for responses, it is treated as Class I, and often elided from sending (but reconstructed at the receiver). Other uses of this option can put it into different classes for the OSCORE processing.</li>
        </ul>
        <t>This option achieves 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>Pre-Conditions</name>
          <t>The use of Deterministic Requests in an OSCORE group requires that the interested group members are aware of the Deterministic Client in the group. In particular, they need to know:</t>
          <ul spacing="normal">
            <li>
              <t>The Sender ID of the Deterministic Client, to be used as 'kid' parameter for the Deterministic Requests. This allows all group members to compute the Sender Key of the Deterministic Client.  </t>
              <t>
The Sender ID of the Deterministic Client is immutable throughout the lifetime of the OSCORE group. That is, it is not relinquished and it does not change upon changes of the group keying material following a group rekeying performed by the Group Manager.</t>
            </li>
            <li>The hash algorithm to use for computing the hash of a plain CoAP request, when producing the associated Deterministic Request.</li>
          </ul>
          <t>Group members have to obtain this information from the Group Manager. A group member can do that, for instance, when obtaining the group keying material upon joining the OSCORE group, or later on as an active member by sending a request to a dedicated resource at 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 Request</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="9" 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>The used Sender ID is the Deterministic Client's Sender ID.</li>
                <li>The used Partial IV is 0.</li>
              </ul>
              <t>
When preparing the external_aad, the element 'sender_public_key' in the aad_array takes the empty CBOR byte string.</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 external_aad 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.3.1" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>, with the following differences:  </t>
              <ul spacing="normal">
                <li>The Sender Key of the Deterministic Client is used as first argument of the HKDF.</li>
                <li>
                  <t>The hash H from step 2 is used as second argument of the HKDF, i.e., as a pseudo IKM-Sender computable by all the group members.      </t>
                  <t>
Note that an actual IKM-Sender cannot be obtained, since there is no authentication credential (and public key included therein) associated with the Deterministic Client, to be used as Sender Authentication Credential and for computing an actual Diffie-Hellman Shared Secret.</t>
                </li>
                <li>The Sender ID of the Deterministic Client is used as value for the 'id' element of the 'info' parameter used as third argument of the HKDF.</li>
              </ul>
            </li>
            <li>The client includes a Request-Hash option in the request to protect, with value set to the hash H from Step 2.</li>
            <li>The client MAY include an inner Observe option set to 0 to be protected with OSCORE, even if no observation is intended (see <xref target="sec-deterministic-requests-unprotected"/>).</li>
            <li>The client protects the request using the pairwise mode of Group OSCORE as defined in <xref section="9.3" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>, using the AEAD nonce from step 1, the deterministic Pairwise Sender Key K from step 3 as AEAD encryption key, and the finalized AAD.</li>
            <li>The client MUST NOT include an unprotected (outer) Observe option if no observation is intended, even in case an inner Observe option was included at step 5 above.</li>
            <li>The client sets FETCH as the outer code of the protected request to make it usable for a proxy's cache, even if no observation is requested <xref target="RFC7641"/>.</li>
          </ol>
          <t>The result is the Deterministic Request to be sent.</t>
          <t>Since the encryption key K is derived using material from the whole plain CoAP request, this (key, nonce) pair is only used for this very message, which is deterministically encrypted unless there is a hash collision between two Deterministic Requests.</t>
          <t>The deterministic encryption requires the used AEAD algorithm to be deterministic in itself. This is the case for all the AEAD algorithms currently registered with COSE in <xref target="COSE.Algorithms"/>. For future algorithms, a flag in the COSE registry is to be added.</t>
          <t>Note that, while the process defined above is based on the pairwise mode of Group OSCORE, no information about the server takes part to the key derivation or is included in the AAD. This is intentional, since it allows for 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 Request</name>
          <t>Upon receiving a Deterministic Request, a server performs the following actions.</t>
          <t>A server that does not support Deterministic Requests would not be able to create the necessary Recipient Context, and thus will fail decrypting the request.</t>
          <ol spacing="normal" type="1"><li>If not already available, the server retrieves the information about the Deterministic Client from the Group Manager, and derives the Sender Key of the Deterministic Client.</li>
            <li>
              <t>The server actually 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 MUST NOT take the following steps, and instead processes the request as per <xref section="9.4" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>.</t>
            </li>
            <li>The server retrieves the hash H from the Request-Hash option.</li>
            <li>
              <t>The server derives a Recipient Context for processing the Deterministic Request. In particular:  </t>
              <ul spacing="normal">
                <li>The Recipient ID is the Sender ID of the Deterministic Client.</li>
                <li>The Recipient Key is derived as the key K in step 3 of <xref target="sssec-use-deterministic-requests-client-req"/>, with the hash H retrieved at the previous step.</li>
              </ul>
            </li>
            <li>The server verifies the request using the pairwise mode of Group OSCORE, as defined in <xref section="9.4" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>, using the Recipient Context from step 4, with the difference that the server does not perform replay checks against a Replay Window (see below).</li>
          </ol>
          <t>In case of successful verification, the server MUST 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 MUST 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 MUST treat the request as invalid and MAY reply with an unprotected 4.00 (Bad Request) error response. The server MAY set an Outer Max-Age option with value zero. The diagnostic payload MAY 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 MUST 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 MUST discard the message and SHOULD 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 treating a response to a Deterministic Request, the Request-Hash option is treated as a Class I option (but usually not sent). This creates the request-response binding ensuring that no mismatched responses can be successfully unprotected (see <xref target="oscore-nosourceauth"/>).
The client MUST reject responses with a Request-Hash not matching the one it sent in the request.</t>
          <!--
MT: Is there any possible reason in this application of the Request-Hash option to not elide it the from the response?
-->

<t>When preparing the response, the server performs the following actions.</t>
          <ol spacing="normal" type="1"><li>The server sets a non-zero Max-Age option, thus making the Deterministic Request usable for the proxy cache.</li>
            <li>The server preliminarily sets the Request-Hash option with the full request hash.</li>
            <li>If the Deterministic Request included an inner Observe option but not an outer Observe option, the server MUST include an inner Observe option in the response.</li>
            <li>
              <t>The server MUST protect the response using the group mode of Group OSCORE, as defined in <xref section="8.3" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>. This is required to ensure that the client can verify source authentication of the response, since the "pairwise" key used for the Deterministic Request is actually shared among all the group members.  </t>
              <t>
Note that the Request-Hash option is treated as Class I here.</t>
            </li>
            <li>The server MUST use its own Sender Sequence Number as Partial IV to protect the response, and include it as Partial IV in the OSCORE option of the response. This is required since the server does not perform replay protection on the Deterministic Request (see <xref target="ssec-use-deterministic-requests-response"/>).</li>
            <li>The server uses 2.05 (Content) as outer code even though it is not necessarily an Observe notification <xref target="RFC7641"/>, in order to make the response cacheable.</li>
            <li>The server SHOULD remove the Request-Hash option from the message before sending
  as per the general option mechanism of <xref target="ssec-request-hash-option"/>.</li>
            <li>If the Deterministic Request included an inner Observe option but not an outer Observe option, the server MUST NOT include an outer Observe option in the response.</li>
          </ol>
          <t>Upon receiving the response, the client performs the following actions.</t>
          <ol spacing="normal" type="1"><li>In case the response includes a 'kid' in the OSCORE option and unless responses from multiple servers are expected (see <xref target="det-req-one-to-many"/>), the client MUST verify it to be exactly the 'kid' of the server to which the Deterministic Request was sent.</li>
            <li>The client sets the Request-Hash option with the full request hash on the reponse.
  If an option of a different value is already present, it rejects the response.</li>
            <li>The client verifies the response using the group mode of Group OSCORE, as defined in <xref section="8.4" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>. In particular, the client verifies the counter signature in the response, based on the 'kid' of the server it sent the request to. When verifying the response, the Request-Hash option is treated as a Class I option.</li>
            <li>If the Deterministic Request included an inner Observe option but not an outer Observe option (see <xref target="sec-deterministic-requests-unprotected"/>), the client MUST silently ignore the inner Observe option in the response and MUST NOT stop processing the response.</li>
          </ol>
          <t>[ Note: This deviates from Section 4.1.3.5.2 of RFC 8613, 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 OSCORE in other situations. ]</t>
        </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 <xref section="8" 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 MUST 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 RECOMMENDED 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 of the Joining Response defined in <xref section="6.4" 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 defined in <xref target="ssec-iana-security-context-parameter-registry"/> of this document. In particular:</t>
      <ul spacing="normal">
        <li>The 'det_senderId' parameter, if present, has as value the OSCORE Sender ID assigned to the Deterministic Client by the Group Manager. This parameter MUST be present if the OSCORE group uses Deterministic Requests as defined in this document. Otherwise, this parameter MUST NOT be present.</li>
        <li>The 'det_hash_alg' parameter, if present, has as value the hash algorithm to use for computing the hash of a plain CoAP request, when producing the associated Deterministic Request. This parameter takes values from the "Value" column of the "COSE Algorithms" Registry <xref target="COSE.Algorithms"/>. This parameter MUST be present if the OSCORE group uses Deterministic Requests as defined in this document. Otherwise, this parameter MUST NOT be present.</li>
      </ul>
      <t>The same extension above applies also to the 'key' parameter when included in a Key Distribution Response (see Sections <xref target="I-D.ietf-ace-key-groupcomm-oscore" section="8.1" sectionFormat="bare"/> and <xref target="I-D.ietf-ace-key-groupcomm-oscore" section="8.2" sectionFormat="bare"/> of <xref target="I-D.ietf-ace-key-groupcomm-oscore"/>) and in a Signature Verification Data Response (see <xref section="13" sectionFormat="of" target="I-D.ietf-ace-key-groupcomm-oscore"/>).</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"/><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's 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 (precisely: its handler) is side effect free. The distinct semantics of the CoAP request codes can help the server make that assessment.</t>
            </li>
            <li>Consistently with the point above, a server can choose whether it will process a Deterministic Request on a per-resource basis. It is RECOMMENDED that origin servers allow resources to explicitly configure whether Deterministic Requests are appropriate to receive, as still limited to requests that are safe to be processed in the REST sense, i.e., they do not have state-changing side effects.</li>
          </ul>
        </li>
        <li>
          <t>Receiving a response to a Deterministic Request does not mean that the response was generated after the Deterministic Request was sent.  </t>
          <t>
However, a valid response to a Deterministic Request still contains two freshness statements.  </t>
          <ul spacing="normal">
            <li>It is more recent than any other response from the same group member that has a smaller sequence number.</li>
            <li>It is more recent than the original creation of the deterministic security context's key material.</li>
          </ul>
        </li>
        <li>
          <t>Source authentication of Deterministic Requests is lost.  </t>
          <t>
Instead, the server must verify that the Deterministic Request (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.
A server producing responses of varying size to a Deterministic Request can use the Padding option 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>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 enter the following option numbers to the "CoAP Option Numbers" registry defined in <xref target="RFC7252"/> within the "CoRE Parameters" registry.</t>
        <figure>
          <name>CoAP Option Numbers</name>
          <artwork align="center"><![CDATA[
+--------+--------------+-------------------+
| Number |     Name     |     Reference     |
+--------+--------------+-------------------+
|  TBD1  | Request-Hash | [[this document]] |
+--------+--------------+-------------------+
|  TBD2  | Padding      | [[this document]] |
+--------+--------------+-------------------+
]]></artwork>
        </figure>
        <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 register the following entries in the "OSCORE Security Context Parameters" Registry defined in <xref section="9.4" sectionFormat="of" target="RFC9203"/>.</t>
        <ul spacing="normal">
          <li>Name: det_senderId</li>
          <li>CBOR Label: TBD3</li>
          <li>CBOR Type: bstr</li>
          <li>Registry: -</li>
          <li>Description: OSCORE Sender ID assigned to the Deterministic Client of an OSCORE group</li>
          <li>Reference: [[this document]] (<xref target="sec-obtaining-info"/>)</li>
        </ul>
        <t> </t>
        <ul spacing="normal">
          <li>Name: det_hash_alg</li>
          <li>CBOR Label: TBD4</li>
          <li>CBOR Type: int / tstr</li>
          <li>Registry: -</li>
          <li>Description: Hash algorithm to use in an OSCORE group when producing a Deterministic Request</li>
          <li>Reference: [[this document]] (<xref target="sec-obtaining-info"/>)</li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="I-D.ietf-core-groupcomm-bis" target="https://www.ietf.org/archive/id/draft-ietf-core-groupcomm-bis-07.txt">
          <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="11" month="July" year="2022"/>
            <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 RFC 7390, while it updates RFC 7252 and RFC 7641.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-groupcomm-bis-07"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-groupcomm" target="https://www.ietf.org/archive/id/draft-ietf-core-oscore-groupcomm-17.txt">
          <front>
            <title>Group OSCORE - Secure Group Communication for CoAP</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="Jiye Park" initials="J." surname="Park">
              <organization>Universitaet Duisburg-Essen</organization>
            </author>
            <date day="20" month="December" year="2022"/>
            <abstract>
              <t>   This document defines 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 approach 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.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-groupcomm-17"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC7252" target="https://www.rfc-editor.org/info/rfc7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby">
              <organization/>
            </author>
            <author fullname="K. Hartke" initials="K." surname="Hartke">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks.  The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s.  The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types.  CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC8132" target="https://www.rfc-editor.org/info/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">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <author fullname="A. Sehgal" initials="A." surname="Sehgal">
              <organization/>
            </author>
            <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="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8613" target="https://www.rfc-editor.org/info/rfc8613">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="G. Selander" initials="G." surname="Selander">
              <organization/>
            </author>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson">
              <organization/>
            </author>
            <author fullname="F. Palombini" initials="F." surname="Palombini">
              <organization/>
            </author>
            <author fullname="L. Seitz" initials="L." surname="Seitz">
              <organization/>
            </author>
            <date month="July" year="2019"/>
            <abstract>
              <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE).  OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
              <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration.  Therefore, this document updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8613"/>
          <seriesInfo name="DOI" value="10.17487/RFC8613"/>
        </reference>
        <reference anchor="RFC9052" target="https://www.rfc-editor.org/info/rfc9052">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad">
              <organization/>
            </author>
            <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" target="https://www.rfc-editor.org/info/rfc9053">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Initial Algorithms</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad">
              <organization/>
            </author>
            <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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC7641" target="https://www.rfc-editor.org/info/rfc7641">
          <front>
            <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
            <author fullname="K. Hartke" initials="K." surname="Hartke">
              <organization/>
            </author>
            <date month="September" year="2015"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks.  The state of a resource on a CoAP server can change over time.  This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time.  The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7641"/>
          <seriesInfo name="DOI" value="10.17487/RFC7641"/>
        </reference>
        <reference anchor="RFC9175" target="https://www.rfc-editor.org/info/rfc9175">
          <front>
            <title>Constrained Application Protocol (CoAP): Echo, Request-Tag, and Token Processing</title>
            <author fullname="C. Amsüss" initials="C." surname="Amsüss">
              <organization/>
            </author>
            <author fullname="J. Preuß Mattsson" initials="J." surname="Preuß Mattsson">
              <organization/>
            </author>
            <author fullname="G. Selander" initials="G." surname="Selander">
              <organization/>
            </author>
            <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" target="https://www.rfc-editor.org/info/rfc9200">
          <front>
            <title>Authentication and Authorization for Constrained Environments Using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author fullname="L. Seitz" initials="L." surname="Seitz">
              <organization/>
            </author>
            <author fullname="G. Selander" initials="G." surname="Selander">
              <organization/>
            </author>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem">
              <organization/>
            </author>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman">
              <organization/>
            </author>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
              <organization/>
            </author>
            <date month="August" year="2022"/>
            <abstract>
              <t>This specification defines a framework for authentication and authorization in Internet of Things (IoT) environments called ACE-OAuth. The framework is based on a set of building blocks including OAuth 2.0 and the Constrained Application Protocol (CoAP), thus transforming a well-known and widely used authorization solution into a form suitable for IoT devices.  Existing specifications are used where possible, but extensions are added and profiles are defined to better serve the IoT use cases.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9200"/>
          <seriesInfo name="DOI" value="10.17487/RFC9200"/>
        </reference>
        <reference anchor="RFC9203" target="https://www.rfc-editor.org/info/rfc9203">
          <front>
            <title>The Object Security for Constrained RESTful Environments (OSCORE) Profile of the Authentication and Authorization for Constrained Environments (ACE) Framework</title>
            <author fullname="F. Palombini" initials="F." surname="Palombini">
              <organization/>
            </author>
            <author fullname="L. Seitz" initials="L." surname="Seitz">
              <organization/>
            </author>
            <author fullname="G. Selander" initials="G." surname="Selander">
              <organization/>
            </author>
            <author fullname="M. Gunnarsson" initials="M." surname="Gunnarsson">
              <organization/>
            </author>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document specifies a profile for the Authentication and Authorization for Constrained Environments (ACE) framework.  It utilizes Object Security for Constrained RESTful Environments (OSCORE) to provide communication security and proof-of-possession for a key owned by the client and bound to an OAuth 2.0 access token.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9203"/>
          <seriesInfo name="DOI" value="10.17487/RFC9203"/>
        </reference>
        <reference anchor="I-D.ietf-ace-key-groupcomm-oscore" target="https://www.ietf.org/archive/id/draft-ietf-ace-key-groupcomm-oscore-15.txt">
          <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="5" month="September" year="2022"/>
            <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-15"/>
        </reference>
        <reference anchor="I-D.amsuess-lwig-oscore" target="https://www.ietf.org/archive/id/draft-amsuess-lwig-oscore-00.txt">
          <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" target="https://www.ietf.org/archive/id/draft-ietf-core-observe-multicast-notifications-05.txt">
          <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="24" month="October" year="2022"/>
            <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-05"/>
        </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" target="https://www.ietf.org/archive/id/draft-bormann-core-responses-01.txt">
          <front>
            <title>CoAP: Non-traditional response forms</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <date day="3" month="February" year="2022"/>
            <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-01"/>
        </reference>
        <reference anchor="RFC8323" target="https://www.rfc-editor.org/info/rfc8323">
          <front>
            <title>CoAP (Constrained Application Protocol) over TCP, TLS, and WebSockets</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <author fullname="S. Lemay" initials="S." surname="Lemay">
              <organization/>
            </author>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
              <organization/>
            </author>
            <author fullname="K. Hartke" initials="K." surname="Hartke">
              <organization/>
            </author>
            <author fullname="B. Silverajan" initials="B." surname="Silverajan">
              <organization/>
            </author>
            <author fullname="B. Raymor" initials="B." role="editor" surname="Raymor">
              <organization/>
            </author>
            <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>
    <section anchor="change-log">
      <name>Change log</name>
      <t>Since -05:</t>
      <ul spacing="normal">
        <li>Updated references.</li>
      </ul>
      <t>Since -04:</t>
      <ul spacing="normal">
        <li>Revised and extended list of use cases.</li>
        <li>Added further note on Deterministic Requests to a group of servers as still protected with the pairwise mode.</li>
        <li>Suppression of error responses for servers in a CoAP group.</li>
        <li>Extended security considerations with discussion on replayed requests.</li>
      </ul>
      <t>Since -03:</t>
      <ul spacing="normal">
        <li>Processing steps in case only inner Observe is included.</li>
        <li>Clarified preserving/eliding the Request-Hash option in responses.</li>
        <li>Clarified limited use of the Echo option.</li>
        <li>Clarifications on using the Padding option.</li>
      </ul>
      <t>Since -02:</t>
      <ul spacing="normal">
        <li>Separate parts needed to respond to unauthenticated requests from the remaining deterministic response part.
(Currently this is mainly an addition; the document will undergo further refactoring if that split proves helpful).</li>
        <li>Inner Observe is set unconditionally in Deterministic Requests.</li>
        <li>Clarifications around padding and security considerations.</li>
      </ul>
      <t>Since -01:</t>
      <ul spacing="normal">
        <li>
          <t>Not meddling with request_kid any more.  </t>
          <t>
Instead, Request-Hash in responses is treated as Class I, but typically elided.  </t>
          <t>
In requests, this removes the need to compute the external_aad twice.</t>
        </li>
        <li>Derivation of the hash now uses the external_aad, rather than the full AAD. This is good enough because AAD is a function only of the external_aad, and the external_aad is easier to get your hands on if COSE manages all the rest.</li>
        <li>The Sender ID of the Deterministic Client is immutable throughout the group lifetime. Hence, no need for any related expiration/creation time and mechanisms to perform its update in the group.</li>
        <li>Extension to the ACE Group Manager of ace-key-groupcomm-oscore to provide required info about the Deterministic Client to new group members when joining the group.</li>
        <li>Alignment with changes in core-oscore-groupcomm-12.</li>
        <li>Editorial improvements.</li>
      </ul>
      <t>Since -00:</t>
      <ul spacing="normal">
        <li>More precise specification of the hashing (guided by first implementations)</li>
        <li>Focus shifted to Deterministic Requests (where it should have been in the first place; all the build-up of Token Requests was moved to a motivating appendix)</li>
        <li>Aligned with draft-tiloca-core-observe-responses-multicast-05 (not submitted at the time of submission)</li>
        <li>List the security properties lost compared to OSCORE</li>
      </ul>
    </section>
    <section anchor="sec-padding">
      <name>Padding</name>
      <t>As discussed in <xref target="sec-security-considerations"/>, information can be leaked by the length of a response or, in different contexts, of a request.</t>
      <t>In order to hide such information and mitigate the impact on privacy, the following Padding option is defined, 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="definition-of-the-padding-option">
        <name>Definition of the Padding Option</name>
        <t>As summarized in <xref target="padding-table"/>, the Padding option is elective, safe to forward and not part of the cache key; these follow from the usage instructions. The option may be repeated, as that may be the only way to achieve a certain total length for the padded message.</t>
        <figure anchor="padding-table">
          <name>Padding Option</name>
          <artwork align="center"><![CDATA[
+------+---+---+---+---+---------+--------+--------+---------+
| No.  | C | U | N | R |  Name   | Format | Length | Default |
+------+---+---+---+---+---------+--------+--------+---------+
| TBD2 |   |   | x | x | Padding | opaque | any    | (none)  |
+------+---+---+---+---+---------+--------+--------+---------+
]]></artwork>
        </figure>
        <t>When used with OSCORE, the Padding option is of Class E,
this 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 consistent length. This has considerably less efficacy and applicability when applied to Deterministic Requests. That is: an external observer can group 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 OSCORE Security Context to agree on the same total length in advance.</t>
        <t>Any party receiving a Padding option MUST ignore it.
In particular, a server MUST NOT make its choice of padding dependent on any padding present in the request.
(An option to coordinate response padding driven by the client is out of scope for this document).</t>
        <t>Proxies that see a padding option MAY 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 this document's broader terminology.</t>
      <t>Unlike a Deterministic Request, a Phantom Request is protected in Group Mode.
Instead of verifying a hash, the client can see from the signature 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 mechansim 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, 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.</t>
      <t>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.</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>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.</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 allows clients to elide all other options than Request-Hash, and elide the payload,
if it has reason to believe that it 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>The work on this document has been partly supported by VINNOVA and the Celtic-Next project CRITISEC; and by the H2020 project SIFIS-Home (Grant agreement 952652).</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA819W3PbVrbmO38FRqkaS2mStmQ7nSjTk6PIcqxOfBlL7tSp
Tsq9SWySiECAA4CSmcT9V+ZlfsM8nbeeHzbrui8gQEnpnDMnVY5lCtzYl7XX
9VtrjUajwfVx8ngwaLImt8fJ3qmZLqyZ5DZ5fXH6+u3Z3iAtp4VZwu/Sysya
kVnWa1vXo2lZ2dEUnsaHR2VN/85NY+tmkK2q46Sp1nVz9OjRF4+OBnVjivS9
ycvC0i/sYGqa46Ru0kG9niyzus7Kotms4LfnZ5fPBzfz4+S0fHuWfF9WV1kx
T76pyvVqcHWDH5+8GcrkhslynTfZ1NTNMMG5wKPDZFWVHzYDs24WZXU8GCVZ
UcPXxsnJsv7Hv9X1IEl4PaeLKqubzBTBb6blumiqzXFyApOvMgMf2aXJ8uNk
qk//i+zAeFouByN4gMZ/OU4us7ycGjf8S1NNS/9hWcGa3p5fnCUnX8M/YXRr
YQvOazP7qazSem5gj5KjI5xE1sAMvoXXGZpSCqNdnI0OP3vy5FFy0ZTTq0WZ
L8PZXtzY1BZ+skt897ihd/9LlY1rOxgUZbU0TXZtj+G589GzcWabGR/jHHcX
lrMcTbJ6+9dyuO4pfOLt89Ojw8Mv5Mc/Hj09kh8/P3zsf/zjE/3xs8PH8uMX
j9yz8CN9evr64mx8ks/LKmsWS5pBkugBJvQfbd/5yasT+ncKdHaczEwOC8N/
C/XiOIkfh39lqjlu9KJpVvXxw4c3NzdjOEUzhhEfGiC8ebG0RVM/nJa1pf+N
PyyaZf6J8eMMsmIW7h6u+LMnh7qKwz8+1R+B3v2Pj6OtNFM7urKbYLN5X/Uh
vVj5TTZv/So4ikltq2s7cnQ/Ksomm8GPDdwg2rm9i+9HZ2/O/7LXtY0j+Vuo
9ptx8t0ahnGfMul+Y2FzbPAr3u/DL/74x3C7L2Bvk+9Nxc/AxDJb404BG6Gv
zrJ8mXzXpOM9nNb56avRyqxsdZeJwXX95h//VqTl//1fpmjN7tQWV9u/3R7A
3+ro2x23vuP7l2Mc4mK6WGZp0xriclEuTb39+9YQwBK+/8f/XuRZPV20Rnhp
mmaRwRjxA8qEidsBp1su14UcbXIDpChsD/jI2cXlbJ0nL5EMVqZqNsnJdArU
kzRlYpJnwEtGsE3AwabJ93aSlDOYNDDHei84zqNHR4ejw0edtySz1n5Y5UBy
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

-->

</rfc>
