<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.17 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-schwartz-ohai-consistency-doublecheck-03" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.1 -->
  <front>
    <title abbrev="Key Consistency Double Check">Key Consistency by Double-Checking via a Semi-Trusted Proxy</title>
    <seriesInfo name="Internet-Draft" value="draft-schwartz-ohai-consistency-doublecheck-03"/>
    <author fullname="Benjamin M. Schwartz">
      <organization>Google LLC</organization>
      <address>
        <email>bemasc@google.com</email>
      </address>
    </author>
    <date year="2022" month="October" day="19"/>
    <area>sec</area>
    <workgroup>ohai</workgroup>
    <keyword>Internet-Draft</keyword>
    <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>
    <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-schwartz-ohai-consistency-doublecheck/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/bemasc/access-services"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Oblivious HTTP <xref target="I-D.ietf-ohai-ohttp"/> enables an HTTP client to send requests to a target in such a way that no single party can determine both the identity of the client and the contents of its request.  Oblivious HTTP identifies four parties to each exchange: the Client, Relay, Gateway and Target.</t>
      <t>In order for Oblivious HTTP's privacy guarantees to hold, several preconditions must be met:</t>
      <ol spacing="normal" type="1"><li>The Client must be one of many users who might be using the Relay.  Otherwise, use of the Relay reveals the user's identity to the Gateway.</li>
        <li>The Client must hold an authentic KeyConfig for the Gateway.  Otherwise, the Client could be speaking to the Relay, impersonating the Gateway.</li>
        <li>All users of the Relay must be equally likely to use this Gateway, KeyConfig, and Target, regardless of their prior activity.  Otherwise, the encrypted request identifies the Client to the Gateway.</li>
        <li>(optional) The Gateway should not learn the IP addresses of the Clients, collectively.  Otherwise, the Gateway might be able to deanonymize requests by correlating them with external information about the Clients.</li>
      </ol>
      <t>The Privacy Pass protocol <xref target="I-D.ietf-privacypass-protocol"/> allows a Client to retrieve tokens from an Issuer, and present them to an Origin, in such a way that the Origin can verify the validity of the tokens but cannot identify the Client, even if it colludes with the Issuer.  Privacy Pass requires a similar set of preconditions for its privacy guarantees:</t>
      <ol spacing="normal" type="1"><li>The Client's transport to the Origin must not reveal the client's identity (e.g. via the client IP address).</li>
        <li>The Client must hold an authentic Issuer Directory Object.  Otherwise, issuance will fail (resulting in a denial of service, not a privacy violation).</li>
        <li>All Clients with the same transport metadata must be using the same Issuer Directory Object for this Issuer.  Otherwise, these factors together uniquely identify the client.</li>
        <li>(optional) The Origin should not learn the IP addresses of the Clients collectively, as above.</li>
      </ol>
      <t>Pre-requisite 1 on this list can be achieved by employing a shared transport proxy, on the assumption that at least one of the proxy or the Origin is non-malicious.  (This is the same assumption that an Oblivious HTTP Client makes about its Relay).</t>
      <t>This specification assumes that a shared, "semi-trusted" proxy is available (fulfilling precondition 1 on each list).  It defines a three-party protocol for a Client, Proxy, and Origin to fetch an HTTP resource in a manner that ensures authenticity and consistency among Clients of a single Proxy.  When used to initialize Oblivious HTTP or Privacy Pass, it guarantees preconditions 2, 3, and optionally 4.</t>
      <t>The input to this protocol is a Desired Resource URI: an "https" URI on the Origin that is assumed to have been distributed to Clients in a globally consistent fashion.  For example, this URI might be the default value of a software setting, or it might be published on a third party's website.  This specification allows Clients to convert the static, long-lived Desired Resource URI into a fresh copy of that resource, i.e. to fetch the resource.</t>
      <t>In principle, the Desired Resource could have been distributed directly through the assumed globally consistent channel.  However, these ad hoc publication channels may not be fast enough to support frequent updates (e.g., key rotations), especially if updates require user intervention.</t>
      <t>This draft is an instantiation of the Shared Proxy with Key Confirmation strategy defined in <xref section="4.3" sectionFormat="of" target="I-D.wood-key-consistency"/>.</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>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>In the Key Consistency Double-Check procedure, the Client emits two HTTP GET requests for the Desired Resource.  One uses the Proxy as an HTTP request proxy (terminating TLS and HTTP), and the other optionally uses it as a transport proxy (using TLS end-to-end with the Origin).  The Proxy will forward the first request to the Origin only if the response is not in cache.</t>
      <figure>
        <name>Overview of Key-Consistency Double-Check</name>
        <artwork><![CDATA[
          +--------+       +-------+       +--------+
          |        |<=====>|       |<----->|        |
          | Client |       | Proxy |       | Origin |
          |        |<=====================>|        |
          +--------+       +-------+       +--------+
]]></artwork>
      </figure>
      <t>The Proxy caches the response, ensuring that all clients share it during its freshness lifetime.  The client checks this against the authenticated response from the Origin, preventing forgeries.</t>
    </section>
    <section anchor="requirements">
      <name>Requirements</name>
      <section anchor="origin">
        <name>Origin</name>
        <t>The Desired Resource <bcp14>MUST</bcp14> include a "strong validator" ETag (<xref section="2" sectionFormat="of" target="RFC7232"/>) in any response to a GET request, and <bcp14>MUST</bcp14> support the "If-Match" HTTP request header (<xref section="3" sectionFormat="of" target="RFC7232"/>).  The response <bcp14>MUST</bcp14> indicate "Cache-Control: public, no-transform, s-maxage=(...), immutable" <xref target="RFC9111"/><xref target="RFC8246"/>.  For efficiency reasons, the max age <bcp14>SHOULD</bcp14> be at least 60 seconds, and preferably much longer.</t>
        <t>If the Desired Resource changes, and the Origin receives a request for the resource whose "If-Match" header identifies a previously served version that has not yet expired, it <bcp14>MUST</bcp14> return a success response containing the previous version.  This response <bcp14>MAY</bcp14> indicate "Cache-Control: private".</t>
      </section>
      <section anchor="proxy">
        <name>Proxy</name>
        <t>The Proxy <bcp14>MUST</bcp14> offer HTTP request proxy capability, and <bcp14>SHOULD</bcp14> also offer TCP proxy, UDP proxy, and encrypted DNS resolution capabilities.  (An associated encrypted DNS resolver enables reliable use of HTTPS records <xref target="SVCB"/>, improves metadata confidentiality, and allows EDNS Client Subnet to be disabled reliably.)  For example, a proxy in the recommended configuration could be described by the following Access Service Description <xref target="I-D.schwartz-masque-access-descriptions"/>:</t>
        <figure>
          <name>Example Proxy Access Service Description</name>
          <sourcecode type="JSON"><![CDATA[
{
  "http": {
    "template": "https://relay.example.org/http{?target_uri}"
  },
  "tcp": {
    "template":
        "https://proxy.example.org/tcp{?target_host,tcp_port}"
  },
  "udp": {
    "template":
        "https://proxy.example.org/masque{?target_host,target_port}"
  },
  "dns": {
    "template": "https://doh.example.com/dns-query{?dns}",
  }
}
]]></sourcecode>
        </figure>
        <t>The Proxy <bcp14>MUST</bcp14> allow use of the GET method to proxy small responses, and <bcp14>SHOULD</bcp14> make ample cache space available in order to avoid eviction of Desired Resources.  The proxy <bcp14>SHOULD</bcp14> share cache state among all clients, to ensure that they observe the same resource contents.  If the cache must be partitioned for architectural or performance reasons, operators <bcp14>SHOULD</bcp14> keep the number of users in each partition as large as possible.</t>
        <t>Proxies <bcp14>MUST</bcp14> preserve the ETag response header on cached responses, and <bcp14>MUST</bcp14> add an Age header (<xref section="5.1" sectionFormat="comma" target="RFC9111"/>) to all proxied responses.  Proxies <bcp14>MUST</bcp14> respect the "Cache-Control: immutable" directive, and <bcp14>MUST NOT</bcp14> revalidate fresh immutable cache entries in response to any incoming requests.  (Note that this is different from the general recommendation in <xref section="2.1" sectionFormat="of" target="RFC8246"/>).  Proxies also <bcp14>MUST NOT</bcp14> accept PUSH_PROMISE frames from the target.</t>
        <t>Proxies <bcp14>SHOULD</bcp14> employ defenses against malicious attempts to fill the cache.  Some possible defenses include:</t>
        <ul spacing="normal">
          <li>Rate-limiting each client's use of GET requests.</li>
          <li>Prioritizing preservation of cache entries that have been served to many clients, if eviction is required.</li>
        </ul>
        <t>Proxies that are not intended for general-purpose use <bcp14>MAY</bcp14> impose strict transfer limits or rate limits on transport proxy usage.</t>
        <t>If the Proxy offers an Encrypted DNS service, it <bcp14>MUST NOT</bcp14> enable EDNS Client Subnet support <xref target="RFC7871"/>.</t>
      </section>
      <section anchor="client">
        <name>Client</name>
        <t>The Client is assumed to know the "https" URI of the Desired Resource.  To retrieve that resource, it <bcp14>MUST</bcp14> perform the following "double-check" procedure:</t>
        <ol spacing="normal" type="1"><li>Send a GET request for the Desired Resource URL via the Proxy's HTTP request proxy function.</li>
          <li>Record the response (A).</li>
          <li>Check that response A's "Cache-Control" values indicate "public" and "immutable".</li>
          <li>Establish a transport tunnel through the Proxy to the Origin (<bcp14>OPTIONAL</bcp14>).</li>
          <li>Fetch the Desired Resource (through this tunnel if available), using a GET request with "If-Match" set to response A's ETag.</li>
          <li>Record the response (B).</li>
          <li>Check that responses A and B were successful and the contents are identical, otherwise fail.</li>
        </ol>
        <t>This procedure ensures that the retrieved copy of the Desired Resource is authentic and is identical to the one held by any other users of this proxy.  Once response A or B expires, the client <bcp14>MUST</bcp14> refresh it before continuing to use this resource, and <bcp14>MUST</bcp14> repeat the "double-check" process if either response changes.</t>
        <t>Clients <bcp14>MUST</bcp14> perform each fetch to the Origin (step 4) as a fully isolated request.  Any state related to this Origin (e.g., cached DNS records, CONNECT-UDP tunnels, QUIC transport state, TLS session tickets, HTTP cookies) <bcp14>MUST NOT</bcp14> be shared with prior or subsequent requests.</t>
      </section>
      <section anchor="negative-responses">
        <name>Negative responses</name>
        <t>If the Desired Resource does not exist, the Double Check requirements apply without modification.  The Cache-Control headers ensure that the negative response (e.g., HTTP 404) is cacheable regardless of its status code.  If Double Check succeeds with a negative response, the Client can be confident that any other Clients of this proxy are holding the same negative response.</t>
      </section>
    </section>
    <section anchor="example-oblivious-doh">
      <name>Example: Oblivious DoH</name>
      <t>In this example, the client has been configured with a Proxy via the following Access Service Description:</t>
      <sourcecode type="JSON"><![CDATA[
{
  "dns": {
    "template": "https://proxy.example.org/dns-query{?dns}",
  },
  "udp": {
    "template":
        "https://proxy.example.org/masque{?target_host,target_port}"
  },
  "http": {
    "template": "https://relay.example.org/http{?target_uri}"
  }
}
]]></sourcecode>
      <t>The client has recently been instructed to use an Encrypted DNS server identified as "doh.example.com" that might support Oblivious DoH.  To discover and access this Oblivious DoH service, the client attempts to retrieve two Desired Resources on the Origin "https://doh.example.com":</t>
      <ul spacing="normal">
        <li>
          <t>The DNS Server's Access Service Description, at "/.well-known/access-services" (<xref section="5" sectionFormat="of" target="I-D.schwartz-masque-access-descriptions"/>).
          </t>
          <ul spacing="normal">
            <li>This conveys the DoH URI template associated with this origin.</li>
          </ul>
        </li>
        <li>
          <t>The Oblivious Gateway KeyConfig, at "/.well-known/oblivious-gateway" (<xref section="5" sectionFormat="of" target="I-D.pauly-ohai-svcb-config"/>).
          </t>
          <ul spacing="normal">
            <li>This conveys the public keys to use for Oblivious HTTP.</li>
          </ul>
        </li>
      </ul>
      <t>To prevent client-targeting attacks, the client retrieves both of these resources via DoubleCheck.  The HTTP requests for the Access Service Description appears as follows:</t>
      <artwork><![CDATA[
HEADERS
:method = GET
:scheme = https
:authority = relay.example.org
:path = /http?target_uri=
    https%3A%2F%2Fdoh.example.com%2F.well-known%2Faccess-services
accept: application/access-services+json

                      HEADERS
                      :status = 200
                      cache-control: public, immutable, \
                          no-transform, s-maxage=86400
                      age: 80000
                      etag: ABCD1234
                      content-type: application/access-services+json
                      {
                        "dns": {
                          "template":
                              "https://doh.example.com/foo{?dns}"
                        }
                      }

HEADERS
:method = CONNECT
:protocol = connect-udp
:scheme = https
:authority = proxy.example.org
:path = /masque?target_host=doh.example.com,target_port=443
capsule-protocol = ?1

                              HEADERS
                              :status = 200
                              capsule-protocol = ?1
]]></artwork>
      <t>The client now has a CONNECT-UDP tunnel to <tt>doh.example.com</tt>, over which it performs the following GET request using HTTP/3:</t>
      <artwork><![CDATA[
HEADERS
:method = GET
:scheme = https
:authority = doh.example.com
:path = /.well-known/access-services
accept: application/access-services+json
if-match = ABCD1234

                      HEADERS
                      :status = 200
                      cache-control: public, immutable, \
                          no-transform, s-maxage=86400
                      etag: ABCD1234
                      content-type: application/access-services+json
                      {
                        "dns": {
                          "template":
                              "https://doh.example.com/foo{?dns}"
                        }
                      }
]]></artwork>
      <t>Having successfully fetched the DoH Service Description from both locations, the client confirms that:</t>
      <ul spacing="normal">
        <li>The responses are identical.</li>
        <li>The cache-control response from the proxy contained the "public" and "immutable" directives.</li>
      </ul>
      <t>This concludes the DoubleCheck procedure.  The Oblivious Gateway KeyConfig is retrieved by a similar procedure.  These two DoubleCheck procedures can run in parallel, and <bcp14>MAY</bcp14> share a single transport proxy tunnel for efficiency.</t>
      <t>Once the client has double-checked the DoH Service Description and the KeyConfig, it can use the Oblivious DoH service by forming DNS-over-HTTPS requests for "https://doh.example.com/foo{?dns}" as Binary HTTP requests, encrypting them to the KeyConfig, and POSTing the ciphertext to "https://relay.example.org/http?target_uri=https%3A%2F%2Fdoh.example.com%2F.well-known%2Foblivious-gateway".</t>
    </section>
    <section anchor="performance-implications">
      <name>Performance Implications</name>
      <section anchor="latency">
        <name>Latency</name>
        <t>Suppose that the Client-Proxy Round-Trip Time (RTT) is <tt>A</tt>, and the Proxy-Origin RTT is <tt>B</tt>.  Suppose additionally that the Client has a persistent connection to the Proxy that is already running.  Then the procedure described in <xref target="client"/>, with a CONNECT-UDP transport proxy, requires:</t>
        <ul spacing="normal">
          <li>
            <t><tt>A</tt> for the GET request to the Proxy
            </t>
            <ul spacing="normal">
              <li>
                <tt>+B</tt> if the Desired Resource is not in cache</li>
              <li>
                <tt>+B</tt> if the Proxy does not have a TLS session ticket for the Origin</li>
            </ul>
          </li>
          <li>
            <tt>A</tt> for the CONNECT-UDP request to the Proxy</li>
          <li>
            <tt>A + B</tt> for a QUIC handshake to the Origin</li>
          <li>
            <tt>A + B</tt> for the GET request to the Origin</li>
        </ul>
        <t>This is a total of <tt>4A + 4B</tt> in the worst case.  However, clients can reduce the latency by issuing the requests to the Proxy in parallel, and by using CONNECT-UDP's "false start" support.  The Origin can also optimize performance, by issuing long-lived TLS session tickets.  With these optimizations, the expected total time is <tt>2A + 2B</tt>.</t>
        <t>This procedure only needs to be repeated if the Desired Resource has expired.  To enable regular key rotation and operational adjustments, a cache lifetime of 24 hours may be suitable.  Clients <bcp14>MAY</bcp14> perform this procedure in advance of an expiration to avoid a delay.</t>
      </section>
      <section anchor="thundering-herds">
        <name>Thundering Herds</name>
        <t>All clients of the same Proxy and Desired Resource will have locally cached copies with the same expiration time.  When this copy expires, all active clients will send refresh GET requests to the Proxy at their next request.  Proxies <bcp14>SHOULD</bcp14> use "request coalescing" to avoid duplicate cache-refresh requests to the Origin.</t>
        <t>If the Desired Resource has changed, these clients will all initiate GET requests to the Origin (via transport proxy if applicable) to double-check the new contents.  Proxies and Origins <bcp14>MAY</bcp14> use an HTTP 503 response with a "Retry-After" header to manage load spikes.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="in-scope">
        <name>In scope</name>
        <section anchor="authenticity">
          <name>Authenticity</name>
          <t>A malicious Proxy could attempt to forge the Desired Resource by replacing the response body (e.g., returning an Oblivious HTTP KeyConfig containing a Public Key controlled by the Relay).  This is prevented by the Client's requirement that the Desired Resource be served to it by the Origin over HTTPS (<xref target="client"/>).</t>
        </section>
        <section anchor="consistency">
          <name>Consistency</name>
          <t>A malicious Origin could attempt to break the consistency guarantee by issuing each Client a unique, persistent variant of the Desired Resource.  This attack is prevented by the Client's requirement that the resource be fresh according to the Proxy's cache (<xref target="client"/>).</t>
          <t>A malicious Origin could attempt to rotate its entry in the Proxy's cache in several ways:</t>
          <ul spacing="normal">
            <li>Using HTTP PUSH_PROMISE frames.  This attack is prevented by disabling PUSH_PROMISE at the Proxy (<xref target="proxy"/>).</li>
            <li>
              <t>By also acting as a Client and sending requests designed to replace the Desired Resource in the cache before it expires:
              </t>
              <ul spacing="normal">
                <li>By sending GET requests with a "Cache-Control: no-cache" or similar directive.  This is prevented by the response's "Cache-Control: public, immutable" directives, which are verified by the Client (<xref target="client"/>), and by the Proxy's obligation to respect these directives strictly (<xref target="proxy"/>).</li>
                <li>By filling the cache with new entries, causing the cached copy of the resource to be evicted.  <xref target="proxy"/> describes some possible mitigations.</li>
              </ul>
            </li>
          </ul>
        </section>
        <section anchor="temporal-correlation-attacks">
          <name>Temporal Correlation Attacks</name>
          <t>A malicious Origin could attempt to identify or link different requests for the Desired Resource, in order to link proxied requests that follow shortly after.  If a transport proxy is used (as recommended), this is prevented by fully isolating each request (<xref target="client"/>), and by disabling EDNS Client Subnet (<xref target="proxy"/>).</t>
        </section>
        <section anchor="abusive-traffic">
          <name>Abusive traffic</name>
          <t>A malicious Client could use the Proxy to send abusive traffic to any destination on the internet.  Abuse concerns can be mitigated by imposing a rate limit at the proxy (<xref target="proxy"/>).</t>
        </section>
      </section>
      <section anchor="out-of-scope">
        <name>Out of scope</name>
        <t>This specification assumes that the Client starts with identities of the Proxy and the Desired Resource that are authentic and widely shared.  If these identities are inauthentic, or are unique to the client, then the security goals of this specification are not achieved.</t>
        <t>This specification assumes that at most a small fraction of Clients are acting on behalf of a malicious Origin.  If a large fraction of the Clients are malicious, they could conspire to flood the Proxy's cache with entries that seem popular, leading to rapid eviction of any cached resources.  Similar concerns apply if a malicious Origin can compel naive Clients to fetch a very large number of distinct resources through the Proxy.</t>
        <t>Even when a transport proxy is used, the Client's requests for the Desired Resource may become linkable if they have distinctive TLS ClientHellos, QUIC Initials, HTTP/3 Settings, RTT, or other protocol features observable through the transport proxy.  This specification does not offer specific mitigations for protocol fingerprinting.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>No IANA action is requested.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <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="RFC7232">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application- level protocol for distributed, collaborative, hypertext information systems.  This document defines HTTP/1.1 conditional requests, including metadata header fields for indicating state changes, request header fields for making preconditions on such state, and rules for constructing the responses to a conditional request when one or more preconditions evaluate to false.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7232"/>
          <seriesInfo name="DOI" value="10.17487/RFC7232"/>
        </reference>
        <reference anchor="RFC9111">
          <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="RFC8246">
          <front>
            <title>HTTP Immutable Responses</title>
            <author fullname="P. McManus" initials="P." surname="McManus">
              <organization/>
            </author>
            <date month="September" year="2017"/>
            <abstract>
              <t>The immutable HTTP response Cache-Control extension allows servers to identify resources that will not be updated during their freshness lifetime.  This ensures that a client never needs to revalidate a cached fresh resource to be certain it has not been modified.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8246"/>
          <seriesInfo name="DOI" value="10.17487/RFC8246"/>
        </reference>
        <reference anchor="RFC7871">
          <front>
            <title>Client Subnet in DNS Queries</title>
            <author fullname="C. Contavalli" initials="C." surname="Contavalli">
              <organization/>
            </author>
            <author fullname="W. van der Gaast" initials="W." surname="van der Gaast">
              <organization/>
            </author>
            <author fullname="D. Lawrence" initials="D." surname="Lawrence">
              <organization/>
            </author>
            <author fullname="W. Kumari" initials="W." surname="Kumari">
              <organization/>
            </author>
            <date month="May" year="2016"/>
            <abstract>
              <t>This document describes an Extension Mechanisms for DNS (EDNS0) option that is in active use to carry information about the network that originated a DNS query and the network for which the subsequent response can be cached.  Since it has some known operational and privacy shortcomings, a revision will be worked through the IETF for improvement.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7871"/>
          <seriesInfo name="DOI" value="10.17487/RFC7871"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="I-D.ietf-ohai-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="26" month="September" year="2022"/>
            <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>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ohai-ohttp-05"/>
        </reference>
        <reference anchor="I-D.ietf-privacypass-protocol">
          <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="Armando Faz-Hernández" initials="A." surname="Faz-Hernández">
              <organization>Cloudflare</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="6" month="July" year="2022"/>
            <abstract>
              <t>   This document specifies two variants of the the two-message issuance
   protocol for Privacy Pass tokens: one that produces tokens that are
   privately verifiable, and another that produces tokens that are
   publicly verifiable.  The privately verifiable issuance protocol
   optionally supports public metadata during the issuance flow.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-protocol-06"/>
        </reference>
        <reference anchor="I-D.wood-key-consistency">
          <front>
            <title>Key Consistency and Discovery</title>
            <author fullname="Alex Davidson" initials="A." surname="Davidson">
              <organization>Brave Software</organization>
            </author>
            <author fullname="Matthew Finkel" initials="M." surname="Finkel">
              <organization>The Tor Project</organization>
            </author>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="17" month="August" year="2022"/>
            <abstract>
              <t>   This document describes the key consistency and correctness
   requirements of protocols such as Privacy Pass, Oblivious DoH, and
   Oblivious HTTP for user privacy.  It discusses several mechanisms and
   proposals for enabling user privacy in varying threat models.  In
   concludes with discussion of open problems in this area.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-wood-key-consistency-03"/>
        </reference>
        <reference anchor="SVCB">
          <front>
            <title>Service binding and parameter specification via the DNS (DNS SVCB and HTTPS RRs)</title>
            <author fullname="Benjamin M. Schwartz" initials="B. M." surname="Schwartz">
              <organization>Google</organization>
            </author>
            <author fullname="Mike Bishop" initials="M." surname="Bishop">
              <organization>Akamai Technologies</organization>
            </author>
            <author fullname="Erik Nygren" initials="E." surname="Nygren">
              <organization>Akamai Technologies</organization>
            </author>
            <date day="11" month="October" year="2022"/>
            <abstract>
              <t>   This document specifies the "SVCB" and "HTTPS" DNS resource record
   (RR) types to facilitate the lookup of information needed to make
   connections to network services, such as for HTTP origins.  SVCB
   records allow a service to be provided from multiple alternative
   endpoints, each with associated parameters (such as transport
   protocol configuration and keys for encrypting the TLS ClientHello).
   They also enable aliasing of apex domains, which is not possible with
   CNAME.  The HTTPS RR is a variation of SVCB for use with HTTP [HTTP].
   By providing more information to the client before it attempts to
   establish a connection, these records offer potential benefits to
   both performance and privacy.

   TO BE REMOVED: This document is being collaborated on in Github at:
   https://github.com/MikeBishop/dns-alt-svc
   (https://github.com/MikeBishop/dns-alt-svc).  The most recent working
   version of the document, open issues, etc. should all be available
   there.  The authors (gratefully) accept pull requests.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-dnsop-svcb-https-11"/>
        </reference>
        <reference anchor="I-D.schwartz-masque-access-descriptions">
          <front>
            <title>HTTP Access Service Description Objects</title>
            <author fullname="Benjamin M. Schwartz" initials="B. M." surname="Schwartz">
              <organization>Google LLC</organization>
            </author>
            <date day="18" month="October" year="2022"/>
            <abstract>
              <t>   HTTP proxies can operate several different kinds of access services.
   This specification provides a format for identifying a collection of
   such services.

About This Document

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

   Status information for this document may be found at
   https://datatracker.ietf.org/doc/draft-schwartz-masque-access-
   descriptions/.

   Source for this draft and an issue tracker can be found at
   https://github.com/bemasc/access-services.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-schwartz-masque-access-descriptions-03"/>
        </reference>
        <reference anchor="I-D.pauly-ohai-svcb-config">
          <front>
            <title>Discovery of Oblivious Services via Service Binding Records</title>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Tirumaleswar Reddy.K" initials="T." surname="Reddy.K">
              <organization>Nokia</organization>
            </author>
            <date day="27" month="July" year="2022"/>
            <abstract>
              <t>   This document defines a parameter that can be included in SVCB and
   HTTPS DNS resource records to denote that a service is accessible
   using Oblivious HTTP, by offering an Oblivious Gateway Resource
   through which to access the target.  This document also defines a
   mechanism to learn the key configuration of the discovered Oblivious
   Gateway Resource.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-pauly-ohai-svcb-config-03"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
y2TCYm6XrhElBocv9h5Nno/J5SrWun3j7OdvQvHui9IhMMVKjSWxxmXflXUg
9ZrdOS8LcYbKVS0ycl2J1j1HUMtN3xgWd8P1iSj96PFMRm8hY6mbfCUdo5zG
Eo3dvnNxraj8aL10rTdUkoNQ+qS4O+uxyDJ7PHWtk/uuPfan71qJxWGwbbBu
GTMEKBknHWbH/mVboPpENkuqhtx4K+hjBWAGry9Ozi9ubgdHLvNxTH7Z4Ajn
DPuBdyxxgyPp/KaejWO1praDo6XG7o8V62+kvses+zzFr16d/OrgB/zriS4+
iQ4Q73pyOJDw8ojtmDNcfVn95idLvcFq458ncPO3R84qHauDly+3jGGjRiLS
TeYHD3uk/m3Lk/S3Jef/3W8Pty6oqcP3u5cvtw4wtZ4dqZPTs/P9g1eH27Yt
Xu24Xi3NF7Bv8yRPWynrWKQtQzaYli0jt2UBp2XprNfWGZ63fPM82CDczt+D
xPpOnmNiVAGEGMMqflrw16xhK/gCh7FVPO6RElvJ48PDV4NEL20D/znayff7
26TY/31amv3fl0i1/9u8jb69pah8zm74usdMiPihR+0HRE9kHB/nWcKRhnP2
bc8BioNACQwJ2l68+vvRqbeR9og+Yey+HGSyKRSYIpXjVv3+7wDP/+NK9Lcd
V1g5XusHEtc2nQBHlINYkwZnZ5Ml5pwoW/u8FL51XYJEuqokqxD8ujaZ0clR
eC+pIykbKvau8Ci1ULfBbfmiNlttfcoDDybSJt7Gmr1uGueYfMJdk8ynT5BQ
ViO0kvdmsc4b3rSO5divajhfvdSVznOTuwTFyY+uXhLaRvtJTwdY004NHVRy
AqUXysXpjc+cqU8kRa5pJkGq5FLM5qCAmEDaSXIEx31MiDn2tdfIt/sCKSbH
7jQrootf8nz36pm7btDbKu3++ur2zofFSbZEDF2bj5yD+0y0Fnt7f5ujt+6r
c+R9HVWXLhcBXKSP5I3mtpnB4JYCMxvlJyTiH0ugfVM2RTq+w/GouwyGYufm
7o7zEx9OPrQNDDx27EIrjOABpx+oruBm16n0CHMrVm8pZw7p6o9v/hQ/gvND
ZZxM9T2/eWV0uiLhpX4EkfXC66fLKXb6BJ+eRB6pwO4yCR3z229397c0GDZA
a3vFKTKz8d442vnwzekH3+a1KVcZt3utPSAkhpQU10L0hlxZ2IprBeruL6Zq
4z5puPpGnX5wPemcopvjJKHw96abN+wN3kJ/25IkhTKNL2q5wPHhkB4/JCLl
eB7Liu8gWBN39vrWKwYknJ6DkFyHm8J0bcRrVXzlsGXcGohNVs4PilhCyf+p
zrnag+B76NMSHnPbu0HSQwJt51tSUaF2FG8narvekNSkLnvXQkj1MZksNlTm
I9U8Oc9CDKO+MladA+LaARRoLVHOjYQFp/ekzUPSyCTkW8SOlMt1+Ui6xRWb
KjNryGLEnc+udd9I3wd2pNOfGlsvpPamXcnOt8DRAR8cqjnWkdZrytU2Gds+
LBUy1DAmbeWoQw01m6UPDFDURl/IRrVXfKn004Uguc4K2Lqb86VYdm9NlQLL
TqLWPVcm4Gyk6yEtNjTEc+sm6xc5Dtx4LgntpFxmpn+JKN6TNP79WcCGzfly
1ZYHqNDNFwbb+9G8lLsoK7WCTkNsR4IFFLMK5/uxjrLyvUovGcKhV8Gk1Dlw
DvwYthxLGwF77834pfvLXrn80Nb8OMmOlBxS337fIYwIlqsjtdlImC8bcL62
50FQMUtcXqpm8b3EyE9wqfLHuMkiVM3DvRmRLpeiZHP9m5evWq/NIf3wBs7S
anwyrU0VOuaktEw9fnmpU2WX2b3rubz196y5vTR12iBm87JQFodO96nx7iS6
ggNJjIrtrvOUG6dckpLr7tTcuZnXE+pAhC+etDDnqJiU6crXCKQ9j5Nga5ej
Wv8watXT6loybtTK7dzavG3gcjenXO8eKycn3doR4Y5hVAtpLfg6GSaq3VNd
bBULAkey4pfttCZ5d0/YGbXzdrnpcbnPzgncgHtfeAydwOF6UozUXBpz/oZ2
V/RGsc/xoKsMT32qQs7dvZx7/Ds4VUUcEnVEkFdWaXQL2te8BWZ7DPoSfjCO
G64RUV9FaO3rTkx3Dd2VdPiK4uK8DxmDTe0nnyFeWg1pgs6zjnBRBVAj3Z1E
zNfqdCUWluCSpDS6+UvaTYgZd+SQM5fNCpEqUZMtauQoFkpdUTbzfa72iL2u
01VYoANaHi567UcI/3m6IdcdXaAVQrtP6Y5X4bWegw0piDhaHLlsD0VgfEk5
60tZRzqCvxOfNQUFs2BKo/Yqa6KVXNdL3jsgxyV//bHlKLOIYNn17VAtuL1K
25rRULIPYi/uCjfvsCcSlguOOjbT6UKiTiOhwDqAuIOglyS3Z/6mOqg7kWrA
l2lIuJJbUoNPcR91dX32lsqo04bIT7dtbd7ukbpLUo4uEVXEWU12Rwq1G6yg
lUuYO1KG8x24u+7yYV+q4tJ9gDXvDGyUiVY5N7QXdQ5dTNoEx/nA8T6F9V2u
dn7GwQfkoc+F3Rzdfd732OGMa76xQ71foqKZ+/Ec6juYNNJgnuAT62vS7vyF
cG7SEoPWtmN5iFmuQwzflWgYzp3B/tzd4Ei5ODhweOBuyWft/evWs9yIQKEB
rduZ8oiJqCGfmxlCx6g18QKckSrCc3yLlD4Tc+XNROJuEdc+5g0/DDMr6Qc+
fKm+R6trifMXv7/ktjR1OVi+Nc3Nu1P6pSDXvee9eyZUQLykU5vrfCp3YvvK
6DVAGlTjuVrOy3zhSbmo5+SNTDyBOPtReVmmG0yb/GBF3FJojVkAUpYU64zo
Boc3uJVe9tqIudEw9L2GTuJbh/hBPKUPJNtEI4sulHhpclVo0oPo3q674E2I
vnJcaDt66bJsViRt2x3tv9dMhiO7oB+coDuM26Ekbu/4tf08rLnQLSHsJVCT
huupsJ6jJL83oofCXJn7tQHK+R6fS7lA7vp4XryCE80XofHBzd0dC7L0k7Q3
4hG2chZS+qvlt0kiinvUbfklJ58tkdse/svYdDDd7aoZXc6hm8y0O3b3L0/e
nfRcffX0FXxB/TwYvCvle91pOTX0owHu95UmMD40zUlC6Ti41jO5rPV0JIdr
0mNJOXDj/NX5FebyI83e4L8BdBORqiJNAAA=

-->

</rfc>
