<?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-14" 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-14"/>
    <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="August" day="09"/>
    <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 response 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 follows a challenge-response flow, 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 response. This interaction is shown below.</t>
        <figure anchor="fig-redemption">
          <name>Challenge-response 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 in response to 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 in response to 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 in response to
a challenge. The context in which an Attester vouches for a Client during
issuance is referred to as the attestation context. This context includes all
information associated with the issuance event, such as the timestamp of the
event and Client visible information, including the IP address or other
information specific to the type of attestation done.</t>
        <t>Each issuance protocol may be different, e.g., in the number and types of
participants, underlying cryptographic constructions used when issuing tokens,
and even privacy properties.</t>
        <t>Clients initiate the 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>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 response 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 in
response to 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 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. Depending on the deployment model, it can be possible to detect these
types of attacks by comparing issuance and redemption contexts; for example,
this is possible in the Joint Origin and Issuer model.</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="23" month="June" year="2023"/>
            <abstract>
              <t>   This document defines an HTTP authentication scheme that 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 an acceptable
   Privacy Pass token.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-auth-scheme-11"/>
        </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="26" month="June" 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-11"/>
        </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="27" month="July" year="2023"/>
            <abstract>
              <t>   This document describes a system for forwarding encrypted HTTP
   messages.  This allows a client to make multiple requests to an
   origin server without that server being able to link those requests
   to the client or to identify the requests as having come from the
   same client, while placing only limited trust in the nodes used to
   forward the messages.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ohai-ohttp-09"/>
        </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:
H4sIAAAAAAAAA+1965Ybx3Xu/3qKDvVD5BIAibTjC20poSnKoi2KPJpRvJKs
rLgHaAxaBLrh7saMIJJ5lvMs58nOvteu6gaGtJJ/YbLkGQy6ui679n1/ez6f
h6EettXj4t7lpipedfVNuTwWr8q+L550y009VMvh0FX3Qnl11VU3j09/Jaza
ZVPuYKhVV66HeV0N6/mev72HL89L9+X5w1+GVTlUj8MS/nvddsfHRd2s2xDq
ffe4GLpDPzz67LPffvYovK6Ot223elw8b4aqa6ph/iWOH0I/lM3qP8tt28A7
j1Uf9vXj4t+Hdjkr+rYbumrdw0/HHf7wHyGUh2HTdo9DMQ8F/Kub/nHxZFF8
Wd7Uq75t6EOe/5Nt9WP6edtdPy6+ef6KflnWA8z2m7q/kr8u20Mz4ApewWsP
1+WWPq12Zb19XJQw2GIlg/320T9f48eLZbtLJvKnRfH8WDXXZefm8aeyKZOP
aRpflf2wPfpX/NDV/7ymT0fjPl3gGv/Stis37tNNV/dDu99UXfJXGv7ptj2s
1tsSDhQ/62Efq+Fx8fCzh8Vle9v0VbMqLga3ERdlU3zVlc2y7pdtuh/fN3De
+HU4475o18WTXdXVy9JPflne/vOmKvd1c31VD/0CDjiEpu125VDfAH0EJAv7
rVD6Q/J79uNQNX3dNo9pQCHkhED/0LW3PSzTvsrfLLtrXNRmGPb9408/va6H
zeEKN+9TR7CfLjfldgu7X82vmIIrN4qbR9yyZCLx4+LisN8DbfTJ5CancrVt
rxdLe5LmFH+d9zKQXqw5TZRGMvou7PS/XcCbt1v4ZiMfj4/4yxcXcNF+mcz8
3iUMVCBDuKiWbbOa/7Fqqg6OoG2Klw3+97v2AJfxHj1E97jAQeaf/SZZ1D1d
VX/TLIa223ftD3D/FzAL/OhT+b3/dFX19XUDi9lX3afwxTl/sNgMu+29idXN
eX3fwfUFutlWq7qp0j/B0l+Uw6a61Stsf3kFm3K8qTr+w9fP//TnRw/T1dMh
DRWSLXz/y2r+fFU1Q72ugZafwDzwF2Rbq+Kb9voaJlCUQ3GxhJt+b/JMu6qv
kPkt1o7G4Ebg+G4H4brDLj56OLVe+V8514tF8fWhbK5P/tUzjam//6k6ll25
M7IYf+PPh35zW26m/w5c5c+L4puqmv7zv8HfDu3032D3X7QbINpqO/0FYEjf
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

-->

</rfc>
