<?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.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-ohai-ohttp-05" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.14.2 -->
  <front>
    <title>Oblivious HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-ohai-ohttp-05"/>
    <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="September" day="26"/>
    <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>This document defines two kinds of HTTP resources -- <xref target="dfn-relay" format="none">Oblivious Relay Resources</xref><iref item="Oblivious Relay Resources"/>
and <xref target="dfn-gateway" format="none">Oblivious Gateway Resources</xref><iref item="Oblivious Gateway Resources"/> -- that process encapsulated binary HTTP messages
<xref target="BINARY"/> using Hybrid Public Key Encryption (HPKE; <xref target="HPKE"/>). They can be composed to
protect the content of encapsulated requests and responses, thereby separating the identity of a
requester from the request.</t>
      <t>Although this scheme requires support for two new kinds of oblivious resources,
it represents a performance improvement over options
that perform 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>A 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 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 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>
        <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"/>.</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 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.</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 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 draft 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),
}

OHTTP 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 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"/> is
comprised of 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"/>.  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"/> is
comprised of 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"/>.  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>Servers decrypt an <xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/> by reversing this process. Given an
<xref target="dfn-enc-req" format="none">Encapsulated Request</xref><iref item="Encapsulated Request"/> <tt>enc_request</tt>, a server:</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 server 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
   server 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
   server is unwilling to use with <tt>skR</tt>, the server 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 server 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>, servers 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 context.  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 OHTTP 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 <bcp14>MUST</bcp14> only contain
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, those 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 it detects before removing encapsulation of the 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 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
an error status 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"/>, Oblvious 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 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 Oblivious
Relay 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"/> learns 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, a <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 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 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
operated by different entities as that would expose both requests and response
to modification or inspection by a network attacker.</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. 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"/> <bcp14>SHOULD</bcp14> 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.</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 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 affected 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"/> (KeyConfig), 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 with a target.</t>
      <t>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 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>only "8bit" or "binary" is permitted</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>IESG</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>only "8bit" or "binary" is permitted</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>IESG</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>only "8bit" or "binary" is permitted</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>IESG</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="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="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 Oblivious Gateway 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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
8gDQR4bXnsuZVyiUcObY/wNpJ/vC0BwBAA==

-->

</rfc>
