<?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.25 (Ruby 3.1.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-ohai-ohttp-07" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.16.0 -->
  <front>
    <title>Oblivious HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-ohai-ohttp-07"/>
    <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="2023" month="March" day="09"/>
    <area>Security</area>
    <workgroup>Oblivious HTTP Application Intermediation</workgroup>
    <abstract>
      <t>This document describes a system for forwarding encrypted HTTP messages.
This allows a client to make multiple requests to an origin server without that server being able
to link those requests to the client or to identify the requests as having come
from the same client, while placing only limited trust in the nodes used to forward the messages.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-wg-ohai.github.io/oblivious-http/draft-ietf-ohai-ohttp.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-ohai-ohttp/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Oblivious HTTP Application Intermediation Working Group mailing list (<eref target="mailto:ohai@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/ohai/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/ohai/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-ohai/oblivious-http"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>An HTTP request reveals information about the client's identity to the server.
Some of that information is in the request content, and therefore under the control
of the client. However, the source IP address of the underlying connection reveals
information that the client has only limited control over.</t>
      <t>Even where an IP address is not directly associated with an individual, the requests
made from it can be correlated over time to assemble a profile of client behavior. In
particular, connection reuse improves performance, but provides servers with
the ability to correlate requests that share a connection.</t>
      <t><iref item="Client"/><xref target="dfn-client" format="none">Client</xref>-configured HTTP proxies can provide a degree of protection against IP
address tracking, and systems like virtual private networks and the Tor network
<xref target="DMS2004"/> provide additional options for clients.</t>
      <t>However, even when IP address tracking is mitigated using one of these techniques, each request
needs to be on a completely new TLS connection to avoid the connection itself being used
to correlate behavior. This imposes considerable performance and efficiency overheads, due
to the additional round trip to the server (at a minimum), additional data exchanged, and
additional CPU cost of cryptographic computations.</t>
      <t>To overcome these limitations, this document defines Oblivious HTTP, a protocol for
encrypting and sending HTTP messages from a client to a gateway through a trusted relay
service. In particular, the protocol in this document describes:</t>
      <ol spacing="normal" type="1"><li>an algorithm for encapsulating binary HTTP messages <xref target="BINARY"/> using Hybrid
Public Key Encryption (HPKE; <xref target="HPKE"/>) to protect their contents,</li>
        <li>a method for forwarding these encapsulated messages between clients and an
<iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> through a trusted <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> using
HTTP, and</li>
        <li>requirements for how the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> handles encapsulated HTTP
messages and produces encapsulated responses for the client.</li>
      </ol>
      <t>The combination of encapsulation and relaying ensures that <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref>
never sees the client's IP address and the <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> never sees
plaintext HTTP message content.</t>
      <t>Oblivious HTTP allows connection reuse between the client and <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay
Resource</xref>, as well as between that relay and the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref>, so this
scheme represents a performance improvement over using just one request in each
connection.  With limited trust placed in the <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> (see
<xref target="security"/>), <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> are assured that requests are not uniquely attributed to
them or linked to other requests.</t>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>An Oblivious HTTP <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> must initially know the following:</t>
      <ul spacing="normal">
        <li>The identity of an <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref>.  This might include some
information about what Target Resources the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref>
supports.</li>
        <li>The details of an HPKE public key for the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref>,
including an identifier for that key and the HPKE algorithms that are used
with that key.</li>
        <li>The identity of an <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> that will accept relay requests
carrying an <iref item="Encapsulated Request"/><xref target="dfn-enc-req" format="none">Encapsulated Request</xref> as its content and forward the content in
these requests to a particular <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref>.  Oblivious HTTP
uses a one-to-one mapping between <iref item="Oblivious Relay and Gateway Resources"/><xref target="dfn-relay" format="none">Oblivious Relay and Gateway Resources</xref>; see
<xref target="proxy-state"/> for more details.</li>
      </ul>
      <t>This information allows the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> to send HTTP requests to the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious
Gateway Resource</xref> for forwarding to a <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref>.  The <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway
Resource</xref> does not learn the client's IP address or any other identifying
information that might be revealed from the client at the transport layer, nor
does the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> learn which of the requests it receives are
from the same <iref item="Client"/><xref target="dfn-client" format="none">Client</xref>.</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="480" width="560" viewBox="0 0 560 480" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
              <path d="M 8,48 L 8,96" fill="none" stroke="black"/>
              <path d="M 48,96 L 48,464" fill="none" stroke="black"/>
              <path d="M 88,48 L 88,96" fill="none" stroke="black"/>
              <path d="M 152,48 L 152,96" fill="none" stroke="black"/>
              <path d="M 192,96 L 192,464" fill="none" stroke="black"/>
              <path d="M 240,48 L 240,96" fill="none" stroke="black"/>
              <path d="M 272,48 L 272,96" fill="none" stroke="black"/>
              <path d="M 296,48 L 296,96" fill="none" stroke="black"/>
              <path d="M 360,96 L 360,464" fill="none" stroke="black"/>
              <path d="M 384,48 L 384,96" fill="none" stroke="black"/>
              <path d="M 440,48 L 440,96" fill="none" stroke="black"/>
              <path d="M 480,96 L 480,464" fill="none" stroke="black"/>
              <path d="M 528,48 L 528,96" fill="none" stroke="black"/>
              <path d="M 552,48 L 552,96" fill="none" stroke="black"/>
              <path d="M 288,32 L 536,32" fill="none" stroke="black"/>
              <path d="M 8,48 L 88,48" fill="none" stroke="black"/>
              <path d="M 152,48 L 240,48" fill="none" stroke="black"/>
              <path d="M 296,48 L 384,48" fill="none" stroke="black"/>
              <path d="M 440,48 L 528,48" fill="none" stroke="black"/>
              <path d="M 8,96 L 88,96" fill="none" stroke="black"/>
              <path d="M 152,96 L 240,96" fill="none" stroke="black"/>
              <path d="M 296,96 L 384,96" fill="none" stroke="black"/>
              <path d="M 440,96 L 528,96" fill="none" stroke="black"/>
              <path d="M 288,112 L 352,112" fill="none" stroke="black"/>
              <path d="M 368,112 L 472,112" fill="none" stroke="black"/>
              <path d="M 488,112 L 536,112" fill="none" stroke="black"/>
              <path d="M 48,192 L 184,192" fill="none" stroke="black"/>
              <path d="M 192,256 L 352,256" fill="none" stroke="black"/>
              <path d="M 360,272 L 472,272" fill="none" stroke="black"/>
              <path d="M 368,320 L 480,320" fill="none" stroke="black"/>
              <path d="M 200,384 L 360,384" fill="none" stroke="black"/>
              <path d="M 56,448 L 192,448" fill="none" stroke="black"/>
              <path d="M 288,32 C 279.16936,32 272,39.16936 272,48" fill="none" stroke="black"/>
              <path d="M 536,32 C 544.83064,32 552,39.16936 552,48" fill="none" stroke="black"/>
              <path d="M 288,112 C 279.16936,112 272,104.83064 272,96" fill="none" stroke="black"/>
              <path d="M 536,112 C 544.83064,112 552,104.83064 552,96" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="480,272 468,266.4 468,277.6" fill="black" transform="rotate(0,472,272)"/>
              <polygon class="arrowhead" points="376,320 364,314.4 364,325.6" fill="black" transform="rotate(180,368,320)"/>
              <polygon class="arrowhead" points="360,256 348,250.4 348,261.6" fill="black" transform="rotate(0,352,256)"/>
              <polygon class="arrowhead" points="208,384 196,378.4 196,389.6" fill="black" transform="rotate(180,200,384)"/>
              <polygon class="arrowhead" points="192,192 180,186.4 180,197.6" fill="black" transform="rotate(0,184,192)"/>
              <polygon class="arrowhead" points="64,448 52,442.4 52,453.6" fill="black" transform="rotate(180,56,448)"/>
              <g class="text">
                <text x="44" y="68">Client</text>
                <text x="184" y="68">Relay</text>
                <text x="336" y="68">Gateway</text>
                <text x="476" y="68">Target</text>
                <text x="196" y="84">Resource</text>
                <text x="340" y="84">Resource</text>
                <text x="484" y="84">Resource</text>
                <text x="80" y="132">Relay</text>
                <text x="88" y="148">Request</text>
                <text x="68" y="164">[+</text>
                <text x="132" y="164">Encapsulated</text>
                <text x="112" y="180">Request</text>
                <text x="152" y="180">]</text>
                <text x="232" y="196">Gateway</text>
                <text x="232" y="212">Request</text>
                <text x="212" y="228">[+</text>
                <text x="276" y="228">Encapsulated</text>
                <text x="256" y="244">Request</text>
                <text x="296" y="244">]</text>
                <text x="400" y="260">Request</text>
                <text x="436" y="308">Response</text>
                <text x="320" y="324">Gateway</text>
                <text x="316" y="340">Response</text>
                <text x="236" y="356">[+</text>
                <text x="300" y="356">Encapsulated</text>
                <text x="300" y="372">Response</text>
                <text x="344" y="372">]</text>
                <text x="160" y="388">Relay</text>
                <text x="148" y="404">Response</text>
                <text x="68" y="420">[+</text>
                <text x="132" y="420">Encapsulated</text>
                <text x="132" y="436">Response</text>
                <text x="176" y="436">]</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 forward a request for a <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref> to the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway
Resource</xref>, the following steps occur, as shown in <xref target="fig-overview"/>:</t>
      <ol spacing="normal" type="1"><li>The <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> constructs an HTTP request for a <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref>.</li>
        <li>The <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> 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 <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> sends a POST request to the <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> with the
<iref item="Encapsulated Request"/><xref target="dfn-enc-req" format="none">Encapsulated Request</xref> as the content of that message.</li>
        <li>The <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> forwards this request to the Oblivious Gateway
resource.</li>
        <li>The <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> receives this request and removes
the HPKE protection to obtain an HTTP request.</li>
      </ol>
      <t>The <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> then handles the HTTP request. This typically
involves making an HTTP request using the content of the <iref item="Encapsulated Request"/><xref target="dfn-enc-req" format="none">Encapsulated Request</xref>. Once the
<iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> has an HTTP response for this request, the following
steps occur to return this response to the client:</t>
      <ol spacing="normal" type="1"><li>The <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> encapsulates the HTTP response following the
process in <xref target="response"/> and sends this in response to the request from the
<iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref>.</li>
        <li>The <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> forwards this response to the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref>.</li>
        <li>The <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> removes the encapsulation to obtain the response to the original
 request.</li>
      </ol>
      <t>This interaction provides authentication and confidentiality protection between
the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> and the Oblivious Gateway, but importantly not between the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> and
the <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref>. While the <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref> is a distinct HTTP resource from
the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref>, they are both logically under the control of the
Oblivious Gateway, since the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> can unilaterally dictate
the responses returned from the <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref> to the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref>. This arrangement
is shown in <xref target="fig-overview"/>.</t>
      <section anchor="applicability">
        <name>Applicability</name>
        <t>Oblivious HTTP has limited applicability.  Imporantly, it requires expicit
support from a willing <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> and <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref>,
thereby limiting the use of Oblivious HTTP for generic applications;
see <xref target="server-responsibilities"/> for more information.</t>
        <t>Many uses of HTTP benefit from being able to carry state between requests,
such as with cookies (<xref target="COOKIES"/>), authentication (<xref section="11" sectionFormat="of" target="HTTP"/>),
or even alternative services (<xref target="RFC7838"/>).  Oblivious HTTP removes linkage
at the transport layer, which is only useful for an application
that does not carry state between requests.</t>
        <t>Oblivious HTTP is primarily useful where privacy risks associated with possible
stateful treatment of requests are sufficiently large that the cost of deploying
this protocol can be justified.  Oblivious HTTP is simpler and less costly than
more robust systems, like Prio (<xref target="PRIO"/>) or Tor (<xref target="DMS2004"/>), which can
provide stronger guarantees at higher operational costs.</t>
        <t>Oblivious HTTP is more costly than a direct connection to a server.  Some costs,
like those involved with connection setup, can be amortized, but there are
several ways in which Oblivious HTTP is more expensive than a direct request:</t>
        <ul spacing="normal">
          <li>Each request requires at least two regular HTTP requests, which could
increase latency.</li>
          <li>Each request is expanded in size with additional HTTP fields,
encryption-related metadata, and AEAD expansion.</li>
          <li>Deriving cryptographic keys and applying them for request and
response protection takes non-negligible computational resources.</li>
        </ul>
        <t>Examples of where preventing the linking of requests might justify these costs
include:</t>
        <ul spacing="normal">
          <li>DNS queries.  DNS queries made to a recursive resolver reveal information
about the requester, particularly if linked to other queries.</li>
          <li>Telemetry submission.  Applications that submit reports about their usage to
their developers might use Oblivious HTTP for some types of moderately
sensitive data.</li>
        </ul>
        <t>These are examples of requests where there is information in a request that - if
it were connected to the identity of the user - might allow a server to learn
something about that user even if the identity of the user is pseudonymous.
Other examples include the submission of anonymous surveys, making search
queries, or requesting location-specific content (such as retrieving tiles of a
map display).</t>
        <t>In addition to these limitations, <xref target="security"/> describes operational constraints
that are necessary to realize the goals of the protocol.</t>
      </section>
      <section anchor="conventions-and-definitions">
        <name>Conventions and Definitions</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <t>This document uses terminology from <xref target="HTTP"/> and defines several terms as
follows:</t>
        <dl>
          <dt><iref item="Client"/><xref target="dfn-client" format="none">Client</xref>:</dt>
          <dd>
            <t anchor="dfn-client">A <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> originates Oblivious HTTP requests.  A <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> is also an HTTP client
in two ways: for the <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref> and for the <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay
Resource</xref>. However, when referring to the HTTP definition of client (<xref section="3.3" sectionFormat="of" target="HTTP"/>), the term "HTTP client" is used; see <xref target="http-usage"/>.</t>
          </dd>
          <dt><iref item="Encapsulated Request"/><xref target="dfn-enc-req" format="none">Encapsulated Request</xref>:</dt>
          <dd>
            <t anchor="dfn-enc-req">An HTTP request that is encapsulated in an HPKE-encrypted message; see
<xref target="request"/>.</t>
          </dd>
          <dt><iref item="Encapsulated Response"/><xref target="dfn-enc-res" format="none">Encapsulated Response</xref>:</dt>
          <dd>
            <t anchor="dfn-enc-res">An HTTP response that is encapsulated in an HPKE-encrypted message; see
<xref target="response"/>.</t>
          </dd>
          <dt><iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref>:</dt>
          <dd>
            <t anchor="dfn-relay">An intermediary that forwards Encapsulated Requests and Responses between
<iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> and a single <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref>.  In context, this can be
referred to as simply a "relay".</t>
          </dd>
          <dt><iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref>:</dt>
          <dd>
            <t anchor="dfn-gateway">A resource that can receive an <iref item="Encapsulated Request"/><xref target="dfn-enc-req" format="none">Encapsulated Request</xref>, extract the contents of
that request, forward it to a <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref>, receive a response, encapsulate
that response, then return the resulting <iref item="Encapsulated Response"/><xref target="dfn-enc-res" format="none">Encapsulated Response</xref>.  In context,
this can be referred to as simply a "gateway".</t>
          </dd>
          <dt><iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref>:</dt>
          <dd>
            <t anchor="dfn-target">The resource that is the target of an <iref item="Encapsulated Request"/><xref target="dfn-enc-req" format="none">Encapsulated Request</xref>.  This resource
logically handles only regular HTTP requests and responses and so might be
ignorant of the use of Oblivious HTTP to reach it.</t>
          </dd>
        </dl>
        <t>This document includes pseudocode that uses the functions and conventions
defined in <xref target="HPKE"/>.</t>
        <t>Encoding an integer to a sequence of bytes in network byte order is described
using the function <tt>encode(n, v)</tt>, where <tt>n</tt> is the number of bytes and <tt>v</tt> is
the integer value.  ASCII <xref target="ASCII"/> encoding of a string <tt>s</tt> is
indicated using the function <tt>encode_str(s)</tt>.</t>
        <t>Formats are described using notation from <xref section="1.3" sectionFormat="of" target="QUIC"/>.  An extension
to that notation expresses the number of bits in a field using a simple
mathematical function.</t>
      </section>
    </section>
    <section anchor="key-configuration">
      <name>Key Configuration</name>
      <t>A <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> needs to acquire information about the <iref item="key configuration"/><xref target="key-configuration" format="none">key configuration</xref> of the
<iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> in order to send Encapsulated Requests.
In order to ensure that <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> do not encapsulate messages that other entities
can intercept, the <iref item="key configuration"/><xref target="key-configuration" format="none">key configuration</xref> <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
<iref item="Client"/><xref target="dfn-client" format="none">Client</xref> implementations can be configured in the same way and also
enables advertising <iref item="key configurations"/><xref target="key-configuration" format="none">key configurations</xref> in a consistent format.  This
format might be used, for example with HTTPS, as part of a system for
configuring or discovering <iref item="key configurations"/><xref target="key-configuration" format="none">key configurations</xref>.  Note however that such
a system needs to consider the potential for <iref item="key configuration"/><xref target="key-configuration" format="none">key configuration</xref> to be
used to compromise <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> privacy; see <xref target="privacy"/>.</t>
      <t>A <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> might have multiple <iref item="key configurations"/><xref target="key-configuration" format="none">key configurations</xref> to select from when
encapsulating a request. <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> are responsible for selecting a preferred <iref item="key configuration"/><xref target="key-configuration" format="none">key
configuration</xref> from those it supports. <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> 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 <iref item="key configuration"/><xref target="key-configuration" format="none">key configuration</xref> consists of a key identifier, a public key, an
identifier for the KEM that the public key uses, and a set of 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 <iref item="key configuration"/><xref target="key-configuration" format="none">key configuration</xref>.</t>
        <figure anchor="format-key-config">
          <name>A Single Key Configuration</name>
          <sourcecode type="tls-syntax"><![CDATA[
HPKE Symmetric Algorithms {
  HPKE KDF ID (16),
  HPKE AEAD ID (16),
}

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

{"type":"https://iana.org/assignments/http-problem-types#ohttp-key",
"title": "key identifier unknown"}
]]></sourcecode>
        </figure>
        <t>As this response cannot be encrypted, it might not reach the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref>.  A <iref item="Client"/><xref target="dfn-client" format="none">Client</xref>
cannot rely on the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> using this problem type.  A <iref item="Client"/><xref target="dfn-client" format="none">Client</xref>
might also be configured to disregard responses that are not encapsulated on the
basis that they might be subject to observation or modification by an <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious
Relay Resource</xref>.  A <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> might manage the risk of an outdated <iref item="key configuration"/><xref target="key-configuration" format="none">key configuration</xref>
using a heuristic approach whereby it periodically refreshes its <iref item="key configuration"/><xref target="key-configuration" format="none">key
configuration</xref> if it receives a response with an error status code that has not
been encapsulated.</t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>In this design, a <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> wishes to make a request to an <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref>
that is forwarded to a <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref>. The <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> 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 <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> (that is, the
<iref item="Client"/><xref target="dfn-client" format="none">Client</xref> IP address and TCP or UDP port number the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> uses to create a
connection).</li>
        <li>Any other request the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> might have made in the past or might make in
the future.</li>
      </ol>
      <t>In order to ensure this, the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> selects a relay (that serves the
<iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref>) that it trusts will protect this information
by forwarding the <iref item="Encapsulated Request"/><xref target="dfn-enc-req" format="none">Encapsulated Request</xref> and Response without passing it
to the server (that serves the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref>).</t>
      <t>In this section, a deployment where there are three entities is considered:</t>
      <ul spacing="normal">
        <li>A <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> makes requests and receives responses</li>
        <li>A relay operates the <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref></li>
        <li>A server operates both the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> and the <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref></li>
      </ul>
      <t><xref target="separate-target"/> discusses the security implications for a case where
different servers operate the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> and <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref>.</t>
      <t>Requests from the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> to <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> and from <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay
Resource</xref> to <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> <bcp14>MUST</bcp14> use HTTPS in order to provide
unlinkability in the presence of a network observer.</t>
      <t>To achieve the stated privacy goals, the <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> cannot be
operated by the same entity as the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref>. However,
colocation of the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> and <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref> simplifies the
interactions between those resources without affecting <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> 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 <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> and <iref item="Oblivious Gateway Resources"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resources</xref>.
In particular, the <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> knows the origin and destination
of an <iref item="Encapsulated Request"/><xref target="dfn-enc-req" format="none">Encapsulated Request</xref> and Response, yet does not know the decrypted contents.
Likewise, <iref item="Oblivious Gateway Resources"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resources</xref> learn only the <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> and
the decrypted request.  No entity other than the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> can see the plaintext
request and response and can attribute them to the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref>.</li>
        <li>Oblivous Gateway Resources, and therefore Target Resources, cannot link requests
from the same <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> in the absence of unique per-<iref item="Client"/><xref target="dfn-client" format="none">Client</xref> 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="sec-client">
        <name>Client Responsibilities</name>
        <t>Because <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> do not authenticate the <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref> when using Oblivious HTTP,
<iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> <bcp14>MUST</bcp14> maintain an explicit allowlist of target resources that the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> trusts
an Oblivious Gateway to respond for, and check requests against this allowlist before
sending them. This ensures that <iref item="Oblivious Gateway Resources"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resources</xref> are not abused to forward
traffic to arbitrary Target Resources. See <xref target="server-responsibilities"/> for
similar responsibilities that apply to <iref item="Oblivious Gateway Resources"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resources</xref>.</t>
        <t><iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> <bcp14>MUST</bcp14> ensure that the <iref item="key configuration"/><xref target="key-configuration" format="none">key configuration</xref> they select for generating
Encapsulated Requests is integrity protected and authenticated so that it can
be attributed to the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref>; see <xref target="key-configuration"/>.</t>
        <t>Since <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> connect directly to the <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> instead of the <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref>, application
configurations wherein <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> 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 <iref item="key configurations"/><xref target="key-configuration" format="none">key configurations</xref> 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><iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> cannot carry connection-level state between requests as they only
establish direct connections to the relay responsible for the Oblivious Relay
resource.  However, the content of requests might be used by a server to
correlate requests.  Cookies <xref target="COOKIES"/> are the most obvious feature
that might be used to correlate requests, but any identity information and
authentication credentials might have the same effect.  <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> also need to
treat information learned from responses with similar care when constructing
subsequent requests, which includes the identity of resources.</t>
        <t><iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> <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 <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> sends to the <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> only requires
minimal information; see <xref target="http-usage"/>. The request that carries the
<iref item="Encapsulated Request"/><xref target="dfn-enc-req" format="none">Encapsulated Request</xref> and is sent to the <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> <bcp14>MUST NOT</bcp14>
include identifying information unless the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> can trust that this
information is removed by the relay. A <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> <bcp14>MAY</bcp14> include information only for
the <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> in header fields identified by the Connection
header field if it trusts the relay to remove these as required by <xref section="7.6.1" sectionFormat="of" target="HTTP"/>. The <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> needs to trust that the relay does not replicate the
source addressing information in the request it forwards.</t>
        <t><iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> rely on the <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> 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 <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> has a very simple function
to perform. For each request it receives, it makes a request of the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious
Gateway Resource</xref> that includes the same content. When it receives a response,
it sends a response to the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> that includes the content of the response
from the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref>.</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 <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref>, but additional care is
needed to ensure that <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> privacy is maintained.</t>
        <t>Firstly, a generic implementation will forward unknown fields.  For Oblivious
HTTP, an <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> <bcp14>SHOULD NOT</bcp14> forward unknown fields.  Though
<iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> 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 <iref item="Client"/><xref target="dfn-client" format="none">Client</xref>, 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 <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref>, except for information that
a <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> is aware of; see <xref target="differential"/>.</t>
        <t>Finally, a relay can also generate responses, though it is assumed to not be able
to examine the content of a request (other than to observe the choice of key
identifier, KDF, and AEAD), so it is also assumed that it cannot generate an
<iref item="Encapsulated Response"/><xref target="dfn-enc-res" format="none">Encapsulated Response</xref>.</t>
        <section anchor="differential">
          <name>Differential Treatment</name>
          <t>A relay <bcp14>MAY</bcp14> add information to requests if the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> is aware of the nature of
the information that could be added.  Any addition <bcp14>MUST NOT</bcp14> include information
that uniquely and permanently identifies the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref>, including any pseudonymous identifier.
Information added by the relay - beyond what is already revealed through
encapsulated requests from <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> - can reduce the size of the anonymity set of
<iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> at a gateway.</t>
          <t>A <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> 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.  How
a <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> might learn about added information is not defined in this document.</t>
          <t>Moreover, relays <bcp14>MAY</bcp14> apply differential treatment to <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> that engage in abusive
behavior, e.g., by sending too many requests in comparison to other <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref>,
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
<iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> using a gateway. For example, if a relay chooses to rate limit or
block an abusive <iref item="Client"/><xref target="dfn-client" format="none">Client</xref>, this means that any <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> requests which are not
treated this way are known to be non-abusive by the gateway. <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> need to
consider the likelihood of such differential treatment and the privacy
risks when using a relay.</t>
          <t>Some patterns of abuse cannot be detected without access to the request that
is made to the target. This means that only the gateway or target are in a
position to identify abuse. A gateway <bcp14>MAY</bcp14> send signals toward the relay to
provide feedback about specific requests. For example, a gateway could respond
differently to requests it cannot decapsulate, as mentioned in <xref target="errors"/>. A
relay that acts on this feedback could - either inadvertently or by
design - lead to <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> deanonymization.</t>
        </section>
        <section anchor="dos">
          <name>Denial of Service</name>
          <t>As there are privacy benefits from having a large rate of requests forwarded by
the same relay (see <xref target="ta"/>), servers that operate the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref>
might need an arrangement with <iref item="Oblivious Relay Resources"/><xref target="dfn-relay" format="none">Oblivious Relay Resources</xref>. 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
<iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref>. That is, if a server allows requests from the relay to be exempt from
rate limits, the server might want to ensure that the relay applies a rate
limiting policy that is acceptable to the server.</t>
          <t>Servers that enter into an agreement with a relay that enables a higher request
rate might choose to authenticate the relay to enable the higher rate.</t>
        </section>
        <section anchor="ta">
          <name>Traffic Analysis</name>
          <t>Using HTTPS protects information about which resources are the subject of
request and prevents a network observer from being able to trivially correlate
messages on either side of a relay.  However, using HTTPS does not prevent
traffic analysis by such network observers.</t>
          <t>The time at which <iref item="Encapsulated Request"/><xref target="dfn-enc-req" format="none">Encapsulated Request</xref> or response messages are sent can
reveal information to a network observer. Though messages exchanged between the
<iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> and the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> might be sent in a
single connection, traffic analysis could be used to match messages that are
forwarded by the relay.</t>
          <t>A relay could, as part of its function, delay requests before forwarding them.
Delays might increase the anonymity set into which each request is
attributed. Any delay also increases the time that a <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> waits for a
response, so delays <bcp14>SHOULD</bcp14> only be added with the consent - or at least
awareness - of <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref>.</t>
          <t>A relay that forwards large volumes of exchanges can provide better privacy by
providing larger sets of messages that need to be matched.</t>
          <t>Traffic analysis is not restricted to network observers. A malicious <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> could
use traffic analysis to learn information about otherwise encrypted requests
and responses relayed between <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> and gateways. An <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> terminates
TLS connections from <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref>, so they see message boundaries. This privileged
position allows for richer feature extraction from encrypted data, which might
improve traffic analysis.</t>
          <t><iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> and <iref item="Oblivious Gateway Resources"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resources</xref> can use padding to reduce the
effectiveness of traffic analysis.  Padding is a capability provided by binary
HTTP messages; see <xref section="3.8" sectionFormat="of" target="BINARY"/>.  If the encapsulation method
described in this document is used to protect a different message type (see
<xref target="repurposing"/>), that message format might need to include padding support.
<iref item="Oblivious Relay Resources"/><xref target="dfn-relay" format="none">Oblivious Relay Resources</xref> can also use padding for the same reason, but need to
operate at the HTTP layer since they cannot manipulate binary HTTP messages; for example,
see <xref section="10.7" sectionFormat="of" target="HTTP2"/> or <xref section="10.7" sectionFormat="of" target="HTTP3"/>).</t>
        </section>
      </section>
      <section anchor="server-responsibilities">
        <name>Server Responsibilities</name>
        <t>The <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> can be operated by a different entity than the
<iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref>.  However, this means that the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> needs to trust the
<iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> not to modify requests or responses.  This analysis
concerns itself with a deployment scenario where a single server provides both
the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> and <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref>.</t>
        <t>A server that operates both Oblivious Gateway and Target Resources is
responsible for removing request encryption, generating a response to the
<iref item="Encapsulated Request"/><xref target="dfn-enc-req" format="none">Encapsulated Request</xref>, 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 <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> and <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref>,
these entities might need an arrangement similar to that between server and
relay for managing denial of service; see <xref target="dos"/>. Moreover, the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway
Resource</xref> <bcp14>SHOULD</bcp14> apply some form of allowlist to ensure that the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway
Resource</xref> is not misused as a relay for HTTP messages to an arbitrary <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref>.</t>
        <t>Non-secure requests - such as those with the "http" scheme as opposed to the
"https" scheme - <bcp14>SHOULD NOT</bcp14> be used if the Oblivious Gateway and Target
Resources are not on the same origin.  If messages are forwarded between these
resources without the protections afforded by HTTPS, they could be inspected or
modified by a network attacker.  Note that a request could be forwarded without
protection if the two resources share an origin.</t>
      </section>
      <section anchor="key-management">
        <name>Key Management</name>
        <t>An <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> needs to have a plan for replacing keys. This
might include regular replacement of keys, which can be assigned new key
identifiers. If an <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> 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 <iref item="Encapsulated Request"/><xref target="dfn-enc-req" format="none">Encapsulated Request</xref> cannot be successfully
decrypted using the key.</t>
        <t>A server <bcp14>MUST</bcp14> ensure that the HPKE keys it uses are not valid for any other
protocol that uses HPKE with the "message/bhttp request" label.  Designers of
protocols that reuse this encryption format, especially new versions of this
protocol, can ensure key diversity by choosing a different label in their use of
HPKE.  The "message/bhttp response" label was chosen for symmetry only as it
provides key diversity only within the HPKE context created using the
"message/bhttp request" label; see <xref target="repurposing"/>.</t>
      </section>
      <section anchor="replay">
        <name>Replay Attacks</name>
        <t>A server is responsible for either rejecting replayed requests or ensuring that
the effect of replays does not adversely affect <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> or resources.</t>
        <t>Encrypted requests can be copied and replayed by the Oblivious Relay
resource. The threat model for Oblivious HTTP allows the possibility that an
<iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> might replay requests. Furthermore, if a <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> sends
an <iref item="Encapsulated Request"/><xref target="dfn-enc-req" format="none">Encapsulated Request</xref> 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
effects on their operation.  This section describes some approaches that are
universally applicable and suggestions for more targeted techniques.</t>
        <t>A <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> or <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> <bcp14>MUST NOT</bcp14> automatically attempt to retry a
failed request unless it receives a positive signal indicating that the request
was not processed or forwarded. The HTTP/2 REFUSED_STREAM error code (<xref section="8.1.4" sectionFormat="of" target="HTTP2"/>), the HTTP/3 H3_REQUEST_REJECTED error code (<xref section="8.1" sectionFormat="of" target="HTTP3"/>), or a GOAWAY frame with a low enough identifier (in either protocol
version) are all sufficient signals that no processing occurred. HTTP/1.1
<xref target="HTTP11"/> provides no equivalent signal.  Connection failures or interruptions
are not sufficient signals that no processing occurred.</t>
        <t>The anti-replay mechanisms described in <xref section="8" sectionFormat="of" target="TLS"/> are generally
applicable to Oblivious HTTP requests. The encapsulated keying material (or
<tt>enc</tt>) can be used in place of a nonce to uniquely identify a request.  This
value is a high-entropy value that is freshly generated for every request, so
two valid requests will have different values with overwhelming probability.</t>
        <t>The mechanism used in TLS for managing differences in <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> 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><iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> <bcp14>SHOULD</bcp14> include a <tt>Date</tt> header field in Encapsulated Requests, unless
the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> has prior knowledge that indicates that the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway
Resource</xref> does not use <tt>Date</tt> for anti-replay purposes.</t>
          <t>Though HTTP requests often do not include a <tt>Date</tt> header field, the value of
this field might be used by a server to limit the amount of requests it needs to
track if it needs to prevent replay attacks.</t>
          <t>An <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> can maintain state for requests for a small window
of time over which it wishes to accept requests.  The <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref>
can store all requests it processes within this window.  Storing just the <tt>enc</tt>
field of a request, which should be unique to each request, is sufficient.  The
<iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> can reject any request that is the same as one that
was previously answered within that time window or if the <tt>Date</tt> header field
from the decrypted request is outside of the current time window.</t>
          <t><iref item="Oblivious Gateway Resources"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resources</xref> might need to allow for the time it takes requests
to arrive from the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref>, with a time window that is large enough to allow for
differences in clocks.  Insufficient tolerance of time differences could result
in valid requests being unnecessarily rejected.  Beyond allowing for multiple
round trip times -- to account for retransmission -- network delays are unlikely
to be significant in determining the size of the window, unless all potential
<iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> are known to have excellent time-keeping.  A specific window size might
need to be determined experimentally.</t>
          <t><iref item="Oblivious Gateway Resources"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resources</xref> <bcp14>MUST NOT</bcp14> treat the time window as secret
information. An attacker can actively probe with different values for the <tt>Date</tt>
field to determine the time window over which the server will accept responses.</t>
        </section>
        <section anchor="date-fix">
          <name>Correcting Clock Differences</name>
          <t>An <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> can reject requests that contain a <tt>Date</tt> value
that is outside of its active window with a 400 series status code.  The problem
type <xref target="PROBLEM"/> of
"https://iana.org/assignments/http-problem-types#date" is defined to allow the
server to signal that the <tt>Date</tt> value in the request was unacceptable.</t>
          <t><xref target="fig-date-reject"/> shows an example response in HTTP/1.1 format.</t>
          <figure anchor="fig-date-reject">
            <name>Example Rejection of Request Date Field</name>
            <sourcecode type="http-message"><![CDATA[
HTTP/1.1 400 Bad Request
Date: Mon, 07 Feb 2022 00:28:05 GMT
Content-Type: application/problem+json
Content-Length: 128

{"type":"https://iana.org/assignments/http-problem-types#date",
"title": "date field in request outside of acceptable range"}
]]></sourcecode>
          </figure>
          <t>Disagreements about time are unlikely if both <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> and <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway
Resource</xref> have a good source of time; see <xref target="NTP"/>. However, clock
differences are known to be commonplace; see Section 7.1 of
<xref target="CLOCKSKEW"/>.</t>
          <t>Including a <tt>Date</tt> header field in the response allows the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> to correct
clock errors by retrying the same request using the value of the <tt>Date</tt> field
provided by the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref>.  The value of the <tt>Date</tt> field can
be copied if the response is fresh, with an adjustment based on the <tt>Age</tt> field
otherwise; see <xref section="4.2" sectionFormat="of" target="HTTP-CACHING"/>.  When retrying a request, the
<iref item="Client"/><xref target="dfn-client" format="none">Client</xref> <bcp14>MUST</bcp14> create a fresh encryption of the modified request, using a new HPKE
context.</t>
          <figure anchor="fig-retry-date">
            <name>Retrying with an Updated Date Field</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="304" width="464" viewBox="0 0 464 304" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                  <path d="M 8,32 L 8,80" fill="none" stroke="black"/>
                  <path d="M 48,80 L 48,288" fill="none" stroke="black"/>
                  <path d="M 88,32 L 88,80" fill="none" stroke="black"/>
                  <path d="M 152,32 L 152,80" fill="none" stroke="black"/>
                  <path d="M 192,80 L 192,128" fill="none" stroke="black"/>
                  <path d="M 192,160 L 192,192" fill="none" stroke="black"/>
                  <path d="M 192,224 L 192,256" fill="none" stroke="black"/>
                  <path d="M 288,80 L 288,288" fill="none" stroke="black"/>
                  <path d="M 312,32 L 312,80" fill="none" stroke="black"/>
                  <path d="M 368,32 L 368,80" fill="none" stroke="black"/>
                  <path d="M 408,80 L 408,288" fill="none" stroke="black"/>
                  <path d="M 456,32 L 456,80" fill="none" stroke="black"/>
                  <path d="M 8,32 L 88,32" fill="none" stroke="black"/>
                  <path d="M 152,32 L 312,32" fill="none" stroke="black"/>
                  <path d="M 368,32 L 456,32" fill="none" stroke="black"/>
                  <path d="M 8,80 L 88,80" fill="none" stroke="black"/>
                  <path d="M 152,80 L 312,80" fill="none" stroke="black"/>
                  <path d="M 368,80 L 456,80" fill="none" stroke="black"/>
                  <path d="M 48,142 L 280,142" fill="none" stroke="black"/>
                  <path d="M 48,146 L 280,146" fill="none" stroke="black"/>
                  <path d="M 288,144 L 400,144" fill="none" stroke="black"/>
                  <path d="M 56,206 L 288,206" fill="none" stroke="black"/>
                  <path d="M 56,210 L 288,210" fill="none" stroke="black"/>
                  <path d="M 296,208 L 408,208" fill="none" stroke="black"/>
                  <path d="M 48,270 L 280,270" fill="none" stroke="black"/>
                  <path d="M 48,274 L 280,274" fill="none" stroke="black"/>
                  <path d="M 288,272 L 400,272" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="408,272 396,266.4 396,277.6" fill="black" transform="rotate(0,400,272)"/>
                  <polygon class="arrowhead" points="408,144 396,138.4 396,149.6" fill="black" transform="rotate(0,400,144)"/>
                  <polygon class="arrowhead" points="304,208 292,202.4 292,213.6" fill="black" transform="rotate(180,296,208)"/>
                  <polygon class="arrowhead" points="288,272 276,266.4 276,277.6" fill="black" transform="rotate(0,280,272)"/>
                  <polygon class="arrowhead" points="288,144 276,138.4 276,149.6" fill="black" transform="rotate(0,280,144)"/>
                  <polygon class="arrowhead" points="64,208 52,202.4 52,213.6" fill="black" transform="rotate(180,56,208)"/>
                  <g class="text">
                    <text x="44" y="52">Client</text>
                    <text x="184" y="52">Relay</text>
                    <text x="224" y="52">and</text>
                    <text x="272" y="52">Gateway</text>
                    <text x="404" y="52">Target</text>
                    <text x="232" y="68">Resources</text>
                    <text x="412" y="68">Resource</text>
                    <text x="96" y="132">Request</text>
                    <text x="312" y="180">400</text>
                    <text x="364" y="180">Response</text>
                    <text x="352" y="196">+</text>
                    <text x="380" y="196">Date</text>
                    <text x="96" y="244">Request</text>
                    <text x="72" y="260">+</text>
                    <text x="112" y="260">Updated</text>
                    <text x="164" y="260">Date</text>
                    <text x="192" y="292">|</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
+---------+       +-------------------+      +----------+
| Client  |       | Relay and Gateway |      | Target   |
|         |       |     Resources     |      | Resource |
+----+----+       +----+-----------+--+      +----+-----+
     |                 |           |              |
     |                 |           |              |
     |  Request        |           |              |
     +============================>+------------->|
     |                 |           |              |
     |                 |           | 400 Response |
     |                 |           |       + Date |
     |<============================+<-------------+
     |                 |           |              |
     |  Request        |           |              |
     |  + Updated Date |           |              |
     +============================>+------------->|
     |                 |           |              |
]]></artwork>
            </artset>
          </figure>
          <t>Retrying immediately allows the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> to measure the round
trip time to the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref>. The observed delay might reveal something about the
location of the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref>.  <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> could delay retries to add some uncertainty to
any observed delay.</t>
          <t>Intermediaries can sometimes rewrite the <tt>Date</tt> field when forwarding responses.
This might cause problems if the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> and intermediary
clocks differ by enough to cause the retry to be rejected.  Therefore, <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref>
            <bcp14>MUST NOT</bcp14> retry a request with an adjusted date more than once.</t>
          <t><iref item="Oblivious Gateway Resources"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resources</xref> that condition their responses on the <tt>Date</tt> header
field <bcp14>SHOULD</bcp14> either ensure that intermediaries do not cache responses (by
including a <tt>Cache-Control</tt> directive of <tt>no-store</tt>) or designate the response
as conditional on the value of the <tt>Date</tt> request header field (by including the
token "date" in a <tt>Vary</tt> header field).</t>
          <t><iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> <bcp14>MUST NOT</bcp14> use the date provided by the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> for any
other purpose, including future requests to any resource.  Any request that uses
information provided by the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> might be correlated using
that information.</t>
        </section>
      </section>
      <section anchor="forward-secrecy">
        <name>Forward Secrecy</name>
        <t>This document does not provide forward secrecy for either requests or
responses during the lifetime of the <iref item="key configuration"/><xref target="key-configuration" format="none">key configuration</xref>. A measure of
forward secrecy can be provided by generating a new <iref item="key configuration"/><xref target="key-configuration" format="none">key configuration</xref>
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 <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> only needs to retain keying material that might be used to compromise
the confidentiality and integrity of a response until that response is consumed,
so there is negligible risk associated with a <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> 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 <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> 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 <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> with the <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> as messages are
protected by TLS.  Use of a compromised key also requires that the <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious
Relay Resource</xref> cooperate with the attacker or that the attacker is able to
compromise these TLS connections.</t>
        <t>The total number of messages affected by server key compromise can be limited by
regular rotation of server keys.</t>
      </section>
      <section anchor="client-clock-exposure">
        <name>Client Clock Exposure</name>
        <t>Including a <tt>Date</tt> field in requests reveals some information about the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref>
clock.  This might be used to fingerprint <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> <xref target="UWT"/> or to identify <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref>
that are vulnerable to attacks that depend on incorrect clocks.</t>
        <t><iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> can randomize the value that they provide for <tt>Date</tt> to obscure the true
value of their clock and reduce the chance of linking of requests over time.
However, this increases the risk that their request is rejected as outside the
acceptable window.</t>
      </section>
      <section anchor="sec-media">
        <name>Media Type Security</name>
        <t>The <iref item="key configuration"/><xref target="key-configuration" format="none">key configuration</xref> media type defined in <xref target="ohttp-keys"/> represents keying
material.  The content of this media type is not active (see <xref section="4.6" sectionFormat="of" target="RFC6838"/>), but it governs how a <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> might interact with an <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway
Resource</xref>.  The security implications of processing it are described in
<xref target="sec-client"/>; privacy implications are described in <xref target="privacy"/>.</t>
        <t>The security implications of handling the message media types defined in
<xref target="req-res-media"/> is covered in other parts of this section in more detail.
However, these message media types are also encrypted encapsulations of HTTP
requests and responses.</t>
        <t>HTTP messages contain content, which can use any media type.  In particular,
requests are processed by an Oblivious <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref>, which - as an HTTP
resource - defines how content is processed; see <xref section="3.1" sectionFormat="of" target="HTTP"/>.  HTTP
clients can also use resource identity and response content to determine how
content is processed.  Consequently, the security considerations of <xref section="17" sectionFormat="of" target="HTTP"/> also apply to the handling of the content of these media types.</t>
      </section>
      <section anchor="separate-target">
        <name>Separate Gateway and Target</name>
        <t>This document generally assumes that the same entity operates the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious
Gateway Resource</xref> and the <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref>.  However, as the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway
Resource</xref> performs generic HTTP processing, the use of forwarding cannot be
completely precluded.</t>
        <t>The scheme specified in the <iref item="Encapsulated Request"/><xref target="dfn-enc-req" format="none">Encapsulated Request</xref> determines the security
requirements for any protocol that is used between the Oblivious Gateway and
Target Resources.  Using HTTPS is <bcp14>RECOMMENDED</bcp14>; see <xref target="server-responsibilities"/>.</t>
        <t>A <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref> that is operated on a different server from the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious
Gateway Resource</xref> is an ordinary HTTP resource.  A <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref> can privilege
requests that are forwarded by a given <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> if it trusts
the operator of the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> to only forward requests that
meet the expectations of the <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref>.  Otherwise, the <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref>
treats requests from an <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> no differently than any
other HTTP client.</t>
        <t>For instance, an <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> might -- possibly with the help of
<iref item="Oblivious Relay Resources"/><xref target="dfn-relay" format="none">Oblivious Relay Resources</xref> -- be trusted not to forward an excessive volume of
requests. This might allow the <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref> to accept a greater volume of
requests from that <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> relative to other HTTP clients.</t>
        <t>An <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> could implement policies that improve the ability
of the <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref> to implement policy exemptions, such as only forwarding
requests toward specific Target Resources according to an allowlist; see <xref target="server-responsibilities"/>.</t>
      </section>
    </section>
    <section anchor="privacy">
      <name>Privacy Considerations</name>
      <t>One goal of this design is that independent <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> requests are only linkable by
their content.  However, the choice of <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> configuration might be used to
correlate requests.  A <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> configuration includes the <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay
Resource</xref> URI, the Oblivious Gateway <iref item="key configuration"/><xref target="key-configuration" format="none">key configuration</xref>, and <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway
Resource</xref> URI. A configuration is active if <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> can successfully use it for interacting with a target.</t>
      <t><iref item="Oblivious Relay and Gateway Resources"/><xref target="dfn-relay" format="none">Oblivious Relay and Gateway Resources</xref> can identify when requests use the same
configuration by matching the key ID from the <iref item="key configuration"/><xref target="key-configuration" format="none">key configuration</xref> or the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious
Gateway Resource</xref> URI.  The <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> might use the source
address of requests to correlate requests that use an <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref>
run by the same operator.  If the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> is willing to use
trial decryption, requests can be further separated into smaller groupings based
on the keys that are used.</t>
      <t>Each active <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> configuration partitions the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> anonymity set. In
practice, it is infeasible to reduce the number of active configurations to
one. Enabling diversity in choice of <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> naturally
increases the number of active configurations.  More than one configuration
might need to be active to allow for key rotation and server maintenance.</t>
      <t><iref item="Client"/><xref target="dfn-client" format="none">Client</xref> privacy depends on having each configuration used by many other <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref>.
It is critical to prevent the use of unique <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> configurations, which might
be used to track individual <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref>, but it is also important to avoid
creating small groupings of <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> that might weaken privacy protections.</t>
      <t>A specific method for a <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> to acquire configurations is not included in this
specification.  Applications using this design <bcp14>MUST</bcp14> provide accommodations to
mitigate tracking using <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> configurations.  <xref target="CONSISTENCY"/> provides options
for ensuring that <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> configurations are consistent between <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref>.</t>
      <t>The content of requests or responses, if used in forming new requests, can be
used to correlate requests.  This includes obvious methods of linking requests,
like cookies <xref target="COOKIES"/>, but it also includes any information in either
message that might affect how subsequent requests are formulated. For example,
<xref target="FIELDING"/> describes how interactions that are individually stateless can be
used to build a stateful system when a <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> acts on the content of a response.</t>
    </section>
    <section anchor="deployment">
      <name>Operational and Deployment Considerations</name>
      <t>This section discusses various operational and deployment considerations.</t>
      <section anchor="performance-overhead">
        <name>Performance Overhead</name>
        <t>Using Oblivious HTTP adds both cryptographic overhead and latency to requests
relative to a simple HTTP request-response exchange.  Deploying relay services
that are on path between <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> and servers avoids adding significant
additional delay due to network topology.  A study of a similar system
<xref target="ODOH-PETS"/> 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 <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay
Resource</xref> and the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref>. This means that any encrypted
request sent to the <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> will always be forwarded to the
<iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref>. This constraint was imposed to simplify relay
configuration and mitigate against the <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> being used as
a generic relay for unknown <iref item="Oblivious Gateway Resources"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resources</xref>. The relay will only
forward for <iref item="Oblivious Gateway Resources"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resources</xref> that it has explicitly configured and
allowed.</t>
        <t>It is possible for a server to be configured with multiple <iref item="Oblivious Relay Resources"/><xref target="dfn-relay" format="none">Oblivious Relay
Resources</xref>, each for a different <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> as needed.  If the
goal is to support a large number of <iref item="Oblivious Gateway Resources"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resources</xref>, <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> might
be provided with a URI template <xref target="TEMPLATE"/>, from which multiple
<iref item="Oblivious Relay Resources"/><xref target="dfn-relay" format="none">Oblivious Relay Resources</xref> 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 <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> with trust anchors and intercepting TLS
connections.  While TLS might be intercepted successfully, interception
middleboxes devices might not receive updates that would allow Oblivious HTTP to
be correctly identified using the media types defined in <xref target="iana-req"/> and
<xref target="iana-res"/>.</t>
        <t>Oblivious HTTP has a simple key management design that is not trivially altered
to enable interception by intermediaries.  <iref item="Clients"/><xref target="dfn-client" format="none">Clients</xref> that are configured to enable
interception might choose to disable Oblivious HTTP in order to ensure that
content is accessible to middleboxes.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>Please update the "Media Types" registry at
<eref target="https://iana.org/assignments/media-types">https://iana.org/assignments/media-types</eref> for the media types
"application/ohttp-keys" (<xref target="iana-keys"/>), "message/ohttp-req" (<xref target="iana-req"/>),
and "message/ohttp-res" (<xref target="iana-res"/>), following the procedures of
<xref target="RFC6838"/>.</t>
      <t>Please update the "HTTP Problem Types" registry at
<eref target="https://iana.org/assignments/http-problem-types">https://iana.org/assignments/http-problem-types</eref> for the types "date"
(<xref target="iana-problem-date"/>) and "ohttp-key" (<xref target="iana-problem-ohttp-key"/>).</t>
      <section anchor="iana-keys">
        <name>application/ohttp-keys Media Type</name>
        <t>The "application/ohttp-keys" media type identifies a <iref item="key configuration"/><xref target="key-configuration" format="none">key configuration</xref> used by
Oblivious HTTP.</t>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>ohttp-keys</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>"binary"</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>see <xref target="sec-media"/></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>This type identifies a <iref item="key configuration"/><xref target="key-configuration" format="none">key configuration</xref> as used by Oblivious HTTP and
applications that use Oblivious HTTP.</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <dl spacing="compact">
              <dt>Magic number(s):</dt>
              <dd>N/A</dd>
              <dt>Deprecated alias names for this type:</dt>
              <dd>N/A</dd>
              <dt>File extension(s):</dt>
              <dd>N/A</dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>N/A</dd>
            </dl>
          </dd>
          <dt>Person and email address to contact for further information:</dt>
          <dd>
            <t>see Authors' Addresses section</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Author:</dt>
          <dd>
            <t>see Authors' Addresses section</t>
          </dd>
          <dt>Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-req">
        <name>message/ohttp-req Media Type</name>
        <t>The "message/ohttp-req" identifies an encrypted binary HTTP request.  This
is a binary format that is defined in <xref target="request"/>.</t>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>
            <t>message</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>ohttp-req</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>"binary"</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>see <xref target="sec-media"/></t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t>this specification</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Oblivious HTTP and applications that use Oblivious HTTP use this media type to
identify encapsulated binary HTTP requests.</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <dl spacing="compact">
              <dt>Magic number(s):</dt>
              <dd>N/A</dd>
              <dt>Deprecated alias names for this type:</dt>
              <dd>N/A</dd>
              <dt>File extension(s):</dt>
              <dd>N/A</dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>N/A</dd>
            </dl>
          </dd>
          <dt>Person and email address to contact for further information:</dt>
          <dd>
            <t>see Authors' Addresses section</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Author:</dt>
          <dd>
            <t>see Authors' Addresses section</t>
          </dd>
          <dt>Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-res">
        <name>message/ohttp-res Media Type</name>
        <t>The "message/ohttp-res" identifies an encrypted binary HTTP response. This
is a binary format that is defined in <xref target="response"/>.</t>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>
            <t>message</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>ohttp-res</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>"binary"</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>see <xref target="sec-media"/></t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t>this specification</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Oblivious HTTP and applications that use Oblivious HTTP use this media type to
identify encapsulated binary HTTP responses.</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <dl spacing="compact">
              <dt>Magic number(s):</dt>
              <dd>N/A</dd>
              <dt>Deprecated alias names for this type:</dt>
              <dd>N/A</dd>
              <dt>File extension(s):</dt>
              <dd>N/A</dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>N/A</dd>
            </dl>
          </dd>
          <dt>Person and email address to contact for further information:</dt>
          <dd>
            <t>see Authors' Addresses section</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Author:</dt>
          <dd>
            <t>see Authors' Addresses section</t>
          </dd>
          <dt>Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-problem-date">
        <name>Registration of "date" Problem Type</name>
        <t>IANA are requested to create a new entry in the "HTTP Problem Type" registry
established by <xref target="PROBLEM"/>.</t>
        <dl spacing="compact">
          <dt>Type URI:</dt>
          <dd>
            <t>https://iana.org/assignments/http-problem-types#date</t>
          </dd>
          <dt>Title:</dt>
          <dd>
            <t>Date Not Acceptable</t>
          </dd>
          <dt>Recommended HTTP Status Code:</dt>
          <dd>
            <t>400</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t><xref target="date-fix"/> of this document</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-problem-ohttp-key">
        <name>Registration of "ohttp-key" Problem Type</name>
        <t>IANA are requested to create a new entry in the "HTTP Problem Type" registry
established by <xref target="PROBLEM"/>.</t>
        <dl spacing="compact">
          <dt>Type URI:</dt>
          <dd>
            <t>https://iana.org/assignments/http-problem-types#ohttp-key</t>
          </dd>
          <dt>Title:</dt>
          <dd>
            <t>Oblivious HTTP <iref item="key configuration"/><xref target="key-configuration" format="none">key configuration</xref> not acceptable</t>
          </dd>
          <dt>Recommended HTTP Status Code:</dt>
          <dd>
            <t>400</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t><xref target="ohttp-key-problem"/> of this document</t>
          </dd>
        </dl>
      </section>
    </section>
  </middle>
  <back>
    <displayreference target="HTTP11" to="HTTP/1.1"/>
    <displayreference target="HTTP2" to="HTTP/2"/>
    <displayreference target="HTTP3" to="HTTP/3"/>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="BINARY">
          <front>
            <title>Binary Representation of HTTP Messages</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson">
              <organization/>
            </author>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood">
              <organization/>
            </author>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document defines a binary format for representing HTTP messages.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9292"/>
          <seriesInfo name="DOI" value="10.17487/RFC9292"/>
        </reference>
        <reference anchor="HTTP">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes. </t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="HTTP-CACHING">
          <front>
            <title>HTTP Caching</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 defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages. </t>
              <t>This document obsoletes RFC 7234.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="98"/>
          <seriesInfo name="RFC" value="9111"/>
          <seriesInfo name="DOI" value="10.17487/RFC9111"/>
        </reference>
        <reference anchor="QUIC">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar">
              <organization/>
            </author>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol.  QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances.  Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="TLS">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="HPKE">
          <front>
            <title>Hybrid Public Key Encryption</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes">
              <organization/>
            </author>
            <author fullname="K. Bhargavan" initials="K." surname="Bhargavan">
              <organization/>
            </author>
            <author fullname="B. Lipp" initials="B." surname="Lipp">
              <organization/>
            </author>
            <author fullname="C. Wood" initials="C." surname="Wood">
              <organization/>
            </author>
            <date month="February" year="2022"/>
            <abstract>
              <t>This document describes a scheme for hybrid public key encryption (HPKE). This scheme provides a variant of public key encryption of arbitrary-sized plaintexts for a recipient public key. It also includes three authenticated variants, including one that authenticates possession of a pre-shared key and two optional ones that authenticate possession of a key encapsulation mechanism (KEM) private key. HPKE works for any combination of an asymmetric KEM, key derivation function (KDF), and authenticated encryption with additional data (AEAD) encryption function. Some authenticated variants may not be supported by all KEMs. We provide instantiations of the scheme using widely used and efficient primitives, such as Elliptic Curve Diffie-Hellman (ECDH) key agreement, HMAC-based key derivation function (HKDF), and SHA2.</t>
              <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9180"/>
          <seriesInfo name="DOI" value="10.17487/RFC9180"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="ASCII">
          <front>
            <title>ASCII format for network interchange</title>
            <author fullname="V.G. Cerf" initials="V.G." surname="Cerf">
              <organization/>
            </author>
            <date month="October" year="1969"/>
          </front>
          <seriesInfo name="STD" value="80"/>
          <seriesInfo name="RFC" value="20"/>
          <seriesInfo name="DOI" value="10.17487/RFC0020"/>
        </reference>
        <reference anchor="PROBLEM">
          <front>
            <title>Problem Details for HTTP APIs</title>
            <author fullname="Mark Nottingham" initials="M." surname="Nottingham">
         </author>
            <author fullname="Erik Wilde" initials="E." surname="Wilde">
         </author>
            <author fullname="Sanjay Dalal" initials="S." surname="Dalal">
         </author>
            <date day="1" month="March" year="2023"/>
            <abstract>
              <t>   This document defines a "problem detail" to carry machine-readable
   details of errors in HTTP response content to avoid the need to
   define new error response formats for HTTP APIs.

   This document obsoletes RFC 7807.

Discussion Venues

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

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

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

<t>A single request and response exchange is shown here. Binary values (<iref item="key configuration"/><xref target="key-configuration" format="none">key
configuration</xref>, 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
<iref item="Client"/><xref target="dfn-client" format="none">Client</xref> is configured with the <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> 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 <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> URI
<tt>https://example.com/oblivious/request</tt>. The <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref> URI, i.e., the
resource the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> ultimately wishes to query, is <tt>https://example.com</tt>.</t>
      <t>To begin the process, the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> 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 <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> constructs a <iref item="key configuration"/><xref target="key-configuration" format="none">key configuration</xref> that includes the
corresponding public key as follows:</t>
      <artwork type="hex-dump"><![CDATA[
01002031e1f05a740102115220e9af918f738674aec95f54db6e04eb705aae8e
79815500080001000100010003
]]></artwork>
      <t>This <iref item="key configuration"/><xref target="key-configuration" format="none">key configuration</xref> is somehow obtained by the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref>. Then, when a <iref item="Client"/><xref target="dfn-client" format="none">Client</xref>
wishes to send an HTTP GET request to the target <tt>https://example.com</tt>, it
constructs the following binary HTTP message:</t>
      <artwork type="hex-dump"><![CDATA[
00034745540568747470730b6578616d706c652e636f6d012f
]]></artwork>
      <t>The <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> then reads the <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> <iref item="key configuration"/><xref target="key-configuration" format="none">key configuration</xref> and
selects a mutually supported KDF and AEAD. In this example, the <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> selects
HKDF-SHA256 and AES-128-GCM. The <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> 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 <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> to construct the following <iref item="Encapsulated Request"/><xref target="dfn-enc-req" format="none">Encapsulated Request</xref>:</t>
      <artwork type="hex-dump"><![CDATA[
010020000100014b28f881333e7c164ffc499ad9796f877f4e1051ee6d31bad1
9dec96c208b4726374e469135906992e1268c594d2a10c695d858c40a026e796
5e7d86b83dd440b2c0185204b4d63525
]]></artwork>
      <t>The <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> then sends this to the <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> 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 <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> receives this request and forwards it to the
<iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref>, 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 <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> 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 <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway
Resource</xref> does not need to initiate an HTTP request to the <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref>. The
request can be served directly by the <iref item="Target Resource"/><xref target="dfn-target" format="none">Target Resource</xref>, 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 exporting a secret from the HPKE context:</t>
      <!-- ikm for HKDF extract -->
<artwork type="hex-dump"><![CDATA[
62d87a6ba569ee81014c2641f52bea36
]]></artwork>
      <t>The key derivation for the <iref item="Encapsulated Response"/><xref target="dfn-enc-res" format="none">Encapsulated Response</xref> 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 <iref item="Encapsulated Response"/><xref target="dfn-enc-res" format="none">Encapsulated Response</xref>:</t>
      <artwork type="hex-dump"><![CDATA[
c789e7151fcba46158ca84b04464910d86f9013e404feea014e7be4a441f234f
857fbd
]]></artwork>
      <t>The <iref item="Oblivious Gateway Resource"/><xref target="dfn-gateway" format="none">Oblivious Gateway Resource</xref> 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 <iref item="Oblivious Relay Resource"/><xref target="dfn-relay" format="none">Oblivious Relay Resource</xref> which
might change as little as the Date header. The <iref item="Client"/><xref target="dfn-client" format="none">Client</xref> is then able to use the
HPKE context it created and the nonce from the <iref item="Encapsulated Response"/><xref target="dfn-enc-res" format="none">Encapsulated Response</xref> to
construct the AEAD key and nonce and decrypt the response.</t>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This design is based on a design for Oblivious DoH, described in
<xref target="ODOH"/>. <contact fullname="David Benjamin"/>, <contact fullname="Mark Nottingham"/>, and <contact fullname="Eric Rescorla"/> made technical contributions.  The authors also thank <contact fullname="Ralph Giles"/>, <contact fullname="Lucas Pardue"/>, and <contact fullname="Tommy Pauly"/> for invaluable assistance.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
