<?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.11 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-privacypass-architecture-15" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.10 -->
  <front>
    <title abbrev="Privacy Pass Architecture">The Privacy Pass Architecture</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-architecture-15"/>
    <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="2023" month="September" day="12"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document specifies the Privacy Pass architecture and requirements for
its constituent protocols used for authorization based on privacy-preserving
authentication mechanisms. It describes the conceptual model of Privacy Pass
and its protocols, its security and privacy goals, practical deployment models,
and recommendations for each deployment model that helps ensure the desired
security and privacy goals are fulfilled.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Privacy Pass is an architecture for authorization based on privacy-preserving
authentication mechanisms. In other words, relying parties authenticate clients
in a privacy-preserving way, i.e., without learning any unique, per-client
information through the authentication protocol, and then make authorization
decisions on the basis of that authentication suceeding or failing. Possible
authorization decisions might be to provide clients with read access to a
particular resource or write access to a particular resource.</t>
      <t>Typical approaches for authorizing clients, such as through the use of long-term
state (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., a cookie indicating whether or not the client is an authorized user or
has completed some prior challenge, clients present unlinkable proofs that
attest to this information. These proofs, or tokens, are private in the sense
that a given token cannot be linked to the protocol interaction where that
token was initially issued.</t>
      <t>At a high level, the Privacy Pass architecture consists of two protocols:
redemption and issuance. The redemption protocol, described in
<xref target="AUTHSCHEME"/>, runs between Clients and
Origins (servers). It allows Origins to challenge Clients to present tokens
for consumption. Origins verify the token to authenticate the Client -- without
learning any specific information about the Client -- and then make an authorization
decision on the basis of the token verifying successfully or not. Depending
on the type of token, e.g., whether or not it can be cached, the Client
either presents a previously obtained token or invokes an issuance protocol,
such as <xref target="ISSUANCE"/>, to acquire a token to
present as authorization.</t>
      <t>This document describes requirements for both redemption and issuance
protocols and how they interact. It also provides recommendations on how
the architecture should be deployed to ensure the privacy of clients and
the security of all participating entities.</t>
    </section>
    <section anchor="terminology">
      <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"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <t>The following terms are used throughout this document:</t>
      <dl>
        <dt>Client:</dt>
        <dd>
          <t>An entity that seeks authorization to an Origin. Using <xref target="RFC9334"/> terminology,
Clients implement the RATS Attester role.</t>
        </dd>
        <dt>Token:</dt>
        <dd>
          <t>A cryptographic authentication message used for authorization decisions.</t>
        </dd>
        <dt>Token:</dt>
        <dd>
          <t>A privacy-preserving authenticator that is used for authorization.</t>
        </dd>
        <dt>Origin:</dt>
        <dd>
          <t>An entity that consumes tokens presented by Clients and uses them to make authorization decisions.</t>
        </dd>
        <dt>Challenge:</dt>
        <dd>
          <t>The mechanism by which Origins request tokens from Clients.</t>
        </dd>
        <dt>Redemption:</dt>
        <dd>
          <t>The mechanism by which Clients present tokens to Origins for consumption.</t>
        </dd>
        <dt>Issuer:</dt>
        <dd>
          <t>An entity that issues tokens to Clients for properties
attested to by the Attester.</t>
        </dd>
        <dt>Issuance:</dt>
        <dd>
          <t>The mechanism by which an Issuer produces tokens for Clients.</t>
        </dd>
        <dt>Attester:</dt>
        <dd>
          <t>An entity that attests to properties of Clients for the
purposes of token issuance. Using <xref target="RFC9334"/> terminology, Attesters implement
the RATS Verifier role.</t>
        </dd>
        <dt>Attestation procedure:</dt>
        <dd>
          <t>The procedure by which an Attester determines whether or not a Client
has the specific set of properties that are necessary for token issuance.</t>
        </dd>
      </dl>
      <t>The trust relationships between each of the entities in this list is further
elaborated upon in <xref target="privacy-and-trust"/>.</t>
    </section>
    <section anchor="architecture">
      <name>Architecture</name>
      <t>The Privacy Pass architecture consists of four logical entities --
Client, Origin, Issuer, and Attester -- that work in concert
for token redemption and issuance. This section presents an overview
of Privacy Pass, a high-level description of the threat model and
privacy goals of the architecture, and the goals and requirements of
the redemption and issuance protocols. Deployment variations for the
Origin, Issuer, and Attester in this architecture, including
considerations for implements these entities, are further discussed
in <xref target="deployment"/>.</t>
      <section anchor="overview">
        <name>Overview</name>
        <t>The typical interaction flow for Privacy Pass uses the following steps:</t>
        <ol spacing="normal" type="1"><li>A Client interacts with an Origin by sending a request or otherwise
interacting with the Origin in a way that triggers a response containing
a token challenge. The token challenge indicates a specific Issuer to use.</li>
          <li>If the Client already has a token available that satisfies the token
challenge, e.g., because the Client has a cache of previously issued tokens,
it can skip to <xref format="none" target="step-redemption">step 6</xref> and redeem its
token; see <xref target="hoarding"/> for security considerations of cached tokens.</li>
          <li>If the Client does not have a token available and decides it wants to
obtain one (or more) bound to the token challenge, it then invokes the
issuance protocol. As a prerequisite to the issuance protocol, the Client
runs the deployment specific attestation process that is required for the
designated Issuer. Client attestation can be done via proof of solving a
CAPTCHA, checking device or hardware attestation validity, etc.; see
<xref target="attester"/> for more details.</li>
          <li>If the attestation process completes successfully, the client creates a
Token Request to send to the designated Issuer (generally via the Attester,
though it is not required to be sent through the Attester).
The Attester and Issuer might be functions on the same server, depending on the
deployment model (see <xref target="deployment"/>). Depending on the attestation process, it
is possible for attestation to run alongside the issuance protocol, e.g., where
Clients send necessary attestation information to the Attester along with their
Token Request. If the attestation process fails, the Client receives an error
and issuance aborts without a token.</li>
          <li>The Issuer generates a Token Response based on the Token Request, which
is returned to the Client (generally via the Attester). Upon receiving the
Token Response, the Client computes a token from the token challenge and Token
Response. This token can be validated by anyone with the per-Issuer key, but
cannot be linked to the content of the Token Request or Token Response.</li>
          <li>
            <t anchor="step-redemption">If the Client has a token, it includes it in a subsequent request to
the Origin, as authorization. This token is sent only once in reaction to a
challenge; Clients do not send tokens more than once, even if they receive
duplicate or redundant challenges. The Origin
validates that the token was generated by the expected Issuer and has not
already been redeemed for the corresponding token challenge.  If the Client
does not have a token, perhaps because issuance failed, the client does not
reply to the Origin's challenge with a new request.</t>
          </li>
        </ol>
        <figure anchor="fig-overview">
          <name>Privacy pass redemption and issuance protocol interaction</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="224" width="520" viewBox="0 0 520 224" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
                <path d="M 40,64 L 40,208" fill="none" stroke="black"/>
                <path d="M 80,32 L 80,64" fill="none" stroke="black"/>
                <path d="M 184,32 L 184,64" fill="none" stroke="black"/>
                <path d="M 216,64 L 216,208" fill="none" stroke="black"/>
                <path d="M 256,32 L 256,64" fill="none" stroke="black"/>
                <path d="M 336,32 L 336,64" fill="none" stroke="black"/>
                <path d="M 376,64 L 376,144" fill="none" stroke="black"/>
                <path d="M 376,192 L 376,208" fill="none" stroke="black"/>
                <path d="M 424,32 L 424,64" fill="none" stroke="black"/>
                <path d="M 440,32 L 440,64" fill="none" stroke="black"/>
                <path d="M 472,64 L 472,208" fill="none" stroke="black"/>
                <path d="M 512,32 L 512,64" fill="none" stroke="black"/>
                <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
                <path d="M 184,32 L 256,32" fill="none" stroke="black"/>
                <path d="M 336,32 L 424,32" fill="none" stroke="black"/>
                <path d="M 440,32 L 512,32" fill="none" stroke="black"/>
                <path d="M 8,64 L 80,64" fill="none" stroke="black"/>
                <path d="M 184,64 L 256,64" fill="none" stroke="black"/>
                <path d="M 336,64 L 424,64" fill="none" stroke="black"/>
                <path d="M 440,64 L 512,64" fill="none" stroke="black"/>
                <path d="M 48,96 L 88,96" fill="none" stroke="black"/>
                <path d="M 168,96 L 216,96" fill="none" stroke="black"/>
                <path d="M 40,112 L 56,112" fill="none" stroke="black"/>
                <path d="M 192,112 L 208,112" fill="none" stroke="black"/>
                <path d="M 224,126 L 240,126" fill="none" stroke="black"/>
                <path d="M 224,130 L 240,130" fill="none" stroke="black"/>
                <path d="M 352,126 L 368,126" fill="none" stroke="black"/>
                <path d="M 352,130 L 368,130" fill="none" stroke="black"/>
                <path d="M 216,160 L 288,160" fill="none" stroke="black"/>
                <path d="M 408,160 L 464,160" fill="none" stroke="black"/>
                <path d="M 224,176 L 288,176" fill="none" stroke="black"/>
                <path d="M 416,176 L 472,176" fill="none" stroke="black"/>
                <path d="M 48,192 L 64,192" fill="none" stroke="black"/>
                <path d="M 192,192 L 216,192" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="472,160 460,154.4 460,165.6" fill="black" transform="rotate(0,464,160)"/>
                <polygon class="arrowhead" points="376,128 364,122.4 364,133.6" fill="black" transform="rotate(0,368,128)"/>
                <polygon class="arrowhead" points="232,176 220,170.4 220,181.6" fill="black" transform="rotate(180,224,176)"/>
                <polygon class="arrowhead" points="232,128 220,122.4 220,133.6" fill="black" transform="rotate(180,224,128)"/>
                <polygon class="arrowhead" points="216,112 204,106.4 204,117.6" fill="black" transform="rotate(0,208,112)"/>
                <polygon class="arrowhead" points="56,192 44,186.4 44,197.6" fill="black" transform="rotate(180,48,192)"/>
                <polygon class="arrowhead" points="56,96 44,90.4 44,101.6" fill="black" transform="rotate(180,48,96)"/>
                <g class="text">
                  <text x="44" y="52">Origin</text>
                  <text x="220" y="52">Client</text>
                  <text x="380" y="52">Attester</text>
                  <text x="476" y="52">Issuer</text>
                  <text x="128" y="100">Request</text>
                  <text x="124" y="116">TokenChallenge</text>
                  <text x="296" y="132">Attestation</text>
                  <text x="348" y="164">TokenRequest</text>
                  <text x="352" y="180">TokenResponse</text>
                  <text x="128" y="196">Request+Token</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+--------+            +--------+         +----------+ +--------+
| Origin |            | Client |         | Attester | | Issuer |
+---+----+            +---+----+         +----+-----+ +---+----+
    |                     |                   |           |
    |<----- Request ------+                   |           |
    +-- TokenChallenge -->|                   |           |
    |                     |<== Attestation ==>|           |
    |                     |                   |           |
    |                     +--------- TokenRequest ------->|
    |                     |<-------- TokenResponse -------+
    |<-- Request+Token ---+                   |           |
    |                     |                   |           |
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="use-cases">
        <name>Use Cases</name>
        <t>Use cases for Privacy Pass are broad and depend greatly on the deployment model
as discussed in <xref target="deployment"/>. The initial motivating use case for Privacy Pass
<xref target="PrivacyPassCloudflare"/> was to help rate limit malicious or otherwise abusive
traffic from services such as Tor <xref target="DMS2004"/>. The generalized and evolved
architecture described in this document also work for this use case. However,
for added clarity, some more possible use cases are described below.</t>
        <ul spacing="normal">
          <li>Low-quality, anti-fraud signal for open Internet services. Tokens can attest that
the client behind the user agent is likely not a bot attempting to perform some
form of automated attack such as credential stuffing. Example attestation procedures
for this use case might be solving some form of CAPTCHA or presenting evidence of a
valid, unlocked device in good standing.</li>
          <li>Privacy-preserving authentication for proprietary services. Tokens can attest that
the client is a valid subscriber for a propietary service, such as a deployment of
Oblivious HTTP <xref target="OHTTP"/>.</li>
        </ul>
      </section>
      <section anchor="privacy-and-trust">
        <name>Privacy Goals and Threat Model</name>
        <t>The end-to-end flow for Privacy Pass described in <xref target="overview"/> involves three
different types of contexts:</t>
        <dl>
          <dt>Redemption context:</dt>
          <dd>
            <t>The interactions and set of information shared
between the Client and Origin, i.e., the information that is provided or
otherwise available to the Origin during redemption that might be used
to identify a Client and construct a token challenge. This context includes all
information associated with redemption, such as the timestamp of the event,
Client visible information (including the IP address), and the Origin name.</t>
          </dd>
          <dt>Issuance context:</dt>
          <dd>
            <t>The interactions and set of information shared between the Client, Attester,
and Issuer, i.e., the information that is provided or otherwise available
to Attester and Issuer during issuance that might be used to identify a Client.
This context includes all information associated with issuance, such as the
timestamp of the event, any Client visible information (including the IP
address), and the Origin name (if revealed during issuance). This does not
include the token challenge in its entirety, as that is kept secret from the
Issuer during the issuance protocol.</t>
          </dd>
          <dt>Attestation context:</dt>
          <dd>
            <t>The interactions and set of information shared between
the Client and Attester only, for the purposes of attesting the validity of
the Client, that is provided or otherwise available during attestation that
might be used to identify the Client. This context includes all information
associated with attestation, such as the timestamp of the event and any Client
visible information, including information needed for the attestation
procedure to complete.</t>
          </dd>
        </dl>
        <t>The privacy goals of Privacy Pass assume a threat model in which Origins trust
specific Issuers to produce tokens, and Issuers in turn trust one or more
Attesters to correctly run the attestation procedure with Clients. This
arrangement ensures that tokens which validate for a given Issuer were only
issued to a Client that successfully completed attestation with an Attester
that the Issuer trusts. Moreover, this arrangement means that if an Origin
accepts tokens issued by an Issuer that trusts multiple Attesters, then a
Client can use any one of these Attesters to issue and redeem tokens for the
Origin. Whether or not these different entities in the architecture collude
for learning redemption, issuance, or attestation contexts, as well as the
necessary preconditions for context unlinkability, depends on the deployment
model; see <xref target="deployment"/> for more details.</t>
        <t>The mechanisms for establishing trust between each entity in this arrangement
are deployment specific. For example, in settings where Clients interact with
Issuers through an Attester, Attesters and Issuers might use
mutually authenticated TLS to authenticate one another. In settings where
Clients do not communicate with Issuers through an Attester, the Attesters
might convey this trust via a digital signature over that Issuers can verify.</t>
        <t>Clients explicitly trust Attesters to perform attestation correctly and in a
way that does not violate their privacy. In particular, this means that Attesters
which may be privy to private information about Clients are trusted to not disclose
this information to non-colluding parties; see <xref target="deployment"/> for more about different
deployment models and non-collusion assumptions. However, Clients assume Issuers and
Origins are malicious.</t>
        <t>Given this threat model, the privacy goals of Privacy Pass are oriented around
unlinkability based on redemption, issuance, and attestation contexts, as
described below.</t>
        <ol spacing="normal" type="1"><li>Origin-Client unlinkability. This means that given two redemption contexts,
the Origin cannot determine if both redemption contexts correspond to the same
Client or two different Clients. Informally, this means that a Client in a
redemption context is indistinguishable from any other Client that might use
the same redemption context. The set of Clients that share the same redemption
context is referred to as a redemption anonymity set.</li>
          <li>Issuer-Client unlinkability. This is similar to Origin-Client unlinkability
in that a Client in an issuance context is indistinguishable from any other
Client that might use the same issuance context. The set of Clients that share
the same issuance context is referred to as an issuance anonymity set.</li>
          <li>Attester-Origin unlinkability. This is similar to Origin-Client and
Issuer-Client unlinkability. It means that given two attestation contexts,
the Attester cannot determine if both contexts correspond to the same Origin
or two different Origins. The set of Origins that share the same attestation
context is referred to as an attestation anonymity set.</li>
          <li>Redemption context unlinkability. Given two redemption contexts, the Origin
cannot determine which issuance and attestation contexts each redemption
corresponds to, even with the collaboration of the Issuer and Attester (should
these be different parties). This means that any information that may be learned
about the Client during the issuance and attestation flows cannot be used by the
Origin to compromise Client privacy.</li>
        </ol>
        <t>These unlinkability properties ensure that only the Client is able to correlate
information that might be used to identify them with activity on the Origin.
The Attester, Issuer, and Origin only receive the information necessary to perform
their respective functions.</t>
        <t>The manner in which these unlinkability properties are achieved depends on the
deployment model, type of attestation, and issuance protocol details. For example,
as discussed in <xref target="deployment"/>, in some cases it is necessary to use an anonymization
service such as Tor <xref target="DMS2004"/> which hides Clients IP addresses. In general,
anonymization services ensures that all Clients which use the service are indistinguishable
from one another, though in practice there may be small distinguishing features
(TLS fingerprints, HTTP headers, etc). Moreover, Clients generally trust these services
to not disclose private Client information (such as IP addresses) to untrusted parties.
Failure to use an anonymization service when interacting with Attesters, Issuers, or
Origins can allow the set of possible Clients to be partitioned by the Client's IP address,
and can therefore lead to unlinkability violations. Similarly, malicious Origins
may attempt to link two redemption contexts together by using Client-specific
Issuer public keys. See <xref target="deployment-considerations"/> and <xref target="privacy"/> for more
information.</t>
        <t>The remainder of this section describes the functional properties and security
requirements of the redemption and issuance protocols in more detail. <xref target="flow"/>
describes how information flows between Issuer, Origin, Client, and Attester
through these protocols.</t>
      </section>
      <section anchor="redemption">
        <name>Redemption Protocol</name>
        <t>The Privacy Pass redemption protocol, described in
<xref target="AUTHSCHEME"/>, is an authorization protocol
wherein Clients present tokens to Origins for authorization. Normally,
redemption is preceded by a challenge, wherein the Origin challenges
Clients for a token with a TokenChallenge (<xref section="2.1" sectionFormat="comma" target="AUTHSCHEME"/>) and,
if possible, Clients present a valid Token (<xref section="2.2" sectionFormat="comma" target="AUTHSCHEME"/>)
in reaction to the challenge. This interaction is shown below.</t>
        <figure anchor="fig-redemption">
          <name>Challenge and redemption protocol interaction</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="176" width="432" viewBox="0 0 432 176" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
                <path d="M 40,64 L 40,160" fill="none" stroke="black"/>
                <path d="M 80,32 L 80,64" fill="none" stroke="black"/>
                <path d="M 184,32 L 184,64" fill="none" stroke="black"/>
                <path d="M 216,64 L 216,160" fill="none" stroke="black"/>
                <path d="M 256,32 L 256,64" fill="none" stroke="black"/>
                <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
                <path d="M 184,32 L 256,32" fill="none" stroke="black"/>
                <path d="M 8,64 L 80,64" fill="none" stroke="black"/>
                <path d="M 184,64 L 256,64" fill="none" stroke="black"/>
                <path d="M 48,96 L 88,96" fill="none" stroke="black"/>
                <path d="M 168,96 L 216,96" fill="none" stroke="black"/>
                <path d="M 40,112 L 56,112" fill="none" stroke="black"/>
                <path d="M 192,112 L 208,112" fill="none" stroke="black"/>
                <path d="M 232,126 L 248,126" fill="none" stroke="black"/>
                <path d="M 232,130 L 248,130" fill="none" stroke="black"/>
                <path d="M 408,126 L 424,126" fill="none" stroke="black"/>
                <path d="M 408,130 L 424,130" fill="none" stroke="black"/>
                <path d="M 48,144 L 64,144" fill="none" stroke="black"/>
                <path d="M 192,144 L 216,144" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="432,128 420,122.4 420,133.6" fill="black" transform="rotate(0,424,128)"/>
                <polygon class="arrowhead" points="240,128 228,122.4 228,133.6" fill="black" transform="rotate(180,232,128)"/>
                <polygon class="arrowhead" points="216,112 204,106.4 204,117.6" fill="black" transform="rotate(0,208,112)"/>
                <polygon class="arrowhead" points="56,144 44,138.4 44,149.6" fill="black" transform="rotate(180,48,144)"/>
                <polygon class="arrowhead" points="56,96 44,90.4 44,101.6" fill="black" transform="rotate(180,48,96)"/>
                <g class="text">
                  <text x="44" y="52">Origin</text>
                  <text x="220" y="52">Client</text>
                  <text x="128" y="100">Request</text>
                  <text x="124" y="116">TokenChallenge</text>
                  <text x="292" y="132">Issuance</text>
                  <text x="364" y="132">protocol</text>
                  <text x="128" y="148">Request+Token</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+--------+            +--------+
| Origin |            | Client |
+---+----+            +---+----+
    |                     |
    |<----- Request ------+
    +-- TokenChallenge -->|
    |                     | <== Issuance protocol ==>
    |<-- Request+Token ---+
    |                     |
]]></artwork>
          </artset>
        </figure>
        <t>Alternatively, when configured to do so, Clients may opportunistically present
Token values to Origins without a corresponding TokenChallenge.</t>
        <t>The structure and semantics of the TokenChallenge and Token messages depend
on the issuance protocol and token type being used; see <xref target="AUTHSCHEME"/> for
more information.</t>
        <t>The challenge provides the client with the information necessary to obtain
tokens that the server might subsequently accept in the redemption context.
There are a number of ways in which the token may vary based on this challenge,
including:</t>
        <ul spacing="normal">
          <li>Issuance protocol. The challenge 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. Token challenges identify which Issuers are trusted for a
given issuance protocol. As described in <xref target="privacy-and-trust"/>, the choice
of Issuer determines the type of Attesters and attestation procedures possible
for a token from the specified Issuer, but the Origin does not learn exactly
which Attester was used for a given token issuance event.</li>
          <li>Redemption context. Challenges can be bound to a given redemption context,
which influences a client's ability to pre-fetch and cache tokens. For
example, an empty redemption context always allows tokens to be issued and
redeemed non-interactively, whereas a fresh and random redemption context
means that the redeemed token must be issued only after the client receives
the challenge. See <xref section="2.1.1" sectionFormat="of" target="AUTHSCHEME"/> for more details.</li>
          <li>Per-Origin or cross-Origin. Challenges can be constrained to the Origin for
which the challenge originated (referred to as per-Origin tokens), or
can be used across multiple Origins (referred to as cross-Origin tokens).
The set of Origins for which a cross-Origin token is applicable is referred
to as the cross-Origin set. Every Origin in a cross-Origin set implicitly agrees
to being in the set by supporting cross-Origin challenges.</li>
        </ul>
        <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.
In particular, cross-Origin tokens issued based on a challenge for
one Origin can be redeemed at another Origin in the cross-Origin set,
which can make it difficult to regulate token consumption. Depending on the
use case, Origins may need to maintain state to track redeemed tokens. For
example, Origins that accept cross-Origin tokens across shared redemption
contexts SHOULD track which tokens have been redeemed already in those
redemption contexts, since these tokens can be issued and then spent multiple
times for any such challenge. Note that Clients which redeem the
same token to multiple Origins do risk those Origins being able to link
Client activity together, which can disincentivize this behavior. See
<xref section="2.1.1" sectionFormat="of" target="AUTHSCHEME"/> for discussion.</t>
        <t>How Clients respond to token challenges can have privacy implications.
For example, if an Origin allows the Client to choose an Issuer, then the choice
of Issuer can reveal information about the Client used to partition anonymity
sets; see <xref target="rotation-and-consistency"/> for more information about these privacy
considerations.</t>
      </section>
      <section anchor="issuance-protocol">
        <name>Issuance Protocol</name>
        <t>The Privacy Pass issuance protocol, described in <xref target="ISSUANCE"/>, is a two-message
protocol that takes as input a TokenChallenge from the redemption protocol
(<xref section="2.1" sectionFormat="comma" target="AUTHSCHEME"/>) and produces a Token
(<xref section="2.2" sectionFormat="comma" target="AUTHSCHEME"/>), as shown in <xref target="fig-overview"/>.</t>
        <t>The structure and semantics of the TokenRequest and TokenResponse messages
depend on the issuance protocol and token type being used; see <xref target="ISSUANCE"/>
for more information.</t>
        <t>Clients interact with the Attester and Issuer to produce a token for
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 issuance protocol using the token challenge, a randomly
generated nonce, and public key for the Issuer, all of which are the Client's
private input to the protocol and ultimately bound to an output Token;
see <xref section="2.2" sectionFormat="of" target="AUTHSCHEME"/> for details. Future specifications
may change or extend the Client's input to the issuance protocol to produce
Tokens with a different structure.</t>
        <t>Token properties vary based on the issuance protocol. Important properties
supported in this architecture are described below.</t>
        <ol spacing="normal" type="1"><li>Public verifiability. This means the Token can be verified using the Issuer
public key. A Token that does not have public verifiability can only be verified
using the Issuer secret key.</li>
          <li>Public metadata. This means that the Token can be cryptographically bound to
arbitrary public information. See <xref target="metadata-privacy"/> for privacy considerations
of public metadata.</li>
          <li>Private metadata. This means that the Token can be cryptographically bound to
arbitrary private information, i.e., information that the Client does not observe
during Token issuance or redemption. See <xref target="metadata-privacy"/> for privacy
considerations of private metadata.</li>
        </ol>
        <t>The issuance protocol itself can be any interactive protocol between Client,
Issuer, or other parties that produces a valid token bound to the Client's
private 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, regardless of the hardness assumptions of the underlying
cryptographic protocol(s). This property is sometimes also referred to as
blindness.</li>
          <li>One-more forgery security. The issuance protocol MUST NOT allow malicious
Clients or Attesters (acting as Clients) to forge tokens offline or otherwise
without interacting with the Issuer directly.</li>
          <li>Concurrent security. The issuance protocol MUST be safe to run concurrently
with arbitrarily many Clients, Attesters and Issuers.</li>
        </ol>
        <t>See <xref target="extensions"/> for requirements on new issuance protocol variants and
related extensions.</t>
        <t>In the sections below, we describe the Attester and Issuer roles in more
detail.</t>
        <section anchor="attester">
          <name>Attester Role</name>
          <t>In Privacy Pass, attestation is the process by which an Attester bears
witness to, confirms, or authenticates a Client so as to verify properties
about the Client that are required for Issuance. Issuers trust Attesters
to perform attestation correctly, i.e., to implement attestation procedures
in a way that are not subverted or bypassed by malicious Clients.</t>
          <t><xref target="RFC9334"/> describes an architecture for attestation procedures. Using
that architecture as a conceptual basis, Clients are RATS attesters that
produce attestation evidence, and Attesters are RATS verifiers that
appraise the validity of attestation evidence.</t>
          <t>The type of attestation procedure is a deployment-specific option and outside
the scope of the issuance protocol. Example attestation procedures are below.</t>
          <ul spacing="normal">
            <li>Solving a CAPTCHA. Clients that solve CAPTCHA challenges can be attested to
have this capability for the purpose of being ruled out as a bot or otherwise
automated Client.</li>
            <li>Presenting evidence of Client device validity. Some Clients run on trusted
hardware that are capable of producing device-level attestation evidence.</li>
            <li>Proving properties about Client state. Clients can be associated with state
and the Attester can verify this state. Examples of state include the
Client's geographic region and whether the Client has a valid
application-layer account.</li>
          </ul>
          <t>Attesters may support different types of attestation procedures.</t>
          <t>Each attestation procedure has different security properties. For
example, attesting to having a valid account is different from attesting to
running on trusted hardware. Supporting multiple attestation procedures is
an important step towards ensuring equitable access for Clients; see <xref target="discrimination"/>.</t>
          <t>The role of the Attester in the issuance protocol and its impact on privacy
depends on the type of attestation procedure, issuance protocol, deployment
model. For instance, requiring a conjunction of attestation procedures could
decrease the overall anonymity set size. As an example, the number of Clients
that have solved a CAPTCHA in the past day, that have a valid account, and that
are running on a trusted device is less than the number of Clients that have
solved a CAPTCHA in the past day. Attesters SHOULD NOT be based on attestation
procedures that result in small anonymity sets.</t>
          <t>Depending on the issuance protocol, the Issuer might learn
information about the Origin. To ensure Issuer-Client unlinkability, the Issuer
should be unable to link that information to a specific Client. For such
issuance protocols where the Attester has access to Client-specific
information, such as is the case for attestation procedures that involve
Client-specific information (such as application-layer account information)
or for deployment models where the Attester learns Client-specific information
(such as Client IP addresses), Clients trust the Attester to not share any
Client-specific information with the Issuer. In deployments where the Attester
does not learn Client-specific information, the Client does not need to
explicitly trust the Attester in this regard.</t>
          <t>Issuers trust Attesters to correctly and reliably perform attestation. However,
certain types of attestation can vary in value over time, e.g., if the
attestation procedure is compromised. Broken
attestation procedures are considered exceptional events and require
configuration changes to address the underlying cause. For example, if
attestation is compromised because of a zero-day exploit on compliant devices,
then the corresponding attestation procedure should be untrusted until the
exploit is patched. Addressing changes in attestation quality is therefore a
deployment-specific task. In Split Attester and Issuer deployments (see
<xref target="deploy-split"/>), Issuers can choose to remove compromised Attesters from
their trusted set until the compromise is patched.</t>
          <t>From the perspective of an Origin, tokens produced by an Issuer with at least
one compromised Attester cannot be trusted assuming the Origin does not know
which attestation procedure was used for issuance. This is because the Origin
cannot distinguish between tokens that were issued via compromised Attesters
and tokens that were issued via uncompromised Attesters absent some
distinguishing information in the tokens themselves or from the Issuer. As a
result, until the attestation procedure is fixed, the Issuer cannot be trusted
by Origins. Moreover, as a consequence, any tokens issued by an Issuer with a
compromised attester may no longer be trusted by Origins, even if those tokens
were issued to Clients interacting with an uncompromised Attester.</t>
        </section>
        <section anchor="issuer-role">
          <name>Issuer Role</name>
          <t>In Privacy Pass, the Issuer is responsible for completing the issuance protocol
for Clients that complete attestation through a trusted Attester. As described
in <xref target="attester"/>, Issuers explicitly trust Attesters to correctly and reliably
perform attestation. Origins explicitly trust Issuers to only issue tokens
from trusted Attesters. Clients do not explicitly trust Issuers.</t>
          <t>Depending on the deployment model 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,
such as through the use of an IP-hiding proxy service like Tor <xref target="DMS2004"/>.
In general, Clients SHOULD minimize or remove identifying
information where possible when invoking the issuance protocol.</t>
          <t>Issuers are uniquely identifiable by all Clients with a consistent
identifier. In a web context, this identifier might be the Issuer host name.
Issuers maintain one or more configurations, including issuance key pairs, for
use in the issuance protocol. Each configuration is assumed to have a unique
and canonical identifier, sometimes referred to as a key identifier or key ID.
Issuers can rotate these configurations as needed to mitigate risk of compromise;
see <xref target="rotation-and-consistency"/> for more considerations around configuration
rotation. The Issuer public key for each active configuration is made available
to Origins and Clients for use in the issuance and redemption protocols.</t>
        </section>
        <section anchor="metadata">
          <name>Issuance 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
log<sub>2</sub>(N) bits of metadata. Metadata may be public or private.</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. Generally speaking, Clients
cannot determine if this value is generated honestly or otherwise a
tracking vector.</t>
          <t>Private metadata is that which Clients cannot observe as part of the token
issuance flow. Such instantiations can be built on the Private Metadata Bit
construction from Kreuter et al. <xref target="KLOR20"/>
or the attribute-based VOPRF from Huang et al. <xref target="HIJK21"/>.</t>
          <t>Metadata can be arbitrarily long or bounded in length. The amount of permitted
metadata may be determined by application or by the underlying cryptographic
protocol. The total amount of metadata bits included in a token is the sum of
public and private metadata bits. Every bit of metadata can be used to
partition the Client issuance or redemption anonymity sets; see
<xref target="metadata-privacy"/> for more information.</t>
        </section>
        <section anchor="extensions">
          <name>Future Issuance Protocol Requirements</name>
          <t>The Privacy Pass architecture and ecosystem are both intended to be receptive
to extensions that expand the current set of functionalities through new
issuance protocols. Each new issuance protocol and extension MUST adhere
to the following requirements:</t>
          <ol spacing="normal" type="1"><li>Include a detailed analysis of the privacy impacts of the extension, why
these impacts are justified, and guidelines on how to use the protocol
to mitigate or minimize negative deployment or privacy consequences
discussed in <xref target="deployment-considerations"/> and <xref target="privacy"/>, respectively.</li>
            <li>Adhere to the guidelines specified in <xref target="issuer-role"/> for managing Issuer
public key data.</li>
            <li>Clearly specify how to interpret and validate TokenChallenge and Token
messages that are exchanged during the redemption protocol.</li>
          </ol>
        </section>
      </section>
      <section anchor="flow">
        <name>Information Flow</name>
        <t>The end-to-end process of redemption and issuance protocols involves information
flowing between Issuer, Origin, Client, and Attester. That information can
have implications on the privacy goals that Privacy Pass aims to provide
as outlined in <xref target="privacy-and-trust"/>. In this section, we describe the flow
of information between each party. How this information affects the privacy
goals in particular deployment models is further discussed in <xref target="deployment"/>.</t>
        <section anchor="challenge-flow">
          <name>Token Challenge Flow</name>
          <t>To use Privacy Pass, Origins choose an Issuer from which they are willing to
accept tokens. Origins then construct a token challenge using this specified
Issuer and information from the redemption context it shares with the Client.
This token challenge is then delivered to a Client. The token challenge conveys
information about the Issuer and the redemption context, such as whether the
Origin desires a per-Origin or cross-Origin token. Any entity that sees
the token challenge might learn things about the Client as known to the Origin.
This is why input secrecy is a requirement for issuance protocols, as it
ensures that the challenge is not directly available to the Issuer.</t>
        </section>
        <section anchor="attestation-flow">
          <name>Attestation Flow</name>
          <t>Clients interact with the Attester to prove that they meet some required
set of properties. In doing so, Clients contribute information to the
attestation context, which might include sensitive information such as
application-layer identities, IP addresses, and so on. Clients can choose
whether or not to contribute this information based on local policy or
preference.</t>
        </section>
        <section anchor="issue-flow">
          <name>Issuance Flow</name>
          <t>Clients use the issuance protocol to produce a token bound to a token
challenge. In doing so, there are several ways in which the issuance protocol
contributes information to the attestation or issuance contexts. For example, a
token request may contribute information to the attestation or issuance
contexts as described below.</t>
          <ul spacing="normal">
            <li>Issuance protocol. The type of issuance protocol can contribute information
about the Issuer's capabilities to the attestation or issuance contexts, as
well as the capabilities of a given Client. For example, if a Client is
presented with multiple issuance protocol options, then the choice of which
issuance protocol to use can contribute information about the Client's
capabilities.</li>
            <li>Issuer configuration. Information about the Issuer configuration, such as
its identity or the public key used to validate tokens it creates, can be
revealed during issuance and contribute to the attestation or issuance
contexts.</li>
            <li>Attestation information. The issuance protocol can contribute information to
the attestation or issuance contexts based on what attestation procedure the
Issuer uses to trust a token request. In particular, a token request that is
validated by a given Attester means that the Client which generated the token
request must be capable of the completing the designated attestation procedure.</li>
            <li>Origin information. The issuance protocol can contribute information about
the Origin that challenged the Client in <xref target="challenge-flow"/>. In particular,
a token request designated for a specific Issuer might imply that the resulting
token is for an Origin that trusts the specified Issuer. However, this is not
always true, as some token requests can correspond to cross-Origin tokens,
i.e., they are tokens that would be accepted at any Origin that accepts the
cross-Origin token.</li>
          </ul>
          <t>Moreover, a token may contribute information to the issuance attestation or
contexts as described below.</t>
          <ul spacing="normal">
            <li>Origin information. The issuance protocol can contribute information about
the Origin in how it responds to a token request. For example, if an Issuer
learns the Origin during issuance and is also configured to respond in some way
on the basis of that information, and the Client interacts with the Issuer
transitively through the Attester, that response can reveal information to the
Attester.</li>
            <li>Token. The token produced by the issuance protocol can contain information
from the issuance context. In particular, depending on the issuance protocol,
tokens can contain public or private metadata, and Issuers can choose that
metadata on the basis of information in the issuance context.</li>
          </ul>
          <t>Exceptional cases in the issuance protocol, such as when either the
Attester or Issuer aborts the protocol, can contribute information to the
attestation or issuance contexts. The extent to which information in this
context harms the Issuer-Client or Attester-Origin unlinkability goals in
<xref target="privacy-and-trust"/> depends on deployment model; see <xref target="deployment"/>.
Clients can choose whether or not to contribute information to these contexts
based on local policy or preference.</t>
        </section>
        <section anchor="redemption-flow">
          <name>Token Redemption Flow</name>
          <t>Clients send tokens to Origins during the redemption protocol. Any information
that is added to the token during issuance can therefore be sent to the Origin.
Information can either be explicitly passed in a token, or it can be implicit
in the way the Client responds to a token challenge. For example, if a Client
fails to complete issuance, and consequently fails to redeem a token for
a token challenge, this can reveal information to the Origin that
it might not otherwise have access to. However, an Origin cannot necessarily
distinguish between a Client that fails to complete issuance and one that
ignores the token challenge altogether.</t>
        </section>
      </section>
    </section>
    <section anchor="deployment">
      <name>Deployment Models</name>
      <t>The Origin, Attester, and Issuer portrayed in <xref target="fig-overview"/> can be
instantiated and deployed in a number of ways. The deployment model directly
influences the manner in which attestation, issuance, and redemption contexts
are separated to achieve Origin-Client, Issuer-Client, and Attester-Origin
unlinkability.</t>
      <t>This section covers some expected deployment models and their corresponding
security and privacy considerations. Each deployment model is described in
terms of the trust relationships and communication patterns between Client,
Attester, Issuer, and Origin.</t>
      <t>The discussion below assumes non-collusion between entities that have access to
the attestation, issuance, and redemption contexts, as collusion between such
entities would enable linking of these contexts and may lead to unlinkability
violations. Generally, this means that entities operated by separate parties do
not collude. Mechanisms for enforcing non-collusion are out of scope for this
architecture.</t>
      <section anchor="deploy-shared">
        <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 <xref target="fig-deploy-shared"/>.</t>
        <figure anchor="fig-deploy-shared">
          <name>Shared Deployment Model</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="256" width="528" viewBox="0 0 528 256" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,48 L 8,80" fill="none" stroke="black"/>
                <path d="M 40,80 L 40,240" fill="none" stroke="black"/>
                <path d="M 80,48 L 80,80" fill="none" stroke="black"/>
                <path d="M 144,32 L 144,80" fill="none" stroke="black"/>
                <path d="M 168,48 L 168,80" fill="none" stroke="black"/>
                <path d="M 216,80 L 216,104" fill="none" stroke="black"/>
                <path d="M 216,120 L 216,160" fill="none" stroke="black"/>
                <path d="M 256,48 L 256,80" fill="none" stroke="black"/>
                <path d="M 304,48 L 304,80" fill="none" stroke="black"/>
                <path d="M 344,80 L 344,96" fill="none" stroke="black"/>
                <path d="M 344,128 L 344,192" fill="none" stroke="black"/>
                <path d="M 376,48 L 376,80" fill="none" stroke="black"/>
                <path d="M 424,48 L 424,80" fill="none" stroke="black"/>
                <path d="M 456,80 L 456,208" fill="none" stroke="black"/>
                <path d="M 496,48 L 496,80" fill="none" stroke="black"/>
                <path d="M 520,48 L 520,80" fill="none" stroke="black"/>
                <path d="M 144,32 L 504,32" fill="none" stroke="black"/>
                <path d="M 8,48 L 80,48" fill="none" stroke="black"/>
                <path d="M 168,48 L 256,48" fill="none" stroke="black"/>
                <path d="M 304,48 L 376,48" fill="none" stroke="black"/>
                <path d="M 424,48 L 496,48" fill="none" stroke="black"/>
                <path d="M 8,80 L 80,80" fill="none" stroke="black"/>
                <path d="M 168,80 L 256,80" fill="none" stroke="black"/>
                <path d="M 304,80 L 376,80" fill="none" stroke="black"/>
                <path d="M 424,80 L 496,80" fill="none" stroke="black"/>
                <path d="M 160,96 L 208,96" fill="none" stroke="black"/>
                <path d="M 224,96 L 336,96" fill="none" stroke="black"/>
                <path d="M 352,96 L 448,96" fill="none" stroke="black"/>
                <path d="M 464,96 L 504,96" fill="none" stroke="black"/>
                <path d="M 48,112 L 304,112" fill="none" stroke="black"/>
                <path d="M 440,112 L 456,112" fill="none" stroke="black"/>
                <path d="M 48,142 L 72,142" fill="none" stroke="black"/>
                <path d="M 48,146 L 72,146" fill="none" stroke="black"/>
                <path d="M 184,142 L 208,142" fill="none" stroke="black"/>
                <path d="M 184,146 L 208,146" fill="none" stroke="black"/>
                <path d="M 40,176 L 128,176" fill="none" stroke="black"/>
                <path d="M 248,176 L 336,176" fill="none" stroke="black"/>
                <path d="M 48,192 L 128,192" fill="none" stroke="black"/>
                <path d="M 256,192 L 344,192" fill="none" stroke="black"/>
                <path d="M 40,224 L 208,224" fill="none" stroke="black"/>
                <path d="M 272,224 L 456,224" fill="none" stroke="black"/>
                <path d="M 504,32 C 512.83064,32 520,39.16936 520,48" fill="none" stroke="black"/>
                <path d="M 160,96 C 151.16936,96 144,88.83064 144,80" fill="none" stroke="black"/>
                <path d="M 504,96 C 512.83064,96 520,88.83064 520,80" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="464,224 452,218.4 452,229.6" fill="black" transform="rotate(0,456,224)"/>
                <polygon class="arrowhead" points="344,176 332,170.4 332,181.6" fill="black" transform="rotate(0,336,176)"/>
                <polygon class="arrowhead" points="216,144 204,138.4 204,149.6" fill="black" transform="rotate(0,208,144)"/>
                <polygon class="arrowhead" points="56,192 44,186.4 44,197.6" fill="black" transform="rotate(180,48,192)"/>
                <polygon class="arrowhead" points="56,144 44,138.4 44,149.6" fill="black" transform="rotate(180,48,144)"/>
                <polygon class="arrowhead" points="56,112 44,106.4 44,117.6" fill="black" transform="rotate(180,48,112)"/>
                <g class="text">
                  <text x="44" y="68">Client</text>
                  <text x="212" y="68">Attester</text>
                  <text x="340" y="68">Issuer</text>
                  <text x="460" y="68">Origin</text>
                  <text x="372" y="116">TokenChallenge</text>
                  <text x="128" y="148">Attestation</text>
                  <text x="188" y="180">TokenRequest</text>
                  <text x="192" y="196">TokenResponse</text>
                  <text x="240" y="228">Token</text>
                  <text x="456" y="244">|</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
                 +---------------------------------------------.
+--------+       |  +----------+     +--------+     +--------+  |
| Client |       |  | Attester |     | Issuer |     | Origin |  |
+---+----+       |  +-----+----+     +----+---+     +---+----+  |
    |             `-------|---------------|-------------|------'
    |<-------------------------------- TokenChallenge --+
    |                     |               |             |
    |<=== Attestation ===>|               |             |
    |                     |               |             |
    +----------- TokenRequest ----------->|             |
    |<---------- TokenResponse -----------+             |
    |                                                   |
    +--------------------- Token ----------------------->
    |                                                   |
]]></artwork>
          </artset>
        </figure>
        <t>This model represents the initial deployment of Privacy Pass, as described in
<xref target="PrivacyPassCloudflare"/>. In this model, the Attester, Issuer, and Origin
share the attestation, issuance, 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 lead to unlinkability violations.</t>
        <t>Origin-Client, Issuer-Client, and Attester-Origin unlinkability requires that
issuance and redemption events be separated over time, such as through the use
of tokens that correspond to token challenges with an empty redemption context
(see <xref target="redemption"/>), or be separated over space, such as through the use of an
anonymizing service when connecting to the Origin.</t>
      </section>
      <section anchor="deploy-joint-issuer">
        <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. The Origin trusts the joint Attester
and Issuer to perform attestation and issue Tokens. Clients interact
with the joint Attester and Issuer for attestation and issuance. This
arrangement is shown in <xref target="fig-deploy-joint-issuer"/>.</t>
        <figure anchor="fig-deploy-joint-issuer">
          <name>Joint Attester and Issuer Deployment Model</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="256" width="520" viewBox="0 0 520 256" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,48 L 8,80" fill="none" stroke="black"/>
                <path d="M 40,80 L 40,240" fill="none" stroke="black"/>
                <path d="M 80,48 L 80,80" fill="none" stroke="black"/>
                <path d="M 160,32 L 160,80" fill="none" stroke="black"/>
                <path d="M 184,48 L 184,80" fill="none" stroke="black"/>
                <path d="M 232,80 L 232,104" fill="none" stroke="black"/>
                <path d="M 232,120 L 232,160" fill="none" stroke="black"/>
                <path d="M 272,48 L 272,80" fill="none" stroke="black"/>
                <path d="M 320,48 L 320,80" fill="none" stroke="black"/>
                <path d="M 360,80 L 360,96" fill="none" stroke="black"/>
                <path d="M 360,128 L 360,192" fill="none" stroke="black"/>
                <path d="M 392,48 L 392,80" fill="none" stroke="black"/>
                <path d="M 416,48 L 416,80" fill="none" stroke="black"/>
                <path d="M 440,48 L 440,80" fill="none" stroke="black"/>
                <path d="M 472,80 L 472,208" fill="none" stroke="black"/>
                <path d="M 512,48 L 512,80" fill="none" stroke="black"/>
                <path d="M 160,32 L 400,32" fill="none" stroke="black"/>
                <path d="M 8,48 L 80,48" fill="none" stroke="black"/>
                <path d="M 184,48 L 272,48" fill="none" stroke="black"/>
                <path d="M 320,48 L 392,48" fill="none" stroke="black"/>
                <path d="M 440,48 L 512,48" fill="none" stroke="black"/>
                <path d="M 8,80 L 80,80" fill="none" stroke="black"/>
                <path d="M 184,80 L 272,80" fill="none" stroke="black"/>
                <path d="M 320,80 L 392,80" fill="none" stroke="black"/>
                <path d="M 440,80 L 512,80" fill="none" stroke="black"/>
                <path d="M 176,96 L 224,96" fill="none" stroke="black"/>
                <path d="M 240,96 L 352,96" fill="none" stroke="black"/>
                <path d="M 368,96 L 400,96" fill="none" stroke="black"/>
                <path d="M 48,112 L 320,112" fill="none" stroke="black"/>
                <path d="M 456,112 L 472,112" fill="none" stroke="black"/>
                <path d="M 48,142 L 80,142" fill="none" stroke="black"/>
                <path d="M 48,146 L 80,146" fill="none" stroke="black"/>
                <path d="M 192,142 L 224,142" fill="none" stroke="black"/>
                <path d="M 192,146 L 224,146" fill="none" stroke="black"/>
                <path d="M 40,176 L 144,176" fill="none" stroke="black"/>
                <path d="M 264,176 L 352,176" fill="none" stroke="black"/>
                <path d="M 48,192 L 136,192" fill="none" stroke="black"/>
                <path d="M 264,192 L 360,192" fill="none" stroke="black"/>
                <path d="M 40,224 L 224,224" fill="none" stroke="black"/>
                <path d="M 288,224 L 472,224" fill="none" stroke="black"/>
                <path d="M 400,32 C 408.83064,32 416,39.16936 416,48" fill="none" stroke="black"/>
                <path d="M 176,96 C 167.16936,96 160,88.83064 160,80" fill="none" stroke="black"/>
                <path d="M 400,96 C 408.83064,96 416,88.83064 416,80" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="480,224 468,218.4 468,229.6" fill="black" transform="rotate(0,472,224)"/>
                <polygon class="arrowhead" points="360,176 348,170.4 348,181.6" fill="black" transform="rotate(0,352,176)"/>
                <polygon class="arrowhead" points="232,144 220,138.4 220,149.6" fill="black" transform="rotate(0,224,144)"/>
                <polygon class="arrowhead" points="56,192 44,186.4 44,197.6" fill="black" transform="rotate(180,48,192)"/>
                <polygon class="arrowhead" points="56,144 44,138.4 44,149.6" fill="black" transform="rotate(180,48,144)"/>
                <polygon class="arrowhead" points="56,112 44,106.4 44,117.6" fill="black" transform="rotate(180,48,112)"/>
                <g class="text">
                  <text x="44" y="68">Client</text>
                  <text x="228" y="68">Attester</text>
                  <text x="356" y="68">Issuer</text>
                  <text x="476" y="68">Origin</text>
                  <text x="388" y="116">TokenChallenge</text>
                  <text x="136" y="148">Attestation</text>
                  <text x="204" y="180">TokenRequest</text>
                  <text x="200" y="196">TokenResponse</text>
                  <text x="256" y="228">Token</text>
                  <text x="472" y="244">|</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
                   +------------------------------.
+--------+         |  +----------+     +--------+  |  +--------+
| Client |         |  | Attester |     | Issuer |  |  | Origin |
+---+----+         |  +-----+----+     +----+---+  |  +---+----+
    |               `-------|---------------|-----'       |
    |<---------------------------------- TokenChallenge --+
    |                       |               |             |
    |<==== Attestation ====>|               |             |
    |                       |               |             |
    +------------- TokenRequest ----------->|             |
    |<----------- TokenResponse ------------+             |
    |                                                     |
    +----------------------- Token ----------------------->
    |                                                     |
]]></artwork>
          </artset>
        </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 an attestation
and issuance context for the Client, which is separate from the Origin's
redemption context.</t>
        <t>For certain types of issuance protocols, this model achieves
Origin-Client, Issuer-Client, and Attester-Origin
unlinkability. However, issuance protocols that require the Issuer to
learn information about the Origin, such as that which is described in
<xref target="RATE-LIMITED"/>, are not appropriate since
they could lead to Attester-Origin unlinkability violations through the Origin
name.</t>
      </section>
      <section anchor="deploy-joint-origin">
        <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. The Issuer accepts token
requests that come from trusted Attesters. Since the Attester and Issuer are
separate entities, this model requires some mechanism by which Issuers
establish trust in the Attester (as described in <xref target="privacy-and-trust"/>).
For example, in settings where the Attester is a Client-trusted service that
directly communicates with the Issuer, one way to establish this trust is via
mutually-authenticated TLS. However, alternative authentication mechanisms are
possible. This arrangement is shown in <xref target="fig-deploy-joint-origin"/>.</t>
        <figure anchor="fig-deploy-joint-origin">
          <name>Joint Origin and Issuer Deployment Model</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="256" width="528" viewBox="0 0 528 256" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,48 L 8,80" fill="none" stroke="black"/>
                <path d="M 40,80 L 40,240" fill="none" stroke="black"/>
                <path d="M 80,48 L 80,80" fill="none" stroke="black"/>
                <path d="M 168,48 L 168,80" fill="none" stroke="black"/>
                <path d="M 216,80 L 216,104" fill="none" stroke="black"/>
                <path d="M 216,120 L 216,160" fill="none" stroke="black"/>
                <path d="M 256,48 L 256,80" fill="none" stroke="black"/>
                <path d="M 280,32 L 280,80" fill="none" stroke="black"/>
                <path d="M 304,48 L 304,80" fill="none" stroke="black"/>
                <path d="M 344,80 L 344,96" fill="none" stroke="black"/>
                <path d="M 344,128 L 344,192" fill="none" stroke="black"/>
                <path d="M 376,48 L 376,80" fill="none" stroke="black"/>
                <path d="M 424,48 L 424,80" fill="none" stroke="black"/>
                <path d="M 456,80 L 456,208" fill="none" stroke="black"/>
                <path d="M 496,48 L 496,80" fill="none" stroke="black"/>
                <path d="M 520,48 L 520,80" fill="none" stroke="black"/>
                <path d="M 280,32 L 504,32" fill="none" stroke="black"/>
                <path d="M 8,48 L 80,48" fill="none" stroke="black"/>
                <path d="M 168,48 L 256,48" fill="none" stroke="black"/>
                <path d="M 304,48 L 376,48" fill="none" stroke="black"/>
                <path d="M 424,48 L 496,48" fill="none" stroke="black"/>
                <path d="M 8,80 L 80,80" fill="none" stroke="black"/>
                <path d="M 168,80 L 256,80" fill="none" stroke="black"/>
                <path d="M 304,80 L 376,80" fill="none" stroke="black"/>
                <path d="M 424,80 L 496,80" fill="none" stroke="black"/>
                <path d="M 296,96 L 336,96" fill="none" stroke="black"/>
                <path d="M 352,96 L 448,96" fill="none" stroke="black"/>
                <path d="M 464,96 L 504,96" fill="none" stroke="black"/>
                <path d="M 48,112 L 304,112" fill="none" stroke="black"/>
                <path d="M 440,112 L 456,112" fill="none" stroke="black"/>
                <path d="M 48,142 L 72,142" fill="none" stroke="black"/>
                <path d="M 48,146 L 72,146" fill="none" stroke="black"/>
                <path d="M 184,142 L 208,142" fill="none" stroke="black"/>
                <path d="M 184,146 L 208,146" fill="none" stroke="black"/>
                <path d="M 40,176 L 136,176" fill="none" stroke="black"/>
                <path d="M 256,176 L 336,176" fill="none" stroke="black"/>
                <path d="M 48,192 L 128,192" fill="none" stroke="black"/>
                <path d="M 256,192 L 344,192" fill="none" stroke="black"/>
                <path d="M 40,224 L 208,224" fill="none" stroke="black"/>
                <path d="M 272,224 L 456,224" fill="none" stroke="black"/>
                <path d="M 504,32 C 512.83064,32 520,39.16936 520,48" fill="none" stroke="black"/>
                <path d="M 296,96 C 287.16936,96 280,88.83064 280,80" fill="none" stroke="black"/>
                <path d="M 504,96 C 512.83064,96 520,88.83064 520,80" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="464,224 452,218.4 452,229.6" fill="black" transform="rotate(0,456,224)"/>
                <polygon class="arrowhead" points="344,176 332,170.4 332,181.6" fill="black" transform="rotate(0,336,176)"/>
                <polygon class="arrowhead" points="216,144 204,138.4 204,149.6" fill="black" transform="rotate(0,208,144)"/>
                <polygon class="arrowhead" points="56,192 44,186.4 44,197.6" fill="black" transform="rotate(180,48,192)"/>
                <polygon class="arrowhead" points="56,144 44,138.4 44,149.6" fill="black" transform="rotate(180,48,144)"/>
                <polygon class="arrowhead" points="56,112 44,106.4 44,117.6" fill="black" transform="rotate(180,48,112)"/>
                <g class="text">
                  <text x="44" y="68">Client</text>
                  <text x="212" y="68">Attester</text>
                  <text x="340" y="68">Issuer</text>
                  <text x="460" y="68">Origin</text>
                  <text x="372" y="116">TokenChallenge</text>
                  <text x="128" y="148">Attestation</text>
                  <text x="196" y="180">TokenRequest</text>
                  <text x="192" y="196">TokenResponse</text>
                  <text x="240" y="228">Token</text>
                  <text x="456" y="244">|</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
                                  +----------------------------.
+--------+          +----------+  |  +--------+     +--------+  |
| Client |          | Attester |  |  | Issuer |     | Origin |  |
+---+----+          +-----+----+  |  +----+---+     +---+----+  |
    |                     |        `------|-------------|------'
    |<-------------------------------- TokenChallenge --+
    |                     |               |             |
    |<=== Attestation ===>|               |             |
    |                     |               |             |
    +------------ TokenRequest ---------->|             |
    |<---------- TokenResponse -----------+             |
    |                                                   |
    +--------------------- Token ----------------------->
    |                                                   |
]]></artwork>
          </artset>
        </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 contexts are separate from issuer and redemption
contexts. As a result, any type of attestation is suitable in this model.</t>
        <t>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. Issuers that produce tokens
for a single Origin are not suitable in this model since an Attester can
infer the Origin from a token request, as described in <xref target="issue-flow"/>. However,
since the issuance protocol provides input secrecy, the Attester does not learn
details about the corresponding token challenge, such as whether the token
challenge is per-Origin or cross-Origin.</t>
      </section>
      <section anchor="deploy-split">
        <name>Split Origin, Attester, Issuer</name>
        <t>In this model, the Origin, Attester, and Issuer are all operated by different
entities. As with the joint Origin and Issuer model, the Issuer accepts token
requests that come from trusted Attesters, and the details of that trust
establishment depend on the issuance protocol and relationship between
Attester and Issuer; see <xref target="privacy-and-trust"/>. This arrangement is shown
in <xref target="fig-overview"/>.</t>
        <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 <xref target="RATE-LIMITED"/> for one such type of issuance protocol.</t>
        <t>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, issuance, and redemption
contexts are separate, and therefore any type of token challenge is suitable in
this model as long as there is more than a single Origin.</t>
        <t>As in the Joint Origin and Issuer model in <xref target="deploy-joint-origin"/>, and as
described in <xref target="issue-flow"/>, if the Issuer produces tokens for a single Origin,
then per-Origin tokens are not appropriate since the Attester can infer the
Origin from a token request.</t>
      </section>
    </section>
    <section anchor="deployment-considerations">
      <name>Deployment Considerations</name>
      <t><xref target="deployment"/> discusses deployment models that are possible in practice.
Beyond possible implications on security and privacy properties of the
resulting system, Privacy Pass deployments can impact the overall ecosystem
in two important ways: (1) discriminatory treatment of Clients and the gated
access to otherwise open services, and (2) centralization. This section
describes considerations relevant to these topics.</t>
      <section anchor="discrimination">
        <name>Discriminatory Treatment</name>
        <t>Origins can use tokens as a signal for distinguishing between Clients
that are capable of completing attestation with one Attester trusted by the
Origin's chosen Issuer, and Clients that are not capable of doing the same. A
consequence of this is that Privacy Pass could enable discriminatory treatment
of Clients based on Attestation support. For example, an Origin could only
authorize Clients that successfully authenticate with a token, prohibiting access
to all other Clients.</t>
        <t>The type of attestation procedures supported for a particular deployment depends
greatly on the use case. For example, consider a proprietary deployment of Privacy Pass
that authorizes clients to access a resource such as an anonymization service. In this
context, it is reasonable to support specific types of attestation procedures that
demonstrate Clients can access the resource, such as with an account or specific
type of device. However, in open deployments of Privacy Pass that are used to
safeguard access to otherwise open or publicly accessible resources, diversity
in attestation procedures is critically important so as to not discriminate against
Clients that choose certain software, hardware, or identity providers.</t>
        <t>In principle, Issuers should strive to mitigate discriminatory behavior by
providing equitable access to all Clients. This can be done by working with a
set of Attesters that are suitable for all Clients. In practice, this may require
tradeoffs in what type of attestation Issuers are willing to trust so as to
enable more widespread support.</t>
        <t>For example, to disallow discriminatory behavior between Clients with and
without device attestation support, an Issuer may wish to support Attesters
that support CAPTCHA-based attestation. This means that the overall attestation
value of a Privacy Pass token is bound by the difficulty in spoofing or
bypassing either one of these attestation procedures.</t>
      </section>
      <section anchor="centralization">
        <name>Centralization</name>
        <t>A consequence of limiting the number of participants (Attesters or Issuers) in
Privacy Pass deployments for meaningful privacy is that it forces concentrated
centralization amongst those participants.
<xref target="CENTRALIZATION"/> discusses
several ways in which this might be mitigated. For example, a multi-stakeholder
governance model could be established to determine what candidate participants
are fit to operate as participants in a Privacy Pass deployment. This is
precisely the system used to control the Web's trust model.</t>
        <t>Alternatively, Privacy Pass deployments might mitigate this problem through
implementation. For example, rather than centralize the role of attestation
in one or few entities, attestation could be a distributed function performed
by a quorum of many parties, provided that neither Issuers nor Origins learn
which Attester implementations were chosen. As a result, Clients could have
more opportunities to switch between attestation participants.</t>
      </section>
    </section>
    <section anchor="privacy">
      <name>Privacy Considerations</name>
      <t>The previous section discusses the impact of deployment details on
Origin-Client, Issuer-Client, and Attester-Origin unlinkability.
The value these properties affords to end users depends on
the size of anonymity sets in which Clients or Origins are
unlinkable. For example, consider two different deployments, one wherein
there exists a redemption anonymity set of size two and another
wherein there redemption anonymity set of size 2<sup>32</sup>. Although
Origin-Client unlinkabiity guarantees that the Origin cannot link any two
requests to the same Client based on these contexts, respectively, the
probability of determining the "true" Client is higher the smaller these
sets become.</t>
      <t>In practice, there are a number of ways in which the size of anonymity sets
may be reduced or partitioned, though they all center around the concept of
consistency. In particular, by definition, all Clients in an anonymity set
share a consistent view of information needed to run the issuance and
redemption protocols. An example type of information needed to run these
protocols is the Issuer public key. When two Clients have inconsistent
information, these Clients effectively have different redemption contexts and
therefore belong in different anonymity sets.</t>
      <t>The following sections discuss issues that can influence anonymity set size.
For each issue, we discuss mitigations or safeguards to protect against the
underlying problem.</t>
      <section anchor="metadata-privacy">
        <name>Partitioning by Issuance Metadata</name>
        <t>Any public or private 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 Issuers 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.</t>
        <t>In general, limiting the amount of metadata permitted helps limit the extent
to which metadata can uniquely identify individual Clients. Clients SHOULD
bound the number of possible metadata values in practice. Most token types do
not admit any metadata, so this bound is implicitly enforced. Moreover,
Privacy Pass deployments SHOULD NOT use metadata unless its value has been
assessed and weighed against the corresponding reduction in Client privacy.</t>
      </section>
      <section anchor="rotation-and-consistency">
        <name>Partitioning by Issuance Consistency</name>
        <t>Anonymity sets can be partitioned by information used for the issuance
protocol, including: metadata, Issuer configuration (keys), and Issuer
selection.</t>
        <t>Any issuance metadata bits of information can be used to partition the Client
anonymity set. For example, 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>The number of active Issuer configurations also contributes to anonymity set
partitioning. In particular, when an Issuer updates their configuration and
the corresponding key pair, any Client that invokes the issuance protocol with
this configuration becomes be part of a set of Clients which also ran the
issuance protocol using the same configuration. Issuer configuration updates,
e.g., due to key rotation, are an important part of hedging against long-term
private key compromise. In general, key rotations represent a trade-off between
Client privacy and Issuer security. Therefore, it is important that key
rotations occur on a regular cycle to reduce the harm of an Issuer key
compromise.</t>
        <t>Lastly, if Clients are willing to issue and redeem tokens from a large number
of Issuers for a specific Origin, and that Origin accepts tokens from all
Issuers, segregation can occur. In particular, if a Client obtains tokens from
many Issuers and an Origin later challenges that Client for a token from each
Issuer, the Origin 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 learns. Therefore, there is an exponential loss in
privacy relative to the number of Issuers.</t>
        <t>The fundamental problem here is that the number of possible issuance
configurations, including the keys in use and the Issuer identities themselves,
can partition the Client anonymity set. To mitigate this problem, Clients
SHOULD bound the number of active issuance configurations per Origin as well as
across Origins. Moreover, Clients SHOULD employ some form of consistency
mechanism to ensure that they receive the same configuration information and
are not being actively partitioned into smaller anonymity sets. See
<xref target="CONSISTENCY"/> for possible consistency
mechanisms. Depending on the deployment, the Attester might assist the Client
in applying these consistency checks across clients. Failure to apply a
consistency check can allow Client-specific keys to violate Origin-Client
unlinkability.</t>
      </section>
      <section anchor="partitioning-by-side-channels">
        <name>Partitioning by Side-Channels</name>
        <t>Side-channel attacks, such as those based on timing correlation, could be
used to reduce anonymity set size. In particular,
for interactive tokens that are bound to a Client-specific redemption
context, the anonymity set of Clients during the issuance protocol consists
of those Clients that started issuance between the time of the Origin's
challenge and the corresponding token redemption. Depending on the number
of Clients using a particular Issuer during that time window, the set can
be small. Applications should take such side channels into consideration before
choosing a particular deployment model and type of token challenge and
redemption context.</t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>This document describes security and privacy requirements for the Privacy Pass
redemption and issuance protocols. It also describes deployment models built
around non-collusion assumptions and privacy considerations for using Privacy
Pass within those models. Ensuring Client privacy -- separation of attestation
and redemption contexts -- requires active work on behalf of the Client,
especially in the presence of malicious Issuers and Origins. Implementing
mitigations discussed in <xref target="deployment"/> and <xref target="privacy"/> is therefore necessary
to ensure that Privacy Pass offers meaningful privacy improvements to end-users.</t>
      <section anchor="hoarding">
        <name>Token Caching</name>
        <t>Depending on the Origin's token challenge, Clients can request and cache more
than one token using an issuance protocol. Cached tokens help improve privacy by
separating the time of token issuance from the time of token redemption, and
also allow Clients to reduce the overhead of receiving new tokens via the
issuance protocol.</t>
        <t>As a consequence, Origins that send token challenges which are compatible with
cached tokens need to take precautions to ensure that tokens are not replayed.
This is typically done via keeping track of tokens that are redeemed for the
period of time in which cached tokens would be accepted for particular
challenges.</t>
        <t>Moreover, since tokens are not intrinsically bound to Clients, it is possible
for malicious Clients to collude and share tokens in a so-called "hoarding
attack." As an example of this attack, many distributed Clients could obtain
cacheable tokens and them share them with a single Client to redeem in a way
that would violate an Origin's attempt to limit tokens to any one particular
Client. In general, mechanisms for mitigating hoarding attacks depend on the
deployment model and use case. For example, in the Joint Origin and Issuer model,
comparing the issuance and redemption contexts can help detect hoarding attacks,
i.e., if the distribution of redemption contexts is noticeably different from the
distribution of issuance contexts. Rate limiting issuance, either at the Client,
Attester, or Issuer, can also help mitigate these attacks.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="AUTHSCHEME">
          <front>
            <title>The Privacy Pass HTTP Authentication Scheme</title>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <organization>Apple Inc.</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="9" month="August" year="2023"/>
            <abstract>
              <t>   This document defines an HTTP authentication scheme for Privacy Pass,
   a privacy-preserving authentication mechanism used for authorization.
   The authentication scheme in this document can be used by clients to
   redeem Privacy Pass tokens with an origin.  It can also be used by
   origins to challenge clients to present Privacy Pass tokens.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-auth-scheme-12"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="PrivacyPassExtension" 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="PrivacyPassCloudflare" 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="DMS2004" target="https://svn.torproject.org/svn/projects/design-paper/tor-design.html">
          <front>
            <title>Tor: The Second-Generation Onion Router</title>
            <author initials="R." surname="Dingledine">
              <organization/>
            </author>
            <author initials="N." surname="Mathewson">
              <organization/>
            </author>
            <author initials="P." surname="Syverson">
              <organization/>
            </author>
            <date year="2004" month="August"/>
          </front>
        </reference>
        <reference anchor="HIJK21" target="https://research.fb.com/privatestats">
          <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="ISSUANCE">
          <front>
            <title>Privacy Pass Issuance Protocol</title>
            <author fullname="Sofia Celi" initials="S." surname="Celi">
              <organization>Brave Software</organization>
            </author>
            <author fullname="Alex Davidson" initials="A." surname="Davidson">
              <organization>Brave Software</organization>
            </author>
            <author fullname="Steven Valdez" initials="S." surname="Valdez">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="16" month="August" year="2023"/>
            <abstract>
              <t>   This document specifies two variants of the two-message issuance
   protocol for Privacy Pass tokens: one that produces tokens that are
   privately verifiable using the issuance private key, and another that
   produces tokens that are publicly verifiable using the issuance
   public key.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-protocol-12"/>
        </reference>
        <reference anchor="RFC9334">
          <front>
            <title>Remote ATtestation procedureS (RATS) Architecture</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="D. Thaler" initials="D." surname="Thaler"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="N. Smith" initials="N." surname="Smith"/>
            <author fullname="W. Pan" initials="W." surname="Pan"/>
            <date month="January" year="2023"/>
            <abstract>
              <t>In network protocol exchanges, it is often useful for one end of a communication to know whether the other end is in an intended operating state. This document provides an architectural overview of the entities involved that make such tests possible through the process of generating, conveying, and evaluating evidentiary Claims. It provides a model that is neutral toward processor architectures, the content of Claims, and protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9334"/>
          <seriesInfo name="DOI" value="10.17487/RFC9334"/>
        </reference>
        <reference anchor="OHTTP">
          <front>
            <title>Oblivious HTTP</title>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="25" month="August" year="2023"/>
            <abstract>
              <t>   This document describes Oblivious HTTP, a protocol for forwarding
   encrypted HTTP messages.  Oblivious HTTP allows a client to make
   multiple requests to an origin server without that server being able
   to link those requests to the client or to identify the requests as
   having come from the same client, while placing only limited trust in
   the nodes used to forward the messages.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ohai-ohttp-10"/>
        </reference>
        <reference anchor="KLOR20" target="https://doi.org/10.1007/978-3-030-56784-2_11">
          <front>
            <title>Anonymous Tokens with Private Metadata Bit</title>
            <author fullname="Ben Kreuter" surname="Kreuter"/>
            <author fullname="Tancrède Lepoint" surname="Lepoint"/>
            <author fullname="Michele Orrù" surname="Orrù"/>
            <author fullname="Mariana Raykova" surname="Raykova"/>
            <author>
              <organization>Springer International Publishing</organization>
            </author>
            <date year="2020"/>
          </front>
          <refcontent>Advances in Cryptology – CRYPTO 2020, pp. 308-336</refcontent>
          <seriesInfo name="DOI" value="10.1007/978-3-030-56784-2_11"/>
        </reference>
        <reference anchor="RATE-LIMITED">
          <front>
            <title>Rate-Limited Token Issuance Protocol</title>
            <author fullname="Scott Hendrickson" initials="S." surname="Hendrickson">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Jana Iyengar" initials="J." surname="Iyengar">
              <organization>Fastly</organization>
            </author>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <organization>Apple Inc.</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 a variant of the Privacy Pass issuance
   protocol that allows for tokens to be rate-limited on a per-origin
   basis.  This enables origins to use tokens for use cases that need to
   restrict access from anonymous clients.

Discussion Venues

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

   Source for this draft and an issue tracker can be found at
   https://github.com/tfpauly/privacy-proxy.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-privacypass-rate-limit-tokens-03"/>
        </reference>
        <reference anchor="CENTRALIZATION">
          <front>
            <title>Centralization, Decentralization, and Internet Standards</title>
            <author fullname="Mark Nottingham" initials="M." surname="Nottingham">
         </author>
            <date day="23" month="July" year="2023"/>
            <abstract>
              <t>   This document discusses aspects of centralization that relate to
   Internet standards efforts.  It argues that while standards bodies
   have little ability to prevent many forms of centralization, they can
   still make contributions that improve the Internet.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-nottingham-avoiding-internet-centralization-12"/>
        </reference>
        <reference anchor="CONSISTENCY">
          <front>
            <title>Key Consistency and Discovery</title>
            <author fullname="Alex Davidson" initials="A." surname="Davidson">
              <organization>Brave Software</organization>
            </author>
            <author fullname="Matthew Finkel" initials="M." surname="Finkel">
              <organization>The Tor Project</organization>
            </author>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="10" month="July" year="2023"/>
            <abstract>
              <t>   This document describes the consistency requirements of protocols
   such as Privacy Pass, Oblivious DoH, and Oblivious HTTP for user
   privacy.  It presents definitions for consistency and then surveys
   mechanisms for providing consistency in varying threat models.  In
   concludes with discussion of open problems in this area.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-key-consistency-01"/>
        </reference>
      </references>
    </references>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors would like to thank Eric Kinnear, Scott Hendrickson, Tommy Pauly,
Christopher Patton, Benjamin Schwartz, Martin Thomson, Steven Valdez and other
contributors of the Privacy Pass Working Group for many helpful contributions
to this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
8hEnKDpRfCmB2uI1wdb/Y8rTjcQjrsvqCjNwks/94arHAZvBmGUYZguCfDb2
/9hFk4KIk0Q3AGqWODAwkqU3v3E4v4f/5O2UVUvcQDgLGUHE0DBeSAPB1UCP
br1mr5DQI462Ouy37DlsMUqwAllT4kHqS3omQZ4/PqBHIrw+nC26epVEV2rT
VT+CtDDsjZxTJTEvHEzViatKVGfQ8bzMgEPrWMEh/jHSauIDosXk5C7FhzYl
WSWsdPiLhzdVHYjLWHTjcB2wsqNSEO/AJ72hYdbxgLnc6okv8DFQO2B0OOMv
7yUayb33zv33f/93UZb9zbX7dC7/Pi3Mv8yn/iP8MPzdvVP98J0d4J1S7Dvz
kedr7+D/5Cze0Qw+zc7g08wMPjUz4A8cD577l/vUfvaOn/09jelvYmY/Jp+F
KfC19Q4TePyrD3xvfs6///LLwprfX3751Qc/+wveG86XFxTvBqzp5JzTZ0Uk
eCrRb+kmf8q87oP3+eeuFwjdwVW4v66v52rjckLJl/fUtkLv+Z3GpjXP8AaB
Gfc9LPAMZF7vHP64xB/HRhtqglddi+FTUrhREymuUTMj/poqtqTGOGBO3oos
xlYkcUOJaMETAwbRkDsdZBqjWYCumU2MQsdvSb4nDP4XyDVBZu1AmuyAwy7R
9IkMRNASDj0y7aEr16h+k2glj+aSNVGKVVzCM2/fSgqTzlckPMUgcSuqG1Cn
wUiOvCSR1zrxdGPggHwezJrZWUrrXRTftrcVqojkBClXKxhgCQskjZtCmySK
vG538OdVRi+9qsCuxjSG4nl7O//bAaaLI4AwqufrrjysClKVtzSFFo7SZz/6
TVjwFehJe9DAKMYiC8vhr6pNLU4QiseW1xKr3dZvKiAM9pZdtWyZIGGS8EEp
guoirQlGpJ8xrHEY2h2JPPh6uXzjT2KJdN0QnfTDAY4M0wGe/Vii7TDWG9Gn
1/Ow8QYHBV1tINpUfb2YQ0Xrg14UWcEQD94hnKAToT3DGHK7RK1ITCY46Ou2
XRWUN4rzg91/fdJdTh4S8eV2NdhL3fEjtx/9Pjwf0pjo9DvW+GnUeNCQglDa
q9quYdBXV9uaXATFt5eXr9EB+wp/CCG6dlPW8J9h2Kv7Ry/mH73365J9aC/I
hHl7f+xuZE9Rhb+3c2QgeQdRdHvevlWGB7ccLfPtDelLHZiePkWBgp3sT0Dl
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

-->

</rfc>
