<?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.7.5 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-privacypass-consistency-mirror-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.19.1 -->
  <front>
    <title abbrev="Checking Resource Consistency with HTTP Mirrors">Checking Resource Consistency with HTTP Mirrors</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-consistency-mirror-00"/>
    <author initials="B." surname="Beurdouche" fullname="Benjamin Beurdouche">
      <organization>Mozilla</organization>
      <address>
        <email>ietf@beurdouche.com</email>
      </address>
    </author>
    <author initials="M." surname="Finkel" fullname="Matthew Finkel">
      <organization>Apple Inc.</organization>
      <address>
        <email>sysrqb@apple.com</email>
      </address>
    </author>
    <author initials="S." surname="Valdez" fullname="Steven Valdez">
      <organization>Google LLC</organization>
      <address>
        <email>svaldez@chromium.org</email>
      </address>
    </author>
    <author initials="C. A." surname="Wood" fullname="Christopher A. Wood">
      <organization>Cloudflare</organization>
      <address>
        <email>caw@heapingbits.net</email>
      </address>
    </author>
    <author initials="T." surname="Pauly" fullname="Tommy Pauly">
      <organization>Apple Inc.</organization>
      <address>
        <email>tpauly@apple.com</email>
      </address>
    </author>
    <date year="2024" month="January" day="30"/>
    <area>Security</area>
    <workgroup>Privacy Pass</workgroup>
    <keyword>HTTP</keyword>
    <keyword>consistency check</keyword>
    <keyword>mirror</keyword>
    <abstract>
      <?line 61?>

<t>This document describes the mirror protocol, an HTTP-based protocol for fetching mirrored
HTTP resources. The primary use case for the mirror protocol is to support HTTP resource
consistency checks in protocols that require clients have a consistent view of some
protocol-specific resource (typically, a public key) for security or privacy reasons,
including Privacy Pass and Oblivious HTTP. To that end, this document also describes how
to use the mirror protocol to implement these consistency checks.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-privacypass-consistency-mirror/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Privacy Pass Working Group mailing list (<eref target="mailto:privacy-pass@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/privacy-pass/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/privacy-pass/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-privacypass/draft-ietf-privacypass-consistency-mirror"/>.</t>
    </note>
  </front>
  <middle>
    <?line 70?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Privacy-enhancing protocols such as Privacy Pass <xref target="PRIVACYPASS"/> and Oblivious HTTP <xref target="OHTTP"/>
require clients to obtain and use a public key for execution. In Privacy Pass,
public keys are used by clients when issuing and redeeming tokens for anonymous
authorization. In Oblivious HTTP (OHTTP), clients use public keys to encrypt
messages to a gateway server.</t>
      <t>Deployments of protocols such as Privacy Pass and OHTTP requires that very large sets of clients
share the same key, or even that all clients globally share the same key. This is because the privacy properties depend on the client
anonymity set size. In other words, the key that's used determines the set to which
a particular client belongs. Using a unique, client-specific key would yield an anonymity set
of size one, therefore violating the desired privacy goals of the system. Clients that
use the same key as one another are said to have a consistent view of the key.</t>
      <t><xref target="CONSISTENCY"/> describes this notion of consistency in more detail. It also outlines
several designs that can be used as the basis for consistency systems. This document is
a concrete instantiation of one of those designs, "Shared Cache Discovery". In particular,
this document describes the mirror protocol, which is a protocol for fetching a cached copy of
an HTTP resource from so-called mirrors. In this context, a mirror is an HTTP resource that
fetches and caches copies of other HTTP resources that can be returned to clients. In turn,
clients can then use these cached resource copies for consistency checks, i.e., to compare
their expected representation of the resource against that which the mirrors provide.</t>
      <t>The mirror protocol can be run one or more times by an application to achieve the desired
consistency criteria. For example, the mirror protocol can be run once with a trusted mirror,
or more than once with many, potentially less trusted mirrors, and used for determining
consistency. <xref target="integration"/> provides general guidance for using the mirror protocol for
consistency checks, along with specific profiles of the protocol for Privacy Pass and OHTTP
in <xref target="profile-privacypass"/> and <xref target="profile-ohttp"/>, respectively.</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>
      <?line -18?>

</section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The following terms are used throughout this document:</t>
      <ul spacing="normal">
        <li>
          <t>Resource: A HTTP resource identified by a URL.</t>
        </li>
        <li>
          <t>Normalized resource representation: A unique or otherwise protocol-specific representation
that is derived from an HTTP resource. The process of normalization is specific to a
protocol and the resource in question.</t>
        </li>
        <li>
          <t>Mirror: A HTTP resource that fetches and caches HTTP resources.</t>
        </li>
      </ul>
    </section>
    <section anchor="mirror-protocol">
      <name>Mirror Protocol</name>
      <t>The mirror protocol is a simple HTTP-based protocol similar to a reverse proxy. Each mirror
resource, henceforth referred to as a mirror, is identified by a Mirror URI Template <xref target="RFC6570"/>.
The scheme for the Mirror URI Template <bcp14>MUST</bcp14> be "https". The Mirror URI Template uses the Level
3 encoding defined <xref section="1.2" sectionFormat="of" target="RFC6570"/> and contains one variables: "target", which is the
percent-encoded URL of a HTTP resource to be mirrored. Example Mirror URI Templates are shown below.</t>
      <artwork><![CDATA[
https://mirror.example/mirror{?target}
https://mirror.example/{target}
]]></artwork>
      <t>The Mirror URI Template <bcp14>MUST</bcp14> contain the "target" variable exactly once. The variable
<bcp14>MUST</bcp14> be within the path or query components of the URI.</t>
      <t>In addition, each mirror is configured with a MIN_VALIDITY_WINDOW parameter, which is an integer
indicating the minimum time for resources the mirror will cache according to their "max-age"
response directive. We refer to the validity window of the mirror response as the period of
time determined by the Cache-Control headers as the response.</t>
      <t>Clients send requests to mirror resources after being configured with their corresponding
Mirror URI Template. Clients <bcp14>MUST</bcp14> ignore configurations that do not conform to this template.</t>
      <t>Upon receipt of a mirror request, mirrors validate the incoming request. If the request is invalid
or malformed, e.g., the "target" parameter is not a correctly encoded URL, the mirror aborts
and returns a a 4xx (Client Error) to the client. The mirror <bcp14>SHOULD</bcp14> check that the target resource
identified by the "target" parameter is allowed by policy, e.g., so that it is not abused to
fetch arbitrary resources. One way to implement this check is via an allowlist of target URLs.</t>
      <t>If the request is valid and allowed, the mirror checks to see if it has a cached version of the
resource identified by the target URL. Mirrors can provide a cached response to a client request
if the following criteria are met:</t>
      <ol spacing="normal" type="1"><li>
          <t>The target URL matches that of a cached response.</t>
        </li>
        <li>
          <t>The cached response is fresh according to its Cache-Control header (see <xref section="4.2" sectionFormat="of" target="CACHING"/>).</t>
        </li>
      </ol>
      <t>If both criteria are met, the mirror encodes the cached response using Binary HTTP <xref target="BHTTP"/>
and returns it to the client in a response. The mirror response includes a Cache-Control header
with "max-age" directive set to that of the cached response.</t>
      <t>Otherwise, mirrors send a GET request to the target resource URL, copying the Accept header from
the client request if present. If this request fails, the mirror returns a 4xx error to the client.
If this request suceeeds, the mirror checks it for validity. The response is considered valid and stored
in the mirror's cache if the following criteria are met:</t>
      <ol spacing="normal" type="1"><li>
          <t>The response can be cached according to the rules in <xref section="3" sectionFormat="of" target="CACHING"/>. In particular,
if the request had a Vary header, this is used in determining whether the mirror's response is valid.</t>
        </li>
        <li>
          <t>The Cache-Control header is present, has a "max-age" response directive that is
greater than or equal to MIN_VALIDITY_WINDOW, and does not have a "no-store" or "private" directive.</t>
        </li>
      </ol>
      <t>Mirrors purge this cache when the response is no longer valid according to the
Cache-Control headers.</t>
      <t>To complete the client request, the mirror then encodes the response using Binary
HTTP <xref target="BHTTP"/> and returns it to the client in a response. The mirror response incldues a
Cache-Control header with "max-age" directive set to that of the cached response.</t>
      <t>Clients recover the target's mirrored response by Binary HTTP decoding the mirror response
content.</t>
      <section anchor="mirror-request-and-response-example">
        <name>Mirror Request and Response Example</name>
        <t>The following example shows two mirror request and response examples. The first one yields a mirror
cache miss and the second one yields a mirror cache hit. The Mirror URI Template is
"https://mirror.example/mirror{?target}", and the target URL is
"https://issuer.example/.well-known/private-token-issuer-directory".</t>
        <t>The first client request to the mirror might be the following.</t>
        <artwork><![CDATA[
:method = GET
:scheme = https
:authority = mirror.example
:path = /mirror?target=https%3A%2F%2Fissuer.example%2F.well-known%2Fprivate-token-issuer-directory
accept = application/private-token-issuer-directory
]]></artwork>
        <t>Upon receipt, the mirror decodes the "target" parameter, inspects its cache for a copy of the
resource, and then constructs a HTTP request to the target URL to fetch the content. If present,
the relay copies the Accept header from the client request to the request sent to the target.
This mirror request to the target might be the following.</t>
        <artwork><![CDATA[
:method = GET
:scheme = https
:authority = target.example
:path = /.well-known/private-token-issuer-directory
accept = application/private-token-issuer-directory
]]></artwork>
        <t>The target response is then returned to the mirror, like so:</t>
        <artwork><![CDATA[
:status = 200
content-type = application/private-token-issuer-directory
content-length = ...
cache-control: max-age=3600

<Bytes containing a private token issuer directory>
]]></artwork>
        <t>The mirror caches this response content for the target URL, encodes it using Binary HTTP <xref target="BHTTP"/>,
and then returns the response to the client:</t>
        <artwork><![CDATA[
:status = 200
content-length = ...
cache-control: max-age=3600

<Bytes containing the target's BHTTP-encoded response>
]]></artwork>
        <t>When a second client asks for the same request by the mirror it can be served with the cached
copy. The second client's request might be the following:</t>
        <artwork><![CDATA[
:method = GET
:scheme = https
:authority = mirror.example
:path = /mirror?target=https%3A%2F%2Fissuer.example%2F.well-known%2Fprivate-token-issuer-directory
]]></artwork>
        <t>The mirror validates the request, locates the cached copy of the
"https://issuer.example/.well-known/private-token-issuer-directory" content, and then
returns it to the client without updating its cached copy.</t>
        <artwork><![CDATA[
:status = 200
content-length = ...
cache-control: max-age=3600

<Bytes containing the target's BHTTP-encoded response>
]]></artwork>
      </section>
    </section>
    <section anchor="integration">
      <name>Using Mirrors for Consistency Checks</name>
      <t>Clients can use mirrors to implement consistency checks for a candidate HTTP
resource. In particular, in possession of the target URL at which the resource
was obtained, as well as an authoritative representation of the resource, clients
can check to see if this resource is consistent with that of the mirror's as follows:</t>
      <ol spacing="normal" type="1"><li>
          <t>Send a mirror request to the mirror for the target URL. If the request fails, fail
this consistency check.</t>
        </li>
        <li>
          <t>Otherwise, compute the first valid representation of the resource based on the mirror's response.</t>
        </li>
        <li>
          <t>Compare the computed representation to the input resource representation. If they do not match,
fail this consistency check. Otherwise, this consistency check succeeds.</t>
        </li>
      </ol>
      <t>The benefits of using the mirror protocol to check consistency depend on a multitude of
factors, including, but not limited to, the number of clients interacting with a particular
mirror, whether or not the mirror is trustworthy, and application requirements for dealing
with consistency check failures.</t>
      <section anchor="handling-consistency-failures">
        <name>Handling Consistency Failures</name>
        <t>If a consistency check fails because the mirrored resource did not match, the client
<bcp14>MUST NOT</bcp14> use the original resource. For cases where the check failed because the
client was unable to communicate with the mirror, client policy dictates whether or
not to assume the resource is consistent. Client behavior for what to do in the case
of inconsistency can vary depending on the protocol, availability of alternative services,
and client policy.</t>
        <t>If the client has multiple options for equivalent services, it can choose to fall back
from a service that failed a consistency check to one that passed all consistency checks.
For example, if a client has the option of using one of a set of Privacy Pass token
issuers, it can choose an issuer that passes all consistency checks.</t>
        <t>If the service that failed the consistency check is an optional optimization for the client,
the client can simply choose to not use the service. For example, if a Privacy Pass token is
used to avoid showing the user a CAPTCHA, but the Privacy Pass token issuer fails the
consistency check, the client can fall back to showing the user a CAPTCHA.</t>
        <t>For cases where the client has no alternate services to use, and the service is
required in order to perform user-facing functionality, the client <bcp14>SHOULD</bcp14> report the
error in a visible way that presents the error to the user or an administrator. This
functionality can be similar to how invalid TLS certificates are reported.</t>
      </section>
      <section anchor="selecting-mirror-servers">
        <name>Selecting Mirror Servers</name>
        <t>In many of these systems where the mirror protocol might be used, including common
configurations for Privacy Pass and OHTTP, there is already a party who is necessarily
trusted to protect the user's privacy, and whose operational availability is already a
prerequisite for using the system. In OHTTP, this is the Relay; in Privacy Pass it might
be the Attester (in Split Mode) or a transport proxy.</t>
        <t>When such a party exists, it is <bcp14>RECOMMENDED</bcp14> that they operate a mirror service
for their users, and that clients do not use any other mirrors for the purposes of
consistency checks. This avoids revealing any metadata about the client's activity
to additional parties and reduces the likelihood of an outage. More information for
implementing this check in the context of Privacy Pass and OHTTP is provided in
<xref target="profile-privacypass"/> and <xref target="profile-ohttp"/>, respectively.</t>
        <t>In some cases, this trusted party can provide consistency enforcement through
a protocol-specific mechanism (e.g., <xref target="I-D.pw-privacypass-in-band-consistency"/>
for Privacy Pass in Split Mode).  Protocol-specific consistency mechanisms may
be preferable to protocol-agnostic consistency checks based on the mirror protocol,
especially if they provide equivalent consistency guarantees with better performance
or reliability.</t>
      </section>
      <section anchor="consistency-validity-period">
        <name>Consistency Validity Period</name>
        <t>Executing a consistency check provides a client with some assurance that other
clients may be using the same resource <xref target="security-considerations"/>. However,
this result only reflects a mirror's view of a resource at a particular point
in time. The client should periodically re-check consistency. The frequency of
re-checking depends on the requirements of the client <xref target="integration"/>. Clients
should re-confirm consistency of a cached resource if it is not fresh (see
<xref section="4.2" sectionFormat="of" target="CACHING"/>).</t>
        <t>Two strategies for maintaining consistency are:
1. Pre-emptively execute a consistency check for a resource that is expiring soon; and
1. Execute a consistency check of an expired resource at the time of its next use.</t>
        <t>For strategy 1, clients that execute consistency checks at the same time can
induce a thundering herd that overwhelms the mirror resource. Since coordinating
consistency checks across clients is difficult, clients can instead execute consistency
checks at random times before the resource expires. Clients that have more information
about a mirror's available capacity can choose different implementations for strategy 1.</t>
        <t>Strategy 2 might be preferrable for a service and resource that is infrequently
used. However, a consequence of this strategy is that it can reveal a client's
usage patterns to the mirror.</t>
        <t>When the origin server has multiple versions of a resource corresponding to a
URL, it should respond with the resource that is both currently valid and will
remain fresh for the longest amount of time in the future.</t>
      </section>
      <section anchor="profile-privacypass">
        <name>Privacy Pass Profile</name>
        <t>Clients are given as input an issuer token key from an origin server and want to check
whether it is consistent with the key that is given to other clients. Let the input key
be denoted token_key and its identifier be token_key_id. Clients are also given as input
the name of the issuer, from which they can construct the target URL for the issuer
directory. If clients have already checked this issuer’s token key, i.e., they’ve
previously run a consistency check, they can simply reuse the result up to its expiration.
Otherwise, clients invoke a mirror-based consistency check in parallel with the issuance
protocol.</t>
        <t>Each issuer directory can yield one or more normalized representations that clients use
in the consistency check. For example, given a mirrored token directory resource like the
following:</t>
        <artwork><![CDATA[
{
  "issuer-request-uri": "https://issuer.example.net/request",
  "token-keys": [
    {
      "token-type": 2,
      "token-key": "MI...AB",
      "not-before": 1686913811,
    },
    {
      "token-type": 2,
      "token-key": "MI...AQ",
    }
  ]
}
]]></artwork>
        <t>Clients compute the first valid representation of this directory, i.e., the first entry in
the list that the client can use, which might be the key ID of the first key in the
"token-keys" list (depending on the "not-before" value), or the key ID of the second key
in the "token-keys" list. The key ID is computed as defined in <xref section="6.5" sectionFormat="of" target="PRIVACYPASS-ISSUANCE"/>.</t>
      </section>
      <section anchor="profile-ohttp">
        <name>Oblivious HTTP Profile</name>
        <t>Clients can run consistency checks for OHTTP in several ways depending on the deployment. In practice,
common deployments are as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>Clients are configured with gateway configurations; and</t>
          </li>
          <li>
            <t>Clients fetch gateway configurations before use.</t>
          </li>
        </ol>
        <t>In both cases, clients begin with a gateway configuration and want to check it for consistency.
In OHTTP, there is exactly one representation for a gateway configuration – the configuration itself.
Before using the configuration to encrypt a binary HTTP message to the gateway, clients can run
a consistency check with their configured mirror(s) to ensure that this configuration is correct
for the given gateway.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Consistency checks assume that the client-configured set of mirrors is honest. Under this assumption,
the consistency properties of consistency checks based on the mirror protocol are as follows:</t>
      <ol spacing="normal" type="1"><li>
          <t>With honest mirrors, clients that successfully check a resource are assured that they
share the same copy of the resource with the union of mirror clients for each configured mirror.</t>
        </li>
        <li>
          <t>Consistency only holds for the period of time of the minimum mirror validity window.</t>
        </li>
        <li>
          <t>With at least one dishonest mirror, the probability of discovering an inconsistency is 1 - (1 / 2^(k-1)),
where k is the number of disjoint consistency checks. This is the probability that each individual
consistency check succeeds.</t>
        </li>
      </ol>
      <t>Unless all clients share the same configured mirrors, consistency checks using the mirror protocol do
not achieve global consistency as is defined in <xref target="CONSISTENCY"/>.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="PRIVACYPASS">
          <front>
            <title>The Privacy Pass Architecture</title>
            <author fullname="Alex Davidson" initials="A." surname="Davidson">
              <organization>LIP</organization>
            </author>
            <author fullname="Jana Iyengar" initials="J." surname="Iyengar">
              <organization>Fastly</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="25" month="September" year="2023"/>
            <abstract>
              <t>   This document specifies the Privacy Pass architecture and
   requirements for its constituent protocols used for authorization
   based on privacy-preserving authentication mechanisms.  It describes
   the conceptual model of Privacy Pass and its protocols, its security
   and privacy goals, practical deployment models, and recommendations
   for each deployment model that helps ensure the desired security and
   privacy goals are fulfilled.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-architecture-16"/>
        </reference>
        <reference anchor="PRIVACYPASS-ISSUANCE">
          <front>
            <title>Privacy Pass Issuance Protocol</title>
            <author fullname="Sofia Celi" initials="S." surname="Celi">
              <organization>Brave Software</organization>
            </author>
            <author fullname="Alex Davidson" initials="A." surname="Davidson">
              <organization>Brave Software</organization>
            </author>
            <author fullname="Steven Valdez" initials="S." surname="Valdez">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="3" month="October" year="2023"/>
            <abstract>
              <t>   This document specifies two variants of the two-message issuance
   protocol for Privacy Pass tokens: one that produces tokens that are
   privately verifiable using the issuance private key, and another that
   produces tokens that are publicly verifiable using the issuance
   public key.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-protocol-16"/>
        </reference>
        <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="10" month="July" year="2023"/>
            <abstract>
              <t>   This document describes the consistency requirements of protocols
   such as Privacy Pass, Oblivious DoH, and Oblivious HTTP for user
   privacy.  It presents definitions for consistency and then surveys
   mechanisms for providing consistency 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-01"/>
        </reference>
        <reference anchor="OHTTP">
          <front>
            <title>Oblivious HTTP</title>
            <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="25" month="August" year="2023"/>
            <abstract>
              <t>   This document describes Oblivious HTTP, a protocol for forwarding
   encrypted HTTP messages.  Oblivious HTTP 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>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ohai-ohttp-10"/>
        </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"/>
            <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"/>
            <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="RFC6570">
          <front>
            <title>URI Template</title>
            <author fullname="J. Gregorio" initials="J." surname="Gregorio"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="M. Hadley" initials="M." surname="Hadley"/>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="D. Orchard" initials="D." surname="Orchard"/>
            <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="BHTTP">
          <front>
            <title>Binary Representation of HTTP Messages</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="DOUBLE-CHECK">
          <front>
            <title>Key Consistency by Double-Checking via a Semi-Trusted Proxy</title>
            <author fullname="Benjamin M. Schwartz" initials="B. M." surname="Schwartz">
              <organization>Google LLC</organization>
            </author>
            <date day="19" month="October" year="2022"/>
            <abstract>
              <t>   Several recent IETF privacy protocols require clients to acquire
   bootstrap information for a service in a way that guarantees both
   authenticity and consistency, e.g., encrypting to the same key as
   many other users.  This specification defines a procedure for
   transferring arbitrary HTTP resources in a manner that provides these
   guarantees.  The procedure relies on access to a semi-trusted HTTP
   proxy, under the same security assumptions as an Oblivious HTTP
   Relay.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-schwartz-ohai-consistency-doublecheck-03"/>
        </reference>
        <reference anchor="CACHING">
          <front>
            <title>HTTP Caching</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <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="I-D.pw-privacypass-in-band-consistency">
          <front>
            <title>Privacy Pass In-Band Key Consistency Checks</title>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="10" month="July" year="2023"/>
            <abstract>
              <t>   This document describes an in-band key consistency enforcement
   mechanism for Privacy Pass deployments wherein the Attester is split
   from the Issuer and Origin.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-pw-privacypass-in-band-consistency-00"/>
        </reference>
      </references>
    </references>
    <?line 432?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This document is based on the <xref target="DOUBLE-CHECK"/> protocol from Benjamin Schwartz.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA9U8227cRpbv9RU1bQxiL7o7kZPJJJo4iSzLsbC+jSXHCAaz
QTVZ3V1jNtlhkWp3BAXzD/u0b/st+ynzJXtuVSyyqdyBxQKBI5GsqnO/l2az
mWpcU9hjPTld2+ytK1f6lfVVW2dWn1ald76xZbbXO9es9ZPLy5f6mavrqvYT
ZRaL2l79mpWZaeyqqvfH2je5UnmVlWYDMOS1WTYzZ5vlbFu7K5Ptt8b7Wdbt
NtvQHrMPPlC+XWyc964qm/0WFp+fXT5WZbtZ2PpY5XDCscKFtvStP9ZN3VoF
wH6oTG0NAH1hs7Z2zX6idlX9dlVX7RaevuRj9Us4d6Le2j28zI+VnhEG+P8E
GJ0h4viQoVJXtmzhWK3Ht9OaIZ28gRORXl/hZ/h8Y1wBzwXpGWL9JZJhXtUr
fL8CGrYL+IJos1ul5Hn/Z1NtopRpm3VVI0Kwq9auBNI8nOuHtq3zqgV86DFz
46Et/2E2rhy+BZhM6b43DZD+WD+rvndFYeiNZTwQlC8XcdE8qza9A5/N9WNX
vrVFctgz0zRru0tfwDnH+mS7Law+L7N5eoLf+/q7xZcGXx5sfzHXX5sit98n
2180FpiTPqfdv6qqFWz/9Olpb/cr+uzLbF1XG9dukAu9E07n+mSu31RVnhxx
uq6B3NV2beveWzrotKjafFmA7KUHZWb35dqaLcjCwjV+Xtqmd87lHCSnLfbJ
KZfVZrNPnv4IkZotfpUQSZVVvQG2XZGMvnx1/vXJ6TcvTy4uQHlmj+YHEmTq
bO0amzUtgZ0smJ1fXLw+eX56dsvKbV01VVYhH09fPL84v7g8e376zS0fg5al
wgprXqCyJV9Xa+Pgn6bZKuXKZYrFoxevHz49m50+OTv9d17hs/XO1M33vCrV
AhDHRWFZaZWazWbaLHxTm6xR6nLtvAZD1G5s2ejc+qx2C+s1CKVotw5ITbUp
yRzMFsbbPD7XAJhe2gaIBrrNi2yuyPTVYhn9XF/CjoD+xtR73XoLQgD/4NKR
ozQA1VTat9ttVTe6t5U6sEQepCYuRdBNA19/17oaTikcIOb12lxZbTor1ugr
B2pXLbWvNlaF1TO/tZlbuiwep++C8XKZKYo9EEBvgZTwFnh3j4D3Yk41Qc9W
Dwyth3OmwLOsaHOkSmoQgYy5fgHbXLmq9YQcUKdiuG2ZT+GnlCmm8FXCmXW1
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
gubqfwFKcYcADE0AAA==

-->

</rfc>
