<?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.5.17 -->
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-privacypass-architecture-03" category="info" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.11.1 -->
  <front>
    <title abbrev="PP architecture">Privacy Pass Architectural Framework</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-architecture-03"/>
    <author initials="A." surname="Davidson" fullname="Alex Davidson">
      <organization>LIP</organization>
      <address>
        <postal>
          <city>Lisbon</city>
          <country>Portugal</country>
        </postal>
        <email>alex.davidson92@gmail.com</email>
      </address>
    </author>
    <author initials="J." surname="Iyengar" fullname="Jana Iyengar">
      <organization>Fastly</organization>
      <address>
        <email>jri@fastly.com</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="07"/>
    <keyword>Internet-Draft</keyword>
    <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>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>Privacy Pass is a protocol for authorization based on anonymous-credential
authentication mechanisms. Typical approaches for authorizing clients,
such as through the use of long-term cookies, are not privacy-friendly
since they allow servers to track clients across sessions and interactions.
Privacy Pass takes a different approach: instead of presenting linkable
state carrying information to servers, e.g., whether or not the client
is an authorized user or has completed some prior challenge, clients
present unlinkable proofs that attest to this information.</t>
      <t>The most basic Privacy Pass protocol provides a set of cross-origin
authorization tokens that protect the client's anonymity during interactions
with a server. This allows clients to communicate an attestation of a
previously authenticated server action, without having to reauthenticate
manually. The tokens retain anonymity in the sense that the act of
revealing them cannot be linked back to the session where they were
initially issued.</t>
      <t>At a high level, Privacy Pass is composed of two protocols: issuance
and redemption.</t>
      <t>The issuance protocol runs between a Client and two network functions in the
Privacy Pass architecture: Attestation and Issuance. These two network
functions can be implemented by the same protocol participant, but can also be
implemented separately. The Issuer is responsible for issuing tokens in
response to requests from Clients. The Attester is responsible for attesting
properties about the Client for which tokens are issued. The Issuer needs to be
trusted by the server that later redeems the token. Attestation can be
performed by the Issuer or by an Attester that is trusted by the Issuer.
Clients might prefer to select different Attesters, separate from the Issuer,
to be able to use preferred authentication methods or improve privacy by not
directly communicating with an Issuer. Depending on the attestation,
Attesters can store state about a Client, such as the number of overall tokens
issued thus far. As an example of an Issuance protocol, in the original Privacy
Pass protocol <xref target="PPSRV" format="default"/>, tokens were only issued to Clients that solved
CAPTCHAs. In this context, the Attester attested that some client solved a
CAPTCHA and the resulting token produced by the Issuer was proof of this fact.</t>
      <t>The redemption protocol runs between Client and Origin (server). It allows
Origins to challenge Clients to present one or more tokens for authorization.
Depending on the type of token, e.g., whether or not it is cross-origin
or per-origin, and whether or not it can be cached, the Client either presents
a previously obtained token or invokes the issuance protocol to acquire one
for authorization.</t>
      <t>The issuance and redemption protocols operate in concert as shown in
the figure below.</t>
      <figure anchor="fig-overview">
        <name>Privacy Pass Architectural Components</name>
        <artwork name="" type="" align="left" alt=""><![CDATA[
      Origin          Client        Attester          Issuer
  /--------------------------------------------------------------------
  |                 /-----------------------------------------\
  |   Challenge ----> Attest --->                             |
  |                 | TokenRequest --------------->           |
  |   Redemption    |                              (validate) | Issuance
  |      Flow       |                              (evaluate) |   Flow
  |                 |     <-------------------  TokenResponse |
  |   <--- Response |                                         |
  |                 \-----------------------------------------/
  \--------------------------------------------------------------------
]]></artwork>
      </figure>
      <t>This document describes requirements for both issuance and redemption
protocols. This document also describes ecosystem considerations that
impact the stated privacy and security guarantees of the protocol.</t>
    </section>
    <section anchor="terminology" numbered="true" toc="default">
      <name>Terminology</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="default"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <t>The following terms are used throughout this document.</t>
      <ul spacing="normal">
        <li>Client: An entity that seeks authorization to an Origin.</li>
        <li>Origin: An entity that challenges Clients for tokens.</li>
        <li>Issuer: An entity that issues tokens to Clients for properties
attested to by the Attester.</li>
        <li>Attester: An entity that attests to properties of Client for the
purposes of token issuance.</li>
      </ul>
    </section>
    <section anchor="architecture" numbered="true" toc="default">
      <name>Architecture</name>
      <t>The Privacy Pass architecture consists of four logical entities --
Client, Origin, Issuer, and Attester -- that work in concert as
shown in <xref target="introduction" format="default"/> for token issuance and redemption. This
section describes the purpose of token issuance and redemption
and the requirements therein on the relevant participants.</t>
      <section anchor="redemption-protocol" numbered="true" toc="default">
        <name>Redemption Protocol</name>
        <t>The redemption protocol is a simple challenge-response based authorization
protocol between Client and Origin. Origins prompt Clients with a token
challenge and, if possible, Clients present a valid token for the challenge
in response. The context in which an Origin challenges a Client for a token
is referred to as the redemption context. This context includes all information
associated with the redemption event, such as the timestamp of the event,
Client visible information (including the IP address), and the Origin name.</t>
        <t>The challenge controls the type of token that the Origin will accept for the
given resource. As described in <xref target="HTTP-Authentication" format="default"/>, there are a number
of ways in which the token may vary, including:</t>
        <ul spacing="normal">
          <li>Issuance protocol. The token identifies the type of issuance protocol
required for producing the token. Different issuance protocols have different
security properties, e.g., some issuance protocols may produce tokens that
are publicly verifiable, whereas others may not have this property.</li>
          <li>Issuer identity. Tokens identify which issuers are trusted for a given
issuance protocol.</li>
          <li>Interactive or non-interactive. Tokens can either be interactive or not.
An interactive token is one which requires a freshly issued token based
on the challenge, whereas a non-interactive token can be issued proactively
and cached for future use.</li>
          <li>Per-origin or cross-origin. Tokens can be constrained to the Origin for
which the challenge originated, or can be used across Origins.</li>
        </ul>
        <t>Depending on the use case, Origins may need to maintain state to track
redeemed tokens. For example, Origins that accept non-interactive,
cross-origin tokens SHOULD track which tokens have been redeemed already,
since these tokens can be issued and then spent multiple times in
response to any such challenge. See <xref target="double-spend" format="default"/> for discussion.</t>
        <t>Origins that admit cross-origin tokens bear some risk of allowing tokens
issued for one Origin to be spent in an interaction with another Origin.
If tokens protected with resources are unique to a single Origin, then
said Origin MUST NOT admit cross-origin tokens for authorization.</t>
      </section>
      <section anchor="issuance-protocol" numbered="true" toc="default">
        <name>Issuance Protocol</name>
        <t>The issuance protocol embodies the core of Privacy Pass. It takes as input
a challenge from the redemption protocol and produces a token, as shown
in the figure below.</t>
        <figure anchor="fig-issuance">
          <name>Issuance Overview</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
  Origin          Client        Attester          Issuer

                  +--------------------------------------\
    Challenge ----> TokenRequest --->                    |
                  |             (attest)                 |
                  |                TokenRequest --->     |
                  |                            (evaluate)|
                  |                   <--- TokenResponse |
      Token  <----+ TokenResponse <---                   |
                  |--------------------------------------/
]]></artwork>
        </figure>
        <t>Clients interact with the Attester and Issuer to produce a token in response to
a challenge. The context in which an Attester vouches for a Client during issuance
is referred to as the attestation context. This context includes all information
associated with the issuance event, such as the timestamp of the event and
Client visible information, including the IP address or other information specific
to the type of attestation done.</t>
        <t>Each issuance protocol may be different, e.g., in the number and types of
participants, underlying cryptographic constructions used when issuing tokens,
and even privacy properties.</t>
        <t>Clients initiate the Token issuance protocol using the challenge, a randomly
generated nonce, and public key for the Issuer. The Token issuance protocol
itself can be any interactive protocol between Client, Issuer, or other
parties that produces a valid authenticator over the Client's input, subject
to the following security requirements.</t>
        <ol spacing="normal" type="1"><li>Unconditional input secrecy. The issuance protocol MUST NOT reveal anything
about the Client's private input, including the challenge and nonce, to the
Attester or Issuer. The issuance protocol can reveal the Issuer public key for
the purposes of determining which private key to use in producing the issuance
protocol. A result of this property is that the redemption flow is unlinkable
from the issuance flow.</li>
          <li>One-more forgery security. The issuance protocol MUST NOT allow malicious
Clients or Attesters (acting as Clients) to forge tokens without interacting
with the Issuer directly.</li>
          <li>Concurrent security. The issuance protocol MUST be safe to run concurrently
with arbitrarily many Clients.</li>
        </ol>
        <t>Each Issuance protocol MUST come with a detailed analysis of the privacy impacts
of the protocol, why these impacts are justified, and guidelines on changes to
the parametrization in <xref target="parametrization" format="default"/>.</t>
        <t>The mechanism by which clients obtain the Issuer public key is not specified.
Clients may be configured with this key or they may discover it via some other
form. See <xref target="CONSISTENCY" format="default"/>.</t>
        <t>Depending on the use case, issuance may require some form of Client
anonymization service similar to an IP-hiding proxy so that Issuers cannot
learn information about Clients. This can be provided by an explicit
participant in the issuance protocol, or it can be provided via external means,
e.g., through the use of an IP-hiding proxy service like Tor. In general,
Clients SHOULD minimize or remove identifying information where possible when
invoking the issuance protocol.</t>
        <t>Issuers MUST NOT issue tokens for Clients through untrusted Attesters. This is
important because the Attester's role is to vouch for trust in
privacy-sensitive Client information, such as account identifiers or IP address
information, to the Issuer. Tokens produced by an Issuer that admits issuance
for any type of attestation cannot be relied on for any specific property.
See <xref target="attester-role" format="default"/> for more details.</t>
        <section anchor="attester-role" numbered="true" toc="default">
          <name>Attester Role</name>
          <t>Attestation is an important part of the issuance protocol. Attestation is the
process by which an Attester bears witness to, confirms, or authenticates a
Client so as to verify a property about the Client that is required for
Issuance. Examples of attestation properties include, though are not limited
to:</t>
          <ul spacing="normal">
            <li>Capable of solving a CAPTCHA. Clients that solve CAPTCHA challenges can attest
to this capability for the purposes of being ruled out as a bot or otherwise
automated Client.</li>
            <li>Client state. Clients can be associated with state and the attester can
attest to this state. Examples of state include the number of issuance
protocol invocations, the client's geographic region, and whether the
client has a valid application-layer account.</li>
            <li>Trusted device. Some Clients run on trusted hardware that are capable of
producing device-level attestation statements.</li>
          </ul>
          <t>Each of these attestation types have different security properties. For
example, attesting to having a valid account is different from attesting to be
running on trusted hardware. In general, Attesters should accept a limited form
of attestation formats.</t>
          <t>Each attestation format also has an impact on the overall system privacy. For
example, the number of users in possession of a single class of trusted device
might be lesser than the number of users that can solve CAPTCHAs. Similarly,
requiring a conjunction of attestation types could decrease the overall
anonymity set size. For example, the number of Clients that have solved a
CAPTCHA in the past day, have a valid account, and are running on a trusted
device is lesser than the number of Clients that have solved a CAPTCHA in the
past day. Attesters should not admit attestation types that result in small
anonymity sets.</t>
        </section>
        <section anchor="issuer-role" numbered="true" toc="default">
          <name>Issuer Role</name>
          <t>Issuers MUST be uniquely identifiable by all Clients with a consistent
identifier. In a web context, this identifier might be the Issuer host name.
As discussed later in <xref target="privacy" format="default"/>, ecosystems that admit a large number of
Issuers can lead to privacy concerns for the Clients in the ecosystem.
Therefore, in practice, the number of Issuers should be bounded. The actual
Issuers can be replaced with different Issuers as long as the total never
exceeds these bounds. Moreover, Issuer replacements also have an effect on
client anonymity that is similar to when a key rotation occurs. See <xref target="privacy" format="default"/>
for more details about maintaining privacy with multiple Issuers.</t>
          <section anchor="key-management" numbered="true" toc="default">
            <name>Key Management</name>
            <t>To facilitate issuance, the Issuer MUST hold an Issuance key pair at any
given time. The Issuer public key MUST be made available to all Clients in
such a way that key rotations and other updates are publicly visible.
The key material and protocol configuration that an Issuer uses to produce
tokens corresponds to a number of different pieces of information.</t>
            <ul spacing="normal">
              <li>The issuance protocol in use; and</li>
              <li>The public keys that are active for the Issuer.</li>
            </ul>
            <t>The way that the Issuer publishes and maintains this information impacts
the effective privacy of the clients; see <xref target="privacy" format="default"/> for more details.
The fundamental requirement for key management and discovery is that Issuers
must be unable to target specific clients with unique keys without detection.
There are a number of ways in which this might be implemented:</t>
            <ul spacing="normal">
              <li>Servers use a verifiable, tamper-free registry from which clients discover
keys. Similar to related mechanisms and protocols such as Certificate
Transparency <xref target="RFC6962" format="default"/>, this may require external auditors or additional
client behavior to ensure the registry state is consistent for all clients.</li>
              <li>Clients use an anonymity-preserving tool such as Tor to discover keys
from multiple network vantage points. This is done to ensure consistent
keys to seemingly different clients.</li>
              <li>Clients embed Issuer keys into software.</li>
            </ul>
            <t>As above, specific mechanisms for key management and discovery are out of scope
for this document.</t>
          </section>
          <section anchor="key-rotation" numbered="true" toc="default">
            <name>Key Rotation</name>
            <t>Token issuance associates all issued tokens with a particular choice of
key. If an Issuer issues tokens with many keys, then this may harm the
anonymity of the Client. For example, they would be able to map the
Client's access patterns by inspecting which key each token they possess
has been issued under.</t>
            <t>To prevent against this, Issuers MUST only use one private key for
issuing tokens at any given time. Servers MAY use one or more keys for
redemption to allow Issuers for seamless key rotation.</t>
            <t>Servers may rotate keys as a means of revoking tokens issued under old
or otherwise expired keys. Alternatively, Issuers may include expiration
information as metadata alongside the token; See <xref target="metadata" format="default"/> for more
discussion about metadata constraints. Both techniques are equivalent
since they cryptographically bind expiration to individual tokens.</t>
            <t>Key rotations should be limited in frequency for similar reasons. See
<xref target="parametrization" format="default"/> for guidelines on what frequency of key rotations
are permitted.</t>
          </section>
        </section>
        <section anchor="metadata" numbered="true" toc="default">
          <name>Metadata</name>
          <t>Certain instantiations of the issuance protocol may permit public or private
metadata to be cryptographically bound to a token. As an example, one
trivial way to include public metadata is to assign a unique issuer
public key for each value of metadata, such that N keys yields log2(N)
bits of metadata. The total amount of metadata bits included in a token
is the sum of public and private metadata bits. See <xref target="parametrization" format="default"/>
for discussion about metadata limits.</t>
          <t>Public metadata is that which clients can observe as part of the token
issuance flow. Public metadata can either be transparent or opaque. For
example, transparent public metadata is a value that the client either
generates itself, or the Issuer provides during the issuance flow and
the client can check for correctness. Opaque public metadata is metadata
the client can see but cannot check for correctness. As an example, the
opaque public metadata might be a "fraud detection signal", computed on
behalf of the Issuer, during token issuance. In normal circumstances,
clients cannot determine if this value is correct or otherwise a tracking
vector.</t>
          <t>Private metadata is that which clients cannot observe as part of the token
issuance flow. Such instantiations may be built on the Private Metadata Bit
construction from Kreuter et al. <xref target="KLOR20" format="default"/>
or the attribute-based VOPRF from Huang et al. <xref target="HIJK21" format="default"/>.</t>
          <t>Metadata may also be arbitrarily long or bounded in length. The amount of
permitted metadata may be determined by application or by the underlying
cryptographic protocol.</t>
        </section>
        <section anchor="extensions" numbered="true" toc="default">
          <name>Issuance Protocol Extensibility</name>
          <t>The Privacy Pass protocol and ecosystem are both intended to be receptive to
extensions that expand the current set of functionalities through new issuance
protocols. Each issuance protocol SHOULD come with a detailed analysis of the
privacy impacts of the extension, why these impacts are justified, and
guidelines on changes to the parametrization in <xref target="parametrization" format="default"/>.
Any extension to the Privacy Pass protocol MUST adhere to the guidelines
specified in <xref target="issuer-role" format="default"/> for managing Issuer public key data.</t>
        </section>
      </section>
    </section>
    <section anchor="deployment" numbered="true" toc="default">
      <name>Deployment Considerations</name>
      <t>Client uses Privacy Pass to separate attestation context and redemption
context. Linking or combining these contexts can reveal sensitive information
about the Client, including their identity or browsing history. Depending on the
deployment model, separating these contexts can take different forms.
The Origin, Attester, and Issuer portrayed in <xref target="fig-overview" format="default"/> can be instantiated
and deployed in a number of different ways. This section covers some expected
deployment models and their corresponding security and privacy considerations.
The discussion below assumes non-collusion between entities when operated by
separate parties. Mechanisms for enforcing non-collusion are out of scope
for this architecture.</t>
      <section anchor="deploy-shared" numbered="true" toc="default">
        <name>Shared Origin, Attester, Issuer</name>
        <t>In this model, the Origin, Attester, and Issuer are all operated by the same entity,
as shown in the figure below.</t>
        <figure anchor="fig-deploy-shared">
          <name>Shared Deployment Model</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
                   +------------------------------------------+
      Client       |  Attester         Issuer         Origin  |
        |          |                                          |
        |          |          Challenge                       |
        <----------------------------------------------+      |
        |          | Attest                                   |
        +----------------->                                   |
        |          |     TokenRequest                         |
        +-------------------------------->                    |
        |          |     TokenResponse                        |
        <--------------------------------+                    |
        |          |          Redeem                          |
        +---------------------------------------------->      |
                   +------------------------------------------+
]]></artwork>
        </figure>
        <t>This model represents the initial deployment of Privacy Pass, as described in <xref target="PPSRV" format="default"/>.
In this model, the Attester, Issuer, and Origin share the attestation and redemption contexts.
As a result, attestation mechanisms that can uniquely identify a Client, e.g., requiring
that Clients authenticate with some type of application-layer account, are not appropriate,
as they could be used to learn or reconstruct a Client's browsing history.</t>
        <t>Attestation and redemption context unlinkability requires that these events be separated
over time, e.g., through the use of non-interactive tokens that can be issued without
a fresh Origin challenge, or over space, e.g., through the use of an anonymizing proxy
when connecting to the Origin.</t>
      </section>
      <section anchor="deploy-joint-issuer" numbered="true" toc="default">
        <name>Joint Attester and Issuer</name>
        <t>In this model, the Attester and Issuer are operated by the same entity
that is separate from the Origin, as shown in the figure below.</t>
        <figure anchor="fig-deploy-joint-issuer">
          <name>Joint Attester and Issuer Deployment Model</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
                                                   +-----------+
      Client                                       |   Origin  |
        |                    Challenge             |           |
        <-----------------------------------------------+      |
        |                                          |           |
        |          +---------------------------+   |           |
        |          |  Attester         Issuer  |   |           |
        |          |                           |   |           |
        |          | Attest                    |   |           |
        +----------------->                    |   |           |
        |          |     TokenRequest          |   |           |
        +-------------------------------->     |   |           |
        |          |     TokenResponse         |   |           |
        <--------------------------------+     |   |           |
        |          +---------------------------+   |           |
        |                                          |           |
        |                    Redeem                |           |
        +----------------------------------------------->      |
                                                   |           |
                                                   +-----------+
]]></artwork>
        </figure>
        <t>This model is useful if an Origin wants to offload attestation and issuance
to a trusted entity. In this model, the Attester and Issuer share attestation
context for the Client, which can be separate from the Origin's redemption context.</t>
        <t>For certain types of issuance protocols, this model separates attestation and redemption
contexts. However, Issuance protocols that require the Issuer to learn information about
the Origin, such as that which is described in [rate-limited], are not appropriate
since they could link attestation and redemption contexts through the Origin name.</t>
      </section>
      <section anchor="deploy-joint-origin" numbered="true" toc="default">
        <name>Joint Origin and Issuer</name>
        <t>In this model, the Origin and Issuer are operated by the same entity, separate from
the Attester, as shown in the figure below.</t>
        <figure anchor="fig-deploy-joint-origin">
          <name>Joint Origin and Issuer Deployment Model</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
                                    +--------------------------+
      Client                        |   Issuer         Origin  |
        |                Challenge  |                          |
        <-----------------------------------------------+      |
        |                           |                          |
        |          +-----------+    |                          |
        |          |  Attester |    |                          |
        |          |           |    |                          |
        |          | Attest    |    |                          |
        +----------------->    |    |                          |
        |          |           |    |                          |
        |          |     TokenRequest                          |
        +-------------------------------->                     |
        |          |           |    |                          |
        |          |     TokenResponse                         |
        <--------------------------------+                     |
        |          |           |    |                          |
        |          +-----------+    |                          |
        |                           |                          |
        |                 Redeem    |                          |
        +----------------------------------------------->      |
                                    +--------------------------+
]]></artwork>
        </figure>
        <t>This model is useful for Origins that require Client-identifying attestation,
e.g., through the use of application-layer account information, but do not
otherwise want to learn information about individual Clients beyond what is
observed during the token redemption, such as Client IP addresses.</t>
        <t>In this model, attestation and redemption contexts are separate. As a result,
any type of attestation is suitable in this model. Moreover, any type of token
challenge is suitable assuming there is more than one Origin involved, since no
single party will have access to the identifying Client information and unique
Origin information. If there is only a single Origin, then per-Origin tokens
are not appropriate in this model, since the Attester can learn the redemption
context. (Note, however, that the Attester does not learn whether a token is
per-Origin or cross-Origin.)</t>
      </section>
      <section anchor="deploy-split" numbered="true" toc="default">
        <name>Split Origin, Attester, Issuer</name>
        <t>In this model, the Origin, Attester, and Issuer are all operated by different entities,
as shown in the figure below.</t>
        <figure anchor="fig-deploy-split">
          <name>Split Deployment Model</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
                                                   +-----------+
      Client                                       |   Origin  |
        |                    Challenge             |           |
        <-----------------------------------------------+      |
        |                                          |           |
        |          +-----------+                   |           |
        |          |  Attester |                   |           |
        |          |           |                   |           |
        |          | Attest    |    +----------+   |           |
        +----------------->    |    |  Issuer  |   |           |
        |          |           |    |          |   |           |
        |          |     TokenRequest          |   |           |
        +-------------------------------->     |   |           |
        |          |           |    |          |   |           |
        |          |     TokenResponse         |   |           |
        <--------------------------------+     |   |           |
        |          |           |    |          |   |           |
        |          +-----------+    +----------+   |           |
        |                                          |           |
        |                    Redeem                |           |
        +----------------------------------------------->      |
                                                   |           |
                                                   +-----------+
]]></artwork>
        </figure>
        <t>This is the most general deployment model, and is necessary for some
types of issuance protocols where the Attester plays a role in token
issuance; see [rate-limited] for one such type of issuance protocol.
In this model, the Attester, Issuer, and Origin have a separate view
of the Client: the Attester sees potentially sensitive Client identifying
information, such as account identifiers or IP addresses, the Issuer
sees only the information necessary for Issuance, and the Origin sees
token challenges, corresponding tokens, and Client source information,
such as their IP address. As a result, attestation and redemption contexts
are separate, and therefore any type of token challenge is suitable in
this model assuming there is more than a single Origin. As in the
Joint Origin and Issuer model in <xref target="deploy-joint-origin" format="default"/>, if there is
only a single Origin, then per-Origin tokens are not appropriate.</t>
      </section>
    </section>
    <section anchor="privacy" numbered="true" toc="default">
      <name>Privacy Considerations</name>
      <t>Client uses Private Pass to separate attestation context and redemption
context. Depending on the deployment model, this can take different forms.
For example, any Client can only remain private relative to the entire
space of other Clients using the protocol. Moreover, by owning tokens for
a given set of keys, the Client's anonymity set shrinks to the total number
of clients controlling tokens for the same keys.</t>
      <t>In the following, we consider the possible ways that Issuers can leverage
their position to try and reduce the anonymity sets that Clients belong
to (or, user segregation). For each case, we provide mitigations that
the Privacy Pass ecosystem must implement to prevent these actions.</t>
      <section anchor="metadata-privacy-implications" numbered="true" toc="default">
        <name>Metadata Privacy Implications</name>
        <t>Any metadata bits of information can be used to further segment the
size of the Client's anonymity set. Any Issuer that wanted to
track a single Client could add a single metadata bit to Client tokens. For
the tracked Client it would set the bit to <tt>1</tt>, and <tt>0</tt> otherwise. Adding
additional bits provides an exponential increase in tracking granularity
similarly to introducing more Issuers (though with more potential
targeting).</t>
        <t>For this reason, the amount of metadata used by an Issuer in creating
redemption tokens must be taken into account -- together with the bits
of information that Issuer's may learn about Clients otherwise. Since this
metadata may be useful for practical deployments of Privacy Pass, Issuers
must balance this against the reduction in Client privacy. In general,
Issuers should permit no more than 32 bits of metadata, as this can
uniquely identify each possible user. We discuss this more in
<xref target="parametrization" format="default"/>.</t>
      </section>
      <section anchor="issuer-key-rotation" numbered="true" toc="default">
        <name>Issuer Key Rotation</name>
        <t>Techniques to introduce Client "segregation" can be used to reduce
Client anonymity. Such techniques are closely linked to the type of key
schedule that is used by the Issuer. When an Issuer rotates their key,
any Client that invokes the issuance protocol in this key cycle will be
part of a group of possible clients owning valid tokens for this key. To
mechanize this attack strategy, an Issuer could introduce a key rotation
policy that forces Clients into small key cycles. Thus, reducing the
size of the anonymity set for these Clients.</t>
        <t>Issuers SHOULD invoke key rotation for a period of time between 1 and 12 weeks.
Key rotations represent a trade-off between Client privacy and continued Issuer
security. Therefore, it is still important that key rotations occur on a
regular cycle to reduce the harmfulness of an Issuer key compromise.</t>
        <t>With a large number of Clients, a minimum of one week gives a large enough
window for Clients to participate in the issuance protocol and thus enjoy the
anonymity guarantees of being part of a larger group. A maximum of
12 weeks limits the damage caused by a key compromise. If an Issuer
realizes that a key compromise has occurred then the Issuer should
generate a new key and make it available to Clients. If possible, it should
invoke any revocation procedures that may apply for the old key.</t>
      </section>
      <section anchor="servers" numbered="true" toc="default">
        <name>Large Number of Issuers</name>
        <t>Similarly to the Issuer rotation dynamic that is raised above, if there
are a large number of Issuers, and Origins accept all of them, segregation
can occur. For example, if Clients obtain tokens from many Issuers, and
Origins later challenge a Client for a token from each Issuer, Origins
can learn information about the Client. Each per-Issuer token that a
Client holds essentially corresponds to a bit of information about the
Client that Origin learn. Therefore, there is an exponential loss in
anonymity relative to the number of Issuers that there are.</t>
        <t>For example, if there are 32 Issuers, then Origins learn 32 bits of
information about the Client if a valid token is presented for each one.
If the distribution of Issuer trust is anything close to a uniform
distribution, then this is likely to uniquely identify any Client amongst
all other Internet users. Assuming a uniform distribution is clearly the
worst-case scenario, and unlikely to be accurate, but it provides a stark
warning against allowing too many Issuers at any one time.</t>
        <t>In cases where clients can hold tokens for all Issuers at any given
time, a strict bound SHOULD be applied to the active number of Issuers
in the ecosystem. We propose that allowing no more than 4 Issuers at any
one time is highly preferable (leading to a maximum of 64 possible user
segregations). However, as highlighted in <xref target="parametrization" format="default"/>, having a
very large user base (&gt; 5 million users), could potentially allow for
larger values. Issuer replacements should only occur with the same
frequency as config rotations as they can lead to similar losses in
anonymity if clients still hold redemption tokens for previously active
Issuers.</t>
        <t>In addition, we RECOMMEND that trusted registries indicate at all times
which Issuers are deemed to be active. If a Client is asked to invoke
any Privacy Pass exchange for an Issuer that is not declared active,
then the client SHOULD refuse to retrieve the Issuer public key
during the protocol.</t>
        <section anchor="more-servers" numbered="true" toc="default">
          <name>Allowing More Issuers</name>
          <t>The bounds on the numbers of Issuers that this document proposes above are
very restrictive. This is because this document considers a situation where
a Client could be challenged (and asked to redeem) tokens for any Issuer.</t>
          <t>An alternative system is to ensure a robust strategy for ensuring that
Clients only possess redemption tokens for a similarly small number of
Issuers at any one time. This prevents a malicious verifier from being
able to invoke redemptions for many Issuers since the Client would only
be holding redemption tokens for a small set of Issuers. When a Client
is issued tokens from a new Issuer and already has tokens from the
maximum number of Issuers, it simply deletes the oldest set of
redemption tokens in storage and then stores the newly acquired tokens.</t>
          <t>For example, if Clients ensure that they only hold redemption tokens for
4 Issuers, then this increases the potential size of the anonymity sets
that the Client belongs to. However, this doesn't protect Clients
completely as it would if only 4 Issuers were permitted across the whole
system. For example, these 4 Issuers could be different for each Client.
Therefore, the selection of Issuers they possess tokens for is still
revealing. Understanding this trade-off is important in deciding the
effective anonymity of each Client in the system.</t>
          <section anchor="redemption-partitions" numbered="true" toc="default">
            <name>Redemption Partitions</name>
            <t>Another option to allow a large number of Issuers in the ecosystem,
while preventing the joining of a number of different tokens is for the
Client to maintain sharded "redemption partitions". This would allow the
Client to redeem the tokens it wishes to use in a particular context,
while still allowing the Client to maintain a large variety of tokens
from many Issuers. Within a redemption partition, the Client limits the
number of different Issuers used to a small number to maintain the
privacy properties the Client requires. As long as each redemption
partition maintains a strong privacy boundary with each other, the
verifier will only be able to learn a number of bits of information up
to the limits within that "redemption partitions".</t>
            <t>To support this strategy, the client keeps track of a <tt>partition</tt> which
contains the set of Issuers that redemptions have been attempted
against. An empty redemption is returned when the limit has been
hit:</t>
            <artwork name="" type="" align="left" alt=""><![CDATA[
  Client(partition, issuer)                     Issuer(skS, pkS)
  ------------------------------------------------------------
  if issuer not in partition {
    if partition.length > REDEEM_LIMIT {
      Output {}
      return
    }
    partition.push(issuer)
  }
  token = store[issuer.id].pop()
  req = Redeem(token, info)

                               req
                        ------------------>

                               if (dsIdx.includes(req.data)) {
                                 raise ERR_DOUBLE_SPEND
                               }
                               resp = Verify(pkS, skS, req)
                               if resp.success {
                                 dsIdx.push(req.data)
                               }

                                resp
                        <------------------
  Output resp
]]></artwork>
          </section>
        </section>
      </section>
    </section>
    <section anchor="security" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>We present a number of security considerations that prevent malicious
Clients from abusing the protocol.</t>
      <section anchor="double-spend" numbered="true" toc="default">
        <name>Double-spend Protection</name>
        <t>When applicable for non-interactive tokens, all Origins SHOULD implement a
robust storage-query mechanism for checking that tokens sent by clients have
not been spent before. Such tokens only need to be checked for each Origin
individually. But all Origins must perform global double-spend checks to avoid
clients from exploiting the possibility of spending tokens more than once
against distributed token checking systems. For the same reason, the global
data storage must have quick update times. While an update is occurring it
may be possible for a malicious client to spend a token more than once.</t>
      </section>
      <section anchor="token-exhaustion" numbered="true" toc="default">
        <name>Token Exhaustion</name>
        <t>When a Client holds tokens for an Issuer, it is possible for any
verifier to invoke that client to redeem tokens for that Issuer. This
can lead to an attack where a malicious verifier can force a Client to
spend all of their tokens from a given Issuer. To prevent this from
happening, tokens can be scoped to single Origins such that they can only
be redeemed within for a single Origin.</t>
        <t>If tokens are cross-Origin, Clients should use alternate methods to prevent
many tokens from being redeemed at once. For example, if the Origin requests
an excess of tokens, the Client could choose to not present any tokens for
verification if a redemption had already occurred in a given time window.</t>
      </section>
    </section>
    <section anchor="parametrization" numbered="true" toc="default">
      <name>Protocol Parameterization</name>
      <t>This section provides a summary of the parameters used in the Privacy Pass
protocol ecosystem. These parameters are informed by both
privacy and security considerations that are highlighted in <xref target="privacy" format="default"/>
and <xref target="security" format="default"/>, respectively. These parameters are intended as a single
reference point for those implementing the protocol.</t>
      <t>Firstly, let U be the total number of Clients (or users), I be the total number
of Issuers. We let M be the total number of metadata bits that are allowed
to be added by any given Issuer. Assuming that each user accept tokens
from a uniform sampling of all the possible Issuers, as a worst-case
analysis, this segregates Clients into a total of 2^I buckets. As such, we
see an exponential reduction in the size of the anonymity set for any
given user. This allows us to specify the privacy constraints of the
protocol below, relative to the setting of A.</t>
      <table align="center">
        <thead>
          <tr>
            <th align="left">parameter</th>
            <th align="left">value</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Minimum anonymity set size (A)</td>
            <td align="left">5000</td>
          </tr>
          <tr>
            <td align="left">Recommended key lifetime (L)</td>
            <td align="left">2 - 24 weeks</td>
          </tr>
          <tr>
            <td align="left">Recommended key rotation frequency (F)</td>
            <td align="left">L/2</td>
          </tr>
          <tr>
            <td align="left">Maximum additional metadata bits (M)</td>
            <td align="left">1</td>
          </tr>
          <tr>
            <td align="left">Maximum allowed Issuers (I)</td>
            <td align="left">(log_2(U/A)-1)/2</td>
          </tr>
          <tr>
            <td align="left">Maximum active issuance keys</td>
            <td align="left">1</td>
          </tr>
          <tr>
            <td align="left">Maximum active redemption keys</td>
            <td align="left">2</td>
          </tr>
          <tr>
            <td align="left">Minimum cryptographic security parameter</td>
            <td align="left">128 bits</td>
          </tr>
        </tbody>
      </table>
      <section anchor="justification" numbered="true" toc="default">
        <name>Justification</name>
        <t>We make the following assumptions in these parameter choices.</t>
        <ul spacing="normal">
          <li>Inferring the identity of a user in a 5000-strong anonymity set is
difficult.</li>
          <li>After 2 weeks, all Clients in a system will have rotated to the new
key.</li>
        </ul>
        <t>In terms of additional metadata, the only concrete applications of
Privacy Pass that use additional metadata require just a single bit.
Therefore, we set the ceiling of permitted metadata to 1 bit for now,
this may be revisited in future revisions.</t>
        <t>The maximum choice of I is based on the equation 1/2 * U/2^(2I) = A.
This is derived from the fact that permitting I Issuers lead to 2^I
segregations of the total user-base U. Moreover, if we permit M = 1,
then this effectively halves the anonymity set for each Issuer, and thus
we incur a factor of 2I in the exponent. By reducing I, we limit the
possibility of performing the attacks mentioned in <xref target="privacy" format="default"/>.</t>
        <t>We must also account for each user holding issued data for more then one
possible active keys. While this may also be a vector for monitoring the
access patterns of Clients, it is likely to unavoidable that Clients
hold valid issuance data for the previous key epoch. This also means
that the Issuer can continue to verify redemption data for a previously
used key. This makes the rotation period much smoother for Clients.</t>
        <t>For privacy reasons, it is recommended that key epochs are chosen that
limit Clients to holding issuance data for a maximum of two keys. By
choosing F = L/2 then the minimum value of F is a week, since the
minimum recommended value of L is 2 weeks. Therefore, by the initial
assumption, then all users should only have access to only two keys at
any given time. This reduces the anonymity set by another half at most.</t>
        <t>Finally, the minimum security parameter size is related to the
cryptographic security offered by the protocol that is run. This
parameter corresponds to the number of operations that any adversary has
in breaking one of the security guarantees in the Privacy Pass protocol
<xref target="I-D.ietf-privacypass-protocol" format="default"/>.</t>
      </section>
      <section anchor="example-parameterization" numbered="true" toc="default">
        <name>Example parameterization</name>
        <t>Using the specification above, we can give some example
parameterizations. For example, the current Privacy Pass browser
extension <xref target="PPEXT" format="default"/> has nearly 300000 active users (from Chrome and
Firefox). As a result, log_2(U/A) is approximately 6 and so the maximum
value of I should be 3.</t>
        <t>If the value of U is much bigger (e.g. 5 million) then this would permit
I = (log_2(5000000/5000)-1)/2 ~= 4 Issuers.</t>
      </section>
      <section anchor="allowing-more-issuers" numbered="true" toc="default">
        <name>Allowing more Issuers</name>
        <t>Using the recommendations in <xref target="more-servers" format="default"/>, it is possible to
tolerate larger number of Issuers if Clients in the ecosystem ensure
that they only store tokens for a small number of them. In particular,
if Clients limit their storage of redemption tokens to the bound implied
by I, then prevents a malicious verifier from triggering redemptions for
all Issuers in the ecosystem.</t>
      </section>
    </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="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="HTTP-Authentication" target="https://datatracker.ietf.org/doc/html/draft-pauly-privacypass-auth-scheme-00">
          <front>
            <title>The Privacy Pass HTTP Authentication Scheme</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="PPEXT" target="https://github.com/privacypass/challenge-bypass-extension">
          <front>
            <title>Privacy Pass Browser Extension</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="PPSRV" target="https://blog.cloudflare.com/cloudflare-supports-privacy-pass/">
          <front>
            <title>Cloudflare Supports Privacy Pass</title>
            <author initials="N." surname="Sullivan">
              <organization>Cloudflare</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="HIJK21" target="https://research.fb.com/wp-content/uploads/2021/01/PrivateStats-De-Identified-Authenticated-Logging-at-Scale_final.pdf">
          <front>
            <title>PrivateStats: De-Identified Authenticated Logging at Scale</title>
            <author initials="S." surname="Huang">
              <organization/>
            </author>
            <author initials="S." surname="Iyengar">
              <organization/>
            </author>
            <author initials="S." surname="Jeyaraman">
              <organization/>
            </author>
            <author initials="S." surname="Kushwah">
              <organization/>
            </author>
            <author initials="C.K." surname="Lee">
              <organization/>
            </author>
            <author initials="Z." surname="Luo">
              <organization/>
            </author>
            <author initials="P." surname="Mohassel">
              <organization/>
            </author>
            <author initials="A." surname="Raghunathan">
              <organization/>
            </author>
            <author initials="S." surname="Shaikh">
              <organization/>
            </author>
            <author initials="Y.C." surname="Sung">
              <organization/>
            </author>
            <author initials="A." surname="Zhang">
              <organization/>
            </author>
            <date year="2021" month="January"/>
          </front>
        </reference>
        <reference anchor="CONSISTENCY">
          <front>
            <title>Key Consistency and Discovery</title>
            <author fullname="Alex Davidson">
              <organization>Brave Software</organization>
            </author>
            <author fullname="Matthew Finkel">
              <organization>The Tor Project</organization>
            </author>
            <author fullname="Martin Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Christopher A. Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="4" month="March" year="2022"/>
            <abstract>
              <t>   This document describes the key consistency and correctness
   requirements of protocols such as Privacy Pass, Oblivious DoH, and
   Oblivious HTTP for user privacy.  It discusses several mechanisms and
   proposals for enabling user privacy in varying threat models.  In
   concludes with discussion of open problems in this area.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-wood-key-consistency-02"/>
        </reference>
        <reference anchor="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>
        <reference anchor="KLOR20">
          <front>
            <title>Anonymous Tokens with Private Metadata Bit</title>
            <author fullname="Ben Kreuter" initials="B." surname="Kreuter">
              <organization/>
            </author>
            <author fullname="Tancrède Lepoint" initials="T." surname="Lepoint">
              <organization/>
            </author>
            <author fullname="Michele Orrù" initials="M." surname="Orrù">
              <organization/>
            </author>
            <author fullname="Mariana Raykova" initials="M." surname="Raykova">
              <organization/>
            </author>
            <date year="2020"/>
          </front>
          <seriesInfo name="Advances in Cryptology - CRYPTO 2020" value="pp. 308-336"/>
          <seriesInfo name="DOI" value="10.1007/978-3-030-56784-2_11"/>
        </reference>
        <reference anchor="I-D.ietf-privacypass-protocol">
          <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>
      </references>
    </references>
    <section anchor="acknowledgements" numbered="true" toc="default">
      <name>Acknowledgements</name>
      <t>The authors would like to thank Scott Hendrickson, Tommy Pauly, Benjamin Schwartz,
Steven Valdez and other members of the Privacy Pass Working Group for many helpful
contributions to this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
Mq0AAA==

-->

</rfc>
