<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.14 (Ruby 3.3.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-cacheable-oscore-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.1 -->
  <front>
    <title abbrev="Cacheable OSCORE">Cacheable OSCORE</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-cacheable-oscore-00"/>
    <author initials="C." surname="Amsüss" fullname="Christian Amsüss">
      <organization/>
      <address>
        <postal>
          <country>Austria</country>
        </postal>
        <email>christian@amsuess.com</email>
      </address>
    </author>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <date year="2025" month="September" day="08"/>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>CoAP, OSCORE, multicast, caching, proxy</keyword>
    <abstract>
      <?line 83?>

<t>Group communication with the Constrained Application Protocol (CoAP) can be secured end-to-end using Group Object Security for Constrained RESTful Environments (Group OSCORE), also across untrusted intermediary proxies. However, this sidesteps the proxies' abilities to cache responses from the origin server(s). This specification restores cacheability of protected responses at proxies, by introducing consensus requests which any client in a group can send to one server or multiple servers in the same group.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Constrained RESTful Environments Working Group mailing list (core@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/core/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/core-wg/cacheable-oscore"/>.</t>
    </note>
  </front>
  <middle>
    <?line 87?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Constrained Application Protocol (CoAP) <xref target="RFC7252"/> supports also group communication, for instance over UDP and IP multicast <xref target="I-D.ietf-core-groupcomm-bis"/>. In a group communication environment, exchanged messages can be secured end-to-end by using Group Object Security for Constrained RESTful Environments (Group OSCORE) <xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
      <t>Requests and responses protected with the group mode of Group OSCORE can be read by all group members, i.e., not only by the intended recipient(s), thus achieving group-level confidentiality.</t>
      <t>A core functionality of intermediary proxies is caching.
With any security mechanism for CoAP, this presents operators with a trade-off between required trust and provided performance:</t>
      <ul spacing="normal">
        <li>
          <t>If an intermediary proxy is trusted, it can inspect traffic that is going through, cache it, and provide cached responses.
<!-- This can be realized in TLS or any other 1:1 scheme by handing broad certificates to proxies, or in Group OSCORE by sending the request in group mode and then inspecting whether the response is from origin or from the proxy –
but those details would just distract here. -->
          </t>
        </li>
        <li>
          <t>An untrusted proxy, while possible with OSCORE (and group OSCORE),
sees different ciphertext for different requests even when they access the same resource,
and even if it could somehow produce a cache hit,
cached responses would be rejected by OSCORE's request-response matching.</t>
        </li>
      </ul>
      <t>This document provides a way out of the trade-off situation: It enables cacheability of protected responses for proxies that are not members of the OSCORE group (and are unaware of OSCORE in general). To this end, it builds on the concept of "consensus request" initially considered in <xref target="I-D.ietf-core-observe-multicast-notifications"/>, and defines "Deterministic Request" as a convenient incarnation of such concept.</t>
      <t>All clients wishing to send a particular GET or FETCH request are able to deterministically compute the same protected request, using a variation of the pairwise mode of Group OSCORE. It follows that cache hits become possible at the proxy, which can thus serve clients in the group from its cache. Like in <xref target="I-D.ietf-core-observe-multicast-notifications"/>, this requires that clients and servers are already members of a suitable OSCORE group.</t>
      <t>Cacheability of protected responses is useful also in applications where several clients wish to retrieve the same object from a single server.
Some security properties of OSCORE are dispensed with, in order to gain other desirable properties.</t>
      <t>In order to clearly handle the protocol's security properties,
and to broaden applicability to group situations outside the deterministic case,
the technical implementation is split into two halves:</t>
      <ul spacing="normal">
        <li>
          <t>maintaining request-response bindings in the absence of request source authentication; and</t>
        </li>
        <li>
          <t>building and processing of Deterministic Requests
(which have no source authentication, and thus require the former).</t>
        </li>
      </ul>
      <section anchor="use-cases">
        <name>Use Cases</name>
        <t>When firmware updates are delivered using CoAP, many similar devices fetch the same large data at the same time. Collecting such large data at a proxy from its cache not only keeps the traffic low, but also lets the clients ride single file to hide their numbers <xref target="SW-EPIV"/> and identities. By using protected Deterministic Requests as defined in this document, it is possible to efficiently perform data collection at a proxy also when the firmware updates are protected end-to-end.</t>
        <t>When relying on intermediaries to fan out the delivery of multicast data protected end-to-end as in <xref target="I-D.ietf-core-observe-multicast-notifications"/>, the use of protected Deterministic Requests as defined in this document allows for a more efficient setup, by reducing the amount of message exchanges and enabling early population of cache entries (see <xref target="det-requests-for-notif"/>).</t>
        <t>When building RESTful networks following the patterns of Information-Centric Networking (ICN),
CoAP proxies take the role of forwarding nodes.
Caching plays a large role in such networks,
and cacheable OSCORE provides a compatible security mechanism <xref target="ICN-paper"/>.</t>
        <t>When DNS messages are transported over CoAP <xref target="I-D.ietf-core-dns-over-coap"/>, it is recommended to use OSCORE for protecting such messages. By restoring cacheability of OSCORE-protected responses, it becomes possible to benefit from the cache retrieval of such CoAP responses that particularly transport DNS messages.</t>
      </section>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

<t>Readers are expected to be familiar with terms and concepts of CoAP <xref target="RFC7252"/> and its method FETCH <xref target="RFC8132"/>, group communication for CoAP <xref target="I-D.ietf-core-groupcomm-bis"/>, COSE <xref target="RFC9052"/><xref target="RFC9053"/>, OSCORE <xref target="RFC8613"/>, and Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
        <t>This document also introduces the following new terms.</t>
        <ul spacing="normal">
          <li>
            <t>Consensus Request: a CoAP request that multiple clients use to repeatedly access a particular resource.
In this document, it exclusively refers to requests protected with Group OSCORE to a resource hosted at one or more servers in the OSCORE group.  </t>
            <t>
A Consensus Request has all the properties relevant to caching, but its transport dependent properties (e.g., Token or Message ID) are not defined. Thus, different requests on the wire can be said to "be the same Consensus Request" even if they have different Tokens or source addresses.  </t>
            <t>
The Consensus Request is the reference for request-response binding.
 In general, a client processing a response to a Consensus Request did not generate (and thus sign) the consensus request.
 The client not only needs to decrypt the Consensus Request to understand a corresponding response (for example to tell which path was requested),
 but it also needs to verify that this is the only Consensus Request that could elicit this response.</t>
          </li>
          <li>
            <t>Deterministic Client: a fictitious member of an OSCORE group, having no Sender Sequence Number, no asymmetric key pair, and no Recipient Context.  </t>
            <t>
The Group Manager responsible for the OSCORE group (see <xref section="12" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>) sets up the Deterministic Client, and assigns it a unique Sender ID like for other group members. Furthermore, the Deterministic Client has only the minimum common set of privileges shared by all group members.</t>
          </li>
          <li>
            <t>Deterministic Request: a Consensus Request generated by the Deterministic Client. The use of Deterministic Requests is defined in <xref target="sec-deterministic-requests"/>.</t>
          </li>
          <li>
            <t>Ticket Request: a Consensus Request generated by the server itself.  </t>
            <t>
This term is not used in the main document, but is useful in comparison with other applications of Consensus Requests
that are generated in a different way than as Deterministic Requests.
The prototypical Ticket Request is the Phantom Request defined in <xref target="I-D.ietf-core-observe-multicast-notifications"/>.  </t>
            <t>
In <xref target="sec-ticket-requests"/>, the term is used to bridge the gap with that document.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="oscore-nosourceauth">
      <name>OSCORE Message Processing without Source Authentication</name>
      <t>In OSCORE, the response is cryptographically bound to the request through CBOR items in their authenticated encryption's AAD (Additional Authenticated Data):
"request_kid" and "request_piv".
Group OSCORE adds "request_kid_context" to that list.
Hereafter, those items are referred to as "request_details".</t>
      <t>The security of such binding depends on the server obtaining source authentication for the request,
and on that source matching the request_details:
if this precondition is not fulfilled, a malicious group member could alter a request to the server (without altering the request_details above),
and the client would still accept the response as if it were a response to its request.</t>
      <t>Source authentication is thus a precondition for the secure use of OSCORE and Group OSCORE.
However, it is hard to provide when:</t>
      <ul spacing="normal">
        <li>
          <t>Requests are built exclusively using shared keying material, like in the case of a Deterministic Client.</t>
        </li>
        <li>
          <t>Requests are sent without source authentication, or their source authentication is not checked. (This was part of <xref target="I-D.ietf-core-oscore-groupcomm"/> in revisions before version -12)</t>
        </li>
      </ul>
      <t>This document does not [ yet? ] give full guidance on how to restore request-response binding for the general case,
but currently only offers suggestions:</t>
      <ul spacing="normal">
        <li>
          <t>The response can contain the full request. An option that allows doing that is presented in <xref target="I-D.bormann-core-responses"/>.</t>
        </li>
        <li>
          <t>The response can contain a cryptographic hash of the full request. This is used by the method specified in this document, as defined in <xref target="ssec-request-hash-option"/>.
<!-- * The request_details above can be transported in a Class E option (encrypted and integrity protected) or a Class I option (unencrypted, but part of the AAD hence integrity protected).
The latter has the advantage that the option can be removed in transit and reconstructed at the receiver. -->
          </t>
        </li>
        <li>
          <t>Alternatively, the agreed-on request data can be placed in a different position in the AAD,
or take part to the derivation of the OSCORE Security Context.
In the latter case, care needs to be taken to never initialize a Security Context twice with the same input,
as that would lead to reuse of the AEAD nonce.</t>
        </li>
      </ul>
      <t>[ Suggestion for any OSCORE v2: avoid request_details in the request's AAD as individual elements. Rather than having 'request_kid', 'request_piv' (and, in Group OSCORE, 'request_kid_context') as separate fields, they can better be something more pluggable.
This would avoid the need to make up an option before processing, and would allow just plugging in the (hash of the) request in there as replacing the elements for the request_details. ]</t>
      <t>Additional care has to be taken in ensuring that request_details that are not expressed in the request itself are captured. For instance, these include an indication of the Security Context from which the request is assumed to have been originated.</t>
      <t>Requests without source authentication have to be processed assuming only the minimal possible privilege of the requester
[ which is currently described as the authorization of the Deterministic Client, and may be moved up here in later versions of this document ].
If a response is built to such a request and contains data more sensitive than that
(which might be justified if the response is protected for an authorized group member in pairwise mode),
special consideration for any side channels like response size or timing is required.</t>
    </section>
    <section anchor="sec-deterministic-requests">
      <name>Deterministic Requests</name>
      <t>This section defines a method for clients starting from a same intended CoAP request to independently build the same, corresponding Deterministic Request protected with Group OSCORE.</t>
      <section anchor="sec-deterministic-requests-unprotected">
        <name>Deterministic Unprotected Request</name>
        <t>When clients build their unprotected request,
they can already minimize variability
and thus maximize reproducibility.</t>
        <t>This document does not set out full guidelines for minimizing the variation,
but considered starting points are:</t>
        <ul spacing="normal">
          <li>
            <t>Set the inner Observe option to 0 even if no observation is intended (and hence no outer Observe option is set). Thus, both Observe and non-Observe requests can be aggregated into a single request, which is upstreamed as an observation at the latest when any Observe request reaches a caching proxy.  </t>
            <t>
In this case, following a Deterministic Request that includes only an inner Observe option, servers include an inner Observe option (but no outer Observe option) in a successful response sent as reply. Also, when receiving a response to such a Deterministic Request previously sent, clients have to silently ignore the inner Observe option in that response.</t>
          </li>
          <li>
            <t>Avoid setting the ETag option in requests on a whim.
Only set it when there was a recent response with that ETag.
When obtaining later blocks, do not send the known-stale ETag.</t>
          </li>
          <li>
            <t>In block-wise transfers, maximally sized large inner blocks (szx=6) <bcp14>SHOULD</bcp14> be selected.
This serves not only to align the clients on consistent cache entries,
but also helps amortize the additional data transferred in the per-message signatures.  </t>
            <t>
Outer block-wise transfer can then be used if these messages exceed a hop's efficiently usable MTU size.  </t>
            <t>
(If BERT <xref target="RFC8323"/> is usable with OSCORE, its use is fine as well;
in that case, the server picks a consistent block size for all clients anyway).
<!-- see https://github.com/core-wg/corrclar/pull/45 -->
            </t>
          </li>
          <li>
            <t>The Padding option defined in <xref target="sec-padding"/> can be used to limit an adversary's ability to deduce the content and the target resource of Deterministic Requests from their length. In particular, all Deterministic Requests of the same class (ideally, all requests to a particular server) can be padded to reach the same total length, that should be agreed on among all users of the same OSCORE Security Context.</t>
          </li>
        </ul>
        <!--
MT: proposed  s/should be agreed/SHOULD be agreed
-->

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

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-groupcomm-bis-14"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-groupcomm">
          <front>
            <title>Group Object Security for Constrained RESTful Environments (Group OSCORE)</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <date day="5" month="July" year="2025"/>
            <abstract>
              <t>   This document defines the security protocol Group Object Security for
   Constrained RESTful Environments (Group OSCORE), providing end-to-end
   security of CoAP messages exchanged between members of a group, e.g.,
   sent over IP multicast.  In particular, the described protocol
   defines how OSCORE is used in a group communication setting to
   provide source authentication for CoAP group requests, sent by a
   client to multiple servers, and for protection of the corresponding
   CoAP responses.  Group OSCORE also defines a pairwise mode where each
   member of the group can efficiently derive a symmetric pairwise key
   with each other member of the group for pairwise OSCORE
   communication.  Group OSCORE can be used between endpoints
   communicating with CoAP or CoAP-mappable HTTP.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-groupcomm-26"/>
        </reference>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC8132">
          <front>
            <title>PATCH and FETCH Methods for the Constrained Application Protocol (CoAP)</title>
            <author fullname="P. van der Stok" initials="P." surname="van der Stok"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="A. Sehgal" initials="A." surname="Sehgal"/>
            <date month="April" year="2017"/>
            <abstract>
              <t>The methods defined in RFC 7252 for the Constrained Application Protocol (CoAP) only allow access to a complete resource, not to parts of a resource. In case of resources with larger or complex data, or in situations where resource continuity is required, replacing or requesting the whole resource is undesirable. Several applications using CoAP need to access parts of the resources.</t>
              <t>This specification defines the new CoAP methods, FETCH, PATCH, and iPATCH, which are used to access and update parts of a resource.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8132"/>
          <seriesInfo name="DOI" value="10.17487/RFC8132"/>
        </reference>
        <reference anchor="RFC8613">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <date month="July" year="2019"/>
            <abstract>
              <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE). OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
              <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration. Therefore, this document updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8613"/>
          <seriesInfo name="DOI" value="10.17487/RFC8613"/>
        </reference>
        <reference anchor="RFC9052">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
              <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="96"/>
          <seriesInfo name="RFC" value="9052"/>
          <seriesInfo name="DOI" value="10.17487/RFC9052"/>
        </reference>
        <reference anchor="RFC9053">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Initial Algorithms</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines a set of algorithms that can be used with the CBOR Object Signing and Encryption (COSE) protocol (RFC 9052).</t>
              <t>This document, along with RFC 9052, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9053"/>
          <seriesInfo name="DOI" value="10.17487/RFC9053"/>
        </reference>
        <reference anchor="COSE.Algorithms" target="https://www.iana.org/assignments/cose/cose.xhtml#algorithms">
          <front>
            <title>COSE Algorithms</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC7641">
          <front>
            <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <date month="September" year="2015"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks. The state of a resource on a CoAP server can change over time. This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time. The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7641"/>
          <seriesInfo name="DOI" value="10.17487/RFC7641"/>
        </reference>
        <reference anchor="RFC9175">
          <front>
            <title>Constrained Application Protocol (CoAP): Echo, Request-Tag, and Token Processing</title>
            <author fullname="C. Amsüss" initials="C." surname="Amsüss"/>
            <author fullname="J. Preuß Mattsson" initials="J." surname="Preuß Mattsson"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <date month="February" year="2022"/>
            <abstract>
              <t>This document specifies enhancements to the Constrained Application Protocol (CoAP) that mitigate security issues in particular use cases. The Echo option enables a CoAP server to verify the freshness of a request or to force a client to demonstrate reachability at its claimed network address. The Request-Tag option allows the CoAP server to match block-wise message fragments belonging to the same request. This document updates RFC 7252 with respect to the following: processing requirements for client Tokens, forbidding non-secure reuse of Tokens to ensure response-to-request binding when CoAP is used with a security protocol, and amplification mitigation (where the use of the Echo option is now recommended).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9175"/>
          <seriesInfo name="DOI" value="10.17487/RFC9175"/>
        </reference>
        <reference anchor="RFC9200">
          <front>
            <title>Authentication and Authorization for Constrained Environments Using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This specification defines a framework for authentication and authorization in Internet of Things (IoT) environments called ACE-OAuth. The framework is based on a set of building blocks including OAuth 2.0 and the Constrained Application Protocol (CoAP), thus transforming a well-known and widely used authorization solution into a form suitable for IoT devices. Existing specifications are used where possible, but extensions are added and profiles are defined to better serve the IoT use cases.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9200"/>
          <seriesInfo name="DOI" value="10.17487/RFC9200"/>
        </reference>
        <reference anchor="I-D.ietf-ace-key-groupcomm-oscore">
          <front>
            <title>Key Management for Group Object Security for Constrained RESTful Environments (Group OSCORE) Using Authentication and Authorization for Constrained Environments (ACE)</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="28" month="August" year="2025"/>
            <abstract>
              <t>   This document defines an application profile of the Authentication
   and Authorization for Constrained Environments (ACE) framework, to
   request and provision keying material in group communication
   scenarios that are based on the Constrained Application Protocol
   (CoAP) and are secured with Group Object Security for Constrained
   RESTful Environments (Group OSCORE).  This application profile
   delegates the authentication and authorization of Clients, which join
   an OSCORE group through a Resource Server acting as Group Manager for
   that group.  This application profile leverages protocol-specific
   transport profiles of ACE to achieve communication security, server
   authentication, and proof of possession for a key owned by the Client
   and bound to an OAuth 2.0 access token.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-key-groupcomm-oscore-18"/>
        </reference>
        <reference anchor="I-D.amsuess-lwig-oscore">
          <front>
            <title>OSCORE Implementation Guidance</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <date day="29" month="April" year="2020"/>
            <abstract>
              <t>   Object Security for Constrained RESTful Environments (OSCORE) is a
   means of end-to-end protection of short request/response exchanges
   for tiny devices, typically transported using the Constrained
   Application Protocol (CoAP).  This document aims to assist
   implementers in leveraging the optimizations catered for by the
   combination of CoAP and OSCORE, and by generally providing experience
   from earlier implementations.

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

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

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

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

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

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

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

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

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

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

0x68 (version:1, type: ACK, Token Length: 8 - 1 byte)
  45 (Code: 2.05 - 1 byte)
  9483 (Message ID - 2 bytes)
  f0aeef1c796812a0 (Token - 8 bytes)
  93 290052 (OSCORE option - 4 bytes)
  52 0e10 (Max age option - 3 bytes)
  ff (payload marker - 1 byte)
  cbc7356c84c10b626fef8bd57ed2dfaeec175f8e44e1b29180
    6c0fb8b26be41b9266766ee4175644dfdb25e58d2d777b10
    5c06c5bade67d6262ca30712342a3275dd378a99e8f5ddfa
    5d257c5a4d77b5d681d73848ed (payload - 86 bytes)
]]></artwork>
      </section>
    </section>
    <section numbered="false" anchor="acknowldegment">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank <contact fullname="Michael Richardson"/>, <contact fullname="Jim Schaad"/>, and <contact fullname="Göran Selander"/> for their comments and feedback.</t>
      <t>This work was supported by the Sweden's Innovation Agency VINNOVA within the EUREKA CELTIC-NEXT projects CRITISEC and CYPRESS; and by the H2020 project SIFIS-Home (Grant agreement 952652).</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+2923Ij17Ug+I6vyKYiukgFgMIdIGVZh2KxJB6pLl1kWcdh
e3Q2MjfIdAGZmMwEWXSpOvof5gNmHuYb5uk8jedL5ktm3fYtkQBZZcndHTFy
yCLBxM691173a6fTad2eRMNWq0qrpT6JDs5UfKPVfKmjV5dnr96cH7TUfF7o
28Y/JXmcqRV8LSnUouqkulp04rzQndg82slL+qDXa6Xr4iSqik1ZDXq9496g
1YpVdRKVVdIqN/NVWpZpnlX3a1ju4vzqeevu+iQ6y9+cRz/lxbs0u46+K/LN
uvXuDj8+fd2WXbSj1WZZpbEqq3aE74VH29G6yN/fwxvyBH49iTawsVmrpTbV
TV6ctDpRmpWwTDc6XZV//4+ybEURH+TspkjLKlWZ95c432RVcX8SncLei1TB
R3ql0uVJFJun/0Wtyo0uy26cr1odeIDWf9GNrtJlHiu7/AtVxLn7MC9gb28u
Ls+j02/hV1hdawDJRakWf82LpLxWFexkMMBNpBXs4Ad4naItJbDa5XmnPxmN
etFllcfvbvLlyt/t5Z1OdOY2u8J3dyt6978UabfUrVaWFytVpbf6BJ676Dzr
uiu8RmjDcVadeVpu/1nu1T6FT7x5fjYdjAfy46w/tD9O+kP58bhnH4Af6dOz
V5fn3dPldV6k1c2K3hVF5qoi+ocAdXH68pR+T1QFp1+oJRwBfxfcxXUitw7/
SRXXCNKbqlqXJ0+f3t3ddeG+VBdWfKoA5a6zlc6q8mmcl5r+r/v+plotv1Bu
nVaaLXw44TEno745RX86Nj8CYgeQUrHuvNP3HiwZbOYhwZrO8i69rv3Jg/S8
1MWt7lg072R5lS7gxwoIpuFqkqzs5Le6gN/UGv98cPlT5/z1xR8OmkDbkf8K
zn7XjX7cwFvsp4y432kAmPb+xHfQP55O/Su4BHhHP6mCn4F9p7pE6AH3oK8u
0uUq+rFKuge4rYuzl521WuviMRsDYv3u7/+RJfn/87+rrLa7M5292/7r9gKO
poNvN9B8w/evurjEZXyzSpOqtsTVTb5S5fbfa0sAQ/jp7//nzTIt45vaCi9U
Vd2ksEb4gGHLxPuA761Wm0xuProD9BQmCFzk/PJqsVlGLxBL1qqo7qPTOAbk
iqo8UtEz4CQdABPwrzj6Sc+jfAGbBt5YHnjXOegN+p1+r5FyUq31+/USEKyL
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
HyUCaI5qtwtKrveYM58sz7WJN0hSeEOUksQBu5b1YK7Ue/4rcD3Ok+Ynttz7
Vo0ll9GmcuqrXtLN4IXIuwzvtElQop26dDF7Y2tQJVnBJ9X0UrN2kQKeFdEr
9jZYFTSPetannOUROyOsam8vnPyzrB3hU5tqeynCrOrIuL3nOWY1yiPsP8w6
5nfrCRfFRV2DXnMtXhnyGUu2hE0Cs2xps8aqJ7ViboTCy9uyKFLIWAAhKE2B
hH74WsxQBYOllLRGyap4f28cLRUns6I+46ItdZMqcNuKbBCnIEmIbWC3vSiG
J0oabuUQr3YHnI9YvQPuhxwfHWOOaVDMiKXtPRgayzJvMxBYs9z2zQsP3UWS
YJOBab+kVFsslhOCMYKnBClCBJ9eZ7mk+DSeJ82MhPZ82aekkQDKVAa3z6/U
tfcVP1yiEAFWqHW+ymg/5G83eSjw7jvKacRzZu49ntsL18avE+U7BwqLoPky
j99hqCYXchRnw7ssv8s6QFhLLQtgsnXGz3eI05NSv6DcdKJ78myVJB04o4EB
wm+IDsu/vf96chRJ6JVS+JfEbbrGN0qAK11sA6lhCQAOEoryjCkfhHZWhakg
bclTpljEjV6uS8wzAc7wNy0Wi1WrSEqaAxRONVrromMyUtCTrlAr4hjSq42F
V3h+SZfURM7s012I4mSzLPT7GHVPBVb5GhRrP/NoU1Jmx4urtwQ8etchyP5v
z99coQGMgdXhYIi+gtI87OVNt8mps5FMbowzAzrc6eXyKyqtlNgKUbTngVqn
eCfKByWdjKUviWkv9RUYyZ26P7Ip7xjBMLVO17CVzRyLOZ+SeX53jf8tYkCB
p2tg6k9HY5MQjkbka7yEzOL6liN+zX+H0wp/NF7dJYiCipSQBBmJKu6flJGX
mJhoSteW6BmdyDjOuDzLxVl3hwZM7giIQ6Dv6+qGClVcMLhNYNnxZVEGSV2I
yfw+BPmEVMFfs0RNXN6LMPOd2PosBIEWC0/5eX1VDuQoG2uLS/PGpJ+zeUwM
Y5Ujt4M3AuyKcF87bVryULReXJ1QyDdHoEfl0/ryTx318gctudozozvxFywr
QRHEbOA8vsnl1ktBaywHZRfYrqCD4Qx0+ayAezavt6SESOZp5tXG7bgnioU6
XeeQRM2R2ZspDCB9xryarwMlq3PWwtV4CUuORVl2Jv7BNVZGiN+fFiPrEoS8
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
0Y5Qjgnl3qS+8uNirSa+qsmeEY5otJilHXzAnXleeYPKC6tTmjYUy3sve5gn
cQElbUpUISzfEk7o+sw1KRpqW3fl3opOePLwZ/wgLdxpRb4Sbu/rk1jzmEmp
RamDleo2NXyE1pQn9qwOYIO3Pld00VKhtgZ9inxXsRmE2lS+5MwO8e60gxFH
jfZBR0auI5EZ9ZED4g5RUT0LiK0T3RCxmr71Ttph9l9msoUNVtymkuot3ZlQ
IylD+oQ/5rLQnboX80ZG62SMJtx7xsyqE0eL1fn8xp0s1rcarwo2tE3OIts+
XP5Bgoggk3uISw4/rr0TPo95vfdG+fKu0VcS0FYs0B3kSAep0TqHdjOBZvdh
jR189xnsgNpcYubjfzGZj9RGAbT+XTPvD6gYvrphR2JR3chA+NzFy7Dhy6vL
828wSYQSItjhCNc2J+cpB8zvvYWI39iyfQu+H549xzwfuiPO9cGPIk6YkW4K
QRbYk/KrHe8sNpnJo6A1BMT4o0RqMbV3E6MJyJXv3iqod6AxSQ6HerKfqIx+
Xg1u2lojvEtpZAE3JKSyd045JiNSnx/qjhyk7MzvJUBmkNoEYUFgmdw3m9+i
4gIEKYfb74yXXSr7z6yes7yXWloJfFLshviU00lrWbgmnwLVS+QO6BJ3hb2o
S8j9UVvdDaeWnXozXGmbKl2ixS2DMr3xbNwuGhVkaS7lh/FS9GJxXXJZATfs
EMnRVJu1qm5EiXQDDZaaQz+n56fP3AbM21FZNXonoQsckzCXtX6FQEglIl1p
yagI57gS7JI04Ra80l/YS9jmAt8Xp2fRYQo2D7eIwIMlOcfVyb2MGUttK0tJ
v33HE6xJrbWDm3YVXxupSdzUDrFcq7Jh3gh1TDjyR7qZFnHIriSBmo3SUutV
6ZEqB2KQLYp3EE0Tldoy7V1dRmzCNk1y+yJ6m5XAPeBM0tcsuoBrJe7zkxar
lrMUvB4VPCRuq+CIjUv/gJL0ujQBMXGIteFaTaCEgvMyso7KlJbSyNlcKIXB
JAznG3HWkFTzecGN6t3cS5RWWqaRptyQjNKIwL7JN9gwFxuJIKQ0TtzBmB6t
K4OPCVSG44kEu3OJPlIjAFRaVJ0ldUIIYmSoRsXK+BcM0mbGf0VJcqaBBbwF
LR/9RDqmS1oGVyrjPSOq1RJo5UsxXC/WYyMrYi5njM0kz55UHI8Ss1xUIgN0
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
NfhH8VAgAQA=

-->

</rfc>
