<?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 docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-ohai-ohttp-04" 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-04"/>
    <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="01"/>
    <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="RFC6265"/>), 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">This document uses its own definition of <xref target="dfn-client" format="none">Client</xref><iref item="Client"/>.  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="SEMANTICS"/>.</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="Martin Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Christopher A. Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="6" month="July" year="2022"/>
            <abstract>
              <t>This document defines a binary format for representing HTTP messages.
              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-binary-message-06"/>
        </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">
	 </author>
            <author fullname="Erik Wilde">
	 </author>
            <author fullname="Sanjay Dalal">
	 </author>
            <date day="25" month="May" 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.

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-03"/>
        </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">
              <organization>Brave Software</organization>
            </author>
            <author fullname="Matthew Finkel">
              <organization>The Tor Project</organization>
            </author>
            <author fullname="Martin Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Christopher A. 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="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="RFC6265">
          <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="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="SEMANTICS">
          <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="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="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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
ted65hUKJZw69v8DCP5L2MMcAQA=

-->

</rfc>
