<?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.43 (Ruby 3.4.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-lenders-core-oblivious-coap-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.35.0 -->
  <front>
    <title abbrev="Oblivious CoAP">Oblivious CoAP</title>
    <seriesInfo name="Internet-Draft" value="draft-lenders-core-oblivious-coap-01"/>
    <author fullname="Martine Sophie Lenders">
      <organization/>
      <address>
        <email>ietf@lenders.berlin</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>164 40</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <date year="2026" month="October" day="28"/>
    <area>Web and Internet Transport</area>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 65?>

<t>In the Constrained Application Protocol (CoAP), protected requests allow the server to identify the client, also across different and unrelated data exchanges. This document defines Oblivious CoAP, which enables oblivious protected exchanges of CoAP messages for use cases where the identification of the client at the server is not desirable.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Constrained RESTful Environments Working Group mailing list (core@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/core/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://gitlab.com/crimson84/draft-lenders-core-oblivious-coap"/>.</t>
    </note>
  </front>
  <middle>
    <?line 69?>

<section anchor="intro">
      <name>Introduction</name>
      <t>As in HTTP <xref target="RFC9110"/><xref target="RFC9112"/>, protected requests in the Constrained Application Protocol (CoAP) <xref target="RFC7252"/> can identify the client to the server. In HTTP, this can be prevented by using Oblivious HTTP <xref target="RFC9458"/>.</t>
      <t>Although the ability of the server to identify the client is typically not a problem in CoAP, there are use cases where the identification of the client might not be desirable. For example:</t>
      <ul spacing="normal">
        <li>
          <t>DNS over CoAP <xref target="RFC9953"/> clients might want to hide their identity in a similar way as offered by Oblivious DNS over HTTP <xref target="RFC9230"/>.</t>
        </li>
        <li>
          <t>A vendor might want to provide anonymous diagnostic reporting or telemetry transmission for their devices.</t>
        </li>
        <li>
          <t>Clients might want to securely perform anonymous queries at a well-known CoRE Resource Directory <xref target="RFC9176"/>, for example to retrieve a number of proxy resources that are used to enable secure CoAP traffic with onion routing <xref target="I-D.amsuess-t2trg-onion-coap"/>.</t>
        </li>
      </ul>
      <t>In these cases, even protecting CoAP messages with approaches based on CBOR Object Signing and Encryption (COSE) <xref target="RFC9052"/>, such as Object Security for Constrained RESTful Environments (OSCORE) <xref target="RFC8613"/>, is either not helpful or not efficient for hiding the client's identity from the server.</t>
      <t>In particular, such approaches require the client and the server to establish a long-term security context between each other (and potentially between themselves and multiple intermediary hops), which makes the same client identifiable by the server, also across different and unrelated data exchanges. Alternatively, the same client could use different identities to perform different runs of a full-fledged key establishment protocol for protecting different data exchanges with the server, which results in performance penalties.</t>
      <t>On the other hand, Oblivious HTTP uses Hybrid Public Key Encryption (HPKE) <xref target="RFC9180"/> via a trusted Oblivious Relay Resource (effectively a proxy) that is not colluding with the server, in order to hide the client's identity from the server and obfuscate the data exchange from the perspective of the Oblivious Relay Resource.</t>
      <t>This document defines Oblivious CoAP, which brings the advantages of such an oblivious exchange to CoAP.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

<t>Readers are expected to be familiar with the terms and concepts related to CoAP <xref target="RFC7252"/>, OSCORE <xref target="RFC8613"/>, Concise Data Definition Language (CDDL) <xref target="RFC8610"/>, Concise Binary Object Representation (CBOR) <xref target="RFC8949"/>, CBOR sequences <xref target="RFC8742"/>, and HPKE <xref target="RFC9180"/>.</t>
        <t>In addition, this document uses the following terms.</t>
        <dl>
          <dt><iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref>:</dt>
          <dd>
            <t anchor="dfn-original-req">A CoAP request as specified in <xref target="RFC7252"/>.</t>
          </dd>
          <dt><iref item="Original CoAP Response"/><xref target="dfn-original-resp" format="none">Original CoAP Response</xref>:</dt>
          <dd>
            <t anchor="dfn-original-resp">A CoAP response as specified in <xref target="RFC7252"/>.</t>
          </dd>
          <dt><iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref>:</dt>
          <dd>
            <t anchor="dfn-ocoap-req">An <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref> that is encapsulated in an HPKE-encrypted message, see <xref target="ocoap-request"/>. <em>Cmp.</em> "Encapsulated Request" in <xref target="RFC9458"/>.</t>
          </dd>
          <dt><iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref>:</dt>
          <dd>
            <t anchor="dfn-ocoap-resp">An <iref item="Original CoAP Response"/><xref target="dfn-original-resp" format="none">Original CoAP Response</xref> that is encapsulated in an HPKE-encrypted message, see <xref target="ocoap-response"/>. <em>Cmp.</em> "Encapsulated Response" in <xref target="RFC9458"/>.</t>
          </dd>
          <dt><iref item="Oblivious CoAP Client"/><xref target="dfn-ocoap-client" format="none">Oblivious CoAP Client</xref>:</dt>
          <dd>
            <t anchor="dfn-ocoap-client">An <iref item="Oblivious CoAP Client"/><xref target="dfn-ocoap-client" format="none">Oblivious CoAP Client</xref> originates <iref item="Oblivious CoAP Requests"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Requests</xref>. It is a client for both the <iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref> and the <iref item="Target Resource"/><xref target="dfn-ocoap-target" format="none">Target Resource</xref>. When referring to a general CoAP Client as defined in <xref target="RFC7252"/>, the term "CoAP Client" is used.</t>
          </dd>
          <dt><iref item="Oblivious Proxy Resource"/><xref target="dfn-ocoap-proxy" format="none">Oblivious Proxy Resource</xref>:</dt>
          <dd>
            <t anchor="dfn-ocoap-proxy">A forward-proxy as specified in <xref section="5.7.2" sectionFormat="of" target="RFC7252"/> and acting as an intermediary between the <iref item="Oblivious CoAP Client"/><xref target="dfn-ocoap-client" format="none">Oblivious CoAP Client</xref> and a single <iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref>. <em>Cmp.</em> "Oblivious Relay Resource" in <xref target="RFC9458"/>.</t>
          </dd>
          <dt><iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref>:</dt>
          <dd>
            <t anchor="dfn-ocoap-gateway">A CoAP resource as defined in <xref section="1.2" sectionFormat="of" target="RFC7252"/> that can handle <iref item="Oblivious CoAP Requests"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Requests</xref>, dispatch the corresponding encapsulated Original CoAP Requests to a <iref item="Target Resource"/><xref target="dfn-ocoap-target" format="none">Target Resource</xref>, receive Original CoAP Responses therefrom, and encapsulate those responses in <iref item="Oblivious CoAP Responses"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Responses</xref>. <em>Cmp.</em> "<iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref>" in <xref target="RFC9458"/>.</t>
          </dd>
          <dt><iref item="Target Resource"/><xref target="dfn-ocoap-target" format="none">Target Resource</xref>:</dt>
          <dd>
            <t anchor="dfn-ocoap-target">The resource that is the target of the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref>. It is typically not able to handle <iref item="Oblivious CoAP Requests"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Requests</xref> or <iref item="Oblivious CoAP Responses"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Responses</xref>, so Oblivious CoAP is transparent to it. However, it could still be able to handle otherwise encrypted requests and responses such as those protected with OSCORE <xref target="RFC8613"/>. <em>Cmp.</em> "<iref item="Target Resource"/><xref target="dfn-ocoap-target" format="none">Target Resource</xref>" in <xref target="RFC9458"/>.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>In the same spirit as Oblivious HTTP <xref target="RFC9458"/>, an <iref item="Oblivious CoAP Client"/><xref target="dfn-ocoap-client" format="none">Oblivious CoAP Client</xref> needs to know the following:</t>
      <ul spacing="normal">
        <li>
          <t>Information to reach an <iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref>, which in turn might include information about the <iref item="Target Resource"/><xref target="dfn-ocoap-target" format="none">Target Resource</xref>.</t>
        </li>
        <li>
          <t>A key configuration, including:
          </t>
          <ul spacing="normal">
            <li>
              <t>The HPKE public key of the <iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref> and the key identifier associated with that public key.</t>
            </li>
            <li>
              <t>The set of HPKE algorithms to use with the <iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref>.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>Information to reach an <iref item="Oblivious Proxy Resource"/><xref target="dfn-ocoap-proxy" format="none">Oblivious Proxy Resource</xref> that for all intent and purposes is a CoAP forward-proxy (see <xref section="5.7.2" sectionFormat="of" target="RFC7252"/>), which forwards <iref item="Oblivious CoAP Requests"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Requests</xref> to the <iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref> and returns the resulting <iref item="Oblivious CoAP Responses"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Responses</xref> to the <iref item="Oblivious CoAP Client"/><xref target="dfn-ocoap-client" format="none">Oblivious CoAP Client</xref>.</t>
        </li>
      </ul>
      <t>With that information, the <iref item="Oblivious CoAP Client"/><xref target="dfn-ocoap-client" format="none">Oblivious CoAP Client</xref> is able to compose a protected <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref> intended for the <iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref>, send the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref> to the <iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref> via the <iref item="Oblivious Proxy Resource"/><xref target="dfn-ocoap-proxy" format="none">Oblivious Proxy Resource</xref>, and decrypt and verify the  corresponding protected <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref> composed by the <iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref>.</t>
      <t>Since the <iref item="Oblivious Proxy Resource"/><xref target="dfn-ocoap-proxy" format="none">Oblivious Proxy Resource</xref> does not indicate the client's addressing information in the forwarded <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref>, the <iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref> does not gain knowledge of the client's identity and is unable to associate different unrelated requests from the <iref item="Oblivious CoAP Client"/><xref target="dfn-ocoap-client" format="none">Oblivious CoAP Client</xref>, due to the use of different HPKE contexts across different and unrelated data exchanges.</t>
      <t>Furthermore, since the <iref item="Oblivious Proxy Resource"/><xref target="dfn-ocoap-proxy" format="none">Oblivious Proxy Resource</xref> does not know the HPKE private key of the <iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref>, the <iref item="Oblivious Proxy Resource"/><xref target="dfn-ocoap-proxy" format="none">Oblivious Proxy Resource</xref> cannot create the HPKE context that is necessary for decrypting the <iref item="Oblivious CoAP Requests"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Requests</xref> and Responses that are sent to and from the <iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref>.</t>
      <figure anchor="fig-overview">
        <name>Overview of Oblivious CoAP</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="400" width="576" viewBox="0 0 576 400" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,64 L 8,112" fill="none" stroke="black"/>
              <path d="M 48,112 L 48,384" fill="none" stroke="black"/>
              <path d="M 88,64 L 88,112" fill="none" stroke="black"/>
              <path d="M 152,64 L 152,112" fill="none" stroke="black"/>
              <path d="M 192,112 L 192,384" fill="none" stroke="black"/>
              <path d="M 240,64 L 240,112" fill="none" stroke="black"/>
              <path d="M 288,48 L 288,112" fill="none" stroke="black"/>
              <path d="M 312,64 L 312,112" fill="none" stroke="black"/>
              <path d="M 360,112 L 360,384" fill="none" stroke="black"/>
              <path d="M 424,64 L 424,112" fill="none" stroke="black"/>
              <path d="M 488,112 L 488,384" fill="none" stroke="black"/>
              <path d="M 544,64 L 544,112" fill="none" stroke="black"/>
              <path d="M 568,48 L 568,112" fill="none" stroke="black"/>
              <path d="M 304,32 L 552,32" fill="none" stroke="black"/>
              <path d="M 8,64 L 88,64" fill="none" stroke="black"/>
              <path d="M 152,64 L 240,64" fill="none" stroke="black"/>
              <path d="M 312,64 L 544,64" fill="none" stroke="black"/>
              <path d="M 8,112 L 88,112" fill="none" stroke="black"/>
              <path d="M 152,112 L 240,112" fill="none" stroke="black"/>
              <path d="M 312,112 L 544,112" fill="none" stroke="black"/>
              <path d="M 304,128 L 352,128" fill="none" stroke="black"/>
              <path d="M 368,128 L 480,128" fill="none" stroke="black"/>
              <path d="M 496,128 L 552,128" fill="none" stroke="black"/>
              <path d="M 48,176 L 184,176" fill="none" stroke="black"/>
              <path d="M 192,208 L 352,208" fill="none" stroke="black"/>
              <path d="M 360,240 L 480,240" fill="none" stroke="black"/>
              <path d="M 368,304 L 488,304" fill="none" stroke="black"/>
              <path d="M 200,336 L 360,336" fill="none" stroke="black"/>
              <path d="M 56,368 L 192,368" fill="none" stroke="black"/>
              <path d="M 304,32 C 295.16936,32 288,39.16936 288,48" fill="none" stroke="black"/>
              <path d="M 552,32 C 560.83064,32 568,39.16936 568,48" fill="none" stroke="black"/>
              <path d="M 304,128 C 295.16936,128 288,120.83064 288,112" fill="none" stroke="black"/>
              <path d="M 552,128 C 560.83064,128 568,120.83064 568,112" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="488,240 476,234.4 476,245.6" fill="black" transform="rotate(0,480,240)"/>
              <polygon class="arrowhead" points="376,304 364,298.4 364,309.6" fill="black" transform="rotate(180,368,304)"/>
              <polygon class="arrowhead" points="360,208 348,202.4 348,213.6" fill="black" transform="rotate(0,352,208)"/>
              <polygon class="arrowhead" points="208,336 196,330.4 196,341.6" fill="black" transform="rotate(180,200,336)"/>
              <polygon class="arrowhead" points="192,176 180,170.4 180,181.6" fill="black" transform="rotate(0,184,176)"/>
              <polygon class="arrowhead" points="64,368 52,362.4 52,373.6" fill="black" transform="rotate(180,56,368)"/>
              <g class="text">
                <text x="428" y="52">Server</text>
                <text x="44" y="84">Client</text>
                <text x="184" y="84">Proxy</text>
                <text x="368" y="84">Gateway</text>
                <text x="484" y="84">Target</text>
                <text x="196" y="100">Resource</text>
                <text x="372" y="100">Resource</text>
                <text x="484" y="100">Resource</text>
                <text x="96" y="148">Oblivious</text>
                <text x="76" y="164">CoAP</text>
                <text x="128" y="164">Request</text>
                <text x="240" y="180">Oblivious</text>
                <text x="220" y="196">CoAP</text>
                <text x="272" y="196">Request</text>
                <text x="404" y="212">Original</text>
                <text x="388" y="228">CoAP</text>
                <text x="440" y="228">Request</text>
                <text x="444" y="276">Original</text>
                <text x="388" y="292">CoAP</text>
                <text x="444" y="292">Response</text>
                <text x="312" y="308">Oblivious</text>
                <text x="260" y="324">CoAP</text>
                <text x="316" y="324">Response</text>
                <text x="144" y="340">Oblivious</text>
                <text x="92" y="356">CoAP</text>
                <text x="148" y="356">Response</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
                                    .--------------------------------.
                                   |              Server              |
+---------+       +----------+     |  +-------------+--------------+  |
| Client  |       | Proxy    |     |  |   Gateway   |    Target    |  |
|         |       | Resource |     |  |   Resource  |   Resource   |  |
+----+----+       +----+-----+     |  +-----+-------+-------+------+  |
     |                 |            `-------|---------------|--------'
     | Oblivious       |                    |               |
     | CoAP Request    |                    |               |
     +---------------->| Oblivious          |               |
     |                 | CoAP Request       |               |
     |                 +------------------->| Original      |
     |                 |                    | CoAP Request  |
     |                 |                    +-------------->|
     |                 |                    |               |
     |                 |                    |      Original |
     |                 |                    | CoAP Response |
     |                 |          Oblivious |<--------------+
     |                 |      CoAP Response |               |
     |       Oblivious |<-------------------+               |
     |   CoAP Response |                    |               |
     |<----------------+                    |               |
     |                 |                    |               |
]]></artwork>
        </artset>
      </figure>
      <t><xref target="fig-overview"/> provides an overview of the steps of Oblivious CoAP. Readers familiar with Oblivious HTTP will notice the strong similarities to Figure <xref target="RFC9458" section="1" sectionFormat="bare" relative="#figure-1"/> of <xref target="RFC9458"/> and the steps described in <xref section="2" sectionFormat="of" target="RFC9458"/>.</t>
      <t>Compared to the steps of Oblivious HTTP, there are only minor differences in the steps of Oblivious CoAP, which are outlined below.</t>
      <ol spacing="normal" type="1"><li>
          <t>The <iref item="Oblivious CoAP Client"/><xref target="dfn-ocoap-client" format="none">Oblivious CoAP Client</xref> (Client) composes the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref> for a <iref item="Target Resource"/><xref target="dfn-ocoap-target" format="none">Target Resource</xref>, e.g., as described in <xref target="RFC7252"/> or <xref target="RFC8323"/>.</t>
        </li>
        <li>
          <t>Using HPKE with a known key configuration (see <xref target="key-configuration"/>) and according to the process described in <xref target="request-construction"/>, the Client produces a protected <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref> from the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref>.</t>
        </li>
        <li>
          <t>The Client sends the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref> to the <iref item="Oblivious Proxy Resource"/><xref target="dfn-ocoap-proxy" format="none">Oblivious Proxy Resource</xref> (Proxy Resource).</t>
        </li>
        <li>
          <t>The Proxy Resource forwards the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref> to the <iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref> (Gateway Resource).</t>
        </li>
        <li>
          <t>The Gateway Resource receives the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref>, processes it using HPKE with its key configuration, and obtains the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref> as a result.</t>
        </li>
        <li>
          <t>The Gateway Resource provides the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref> to the <iref item="Target Resource"/><xref target="dfn-ocoap-target" format="none">Target Resource</xref>.</t>
        </li>
      </ol>
      <t>The Gateway Resource and the <iref item="Target Resource"/><xref target="dfn-ocoap-target" format="none">Target Resource</xref> could be hosted at different servers or instead at the same server as shown in <xref target="fig-overview"/>, in which case the <iref item="Target Resource"/><xref target="dfn-ocoap-target" format="none">Target Resource</xref> could even be the same as the Gateway Resource. The following refers to the "server" as the CoAP endpoint at which both the Gateway Resource and the <iref item="Target Resource"/><xref target="dfn-ocoap-target" format="none">Target Resource</xref> are hosted.</t>
      <t>Once the Gateway Resource receives the <iref item="Original CoAP Response"/><xref target="dfn-original-resp" format="none">Original CoAP Response</xref> from the <iref item="Target Resource"/><xref target="dfn-ocoap-target" format="none">Target Resource</xref>, it sends the response as a reply to the Client according to the following steps:</t>
      <ol spacing="normal" type="1"><li>
          <t>Using the receiving HPKE context generated from the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref>, the Gateway Resource composes an <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref> from the <iref item="Original CoAP Response"/><xref target="dfn-original-resp" format="none">Original CoAP Response</xref> and sends it to the Proxy Resource.</t>
        </li>
        <li>
          <t>The Proxy Resource forwards the <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref> back to the Client.</t>
        </li>
        <li>
          <t>The Client receives the <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref>, processes it using the sending HPKE context generated for the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref>, and produces the <iref item="Original CoAP Response"/><xref target="dfn-original-resp" format="none">Original CoAP Response</xref> as a result.</t>
        </li>
      </ol>
      <t>When a CoAP request/response is specifically an <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref>/Response, it includes the OCoAP Option defined in <xref target="ocoap-option"/>.</t>
      <t>In addition to single data exchanges like the one discussed above, CoAP supports exchanges where one or more requests can lead to one or more responses. Non-exhaustively, these include:</t>
      <ul spacing="normal">
        <li>
          <t>The use of CoAP <strong>Observe</strong> <xref target="RFC7641"/>, for a client to register its interest in receiving unsolicited notification responses from a server, following changes in the representation of a resource at the server.
Effectively, this results in one long-standing request followed by multiple related responses.</t>
        </li>
        <li>
          <t>The use of CoAP <strong>block-wise transfer</strong> <xref target="RFC7959"/> <xref target="RFC9177"/>, for a client and a server to split a large "body" of data into different blocks, each of which is sent as the payload of one request or response.
Effectively, this results in a sequence of requests/responses that are related to the transfer of the same body of data from the client/server.</t>
        </li>
      </ul>
      <t>To support these exchanges, Oblivious CoAP provides a way to process these multiple, related requests and responses using the same HPKE context, according to information conveyed by the OCoAP Option.</t>
      <section anchor="comparison-ohttp">
        <name>Comparison to Oblivious HTTP</name>
        <t>Similar to Oblivious HTTP <xref target="RFC9458"/>, Oblivious CoAP has only limited applicability, as it requires support from a willing <iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref>, which prevents Oblivious CoAP from being used in generic applications.
Notably, however, the <iref item="Oblivious Proxy Resource"/><xref target="dfn-ocoap-proxy" format="none">Oblivious Proxy Resource</xref> can be any CoAP forward-proxy that can reach the <iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref>.</t>
        <t>In contrast to Oblivious HTTP, Oblivious CoAP does not use a signaling Content-Format, which would bloat the IANA Content-Format registry.
Rather, in the same spirit of the OSCORE security protocol, which relies on the OSCORE Option (see <xref target="RFC8613"/>), Oblivious CoAP uses a signaling OCoAP Option (see <xref target="ocoap-option"/>), which also conveys information for the correct processing of multiple, related requests and responses using the same HPKE context (see <xref target="overview"/>).</t>
        <t>Oblivious CoAP is intentionally similar to Oblivious HTTP and usable with generic CoAP forward-proxies, in order to allow for potential Oblivious-CoAP-to-Oblivious-HTTP proxies. These are, however, application-specific and thus out of scope for this document.</t>
      </section>
      <section anchor="comparison-oscore">
        <name>Comparison to OSCORE</name>
        <t>The security protocol OSCORE <xref target="RFC8613"/> builds on COSE <xref target="RFC9052"/> and provides end-to-end protection of CoAP messages between a client and a server, also in the presence of (untrusted) intermediary proxies from which as much information as possible is hidden by encryption.</t>
        <t>In contrast to OSCORE, Oblivious CoAP has the advantage that the server cannot correlate two protected requests from the same client, unless that is desired by the client (see <xref target="request-construction"/>).</t>
        <t>Similar to OSCORE, which relies on the OSCORE Option, Oblivious CoAP relies on the OCoAP Option and thus avoids signaling an Oblivious-CoAP-related Content-Format, while hiding the Content-Format of the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref>/Response by encrypting it when producing the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref>/Response.</t>
        <t>Since the key exchange and message protection are left to HPKE, the OCoAP Option can be even simpler: As the same HPKE context could be used to produce multiple, related <iref item="Oblivious CoAP Requests"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Requests</xref>/Responses (see <xref target="request-construction"/>), the OCoAP Option value identifies the HPKE context used and allows the two endpoints to count the <iref item="Oblivious CoAP Requests"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Requests</xref>/Responses produced with that context.</t>
        <t>When using Oblivious CoAP, a field of an <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref>/Response is protected to achieve the same security level that is achieved by OSCORE when protecting that field (see <xref section="4" sectionFormat="of" target="RFC8613"/>), which results in the same security and privacy implications as in OSCORE (see Sections <xref target="RFC8613" section="12.1" sectionFormat="bare"/> and <xref target="RFC8613" section="12.8" sectionFormat="bare"/> of <xref target="RFC8613"/>). For example, this applies to the protection of CoAP options, which occurs according to the same classes defined for OSCORE (see <xref section="4.1" sectionFormat="of" target="RFC8613"/>).</t>
      </section>
    </section>
    <section anchor="key-configuration">
      <name>Key Configuration</name>
      <t>A key configuration can be encoded as defined in <xref section="3" sectionFormat="of" target="RFC9458"/>. A collection of such key configurations can be distributed using the media type "application/ohttp-keys", potentially through CoAP messages with the corresponding Content-Format registered in <xref target="content-format"/>.</t>
      <t>Alternatively, a key configuration can be expressed in an extensible CBOR map <xref target="RFC8949"/> that includes the following elements:</t>
      <ul spacing="normal">
        <li>
          <t><tt>key_id</tt>, with map key 0 encoded as a CBOR unsigned integer. The value of this element is a CBOR unsigned integer that encodes the key identifier of the HPKE public key of the <iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref>. The key identifier is of 8-bit maximum length.</t>
        </li>
        <li>
          <t><tt>kem_id</tt>, with map key 1 encoded as a CBOR unsigned integer. The value of this element is a CBOR unsigned integer that encodes an HPKE Key Encapsulation Mechanism (KEM) identifier (see also Sections <xref target="RFC9180" section="7.1" sectionFormat="bare"/> and <xref target="RFC9180" section="11.1" sectionFormat="bare"/> of <xref target="RFC9180"/>). The HPKE KEM identifier is of 16-bit maximum length.</t>
        </li>
        <li>
          <t><tt>public_key</tt>, with map key 2 encoded as a CBOR unsigned integer. The value of this element is a CBOR byte string that encodes the HPKE public key of the <iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref>. The length of the public key is <tt>Npk</tt> bytes.</t>
        </li>
        <li>
          <t>A set of HPKE symmetric algorithms, with map key 3 encoded as a CBOR unsigned integer. The value of this element is a non-empty CBOR array whose elements are organized into consecutive pairs. Each pair consists of the following elements:  </t>
          <ul spacing="normal">
            <li>
              <t><tt>kdf_id</tt>, a CBOR unsigned integer that encodes an HPKE Key Derivation Function (KDF) identifier of 16-bit maximum length (see also Sections <xref target="RFC9180" section="7.2" sectionFormat="bare"/> and <xref target="RFC9180" section="11.2" sectionFormat="bare"/> of <xref target="RFC9180"/>).</t>
            </li>
            <li>
              <t><tt>aead_id</tt>, a CBOR unsigned integer that encodes an HPKE Authenticated Encryption with Additional Data (AEAD) identifier of 16-bit maximum length (see also Sections <xref target="RFC9180" section="7.3" sectionFormat="bare"/> and <xref target="RFC9180" section="11.3" sectionFormat="bare"/> of <xref target="RFC9180"/>).</t>
            </li>
          </ul>
        </li>
      </ul>
      <t><xref target="fig-key-config-cddl"/> shows the CDDL notation <xref target="RFC8610"/> of the CBOR-encoded HPKE key configuration. Later specifications can extend the CBOR map via the <tt>$$ocoap-key-config</tt> extension point.</t>
      <figure anchor="fig-key-config-cddl">
        <name>Format of the CBOR-encoded HPKE Key Configuration</name>
        <sourcecode type="cddl"><![CDATA[
max-uint8 = 0..255
max-uint16 = 0..65535

key_id = max-uint8
kem_id = max-uint16
kdf_id = max-uint16
aead_id = max-uint16
public_key = bstr

hpke_symmetric_algorithm = (
    kdf_id,
    aead_id,
)

key_id_key = 0
kem_id_key = 1
public_key_key = 2
hpke_symmetric_algorithm_key = 3

ocoap-key-config = { $$ocoap-key-config }
$$ocoap-key-config //= (
  key_id_key => key_id,
  kem_id_key => kem_id,
  public_key_key => public_key,
  hpke_symmetric_algorithm_key => [ +hpke_symmetric_algorithm ],
)
]]></sourcecode>
      </figure>
      <t>A collection of key configurations of type <tt>ocoap-key-config</tt> can be distributed using the media type "application/ocoap-keys+cbor-seq" registered in <xref target="media-type"/>, potentially through CoAP messages with the corresponding Content-Format registered in <xref target="content-format"/>.</t>
      <t>In particular, the media type "application/ocoap-keys+cbor-seq" denotes the binary encoding of a CBOR sequence <xref target="RFC8742"/>, where each element of the sequence is a CBOR map representing a key configuration of type <tt>ocoap-key-config</tt>.</t>
      <t>An <iref item="Oblivious CoAP Client"/><xref target="dfn-ocoap-client" format="none">Oblivious CoAP Client</xref> that receives an "application/ocoap-keys+cbor-seq" object with encoding errors might be able to recover one or more key configurations. Differences in how key configurations are recovered might be exploited to segregate Clients, so Clients <bcp14>MUST</bcp14> discard incorrectly encoded key configuration collections.</t>
    </section>
    <section anchor="ocoap-option">
      <name>The OCoAP Option</name>
      <t><iref item="Oblivious CoAP Requests"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Requests</xref> and Responses include the Oblivious CoAP Option (OCoAP Option) defined in this section.
The OCoAP Option has the properties summarized in <xref target="tab-ocoap-option"/>, which extends Table <xref target="RFC7252" section="4" sectionFormat="bare" relative="#table-4"/> of <xref target="RFC7252"/>. The option is Critical, Safe-to-Forward, part of the Cache-Key, and not repeatable.</t>
      <table anchor="tab-ocoap-option">
        <name>The OCoAP Option. C=Critical, U=Unsafe, N=NoCacheKey, R=Repeatable</name>
        <thead>
          <tr>
            <th align="right">No.</th>
            <th align="center">C</th>
            <th align="center">U</th>
            <th align="center">N</th>
            <th align="center">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="right">TBD</td>
            <td align="center">x</td>
            <td align="center"> </td>
            <td align="center"> </td>
            <td align="center"> </td>
            <td align="left">OCoAP</td>
            <td align="left">(*)</td>
            <td align="left">0-255</td>
            <td align="left">(none)</td>
          </tr>
        </tbody>
      </table>
      <t>(*) If the length of the option value is greater than 0, the OCoAP Option value has the format shown in <xref target="fig-ocoap-option"/>.</t>
      <t>The value of the non-empty OCoAP Option <bcp14>SHALL</bcp14> contain the OCoAP flag bits, the <tt>count</tt> parameter, and the <tt>id_ctx</tt> parameter as follows:</t>
      <figure anchor="fig-ocoap-option">
        <name>The Non-Empty OCoAP Option Value</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="96" width="448" viewBox="0 0 448 96" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,48 L 8,80" fill="none" stroke="black"/>
              <path d="M 88,48 L 88,80" fill="none" stroke="black"/>
              <path d="M 104,48 L 104,80" fill="none" stroke="black"/>
              <path d="M 136,48 L 136,80" fill="none" stroke="black"/>
              <path d="M 296,48 L 296,80" fill="none" stroke="black"/>
              <path d="M 440,48 L 440,80" fill="none" stroke="black"/>
              <path d="M 144,32 L 168,32" fill="none" stroke="black"/>
              <path d="M 264,32 L 288,32" fill="none" stroke="black"/>
              <path d="M 8,48 L 440,48" fill="none" stroke="black"/>
              <path d="M 8,80 L 440,80" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="296,32 284,26.4 284,37.6" fill="black" transform="rotate(0,288,32)"/>
              <polygon class="arrowhead" points="152,32 140,26.4 140,37.6" fill="black" transform="rotate(180,144,32)"/>
              <g class="text">
                <text x="16" y="36">0</text>
                <text x="32" y="36">1</text>
                <text x="48" y="36">2</text>
                <text x="64" y="36">3</text>
                <text x="80" y="36">4</text>
                <text x="96" y="36">5</text>
                <text x="112" y="36">6</text>
                <text x="128" y="36">7</text>
                <text x="192" y="36">n+1</text>
                <text x="232" y="36">bytes</text>
                <text x="16" y="68">0</text>
                <text x="32" y="68">0</text>
                <text x="48" y="68">0</text>
                <text x="64" y="68">0</text>
                <text x="80" y="68">0</text>
                <text x="96" y="68">c</text>
                <text x="120" y="68">n</text>
                <text x="216" y="68">count</text>
                <text x="332" y="68">id_ctx</text>
                <text x="376" y="68">(if</text>
                <text x="412" y="68">any)</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
 0 1 2 3 4 5 6 7 <--- n+1 bytes --->
+-+-+-+-+-+-+---+-------------------+-----------------+
|0 0 0 0 0|c| n |       count       | id_ctx (if any) |
+-+-+-+-+-+-+---+-------------------+-----------------+
]]></artwork>
        </artset>
      </figure>
      <ul spacing="normal">
        <li>
          <t>The first byte, containing the OCoAP flag bits, encodes the following set of bits and the length of the <tt>count</tt> parameter in the option value:  </t>
          <ul spacing="normal">
            <li>
              <t>The two least significant bits encode the unsigned integer <tt>n</tt>, which is the <tt>count</tt> length in bytes minus 1.</t>
            </li>
            <li>
              <t>The third least significant bit <tt>c</tt> is the ID Context flag. It is set to 1 if and only if <tt>id_ctx</tt> is present in the option value.</t>
            </li>
            <li>
              <t>The fourth-to-eighth least significant bits are reserved for future use. These bits <bcp14>SHALL</bcp14> be set to zero when not in use. According to this specification, if any of these bits are set to 1, the message is considered to be malformed and the processing of the OCoAP Option fails.</t>
            </li>
          </ul>
          <t>
The OCoAP flag bits are registered in the "OCoAP Flag Bits" registry defined in <xref target="iana-ocoap-flag-bits"/>.</t>
        </li>
        <li>
          <t>The following <tt>n+1</tt> bytes encode the value of the <tt>count</tt> parameter as an unsigned integer in network byte order.  </t>
          <t>
In an <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref>/Response, <tt>count</tt> is the number of <iref item="Oblivious CoAP Requests"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Requests</xref>/Responses that have been protected before the present one by using the same HPKE context. That is, <tt>count=0</tt> marks the first <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref>/Response protected with a given HPKE context.  </t>
          <t>
The <iref item="Oblivious CoAP Client"/><xref target="dfn-ocoap-client" format="none">Oblivious CoAP Client</xref> and the <iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref> use two 32-bit unsigned integer counters to keep track of <tt>count</tt>, separately for the <iref item="Oblivious CoAP Requests"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Requests</xref> and the <iref item="Oblivious CoAP Responses"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Responses</xref> protected with a given HPKE context. Since <tt>n</tt> in the OCoAP Option value can be at most 3, this leaves enough room to represent the value of <tt>count</tt> as a 32-bit unsigned integer.</t>
        </li>
        <li>
          <t>The remaining bytes encode the value of the <tt>id_ctx</tt> parameter, if the <tt>c</tt> flag is set (<tt>c=1</tt>). The value of <tt>id_ctx</tt> is an opaque identifier of the HPKE context used for processing the present Oblivious CoAP message.</t>
        </li>
      </ul>
      <t>Note that <tt>id_ctx</tt> <bcp14>MUST</bcp14> be the last field of the OCoAP Option value if <tt>c=1</tt>, even in the case in which reserved bits are used and additional fields are added to it.</t>
      <t>If the OCoAP Option value is empty, i.e., its length is 0, then it is assumed that <tt>count=0</tt> and <tt>c=0</tt>, i.e., the empty value is equivalent to the OCoAP Option value 0x0000.</t>
      <t>The length of the OCoAP Option value thus depends on the presence and length of <tt>count</tt> and <tt>id_ctx</tt> as specified in this section, and on the presence and length of additional parameters, as defined in future documents registering those parameters. The length of the OCoAP Option value <bcp14>MUST NOT</bcp14> exceed 255 bytes.</t>
      <t>To avoid the OCoAP Option value being larger than necessary, the following applies:</t>
      <ul spacing="normal">
        <li>
          <t>If the OCoAP flag bits consist of a single byte 0x00 and <tt>count=0</tt>, the sender endpoint <bcp14>SHOULD</bcp14> set the value of the OCoAP Option to empty. Otherwise,</t>
        </li>
        <li>
          <t>The sender endpoint <bcp14>SHOULD</bcp14> use the shortest possible length for <tt>count</tt>. That is, a <tt>count</tt> value between 0 and 255 <bcp14>SHOULD</bcp14> be encoded in 1 byte (<tt>n=0</tt>), a <tt>count</tt> value between 256 and 65535 <bcp14>SHOULD</bcp14> be encoded in 2 bytes (<tt>n=1</tt>), and so on.</t>
        </li>
      </ul>
      <t>The OCoAP Option is of Class I for OSCORE <xref target="RFC8613"/> and is accordingly processed by OCoAP (see <xref target="comparison-oscore"/>). That is, the OCoAP Option is included in the associated data <tt>aad</tt> when processing an <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref>/Response, consistent with what is recommended in <xref section="9.7.1" sectionFormat="of" target="RFC9180"/> (see also <xref target="request-construction"/> and <xref target="response-construction"/> of the present document).</t>
    </section>
    <section anchor="ocoap-request">
      <name>Oblivious CoAP Request</name>
      <t>An <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref> uses the method POST or FETCH <xref target="RFC8132"/>, includes the OCoAP Option (see <xref target="ocoap-option"/>), and conveys a payload. The format of the payload depends on the <tt>count</tt> value specified by the OCoAP Option.</t>
      <t>If <tt>count=0</tt>, including when the OCoAP Option has empty value, the payload is the concatenation of:</t>
      <ul spacing="normal">
        <li>
          <t>The key identifier <tt>key_id</tt> from the key configuration used to protect the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref> (see <xref target="key-configuration"/>), as an 8-bit unsigned integer.</t>
        </li>
        <li>
          <t>The HPKE KEM identifier <tt>kem_id</tt> from the same key configuration, as a 16-bit unsigned integer.</t>
        </li>
        <li>
          <t>One of the HPKE KDF identifiers <tt>kdf_id</tt> from the KDF-AEAD identifier pairs from the same key configuration, as a 16-bit unsigned integer.</t>
        </li>
        <li>
          <t>The HPKE AEAD identifier <tt>aead_id</tt> that is paired with the <tt>kdf_id</tt> above in the KDF-AEAD identifier pairs from the same key configuration, as a 16-bit unsigned integer.</t>
        </li>
        <li>
          <t>The encapsulated KEM shared secret <tt>enc</tt> that is produced when computing the HPKE context used to protect the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref>. The length of <tt>enc</tt> is equal to <tt>Nenc</tt> bytes and is defined by the Encap() function of the HPKE KEM identified by <tt>kem_id</tt> (see <xref section="4" sectionFormat="of" target="RFC9180"/>).</t>
        </li>
        <li>
          <t>The HPKE ciphertext <tt>ct</tt> produced when protecting the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref>.</t>
        </li>
      </ul>
      <t>The length of <tt>ct</tt> can be derived by subtracting 7 bytes (for the enclosed identifiers) and <tt>Nenc</tt> bytes (for <tt>enc</tt>) from the CoAP payload length. This construct is equivalent to the Encapsulated Request structure defined in <xref section="4.1" sectionFormat="of" target="RFC9458"/>.</t>
      <t>If <tt>count&gt;0</tt>, the payload is the HPKE ciphertext <tt>ct</tt> produced when protecting the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref>.</t>
      <section anchor="request-construction">
        <name>Request Construction at the Client</name>
        <t>To construct an <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref> from the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref>, the <iref item="Oblivious CoAP Client"/><xref target="dfn-ocoap-client" format="none">Oblivious CoAP Client</xref> (Client) first picks the following values from the key configuration used:</t>
        <ul spacing="normal">
          <li>
            <t>The key identifier <tt>key_id</tt> and the corresponding <tt>kem_id</tt>.</t>
          </li>
          <li>
            <t>The public key <tt>public_key</tt> identified by <tt>key_id</tt>, i.e., the static public key of the <iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref>.</t>
          </li>
          <li>
            <t>A pair of KDF algorithm (identified by <tt>kdf_id</tt>) and AEAD algorithm (identified by <tt>aead_id</tt>) from the symmetric algorithm collection in the key configuration.</t>
          </li>
        </ul>
        <t>Using those parameters, the Client performs the following steps:</t>
        <ol spacing="normal" type="1"><li>
            <t>If the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref> is the first request in the data exchange, compute a sending HPKE context <tt>sctxt</tt> by invoking the HPKE procedure <tt>SetupBaseS(pkR, info)</tt> (see <xref section="5.1.1" sectionFormat="of" target="RFC9180"/>), where:  </t>
            <ul spacing="normal">
              <li>
                <t><tt>pkR</tt> takes <tt>public_key</tt>.</t>
              </li>
              <li>
                <t><tt>info</tt> takes the concatenation of: the ASCII-encoded string of the label "ocoap_request", the byte <tt>0x00</tt>, <tt>key_id</tt> as an 8-bit unsigned integer, <tt>kem_id</tt> as a 16-bit unsigned integer, <tt>kdf_id</tt> as a 16-bit unsigned integer, and <tt>aead_id</tt> as a 16-bit unsigned integer. All these unsigned integers are in network byte order.</t>
              </li>
            </ul>
            <t>
The procedure returns the sending HPKE context <tt>sctxt</tt> and an encapsulated KEM shared secret <tt>enc</tt>. Specifically, <tt>enc</tt> is the ephemeral public key of the Client when using a KEM that is based on Diffie-Hellman (DH) or Non-Interactive Key Exchange (NIKE) primitives, or a KEM ciphertext otherwise.  </t>
            <t>
Then, set the 32-bit unsigned integer counter <tt>i</tt> for <tt>sctxt</tt> to 0.  </t>
            <t>
Set the 32-bit unsigned integer counter <tt>j</tt> for <tt>sctxt</tt> to not initialized.  </t>
            <t>
The identifier <tt>id_rctxt</tt> of the receiving HPKE context is unknown at this point.  </t>
            <t>
In a typical single-request-single-response exchange, the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref> in the exchange is trivially the first one. Within an extended data exchange, the first <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref> can be, for example, an original Observe registration request <xref target="RFC7641"/>, or a request conveying/requesting the first block of a block-wise transfer <xref target="RFC7959"/> <xref target="RFC9177"/>.</t>
          </li>
          <li>
            <t>Ensure that the CoAP options in the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref> specify the URI of the <iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref> to which the <iref item="Oblivious Proxy Resource"/><xref target="dfn-ocoap-proxy" format="none">Oblivious Proxy Resource</xref> will have to forward the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref>.  </t>
            <t>
(In general, the <iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref> will interpret such a URI in order to forward the recovered <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref> to the <iref item="Target Resource"/><xref target="dfn-ocoap-target" format="none">Target Resource</xref>.)  </t>
            <t>
To this end, the Client can specify the URI as a string in the Proxy-Uri Option, or by using the Proxy-Scheme Option together with the Uri-* options (see <xref section="5.10.2" sectionFormat="of" target="RFC7252"/>).  </t>
            <t>
Alternatively, the Client can rely on the analogous options defined in <xref target="I-D.ietf-core-href"/>, i.e., the Proxy-Cri Option conveying a Constrained Resource Identifier (CRI) equivalent to the URI, or the Proxy-Scheme-Number Option together with the Uri-* options.  </t>
            <t>
When applicable, the Client can specify the URI path of the URI by using the Uri-Path-Abbrev Option <xref target="I-D.ietf-core-uri-path-abbrev"/>, consistent with the restrictions defined in <xref section="2.4" sectionFormat="of" target="I-D.ietf-core-uri-path-abbrev"/>.  </t>
            <t>
Note that the URI path component and the URI query component are going to be encrypted when computing the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref>. Therefore, the CoAP server that receives the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref> can effectively rely only on the URI scheme and the URI authority component of the request URI, in order to identify the <iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref> to which the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref> is addressed.</t>
          </li>
          <li>
            <t>Compose an OCoAP Option such that:  </t>
            <ul spacing="normal">
              <li>
                <t><tt>count</tt> is set to the value of the counter <tt>i</tt>.</t>
              </li>
              <li>
                <t><tt>id_ctx</tt> is set to the identifier <tt>id_rctxt</tt> if that is known, or it is omitted otherwise.</t>
              </li>
            </ul>
            <t>
Then, encode the OCoAP Option value as defined in <xref target="ocoap-option"/> and add the OCoAP Option to the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref>.</t>
          </li>
          <li>
            <t>Construct the associated data <tt>aad</tt> as the concatenation of:  </t>
            <ul spacing="normal">
              <li>
                <t><tt>key_id</tt> as an 8-bit unsigned integer, <tt>kem_id</tt> as a 16-bit unsigned integer, <tt>kdf_id</tt> as a 16-bit unsigned integer, and <tt>aead_id</tt> as a 16-bit unsigned integer. All these unsigned integers are in network byte order.</t>
              </li>
              <li>
                <t>The CoAP options of Class I for OSCORE <xref target="RFC8613"/> that are present in the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref>, which also include the OCoAP Option composed at Step 3.      </t>
                <t>
This set of options is encoded like the value of the CBOR byte string <tt>options</tt> in the aad_array of OSCORE (see <xref section="5.4" sectionFormat="of" target="RFC8613"/>). That is, the Client needs to recalculate the Option Deltas of those options.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Construct the plaintext <tt>pt</tt> in the same manner as the plaintext is constructed in OSCORE (see <xref section="5.3" sectionFormat="of" target="RFC8613"/>), i.e., as the concatenation of:  </t>
            <ul spacing="normal">
              <li>
                <t>The 8-bit Code of the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref>.</t>
              </li>
              <li>
                <t>The CoAP options of Class E for OSCORE <xref target="RFC8613"/> that are present in the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref>, with their Option Deltas recalculated accordingly.</t>
              </li>
              <li>
                <t>If a payload is present in the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref>, a one-byte Payload Marker <tt>0xff</tt> (see <xref section="3" sectionFormat="of" target="RFC7252"/>) followed by the payload of the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Invoke the <tt>Seal()</tt> method on <tt>sctxt</tt> (see <xref section="5.2" sectionFormat="of" target="RFC9180"/>), providing the associated data <tt>aad</tt> from Step 4 as the first parameter and the plaintext <tt>pt</tt> from Step 5 as the second parameter.  </t>
            <t>
The <tt>Seal()</tt> method returns the ciphertext <tt>ct</tt> or an error on failure.  </t>
            <t>
If the method fails, the client <bcp14>MUST</bcp14> terminate this procedure.</t>
          </li>
          <li>
            <t>Construct the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref> from the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref> as follows:  </t>
            <ul spacing="normal">
              <li>
                <t>Replace the Code with FETCH if the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref> contains an Observe Option, or with POST otherwise.</t>
              </li>
              <li>
                <t>Remove all the CoAP options of Class E for OSCORE <xref target="RFC8613"/> and recalculate the Option Deltas of the remaining CoAP options (including the OCoAP Option added at Step 3).</t>
              </li>
              <li>
                <t>Add a Payload Marker if the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref> had no payload.</t>
              </li>
              <li>
                <t>Remove the payload, if present in the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref>.</t>
              </li>
              <li>
                <t>Add the payload defined in <xref target="ocoap-request"/>, consistent with the values in the previous steps of the present procedure.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Increment the counter <tt>i</tt> for <tt>sctxt</tt> by 1.</t>
          </li>
        </ol>
        <t>Finally, the Client sends the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref> to the <iref item="Oblivious Proxy Resource"/><xref target="dfn-ocoap-proxy" format="none">Oblivious Proxy Resource</xref> and retains the sending HPKE context <tt>sctxt</tt>.
The <iref item="Oblivious Proxy Resource"/><xref target="dfn-ocoap-proxy" format="none">Oblivious Proxy Resource</xref> then forwards the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref> to the <iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref> (see <xref section="5.7" sectionFormat="of" target="RFC7252"/>).</t>
      </section>
      <section anchor="request-processing">
        <name>Request Processing at the Server</name>
        <t>When a CoAP server hosting an <iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref> receives an <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref> (i.e., a request that includes an OCoAP Option), the server performs the operations described in <xref target="request-construction"/> in reverse, as defined below.</t>
        <ol spacing="normal" type="1"><li>
            <t>The server reads the value of the OCoAP Option, from which it determines the value of <tt>count</tt> and of the flag bit <tt>c</tt>. As per <xref target="ocoap-option"/>, the empty option value is equivalent to the option value 0x0000, i.e., <tt>count=0</tt> and <tt>c=0</tt>.  </t>
            <t>
Then, the server refers to the key configuration associated with the <iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref> addressed by the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref> and proceeds as follows.  </t>
            <ul spacing="normal">
              <li>
                <t>If <tt>count&gt;0</tt> and <tt>c=1</tt>, retrieve <tt>ct</tt> as the payload of the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref>. Then, move to Step 2.</t>
              </li>
              <li>
                <t>If <tt>count=0</tt> and <tt>c=0</tt>, parse the payload of the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref> into: <tt>key_id</tt>, <tt>kem_id</tt>, <tt>kdf_id</tt>, <tt>aead_id</tt>, <tt>enc</tt>, and <tt>ct</tt>.      </t>
                <t>
In particular, the four identifiers have a well-known, fixed length, the HPKE KEM identified by <tt>kem_id</tt> implies the length of <tt>enc</tt>, and <tt>ct</tt> is the remainder of the payload after <tt>enc</tt>.      </t>
                <t>
If <tt>key_id</tt> does not identify an HPKE public key of the server that matches the HPKE KEM identified by <tt>kem_id</tt>, the server <bcp14>MUST</bcp14> reply with a 4.00 (Bad Request) error response and <bcp14>MUST</bcp14> terminate this procedure. Otherwise, the server retrieves <tt>skR</tt>, i.e., its HPKE private key associated with the HPKE public key identified by <tt>key_id</tt>.      </t>
                <t>
If <tt>kdf_id</tt> and <tt>aead_id</tt> do not identify a KDF and AEAD algorithm pair that the server is willing to use with <tt>skR</tt>, the server <bcp14>MUST</bcp14> reply with a 4.00 (Bad Request) error response and <bcp14>MUST</bcp14> terminate this procedure.      </t>
                <t>
Otherwise, move to Step 2.</t>
              </li>
              <li>
                <t>If none of the above applies, the server <bcp14>MUST</bcp14> reply with a 4.02 (Bad Option) error response and <bcp14>MUST</bcp14> terminate this procedure.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>The server proceeds as follows, depending on the value of <tt>count</tt>.  </t>
            <ul spacing="normal">
              <li>
                <t>If <tt>count=0</tt>, compute a receiving HPKE context <tt>rctxt</tt> by invoking the HPKE procedure <tt>SetupBaseR(enc, skR, info)</tt> (see <xref section="5.1.1" sectionFormat="of" target="RFC9180"/>), where:      </t>
                <ul spacing="normal">
                  <li>
                    <t>The first parameter takes the encapsulated KEM shared secret <tt>enc</tt> retrieved from the payload of the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref>.</t>
                  </li>
                  <li>
                    <t>The second parameter takes the HPKE private key <tt>skR</tt> of the server.</t>
                  </li>
                  <li>
                    <t>The third parameter <tt>info</tt> takes the same as the <tt>info</tt> parameter of the <tt>SetupBaseS()</tt> when invoked by the <iref item="Oblivious CoAP Client"/><xref target="dfn-ocoap-client" format="none">Oblivious CoAP Client</xref> at Step 1 of <xref target="request-construction"/>. In particular, the four HPKE identifiers are retrieved from the payload of the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref>.</t>
                  </li>
                </ul>
                <t>
The procedure returns the receiving HPKE context <tt>rctxt</tt>.      </t>
                <t>
The server generates a unique binary identifier <tt>id_ctx</tt> and stores <tt>rctxt</tt> as associated with <tt>id_ctx</tt>.      </t>
                <t>
Then, the server sets a 32-bit unsigned integer counter <tt>k</tt> for <tt>rctxt</tt> to 0.</t>
              </li>
              <li>
                <t>If <tt>count&gt;0</tt>, the server retrieves <tt>id_ctx</tt> from the OCoAP Option of the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref> and uses it to retrieve the receiving HPKE context <tt>rctxt</tt> associated with <tt>id_ctx</tt>.      </t>
                <t>
If the server does not successfully retrieve a receiving HPKE context, the server <bcp14>MUST</bcp14> reply with a 4.00 (Bad Request) error response and <bcp14>MUST</bcp14> terminate this procedure.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Construct the associated data <tt>aad</tt> as described at Step 4 of <xref target="request-construction"/>, with the difference that the CoAP options of Class I to consider are those that are present in the received <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref>.</t>
          </li>
          <li>
            <t>Invoke the <tt>Open()</tt> method of the previously computed HPKE context <tt>rctxt</tt> (see <xref section="5.2" sectionFormat="of" target="RFC9180"/>), providing the associated data <tt>aad</tt> from Step 3 as the first parameter and the ciphertext <tt>ct</tt> retrieved from the payload of the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref> as the second parameter.  </t>
            <t>
The <tt>Open()</tt> method returns the plaintext <tt>pt</tt> or an error on failure.  </t>
            <t>
If the method fails, the server <bcp14>MUST</bcp14> reply with a 4.00 (Bad Request) error response, <bcp14>MUST</bcp14> discard the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref>, and <bcp14>MUST</bcp14> terminate this procedure.</t>
          </li>
          <li>
            <t>Parse <tt>pt</tt> into: the 8-bit Code of the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref>, the CoAP options of Class E for OSCORE that were present in the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref>, the one-byte Payload Marker <tt>0xff</tt> (if present), and, if the Payload Marker <tt>0xff</tt> is found, the payload of the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref>.  </t>
            <t>
If the parsing fails, the server <bcp14>MUST</bcp14> reply with a 4.00 (Bad Request) error response.</t>
          </li>
          <li>
            <t>Reconstruct the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref> from the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref> as follows:  </t>
            <ul spacing="normal">
              <li>
                <t>Replace the Code of the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref> with the Code from <tt>pt</tt>.</t>
              </li>
              <li>
                <t>Remove the OCoAP Option from the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref>.</t>
              </li>
              <li>
                <t>Add the CoAP options from <tt>pt</tt> and recalculate the Option Deltas of all the CoAP options in the updated option set.</t>
              </li>
              <li>
                <t>Remove the Payload Marker <tt>0xff</tt> and the payload from the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref>.</t>
              </li>
              <li>
                <t>If the Payload Marker <tt>0xff</tt> and a payload are present in <tt>pt</tt>, add those in the same order.</t>
              </li>
            </ul>
          </li>
        </ol>
        <t>Finally, the server provides the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref> to the <iref item="Target Resource"/><xref target="dfn-ocoap-target" format="none">Target Resource</xref> and retains the receiving HPKE context <tt>rctxt</tt>.</t>
      </section>
    </section>
    <section anchor="ocoap-response">
      <name>Oblivious CoAP Response</name>
      <t>An <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref> has Response Code 2.04 (Changed) or 2.05 (Content), includes the OCoAP Option (see <xref target="ocoap-option"/>), and conveys a payload. The format of the payload depends on the <tt>count</tt> value specified by the OCoAP Option.</t>
      <t>If <tt>count=0</tt>, including when the OCoAP Option has empty value, the payload is the concatenation of:</t>
      <ul spacing="normal">
        <li>
          <t>A server-generated <tt>response_nonce</tt> of length <tt>max(Nn, Nk)</tt> bytes. The <tt>Nn</tt> and <tt>Nk</tt> values correspond to parameters of the AEAD used in HPKE, as per <xref section="7.3" sectionFormat="of" target="RFC9180"/> or the "HPKE AEAD Identifiers" IANA registry <xref target="IANA.HPKE-AEAD-Identifiers"/>.</t>
        </li>
        <li>
          <t>The HPKE ciphertext <tt>ct</tt> produced when protecting the <iref item="Original CoAP Response"/><xref target="dfn-original-resp" format="none">Original CoAP Response</xref>.</t>
        </li>
      </ul>
      <t>The length of <tt>ct</tt> can be derived by subtracting <tt>max(Nn, Nk)</tt> bytes from the CoAP payload length. This construct is equivalent to the Encapsulated Response structure defined in <xref section="4.2" sectionFormat="of" target="RFC9458"/>.</t>
      <t>If <tt>count&gt;0</tt>, the payload is the HPKE ciphertext <tt>ct</tt> produced when protecting the <iref item="Original CoAP Response"/><xref target="dfn-original-resp" format="none">Original CoAP Response</xref>.</t>
      <section anchor="response-construction">
        <name>Response Construction at the Server</name>
        <t>To construct an <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref> from the <iref item="Original CoAP Response"/><xref target="dfn-original-resp" format="none">Original CoAP Response</xref> received from the <iref item="Target Resource"/><xref target="dfn-ocoap-target" format="none">Target Resource</xref>, the server uses the receiving HPKE context <tt>rctxt</tt> that was used to process the corresponding <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref> (see <xref target="request-processing"/>). In particular, the server performs the following steps:</t>
        <ol spacing="normal" type="1"><li>
            <t>Retrieve the counter <tt>k</tt> for <tt>rctxt</tt>. If <tt>k&gt;0</tt>, move to Step 7, otherwise move to Step 2.</t>
          </li>
          <li>
            <t>Export a secret <tt>secret</tt> from <tt>rctxt</tt>, using the string "ocoap_response" as the <tt>exporter_context</tt> parameter for the <tt>Export</tt> interface of <tt>rctxt</tt> (see <xref section="5.3" sectionFormat="of" target="RFC9180"/>).  </t>
            <t>
The length of <tt>secret</tt> is <tt>max(Nn, Nk)</tt>, where <tt>Nn</tt> and <tt>Nk</tt> are the length of the AEAD nonce and key that are associated with <tt>rctxt</tt>.</t>
          </li>
          <li>
            <t>Generate a random value of length <tt>max(Nn, Nk)</tt> bytes, called <tt>response_nonce</tt>.</t>
          </li>
          <li>
            <t>Extract a pseudorandom key <tt>prk</tt> using the <tt>Extract</tt> function provided by the KDF algorithm associated with <tt>rctxt</tt> (see <xref section="4" sectionFormat="of" target="RFC9180"/>).  </t>
            <t>
The <tt>ikm</tt> input to this function is <tt>secret</tt> from Step 2; the <tt>salt</tt> input is the concatenation of: the encapsulated KEM shared secret <tt>enc</tt> from the payload of the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref> and <tt>response_nonce</tt> from Step 3.</t>
          </li>
          <li>
            <t>Use the <tt>Expand</tt> function provided by the same KDF algorithm (see <xref section="4" sectionFormat="of" target="RFC9180"/>) to create an AEAD key <tt>aead_key</tt> of length <tt>Nk</tt> bytes, i.e., the length of the keys used by the AEAD associated with <tt>rctxt</tt>. Generating <tt>aead_key</tt> uses the pseudorandom key <tt>prk</tt> from Step 4 as the <tt>prk</tt> parameter and the string "key" as the <tt>info</tt> parameter for the <tt>Expand</tt> function, respectively.  </t>
            <t>
Then, store <tt>aead_key</tt> in association with <tt>rctxt</tt>.</t>
          </li>
          <li>
            <t>Use the same <tt>Expand</tt> function to create an AEAD Base IV <tt>aead_base_iv</tt> of length <tt>Nn</tt> bytes, i.e., the length of the nonces used by the AEAD associated with <tt>rctxt</tt>. Generating <tt>aead_base_iv</tt> uses the pseudorandom key <tt>prk</tt> from Step 4 as the <tt>prk</tt> parameter and the string "base_iv" as the <tt>info</tt> parameter for the <tt>Expand</tt> function, respectively.  </t>
            <t>
Then, store <tt>aead_base_iv</tt> in association with <tt>rctxt</tt>.</t>
          </li>
          <li>
            <t>Compose an OCoAP Option such that:  </t>
            <ul spacing="normal">
              <li>
                <t><tt>count</tt> is set to the value of the counter <tt>k</tt> of <tt>rctxt</tt>.</t>
              </li>
              <li>
                <t><tt>id_ctx</tt> is set to the identifier <tt>id_rctxt</tt> of <tt>rctxt</tt> if both of the following conditions apply, or it is omitted otherwise.      </t>
                <ul spacing="normal">
                  <li>
                    <t><tt>k=0</tt>.</t>
                  </li>
                  <li>
                    <t>The server anticipates that, after the present first <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref> under construction, it might send further <iref item="Oblivious CoAP Responses"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Responses</xref> in this data exchange, hence using the same receiving HPKE context <tt>rctxt</tt> to construct those.          </t>
                    <t>
For instance, this is the case when the data exchange is a registered observation <xref target="RFC7641"/> (i.e., the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref> was an original Observe registration request and later Observe notifications are expected to be sent), or when the data exchange is an active block-wise transfer <xref target="RFC7959"/> <xref target="RFC9177"/> (i.e., the server expects to send/solicit further blocks to/from the Oblivious Client).</t>
                  </li>
                </ul>
              </li>
            </ul>
            <t>
Then, encode the OCoAP Option value as defined in <xref target="ocoap-option"/> and add the OCoAP Option to the <iref item="Original CoAP Response"/><xref target="dfn-original-resp" format="none">Original CoAP Response</xref>.</t>
          </li>
          <li>
            <t>Construct the associated data <tt>aad</tt> as the concatenation of:  </t>
            <ul spacing="normal">
              <li>
                <t>An 8-bit unsigned integer encoding the length in bytes of the value of the OCoAP Option from the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref> to which the <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref> replies.</t>
              </li>
              <li>
                <t>The value of the OCoAP Option from that <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref>.</t>
              </li>
              <li>
                <t>The CoAP options of Class I for OSCORE <xref target="RFC8613"/> that are present in the <iref item="Original CoAP Response"/><xref target="dfn-original-resp" format="none">Original CoAP Response</xref>, which also include the OCoAP Option composed at Step 7.      </t>
                <t>
This set of options is encoded like the value of the CBOR byte string <tt>options</tt> in the aad_array of OSCORE (see <xref section="5.4" sectionFormat="of" target="RFC8613"/>). That is, the server needs to recalculate the Option Deltas of those options.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Construct the plaintext <tt>pt</tt> in the same manner as the plaintext is constructed in OSCORE (see <xref section="5.3" sectionFormat="of" target="RFC8613"/>), i.e., as the concatenation of:  </t>
            <ul spacing="normal">
              <li>
                <t>The 8-bit Response Code of the <iref item="Original CoAP Response"/><xref target="dfn-original-resp" format="none">Original CoAP Response</xref>.</t>
              </li>
              <li>
                <t>The CoAP options of Class E for OSCORE <xref target="RFC8613"/> that are present in the <iref item="Original CoAP Response"/><xref target="dfn-original-resp" format="none">Original CoAP Response</xref>, with their Option Deltas recalculated accordingly.</t>
              </li>
              <li>
                <t>If a payload is present in the <iref item="Original CoAP Response"/><xref target="dfn-original-resp" format="none">Original CoAP Response</xref>, a one-byte Payload Marker <tt>0xff</tt> (see <xref section="3" sectionFormat="of" target="RFC7252"/>) followed by the payload of the <iref item="Original CoAP Response"/><xref target="dfn-original-resp" format="none">Original CoAP Response</xref>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Compute the AEAD nonce <tt>aead_nonce</tt> of length <tt>Nn</tt> bytes, by XORing:  </t>
            <ul spacing="normal">
              <li>
                <t>The <tt>aead_base_iv</tt> associated with <tt>rctxt</tt>; and</t>
              </li>
              <li>
                <t>The value of the counter <tt>k</tt> of <tt>rctxt</tt> from Step 1, left-padded with 0 to the exact length of <tt>aead_base_iv</tt>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Invoke the AEAD function <tt>Seal()</tt> of the AEAD associated with <tt>rctxt</tt> (see <xref section="4" sectionFormat="of" target="RFC9180"/>), providing <tt>aead_key</tt> associated with <tt>rctxt</tt> as the first parameter, <tt>aead_nonce</tt> from Step 10 as the second parameter, the associated data <tt>aad</tt> from Step 8 as the third parameter, and the plaintext <tt>pt</tt> from Step 9 as the fourth parameter.  </t>
            <t>
The AEAD function <tt>Seal()</tt> returns the ciphertext <tt>ct</tt> or an error on failure.  </t>
            <t>
If the function fails, the server <bcp14>MUST</bcp14> reply with a 5.00 (Internal Server Error) response, <bcp14>MUST</bcp14> discard the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref> and the <iref item="Original CoAP Response"/><xref target="dfn-original-resp" format="none">Original CoAP Response</xref>, and <bcp14>MUST</bcp14> terminate this procedure.</t>
          </li>
          <li>
            <t>Construct the <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref> from the <iref item="Original CoAP Response"/><xref target="dfn-original-resp" format="none">Original CoAP Response</xref> as follows:  </t>
            <ul spacing="normal">
              <li>
                <t>Replace the Response Code with 2.05 (Content) if the <iref item="Original CoAP Response"/><xref target="dfn-original-resp" format="none">Original CoAP Response</xref> contains an Observe Option, or with 2.04 (Changed) otherwise.</t>
              </li>
              <li>
                <t>Remove all the CoAP options of Class E for OSCORE <xref target="RFC8613"/> and recalculate the Option Deltas of the remaining CoAP options (which include the OCoAP Option added at Step 7).</t>
              </li>
              <li>
                <t>Add a Payload Marker if the <iref item="Original CoAP Response"/><xref target="dfn-original-resp" format="none">Original CoAP Response</xref> had no payload.</t>
              </li>
              <li>
                <t>Remove the payload, if present in the <iref item="Original CoAP Response"/><xref target="dfn-original-resp" format="none">Original CoAP Response</xref>.</t>
              </li>
              <li>
                <t>Add the payload defined in <xref target="ocoap-response"/>, consistent with the values in the previous steps of the present procedure.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Increment the counter <tt>k</tt> for <tt>rctxt</tt> by 1.</t>
          </li>
        </ol>
        <t>Finally, the server sends the <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref> to the <iref item="Oblivious Proxy Resource"/><xref target="dfn-ocoap-proxy" format="none">Oblivious Proxy Resource</xref>, which forwards it back to the Oblivious Client (see <xref section="5.7" sectionFormat="of" target="RFC7252"/>) <cref anchor="ack-responses" source="—Martine Lenders">TBD: Lost ACK responses could potentially trigger a new creation of <tt>rctxt</tt>. Is that a problem?</cref> <cref anchor="ack-responses-mt" source="—Marco Tiloca">I don't think it's a problem; it's actually good. Following the lost ACK with piggybacked the first Oblivious CoAP Response to the first Oblivious CoAP Request: i) If the Client retransmits the same Oblivious CoAP Request, the server derives the same receiving HPKE Context, but then it derives a different <tt>response_nonce</tt>, hence the AEAD keying material will be different from the previous HPKE context. ii) If the Client transmits a brand new Oblivious CoAP Request, <tt>enc</tt> is different in the first place and the server creates a totally different receiving HPKE context.</cref> <cref anchor="ack-responses-ml" source="—Martine Lenders">Still, let's keep an eye out for computational overhead in actual implementations.</cref>.</t>
        <t>If the server anticipates that it might send further <iref item="Oblivious CoAP Responses"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Responses</xref> in this data exchange (see also Step 7 above), the server retains the receiving HPKE context <tt>rctxt</tt>. Otherwise, the server discards <tt>rctxt</tt>.</t>
      </section>
      <section anchor="response-processing">
        <name>Response Processing at the Client</name>
        <t>When the <iref item="Oblivious CoAP Client"/><xref target="dfn-ocoap-client" format="none">Oblivious CoAP Client</xref> (Client) receives an <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref> (i.e., a response that includes an OCoAP Option), the Client retrieves the sending HPKE context <tt>sctxt</tt> that was used to construct the corresponding <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref>. Then, the Client performs the operations described in <xref target="response-construction"/> in reverse, as defined below.</t>
        <ol spacing="normal" type="1"><li>
            <t>The Client reads the value of the OCoAP Option, from which it determines the value of <tt>count</tt> and of the flag bit <tt>c</tt>. As per <xref target="ocoap-option"/>, the empty option value is equivalent to the option value 0x0000, i.e., <tt>count=0</tt> and <tt>c=0</tt>.  </t>
            <ul spacing="normal">
              <li>
                <t>If <tt>count&gt;0</tt> and <tt>c=0</tt>, retrieve <tt>ct</tt> as the payload of the <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref>. Then, move to Step 6.</t>
              </li>
              <li>
                <t>If <tt>count=0</tt>, parse the payload of the <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref> into <tt>response_nonce</tt> and <tt>ct</tt>.      </t>
                <t>
In particular, the length of <tt>response_nonce</tt> is <tt>max(Nn, Nk)</tt>, where <tt>Nn</tt> and <tt>Nk</tt> are the length of the AEAD key and nonce that are associated with <tt>sctxt</tt>, and <tt>ct</tt> is the remainder of the payload after <tt>response_nonce</tt>.      </t>
                <t>
Furthermore, if <tt>c=1</tt>, retrieve the binary identifier of the receiving HPKE context from the <tt>id_ctx</tt> field in the received OCoAP Option, and store it as the identifier <tt>id_rctxt</tt> for the construction of further <iref item="Oblivious CoAP Requests"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Requests</xref> with <tt>sctxt</tt> (see Step 3 of <xref target="request-construction"/>).      </t>
                <t>
Then, move to Step 2.</t>
              </li>
              <li>
                <t>If none of the above applies, the Client <bcp14>MUST</bcp14> discard the <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref> and <bcp14>MUST</bcp14> terminate this procedure.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Export the secret <tt>secret</tt> as described at Step 2 of <xref target="response-construction"/>, with the difference that <tt>sctxt</tt> is used instead of <tt>rctxt</tt>.</t>
          </li>
          <li>
            <t>Extract a pseudorandom key <tt>prk</tt> using the <tt>Extract</tt> function provided by the KDF algorithm associated with <tt>sctxt</tt> (see <xref section="4" sectionFormat="of" target="RFC9180"/>).  </t>
            <t>
The <tt>ikm</tt> input to this function is <tt>secret</tt> from Step 2; the <tt>salt</tt> input is the concatenation of: the encapsulated KEM shared secret <tt>enc</tt> from the payload of the <iref item="Original CoAP Request"/><xref target="dfn-original-req" format="none">Original CoAP Request</xref> and <tt>response_nonce</tt> from the payload of the received <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref>.</t>
          </li>
          <li>
            <t>Use the <tt>Expand</tt> function provided by the same KDF algorithm used in Step 3 to create the AEAD key <tt>aead_key</tt> of length <tt>Nk</tt>, i.e., the length of the keys used by the AEAD associated with <tt>sctxt</tt>. Generating <tt>aead_key</tt> uses the pseudorandom key <tt>prk</tt> from Step 3 and the string "key", as the <tt>prk</tt> parameter and the <tt>info</tt> parameter for the <tt>Expand</tt> function, respectively.  </t>
            <t>
Then, store <tt>aead_key</tt> in association with <tt>sctxt</tt>.</t>
          </li>
          <li>
            <t>Use the same <tt>Expand</tt> function to create an AEAD Base IV <tt>aead_base_iv</tt> of length <tt>Nn</tt> bytes, i.e., the length of the nonces used by the AEAD associated with <tt>sctxt</tt>. Generating <tt>aead_base_iv</tt> uses the pseudorandom key <tt>prk</tt> from Step 3 and the string "base_iv" as the <tt>prk</tt> parameter and the <tt>info</tt> parameter for the <tt>Expand</tt> function, respectively.  </t>
            <t>
Then, store <tt>aead_base_iv</tt> in association with <tt>sctxt</tt>.</t>
          </li>
          <li>
            <t>Construct the associated data <tt>aad</tt> as described at Step 8 of <xref target="response-construction"/>, with the difference that the CoAP options of Class I to consider are those that are present in the received <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref>.</t>
          </li>
          <li>
            <t>Compute the AEAD nonce <tt>aead_nonce</tt> of length <tt>Nn</tt> bytes, by XORing:  </t>
            <ul spacing="normal">
              <li>
                <t>The <tt>aead_base_iv</tt> associated with <tt>sctxt</tt>; and</t>
              </li>
              <li>
                <t>The value of the counter <tt>count</tt> retrieved at Step 1 from the OCoAP Option of the received <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref>, left-padded with 0 to the exact length of <tt>aead_base_iv</tt>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Invoke the AEAD function <tt>Open()</tt> of the AEAD associated with <tt>sctxt</tt> (see <xref section="4" sectionFormat="of" target="RFC9180"/>), providing <tt>aead_key</tt> associated with <tt>sctxt</tt> as the first parameter, <tt>aead_nonce</tt> from Step 7 as the second parameter, the associated data <tt>aad</tt> from Step 6 as the third parameter, and the ciphertext <tt>ct</tt> from the payload of the received <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref> as the fourth parameter.  </t>
            <t>
The AEAD function <tt>Open()</tt> returns the plaintext <tt>pt</tt> or an error on failure.  </t>
            <t>
If the function fails, the Client <bcp14>MUST</bcp14> discard the <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref> and <bcp14>MUST</bcp14> terminate this procedure.</t>
          </li>
          <li>
            <t>If the OCoAP Option value in the received <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref> specifies <tt>count=0</tt> and the counter <tt>j</tt> for <tt>sctxt</tt> is not initialized yet (see <xref target="request-construction"/>), then initialize <tt>j</tt> to 0, and move to Step 10.  </t>
            <t>
Otherwise, the Client <bcp14>MUST</bcp14> check whether it already used <tt>sctxt</tt> to decrypt a previous <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref> whose OCoAP Option specified the same <tt>count</tt> as the present <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref>:  </t>
            <ul spacing="normal">
              <li>
                <t>If that is the case (i.e., a replay is detected), the Client <bcp14>MUST</bcp14> discard the <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref> and <bcp14>MUST</bcp14> terminate this procedure.</t>
              </li>
              <li>
                <t>Otherwise, if <tt>count</tt> specified in the OCoAP Option of the present <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref> is such that <tt>count&gt;j</tt>, then <tt>j</tt> takes the value of <tt>count</tt>. This keeps track of the most recent received <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref> processed with <tt>sctxt</tt>, which allows the Client application to order such <iref item="Oblivious CoAP Responses"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Responses</xref> with respect to one another.</t>
              </li>
            </ul>
            <t>
This is analogous to what a CoAP client does for the replay-check and ordering of Observe notifications <xref target="RFC7641"/> when using OSCORE, by relying on the Partial IV of the OSCORE Option value and the local Notification Number (see Sections <xref target="RFC8613" section="4.1.3.5.2" sectionFormat="bare"/>, <xref target="RFC8613" section="7.4.1" sectionFormat="bare"/>, and <xref target="RFC8613" section="8.4.2" sectionFormat="bare"/> of <xref target="RFC8613"/>).</t>
          </li>
          <li>
            <t>Parse <tt>pt</tt> into: the 8-bit Code of the <iref item="Original CoAP Response"/><xref target="dfn-original-resp" format="none">Original CoAP Response</xref>, the CoAP options of Class E for OSCORE that were present in the <iref item="Original CoAP Response"/><xref target="dfn-original-resp" format="none">Original CoAP Response</xref>, the one-byte Payload Marker <tt>0xff</tt> (if present), and, if the Payload Marker <tt>0xff</tt> is found, the payload of the <iref item="Original CoAP Response"/><xref target="dfn-original-resp" format="none">Original CoAP Response</xref>.  </t>
            <t>
If the parsing fails, the Client <bcp14>MUST</bcp14> discard the <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref> and <bcp14>MUST</bcp14> terminate this procedure.</t>
          </li>
          <li>
            <t>Reconstruct the <iref item="Original CoAP Response"/><xref target="dfn-original-resp" format="none">Original CoAP Response</xref> from the <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref> as follows:  </t>
            <ul spacing="normal">
              <li>
                <t>Replace the Response Code of the <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref> with the Response Code from <tt>pt</tt>.</t>
              </li>
              <li>
                <t>Remove the OCoAP Option from the <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref>.</t>
              </li>
              <li>
                <t>Add the CoAP options from <tt>pt</tt> and recalculate the Option Deltas of all the CoAP options in the updated option set.</t>
              </li>
              <li>
                <t>Remove the Payload Marker <tt>0xff</tt> and the payload from the <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref>.</t>
              </li>
              <li>
                <t>If the Payload Marker <tt>0xff</tt> and a payload are present in <tt>pt</tt>, add those in the same order.</t>
              </li>
            </ul>
          </li>
        </ol>
        <t>The Client discards the sending HPKE context <tt>sctxt</tt> if any of the following applies, or retains it otherwise:</t>
        <ul spacing="normal">
          <li>
            <t>The OCoAP Option value of the received <iref item="Oblivious CoAP Response"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Response</xref> specifies <tt>count=0</tt> and <tt>c=0</tt>.</t>
          </li>
          <li>
            <t>The Client will not send further <iref item="Oblivious CoAP Requests"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Requests</xref> and does not expect to receive further <iref item="Oblivious CoAP Responses"/><xref target="dfn-ocoap-resp" format="none">Oblivious CoAP Responses</xref> in this data exchange, which would require using <tt>sctxt</tt>.  </t>
            <t>
An example with such further <iref item="Oblivious CoAP Requests"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Requests</xref>/Responses is the case where the data exchange is a registered observation <xref target="RFC7641"/>, hence the Client might send a cancellation request (see <xref section="3.6" sectionFormat="of" target="RFC7641"/>) and could receive Observe notifications. Another example is the case where the data exchange is an active block-wise transfer <xref target="RFC7959"/> <xref target="RFC9177"/>, hence the Client expects to send/receive further blocks to/from the server hosting the <iref item="Oblivious Gateway Resource"/><xref target="dfn-ocoap-gateway" format="none">Oblivious Gateway Resource</xref>).</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="sec-security-considerations">
      <name>Security Considerations</name>
      <t>The security considerations that apply to this document are largely the same as those compiled in <xref target="RFC7252"/>, <xref target="RFC8323"/>, and <xref target="RFC9180"/> as well as in <xref target="RFC8613"/> and <xref target="RFC9458"/>, if applicable to HPKE or CoAP.</t>
      <t>The following security considerations also apply.</t>
      <section anchor="request-replays">
        <name>Request Replays</name>
        <t>As with Oblivious HTTP <xref target="RFC9458"/>, <iref item="Oblivious CoAP Requests"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Requests</xref> can be easily replayed by the <iref item="Oblivious Proxy Resource"/><xref target="dfn-ocoap-proxy" format="none">Oblivious Proxy Resource</xref> or an external adversary.
Two approaches can mitigate this issue:</t>
        <ol spacing="normal" type="1"><li>
            <t>As with Cacheable OSCORE <xref target="I-D.ietf-core-cacheable-oscore"/>, the fact that the request was replayed can be disregarded if the received <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref> uses a safe REST method (see <xref section="9.2.1" sectionFormat="of" target="RFC9110"/>) and the server is able to verify that it is indeed safe to proceed with handling the request.</t>
          </li>
          <li>
            <t>For non-safe <iref item="Oblivious CoAP Requests"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Requests</xref> and as a more general approach, the server can identify an <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref> to be a replay, in which case it stops processing that request, unless handling that request is deemed appropriate.  </t>
            <t>
To practically detect replayed <iref item="Oblivious CoAP Requests"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Requests</xref>, the server can rely on the following information:  </t>
            <ul spacing="normal">
              <li>
                <t>For the first <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref> of a data exchange (i.e., with the OCoAP Option indicating <tt>count=0</tt> and <tt>c=0</tt>), the server can rely on the encapsulated KEM shared secret <tt>enc</tt> conveyed in the request payload. That is, like in Oblivious HTTP (see <xref section="6.5" sectionFormat="of" target="RFC9458"/>), the server can use <tt>enc</tt> in place of a nonce to uniquely identify the <iref item="Oblivious CoAP Request"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Request</xref> and detect if it has been previously received.      </t>
                <t>
Specifically, the server can rely on <tt>enc</tt> as is when that is the DH/NIKE ephemeral public key of the Oblivious Client, or on a (hash-based) identifier of <tt>enc</tt> when that is a KEM ciphertext.</t>
              </li>
              <li>
                <t>For follow-up <iref item="Oblivious CoAP Requests"/><xref target="dfn-ocoap-req" format="none">Oblivious CoAP Requests</xref> throughout a data exchange, the server can rely on the counter <tt>count</tt> in the integrity-protected OCoAP Option of those requests, e.g., by evaluating it against a Replay Window paired with the receiving HPKE context <tt>rctxt</tt>.</t>
              </li>
            </ul>
            <t>
A protected Echo Option <xref target="RFC9175"/> can further increase replay protection, similar to how it is used with OSCORE.</t>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has the following actions for IANA.</t>
      <t>Note to RFC Editor: Please replace all occurrences of "[RFC-XXXX]" with the RFC number of this specification and delete this paragraph.</t>
      <section anchor="media-type">
        <name>Media Type Registrations</name>
        <t>This document registers the media type "application/ocoap-keys+cbor-seq". This registration follows the procedures specified in <xref target="RFC6838"/>.</t>
        <ul spacing="normal">
          <li>
            <t>Type name: application</t>
          </li>
          <li>
            <t>Subtype name: ocoap-keys+cbor-seq</t>
          </li>
          <li>
            <t>Required parameters: N/A</t>
          </li>
          <li>
            <t>Optional parameters: N/A</t>
          </li>
          <li>
            <t>Encoding considerations: Must be encoded as a CBOR sequence <xref target="RFC8742"/> of CBOR maps <xref target="RFC8949"/>. Each of the CBOR maps is a key configuration for Oblivious CoAP encoded as defined in <xref target="key-configuration"/> of [RFC-XXXX].</t>
          </li>
          <li>
            <t>Security considerations: See <xref target="sec-security-considerations"/> of [RFC-XXXX].</t>
          </li>
          <li>
            <t>Interoperability considerations: N/A</t>
          </li>
          <li>
            <t>Published specification: [RFC-XXXX]</t>
          </li>
          <li>
            <t>Applications that use this media type: Applications that need to describe, distribute, and store a CBOR-encoded representation of a key configuration for Oblivious CoAP (see <xref target="key-configuration"/> of [RFC-XXXX]).</t>
          </li>
          <li>
            <t>Fragment identifier considerations: N/A</t>
          </li>
          <li>
            <t>Additional information: N/A</t>
          </li>
          <li>
            <t>Person &amp; email address to contact for further information: CoRE WG mailing list (core@ietf.org) or IETF Applications and Real-Time Area (art@ietf.org)</t>
          </li>
          <li>
            <t>Intended usage: COMMON</t>
          </li>
          <li>
            <t>Restrictions on usage: None</t>
          </li>
          <li>
            <t>Author/Change controller: IETF</t>
          </li>
          <li>
            <t>Provisional registration:  No</t>
          </li>
        </ul>
      </section>
      <section anchor="content-format">
        <name>CoAP Content-Formats Registry</name>
        <t>IANA is asked to add the following entries to the "CoAP Content-Formats" registry <xref target="IANA.CoAP-Content-Formats"/> within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <t>Content Type: application/ohttp-keys</t>
        <t>Content Coding: -</t>
        <t>ID: TBD (value between 0 and 255)</t>
        <t>Reference: [RFC-XXXX]</t>
        <t><br/></t>
        <t>Content Type: application/ocoap-keys+cbor-seq</t>
        <t>Content Coding: -</t>
        <t>ID: TBD (value between 0 and 255)</t>
        <t>Reference: [RFC-XXXX]</t>
        <t>Note to RFC Editor: In the table above, please replace TBD with the registered Content-Format ID. Then, please delete this paragraph.</t>
      </section>
      <section anchor="iana-coap-options">
        <name>CoAP Option Numbers Registry</name>
        <t>IANA is asked to add the following option number to the "CoAP Option Numbers" registry <xref target="IANA.CoAP-Option-Numbers"/> within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <table align="center">
          <name>Registration 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">TBD</td>
              <td align="left">OCoAP</td>
              <td align="left">[RFC-XXXX]</td>
            </tr>
          </tbody>
        </table>
        <t>For the OCoAP Option, the preferred value range is 0-255.</t>
        <t>Note to RFC Editor: In the table above, please replace TBD with the registered option number. Then, please delete this paragraph and the previous paragraph.</t>
      </section>
      <section anchor="iana-ocoap-flag-bits">
        <name>OCoAP Flag Bits Registry</name>
        <t>This document establishes the "OCoAP Flag Bits" registry within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <t>The registration policy is "Expert Review" per <xref target="RFC8126"/>. "Expert Review" guidelines are provided in <xref target="iana-review"/>.</t>
        <t>The columns of this registry are:</t>
        <ul spacing="normal">
          <li>
            <t>Bit Position: This indicates the position of the bit in the set of OCoAP flag bits, starting at 0 for the most significant bit. The bit position must be an integer or a range of integers between 0 and 63 (inclusive).</t>
          </li>
          <li>
            <t>Name: This is a descriptive name that enables easier reference to the item. The name <bcp14>MUST</bcp14> be unique. It is not used in the protocol.</t>
          </li>
          <li>
            <t>Description: This contains a brief description of the use of the bit in this item.</t>
          </li>
          <li>
            <t>Reference: This contains a pointer to the public specification for the item, if one exists.</t>
          </li>
        </ul>
        <t>This registry is initially populated by the entries in <xref target="_table-ocoap-flag-bits"/>. The entry with Bit Position of 0 is marked as "Reserved". It is expected that it will be specified in a future document and will be used to expand the space for the OCoAP flag bits in <xref target="ocoap-option"/>, so that entries 8-63 of the registry are defined.</t>
        <table align="center" anchor="_table-ocoap-flag-bits">
          <name>OCoAP Flag Bits</name>
          <thead>
            <tr>
              <th align="left">Bit Position</th>
              <th align="left">Name</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">Reserved</td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">Unassigned</td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">Unassigned</td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">3</td>
              <td align="left">Unassigned</td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">4</td>
              <td align="left">Unassigned</td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">5</td>
              <td align="left">ID Context Flag</td>
              <td align="left">Set to 1 if the HPKE ID Context is present</td>
              <td align="left">
                <xref target="ocoap-option"/> of [RFC-XXXX]</td>
            </tr>
            <tr>
              <td align="left">6-7</td>
              <td align="left">Count Length</td>
              <td align="left">Encodes the Count length minus 1</td>
              <td align="left">
                <xref target="ocoap-option"/> of [RFC-XXXX]</td>
            </tr>
            <tr>
              <td align="left">8-63</td>
              <td align="left">Unassigned</td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="iana-review">
        <name>Expert Review Instructions</name>
        <t>"Expert Review" is the registration policy defined for the IANA registry established in this document. This section gives some general guidelines for what the experts should be looking for, but they are being designated as experts for a reason, so they should be given substantial latitude.</t>
        <t>Expert reviewers should take into consideration the following points:</t>
        <ul spacing="normal">
          <li>
            <t>Point squatting should be discouraged. Reviewers are encouraged to get sufficient information for registration requests to ensure that the usage solves a valid use case that could not be solved better in a different way, is not going to duplicate one that is already registered, and that the point is likely to be used in deployments.</t>
          </li>
          <li>
            <t>Experts are expected to check the clarity of purpose and use of the requested code points. When specifications are not provided, the description provided needs to have sufficient information to identify what the point is being used for.</t>
          </li>
          <li>
            <t>Experts should take into account the expected usage of fields when approving point assignment. The length of the encoded value should be weighed against how many code points of that length are left, the size of device it will be used on, and the number of code points left that encode to that size.</t>
          </li>
          <li>
            <t>Experts should block registrations for entries 8-63 until these points are defined (i.e., until the mechanism for the OCoAP flag bits expansion via bit 0 is specified).</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </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="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </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="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC8613">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <date month="July" year="2019"/>
            <abstract>
              <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE). OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
              <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration. Therefore, this document updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8613"/>
          <seriesInfo name="DOI" value="10.17487/RFC8613"/>
        </reference>
        <reference anchor="RFC8742">
          <front>
            <title>Concise Binary Object Representation (CBOR) Sequences</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>This document describes the Concise Binary Object Representation (CBOR) Sequence format and associated media type "application/cbor-seq". A CBOR Sequence consists of any number of encoded CBOR data items, simply concatenated in sequence.</t>
              <t>Structured syntax suffixes for media types allow other media types to build on them and make it explicit that they are built on an existing media type as their foundation. This specification defines and registers "+cbor-seq" as a structured syntax suffix for CBOR Sequences.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8742"/>
          <seriesInfo name="DOI" value="10.17487/RFC8742"/>
        </reference>
        <reference anchor="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="RFC9180">
          <front>
            <title>Hybrid Public Key Encryption</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="K. Bhargavan" initials="K." surname="Bhargavan"/>
            <author fullname="B. Lipp" initials="B." surname="Lipp"/>
            <author fullname="C. Wood" initials="C." surname="Wood"/>
            <date month="February" year="2022"/>
            <abstract>
              <t>This document describes a scheme for hybrid public key encryption (HPKE). This scheme provides a variant of public key encryption of arbitrary-sized plaintexts for a recipient public key. It also includes three authenticated variants, including one that authenticates possession of a pre-shared key and two optional ones that authenticate possession of a key encapsulation mechanism (KEM) private key. HPKE works for any combination of an asymmetric KEM, key derivation function (KDF), and authenticated encryption with additional data (AEAD) encryption function. Some authenticated variants may not be supported by all KEMs. We provide instantiations of the scheme using widely used and efficient primitives, such as Elliptic Curve Diffie-Hellman (ECDH) key agreement, HMAC-based key derivation function (HKDF), and SHA2.</t>
              <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9180"/>
          <seriesInfo name="DOI" value="10.17487/RFC9180"/>
        </reference>
        <reference anchor="RFC9458">
          <front>
            <title>Oblivious HTTP</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="January" year="2024"/>
            <abstract>
              <t>This document describes Oblivious HTTP, a protocol for forwarding encrypted HTTP messages. Oblivious HTTP allows a client to make multiple requests to an origin server without that server being able to link those requests to the client or to identify the requests as having come from the same client, while placing only limited trust in the nodes used to forward the messages.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9458"/>
          <seriesInfo name="DOI" value="10.17487/RFC9458"/>
        </reference>
        <reference anchor="I-D.ietf-core-href">
          <front>
            <title>Constrained Resource Identifiers</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <date day="21" month="November" year="2025"/>
            <abstract>
              <t>   The Constrained Resource Identifier (CRI) is a complement to the
   Uniform Resource Identifier (URI) that represents the URI components
   in Concise Binary Object Representation (CBOR) rather than as a
   sequence of characters.  This approach simplifies parsing,
   comparison, and reference resolution in environments with severe
   limitations on processing power, code size, and memory size.

   This RFC updates RFC 7595 by adding a column on the "URI Schemes"
   registry.


   // (This "cref" paragraph will be removed by the RFC editor:) After
   // approval of -28 and nit fixes in -29, the present revision -30
   // contains two more small fixes for nits that were uncovered in the
   // RPC intake process.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-30"/>
        </reference>
        <reference anchor="I-D.ietf-core-uri-path-abbrev">
          <front>
            <title>URI Path abbreviation in CoAP</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Michael Richardson" initials="M." surname="Richardson">
              <organization>Sandelman Software Works</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   Applications built on CoAP face a conflict between the technical need
   for short message sizes and the interoperability requirement of
   following BCP190 and thus using (relatively verbose) well-known URI
   paths.  This document introduces the Uri-Path-Abbrev CoAP option that
   allows expressing well-known URI paths in as little as two bytes.

   Using this option revealed a subtle flaw in RFC7252 that severely
   limited the extension point of critical options.  This document
   updates RFC7252 to rectify that.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-uri-path-abbrev-05"/>
        </reference>
        <reference anchor="IANA.CoAP-Content-Formats" target="https://www.iana.org/assignments/core-parameters">
          <front>
            <title>CoAP Content-Formats</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.CoAP-Option-Numbers" target="https://www.iana.org/assignments/core-parameters">
          <front>
            <title>CoAP Option Numbers</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.HPKE-AEAD-Identifiers" target="https://www.iana.org/assignments/hpke">
          <front>
            <title>HPKE AEAD Identifiers</title>
            <author>
              <organization>IANA</organization>
            </author>
          </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="RFC7959">
          <front>
            <title>Block-Wise Transfers in the Constrained Application Protocol (CoAP)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="Z. Shelby" initials="Z." role="editor" surname="Shelby"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful transfer protocol for constrained nodes and networks. Basic CoAP messages work well for small payloads from sensors and actuators; however, applications will need to transfer larger payloads occasionally -- for instance, for firmware updates. In contrast to HTTP, where TCP does the grunt work of segmenting and resequencing, CoAP is based on datagram transports such as UDP or Datagram Transport Layer Security (DTLS). These transports only offer fragmentation, which is even more problematic in constrained nodes and networks, limiting the maximum size of resource representations that can practically be transferred.</t>
              <t>Instead of relying on IP fragmentation, this specification extends basic CoAP with a pair of "Block" options for transferring multiple blocks of information from a resource representation in multiple request-response pairs. In many important cases, the Block options enable a server to be truly stateless: the server can handle each block transfer separately, with no need for a connection setup or other server-side memory of previous block transfers. Essentially, the Block options provide a minimal way to transfer larger representations in a block-wise fashion.</t>
              <t>A CoAP implementation that does not support these options generally is limited in the size of the representations that can be exchanged, so there is an expectation that the Block options will be widely used in CoAP implementations. Therefore, this specification updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7959"/>
          <seriesInfo name="DOI" value="10.17487/RFC7959"/>
        </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="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="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC9112">
          <front>
            <title>HTTP/1.1</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document specifies the HTTP/1.1 message syntax, message parsing, connection management, and related security concerns.</t>
              <t>This document obsoletes portions of RFC 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="99"/>
          <seriesInfo name="RFC" value="9112"/>
          <seriesInfo name="DOI" value="10.17487/RFC9112"/>
        </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="RFC9176">
          <front>
            <title>Constrained RESTful Environments (CoRE) Resource Directory</title>
            <author fullname="C. Amsüss" initials="C." role="editor" surname="Amsüss"/>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="M. Koster" initials="M." surname="Koster"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. van der Stok" initials="P." surname="van der Stok"/>
            <date month="April" year="2022"/>
            <abstract>
              <t>In many Internet of Things (IoT) applications, direct discovery of resources is not practical due to sleeping nodes or networks where multicast traffic is inefficient. These problems can be solved by employing an entity called a Resource Directory (RD), which contains information about resources held on other servers, allowing lookups to be performed for those resources. The input to an RD is composed of links, and the output is composed of links constructed from the information stored in the RD. This document specifies the web interfaces that an RD supports for web servers to discover the RD and to register, maintain, look up, and remove information on resources. Furthermore, new target attributes useful in conjunction with an RD are defined.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9176"/>
          <seriesInfo name="DOI" value="10.17487/RFC9176"/>
        </reference>
        <reference anchor="RFC9177">
          <front>
            <title>Constrained Application Protocol (CoAP) Block-Wise Transfer Options Supporting Robust Transmission</title>
            <author fullname="M. Boucadair" initials="M." surname="Boucadair"/>
            <author fullname="J. Shallow" initials="J." surname="Shallow"/>
            <date month="March" year="2022"/>
            <abstract>
              <t>This document specifies alternative Constrained Application Protocol (CoAP) block-wise transfer options: Q-Block1 and Q-Block2.</t>
              <t>These options are similar to, but distinct from, the CoAP Block1 and Block2 options defined in RFC 7959. The Q-Block1 and Q-Block2 options are not intended to replace the Block1 and Block2 options but rather have the goal of supporting Non-confirmable (NON) messages for large amounts of data with fewer packet interchanges. Also, the Q-Block1 and Q-Block2 options support faster recovery should any of the blocks get lost in transmission.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9177"/>
          <seriesInfo name="DOI" value="10.17487/RFC9177"/>
        </reference>
        <reference anchor="RFC9230">
          <front>
            <title>Oblivious DNS over HTTPS</title>
            <author fullname="E. Kinnear" initials="E." surname="Kinnear"/>
            <author fullname="P. McManus" initials="P." surname="McManus"/>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <author fullname="T. Verma" initials="T." surname="Verma"/>
            <author fullname="C.A. Wood" initials="C.A." surname="Wood"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This document describes a protocol that allows clients to hide their IP addresses from DNS resolvers via proxying encrypted DNS over HTTPS (DoH) messages. This improves privacy of DNS operations by not allowing any one server entity to be aware of both the client IP address and the content of DNS queries and answers.</t>
              <t>This experimental protocol has been developed outside the IETF and is published here to guide implementation, ensure interoperability among implementations, and enable wide-scale experimentation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9230"/>
          <seriesInfo name="DOI" value="10.17487/RFC9230"/>
        </reference>
        <reference anchor="RFC9953">
          <front>
            <title>DNS over CoAP (DoC)</title>
            <author fullname="M. S. Lenders" initials="M. S." surname="Lenders"/>
            <author fullname="C. Amsüss" initials="C." surname="Amsüss"/>
            <author fullname="C. Gündoğan" initials="C." surname="Gündoğan"/>
            <author fullname="T. C. Schmidt" initials="T. C." surname="Schmidt"/>
            <author fullname="M. Wählisch" initials="M." surname="Wählisch"/>
            <date month="March" year="2026"/>
            <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 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="RFC" value="9953"/>
          <seriesInfo name="DOI" value="10.17487/RFC9953"/>
        </reference>
        <reference anchor="I-D.amsuess-t2trg-onion-coap">
          <front>
            <title>Using onion routing with CoAP</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <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>
            <date day="7" month="July" year="2025"/>
            <abstract>
              <t>   The CoAP protocol was designed with direct connections and proxies in
   mind.  This document defines mechanisms by which chains of proxies
   can be set up.  In combination, they enable the operation of hidden
   services and of clients similar to how Tor (onion routing) enables it
   for TCP-based protocols.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-amsuess-t2trg-onion-coap-04"/>
        </reference>
        <reference anchor="I-D.ietf-core-cacheable-oscore">
          <front>
            <title>End-to-End Protected and Cacheable CoAP Responses using Group Object Security for Constrained RESTful Environments (Group OSCORE)</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   When using the Constrained Application Protocol (CoAP), exchanged
   messages can be protected end-to-end also across untrusted
   intermediary proxies.  This can be achieved with Object Security for
   Constrained RESTful Environments (OSCORE) or, in the case of group
   communication, with Group Object Security for Constrained RESTful
   Environments (Group OSCORE).  However, this sidesteps the proxies'
   abilities to cache responses from the origin server(s).  This
   document restores cacheability of end-to-end protected responses at
   proxies, by using Group OSCORE and introducing consensus requests,
   which any client in an OSCORE group can send to one server or
   multiple servers in the same group.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-cacheable-oscore-02"/>
        </reference>
      </references>
    </references>
    <?line 896?>

<section anchor="change-log">
      <name>Change Log</name>
      <section anchor="since-draft-lenders-core-oblivious-coap-00">
        <name>Since <eref target="https://datatracker.ietf.org/doc/draft-lenders-core-oblivious-coap/00/">draft-lenders-core-oblivious-coap-00</eref></name>
        <ul spacing="normal">
          <li>
            <t>Editorial fixes</t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The work on this document has been partly supported by Sweden's Innovation Agency VINNOVA and the Celtic-Next project CYPRESS, as well as by the Sovereign Tech Standards program.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
d+CWH25Qk1sOJDKKgjyIXUtSdJ69FxzW3gnHvTq32giuWYTD2ZeM8+6C+JZR
vkNJL8qwJ+6acMQ96t7Va/enX6EkLPVFiW3u9CknlKq8Zr6djOgOwsMIo9aT
Ky70mvncYfpWRLWuMeezZkZNTjcWbIgh01lhP1AOIgruc6Mw4jj2GvwPYeqP
b67U/qxG+/8i3fdp3+q8CwzQUatJUXGk/P+7cjUrvB7LXu42MCUjguiTFsXf
yTj3ggu9REtdwBd6PgOVUe3w/BQbZSQayEgVpXGMmGotHpbXkkou5FPj/IaN
f88JFxjo0JjyttsPsgADb0dYYByIUpQOdfF7w0gP47SKJB8DT7HlELshes7S
KBEFZlaZqZJFEzSGjGNA/IauxYpPT9tidsKURmakS5Af0YMx/gDP78Ly+Esx
6uhLYZSwt6QIgOxswch1a+mpHY+ts6MhfKpluAhl/R6h0zv59seouELCuPlh
PK7ZDHZcMcgrVeNa+paA8hleHXqdC3ZfnMVRur5xoV1BMIpWtmobve2bKzi7
X3PcZgpIJiI6d081QogtzkYf6fgqH0ftl7v6S9Cqc0yF1Z9a3S9chavHh8ZO
1GUyDuFWErc1L4SliCVJeqGQLj6SklhPrnC+iY0PI1vr2XoAXTwPD96DTJp+
iCjh12kM4JEUdDovhKnsr0sWmb8kSFKKk7HC50jr1A27/3zmikNO0UESMQ+4
78Hjqh1L6ZYbqOONsG59eTWazrEmhqBv6Bnvj7BaRHCSFkJnEmF0tvFS+it3
zhTFBK1ypt2puGeyQQgxlyY1C9himLblLhiNTD1ReVpKGUyDgi/weA8LzrII
BDPPlgJUA0NKXycZ26UczvPZxS/lMgNTCXKRLU3i+dvvboizL1Uks3abQ6BW
Oi6Nd07YAMNRypN7Dg0bXPDJL0gnOgVWTKxFHrQXTWz3gawLTzWagp9/HQjw
Gzr6hSbhGdAxQSLSWtsK5Va5mhtWwYy9WKOgVq0MVYBcWdalJnduXbcaS4L3
aDI9jYPv3BgqnXIqgUAYmdfHahkzsieFaR1kYyMvf5hNUFfKvRYcD6bll4aA
M1fvqNxVuyU46x6k+vUoi28C0Upa/dIJn0twNZ0hiYmWZTgiiXEF6iVg0J+5
wpm4Yb0g3BL1GZbO1DFn8rtdGy+I0QN2XcarD0KpyHuOE8ym0NvMYidtl8zp
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
TJ3DPqsz4A4jiriEby+LCLT7/wvVK/WXXvcAAA==

-->

</rfc>
