<?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.6.17 (Ruby 3.1.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-ohai-ohttp-06" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.3 -->
  <front>
    <title>Oblivious HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-ohai-ohttp-06"/>
    <author initials="M." surname="Thomson" fullname="Martin Thomson">
      <organization>Mozilla</organization>
      <address>
        <email>mt@lowentropy.net</email>
      </address>
    </author>
    <author initials="C. A." surname="Wood" fullname="Christopher A. Wood">
      <organization>Cloudflare</organization>
      <address>
        <email>caw@heapingbits.net</email>
      </address>
    </author>
    <date year="2022" month="December" day="16"/>
    <area>Security</area>
    <workgroup>Oblivious HTTP Application Intermediation</workgroup>
    <abstract>
      <t>This document describes a system for forwarding encrypted HTTP messages.
This 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>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-wg-ohai.github.io/oblivious-http/draft-ietf-ohai-ohttp.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-ohai-ohttp/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Oblivious HTTP Application Intermediation Working Group mailing list (<eref target="mailto:ohai@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/ohai/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/ohai/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-ohai/oblivious-http"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>An HTTP request reveals information about the client's identity to the server.
Some of that information is in the request content, and therefore under the control
of the client. However, the source IP address of the underlying connection reveals
information that the client has only limited control over.</t>
      <t>Even where an IP address is not directly associated with an individual, the requests
made from it can be correlated over time to assemble a profile of client behavior. In
particular, connection reuse improves performance, but provides servers with
the ability to correlate requests that share a connection.</t>
      <t><xref target="dfn-client" format="none">Client</xref><iref item="Client"/>-configured HTTP proxies can provide a degree of protection against IP address
tracking, and systems like virtual private networks and the Tor network
<xref target="Dingledine2004"/> provide additional options for clients.</t>
      <t>However, even when IP address tracking is mitigated using one of these techniques, each request
needs to be on a completely new TLS connection to avoid the connection itself being used
to correlate behavior. This imposes considerable performance and efficiency overheads, due
to the additional round trip to the server (at a minumum), additional data exchanged, and
additional CPU cost of cryptographic computations.</t>
      <t>To overcome these limitations, this document defines how binary HTTP messages
<xref target="BINARY"/> can be encapsulated using Hybrid Public Key Encryption (HPKE;
<xref target="HPKE"/>) to protect their contents. <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> exchange these messages with an
<xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/>, which is responsible for forwarding decapsulated
requests to the original <xref target="dfn-target" format="none">Target Resource</xref><iref item="Target Resource"/> and encapsulating the corresponding
responses and sending them back to the client. Critically, encapsulated messages
are sent through a separate <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> to avoid exposing the
client's IP address or allowing the connection to be used as a correlator
between its requests.</t>
      <t>Because it allows connection reuse between the client and <xref target="dfn-relay" format="none">Oblivious Relay
Resource</xref><iref item="Oblivious Relay Resource"/>, as well as between that relay and the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/>, this
scheme represents a performance improvement over using just one request in each
connection.  With limited trust placed in the <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> (see
<xref target="security"/>), <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> are assured that requests are not uniquely attributed to
them or linked to other requests.</t>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>An Oblivious HTTP <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> must initially know the following:</t>
      <ul spacing="normal">
        <li>The identity of an <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/>.  This might include some
information about what Target Resources the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/>
supports.</li>
        <li>The details of an HPKE public key that the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/>
accepts, including an identifier for that key and the HPKE algorithms that
are used with that key.</li>
        <li>The identity of an <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> that will accept relay requests
carrying an <xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/> as its content and forward the content in
these requests to a single <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/>. See <xref target="proxy-state"/>
for more information about the mapping between <xref target="dfn-relay" format="none">Oblivious Relay and Gateway
Resources</xref><iref item="Oblivious Relay and Gateway Resources"/>.</li>
      </ul>
      <t>This information allows the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> to make a request of a <xref target="dfn-target" format="none">Target Resource</xref><iref item="Target Resource"/> with
that resource having only a limited ability to correlate that request with the
<xref target="dfn-client" format="none">Client</xref><iref item="Client"/> IP or other requests that the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> might make to that server.</t>
      <figure anchor="fig-overview">
        <name>Overview of Oblivious HTTP</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="464" width="536" viewBox="0 0 536 464" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
              <path d="M 8,32 L 8,80" fill="none" stroke="black"/>
              <path d="M 48,80 L 48,448" fill="none" stroke="black"/>
              <path d="M 88,32 L 88,80" fill="none" stroke="black"/>
              <path d="M 152,32 L 152,80" fill="none" stroke="black"/>
              <path d="M 192,80 L 192,448" fill="none" stroke="black"/>
              <path d="M 240,32 L 240,80" fill="none" stroke="black"/>
              <path d="M 296,32 L 296,80" fill="none" stroke="black"/>
              <path d="M 360,80 L 360,448" fill="none" stroke="black"/>
              <path d="M 384,32 L 384,80" fill="none" stroke="black"/>
              <path d="M 440,32 L 440,80" fill="none" stroke="black"/>
              <path d="M 480,80 L 480,448" fill="none" stroke="black"/>
              <path d="M 528,32 L 528,80" fill="none" stroke="black"/>
              <path d="M 8,32 L 88,32" fill="none" stroke="black"/>
              <path d="M 152,32 L 240,32" fill="none" stroke="black"/>
              <path d="M 296,32 L 384,32" fill="none" stroke="black"/>
              <path d="M 440,32 L 528,32" fill="none" stroke="black"/>
              <path d="M 8,80 L 88,80" fill="none" stroke="black"/>
              <path d="M 152,80 L 240,80" fill="none" stroke="black"/>
              <path d="M 296,80 L 384,80" fill="none" stroke="black"/>
              <path d="M 440,80 L 528,80" fill="none" stroke="black"/>
              <path d="M 48,176 L 184,176" fill="none" stroke="black"/>
              <path d="M 192,240 L 352,240" fill="none" stroke="black"/>
              <path d="M 360,256 L 472,256" fill="none" stroke="black"/>
              <path d="M 368,304 L 480,304" fill="none" stroke="black"/>
              <path d="M 200,368 L 360,368" fill="none" stroke="black"/>
              <path d="M 56,432 L 192,432" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="480,256 468,250.4 468,261.6" fill="black" transform="rotate(0,472,256)"/>
              <polygon class="arrowhead" points="376,304 364,298.4 364,309.6" fill="black" transform="rotate(180,368,304)"/>
              <polygon class="arrowhead" points="360,240 348,234.4 348,245.6" fill="black" transform="rotate(0,352,240)"/>
              <polygon class="arrowhead" points="208,368 196,362.4 196,373.6" fill="black" transform="rotate(180,200,368)"/>
              <polygon class="arrowhead" points="192,176 180,170.4 180,181.6" fill="black" transform="rotate(0,184,176)"/>
              <polygon class="arrowhead" points="64,432 52,426.4 52,437.6" fill="black" transform="rotate(180,56,432)"/>
              <g class="text">
                <text x="44" y="52">Client</text>
                <text x="184" y="52">Relay</text>
                <text x="336" y="52">Gateway</text>
                <text x="476" y="52">Target</text>
                <text x="196" y="68">Resource</text>
                <text x="340" y="68">Resource</text>
                <text x="484" y="68">Resource</text>
                <text x="80" y="116">Relay</text>
                <text x="88" y="132">Request</text>
                <text x="68" y="148">[+</text>
                <text x="132" y="148">Encapsulated</text>
                <text x="112" y="164">Request</text>
                <text x="152" y="164">]</text>
                <text x="232" y="180">Gateway</text>
                <text x="232" y="196">Request</text>
                <text x="212" y="212">[+</text>
                <text x="276" y="212">Encapsulated</text>
                <text x="256" y="228">Request</text>
                <text x="296" y="228">]</text>
                <text x="400" y="244">Request</text>
                <text x="436" y="292">Response</text>
                <text x="320" y="308">Gateway</text>
                <text x="316" y="324">Response</text>
                <text x="236" y="340">[+</text>
                <text x="300" y="340">Encapsulated</text>
                <text x="300" y="356">Response</text>
                <text x="344" y="356">]</text>
                <text x="160" y="372">Relay</text>
                <text x="148" y="388">Response</text>
                <text x="68" y="404">[+</text>
                <text x="132" y="404">Encapsulated</text>
                <text x="132" y="420">Response</text>
                <text x="176" y="420">]</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+---------+       +----------+      +----------+      +----------+
| Client  |       | Relay    |      | Gateway  |      | Target   |
|         |       | Resource |      | Resource |      | Resource |
+----+----+       +----+-----+      +-------+--+      +----+-----+
     |                 |                    |              |
     | Relay           |                    |              |
     | Request         |                    |              |
     | [+ Encapsulated |                    |              |
     |    Request ]    |                    |              |
     +---------------->| Gateway            |              |
     |                 | Request            |              |
     |                 | [+ Encapsulated    |              |
     |                 |    Request ]       |              |
     |                 +------------------->| Request      |
     |                 |                    +------------->|
     |                 |                    |              |
     |                 |                    |     Response |
     |                 |            Gateway |<-------------+
     |                 |           Response |              |
     |                 |    [+ Encapsulated |              |
     |                 |         Response ] |              |
     |           Relay |<-------------------+              |
     |        Response |                    |              |
     | [+ Encapsulated |                    |              |
     |      Response ] |                    |              |
     |<----------------+                    |              |
     |                 |                    |              |
]]></artwork>
        </artset>
      </figure>
      <t>In order to make a request to a <xref target="dfn-target" format="none">Target Resource</xref><iref item="Target Resource"/>, the following steps occur, as
shown in <xref target="fig-overview"/>:</t>
      <ol spacing="normal" type="1"><li>The <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> constructs an HTTP request for a <xref target="dfn-target" format="none">Target Resource</xref><iref item="Target Resource"/>.</li>
        <li>The <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> encodes the HTTP request in a binary HTTP message and then
encapsulates that message using HPKE and the process from <xref target="request"/>.</li>
        <li>The <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> sends a POST request to the <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> with the
<xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/> as the content of that message.</li>
        <li>The <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> forwards this request to the Oblivious Gateway
resource.</li>
        <li>The <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> receives this request and removes
the HPKE protection to obtain an HTTP request.</li>
        <li>The <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> makes an HTTP request that includes the target
URI, method, fields, and content of the request it acquires.</li>
        <li>The <xref target="dfn-target" format="none">Target Resource</xref><iref item="Target Resource"/> answers this HTTP request with an HTTP response.</li>
        <li>The <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> encapsulates the HTTP response following the
process in <xref target="response"/> and sends this in response to the request from the
<xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/>.</li>
        <li>The <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> forwards this response to the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/>.</li>
        <li>The <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> removes the encapsulation to obtain the response to the original
request.</li>
      </ol>
      <section anchor="applicability">
        <name>Applicability</name>
        <t>Oblivious HTTP has limited applicability.  Many uses of HTTP benefit
from being able to carry state between requests, such as with cookies
(<xref target="COOKIES"/>), authentication (<xref section="11" sectionFormat="of" target="HTTP"/>), or even
alternative services (<xref target="RFC7838"/>).  Oblivious HTTP removes linkage
at the transport layer, which is only useful for an application
that does not carry state between requests.</t>
        <t>Oblivious HTTP is primarily useful where privacy risks associated with possible
stateful treatment of requests are sufficiently large that the cost of
deploying this protocol can be justified.  Oblivious HTTP is simpler and less
costly than more robust systems, like Prio (<xref target="PRIO"/>) or Tor
(<xref target="Dingledine2004"/>), which can provide stronger guarantees at higher
operational costs.</t>
        <t>Oblivious HTTP is more costly than a direct connection to a server.  Some costs,
like those involved with connection setup, can be amortized, but there are
several ways in which Oblivious HTTP is more expensive than a direct request:</t>
        <ul spacing="normal">
          <li>Each request requires at least two regular HTTP requests, which could
increase latency.</li>
          <li>Each request is expanded in size with additional HTTP fields,
encryption-related metadata, and AEAD expansion.</li>
          <li>Deriving cryptographic keys and applying them for request and
response protection takes non-negligible computational resources.</li>
        </ul>
        <t>Examples of where preventing the linking of requests might justify these costs
include:</t>
        <ul spacing="normal">
          <li>DNS queries.  DNS queries made to a recursive resolver reveal information
about the requester, particularly if linked to other queries.</li>
          <li>Telemetry submission.  Applications that submit reports about their usage to
their developers might use Oblivious HTTP for some types of moderately
sensitive data.</li>
        </ul>
        <t>These are examples of requests where there is information in a request that - if
it were connected to the identity of the user - might allow a server to learn
something about that user even if the identity of the user is pseudonymous.
Other examples include the submission of anonymous surveys, making search
queries, or requesting location-specific content (such as retrieving tiles of a
map display).</t>
      </section>
      <section anchor="conventions-and-definitions">
        <name>Conventions and Definitions</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>
        <t>This document uses terminology from <xref target="HTTP"/> and defines several terms as
follows:</t>
        <dl>
          <dt><xref target="dfn-client" format="none">Client</xref><iref item="Client"/>:</dt>
          <dd>
            <t anchor="dfn-client">A <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> originates Oblivious HTTP requests.  A <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> is also an HTTP client
in two ways: for the <xref target="dfn-target" format="none">Target Resource</xref><iref item="Target Resource"/> and for the <xref target="dfn-relay" format="none">Oblivious Relay
Resource</xref><iref item="Oblivious Relay Resource"/>. However, when referring to the HTTP definition of client (<xref section="3.3" sectionFormat="of" target="HTTP"/>), the term "HTTP client" is used; see <xref target="http-usage"/>.</t>
          </dd>
          <dt><xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/>:</dt>
          <dd>
            <t anchor="dfn-enc-req">An HTTP request that is encapsulated in an HPKE-encrypted message; see
<xref target="request"/>.</t>
          </dd>
          <dt><xref target="dfn-enc-res" format="none">Encapsulated Response</xref><iref item="Encapsulated Response"/>:</dt>
          <dd>
            <t anchor="dfn-enc-res">An HTTP response that is encapsulated in an HPKE-encrypted message; see
<xref target="response"/>.</t>
          </dd>
          <dt><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/>:</dt>
          <dd>
            <t anchor="dfn-relay">An intermediary that forwards Encapsulated Requests and Responses between
<xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> and a single <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/>.  In context, this can be
referred to as simply a "relay".</t>
          </dd>
          <dt><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/>:</dt>
          <dd>
            <t anchor="dfn-gateway">A resource that can receive an <xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/>, extract the contents of
that request, forward it to a <xref target="dfn-target" format="none">Target Resource</xref><iref item="Target Resource"/>, receive a response, encapsulate
that response, then return that response.  In context, this can be referred to
as simply a "gateway".</t>
          </dd>
          <dt><xref target="dfn-target" format="none">Target Resource</xref><iref item="Target Resource"/>:</dt>
          <dd>
            <t anchor="dfn-target">The resource that is the target of an <xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/>.  This resource
logically handles only regular HTTP requests and responses and so might be
ignorant of the use of Oblivious HTTP to reach it.</t>
          </dd>
        </dl>
        <t>This document includes pseudocode that uses the functions and conventions
defined in <xref target="HPKE"/>.</t>
        <t>Encoding an integer to a sequence of bytes in network byte order is described
using the function <tt>encode(n, v)</tt>, where <tt>n</tt> is the number of bytes and <tt>v</tt> is
the integer value.  ASCII <xref target="ASCII"/> encoding of a string <tt>s</tt> is
indicated using the function <tt>encode_str(s)</tt>.  The function <tt>len()</tt> returns the
length of a sequence of bytes.</t>
        <t>Formats are described using notation from <xref section="1.3" sectionFormat="of" target="QUIC"/>.  An extension
to that notation expresses the number of bits in a field using a simple
mathematical function.</t>
      </section>
    </section>
    <section anchor="key-configuration">
      <name>Key Configuration</name>
      <t>A <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> needs to acquire information about the <xref target="key-configuration" format="none">key configuration</xref><iref item="key configuration"/> of the
<xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> in order to send Encapsulated Requests.
In order to ensure that <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> do not encapsulate messages that other entities
can intercept, the <xref target="key-configuration" format="none">key configuration</xref><iref item="key configuration"/> <bcp14>MUST</bcp14> be authenticated and have integrity
protection.</t>
      <t>This document does not define how that acquisition occurs. However, in
order to help facilitate interoperability, it does specify a format
for the keys. This ensures that different
<xref target="dfn-client" format="none">Client</xref><iref item="Client"/> implementations can be configured in the same way and also
enables advertising <xref target="key-configuration" format="none">key configurations</xref><iref item="key configurations"/> in a consistent format.  This
format might be used, for example with HTTPS, as part of a system for
configuring or discovering <xref target="key-configuration" format="none">key configurations</xref><iref item="key configurations"/>.  Note however that such
a system needs to consider the potential for <xref target="key-configuration" format="none">key configuration</xref><iref item="key configuration"/> to be
used to compromise <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> privacy; see <xref target="privacy"/>.</t>
      <t>A <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> might have multiple <xref target="key-configuration" format="none">key configurations</xref><iref item="key configurations"/> to select from when
encapsulating a request. <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> are responsible for selecting a preferred <xref target="key-configuration" format="none">key
configuration</xref><iref item="key configuration"/> from those it supports. <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> need to consider both the key
encapsulation method (KEM) and the combinations of key derivation function
(KDF) and authenticated encryption with associated data (AEAD) in this
decision.</t>
      <section anchor="key-config">
        <name>Key Configuration Encoding</name>
        <t>A single <xref target="key-configuration" format="none">key configuration</xref><iref item="key configuration"/> consists of a key identifier, a public key, an
identifier for the KEM that the public key uses, and a set HPKE symmetric
algorithms. Each symmetric algorithm consists of an identifier for a KDF and an
identifier for an AEAD.</t>
        <t><xref target="format-key-config"/> shows a single <xref target="key-configuration" format="none">key configuration</xref><iref item="key configuration"/>.</t>
        <figure anchor="format-key-config">
          <name>A Single Key Configuration</name>
          <sourcecode type="tls-syntax"><![CDATA[
HPKE Symmetric Algorithms {
  HPKE KDF ID (16),
  HPKE AEAD ID (16),
}

Key Config {
  Key Identifier (8),
  HPKE KEM ID (16),
  HPKE Public Key (Npk * 8),
  HPKE Symmetric Algorithms Length (16),
  HPKE Symmetric Algorithms (32..262140),
}
]]></sourcecode>
        </figure>
        <t>The definitions for the identifiers used in HPKE and the semantics of the
algorithms they identify can be found in <xref target="HPKE"/>.  The <tt>Npk</tt> parameter is
determined by the choice of HPKE KEM, which can also be found in <xref target="HPKE"/>.</t>
      </section>
      <section anchor="ohttp-keys">
        <name>Key Configuration Media Type</name>
        <t>The "application/ohttp-keys" format is a media type that identifies a serialized
collection of <xref target="key-configuration" format="none">key configurations</xref><iref item="key configurations"/>. The content of this media type comprises one
or more <xref target="key-configuration" format="none">key configuration</xref><iref item="key configuration"/> encodings (see <xref target="key-config"/>) that are concatenated;
see <xref target="iana-keys"/> for a definition of the media type.</t>
        <t>Evolution of the <xref target="key-configuration" format="none">key configuration</xref><iref item="key configuration"/> format is supported through the definition of
new formats that are identified by new media types.</t>
      </section>
    </section>
    <section anchor="hpke-encapsulation">
      <name>HPKE Encapsulation</name>
      <t>This document defines how a binary-encoded HTTP message <xref target="BINARY"/> is
encapsulated using HPKE <xref target="HPKE"/>.  Separate media types are defined to
distinguish request and response messages:</t>
      <ul spacing="normal">
        <li>An <xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/> format defined in <xref target="req-format"/> is identified by the
<xref format="title" target="iana-req">"<tt>message/ohttp-req</tt>" media type</xref>.</li>
        <li>An <xref target="dfn-enc-res" format="none">Encapsulated Response</xref><iref item="Encapsulated Response"/> format defined in <xref target="res-format"/> is identified by the
<xref target="iana-res">"<tt>message/ohttp-res</tt>" media type</xref>.</li>
      </ul>
      <t>Alternative encapsulations or message formats are indicated using the media
type; see <xref target="req-res-media"/> and <xref target="repurposing"/>.</t>
      <section anchor="req-format">
        <name>Request Format</name>
        <t>A message in "<tt>message/ohttp-req</tt>" format protects a binary HTTP request
message; see <xref target="fig-req-pt"/>.</t>
        <figure anchor="fig-req-pt">
          <name>Plaintext Request Content</name>
          <artwork><![CDATA[
Request {
  Binary HTTP Message (..),
}
]]></artwork>
        </figure>
        <t>This plaintext Request is encapsulated into a message in "<tt>message/ohttp-req</tt>"
form by generating an <xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/>.  An <xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/> comprises a
key identifier; HPKE parameters for the chosen KEM, KDF, and AEAD; the
encapsulated KEM shared secret (or <tt>enc</tt>); and the HPKE-protected binary HTTP
request message.</t>
        <t>An <xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/> is shown in <xref target="fig-enc-request"/>. <xref target="request"/> describes
the process for constructing and processing an <xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/>.</t>
        <figure anchor="fig-enc-request">
          <name>Encapsulated Request</name>
          <artwork><![CDATA[
Encapsulated Request {
  Key Identifier (8),
  KEM Identifier (16),
  KDF Identifier (16),
  AEAD Identifier (16),
  Encapsulated KEM Shared Secret (8 * Nenc),
  HPKE-Protected Request (..),
}
]]></artwork>
        </figure>
        <t>The Nenc parameter corresponding to the KEM used in HPKE can be found in
<xref section="7.1" sectionFormat="of" target="HPKE"/> or <eref target="https://www.iana.org/assignments/hpke/hpke.xhtml#hpke-kem-ids">the HPKE KEM IANA
registry</eref>.  Nenc
refers to the size of the encapsulated KEM shared secret, in bytes.</t>
      </section>
      <section anchor="res-format">
        <name>Response Format</name>
        <t>A message in "<tt>message/ohttp-res</tt>" format protects a binary HTTP response
message; see <xref target="fig-res-pt"/>.</t>
        <figure anchor="fig-res-pt">
          <name>Plaintext Response Content</name>
          <artwork><![CDATA[
Response {
  Binary HTTP Message (..),
}
]]></artwork>
        </figure>
        <t>This plaintext Response is encapsulated into a message in "<tt>message/ohttp-res</tt>"
form by generating an <xref target="dfn-enc-res" format="none">Encapsulated Response</xref><iref item="Encapsulated Response"/>.  An <xref target="dfn-enc-res" format="none">Encapsulated Response</xref><iref item="Encapsulated Response"/> comprises
a nonce and the AEAD-protected binary HTTP response message.</t>
        <t>An <xref target="dfn-enc-res" format="none">Encapsulated Response</xref><iref item="Encapsulated Response"/> is shown in <xref target="fig-enc-response"/>. <xref target="response"/> describes
the process for constructing and processing an <xref target="dfn-enc-res" format="none">Encapsulated Response</xref><iref item="Encapsulated Response"/>.</t>
        <figure anchor="fig-enc-response">
          <name>Encapsulated Response</name>
          <artwork><![CDATA[
Encapsulated Response {
  Nonce (8 * max(Nn, Nk)),
  AEAD-Protected Response (..),
}
]]></artwork>
        </figure>
        <t>The Nn and Nk values correspond to parameters of the AEAD used in HPKE, which is
defined in <xref section="7.3" sectionFormat="of" target="HPKE"/> or <eref target="https://www.iana.org/assignments/hpke/hpke.xhtml#hpke-aead-ids">the HPKE AEAD IANA
registry</eref>.  Nn
and Nk refer to the size of the AEAD nonce and key respectively, in bytes.  The
<xref target="dfn-enc-res" format="none">Encapsulated Response</xref><iref item="Encapsulated Response"/> nonce length is set to the larger of these two lengths,
i.e., max(Nn, Nk).</t>
      </section>
      <section anchor="request">
        <name>Encapsulation of Requests</name>
        <t><xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> encapsulate a request, <tt>request</tt>, using values from a <xref target="key-configuration" format="none">key configuration</xref><iref item="key configuration"/>:</t>
        <ul spacing="normal">
          <li>the key identifier from the configuration, <tt>key_id</tt>, with the corresponding KEM
identified by <tt>kem_id</tt>,</li>
          <li>the public key from the configuration, <tt>pkR</tt>, and</li>
          <li>a selected combination of KDF, identified by <tt>kdf_id</tt>, and AEAD, identified by
<tt>aead_id</tt>.</li>
        </ul>
        <t>The <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> then constructs an <xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/>, <tt>enc_request</tt>, from a binary
encoded HTTP request, <tt>request</tt>, as follows:</t>
        <ol spacing="normal" type="1"><li>Construct a message header, <tt>hdr</tt>, by concatenating the values of <tt>key_id</tt>,
<tt>kem_id</tt>, <tt>kdf_id</tt>, and <tt>aead_id</tt>, as one 8-bit integer and three 16-bit
integers, respectively, each in network byte order.</li>
          <li>Build <tt>info</tt> by concatenating the ASCII-encoded string "message/bhttp
request", a zero byte, and the header.  Note: <xref target="repurposing"/> discusses how
alternative message formats might use a different <tt>info</tt> value.</li>
          <li>Create a sending HPKE context by invoking <tt>SetupBaseS()</tt> (<xref section="5.1.1" sectionFormat="of" target="HPKE"/>) with the public key of the receiver <tt>pkR</tt> and <tt>info</tt>.  This yields
the context <tt>sctxt</tt> and an encapsulation key <tt>enc</tt>.</li>
          <li>Encrypt <tt>request</tt> by invoking the <tt>Seal()</tt> method on <tt>sctxt</tt> (<xref section="5.2" sectionFormat="of" target="HPKE"/>) with empty associated data <tt>aad</tt>, yielding ciphertext <tt>ct</tt>.</li>
          <li>Concatenate the values of <tt>hdr</tt>, <tt>enc</tt>, and <tt>ct</tt>, yielding an Encrypted
Request <tt>enc_request</tt>.</li>
        </ol>
        <t>Note that <tt>enc</tt> is of fixed-length, so there is no ambiguity in parsing this
structure.</t>
        <t>In pseudocode, this procedure is as follows:</t>
        <artwork><![CDATA[
hdr = concat(encode(1, key_id),
             encode(2, kem_id),
             encode(2, kdf_id),
             encode(2, aead_id))
info = concat(encode_str("message/bhttp request"),
              encode(1, 0),
              hdr)
enc, sctxt = SetupBaseS(pkR, info)
ct = sctxt.Seal("", request)
enc_request = concat(hdr, enc, ct)
]]></artwork>
        <t>An <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> decrypts an <xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/> by reversing this
process. To decapsulate an <xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/>, <tt>enc_request</tt>:</t>
        <ol spacing="normal" type="1"><li>
            <t>Parses <tt>enc_request</tt> into <tt>key_id</tt>, <tt>kem_id</tt>, <tt>kdf_id</tt>, <tt>aead_id</tt>, <tt>enc</tt>, and
<tt>ct</tt> (indicated using the function <tt>parse()</tt> in pseudocode). The <xref target="dfn-gateway" format="none">Oblivious
Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> is then able to find the HPKE private key, <tt>skR</tt>,
corresponding to <tt>key_id</tt>.  </t>
            <t>
a. If <tt>key_id</tt> does not identify a key matching the type of <tt>kem_id</tt>, the
   <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> returns an error.  </t>
            <t>
b. If <tt>kdf_id</tt> and <tt>aead_id</tt> identify a combination of KDF and AEAD that the
   <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> is unwilling to use with <tt>skR</tt>, the <xref target="dfn-gateway" format="none">Oblivious
   Gateway Resource</xref><iref item="Oblivious    Gateway Resource"/> returns an error.</t>
          </li>
          <li>Build <tt>info</tt> by concatenating the ASCII-encoded string "message/bhttp
request", a zero byte, <tt>key_id</tt> as an 8-bit integer, plus <tt>kem_id</tt>, <tt>kdf_id</tt>,
and <tt>aead_id</tt> as three 16-bit integers.</li>
          <li>Create a receiving HPKE context by invoking <tt>SetupBaseR()</tt> (<xref section="5.1.1" sectionFormat="of" target="HPKE"/>) with <tt>skR</tt>, <tt>enc</tt>, and <tt>info</tt>.  This produces a context <tt>rctxt</tt>.</li>
          <li>Decrypt <tt>ct</tt> by invoking the <tt>Open()</tt> method on <tt>rctxt</tt> (<xref section="5.2" sectionFormat="of" target="HPKE"/>), with an empty associated data <tt>aad</tt>, yielding <tt>request</tt> or an error
on failure. If decryption fails, the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> returns an
error.</li>
        </ol>
        <t>In pseudocode, this procedure is as follows:</t>
        <artwork><![CDATA[
key_id, kem_id, kdf_id, aead_id, enc, ct = parse(enc_request)
info = concat(encode_str("message/bhttp request"),
              encode(1, 0),
              encode(1, key_id),
              encode(2, kem_id),
              encode(2, kdf_id),
              encode(2, aead_id))
rctxt = SetupBaseR(enc, skR, info)
request, error = rctxt.Open("", ct)
]]></artwork>
      </section>
      <section anchor="response">
        <name>Encapsulation of Responses</name>
        <t>Given an HPKE context, <tt>context</tt>; a request message, <tt>request</tt>; and a response,
<tt>response</tt>, <xref target="dfn-gateway" format="none">Oblivious Gateway Resources</xref><iref item="Oblivious Gateway Resources"/> generate an <xref target="dfn-enc-res" format="none">Encapsulated Response</xref><iref item="Encapsulated Response"/>,
<tt>enc_response</tt>, as follows:</t>
        <ol spacing="normal" type="1"><li>Export a secret, <tt>secret</tt>, from <tt>context</tt>, using the string "message/bhttp
response" as the <tt>exporter_context</tt> parameter to <tt>context.Export</tt>; see
<xref section="5.3" sectionFormat="of" target="HPKE"/>.  The length of this secret is <tt>max(Nn, Nk)</tt>, where
<tt>Nn</tt> and <tt>Nk</tt> are the length of AEAD key and nonce associated with <tt>context</tt>.
Note: <xref target="repurposing"/> discusses how alternative message formats might use a
different <tt>context</tt> value.</li>
          <li>Generate a random value of length <tt>max(Nn, Nk)</tt> bytes, called
<tt>response_nonce</tt>.</li>
          <li>Extract a pseudorandom key <tt>prk</tt> using the <tt>Extract</tt> function provided by
the KDF algorithm associated with <tt>context</tt>. The <tt>ikm</tt> input to this
function is <tt>secret</tt>; the <tt>salt</tt> input is the concatenation of <tt>enc</tt> (from
<tt>enc_request</tt>) and <tt>response_nonce</tt>.</li>
          <li>Use the <tt>Expand</tt> function provided by the same KDF to extract an AEAD key
<tt>key</tt>, of length <tt>Nk</tt> - the length of the keys used by the AEAD associated
with <tt>context</tt>. Generating <tt>aead_key</tt> uses a label of "key".</li>
          <li>Use the same <tt>Expand</tt> function to extract a nonce, <tt>nonce</tt>, of length <tt>Nn</tt> -
the length of the nonce used by the AEAD. Generating <tt>aead_nonce</tt> uses a
label of "nonce".</li>
          <li>Encrypt <tt>response</tt>, passing the AEAD function Seal the values of <tt>aead_key</tt>,
<tt>aead_nonce</tt>, an empty <tt>aad</tt>, and a <tt>pt</tt> input of <tt>response</tt>, which yields <tt>ct</tt>.</li>
          <li>Concatenate <tt>response_nonce</tt> and <tt>ct</tt>, yielding an <xref target="dfn-enc-res" format="none">Encapsulated Response</xref><iref item="Encapsulated Response"/>
            <tt>enc_response</tt>. Note that <tt>response_nonce</tt> is of fixed-length, so there is no
ambiguity in parsing either <tt>response_nonce</tt> or <tt>ct</tt>.</li>
        </ol>
        <t>In pseudocode, this procedure is as follows:</t>
        <artwork><![CDATA[
secret = context.Export("message/bhttp response", Nk)
response_nonce = random(max(Nn, Nk))
salt = concat(enc, response_nonce)
prk = Extract(salt, secret)
aead_key = Expand(prk, "key", Nk)
aead_nonce = Expand(prk, "nonce", Nn)
ct = Seal(aead_key, aead_nonce, "", response)
enc_response = concat(response_nonce, ct)
]]></artwork>
        <t><xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> decrypt an <xref target="dfn-enc-res" format="none">Encapsulated Response</xref><iref item="Encapsulated Response"/> by reversing this process. That is,
they first parse <tt>enc_response</tt> into <tt>response_nonce</tt> and <tt>ct</tt>. They then
follow the same process to derive values for <tt>aead_key</tt> and <tt>aead_nonce</tt>.</t>
        <t>The <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> uses these values to decrypt <tt>ct</tt> using the Open function provided by
the AEAD. Decrypting might produce an error, as follows:</t>
        <artwork><![CDATA[
reponse, error = Open(aead_key, aead_nonce, "", ct)
]]></artwork>
      </section>
      <section anchor="req-res-media">
        <name>Request and Response Media Types</name>
        <t>Media types are used to identify Encapsulated Requests and Responses; see
<xref target="iana-req"/> and <xref target="iana-res"/> for definitions of these media types.</t>
        <t>Evolution of the format of Encapsulated Requests and Responses is supported
through the definition of new formats that are identified by new media types.
New media types might be defined to use similar encapsulation with a different
HTTP message format than in <xref target="BINARY"/>; see <xref target="repurposing"/> for guidance on
reusing this encapsulation.  Alternatively, a new encapsulation method might be
defined.</t>
      </section>
      <section anchor="repurposing">
        <name>Repurposing the Encapsulation Format</name>
        <t>The encrypted payload of an Oblivious HTTP request and response is a binary HTTP message
<xref target="BINARY"/>.  The <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> and <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> agree on this encrypted
payload type by specifying the media type "message/bhttp" in the HPKE info
string and HPKE export context string for request and response encryption,
respectively.</t>
        <t>Future specifications may repurpose the encapsulation mechanism described in
this document.  This requires that the specification define a new media type.
The encapsulation process for that content type can follow the same process,
using new constant strings for the HPKE info and exporter context inputs.</t>
        <t>For example, a future specification might encapsulate DNS messages, which use
the "application/dns-message" media type <xref target="RFC8484"/>.  In creating a new,
encrypted media types, specifications might define the use of string
"application/dns-message request" (plus a zero byte and the header for the full
value) for request encryption and the string "application/dns-message response"
for response encryption.</t>
      </section>
    </section>
    <section anchor="http-usage">
      <name>HTTP Usage</name>
      <t>A <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> interacts with the <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> by constructing an
<xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/>.  This <xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/> is included as the content of a
POST request to the <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/>.  This request only needs those
fields necessary to carry the <xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/>: a method of POST, a target
URI of the <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/>, a header field containing the content type
(see (<xref target="iana-req"/>), and the <xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/> as the request content. In the
request to the <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/>, <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> <bcp14>MAY</bcp14> include additional
fields. However, additional fields <bcp14>MUST</bcp14> be independent of the <xref target="dfn-enc-req" format="none">Encapsulated
Request</xref><iref item="Encapsulated Request"/> and <bcp14>MUST</bcp14> be fields that the <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> will remove before
forwarding the <xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/> towards the target, such as the Connection
or Proxy-Authorization header fields <xref target="HTTP"/>.</t>
      <t>The <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> role in this protocol acts as an HTTP client both with respect to the
<xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> and the <xref target="dfn-target" format="none">Target Resource</xref><iref item="Target Resource"/>.  For the request, the <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/>
makes to the <xref target="dfn-target" format="none">Target Resource</xref><iref item="Target Resource"/>, this diverges from typical HTTP assumptions about
the use of a connection (see <xref section="3.3" sectionFormat="of" target="HTTP"/>) in that the request and
response are encrypted rather than sent over a connection.  The <xref target="dfn-relay" format="none">Oblivious Relay
Resource</xref><iref item="Oblivious Relay Resource"/> and the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> also act as HTTP clients toward the
<xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> and <xref target="dfn-target" format="none">Target Resource</xref><iref item="Target Resource"/> respectively.</t>
      <t>In order to achieve the privacy and security goals of the protocol a <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> also
needs to observe the guidance in <xref target="client-responsibilities"/>.</t>
      <t>The <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> interacts with the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> as an
HTTP client by constructing a request using the same restrictions as the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/>
request, except that the target URI is the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/>.  The
content of this request is copied from the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/>.  An <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> <bcp14>MAY</bcp14> reject
requests that are obviously invalid, such as a request with no content. The <xref target="dfn-relay" format="none">Oblivious Relay
Resource</xref><iref item="Oblivious Relay Resource"/> <bcp14>MUST NOT</bcp14> add information to the request without the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> being aware of
the type of information that might be added; see <xref target="relay-responsibilities"/> for
more information on relay responsibilities.</t>
      <t>When a response is received from the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/>, the <xref target="dfn-relay" format="none">Oblivious
Relay Resource</xref><iref item="Oblivious Relay Resource"/> forwards the response according to the rules of an HTTP proxy;
see <xref section="7.6" sectionFormat="of" target="HTTP"/>.  In case of timeout or error, the <xref target="dfn-relay" format="none">Oblivious Relay
Resource</xref><iref item="Oblivious Relay Resource"/> can generate a response with an appropriate status code.</t>
      <t>In order to achieve the privacy and security goals of the protocol an <xref target="dfn-relay" format="none">Oblivious
Relay Resource</xref><iref item="Oblivious Relay Resource"/> also needs to observe the guidance in
<xref target="relay-responsibilities"/>.</t>
      <t>An <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> acts as a gateway for requests to the <xref target="dfn-target" format="none">Target
Resource</xref><iref item="Target Resource"/> (see <xref section="7.6" sectionFormat="of" target="HTTP"/>).  The one exception is that any
information it might forward in a response <bcp14>MUST</bcp14> be encapsulated, unless it is
responding to errors that do not relate to processing the contents of the
encapsulated request; see <xref target="errors"/>.</t>
      <t>An <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/>, if it receives any response from the <xref target="dfn-target" format="none">Target
Resource</xref><iref item="Target Resource"/>, sends a single 200 response containing the encapsulated response.
Like the request from the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/>, this response <bcp14>MUST</bcp14> only contain those fields
necessary to carry the encapsulated response: a 200 status code, a header field
indicating the content type, and the encapsulated response as the response
content.  As with requests, additional fields <bcp14>MAY</bcp14> be used to convey information
that does not reveal information about the encapsulated response.</t>
      <t>An <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> that does not receive a response can itself
generate a response with an appropriate error status code (such as 504 (Gateway
Timeout); see <xref section="15.6.5" sectionFormat="of" target="HTTP"/>), which is then encapsulated in the
same way as a successful response.</t>
      <t>In order to achieve the privacy and security goals of the protocol an <xref target="dfn-gateway" format="none">Oblivious
Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> also needs to observe the guidance in
<xref target="server-responsibilities"/>.</t>
      <section anchor="informational-responses">
        <name>Informational Responses</name>
        <t>This encapsulation does not permit progressive processing of responses.  Though
the binary HTTP response format does support the inclusion of informational
(1xx) status codes, the AEAD encapsulation cannot be removed until the entire
message is received.</t>
        <t>In particular, the Expect header field with 100-continue (see <xref section="10.1.1" sectionFormat="of" target="HTTP"/>) cannot be used.  <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> <bcp14>MUST NOT</bcp14>
construct a request that includes a 100-continue expectation; the <xref target="dfn-gateway" format="none">Oblivious
Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> <bcp14>MUST</bcp14> generate an error if a 100-continue expectation is
received.</t>
      </section>
      <section anchor="errors">
        <name>Errors</name>
        <t>A server that receives an invalid message for any reason <bcp14>MUST</bcp14> generate an HTTP
response with a 4xx status code.</t>
        <t>Errors detected by the <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> and errors detected by the
<xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> before removing protection (including being unable to
remove encapsulation for any reason) result in the status code being sent
without protection in response to the POST request made to that resource.</t>
        <t>Errors detected by the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> after successfully removing
encapsulation and errors detected by the <xref target="dfn-target" format="none">Target Resource</xref><iref item="Target Resource"/> <bcp14>MUST</bcp14> be sent in an
<xref target="dfn-enc-res" format="none">Encapsulated Response</xref><iref item="Encapsulated Response"/>.  This might be because the <xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/> is
malformed or the <xref target="dfn-target" format="none">Target Resource</xref><iref item="Target Resource"/> does not produce a response.  In either case
the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> can generate a response with an appropriate error
status code (such as 400 (Bad Request) or 504 (Gateway Timeout); see <xref section="15.5.1" sectionFormat="of" target="HTTP"/> and <xref section="15.6.5" sectionFormat="of" target="HTTP"/>, respectively).  This response
is encapsulated in the same way as a successful response.</t>
        <t>Errors in the encapsulation of requests mean that responses cannot be
encapsulated.  This includes cases where the <xref target="key-configuration" format="none">key configuration</xref><iref item="key configuration"/> is incorrect or
outdated.  The <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> can generate and send a response with
a 4xx status code to the <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/>.  This response <bcp14>MAY</bcp14> be
forwarded to the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> or treated by the <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> as a failure.
If a <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> receives a response that is not an <xref target="dfn-enc-res" format="none">Encapsulated Response</xref><iref item="Encapsulated Response"/>, this could
indicate that the client configuration used to construct the request is
incorrect or out of date.</t>
      </section>
      <section anchor="ohttp-key-problem">
        <name>Signaling Key Configuration Problems</name>
        <t>The problem type <xref target="PROBLEM"/> of
"https://iana.org/assignments/http-problem-types#ohttp-key" is defined.  An
<xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> <bcp14>MAY</bcp14> use this problem type in a response to indicate
that an <xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/> used an outdated or incorrect <xref target="key-configuration" format="none">key configuration</xref><iref item="key configuration"/>.</t>
        <t><xref target="fig-key-problem"/> shows an example response in HTTP/1.1 format.</t>
        <figure anchor="fig-key-problem">
          <name>Example Rejection of Key Configuration</name>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 400 Bad Request
Date: Mon, 07 Feb 2022 00:28:05 GMT
Content-Type: application/problem+json
Content-Length: 106

{"type":"https://iana.org/assignments/http-problem-types#ohttp-key",
"title": "key identifier unknown"}
]]></sourcecode>
        </figure>
        <t>As this response cannot be encrypted, it might not reach the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/>.  A <xref target="dfn-client" format="none">Client</xref><iref item="Client"/>
cannot rely on the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> using this problem type.  A <xref target="dfn-client" format="none">Client</xref><iref item="Client"/>
might also be configured to disregard responses that are not encapsulated on the
basis that they might be subject to observation or modification by an <xref target="dfn-relay" format="none">Oblivious
Relay Resource</xref><iref item="Oblivious Relay Resource"/>.  A <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> might manage the risk of an outdated <xref target="key-configuration" format="none">key configuration</xref><iref item="key configuration"/>
using a heuristic approach whereby it periodically refreshes its <xref target="key-configuration" format="none">key
configuration</xref><iref item="key configuration"/> if it receives a response with an error status code that has not
been encapsulated.</t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>In this design, a <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> wishes to make a request of a server that is
authoritative for a <xref target="dfn-target" format="none">Target Resource</xref><iref item="Target Resource"/>. The <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> wishes to make this request
without linking that request with either:</t>
      <ol spacing="normal" type="1"><li>The identity at the network and transport layer of the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> (that is, the
<xref target="dfn-client" format="none">Client</xref><iref item="Client"/> IP address and TCP or UDP port number the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> uses to create a
connection).</li>
        <li>Any other request the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> might have made in the past or might make in
the future.</li>
      </ol>
      <t>In order to ensure this, the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> selects a relay (that serves the
<xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/>) that it trusts will protect this information
by forwarding the <xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/> and Response without passing it
to the server (that serves the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/>).</t>
      <t>In this section, a deployment where there are three entities is considered:</t>
      <ul spacing="normal">
        <li>A <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> makes requests and receives responses</li>
        <li>A relay operates the <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/></li>
        <li>A server operates both the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> and the <xref target="dfn-target" format="none">Target Resource</xref><iref item="Target Resource"/></li>
      </ul>
      <t>Connections between the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/>, <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/>, and <xref target="dfn-gateway" format="none">Oblivious Gateway
Resource</xref><iref item="Oblivious Gateway Resource"/> <bcp14>MUST</bcp14> use HTTPS in order to provide unlinkability in the presence of a
network observer.  The scheme of the <xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/> determines what is
used between the Oblivious Gateway and Target Resources, though using HTTPS is
<bcp14>RECOMMENDED</bcp14>; see <xref target="server-responsibilities"/>.</t>
      <t>To achieve the stated privacy goals, the <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> cannot be
operated by the same entity as the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/>. However,
colocation of the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> and <xref target="dfn-target" format="none">Target Resource</xref><iref item="Target Resource"/> simplifies the
interactions between those resources without affecting <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> privacy.</t>
      <t>As a consequence of this configuration, Oblivious HTTP prevents linkability
described above. Informally, this means:</t>
      <ol spacing="normal" type="1"><li>Requests and responses are known only to <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> and Target Resources, plus
<xref target="dfn-gateway" format="none">Oblivious Gateway Resources</xref><iref item="Oblivious Gateway Resources"/> that possess the corresponding response
encapsulation key and HPKE keying material.  In particular, the <xref target="dfn-relay" format="none">Oblivious
Relay Resource</xref><iref item="Oblivious Relay Resource"/> knows the origin and destination of an <xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/> and
Response, yet does not know the decrypted contents. Likewise, <xref target="dfn-gateway" format="none">Oblivious
Gateway Resources</xref><iref item="Oblivious Gateway Resources"/> learn only the <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> and the decrypted
request.  No entity other than the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> can see the plaintext request and
response and can attribute them to the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/>.</li>
        <li>Targets cannot link requests from the same <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> in the absence of unique
per-<xref target="dfn-client" format="none">Client</xref><iref item="Client"/> keys.</li>
      </ol>
      <t>Traffic analysis that might affect these properties are outside the scope of
this document; see <xref target="ta"/>.</t>
      <t>A formal analysis of Oblivious HTTP is in <xref target="OHTTP-ANALYSIS"/>.</t>
      <section anchor="client-responsibilities">
        <name>Client Responsibilities</name>
        <t><xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> <bcp14>MUST</bcp14> ensure that the <xref target="key-configuration" format="none">key configuration</xref><iref item="key configuration"/> they select for generating
Encapsulated Requests is integrity protected and authenticated so that it can
be attributed to the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/>; see <xref target="key-configuration"/>.</t>
        <t>Since <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> connect directly to the <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> instead of the <xref target="dfn-target" format="none">Target Resource</xref><iref item="Target Resource"/>, application
configurations wherein <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> make policy decisions about target connections,
e.g., to apply certificate pinning, are incompatible with Oblivious HTTP.  In
such cases, alternative technologies such as HTTP CONNECT
(<xref section="9.3.6" sectionFormat="of" target="HTTP"/>) can be used. Applications could implement related
policies on <xref target="key-configuration" format="none">key configurations</xref><iref item="key configurations"/> and relay connections, though these might not
provide the same properties as policies enforced directly on target
connections. When this difference is relevant, applications can instead connect
directly to the target at the cost of either privacy or performance.</t>
        <t><xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> cannot carry connection-level state between requests as they only
establish direct connections to the relay responsible for the Oblivious Relay
resource.  However, the content of requests might be used by a server to
correlate requests.  Cookies <xref target="COOKIES"/> are the most obvious feature
that might be used to correlate requests, but any identity information and
authentication credentials might have the same effect.  <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> also need to
treat information learned from responses with similar care when constructing
subsequent requests, which includes the identity of resources.</t>
        <t><xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> <bcp14>MUST</bcp14> generate a new HPKE context for every request, using a good source
of entropy (<xref target="RANDOM"/>) for generating keys. Key reuse not only risks
requests being linked, reuse could expose request and response contents to the
relay.</t>
        <t>The request the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> sends to the <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> only requires
minimal information; see <xref target="http-usage"/>. The request that carries the
<xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/> and is sent to the <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> <bcp14>MUST NOT</bcp14>
include identifying information unless the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> ensures that this information
is removed by the relay. A <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> <bcp14>MAY</bcp14> include information only for the
<xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> in header fields identified by the Connection header
field if it trusts the relay to remove these as required by Section 7.6.1 of
<xref target="HTTP"/>. The <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> needs to trust that the relay does not replicate the
source addressing information in the request it forwards.</t>
        <t><xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> rely on the <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> to forward Encapsulated Requests
and responses. However, the relay can only refuse to forward messages, it
cannot inspect or modify the contents of Encapsulated Requests or responses.</t>
      </section>
      <section anchor="relay-responsibilities">
        <name>Relay Responsibilities</name>
        <t>The relay that serves the <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> has a very simple function
to perform. For each request it receives, it makes a request of the <xref target="dfn-gateway" format="none">Oblivious
Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> that includes the same content. When it receives a response,
it sends a response to the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> that includes the content of the response
from the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/>.</t>
        <t>When forwarding a request, the relay <bcp14>MUST</bcp14> follow the forwarding rules in
<xref section="7.6" sectionFormat="of" target="HTTP"/>.  A generic HTTP intermediary implementation is suitable
for the purposes of serving an <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/>, but additional care is
needed to ensure that <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> privacy is maintained.</t>
        <t>Firstly, a generic implementation will forward unknown fields.  For Oblivious
HTTP, an <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> <bcp14>SHOULD NOT</bcp14> forward unknown fields.  Though
<xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> are not expected to include fields that might contain identifying
information, removing unknown fields removes this privacy risk.</t>
        <t>Secondly, generic implementations are often configured to augment requests with
information about the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/>, such as the Via field or the Forwarded field
<xref target="FORWARDED"/>.  A relay <bcp14>MUST NOT</bcp14> add information when forwarding
requests that might be used to identify <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/>, with the exception of
information that a <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> is aware of.</t>
        <t>Finally, a relay can also generate responses, though it is assumed to not be able
to examine the content of a request (other than to observe the choice of key
identifier, KDF, and AEAD), so it is also assumed that it cannot generate an
<xref target="dfn-enc-res" format="none">Encapsulated Response</xref><iref item="Encapsulated Response"/>.</t>
        <section anchor="differential-treatment">
          <name>Differential Treatment</name>
          <t>A relay <bcp14>MAY</bcp14> add information to requests if the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> is aware of the nature of
the information that could be added.  The <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> does not need to be aware of
the exact value added for each request, but needs to know the range of possible
values the relay might use.  Importantly, information added by the relay - beyond
what is already revealed through encapsulated requests from <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> - can reduce
the size of the anonymity set of <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> at a gateway.</t>
          <t>Moreover, relays <bcp14>MAY</bcp14> apply differential treatment to <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> that engage in abusive
behavior, e.g., by sending too many requests in comparison to other <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/>,
or as a response to rate limits signalled from the gateway. Any such
differential treatment can reveal information to the gateway that would not
be revealed otherwise and therefore reduce the size of the anonymity set of
<xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> using a gateway. For example, if a relay chooses to rate limit or
block an abusive <xref target="dfn-client" format="none">Client</xref><iref item="Client"/>, this means that any <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> requests which are not
treated this way are known to be non-abusive by the gateway. <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> should
consider the likelihood of such differential treatment and the privacy
risks when using a relay.</t>
          <t>Some patterns of abuse cannot be detected without access to the request that
is made to the target. This means that only the gateway or target are in a
position to identify abuse. A gateway <bcp14>MAY</bcp14> send signals toward the relay to
provide feedback about specific requests. For example, a gateway could respond
differently to requests it cannot decapsulate, as mentioned in <xref target="errors"/>. A
relay that acts on this feedback could - either inadvertently or by
design - lead to <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> deanonymization.</t>
        </section>
        <section anchor="dos">
          <name>Denial of Service</name>
          <t>As there are privacy benefits from having a large rate of requests forwarded by
the same relay (see <xref target="ta"/>), servers that operate the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/>
might need an arrangement with <xref target="dfn-relay" format="none">Oblivious Relay Resources</xref><iref item="Oblivious Relay Resources"/>. This arrangement might
be necessary to prevent having the large volume of requests being classified as
an attack by the server.</t>
          <t>If a server accepts a larger volume of requests from a relay, it needs to
trust that the relay does not allow abusive levels of request volumes from
<xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/>. That is, if a server allows requests from the relay to be exempt from
rate limits, the server might want to ensure that the relay applies a rate
limiting policy that is acceptable to the server.</t>
          <t>Servers that enter into an agreement with a relay that enables a higher request
rate might choose to authenticate the relay to enable the higher rate.</t>
        </section>
        <section anchor="ta">
          <name>Traffic Analysis</name>
          <t>Using HTTPS protects information about which resources are the subject of
request and prevents a network observer from being able to trivially correlate
messages on either side of a relay.  However, using HTTPS does not prevent
traffic analysis by such network observers.</t>
          <t>The time at which <xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/> or response messages are sent can
reveal information to a network observer. Though messages exchanged between the
<xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> and the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> might be sent in a
single connection, traffic analysis could be used to match messages that are
forwarded by the relay.</t>
          <t>A relay could, as part of its function, delay requests before forwarding them.
Delays might increase the anonymity set into which each request is
attributed. Any delay also increases the time that a <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> waits for a
response, so delays <bcp14>SHOULD</bcp14> only be added with the consent - or at least
awareness - of <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/>.</t>
          <t>A relay that forwards large volumes of exchanges can provide better privacy by
providing larger sets of messages that need to be matched.</t>
          <t>Traffic analysis is not restricted to network observers. A malicious <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> could
use traffic analysis to learn information about otherwise encrypted requests
and responses relayed between <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> and gateways. An <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> terminates
TLS connections from <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/>, so they see message boundaries. This privileged
position allows for richer feature extraction from encrypted data, which might
improve traffic analysis.</t>
          <t><xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> can use padding to reduce the effectiveness of traffic analysis.
Padding is a capability provided by binary HTTP messages; see <xref section="3.8" sectionFormat="of" target="BINARY"/>.  If the encapsulation method described in this document is used to
protect a different message type (see <xref target="repurposing"/>), that message format
might need to include padding support.</t>
        </section>
      </section>
      <section anchor="server-responsibilities">
        <name>Server Responsibilities</name>
        <t>The <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> can be operated by a different entity than the
<xref target="dfn-target" format="none">Target Resource</xref><iref item="Target Resource"/>.  However, this means that the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> needs to trust the
<xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> not to modify requests or responses.  This analysis
concerns itself with a deployment scenario where a single server provides both
the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> and <xref target="dfn-target" format="none">Target Resource</xref><iref item="Target Resource"/>.</t>
        <t>A server that operates both Oblivious Gateway and Target Resources is
responsible for removing request encryption, generating a response to the
<xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/>, and encrypting the response.</t>
        <t>Servers should account for traffic analysis based on response size or generation
time.  Techniques such as padding or timing delays can help protect against such
attacks; see <xref target="ta"/>.</t>
        <t>If separate entities provide the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> and <xref target="dfn-target" format="none">Target Resource</xref><iref item="Target Resource"/>,
these entities might need an arrangement similar to that between server and
relay for managing denial of service; see <xref target="dos"/>.</t>
        <t>Nonsecure requests - such as those with the "http" scheme as opposed to the
"https" scheme - <bcp14>SHOULD NOT</bcp14> be used if the Oblivious Gateway and Target
Resources are not on the same origin.  If messages are forwarded between these
resources without the protections afforded by HTTPS, they could be inspected or
modified by a network attacker.  Note that two resources that share an
origin do not guarantee that requests are not forwarded without protection.</t>
      </section>
      <section anchor="key-management">
        <name>Key Management</name>
        <t>An <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> needs to have a plan for replacing keys. This
might include regular replacement of keys, which can be assigned new key
identifiers. If an <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> receives a request that contains a
key identifier that it does not understand or that corresponds to a key that has
been replaced, the server can respond with an HTTP 422 (Unprocessable Content)
status code.</t>
        <t>A server can also use a 422 status code if the server has a key that corresponds
to the key identifier, but the <xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/> cannot be successfully
decrypted using the key.</t>
        <t>A server <bcp14>MUST</bcp14> ensure that the HPKE keys it uses are not valid for any other
protocol that uses HPKE with the "message/bhttp request" label.  Designers of
protocols that reuse this encryption format, especially new versions of this
protocol, can ensure key diversity by choosing a different label in their use of
HPKE.  The "message/bhttp response" label was chosen for symmetry only as it
provides key diversity only within the HPKE context created using the
"message/bhttp request" label; see <xref target="repurposing"/>.</t>
      </section>
      <section anchor="replay">
        <name>Replay Attacks</name>
        <t>A server is responsible for either rejecting replayed requests or ensuring that
the effect of replays does not adversely affect <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> or resources.</t>
        <t>Encrypted requests can be copied and replayed by the Oblivious Relay
resource. The threat model for Oblivious HTTP allows the possibility that an
<xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> might replay requests. Furthermore, if a <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> sends
an <xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/> in TLS early data (see <xref section="8" sectionFormat="of" target="TLS"/> and
<xref target="RFC8470"/>), a network-based adversary might be able to cause the request to
be replayed. In both cases, the effect of a replay attack and the mitigations
that might be employed are similar to TLS early data.</t>
        <t>It is the responsibility of the application that uses Oblivious HTTP to either
reject replayed requests or to ensure that replayed requests have no adverse
affects on their operation.  This section describes some approaches that are
universally applicable and suggestions for more targeted techniques.</t>
        <t>A <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> or <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> <bcp14>MUST NOT</bcp14> automatically attempt to retry a
failed request unless it receives a positive signal indicating that the request
was not processed or forwarded. The HTTP/2 REFUSED_STREAM error code (<xref section="8.1.4" sectionFormat="of" target="HTTP2"/>), the HTTP/3 H3_REQUEST_REJECTED error code (<xref section="8.1" sectionFormat="of" target="HTTP3"/>), or a GOAWAY frame with a low enough identifier (in either protocol
version) are all sufficient signals that no processing occurred. HTTP/1.1
<xref target="HTTP11"/> provides no equivalent signal.  Connection failures or interruptions
are not sufficient signals that no processing occurred.</t>
        <t>The anti-replay mechanisms described in <xref section="8" sectionFormat="of" target="TLS"/> are generally
applicable to Oblivious HTTP requests. The encapsulated keying material (or
<tt>enc</tt>) can be used in place of a nonce to uniquely identify a request.  This
value is a high-entropy value that is freshly generated for every request, so
two valid requests will have different values with overwhelming probability.</t>
        <t>The mechanism used in TLS for managing differences in <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> and server clocks
cannot be used as it depends on being able to observe previous interactions.
Oblivious HTTP explicitly prevents such linkability.</t>
        <t>The considerations in <xref target="RFC8470"/> as they relate to managing the risk of
replay also apply, though there is no option to delay the processing of a
request.</t>
        <t>Limiting requests to those with safe methods might not be satisfactory for some
applications, particularly those that involve the submission of data to a
server. The use of idempotent methods might be of some use in managing replay
risk, though it is important to recognize that different idempotent requests
can be combined to be not idempotent.</t>
        <t>Even without replay prevention, the server-chosen <tt>response_nonce</tt> field
ensures that responses have unique AEAD keys and nonces even when requests are
replayed.</t>
        <section anchor="use-of-date-for-anti-replay">
          <name>Use of Date for Anti-Replay</name>
          <t><xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> <bcp14>SHOULD</bcp14> include a <tt>Date</tt> header field in Encapsulated Requests, unless
the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> does not use <tt>Date</tt> for anti-replay purposes.</t>
          <t>Though HTTP requests often do not include a <tt>Date</tt> header field, the value of
this field might be used by a server to limit the amount of requests it needs to
track if it needs to prevent replay attacks.</t>
          <t>An <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> can maintain state for requests for a small window
of time over which it wishes to accept requests.  The <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/>
can store all requests it processes within this window.  Storing just the <tt>enc</tt>
field of a request, which should be unique to each request, is sufficient.  The
<xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> then rejects requests if the request is the same as
one that was previously answered within that time window, or if the <tt>Date</tt>
header field from the decrypted request is outside of the current time window.</t>
          <t><xref target="dfn-gateway" format="none">Oblivious Gateway Resources</xref><iref item="Oblivious Gateway Resources"/> might need to allow for the time it takes requests
to arrive from the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/>, with a time window that is large enough to allow for
differences in clocks.  Insufficient tolerance of time differences could result
in valid requests being unnecessarily rejected.</t>
          <t><xref target="dfn-gateway" format="none">Oblivious Gateway Resources</xref><iref item="Oblivious Gateway Resources"/> <bcp14>MUST NOT</bcp14> treat the time window as secret
information. An attacker can actively probe with different values for the <tt>Date</tt>
field to determine the time window over which the server will accept responses.</t>
        </section>
        <section anchor="date-fix">
          <name>Correcting Clock Differences</name>
          <t>An <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> can reject requests that contain a <tt>Date</tt> value
that is outside of its active window with a 400 series status code.  The problem
type <xref target="PROBLEM"/> of
"https://iana.org/assignments/http-problem-types#date" is defined to allow the
server to signal that the <tt>Date</tt> value in the request was unacceptable.</t>
          <t><xref target="fig-date-reject"/> shows an example response in HTTP/1.1 format.</t>
          <figure anchor="fig-date-reject">
            <name>Example Rejection of Request Date Field</name>
            <sourcecode type="http-message"><![CDATA[
HTTP/1.1 400 Bad Request
Date: Mon, 07 Feb 2022 00:28:05 GMT
Content-Type: application/problem+json
Content-Length: 128

{"type":"https://iana.org/assignments/http-problem-types#date",
"title": "date field in request outside of acceptable range"}
]]></sourcecode>
          </figure>
          <t>Disagreements about time are unlikely if both <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> and <xref target="dfn-gateway" format="none">Oblivious Gateway
Resource</xref><iref item="Oblivious Gateway Resource"/> have a good source of time; see <xref target="NTP"/>. However, clock
differences are known to be commonplace; see Section 7.1 of
<xref target="CLOCKSKEW"/>.</t>
          <t>Including a <tt>Date</tt> header field in the response allows the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> to correct
clock errors by retrying the same request using the value of the <tt>Date</tt> field
provided by the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/>.  The value of the <tt>Date</tt> field can
be copied if the request is fresh, with an adjustment based on the <tt>Age</tt> field
otherwise.  When retrying a request, the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> <bcp14>MUST</bcp14> create a fresh encryption
of the modified request, using a new HPKE context.</t>
          <figure anchor="fig-retry-date">
            <name>Retrying with an Update Date Field</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="304" width="464" viewBox="0 0 464 304" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                  <path d="M 8,32 L 8,80" fill="none" stroke="black"/>
                  <path d="M 48,80 L 48,288" fill="none" stroke="black"/>
                  <path d="M 88,32 L 88,80" fill="none" stroke="black"/>
                  <path d="M 152,32 L 152,80" fill="none" stroke="black"/>
                  <path d="M 192,80 L 192,128" fill="none" stroke="black"/>
                  <path d="M 192,160 L 192,192" fill="none" stroke="black"/>
                  <path d="M 192,224 L 192,256" fill="none" stroke="black"/>
                  <path d="M 288,80 L 288,288" fill="none" stroke="black"/>
                  <path d="M 312,32 L 312,80" fill="none" stroke="black"/>
                  <path d="M 368,32 L 368,80" fill="none" stroke="black"/>
                  <path d="M 408,80 L 408,288" fill="none" stroke="black"/>
                  <path d="M 456,32 L 456,80" fill="none" stroke="black"/>
                  <path d="M 8,32 L 88,32" fill="none" stroke="black"/>
                  <path d="M 152,32 L 312,32" fill="none" stroke="black"/>
                  <path d="M 368,32 L 456,32" fill="none" stroke="black"/>
                  <path d="M 8,80 L 88,80" fill="none" stroke="black"/>
                  <path d="M 152,80 L 312,80" fill="none" stroke="black"/>
                  <path d="M 368,80 L 456,80" fill="none" stroke="black"/>
                  <path d="M 48,142 L 280,142" fill="none" stroke="black"/>
                  <path d="M 48,146 L 280,146" fill="none" stroke="black"/>
                  <path d="M 288,144 L 400,144" fill="none" stroke="black"/>
                  <path d="M 56,206 L 288,206" fill="none" stroke="black"/>
                  <path d="M 56,210 L 288,210" fill="none" stroke="black"/>
                  <path d="M 296,208 L 408,208" fill="none" stroke="black"/>
                  <path d="M 48,270 L 280,270" fill="none" stroke="black"/>
                  <path d="M 48,274 L 280,274" fill="none" stroke="black"/>
                  <path d="M 288,272 L 400,272" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="408,272 396,266.4 396,277.6" fill="black" transform="rotate(0,400,272)"/>
                  <polygon class="arrowhead" points="408,144 396,138.4 396,149.6" fill="black" transform="rotate(0,400,144)"/>
                  <polygon class="arrowhead" points="304,208 292,202.4 292,213.6" fill="black" transform="rotate(180,296,208)"/>
                  <polygon class="arrowhead" points="288,272 276,266.4 276,277.6" fill="black" transform="rotate(0,280,272)"/>
                  <polygon class="arrowhead" points="288,144 276,138.4 276,149.6" fill="black" transform="rotate(0,280,144)"/>
                  <polygon class="arrowhead" points="64,208 52,202.4 52,213.6" fill="black" transform="rotate(180,56,208)"/>
                  <g class="text">
                    <text x="44" y="52">Client</text>
                    <text x="184" y="52">Relay</text>
                    <text x="224" y="52">and</text>
                    <text x="272" y="52">Gateway</text>
                    <text x="404" y="52">Target</text>
                    <text x="232" y="68">Resources</text>
                    <text x="412" y="68">Resource</text>
                    <text x="96" y="132">Request</text>
                    <text x="312" y="180">400</text>
                    <text x="364" y="180">Response</text>
                    <text x="352" y="196">+</text>
                    <text x="380" y="196">Date</text>
                    <text x="96" y="244">Request</text>
                    <text x="72" y="260">+</text>
                    <text x="112" y="260">Updated</text>
                    <text x="164" y="260">Date</text>
                    <text x="192" y="292">|</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
+---------+       +-------------------+      +----------+
| Client  |       | Relay and Gateway |      | Target   |
|         |       |     Resources     |      | Resource |
+----+----+       +----+-----------+--+      +----+-----+
     |                 |           |              |
     |                 |           |              |
     |  Request        |           |              |
     +============================>+------------->|
     |                 |           |              |
     |                 |           | 400 Response |
     |                 |           |       + Date |
     |<============================+<-------------+
     |                 |           |              |
     |  Request        |           |              |
     |  + Updated Date |           |              |
     +============================>+------------->|
     |                 |           |              |
]]></artwork>
            </artset>
          </figure>
          <t>Intermediaries can sometimes rewrite the <tt>Date</tt> field when forwarding responses.
This might cause problems if the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> and intermediary
clocks differ by enough to cause the retry to be rejected.  Therefore, <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/>
            <bcp14>MUST NOT</bcp14> retry a request with an adjusted date more than once.</t>
          <t><xref target="dfn-gateway" format="none">Oblivious Gateway Resources</xref><iref item="Oblivious Gateway Resources"/> that condition their responses on the <tt>Date</tt> header
field <bcp14>SHOULD</bcp14> either ensure that intermediaries do not cache responses (by
including a <tt>Cache-Control</tt> directive of <tt>no-store</tt>) or designate the response
as conditional on the value of the <tt>Date</tt> request header field (by including the
token "date" in a <tt>Vary</tt> header field).</t>
          <t><xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> <bcp14>MUST NOT</bcp14> use the date provided by the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> for any
other purpose, including future requests to any resource.  Any request that uses
information provided by the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> might be correlated using
that information.</t>
        </section>
      </section>
      <section anchor="forward-secrecy">
        <name>Forward Secrecy</name>
        <t>This document does not provide forward secrecy for either requests or
responses during the lifetime of the <xref target="key-configuration" format="none">key configuration</xref><iref item="key configuration"/>. A measure of
forward secrecy can be provided by generating a new <xref target="key-configuration" format="none">key configuration</xref><iref item="key configuration"/>
then deleting the old keys after a suitable period.</t>
      </section>
      <section anchor="post-compromise-security">
        <name>Post-Compromise Security</name>
        <t>This design does not provide post-compromise security for responses.</t>
        <t>A <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> only needs to retain keying material that might be used to compromise
the confidentiality and integrity of a response until that response is consumed,
so there is negligible risk associated with a <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> compromise.</t>
        <t>A server retains a secret key that might be used to remove protection from
messages over much longer periods. A server compromise that provided access to
the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> secret key could allow an attacker to recover the
plaintext of all requests sent toward affected keys and all of the responses
that were generated.</t>
        <t>Even if server keys are compromised, an adversary cannot access messages
exchanged by the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> with the <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> as messages are
protected by TLS.  Use of a compromised key also requires that the <xref target="dfn-relay" format="none">Oblivious
Relay Resource</xref><iref item="Oblivious Relay Resource"/> cooperate with the attacker or that the attacker is able to
compromise these TLS connections.</t>
        <t>The total number of messages affected by server key compromise can be limited by
regular rotation of server keys.</t>
      </section>
      <section anchor="client-clock-exposure">
        <name>Client Clock Exposure</name>
        <t>Including a <tt>Date</tt> field in requests reveals some information about the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/>
clock.  This might be used to fingerprint <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> <xref target="UWT"/> or to identify <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/>
that are vulnerable to attacks that depend on incorrect clocks.</t>
        <t><xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> can randomize the value that they provide for <tt>Date</tt> to obscure the true
value of their clock and reduce the chance of linking of requests over time.
However, this increases the risk that their request is rejected as outside the
acceptable window.</t>
      </section>
    </section>
    <section anchor="privacy">
      <name>Privacy Considerations</name>
      <t>One goal of this design is that independent <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> requests are only linkable by
their content.  However, the choice of <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> configuration might be used to
correlate requests.  A <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> configuration includes the <xref target="dfn-relay" format="none">Oblivious Relay
Resource</xref><iref item="Oblivious Relay Resource"/> URI, the Oblivious Gateway <xref target="key-configuration" format="none">key configuration</xref><iref item="key configuration"/>, and <xref target="dfn-gateway" format="none">Oblivious Gateway
Resource</xref><iref item="Oblivious Gateway Resource"/> URI. A configuration is active if <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> can successfully use it for interacting with a target.</t>
      <t><xref target="dfn-relay" format="none">Oblivious Relay and Gateway Resources</xref><iref item="Oblivious Relay and Gateway Resources"/> can identify when requests use the same
configuration by matching the key ID from the <xref target="key-configuration" format="none">key configuration</xref><iref item="key configuration"/> or the <xref target="dfn-gateway" format="none">Oblivious
Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> URI.  The <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> might use the source
address of requests to correlate requests that use an <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/>
run by the same operator.  If the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> is willing to use
trial decryption, requests can be further separated into smaller groupings based
on the keys that are used.</t>
      <t>Each active <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> configuration partitions the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> anonymity set. In practice,
it is infeasible to reduce the number of active configurations to one. Enabling diversity in choice of
<xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> naturally increases the number of active
configurations.  A small number of configurations might need to be active to
allow for key rotation and server maintenance.</t>
      <t><xref target="dfn-client" format="none">Client</xref><iref item="Client"/> privacy depends on having each configuration used by many other <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/>.
It is critical to prevent the use of unique <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> configurations, which might
be used to track of individual <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/>, but it is also important to avoid
creating small groupings of <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> that might weaken privacy protections.</t>
      <t>A specific method for a <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> to acquire configurations is not included in this
specification.  Applications using this design <bcp14>MUST</bcp14> provide accommodations to
mitigate tracking using <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> configurations.  <xref target="CONSISTENCY"/> provides options
for ensuring that <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> configurations are consistent between <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/>.</t>
      <t>The content of requests or responses, if used in forming new requests, can be
used to correlate requests.  This includes obvious methods of linking requests,
like cookies <xref target="COOKIES"/>, but it also includes any information in either
message that might affect how subsequent requests are formulated. For example,
<xref target="FIELDING"/> describes how interactions that are individually stateless can be
used to build a stateful system when a <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> acts on the content of a response.</t>
    </section>
    <section anchor="deployment">
      <name>Operational and Deployment Considerations</name>
      <t>This section discusses various operational and deployment considerations.</t>
      <section anchor="performance-overhead">
        <name>Performance Overhead</name>
        <t>Using Oblivious HTTP adds both cryptographic overhead and latency to requests relative to
a simple HTTP request-response exchange.  Deploying relay services that are on
path between <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> and servers avoids adding significant additional delay due
to network topology.  A study of a similar system <xref target="ODoH"/> found that deploying
proxies close to servers was most effective in minimizing additional latency.</t>
      </section>
      <section anchor="proxy-state">
        <name>Resource Mappings</name>
        <t>This protocol assumes a fixed, one-to-one mapping between the <xref target="dfn-relay" format="none">Oblivious Relay
Resource</xref><iref item="Oblivious Relay Resource"/> and the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/>. This means that any encrypted
request sent to the <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> will always be forwarded to the
<xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/>. This constraint was imposed to simplify relay
configuration and mitigate against the <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> being used as
a generic relay for unknown <xref target="dfn-gateway" format="none">Oblivious Gateway Resources</xref><iref item="Oblivious Gateway Resources"/>. The relay will only
forward for <xref target="dfn-gateway" format="none">Oblivious Gateway Resources</xref><iref item="Oblivious Gateway Resources"/> that it has explicitly configured and
allowed.</t>
        <t>It is possible for a server to be configured with multiple <xref target="dfn-relay" format="none">Oblivious Relay
Resources</xref><iref item="Oblivious Relay Resources"/>, each for a different <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> as needed.  If the
goal is to support a large number of <xref target="dfn-gateway" format="none">Oblivious Gateway Resources</xref><iref item="Oblivious Gateway Resources"/>, <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> might
be provided with a URI template <xref target="TEMPLATE"/>, from which multiple
<xref target="dfn-relay" format="none">Oblivious Relay Resources</xref><iref item="Oblivious Relay Resources"/> could be constructed.</t>
      </section>
      <section anchor="network-management">
        <name>Network Management</name>
        <t>Oblivious HTTP might be incompatible with network interception regimes, such as
those that rely on configuring <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> with trust anchors and intercepting TLS
connections.  While TLS might be intercepted successfully, interception
middleboxes devices might not receive updates that would allow Oblivious HTTP to
be correctly identified using the media types defined in <xref target="iana-req"/> and
<xref target="iana-res"/>.</t>
        <t>Oblivious HTTP has a simple key management design that is not trivially altered
to enable interception by intermediaries.  <xref target="dfn-client" format="none">Clients</xref><iref item="Clients"/> that are configured to enable
interception might choose to disable Oblivious HTTP in order to ensure that
content is accessible to middleboxes.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>Please update the "Media Types" registry at
<eref target="https://iana.org/assignments/media-types">https://iana.org/assignments/media-types</eref> for the media types
"application/ohttp-keys" (<xref target="iana-keys"/>), "message/ohttp-req" (<xref target="iana-req"/>),
and "message/ohttp-res" (<xref target="iana-res"/>).</t>
      <t>Please update the "HTTP Problem Types" registry at
<eref target="https://iana.org/assignments/http-problem-types">https://iana.org/assignments/http-problem-types</eref> for the types "date"
(<xref target="iana-problem-date"/>) and "ohttp-key" (<xref target="iana-problem-ohttp-key"/>).</t>
      <section anchor="iana-keys">
        <name>application/ohttp-keys Media Type</name>
        <t>The "application/ohttp-keys" media type identifies a <xref target="key-configuration" format="none">key configuration</xref><iref item="key configuration"/> used by
Oblivious HTTP.</t>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>ohttp-keys</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>"binary"</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>see <xref target="security"/></t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t>this specification</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Oblivious HTTP and applications that use Oblivious HTTP</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <dl spacing="compact">
              <dt>Magic number(s):</dt>
              <dd>N/A</dd>
              <dt>Deprecated alias names for this type:</dt>
              <dd>N/A</dd>
              <dt>File extension(s):</dt>
              <dd>N/A</dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>N/A</dd>
            </dl>
          </dd>
          <dt>Person and email address to contact for further information:</dt>
          <dd>
            <t>see Authors' Addresses section</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Author:</dt>
          <dd>
            <t>see Authors' Addresses section</t>
          </dd>
          <dt>Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-req">
        <name>message/ohttp-req Media Type</name>
        <t>The "message/ohttp-req" identifies an encrypted binary HTTP request.  This
is a binary format that is defined in <xref target="request"/>.</t>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>
            <t>message</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>ohttp-req</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>"binary"</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>see <xref target="security"/></t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t>this specification</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Oblivious HTTP and applications that use Oblivious HTTP use this media type to
identify encapsulated binary HTTP requests.</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <dl spacing="compact">
              <dt>Magic number(s):</dt>
              <dd>N/A</dd>
              <dt>Deprecated alias names for this type:</dt>
              <dd>N/A</dd>
              <dt>File extension(s):</dt>
              <dd>N/A</dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>N/A</dd>
            </dl>
          </dd>
          <dt>Person and email address to contact for further information:</dt>
          <dd>
            <t>see Authors' Addresses section</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Author:</dt>
          <dd>
            <t>see Authors' Addresses section</t>
          </dd>
          <dt>Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-res">
        <name>message/ohttp-res Media Type</name>
        <t>The "message/ohttp-res" identifies an encrypted binary HTTP response. This
is a binary format that is defined in <xref target="response"/>.</t>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>
            <t>message</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>ohttp-res</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>"binary"</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>see <xref target="security"/></t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t>this specification</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Oblivious HTTP and applications that use Oblivious HTTP use this media type to
identify encapsulated binary HTTP responses.</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <dl spacing="compact">
              <dt>Magic number(s):</dt>
              <dd>N/A</dd>
              <dt>Deprecated alias names for this type:</dt>
              <dd>N/A</dd>
              <dt>File extension(s):</dt>
              <dd>N/A</dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>N/A</dd>
            </dl>
          </dd>
          <dt>Person and email address to contact for further information:</dt>
          <dd>
            <t>see Authors' Addresses section</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Author:</dt>
          <dd>
            <t>see Authors' Addresses section</t>
          </dd>
          <dt>Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-problem-date">
        <name>Registration of "date" Problem Type</name>
        <t>IANA are requested to create a new entry in the "HTTP Problem Type" registry
established by <xref target="PROBLEM"/>.</t>
        <dl spacing="compact">
          <dt>Type URI:</dt>
          <dd>
            <t>https://iana.org/assignments/http-problem-types#date</t>
          </dd>
          <dt>Title:</dt>
          <dd>
            <t>Date Not Acceptable</t>
          </dd>
          <dt>Recommended HTTP Status Code:</dt>
          <dd>
            <t>400</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t><xref target="date-fix"/> of this document</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-problem-ohttp-key">
        <name>Registration of "ohttp-key" Problem Type</name>
        <t>IANA are requested to create a new entry in the "HTTP Problem Type" registry
established by <xref target="PROBLEM"/>.</t>
        <dl spacing="compact">
          <dt>Type URI:</dt>
          <dd>
            <t>https://iana.org/assignments/http-problem-types#ohttp-key</t>
          </dd>
          <dt>Title:</dt>
          <dd>
            <t>Oblivious HTTP <xref target="key-configuration" format="none">key configuration</xref><iref item="key configuration"/> not acceptable</t>
          </dd>
          <dt>Recommended HTTP Status Code:</dt>
          <dd>
            <t>400</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t><xref target="ohttp-key-problem"/> of this document</t>
          </dd>
        </dl>
      </section>
    </section>
  </middle>
  <back>
    <displayreference target="HTTP11" to="HTTP/1.1"/>
    <displayreference target="HTTP2" to="HTTP/2"/>
    <displayreference target="HTTP3" to="HTTP/3"/>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="BINARY">
          <front>
            <title>Binary Representation of HTTP Messages</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson">
              <organization/>
            </author>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood">
              <organization/>
            </author>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document defines a binary format for representing HTTP messages.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9292"/>
          <seriesInfo name="DOI" value="10.17487/RFC9292"/>
        </reference>
        <reference anchor="HTTP">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <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="QUIC">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar">
              <organization/>
            </author>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol.  QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances.  Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="TLS">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="HPKE">
          <front>
            <title>Hybrid Public Key Encryption</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes">
              <organization/>
            </author>
            <author fullname="K. Bhargavan" initials="K." surname="Bhargavan">
              <organization/>
            </author>
            <author fullname="B. Lipp" initials="B." surname="Lipp">
              <organization/>
            </author>
            <author fullname="C. Wood" initials="C." surname="Wood">
              <organization/>
            </author>
            <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="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="ASCII">
          <front>
            <title>ASCII format for network interchange</title>
            <author fullname="V.G. Cerf" initials="V.G." surname="Cerf">
              <organization/>
            </author>
            <date month="October" year="1969"/>
          </front>
          <seriesInfo name="STD" value="80"/>
          <seriesInfo name="RFC" value="20"/>
          <seriesInfo name="DOI" value="10.17487/RFC0020"/>
        </reference>
        <reference anchor="PROBLEM">
          <front>
            <title>Problem Details for HTTP APIs</title>
            <author fullname="Mark Nottingham" initials="M." surname="Nottingham">
         </author>
            <author fullname="Erik Wilde" initials="E." surname="Wilde">
         </author>
            <author fullname="Sanjay Dalal" initials="S." surname="Dalal">
         </author>
            <date day="5" month="September" year="2022"/>
            <abstract>
              <t>   This document defines a "problem detail" to carry machine-readable
   details of errors in HTTP response content and/or fields to avoid the
   need to define new error response formats for HTTP APIs.

   This document obsoletes RF7807.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Source for this draft and an issue tracker can be found at
   https://github.com/ietf-wg-httpapi/rfc7807bis.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpapi-rfc7807bis-04"/>
        </reference>
        <reference anchor="RFC8470">
          <front>
            <title>Using Early Data in HTTP</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <author fullname="W. Tarreau" initials="W." surname="Tarreau">
              <organization/>
            </author>
            <date month="September" year="2018"/>
            <abstract>
              <t>Using TLS early data creates an exposure to the possibility of a replay attack.  This document defines mechanisms that allow clients to communicate with servers about HTTP requests that are sent in early data.  Techniques are described that use these mechanisms to mitigate the risk of replay.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8470"/>
          <seriesInfo name="DOI" value="10.17487/RFC8470"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="CONSISTENCY">
          <front>
            <title>Key Consistency and Discovery</title>
            <author fullname="Alex Davidson" initials="A." surname="Davidson">
              <organization>Brave Software</organization>
            </author>
            <author fullname="Matthew Finkel" initials="M." surname="Finkel">
              <organization>The Tor Project</organization>
            </author>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="17" month="August" year="2022"/>
            <abstract>
              <t>   This document describes the key consistency and correctness
   requirements of protocols such as Privacy Pass, Oblivious DoH, and
   Oblivious HTTP for user privacy.  It discusses several mechanisms and
   proposals for enabling user privacy in varying threat models.  In
   concludes with discussion of open problems in this area.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-wood-key-consistency-03"/>
        </reference>
        <reference anchor="HTTP11">
          <front>
            <title>HTTP/1.1</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <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="HTTP2">
          <front>
            <title>HTTP/2</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced latency by introducing field compression and allowing multiple concurrent exchanges on the same connection.</t>
              <t>This document obsoletes RFCs 7540 and 8740.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9113"/>
          <seriesInfo name="DOI" value="10.17487/RFC9113"/>
        </reference>
        <reference anchor="HTTP3">
          <front>
            <title>HTTP/3</title>
            <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment.  This document describes a mapping of HTTP semantics over QUIC.  This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9114"/>
          <seriesInfo name="DOI" value="10.17487/RFC9114"/>
        </reference>
        <reference anchor="COOKIES">
          <front>
            <title>HTTP State Management Mechanism</title>
            <author fullname="A. Barth" initials="A." surname="Barth">
              <organization/>
            </author>
            <date month="April" year="2011"/>
            <abstract>
              <t>This document defines the HTTP Cookie and Set-Cookie header fields. These header fields can be used by HTTP servers to store state (called cookies) at HTTP user agents, letting the servers maintain a stateful session over the mostly stateless HTTP protocol.  Although cookies have many historical infelicities that degrade their security and privacy, the Cookie and Set-Cookie header fields are widely used on the Internet.  This document obsoletes RFC 2965.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6265"/>
          <seriesInfo name="DOI" value="10.17487/RFC6265"/>
        </reference>
        <reference anchor="Dingledine2004" target="https://svn.torproject.org/svn/projects/design-paper/tor-design.html">
          <front>
            <title>Tor: The Second-Generation Onion Router</title>
            <author initials="R." surname="Dingledine">
              <organization/>
            </author>
            <author initials="N." surname="Mathewson">
              <organization/>
            </author>
            <author initials="P." surname="Syverson">
              <organization/>
            </author>
            <date year="2004" month="August"/>
          </front>
        </reference>
        <reference anchor="PRIO" target="https://crypto.stanford.edu/prio/paper.pdf">
          <front>
            <title>Prio: Private, Robust, and Scalable Computation of Aggregate Statistics</title>
            <author initials="H." surname="Corrigan-Gibbs">
              <organization/>
            </author>
            <author initials="D." surname="Boneh">
              <organization/>
            </author>
            <date year="2017" month="March" day="14"/>
          </front>
        </reference>
        <reference anchor="ODoH" target="https://www.petsymposium.org/2021/files/papers/issue4/popets-2021-0085.pdf">
          <front>
            <title>Oblivious DNS over HTTPS (ODoH): A Practical Privacy Enhancement to DNS</title>
            <author fullname="Sudheesh Singanamalla">
              <organization/>
            </author>
            <author fullname="Suphanat Chunhapanya">
              <organization/>
            </author>
            <author fullname="Marek Vavrusa">
              <organization/>
            </author>
            <author fullname="Tanya Verma">
              <organization/>
            </author>
            <author fullname="Peter Wu">
              <organization/>
            </author>
            <author fullname="Marwan Fayed">
              <organization/>
            </author>
            <author fullname="Kurtis Heimerl">
              <organization/>
            </author>
            <author fullname="Nick Sullivan">
              <organization/>
            </author>
            <author fullname="Christopher A. Wood">
              <organization/>
            </author>
            <date year="2021" month="January" day="07"/>
          </front>
        </reference>
        <reference anchor="OHTTP-ANALYSIS" target="https://github.com/cloudflare/ohttp-analysis">
          <front>
            <title>Tamarin Model of Oblivious HTTP</title>
            <author fullname="Jonathan Hoyland">
              <organization/>
            </author>
            <date year="2021" month="August" day="23"/>
          </front>
        </reference>
        <reference anchor="UWT" target="https://www.w3.org/2001/tag/doc/unsanctioned-tracking/">
          <front>
            <title>Unsanctioned Web Tracking</title>
            <author fullname="Mark Nottingham">
              <organization/>
            </author>
            <date year="2015" month="July" day="17"/>
          </front>
        </reference>
        <reference anchor="FIELDING" target="https://www.ics.uci.edu/~fielding/pubs/dissertation/fielding_dissertation.pdf">
          <front>
            <title>Architectural Styles and the Design of Network-based Software Architectures</title>
            <author fullname="Roy Thomas Fielding">
              <organization/>
            </author>
            <date year="2000"/>
          </front>
        </reference>
        <reference anchor="RFC7838">
          <front>
            <title>HTTP Alternative Services</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <author fullname="P. McManus" initials="P." surname="McManus">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." surname="Reschke">
              <organization/>
            </author>
            <date month="April" year="2016"/>
            <abstract>
              <t>This document specifies "Alternative Services" for HTTP, which allow an origin's resources to be authoritatively available at a separate network location, possibly accessed with a different protocol configuration.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7838"/>
          <seriesInfo name="DOI" value="10.17487/RFC7838"/>
        </reference>
        <reference anchor="RFC8484">
          <front>
            <title>DNS Queries over HTTPS (DoH)</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman">
              <organization/>
            </author>
            <author fullname="P. McManus" initials="P." surname="McManus">
              <organization/>
            </author>
            <date month="October" year="2018"/>
            <abstract>
              <t>This document defines a protocol for sending DNS queries and getting DNS responses over HTTPS.  Each DNS query-response pair is mapped into an HTTP exchange.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8484"/>
          <seriesInfo name="DOI" value="10.17487/RFC8484"/>
        </reference>
        <reference anchor="RANDOM">
          <front>
            <title>Randomness Requirements for Security</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd">
              <organization/>
            </author>
            <author fullname="J. Schiller" initials="J." surname="Schiller">
              <organization/>
            </author>
            <author fullname="S. Crocker" initials="S." surname="Crocker">
              <organization/>
            </author>
            <date month="June" year="2005"/>
            <abstract>
              <t>Security systems are built on strong cryptographic algorithms that foil pattern analysis attempts.  However, the security of these systems is dependent on generating secret quantities for passwords, cryptographic keys, and similar quantities.  The use of pseudo-random processes to generate secret quantities can result in pseudo-security. A sophisticated attacker may find it easier to reproduce the environment that produced the secret quantities and to search the resulting small set of possibilities than to locate the quantities in the whole of the potential number space.</t>
              <t>Choosing random quantities to foil a resourceful and motivated adversary is surprisingly difficult.  This document points out many pitfalls in using poor entropy sources or traditional pseudo-random number generation techniques for generating such quantities.  It recommends the use of truly random hardware techniques and shows that the existing hardware on many systems can be used for this purpose. It provides suggestions to ameliorate the problem when a hardware solution is not available, and it gives examples of how large such quantities need to be for some applications.  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="106"/>
          <seriesInfo name="RFC" value="4086"/>
          <seriesInfo name="DOI" value="10.17487/RFC4086"/>
        </reference>
        <reference anchor="FORWARDED">
          <front>
            <title>Forwarded HTTP Extension</title>
            <author fullname="A. Petersson" initials="A." surname="Petersson">
              <organization/>
            </author>
            <author fullname="M. Nilsson" initials="M." surname="Nilsson">
              <organization/>
            </author>
            <date month="June" year="2014"/>
            <abstract>
              <t>This document defines an HTTP extension header field that allows proxy components to disclose information lost in the proxying process, for example, the originating IP address of a request or IP address of the proxy on the user-agent-facing interface.  In a path of proxying components, this makes it possible to arrange it so that each subsequent component will have access to, for example, all IP addresses used in the chain of proxied HTTP requests.</t>
              <t>This document also specifies guidelines for a proxy administrator to anonymize the origin of a request.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7239"/>
          <seriesInfo name="DOI" value="10.17487/RFC7239"/>
        </reference>
        <reference anchor="NTP">
          <front>
            <title>Network Time Protocol Version 4: Protocol and Algorithms Specification</title>
            <author fullname="D. Mills" initials="D." surname="Mills">
              <organization/>
            </author>
            <author fullname="J. Martin" initials="J." role="editor" surname="Martin">
              <organization/>
            </author>
            <author fullname="J. Burbank" initials="J." surname="Burbank">
              <organization/>
            </author>
            <author fullname="W. Kasch" initials="W." surname="Kasch">
              <organization/>
            </author>
            <date month="June" year="2010"/>
            <abstract>
              <t>The Network Time Protocol (NTP) is widely used to synchronize computer clocks in the Internet.  This document describes NTP version 4 (NTPv4), which is backwards compatible with NTP version 3 (NTPv3), described in RFC 1305, as well as previous versions of the protocol. NTPv4 includes a modified protocol header to accommodate the Internet Protocol version 6 address family.  NTPv4 includes fundamental improvements in the mitigation and discipline algorithms that extend the potential accuracy to the tens of microseconds with modern workstations and fast LANs.  It includes a dynamic server discovery scheme, so that in many cases, specific server configuration is not required.  It corrects certain errors in the NTPv3 design and implementation and includes an optional extension mechanism.   [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5905"/>
          <seriesInfo name="DOI" value="10.17487/RFC5905"/>
        </reference>
        <reference anchor="CLOCKSKEW">
          <front>
            <title>Where the Wild Warnings Are: Root Causes of Chrome HTTPS Certificate Errors</title>
            <author fullname="Mustafa Emre Acer" initials="M." surname="Acer">
              <organization>Google Inc., Mountain View, CA, USA</organization>
            </author>
            <author fullname="Emily Stark" initials="E." surname="Stark">
              <organization>Google Inc., Mountain View, CA, USA</organization>
            </author>
            <author fullname="Adrienne Porter Felt" initials="A." surname="Felt">
              <organization>Google Inc., Mountain View, CA, USA</organization>
            </author>
            <author fullname="Sascha Fahl" initials="S." surname="Fahl">
              <organization>Leibniz University Hannover, Hannover, Germany</organization>
            </author>
            <author fullname="Radhika Bhargava" initials="R." surname="Bhargava">
              <organization>Purdue University, West Lafayette, IN, USA</organization>
            </author>
            <author fullname="Bhanu Dev" initials="B." surname="Dev">
              <organization>International Institute of Information Technology, Hyderabad, Hyderabad, India</organization>
            </author>
            <author fullname="Matt Braithwaite" initials="M." surname="Braithwaite">
              <organization>Google Inc., Mountain View, CA, USA</organization>
            </author>
            <author fullname="Ryan Sleevi" initials="R." surname="Sleevi">
              <organization>Google Inc., Mountain View, CA, USA</organization>
            </author>
            <author fullname="Parisa Tabriz" initials="P." surname="Tabriz">
              <organization>Google Inc., Mountain View, CA, USA</organization>
            </author>
            <date month="October" year="2017"/>
          </front>
          <seriesInfo name="Proceedings of the 2017 ACM SIGSAC Conference on Computer and Communications" value="Security"/>
          <seriesInfo name="DOI" value="10.1145/3133956.3134007"/>
        </reference>
        <reference anchor="TEMPLATE">
          <front>
            <title>URI Template</title>
            <author fullname="J. Gregorio" initials="J." surname="Gregorio">
              <organization/>
            </author>
            <author fullname="R. Fielding" initials="R." surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Hadley" initials="M." surname="Hadley">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <author fullname="D. Orchard" initials="D." surname="Orchard">
              <organization/>
            </author>
            <date month="March" year="2012"/>
            <abstract>
              <t>A URI Template is a compact sequence of characters for describing a range of Uniform Resource Identifiers through variable expansion. This specification defines the URI Template syntax and the process for expanding a URI Template into a URI reference, along with guidelines for the use of URI Templates on the Internet.   [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6570"/>
          <seriesInfo name="DOI" value="10.17487/RFC6570"/>
        </reference>
        <reference anchor="X25519">
          <front>
            <title>Elliptic Curves for Security</title>
            <author fullname="A. Langley" initials="A." surname="Langley">
              <organization/>
            </author>
            <author fullname="M. Hamburg" initials="M." surname="Hamburg">
              <organization/>
            </author>
            <author fullname="S. Turner" initials="S." surname="Turner">
              <organization/>
            </author>
            <date month="January" year="2016"/>
            <abstract>
              <t>This memo specifies two elliptic curves over prime fields that offer a high level of practical security in cryptographic applications, including Transport Layer Security (TLS).  These curves are intended to operate at the ~128-bit and ~224-bit security level, respectively, and are generated deterministically based on a list of required properties.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7748"/>
          <seriesInfo name="DOI" value="10.17487/RFC7748"/>
        </reference>
        <reference anchor="ODOH">
          <front>
            <title>Oblivious DNS over HTTPS</title>
            <author fullname="E. Kinnear" initials="E." surname="Kinnear">
              <organization/>
            </author>
            <author fullname="P. McManus" initials="P." surname="McManus">
              <organization/>
            </author>
            <author fullname="T. Pauly" initials="T." surname="Pauly">
              <organization/>
            </author>
            <author fullname="T. Verma" initials="T." surname="Verma">
              <organization/>
            </author>
            <author fullname="C.A. Wood" initials="C.A." surname="Wood">
              <organization/>
            </author>
            <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>
      </references>
    </references>
    <section anchor="complete-example-of-a-request-and-response">
      <name>Complete Example of a Request and Response</name>
      <!-- Generated using ohttp (https://github.com/martinthomson/ohttp):
RUST_LOG=ohttp cargo test -\-features nss,client,server -\-no-default-features -p ohttp -\-lib -\- -\-nocapture request_response
Note: "rust-hpke" doesn't log the client/sender keying material.
-->

<t>A single request and response exchange is shown here. Binary values (<xref target="key-configuration" format="none">key
configuration</xref><iref item="key configuration"/>, secret keys, the content of messages, and intermediate values)
are shown in hexadecimal. The request and response here are minimal; the purpose
of this example is to show the cryptographic operations.  In this example, the
<xref target="dfn-client" format="none">Client</xref><iref item="Client"/> is configured with the <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> URI of
<tt>https://proxy.example.org/request.example.net/proxy</tt>, and the proxy is
configured to map requests to this URI to the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> URI
<tt>https://example.com/oblivious/request</tt>. The <xref target="dfn-target" format="none">Target Resource</xref><iref item="Target Resource"/> URI, i.e., the
resource the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> ultimately wishes to query, is <tt>https://example.com</tt>.</t>
      <t>To begin the process, the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> generates a key pair.
In this example the server chooses DHKEM(X25519, HKDF-SHA256) and generates
an X25519 key pair <xref target="X25519"/>. The X25519 secret key is:</t>
      <artwork type="hex-dump"><![CDATA[
3c168975674b2fa8e465970b79c8dcf09f1c741626480bd4c6162fc5b6a98e1a
]]></artwork>
      <t>The <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> constructs a <xref target="key-configuration" format="none">key configuration</xref><iref item="key configuration"/> that includes the
corresponding public key as follows:</t>
      <artwork type="hex-dump"><![CDATA[
01002031e1f05a740102115220e9af918f738674aec95f54db6e04eb705aae8e
79815500080001000100010003
]]></artwork>
      <t>This <xref target="key-configuration" format="none">key configuration</xref><iref item="key configuration"/> is somehow obtained by the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/>. Then when a <xref target="dfn-client" format="none">Client</xref><iref item="Client"/>
wishes to send an HTTP GET request to the target <tt>https://example.com</tt>, it
constructs the following binary HTTP message:</t>
      <artwork type="hex-dump"><![CDATA[
00034745540568747470730b6578616d706c652e636f6d012f
]]></artwork>
      <t>The <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> then reads the <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> <xref target="key-configuration" format="none">key configuration</xref><iref item="key configuration"/> and
selects a mutually supported KDF and AEAD. In this example, the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> selects
HKDF-SHA256 and AES-128-GCM. The <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> then generates an HPKE sending context
that uses the server public key. This context is constructed from the following
ephemeral secret key:</t>
      <artwork type="hex-dump"><![CDATA[
bc51d5e930bda26589890ac7032f70ad12e4ecb37abb1b65b1256c9c48999c73
]]></artwork>
      <t>The corresponding public key is:</t>
      <artwork type="hex-dump"><![CDATA[
4b28f881333e7c164ffc499ad9796f877f4e1051ee6d31bad19dec96c208b472
]]></artwork>
      <t>And an <tt>info</tt> parameter of:</t>
      <artwork type="hex-dump"><![CDATA[
6d6573736167652f626874747020726571756573740001002000010001
]]></artwork>
      <t>Applying the Seal operation from the HPKE context produces an encrypted
message, allowing the <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> to construct the following <xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/>:</t>
      <artwork type="hex-dump"><![CDATA[
010020000100014b28f881333e7c164ffc499ad9796f877f4e1051ee6d31bad1
9dec96c208b4726374e469135906992e1268c594d2a10c695d858c40a026e796
5e7d86b83dd440b2c0185204b4d63525
]]></artwork>
      <t>The <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> then sends this to the <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> in a POST request,
which might look like the following HTTP/1.1 request:</t>
      <sourcecode type="http-message"><![CDATA[
POST /request.example.net/proxy HTTP/1.1
Host: proxy.example.org
Content-Type: message/ohttp-req
Content-Length: 78

<content is the Encapsulated Request above>
]]></sourcecode>
      <t>The <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> receives this request and forwards it to the
<xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/>, which might look like:</t>
      <sourcecode type="http-message"><![CDATA[
POST /oblivious/request HTTP/1.1
Host: example.com
Content-Type: message/ohttp-req
Content-Length: 78

<content is the Encapsulated Request above>
]]></sourcecode>
      <t>The Oblivous Gateway Resource receives this request, selects the key it
generated previously using the key identifier from the message, and decrypts the
message. As this request is directed to the same server, the <xref target="dfn-gateway" format="none">Oblivious Gateway
Resource</xref><iref item="Oblivious Gateway Resource"/> does not need to initiate an HTTP request to the <xref target="dfn-target" format="none">Target Resource</xref><iref item="Target Resource"/>. The
request can be served directly by the <xref target="dfn-target" format="none">Target Resource</xref><iref item="Target Resource"/>, which generates a minimal
response (consisting of just a 200 status code) as follows:</t>
      <artwork type="hex-dump"><![CDATA[
0140c8
]]></artwork>
      <t>The response is constructed by extracting a secret from the HPKE context:</t>
      <!-- ikm for HKDF extract -->
<artwork type="hex-dump"><![CDATA[
62d87a6ba569ee81014c2641f52bea36
]]></artwork>
      <t>The key derivation for the <xref target="dfn-enc-res" format="none">Encapsulated Response</xref><iref item="Encapsulated Response"/> uses both the encapsulated KEM
key from the request and a randomly selected nonce. This produces a salt of:</t>
      <artwork type="hex-dump"><![CDATA[
4b28f881333e7c164ffc499ad9796f877f4e1051ee6d31bad19dec96c208b472
c789e7151fcba46158ca84b04464910d
]]></artwork>
      <t>The salt and secret are both passed to the Extract function of the selected KDF
(HKDF-SHA256) to produce a pseudorandom key of:</t>
      <artwork type="hex-dump"><![CDATA[
979aaeae066cf211ab407b31ae49767f344e1501e475c84e8aff547cc5a683db
]]></artwork>
      <t>The pseudorandom key is used with the Expand function of the KDF and an info
field of "key" to produce a 16-byte key for the selected AEAD (AES-128-GCM):</t>
      <artwork type="hex-dump"><![CDATA[
5d0172a080e428b16d298c4ea0db620d
]]></artwork>
      <t>With the same KDF and pseudorandom key, an info field of "nonce" is used to
generate a 12-byte nonce:</t>
      <artwork type="hex-dump"><![CDATA[
f6bf1aeb88d6df87007fa263
]]></artwork>
      <t>The AEAD <tt>Seal()</tt> function is then used to encrypt the response, which is added
to the randomized nonce value to produce the <xref target="dfn-enc-res" format="none">Encapsulated Response</xref><iref item="Encapsulated Response"/>:</t>
      <artwork type="hex-dump"><![CDATA[
c789e7151fcba46158ca84b04464910d86f9013e404feea014e7be4a441f234f
857fbd
]]></artwork>
      <t>The <xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref><iref item="Oblivious Gateway Resource"/> constructs a response with the same content:</t>
      <sourcecode type="http-message"><![CDATA[
HTTP/1.1 200 OK
Date: Wed, 27 Jan 2021 04:45:07 GMT
Cache-Control: private, no-store
Content-Type: message/ohttp-res
Content-Length: 38

<content is the Encapsulated Response>
]]></sourcecode>
      <t>The same response might then be generated by the <xref target="dfn-relay" format="none">Oblivious Relay Resource</xref><iref item="Oblivious Relay Resource"/> which
might change as little as the Date header. The <xref target="dfn-client" format="none">Client</xref><iref item="Client"/> is then able to use the
HPKE context it created and the nonce from the <xref target="dfn-enc-res" format="none">Encapsulated Response</xref><iref item="Encapsulated Response"/> to
construct the AEAD key and nonce and decrypt the response.</t>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This design is based on a design for Oblivious DoH, described in
<xref target="ODOH"/>. <contact fullname="David Benjamin"/>, <contact fullname="Mark Nottingham"/>, and <contact fullname="Eric Rescorla"/> made technical contributions.  The authors also thank <contact fullname="Ralph Giles"/>, <contact fullname="Lucas Pardue"/>, and <contact fullname="Tommy Pauly"/> for invaluable assistance.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
/xtJBr5rqCIBAA==

-->

</rfc>
