<?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.13 (Ruby 3.1.2) -->
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-ohai-ohttp-02" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.13.0 -->
  <front>
    <title>Oblivious HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-ohai-ohttp-02"/>
    <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="July" day="11"/>
    <area>Security</area>
    <workgroup>Oblivious HTTP Application Intermediation</workgroup>
    <abstract>
      <t>This document describes a system for the forwarding of encrypted HTTP messages.
This allows a client to make multiple requests of a server without the server being able
to link those requests to the client or to identify the requests as having come
from the same client.</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/"/>.
      </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>The act of making a request using HTTP reveals information about the client
identity to a server. Though the content of requests might reveal information,
that is information under the control of the client. In comparison, the source
address on the connection reveals information that a client has only limited
control over.</t>
      <t>Even where an IP address is not directly attributed to an individual, the use
of an address over time can be used to correlate requests. Servers are able to
use this information to assemble profiles of client behavior, from which they
can make inferences about the people involved. The use of persistent
connections to make multiple requests improves performance, but provides
servers with additional certainty about the identity of clients in a similar
fashion.</t>
      <t>Use of an HTTP proxy can provide a degree of protection against servers
correlating requests. Systems like virtual private networks or the Tor network
<xref target="Dingledine2004"/>, provide other options for clients.</t>
      <t>Though the overhead imposed by these methods varies, the cost for each request
is significant. Preventing request linkability requires that each request
use a completely new TLS connection to the server. At a minimum,
this requires an additional round trip to the server in addition to that
required by the request. In addition to having high latency, there are
significant secondary costs, both in terms of the number of additional bytes
exchanged and the CPU cost of cryptographic computations.</t>
      <t>This document describes a method of encapsulation for binary HTTP messages
<xref target="BINARY"/> using Hybrid Public Key Encryption (HPKE;
<xref target="HPKE"/>). This protects the content of both requests and
responses and enables a deployment architecture that can separate the identity
of a requester from the request.</t>
      <t>Though this scheme requires that servers and proxies (called relays in this document)
explicitly support it, this design represents a performance improvement over options
that perform just one request in each connection. With limited trust placed in the
relay (see <xref target="security"/>), 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 client must initially know the following:</t>
      <ul spacing="normal">
        <li>The identity of an Oblivious Gateway Resource.  This might include some
information about what Target Resources the Oblivious Gateway Resource
supports.</li>
        <li>The details of an HPKE public key that the 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 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 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 client to make a request of a Target Resource with
that resource having only a limited ability to correlate that request with the
client IP or other requests that the 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 Target Resource, the following steps occur, as
shown in <xref target="fig-overview"/>:</t>
      <ol spacing="normal" type="1"><li>The client constructs an HTTP request for a Target Resource.</li>
        <li>The 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 client sends a POST request to the Oblivious Relay Resource with the
Encapsulated Request as the content of that message.</li>
        <li>The Oblivious Relay Resource forwards this request to the Oblivious Gateway
resource.</li>
        <li>The Oblivious Gateway Resource receives this request and removes
the HPKE protection to obtain an HTTP request.</li>
        <li>The Oblivious Gateway Resource makes an HTTP request that includes the target
URI, method, fields, and content of the request it acquires.</li>
        <li>The Target Resource answers this HTTP request with an HTTP response.</li>
        <li>The Oblivious Gateway Resource encapsulates the HTTP response following the
process in <xref target="response"/> and sends this in response to the request from the
Oblivious Relay Resource.</li>
        <li>The Oblivious Relay Resource forwards this response to the client.</li>
        <li>The 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 must be used in conjunction with applications
that do 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 adds 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>Client:</dt>
          <dd>
            <t>This document uses its own definition of 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>Encapsulated Request:</dt>
          <dd>
            <t>An HTTP request that is encapsulated in an HPKE-encrypted message; see
<xref target="request"/>.</t>
          </dd>
          <dt>Encapsulated Response:</dt>
          <dd>
            <t>An HTTP response that is encapsulated in an HPKE-encrypted message; see
<xref target="response"/>.</t>
          </dd>
          <dt>Oblivious Relay Resource:</dt>
          <dd>
            <t>An intermediary that forwards encapsulated requests and responses between
clients and a single Oblivious Gateway Resource.</t>
          </dd>
          <dt>Oblivious Gateway Resource:</dt>
          <dd>
            <t>A resource that can receive an encapsulated request, extract the contents of
that request, forward it to a Target Resource, receive a response,
encapsulate that response, then return that response.</t>
          </dd>
          <dt>Target Resource:</dt>
          <dd>
            <t>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>
          <dt>Relay Request:</dt>
          <dd>
            <t>An HTTP request from Client to Relay that contains an encapsulated request as the content.</t>
          </dd>
          <dt>Relay Response:</dt>
          <dd>
            <t>An HTTP response from Relay to Client that contains an encapsulated response as the content.</t>
          </dd>
          <dt>Gateway Request:</dt>
          <dd>
            <t>An HTTP request from Relay to Gateway that contains an encapsulated request as the content.</t>
          </dd>
          <dt>Gateway Response:</dt>
          <dd>
            <t>An HTTP response from Gateway to Relay that contains an encapsulated response as the content.</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"/>.</t>
      </section>
    </section>
    <section anchor="key-configuration">
      <name>Key Configuration</name>
      <t>A client needs to acquire information about the key configuration of the
Oblivious Gateway Resource in order to send encapsulated requests.
In order to ensure that clients do not encapsulate messages that other entities
can intercept, the 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
client implementations can be configured in the same way and also
enables advertising key configurations in a consistent format.  This
format might be used, for example with HTTPS, as part of a system for
configuring or discovering key configurations.  Note however that such
a system needs to consider the potential for key configuration to be
used to compromise client privacy; see <xref target="privacy"/>.</t>
      <t>A client might have multiple key configurations to select from when
encapsulating a request. Clients are responsible for selecting a preferred key
configuration from those it supports. 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 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 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 key configurations. The content of this media
type comprises one or more key configuration encodings (see
<xref target="key-config"/>) that are concatenated.</t>
        <t>Evolution of the key
configuration format is supported through the definition of new
formats that are identified by new media types.</t>
        <dl>
          <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>N/A</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <dl>
              <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>
    <section anchor="hpke-encapsulation">
      <name>HPKE Encapsulation</name>
      <t>HTTP message encapsulation uses HPKE for request and response encryption.</t>
      <t>An encapsulated HTTP request contains a binary-encoded HTTP message <xref target="BINARY"/>
and no other fields; 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>An Encapsulated Request is comprised of a key identifier and a HPKE-protected
request message. HPKE protection includes an encapsulated KEM shared secret (or
<tt>enc</tt>), plus the AEAD-protected request message. An Encapsulated Request is
shown in <xref target="fig-enc-request"/>. <xref target="request"/> describes the process for constructing
and processing an 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),
  AEAD-Protected Request (..),
}
]]></artwork>
      </figure>
      <t>The Nenc parameter corresponding to the HpkeKdfId can be found in <xref section="7.1" sectionFormat="of" target="HPKE"/>.</t>
      <t>An encrypted HTTP response includes a binary-encoded HTTP message <xref target="BINARY"/>
and no other content; 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>Responses are bound to responses and so consist only of AEAD-protected content.
<xref target="response"/> describes the process for constructing and processing an
Encapsulated Response.</t>
      <figure anchor="fig-enc-response">
        <name>Encapsulated Response</name>
        <artwork><![CDATA[
Encapsulated Response {
  Nonce (Nk),
  AEAD-Protected Response (..),
}
]]></artwork>
      </figure>
      <t>The Nenc and Nk parameters corresponding to the HpkeKdfId can be found in
<xref target="HPKE"/>.  Nenc refers to the size of the encapsulated KEM shared secret, in
bytes; Nk refers to the size of the AEAD key for the HPKE ciphersuite, in bits.</t>
      <section anchor="request">
        <name>Encapsulation of Requests</name>
        <t>Clients encapsulate a request <tt>request</tt> using values from a key configuration:</t>
        <ul spacing="normal">
          <li>the key identifier from the configuration, <tt>keyID</tt>, with the corresponding KEM
identified by <tt>kemID</tt>,</li>
          <li>the public key from the configuration, <tt>pkR</tt>, and</li>
          <li>a selected combination of KDF, identified by <tt>kdfID</tt>, and AEAD, identified by
<tt>aeadID</tt>.</li>
        </ul>
        <t>The client then constructs an 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>keyID</tt>,
<tt>kemID</tt>, <tt>kdfID</tt>, and <tt>aeadID</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.</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, keyID),
             encode(2, kemID),
             encode(2, kdfID),
             encode(2, aeadID))
info = concat(encode_str("message/bhttp request"),
              encode(1, 0),
              hdr)
enc, sctxt = SetupBaseS(pkR, hdr)
ct = sctxt.Seal([], request)
enc_request = concat(hdr, enc, ct)
]]></artwork>
        <t>Servers decrypt an Encapsulated Request by reversing this process. Given an
Encapsulated Request <tt>enc_request</tt>, a server:</t>
        <ol spacing="normal" type="1"><li>
            <t>Parses <tt>enc_request</tt> into <tt>keyID</tt>, <tt>kemID</tt>, <tt>kdfID</tt>, <tt>aeadID</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>keyID</tt>.  </t>
            <t>
a. If <tt>keyID</tt> does not identify a key matching the type of <tt>kemID</tt>, the
   server returns an error.  </t>
            <t>
b. If <tt>kdfID</tt> and <tt>aeadID</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>keyID</tt> as an 8-bit integer, plus <tt>kemID</tt>, <tt>kdfID</tt>,
and <tt>aeadID</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[
keyID, kemID, kdfID, aeadID, enc, ct = parse(enc_request)
info = concat(encode_str("message/bhttp request"),
              encode(1, 0),
              encode(1, keyID),
              encode(2, kemID),
              encode(2, kdfID),
              encode(2, aeadID))
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 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>.</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>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>nonce</tt> uses a label of
"nonce".</li>
          <li>Encrypt <tt>response</tt>, passing the AEAD function Seal the values of <tt>key</tt>,
<tt>nonce</tt>, empty <tt>aad</tt>, and a <tt>pt</tt> input of <tt>request</tt>, which yields <tt>ct</tt>.</li>
          <li>Concatenate <tt>response_nonce</tt> and <tt>ct</tt>, yielding an 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>Clients decrypt an 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 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>
    <section anchor="http-usage">
      <name>HTTP Usage</name>
      <t>A client interacts with the Oblivious Relay Resource by constructing an
Encapsulated Request.  This Encapsulated Request is included as the content of a
POST request to the Oblivious Relay Resource.  This request <bcp14>MUST</bcp14> only contain
those fields necessary to carry the Encapsulated Request: a method of POST, a
target URI of the Oblivious Relay Resource, a header field containing
the content type (see (<xref target="media-types"/>), and the Encapsulated Request as the
request content. In the request to the Oblivious Relay Resource, clients <bcp14>MAY</bcp14>
include additional fields. However, those fields <bcp14>MUST</bcp14> be independent of the
Encapsulated Request and <bcp14>MUST</bcp14> be fields that the Oblivious Relay Resource will
remove before forwarding the Encapsulated Request towards the target, such as the
Connection or Proxy-Authorization header fields <xref target="SEMANTICS"/>.</t>
      <t>The client role in this protocol acts as an HTTP client both with respect to the
Oblivious Relay Resource and the Target Resource.  For the request the clients
makes to the 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 Oblivious Relay
Resource and the Oblivious Gateway Resource also act as HTTP clients toward the
Oblivious Gateway Resource and Target Resource respectively.</t>
      <t>The Oblivious Relay Resource interacts with the Oblivious Gateway Resource as an
HTTP client by constructing a request using the same restrictions as the client
request, except that the target URI is the Oblivious Gateway Resource.  The
content of this request is copied from the client.  The Oblivious Relay Resource
<bcp14>MUST NOT</bcp14> add information to the request without the 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 Oblivious Gateway Resource, the
Oblivious Relay Resource forwards the response according to the rules of an
HTTP proxy; see <xref section="7.6" sectionFormat="of" target="HTTP"/>.</t>
      <t>An Oblivious Gateway Resource, if it receives any response from the Target
Resource, sends a single 200 response containing the encapsulated response.
Like the request from the 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 Oblivious Gateway Resource acts as a gateway for requests to the 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>
      <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.  Clients <bcp14>MUST NOT</bcp14>
construct a request that includes a 100-continue expectation; the 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 Oblivious Relay Resource and errors detected by the
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 Oblivious Gateway Resource after successfully removing
encapsulation and errors detected by the Target Resource <bcp14>MUST</bcp14> be sent in an
Encapsulated Response.</t>
      </section>
    </section>
    <section anchor="media-types">
      <name>Media Types</name>
      <t>Media types are used to identify Encapsulated Requests and Responses.</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.</t>
      <section anchor="messageohttp-req-media-type">
        <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>
          <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>N/A</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <dl>
              <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="messageohttp-res-media-type">
        <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>
          <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>N/A</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <dl>
              <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>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>In this design, a client wishes to make a request of a server that is
authoritative for the Target Resource. The 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 client (that is, the
client IP address and TCP or UDP port number the client uses to create a
connection).</li>
        <li>Any other request the client might have made in the past or might make in
the future.</li>
      </ol>
      <t>In order to ensure this, the client selects a relay (that serves the
Oblivious Relay Resource) that it trusts will protect this information
by forwarding the Encapsulated Request and Response without passing it
to the server (that serves the Oblivious Gateway Resource).</t>
      <t>In this section, a deployment where there are three entities is considered:</t>
      <ul spacing="normal">
        <li>A client makes requests and receives responses</li>
        <li>A relay operates the Oblivious Relay Resource</li>
        <li>A server operates both the Oblivious Gateway Resource and the Target Resource</li>
      </ul>
      <t>To achieve the stated privacy goals, the Oblivious Relay Resource cannot be
operated by the same entity as the Oblivious Gateway Resource. However,
colocation of the Oblivious Gateway Resource and Target Resource simplifies the
interactions between those resources without affecting 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 clients and targets in possession
of the corresponding response encapsulation key and HPKE keying material.
In particular, the Oblivious Relay knows the origin and destination of an
Encapsulated Request and Response, yet does not know the decrypted
contents. Likewise, targets know only the Oblivious Gateway origin, i.e.,
the relay, and the decrypted request. Only the client knows both the
plaintext request and response.</li>
        <li>Targets cannot link requests from the same client in the absence of unique
per-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>Clients <bcp14>MUST</bcp14> ensure that the key configuration they select for generating
Encapsulated Requests is integrity protected and authenticated so that it can
be attributed to the Oblivious Gateway Resource; see <xref target="key-configuration"/>.</t>
        <t>Since clients connect directly to the relay instead of the target, application
configurations wherein 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 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>Clients <bcp14>MUST NOT</bcp14> include identifying information in the request that is
encrypted. Identifying information includes cookies <xref target="COOKIES"/>,
authentication credentials or tokens, and any information that might reveal
client-specific information such as account credentials.</t>
        <t>Clients cannot carry connection-level state between requests as they only
establish direct connections to the relay responsible for the Oblivious Relay
resource. However, clients need to ensure that they construct requests without
any information gained from previous requests. Otherwise, the server might be
able to use that information to link requests. Cookies <xref target="COOKIES"/> are
the most obvious feature that <bcp14>MUST NOT</bcp14> be used by clients. However, clients
need to include all information learned from requests, which could include the
identity of resources.</t>
        <t>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 client sends to the Oblivious Relay Resource only requires
minimal information; see <xref target="http-usage"/>. The request that carries the
Encapsulated Request and is sent to the Oblivious Relay Resource <bcp14>MUST NOT</bcp14>
include identifying information unless the client ensures that this information
is removed by the relay. A client <bcp14>MAY</bcp14> include information only for the
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 client needs to trust that the relay does not replicate the
source addressing information in the request it forwards.</t>
        <t>Clients rely on the 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 Oblivious Relay Resource has a very simple function
to perform. For each request it receives, it makes a request of the Oblivious
Gateway Resource that includes the same content. When it receives a response,
it sends a response to the client that includes the content of the response
from the 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 Oblivious Relay Resource, but additional care is
needed to ensure that client privacy is maintained.</t>
        <t>Firstly, a generic implementation will forward unknown fields.  For Oblivious
HTTP, a Oblivious Relay Resource <bcp14>SHOULD NOT</bcp14> forward unknown fields.  Though
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 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 clients, with the exception of
information that a 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
Encapsulated Response.</t>
        <section anchor="differential-treatment">
          <name>Differential Treatment</name>
          <t>A relay <bcp14>MAY</bcp14> add information to requests if the client is aware of the nature of
the information that could be added.  The 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.  It is important to note that information added by
the relay can reduce the size of the anonymity set of clients at a gateway.</t>
          <t>Moreover, relays <bcp14>MAY</bcp14> apply differential treatment to clients that engage in abusive
behavior, e.g., by sending too many requests in comparison to other 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
clients using a gateway. For example, if a relay chooses to rate limit or
block an abusive client, this means that any client requests which are not
treated this way are known to be non-abusive by the gateway. 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. A relay that acts on this feedback
could - either inadvertently or by design - lead to clients being deanonymized.</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 Oblivious Gateway Resource
might need an arrangement with 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
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>Linkability Through Traffic Analysis</name>
          <t>This document assumes that all communication between different entities is
protected by HTTPS.  This 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.</t>
          <t>As the time at which Encapsulated Request or response messages are sent can
reveal information to a network observer. Though messages exchanged between the
Oblivious Relay Resource and the 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, add delays in order to increase the
anonymity set into which each message is attributed. This could latency to the
overall time clients take to receive a response, which might not be what some
clients want.</t>
          <t>A relay 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"/>.</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>
        </section>
      </section>
      <section anchor="server-responsibilities">
        <name>Server Responsibilities</name>
        <t>A server that operates both Oblivious Gateway and Target Resources is
responsible for removing request encryption, generating a response to the
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 Oblivious Gateway Resource and Target Resource,
these entities might need an arrangement similar to that between server and
relay for managing denial of service; see <xref target="dos"/>. It is also necessary to
provide confidentiality protection for the unprotected requests and responses,
plus protections for traffic analysis; see <xref target="ta"/>.</t>
        <t>An 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 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 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-the-encapsulation-format"/>.</t>
        <t>A server is responsible for either rejecting replayed requests or ensuring that
the effect of replays does not adversely affect clients or resources; see
<xref target="replay"/>.</t>
      </section>
      <section anchor="replay">
        <name>Replay Attacks</name>
        <t>Encrypted requests can be copied and replayed by the Oblivious Relay
resource. The threat model for Oblivious HTTP allows the possibility that an
Oblivious Relay Resource might replay requests. Furthermore, if a client sends
an 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 client or 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 (Section
8.1.4 of <xref target="RFC7540"/>), the HTTP/3 H3_REQUEST_REJECTED error code (Section 8.1
of <xref target="QUIC-HTTP"/>), 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 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>Clients <bcp14>SHOULD</bcp14> include a <tt>Date</tt> header field in Encapsulated Requests.  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>A server can maintain state for requests for a small window of time over which
it wishes to accept requests.  The server then rejects requests if the request
is the same as one that was previously answered within that time window.
Servers can reject requests outside of this window and signal that clients might
retry with a different <tt>Date</tt> header field; see <xref section="4" sectionFormat="of" target="REQUEST-DATE"/>.
Servers can identify duplicate requests using the encapsulation (<tt>enc</tt>) value.</t>
          <t>Servers <bcp14>SHOULD</bcp14> allow for the time it takes requests to arrive from the client,
with a time window that is large enough to allow for differences in the clock of
clients and servers.  How large a time window is needed could depend on the
population of clients that the server needs to serve.</t>
          <t>Servers <bcp14>MUST NOT</bcp14> treat the time window as secret information. An attacker can
actively probe the server with specially crafted request timestamps to determine
the time window over which the server will accept responses.</t>
          <t><xref target="REQUEST-DATE"/> contains further
considerations for the use of the <tt>Date</tt> request header field.  This includes
the way in which clients might correct for clock skew and the privacy
considerations arising from that usage.  Servers that reject requests on the
basis of the <tt>Date</tt> request header field <bcp14>SHOULD</bcp14> implement the feedback mechanism
in <xref section="4" sectionFormat="of" target="REQUEST-DATE"/> to support clock correction by clients.</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 key configuration. A measure of
forward secrecy can be provided by generating a new 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 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 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 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 client with the Oblivious Relay Resource as messages are
protected by TLS.  Use of a compromised key also requires that the 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>
    <section anchor="privacy">
      <name>Privacy Considerations</name>
      <t>One goal of this design is that independent client requests are only linkable by
the chosen key configuration. The Oblivious Relay and Gateway resources can link
requests using the same key configuration by matching KeyConfig.key_id, or, if
the Target Resource is willing to use trial decryption, a limited set of key
configurations that share an identifier. An Oblivious Relay Resource can link
requests using the public key corresponding to KeyConfig.key_id.</t>
      <t>Request resources are capable of linking requests depending on how KeyConfigs
are produced by servers and discovered by clients. Specifically, servers can
maliciously construct key configurations to track individual clients. A specific
method for a client to acquire key configurations is not included in this
specification. Clients need to consider these tracking vectors when choosing a
discovery method.  Applications using this design should provide accommodations
to mitigate tracking using key configurations.
<xref target="CONSISTENCY"/> provides an analysis of the options
for ensuring the key configurations are consistent between different clients.</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 and latency to requests relative to
a simple HTTP request-response exchange.  Deploying relay services that are on
path between 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 Oblivious Relay
Resource and the Oblivious Gateway Resource. This means that any encrypted
request sent to the Oblivious Relay Resource will always be forwarded to the
Oblivious Gateway Resource. This constraint was imposed to simplify relay
configuration and mitigate against the Oblivious Relay Resource being used as
a generic relay for unknown Oblivious Gateway Resources. The relay will only
forward for Oblivious Gateway Resources that it has explicitly configured and
allowed.</t>
        <t>It is possible for a server to be configured with multiple Oblivious Relay
Resources, each for a different Oblivious Gateway Resource as needed.  If the
goal is to support a large number of Oblivious Gateway Resources, clients might
be provided with a URI template <xref target="TEMPLATE"/>, from which multiple
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 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="media-types"/>.</t>
        <t>Oblivious HTTP has a simple key management design that is not trivially altered
to enable interception by intermediaries.  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="repurposing-the-encapsulation-format">
      <name>Repurposing the Encapsulation Format</name>
      <t>The encrypted payload of an OHTTP request and response is a binary HTTP
message <xref target="BINARY"/>. Client and target 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
<xref target="hpke-encapsulation"/>, provided that the content type of the encrypted
payload is appropriately reflected in the HPKE info and context strings. For
example, if a future specification were to use the encryption mechanism in
this specification for DNS messages, identified by the "application/dns-message"
media type, then the HPKE info string <bcp14>SHOULD</bcp14> be "application/dns-message
request" for request encryption, and the HPKE export context string should be
"application/dns-message response" for response encryption.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>Please update the "Media Types" registry at
<eref target="https://www.iana.org/assignments/media-types">https://www.iana.org/assignments/media-types</eref> with the registration information
in <xref target="media-types"/> for the media types "message/ohttp-req", "message/ohttp-res",
and "application/ohttp-keys".</t>
    </section>
  </middle>
  <back>
    <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="Richard L. Barnes">
              <organization>Cisco</organization>
            </author>
            <author fullname="Karthik Bhargavan">
              <organization>Inria</organization>
            </author>
            <author fullname="Benjamin Lipp">
              <organization>Inria</organization>
            </author>
            <author fullname="Christopher A. Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="2" month="September" year="2021"/>
            <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.

 This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.
              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-hpke-12"/>
        </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="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>
        <reference anchor="RFC7540">
          <front>
            <title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title>
            <author fullname="M. Belshe" initials="M." surname="Belshe">
              <organization/>
            </author>
            <author fullname="R. Peon" initials="R." surname="Peon">
              <organization/>
            </author>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <date month="May" year="2015"/>
            <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 perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection.  It also introduces unsolicited push of representations from servers to clients.</t>
              <t>This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax.  HTTP's existing semantics remain unchanged.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7540"/>
          <seriesInfo name="DOI" value="10.17487/RFC7540"/>
        </reference>
        <reference anchor="QUIC-HTTP">
          <front>
            <title>HTTP/3</title>
            <author fullname="Mike Bishop">
              <organization>Akamai</organization>
            </author>
            <date day="2" month="February" year="2021"/>
            <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="Internet-Draft" value="draft-ietf-quic-http-34"/>
        </reference>
        <reference anchor="REQUEST-DATE">
          <front>
            <title>Using The Date Header Field In HTTP Requests</title>
            <author fullname="Martin Thomson">
              <organization>Mozilla</organization>
            </author>
            <date day="8" month="February" year="2022"/>
            <abstract>
              <t>   HTTP clients rarely make use of the Date header field when making
   requests.  This document describes considerations for using the Date
   header field in requests.  A method is described for correcting
   erroneous in Date request header fields that might arise from
   differences in client and server clocks.  The risks of applying that
   correction technique are discussed.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-thomson-httpapi-date-requests-00"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <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="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="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="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="4" month="March" 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-02"/>
        </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="Eric Kinnear">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Patrick McManus">
              <organization>Fastly</organization>
            </author>
            <author fullname="Tommy Pauly">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Tanya Verma">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Christopher A. Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="17" month="February" 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.

 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="Internet-Draft" value="draft-pauly-dprive-oblivious-doh-11"/>
        </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 (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
client is configured with the 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 Target Resource URI, i.e., the
resource the client ultimately wishes to query, is <tt>https://example.com</tt>.</t>
      <t>To begin the process, the 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 Oblivious Gateway Resource constructs a key configuration that includes the
corresponding public key as follows:</t>
      <artwork type="hex-dump"><![CDATA[
01002031e1f05a740102115220e9af918f738674aec95f54db6e04eb705aae8e
79815500080001000100010003
]]></artwork>
      <t>This key configuration is somehow obtained by the client. Then when a client
wishes to send an HTTP request of a 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 client then reads the Oblivious Gateway Resource key configuration and
selects a mutually supported KDF and AEAD. In this example, the client selects
HKDF-SHA256 and AES-128-GCM. The 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 client to construct the following Encapsulated Request:</t>
      <artwork type="hex-dump"><![CDATA[
010020000100014b28f881333e7c164ffc499ad9796f877f4e1051ee6d31bad1
9dec96c208b4726374e469135906992e1268c594d2a10c695d858c40a026e796
5e7d86b83dd440b2c0185204b4d63525
]]></artwork>
      <t>The client then sends this to the 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 Oblivious Relay Resource receives this request and forwards it to the
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 Oblivious Gateway
Resource does not need to initiate an HTTP request to the Target Resource. The
request can be served directly by the 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 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 Encapsulated Response:</t>
      <artwork type="hex-dump"><![CDATA[
c789e7151fcba46158ca84b04464910d86f9013e404feea014e7be4a441f234f
857fbd
]]></artwork>
      <t>The 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 Oblivious Relay Resource which
might change as little as the Date header. The client is then able to use the
HPKE context it created and the nonce from the 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"/>. David Benjamin and Eric Rescorla made
technical contributions.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
