<?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-rfc2629 version 1.6.2 (Ruby 3.0.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-wood-key-consistency-02" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.3 -->
  <front>
    <title abbrev="Key Consistency and Discovery">Key Consistency and Discovery</title>
    <seriesInfo name="Internet-Draft" value="draft-wood-key-consistency-02"/>
    <author initials="A." surname="Davidson" fullname="Alex Davidson">
      <organization>Brave Software</organization>
      <address>
        <email>alex.davidson92@gmail.com</email>
      </address>
    </author>
    <author initials="M." surname="Finkel" fullname="Matthew Finkel">
      <organization>The Tor Project</organization>
      <address>
        <email>sysrqb@torproject.org</email>
      </address>
    </author>
    <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>
        <postal>
          <street>101 Townsend St</street>
          <city>San Francisco</city>
          <country>United States of America</country>
        </postal>
        <email>caw@heapingbits.net</email>
      </address>
    </author>
    <date year="2022" month="March" day="04"/>
    <keyword>Internet-Draft</keyword>
    <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>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    mailing list (),
  which is archived at <eref target=""/>.</t>
      <t>Source for this draft and an issue tracker can be found at
  <eref target="https://github.com/chris-wood/key-consitency"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Several proposed privacy-enhancing protocols such as Privacy Pass
<xref target="PRIVACY-PASS"/>, Oblivious DoH <xref target="ODOH"/>, and Oblivious HTTP <xref target="OHTTP"/> require
clients to obtain and use a public key for execution. For example, Privacy Pass
public keys are used by clients for validating privately issued tokens for
anonymous session resumption. Oblivious DoH and HTTP both use public keys to
encrypt messages to a particular server.</t>
      <t>User privacy in these systems depends on users receiving a key that many, if not
all, other users receive.  If a user were to receive a public key that was
specific to them, or restricted to a small set of users, then use of that public
key could be used to learn targeted information about the user.  Users
also need to receive the correct public key.</t>
      <t>In this document, we elaborate on these core requirements, and survey various system designs that might
be used to satisfy them. The purpose of this document is to highlight challenges in building and deploying
solutions to this problem.</t>
      <section anchor="requirements">
        <name>Requirements</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>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>This document defines the following terms:</t>
      <dl>
        <dt>Key Consistency and Correctness System (KCCS):</dt>
        <dd>
          <t>A mechanism for providing clients with a consistent view of cryptographic key material within a period of time.</t>
        </dd>
        <dt>Reliant System:</dt>
        <dd>
          <t>A system that embeds one or more key consistency and correctness systems.</t>
        </dd>
      </dl>
      <t>The KCCS's consistency model is dependent on the implementation and reliant system's threat model.</t>
    </section>
    <section anchor="reqs">
      <name>Core Requirements</name>
      <t>Privacy-focused protocols which rely on widely shared public keys typically
require keys be consistent and correct. Informally, key consistency is the
requirement that all users who communicate with an entity share the same view
of the key associated with that entity; key correctness is that the key's
secret information is controlled by the intended entity and is not known to be
available to an external attacker.</t>
      <t>Some protocols depend on large sets of users with consistent keys for privacy
reasons. Specifically, all users with a consistent key represent an anonymity
set wherein each user of the key in that set is indistinguishable from the
rest. An attacker that can actively cause inconsistent views of keys can
therefore compromise user privacy.</t>
      <t>An attacker that can cause a user to use an incorrect key will likely compromise
the entire protocol, not just privacy.</t>
      <t>Reliant systems must also consider agility when trying to satisfy these requirements. A naive solution to
ensuring consistent and correct keys is to only use a single, fixed key pair for the entirety of
the system. Users can then embed this key into software or elsewhere as needed, without any additional
mechanics or controls to ensure that other users have a different key. However, this solution clearly
is not viable in practice. If the corresponding key is compromised, the system fails. Rotation must
therefore be supported, and in doing so, users need some mechanism to ensure that newly rotated
keys are consistent and correct.</t>
      <t>Operationally, servers rotating keys may likely need to accommodate
distributed system state-synchronization issues without sacrificing availability. Some systems and protocols
may choose to prioritize strong consistency over availability, but this document assumes that availability
is preferred to total consistency.</t>
    </section>
    <section anchor="consistency-and-correctness-at-key-acquisition">
      <name>Consistency and Correctness at Key Acquisition</name>
      <t>There are a variety of ways in which reliant systems may build key consistency and correct systems (KCCS),
ranging in operational complexity to ease-of-implementation. In this section, we survey a number of
possible solutions. The viability of each varies depending on the applicable threat model, external
dependencies, and overall reliant system's requirements.</t>
      <t>We do not include the fixed public key model from
<xref target="reqs"/>, as this is likely not a viable solution for systems and protocols in practice. In all scenarios,
the server corresponding to the desired key is considered malicious.</t>
      <section anchor="server-based">
        <name>Direct Discovery</name>
        <t>In this model, users would directly query servers for their corresponding public key, as shown below.</t>
        <figure anchor="fig-disc-direct">
          <name>Direct Discovery Example</name>
          <artwork><![CDATA[
+----------+              +----------+
|          |              |          |
|  Client  +-------------->  Server  |
|          |              |          |
+----------+              +----------+
]]></artwork>
        </figure>
        <t>The properties of this solution depend on external mechanisms in place to ensure consistency or
correctness. Absent any such mechanisms, servers can produce unique keys for users without detection.
External mechanisms to ensure consistency here might include, though are not limited to:</t>
        <ul spacing="normal">
          <li>Presenting a signed assertion from a trusted entity that the key is correct.</li>
          <li>Presenting proof that the key is present in some tamper-proof log, similar to Certificate
Transparency (<xref target="RFC6962"/>) logs.</li>
          <li>User communication or gossip ensuring that all users have a shared view of the key.</li>
        </ul>
        <t>The precise external mechanism used here depends largely on the threat model. If there is a trusted
external log for keys, this may be a viable solution.</t>
      </section>
      <section anchor="proxy-based">
        <name>Single Proxy Discovery</name>
        <t>In this model, there exists a proxy that fetches keys from servers on behalf of multiple users, as shown
below.</t>
        <figure anchor="fig-disc-proxy">
          <name>Single Proxy Discovery Example</name>
          <artwork><![CDATA[
+----------+
|          |
|  Client  +----------+
|          |          |
+----------+          |
                      |
+----------+         +\/--------+      +----------+
|          |         |          |      |          |
|  Client  +--------->   Proxy  +------>  Server  |
|          |         |          |      |          |
+----------+         +^---------+      +----------+
      x               |
      x               |
+----------+          |
|          |          |
|  Client  +----------+
|          |
+----------+
]]></artwork>
        </figure>
        <t>If this proxy is trusted, then all users which request a key from this server are assured they have
a consistent view of the server key. However, if this proxy is not trusted, operational risks may arise:</t>
        <ul spacing="normal">
          <li>The proxy can collude with the server to give per-user keys to clients.</li>
          <li>The proxy can give all users a key owned by the proxy, and either collude with the server to use this
key or retroactively use this key to compromise user privacy when users later make use of the key.</li>
        </ul>
        <t>Mitigating these risks may require tamper-proof logs as in <xref target="server-based"/>, or via user gossip protocols.</t>
      </section>
      <section anchor="anon-discovery">
        <name>Multi-Proxy Discovery</name>
        <t>In this model, users leverage multiple, non-colluding proxies to fetch keys from servers, as shown below.</t>
        <figure anchor="fig-disc-multi-proxy">
          <name>Multi-Proxy Discovery Example</name>
          <artwork><![CDATA[
                     +----------+
                     |          |
     +--------------->   Proxy  +-----------+
     |               |          |           |
     |               +----------+           |
     |                                      |
+----------+         +----------+      +----\/----+
|          │         |          |      |          |
|  Client  +--------->   Proxy  +------>  Server  |
|          │         |          |      |          |
+----------+         +----------+      +----^-----+
      |                    x                |
      |                    x                |
      |              +----------+           |
      |              |          |           |
      +-------------->  Proxy   +-----------+
                     |          |
                     +----------+
]]></artwork>
        </figure>
        <t>These proxies are ideally spread across multiple vantage points. Examples of proxies include anonymous
systems such as Tor. Tor proxies are general purpose and operate at a lower layer, on arbitrary
communication flows, and therefore they are oblivious to clients fetching keys. A large set of untrusted
proxies that are aware of key fetch requests (<xref target="proxy-based"/>) may be used in a similar way. Depending
on how clients fetch such keys from servers, it may become
more difficult for servers to uniquely target individual users with unique keys without detection.
This is especially true as the number of users of these anonymity networks increases. However, beyond
Tor, there does not exist a special-purpose anonymity network for this purpose.</t>
      </section>
      <section anchor="external-db-based">
        <name>Database Discovery</name>
        <t>In this model, servers publish keys in an external database and clients fetch keys from the database, as shown below.</t>
        <figure anchor="fig-disc-database">
          <name>Database Discovery Example</name>
          <artwork><![CDATA[
+----------+
|          |
|  Client  +-----------+
|          |           |
+----------+           |
                       |
+----------+         +----------+      +----------+
|          |         |          |      |          |
|  Client  +---------> Database <------+  Server  |
|          |         |          |      |          |
+----------+         +----------+      +----------+
     x                 |
     x                 |
+----------+           |
|          |           |
|  Client  +-----------+
|          |
+----------+
]]></artwork>
        </figure>
        <t>The database is expected to have a table that asserts mappings between server names and keys. Examples
of such databases are as follows:</t>
        <ul spacing="normal">
          <li>An append-only, audited table similar to that of Certificate Transparency <xref target="RFC6962"/>. The log is operated and
audited in such a way that the contents of the log are consistent for all users. Any reliant system
which depends on this type of KCCS requires the log be audited or users have some other mechanism for
checking their view of the log state (gossiping). However, this type of system does not ensure proactive
security against malicious servers unless log participants actively check log proofs. This requirement
may impede deployment in practice. Experience with Certificate Transparency shows
that most implementations have chosen not to check SignedCertificateTimestamps before
using (that is, accepting as valid) a corresponding TLS certificate.</li>
          <li>A consensus-based table whose assertions are created by a coalition of entities that periodically agree on
the correct binding of server names and key material. In this model the agreement is achieved via a consensus
protocol, but the specific consensus protocol is dependent on the implementation.</li>
        </ul>
        <t>For privacy, users should either download the entire database and query it locally, or remotely query the database
using privacy-preserving queries (e.g., a private information retrieval (PIR) protocol). In the case where the
database is downloaded locally, it
should be considered stale and re-fetched periodically. The frequency of such updates can likely be infrequent
in practice, as frequent key updates or rotations may affect privacy; see <xref target="validity-periods"/> for details.
Downloading the entire database works best if there are a small number of entries, as it does not otherwise
impose bandwidth costs on each client that may be impractical.</t>
      </section>
    </section>
    <section anchor="validity-periods">
      <name>Minimum Validity Periods</name>
      <t>In addition to ensuring that there is one key at any time, or a limited number keys, any system
needs to ensure that a server cannot rotate its keys too often in order to divide clients into
smaller groups based on when keys are acquired. Such considerations are already highlighted within the
Privacy Pass ecosystem, more discussion can be found at <xref target="PRIVACY-PASS-ARCH"/>. Setting a minimum validity
period limits the ability of a server to rotate keys, but also limits the rate of key rotation.</t>
    </section>
    <section anchor="separate-consistency-verification">
      <name>Separate Consistency Verification</name>
      <t>The other schemes described here all attempt to directly limit the number of keys that a client
might accept.  However, by changing how keys are used, clients can impose costs on servers that
might discourage key diversity.</t>
      <t>Protocols that have distinctly separate processes for acquiring and using keys might benefit from
moving consistency checks to the usage part of the protocol.  Correctness might be guaranteed
through a relatively simple process, such obtaining keys directly from a server.  A separate
correctness check is then applied before keys are used.</t>
      <section anchor="civ">
        <name>Independent Verification</name>
        <t>Anonymous queries to verify key consistency can be used prior to use of keys.  A request for the
current key (or limited set of keys) will reveal if the key that was acquired is different than the
original.  If the key that was originally obtained is not included, the client can abort any use of
the key.</t>
        <t>It is important that any validation process not carry any information that might tie it to the
original key discovery process or that the system providing verification be trusted.  A proxy (see
<xref target="proxy-based"/>) might be sufficient for providing anonymity, though more robust anonymity
protections (see <xref target="anon-discovery"/>) could provide stronger guarantees.  Querying a database (see
<xref target="external-db-based"/>) might provide independent verification if that database can be trusted not to
provide answers that change based on client identity.</t>
      </section>
      <section anchor="kbe">
        <name>Key-Based Encryption</name>
        <t>Key-based encryption has a client encrypt the information that it sends to a server, such as a token
or signed object generated with the server keys.  This encryption uses a key derived from the key
configuration, specifically not including any form of key identifier along with the encrypted
information.  If key derivation for the encryption uses a pre-image resistant function (like HKDF),
the server can only decrypt the information if it knows the key configuration.  As there is no
information the server can use to identify which key was used, it is forced to perform trial
decryption if it wants to use multiple keys.</t>
        <t>These costs are only linear in terms of the number of active keys.  This doesn't prevent the use of
multiple keys, it only makes their use incrementally more expensive.  Trial decryption costs can be
increased by choosing a time- or memory-hard function such as <xref target="ARGON2"/> to
generate keys.</t>
        <t>Encrypting this way could provide better latency properties than a separate check.</t>
      </section>
    </section>
    <section anchor="future-work">
      <name>Future Work</name>
      <t>The model in <xref target="anon-discovery"/> seems to be the most lightweight and easy-to-deploy mechanism for
ensuring key consistency and correctness. However, it remains unclear if there exists such an
anonymity network that can scale to the widespread adoption of and requirements of protocols like
Privacy Pass, Oblivious DoH, or Oblivious HTTP. Existing infrastructure based on technologies
like Certificate Transparency or Key Transparency may work, but there is currently no general
purpose system for transparency of opaque keys (or other application data).</t>
    </section>
    <section anchor="sec">
      <name>Security Considerations</name>
      <t>This document discusses several models that systems might use to implement public key discovery
while ensuring key consistency and correctness. It does not make any recommendations for such
models as the best model depends on differing operational requirements and threat models.</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="RFC6962">
          <front>
            <title>Certificate Transparency</title>
            <author fullname="B. Laurie" initials="B." surname="Laurie">
              <organization/>
            </author>
            <author fullname="A. Langley" initials="A." surname="Langley">
              <organization/>
            </author>
            <author fullname="E. Kasper" initials="E." surname="Kasper">
              <organization/>
            </author>
            <date month="June" year="2013"/>
            <abstract>
              <t>This document describes an experimental protocol for publicly logging the existence of Transport Layer Security (TLS) certificates as they are issued or observed, in a manner that allows anyone to audit certificate authority (CA) activity and notice the issuance of suspect certificates as well as to audit the certificate logs themselves.  The intent is that eventually clients would refuse to honor certificates that do not appear in a log, effectively forcing CAs to add all issued certificates to the logs.</t>
              <t>Logs are network services that implement the protocol operations for submissions and queries that are defined in this document.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6962"/>
          <seriesInfo name="DOI" value="10.17487/RFC6962"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="ODOH">
          <front>
            <title>Oblivious DNS Over HTTPS</title>
            <author fullname="Eric Kinnear">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Patrick McManus">
              <organization>Fastly</organization>
            </author>
            <author fullname="Tommy Pauly">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Tanya Verma">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Christopher A. Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="17" month="February" year="2022"/>
            <abstract>
              <t>   This document describes a protocol that allows clients to hide their
   IP addresses from DNS resolvers via proxying encrypted DNS over HTTPS
   (DoH) messages.  This improves privacy of DNS operations by not
   allowing any one server entity to be aware of both the client IP
   address and the content of DNS queries and answers.

   This experimental protocol is developed outside the IETF and is
   published here to guide implementation, ensure interoperability among
   implementations, and enable wide-scale experimentation.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-pauly-dprive-oblivious-doh-11"/>
        </reference>
        <reference anchor="PRIVACY-PASS">
          <front>
            <title>Privacy Pass Issuance Protocol</title>
            <author fullname="Sofía Celi">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Alex Davidson">
              <organization>Brave Software</organization>
            </author>
            <author fullname="Armando Faz-Hernandez">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Steven Valdez">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Christopher A. Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="31" month="January" 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-02"/>
        </reference>
        <reference anchor="PRIVACY-PASS-ARCH">
          <front>
            <title>Privacy Pass Architectural Framework</title>
            <author fullname="Alex Davidson">
              <organization>LIP</organization>
            </author>
            <author fullname="Jana Iyengar">
              <organization>Fastly</organization>
            </author>
            <author fullname="Christopher A. Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="31" month="January" year="2022"/>
            <abstract>
              <t>   This document specifies the architectural framework for constructing
   secure and anonymity-preserving instantiations of the Privacy Pass
   protocol.  It provides recommendations on how the protocol ecosystem
   should be constructed to ensure the privacy of clients, and the
   security of all participating entities.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-architecture-02"/>
        </reference>
        <reference anchor="OHTTP">
          <front>
            <title>Oblivious HTTP</title>
            <author fullname="Martin Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Christopher A. Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="15" month="February" year="2022"/>
            <abstract>
              <t>   This document describes a system for the forwarding of encrypted HTTP
   messages.  This allows a client to make multiple requests of a server
   without the server being able to link those requests to the client or
   to identify the requests as having come from the same client.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ohai-ohttp-01"/>
        </reference>
        <reference anchor="ARGON2">
          <front>
            <title>Argon2 Memory-Hard Function for Password Hashing and Proof-of-Work Applications</title>
            <author fullname="Alex Biryukov">
              <organization>University of Luxembourg</organization>
            </author>
            <author fullname="Daniel Dinu">
              <organization>University of Luxembourg</organization>
            </author>
            <author fullname="Dmitry Khovratovich">
              <organization>ABDK Consulting</organization>
            </author>
            <author fullname="Simon Josefsson">
              <organization>SJD AB</organization>
            </author>
            <date day="11" month="March" year="2021"/>
            <abstract>
              <t>This document describes the Argon2 memory-hard function for password hashing and proof-of-work applications.  We provide an implementer-oriented description with test vectors.  The purpose is to simplify adoption of Argon2 for Internet protocols.  This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.
              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-argon2-13"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
