<?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-10" 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-10"/>
    <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="January" day="30"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document specifies the Privacy Pass architecture and requirements for
its constituent protocols used for constructing privacy-preserving
authentication mechanisms. It provides recommendations on how the architecture
should be deployed to ensure the privacy of clients and the security of all
participating entities.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Privacy Pass is an architecture for authorization based on privacy-preserving
authentication mechanisms. Typical approaches for authorizing clients,
such as through the use of long-term cookies, are not privacy-friendly
since they allow servers to track clients across sessions and interactions.
Privacy Pass takes a different approach: instead of presenting linkable
state carrying information to servers, e.g., 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 instance in which 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 authorization. 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>
      <ul spacing="normal">
        <li>Client: An entity that seeks authorization to an Origin.</li>
        <li>Origin: An entity that redeems tokens presented by Clients.</li>
        <li>Issuer: An entity that issues tokens to Clients for properties
attested to by the Attester.</li>
        <li>Attester: An entity that attests to properties of Client for the
purposes of token issuance.</li>
      </ul>
    </section>
    <section anchor="architecture">
      <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 describes the purpose
of token redemption and issuance and the requirements on the relevant
participants.</t>
      <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 an HTTP request.
The Origin sends an HTTP response that contains a token challenge
that indicates a specific Issuer to use.
Note that the request might be made as part of accessing a
resource normally, or with the specific intent of triggering a token
challenge.</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 step 6 and redeem its token. Otherwise, it invokes the issuance
protocol to request a token from the designated Issuer.</li>
        <li>The first step in the issuance protocol is attestation. Specifically, the
Attester performs attestation checks on the Client. These checks
could be proof of solving a CAPTCHA, device trust, hardware attestation,
etc (see <xref target="attester"/>).</li>
        <li>If attestation succeeds, the client creates a Token Request to send
to the designated Issuer (generally via 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 details of Attestation, the Client can
send the Token Request to the Attester alongside any attestation information.
If attestation 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>If the Client has a token, it includes it in a subsequent HTTP
request to the Origin, as authorization. This token is sent only once.
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.</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="192" width="472" viewBox="0 0 472 192" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
              <path d="M 104,64 L 152,64" fill="none" stroke="black"/>
              <path d="M 128,96 L 152,96" fill="none" stroke="black"/>
              <path d="M 176,112 L 200,112" fill="none" stroke="black"/>
              <path d="M 296,112 L 320,112" fill="none" stroke="black"/>
              <path d="M 280,128 L 392,128" fill="none" stroke="black"/>
              <path d="M 240,144 L 352,144" fill="none" stroke="black"/>
              <path d="M 136,160 L 152,160" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="400,128 388,122.4 388,133.6" fill="black" transform="rotate(0,392,128)"/>
              <polygon class="arrowhead" points="328,112 316,106.4 316,117.6" fill="black" transform="rotate(0,320,112)"/>
              <polygon class="arrowhead" points="248,144 236,138.4 236,149.6" fill="black" transform="rotate(180,240,144)"/>
              <polygon class="arrowhead" points="184,112 172,106.4 172,117.6" fill="black" transform="rotate(180,176,112)"/>
              <polygon class="arrowhead" points="160,96 148,90.4 148,101.6" fill="black" transform="rotate(0,152,96)"/>
              <polygon class="arrowhead" points="144,160 132,154.4 132,165.6" fill="black" transform="rotate(180,136,160)"/>
              <polygon class="arrowhead" points="112,64 100,58.4 100,69.6" fill="black" transform="rotate(180,104,64)"/>
              <g class="text">
                <text x="52" y="36">Origin</text>
                <text x="188" y="36">Client</text>
                <text x="316" y="36">Attester</text>
                <text x="412" y="36">Issuer</text>
                <text x="64" y="68">Request</text>
                <text x="60" y="100">TokenChallenge</text>
                <text x="248" y="116">Attestation</text>
                <text x="220" y="132">TokenRequest</text>
                <text x="416" y="148">TokenResponse</text>
                <text x="32" y="164">Request</text>
                <text x="72" y="164">+</text>
                <text x="104" y="164">Token</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
    Origin           Client         Attester     Issuer

     Request <------

 TokenChallenge --->
                      <--(Attestation)-->
                      TokenRequest -------------->
                              <-------------- TokenResponse
 Request + Token <--
]]></artwork>
        </artset>
      </figure>
      <t>The end-to-end flow for Privacy Pass involves three different types of
contexts:</t>
      <ul spacing="normal">
        <li>Redemption context: The interactions and set of information shared
between the Client and Origin. 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.</li>
        <li>Issuance context: The interactions and set of information shared
between the Client, Attester, and Issuer. 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).</li>
        <li>Attestation context: The interactions and set of information shared between
the Client and Attester only, for the purposes of attesting the vailidity of
the Client. This context includes all information associated with attestation,
such as the timestamp of the event and any Client visibile information,
including information needed for the attestation procedure to complete.</li>
      </ul>
      <t>The privacy goals of Privacy Pass are oriented around unlinkability based on
these contexts. In particular, Privacy Pass aims to achieve three different
types of unlinkability:</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 issuer context is indistinguishable from any other
Client that might use the same issuer context. The set of Clients that share
the same redemption context is referred to as a redemption 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 Clients that share the same attestation
context is referred to as an anonymity set.</li>
      </ol>
      <t>At a high level, these properties ensure that no single party amongst the
Attester, Issuer, or Origin can link client identifying information to client
activity, e.g., the origin being accessed.</t>
      <t>The manner in which Origin-Client, Issuer-Client, and Attester-Origin
unlinkability are achieved depends on the deployment model, type of
attestation, and issuance protocol details. For example, as discussed in
<xref target="deployment"/>, failure to use a privacy-enhancing proxy system such as Tor
<xref target="Dingledine2004"/> when interacting with Attesters, Issuers, or Origins allows
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"/> 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.</t>
      <section anchor="redemption-protocol">
        <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="128" width="328" viewBox="0 0 328 128" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 160,48 L 160,96" fill="none" stroke="black"/>
                <path d="M 320,64 L 320,96" fill="none" stroke="black"/>
                <path d="M 160,48 L 304,48" fill="none" stroke="black"/>
                <path d="M 128,64 L 152,64" fill="none" stroke="black"/>
                <path d="M 120,96 L 160,96" fill="none" stroke="black"/>
                <path d="M 176,112 L 304,112" fill="none" stroke="black"/>
                <path d="M 304,48 C 312.83064,48 320,55.16936 320,64" fill="none" stroke="black"/>
                <path d="M 176,112 C 167.16936,112 160,104.83064 160,96" fill="none" stroke="black"/>
                <path d="M 304,112 C 312.83064,112 320,104.83064 320,96" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="160,64 148,58.4 148,69.6" fill="black" transform="rotate(0,152,64)"/>
                <polygon class="arrowhead" points="128,96 116,90.4 116,101.6" fill="black" transform="rotate(180,120,96)"/>
                <g class="text">
                  <text x="68" y="36">Origin</text>
                  <text x="236" y="36">Client</text>
                  <text x="60" y="68">TokenChallenge</text>
                  <text x="204" y="84">Issuance</text>
                  <text x="276" y="84">protocol</text>
                  <text x="64" y="100">Token</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
     Origin               Client
                   +------------------.
TokenChallenge --->|                   |
                   | Issuance protocol |
     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 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. Each Issuer, in turn, determines which Attesters it
is willing to accept in the issuance protocol. This means that if an Origin
origin.example accepts tokens issued by Issuer issuer.example, and that
Issuer in turn accepts different types of attestation from more than one
trusted Attester, then a Client may use either of these trusted Attesters
to issue and redeem tokens for origin.example. However, origin.example
neither explicitly specifies nor learns the Attesters or their attestation
formats used for token issuance.</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 Section 2.1.1 of <xref 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.</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, 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.
See Section 2.1.1 of <xref target="AUTHSCHEME"/> for discussion.</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 the figure below.</t>
        <figure anchor="fig-issuance">
          <name>Issuance protocol interaction</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="128" width="464" viewBox="0 0 464 128" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 160,48 L 160,96" fill="none" stroke="black"/>
                <path d="M 456,64 L 456,96" fill="none" stroke="black"/>
                <path d="M 160,48 L 440,48" fill="none" stroke="black"/>
                <path d="M 128,64 L 152,64" fill="none" stroke="black"/>
                <path d="M 176,64 L 200,64" fill="none" stroke="black"/>
                <path d="M 296,64 L 320,64" fill="none" stroke="black"/>
                <path d="M 280,80 L 408,80" fill="none" stroke="black"/>
                <path d="M 120,96 L 160,96" fill="none" stroke="black"/>
                <path d="M 208,96 L 328,96" fill="none" stroke="black"/>
                <path d="M 176,112 L 440,112" fill="none" stroke="black"/>
                <path d="M 440,48 C 448.83064,48 456,55.16936 456,64" fill="none" stroke="black"/>
                <path d="M 176,112 C 167.16936,112 160,104.83064 160,96" fill="none" stroke="black"/>
                <path d="M 440,112 C 448.83064,112 456,104.83064 456,96" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="416,80 404,74.4 404,85.6" fill="black" transform="rotate(0,408,80)"/>
                <polygon class="arrowhead" points="328,64 316,58.4 316,69.6" fill="black" transform="rotate(0,320,64)"/>
                <polygon class="arrowhead" points="216,96 204,90.4 204,101.6" fill="black" transform="rotate(180,208,96)"/>
                <polygon class="arrowhead" points="184,64 172,58.4 172,69.6" fill="black" transform="rotate(180,176,64)"/>
                <polygon class="arrowhead" points="160,64 148,58.4 148,69.6" fill="black" transform="rotate(0,152,64)"/>
                <polygon class="arrowhead" points="128,96 116,90.4 116,101.6" fill="black" transform="rotate(180,120,96)"/>
                <g class="text">
                  <text x="52" y="36">Origin</text>
                  <text x="212" y="36">Client</text>
                  <text x="316" y="36">Attester</text>
                  <text x="412" y="36">Issuer</text>
                  <text x="60" y="68">TokenChallenge</text>
                  <text x="248" y="68">Attestation</text>
                  <text x="220" y="84">TokenRequest</text>
                  <text x="64" y="100">Token</text>
                  <text x="392" y="100">TokenResponse</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
   Origin              Client      Attester     Issuer
                   +-----------------------------------.
TokenChallenge --->| <--(Attestation)-->                |
                   | TokenRequest ---------------->     |
     Token    <----+     <--------------- TokenResponse |
                    `----------------------------------'
]]></artwork>
          </artset>
        </figure>
        <t>Clients interact with the Attester and Issuer to produce a token in response to
a challenge. The context in which an Attester vouches for a Client during
issuance is referred to as the attestation context. This context includes all
information associated with the issuance event, such as the timestamp of the
event and Client visible information, including the IP address or other
information specific to the type of attestation done.</t>
        <t>Each issuance protocol may be different, e.g., in the number and types of
participants, underlying cryptographic constructions used when issuing tokens,
and even privacy properties.</t>
        <t>Clients initiate the 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). The issuance protocol can reveal the Issuer public
key for the purposes of determining which private key to use in producing the
token. 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>Attestation is an important part of the issuance protocol. In Privacy Pass,
attestation is the process by which an Attester bears witness to, confirms,
or authenticates a Client so as to verify a property about the Client that
is required for Issuance. Clients explicitly trust Attesters to perform
attestation correctly and in a way that does not violate their privacy.</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. A type of
attestation procedure is also referred as an attestation format.</t>
          <t>In general, each attestation format has different security properties. For
example, attesting to having a valid account is different from attesting to
running on trusted hardware. In general, minimizing the set of attestation
formats helps minimize the amount of information leaked through a token.</t>
          <t>Each attestation format also has an impact on the overall system privacy.
Requiring a conjunction of attestation types could decrease the overall
anonymity set size. For example, the number of Clients that have solved a
CAPTCHA in the past day, 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 admit attestation types that result in small
anonymity sets.</t>
          <t>The trustworthiness of Attesters depends on their ability to correctly and
reliably perform attestation during the issuance protocol. Indeed, 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
process is compromised or maliciously automated. These 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 format 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>
        </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.
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. 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 configuraton 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 log2(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. In normal circumstances,
Clients cannot determine if this value is correct or otherwise a tracking
vector.</t>
          <t>Private metadata is that which Clients cannot observe as part of the token
issuance flow. Such instantiations 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>Issuance Protocol Extensibility</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 issuance protocol MUST include a detailed analysis
of the privacy impacts of the extension, why these impacts are justified,
and guidelines on how to deploy the protocol to minimize any privacy impacts.
Any extension to the Privacy Pass protocol MUST adhere to the guidelines
specified in <xref target="issuer-role"/> for managing Issuer public key data.</t>
        </section>
      </section>
    </section>
    <section anchor="deployment">
      <name>Deployment Considerations</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 the figure below.</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="272" width="464" viewBox="0 0 464 272" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 24,64 L 24,80" fill="none" stroke="black"/>
                <path d="M 24,112 L 24,176" fill="none" stroke="black"/>
                <path d="M 24,208 L 24,224" fill="none" stroke="black"/>
                <path d="M 112,32 L 112,88" fill="none" stroke="black"/>
                <path d="M 456,48 L 456,224" fill="none" stroke="black"/>
                <path d="M 112,32 L 440,32" fill="none" stroke="black"/>
                <path d="M 24,96 L 400,96" fill="none" stroke="black"/>
                <path d="M 24,128 L 168,128" fill="none" stroke="black"/>
                <path d="M 24,160 L 288,160" fill="none" stroke="black"/>
                <path d="M 24,192 L 288,192" fill="none" stroke="black"/>
                <path d="M 24,224 L 400,224" fill="none" stroke="black"/>
                <path d="M 120,240 L 440,240" fill="none" stroke="black"/>
                <path d="M 440,32 C 448.83064,32 456,39.16936 456,48" fill="none" stroke="black"/>
                <path d="M 440,240 C 448.83064,240 456,232.83064 456,224" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="408,224 396,218.4 396,229.6" fill="black" transform="rotate(0,400,224)"/>
                <polygon class="arrowhead" points="296,160 284,154.4 284,165.6" fill="black" transform="rotate(0,288,160)"/>
                <polygon class="arrowhead" points="176,128 164,122.4 164,133.6" fill="black" transform="rotate(0,168,128)"/>
                <polygon class="arrowhead" points="32,192 20,186.4 20,197.6" fill="black" transform="rotate(180,24,192)"/>
                <polygon class="arrowhead" points="32,96 20,90.4 20,101.6" fill="black" transform="rotate(180,24,96)"/>
                <g class="text">
                  <text x="28" y="52">Client</text>
                  <text x="164" y="52">Attester</text>
                  <text x="292" y="52">Issuer</text>
                  <text x="412" y="52">Origin</text>
                  <text x="228" y="84">TokenChallenge</text>
                  <text x="112" y="116">|</text>
                  <text x="148" y="116">Attest</text>
                  <text x="112" y="148">|</text>
                  <text x="204" y="148">TokenRequest</text>
                  <text x="112" y="180">|</text>
                  <text x="208" y="180">TokenResponse</text>
                  <text x="112" y="212">|</text>
                  <text x="224" y="212">Token</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
                   +-----------------------------------------.
      Client       |  Attester         Issuer         Origin  |
        |          |                                          |
        |          |       TokenChallenge                     |
        <----------------------------------------------+      |
        |          | Attest                                   |
        +----------------->                                   |
        |          |     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 with an empty redemption context, or be separated over space, such
as through the use of an anonymizing proxy 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 the figure below.</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="368" width="472" viewBox="0 0 472 368" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 24,96 L 24,224" fill="none" stroke="black"/>
                <path d="M 24,256 L 24,304" fill="none" stroke="black"/>
                <path d="M 112,112 L 112,168" fill="none" stroke="black"/>
                <path d="M 336,128 L 336,240" fill="none" stroke="black"/>
                <path d="M 368,32 L 368,72" fill="none" stroke="black"/>
                <path d="M 368,88 L 368,296" fill="none" stroke="black"/>
                <path d="M 464,48 L 464,320" fill="none" stroke="black"/>
                <path d="M 368,32 L 448,32" fill="none" stroke="black"/>
                <path d="M 24,80 L 408,80" fill="none" stroke="black"/>
                <path d="M 112,112 L 320,112" fill="none" stroke="black"/>
                <path d="M 24,176 L 168,176" fill="none" stroke="black"/>
                <path d="M 24,208 L 288,208" fill="none" stroke="black"/>
                <path d="M 24,240 L 288,240" fill="none" stroke="black"/>
                <path d="M 120,256 L 320,256" fill="none" stroke="black"/>
                <path d="M 24,304 L 408,304" fill="none" stroke="black"/>
                <path d="M 384,336 L 448,336" fill="none" stroke="black"/>
                <path d="M 448,32 C 456.83064,32 464,39.16936 464,48" fill="none" stroke="black"/>
                <path d="M 320,112 C 328.83064,112 336,119.16936 336,128" fill="none" stroke="black"/>
                <path d="M 320,256 C 328.83064,256 336,248.83064 336,240" fill="none" stroke="black"/>
                <path d="M 384,336 C 375.16936,336 368,328.83064 368,320" fill="none" stroke="black"/>
                <path d="M 448,336 C 456.83064,336 464,328.83064 464,320" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="416,304 404,298.4 404,309.6" fill="black" transform="rotate(0,408,304)"/>
                <polygon class="arrowhead" points="296,208 284,202.4 284,213.6" fill="black" transform="rotate(0,288,208)"/>
                <polygon class="arrowhead" points="176,176 164,170.4 164,181.6" fill="black" transform="rotate(0,168,176)"/>
                <polygon class="arrowhead" points="32,240 20,234.4 20,245.6" fill="black" transform="rotate(180,24,240)"/>
                <polygon class="arrowhead" points="32,80 20,74.4 20,85.6" fill="black" transform="rotate(180,24,80)"/>
                <g class="text">
                  <text x="28" y="52">Client</text>
                  <text x="420" y="52">Origin</text>
                  <text x="24" y="68">|</text>
                  <text x="220" y="68">TokenChallenge</text>
                  <text x="164" y="132">Attester</text>
                  <text x="292" y="132">Issuer</text>
                  <text x="148" y="164">Attest</text>
                  <text x="112" y="196">|</text>
                  <text x="204" y="196">TokenRequest</text>
                  <text x="112" y="228">|</text>
                  <text x="208" y="228">TokenResponse</text>
                  <text x="216" y="292">Token</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
                                                   +----------.
      Client                                       |   Origin  |
        |                 TokenChallenge           |           |
        <-----------------------------------------------+      |
        |                                          |           |
        |          +--------------------------.    |           |
        |          |  Attester         Issuer  |   |           |
        |          |                           |   |           |
        |          | Attest                    |   |           |
        +----------------->                    |   |           |
        |          |     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, the Attester must authenticate itself to the Issuer. In
settings where the Attester is a Client-trusted service, one way Attesters
can authenticate to Issuers is via mutually-authenticated TLS. However,
alernative authentication mechanisms are possible. This arrangement is shown
below.</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="400" width="472" viewBox="0 0 472 400" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 24,96 L 24,256" fill="none" stroke="black"/>
                <path d="M 24,288 L 24,352" fill="none" stroke="black"/>
                <path d="M 112,112 L 112,168" fill="none" stroke="black"/>
                <path d="M 112,184 L 112,216" fill="none" stroke="black"/>
                <path d="M 112,232 L 112,264" fill="none" stroke="black"/>
                <path d="M 208,128 L 208,192" fill="none" stroke="black"/>
                <path d="M 248,32 L 248,72" fill="none" stroke="black"/>
                <path d="M 248,88 L 248,192" fill="none" stroke="black"/>
                <path d="M 248,280 L 248,344" fill="none" stroke="black"/>
                <path d="M 464,48 L 464,352" fill="none" stroke="black"/>
                <path d="M 248,32 L 448,32" fill="none" stroke="black"/>
                <path d="M 24,80 L 408,80" fill="none" stroke="black"/>
                <path d="M 112,112 L 192,112" fill="none" stroke="black"/>
                <path d="M 24,176 L 168,176" fill="none" stroke="black"/>
                <path d="M 24,224 L 288,224" fill="none" stroke="black"/>
                <path d="M 24,272 L 288,272" fill="none" stroke="black"/>
                <path d="M 128,304 L 192,304" fill="none" stroke="black"/>
                <path d="M 24,352 L 408,352" fill="none" stroke="black"/>
                <path d="M 256,368 L 448,368" fill="none" stroke="black"/>
                <path d="M 448,32 C 456.83064,32 464,39.16936 464,48" fill="none" stroke="black"/>
                <path d="M 192,112 C 200.83064,112 208,119.16936 208,128" fill="none" stroke="black"/>
                <path d="M 128,304 C 119.16936,304 112,296.83064 112,288" fill="none" stroke="black"/>
                <path d="M 192,304 C 200.83064,304 208,296.83064 208,288" fill="none" stroke="black"/>
                <path d="M 448,368 C 456.83064,368 464,360.83064 464,352" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="416,352 404,346.4 404,357.6" fill="black" transform="rotate(0,408,352)"/>
                <polygon class="arrowhead" points="296,224 284,218.4 284,229.6" fill="black" transform="rotate(0,288,224)"/>
                <polygon class="arrowhead" points="176,176 164,170.4 164,181.6" fill="black" transform="rotate(0,168,176)"/>
                <polygon class="arrowhead" points="32,272 20,266.4 20,277.6" fill="black" transform="rotate(180,24,272)"/>
                <polygon class="arrowhead" points="32,80 20,74.4 20,85.6" fill="black" transform="rotate(180,24,80)"/>
                <g class="text">
                  <text x="28" y="52">Client</text>
                  <text x="300" y="52">Issuer</text>
                  <text x="420" y="52">Origin</text>
                  <text x="24" y="68">|</text>
                  <text x="156" y="68">TokenChallenge</text>
                  <text x="164" y="132">Attester</text>
                  <text x="148" y="164">Attest</text>
                  <text x="204" y="212">TokenRequest</text>
                  <text x="208" y="244">|</text>
                  <text x="248" y="244">|</text>
                  <text x="208" y="260">TokenResponse</text>
                  <text x="160" y="340">Token</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
                                    +-------------------------.
      Client                        |   Issuer         Origin  |
        |         TokenChallenge    |                          |
        <-----------------------------------------------+      |
        |                           |                          |
        |          +----------.     |                          |
        |          |  Attester |    |                          |
        |          |           |    |                          |
        |          | Attest    |    |                          |
        +----------------->    |    |                          |
        |          |           |    |                          |
        |          |     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.
Moreover, any type of token challenge is suitable assuming there is more than
one Origin involved, since no single party will have access to the identifying
Client information and unique Origin information. If there is only a single
Origin, then per-Origin tokens are not appropriate in this model, since the
Attester can learn the redemption context. However, the Attester does not
learn whether a token 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 shown in the figure below. 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.</t>
        <figure anchor="fig-deploy-split">
          <name>Split Deployment Model</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="416" width="472" viewBox="0 0 472 416" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 24,96 L 24,256" fill="none" stroke="black"/>
                <path d="M 24,288 L 24,352" fill="none" stroke="black"/>
                <path d="M 112,112 L 112,168" fill="none" stroke="black"/>
                <path d="M 112,184 L 112,216" fill="none" stroke="black"/>
                <path d="M 112,232 L 112,264" fill="none" stroke="black"/>
                <path d="M 208,128 L 208,192" fill="none" stroke="black"/>
                <path d="M 248,160 L 248,192" fill="none" stroke="black"/>
                <path d="M 336,176 L 336,288" fill="none" stroke="black"/>
                <path d="M 368,32 L 368,72" fill="none" stroke="black"/>
                <path d="M 368,88 L 368,344" fill="none" stroke="black"/>
                <path d="M 464,48 L 464,368" fill="none" stroke="black"/>
                <path d="M 368,32 L 448,32" fill="none" stroke="black"/>
                <path d="M 24,80 L 408,80" fill="none" stroke="black"/>
                <path d="M 112,112 L 192,112" fill="none" stroke="black"/>
                <path d="M 248,160 L 320,160" fill="none" stroke="black"/>
                <path d="M 24,176 L 168,176" fill="none" stroke="black"/>
                <path d="M 24,224 L 288,224" fill="none" stroke="black"/>
                <path d="M 24,272 L 288,272" fill="none" stroke="black"/>
                <path d="M 128,304 L 192,304" fill="none" stroke="black"/>
                <path d="M 264,304 L 320,304" fill="none" stroke="black"/>
                <path d="M 24,352 L 408,352" fill="none" stroke="black"/>
                <path d="M 384,384 L 448,384" fill="none" stroke="black"/>
                <path d="M 448,32 C 456.83064,32 464,39.16936 464,48" fill="none" stroke="black"/>
                <path d="M 192,112 C 200.83064,112 208,119.16936 208,128" fill="none" stroke="black"/>
                <path d="M 320,160 C 328.83064,160 336,167.16936 336,176" fill="none" stroke="black"/>
                <path d="M 128,304 C 119.16936,304 112,296.83064 112,288" fill="none" stroke="black"/>
                <path d="M 192,304 C 200.83064,304 208,296.83064 208,288" fill="none" stroke="black"/>
                <path d="M 264,304 C 255.16936,304 248,296.83064 248,288" fill="none" stroke="black"/>
                <path d="M 320,304 C 328.83064,304 336,296.83064 336,288" fill="none" stroke="black"/>
                <path d="M 384,384 C 375.16936,384 368,376.83064 368,368" fill="none" stroke="black"/>
                <path d="M 448,384 C 456.83064,384 464,376.83064 464,368" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="416,352 404,346.4 404,357.6" fill="black" transform="rotate(0,408,352)"/>
                <polygon class="arrowhead" points="296,224 284,218.4 284,229.6" fill="black" transform="rotate(0,288,224)"/>
                <polygon class="arrowhead" points="176,176 164,170.4 164,181.6" fill="black" transform="rotate(0,168,176)"/>
                <polygon class="arrowhead" points="32,272 20,266.4 20,277.6" fill="black" transform="rotate(180,24,272)"/>
                <polygon class="arrowhead" points="32,80 20,74.4 20,85.6" fill="black" transform="rotate(180,24,80)"/>
                <g class="text">
                  <text x="28" y="52">Client</text>
                  <text x="420" y="52">Origin</text>
                  <text x="24" y="68">|</text>
                  <text x="220" y="68">TokenChallenge</text>
                  <text x="164" y="132">Attester</text>
                  <text x="148" y="164">Attest</text>
                  <text x="292" y="180">Issuer</text>
                  <text x="204" y="212">TokenRequest</text>
                  <text x="208" y="244">|</text>
                  <text x="248" y="244">|</text>
                  <text x="208" y="260">TokenResponse</text>
                  <text x="216" y="340">Token</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
                                                   +----------.
      Client                                       |   Origin  |
        |                 TokenChallenge           |           |
        <-----------------------------------------------+      |
        |                                          |           |
        |          +----------.                    |           |
        |          |  Attester |                   |           |
        |          |           |                   |           |
        |          | Attest    |    +---------.    |           |
        +----------------->    |    |  Issuer  |   |           |
        |          |           |    |          |   |           |
        |          |     TokenRequest          |   |           |
        +-------------------------------->     |   |           |
        |          |           |    |          |   |           |
        |          |     TokenResponse         |   |           |
        <--------------------------------+     |   |           |
        |          |           |    |          |   |           |
        |           `---------'      `--------'    |           |
        |                                          |           |
        |                     Token                |           |
        +----------------------------------------------->      |
                                                   |           |
                                                    `---------'
]]></artwork>
          </artset>
        </figure>
        <t>This is the most general deployment model, and is necessary for some
types of issuance protocols where the Attester plays a role in token
issuance; see <xref target="RATE-LIMITED"/> for one such type of issuance protocol.
In this model, the Attester, Issuer, and Origin have a separate view
of the Client: the Attester sees potentially sensitive Client identifying
information, such as account identifiers or IP addresses, the Issuer
sees only the information necessary for issuance, and the Origin sees
token challenges, corresponding tokens, and Client source information,
such as their IP address. As a result, attestation, 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. As in the
Joint Origin and Issuer model in <xref target="deploy-joint-origin"/>, if there is
only a single Origin, then per-Origin tokens are not appropriate.</t>
      </section>
    </section>
    <section anchor="centralization-considerations">
      <name>Centralization Considerations</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 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. Appliations 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 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 discused 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>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </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="Dingledine2004" 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="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="8" month="December" year="2022"/>
            <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-07"/>
        </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="Armando Faz-Hernandez" initials="A." surname="Faz-Hernandez">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Steven Valdez" initials="S." surname="Valdez">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="8" month="December" year="2022"/>
            <abstract>
              <t>   This document specifies two variants of the the two-message issuance
   protocol for Privacy Pass tokens: one that produces tokens that are
   privately verifiable 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-07"/>
        </reference>
        <reference anchor="RFC9334">
          <front>
            <title>Remote ATtestation procedureS (RATS) Architecture</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz">
              <organization/>
            </author>
            <author fullname="D. Thaler" initials="D." surname="Thaler">
              <organization/>
            </author>
            <author fullname="M. Richardson" initials="M." surname="Richardson">
              <organization/>
            </author>
            <author fullname="N. Smith" initials="N." surname="Smith">
              <organization/>
            </author>
            <author fullname="W. Pan" initials="W." surname="Pan">
              <organization/>
            </author>
            <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="KLOR20" target="http://dx.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>Internet Consolidation: What can Standards Efforts Do?</title>
            <author fullname="Mark Nottingham" initials="M." surname="Nottingham">
         </author>
            <date day="17" month="January" year="2023"/>
            <abstract>
              <t>   Despite the Internet being designed and operated as a decentralized
   network-of-networks, forces continuously emerge that encourage
   consolidation of power over its functions into few hands.

   This document offers a definition of consolidation and relates it to
   centralization, explains why they are undesirable, identifies forces
   that contribute to them, catalogues limitations of common approaches
   to decentralization, and explores what Internet standards efforts can
   do.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-nottingham-avoiding-internet-centralization-07"/>
        </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="24" month="October" year="2022"/>
            <abstract>
              <t>   This document describes the key consistency and correctness
   requirements of protocols such as Privacy Pass, Oblivious DoH, and
   Oblivious HTTP for user privacy.  It discusses several mechanisms and
   proposals for enabling user privacy in varying threat models.  In
   concludes with discussion of open problems in this area.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-key-consistency-00"/>
        </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+1965LcxpXm/3wKLPlDZLiqRFIe2+LYY7eblEWJt2W3xmFv
bIxRqKwuqFFAGQl0q9yin2WfZZ9szzUvAKq6m7JnYiOmQyF2VwF5OZl5zneu
OZ/PTVd2lX2ePTjf2Ox9W17lxT57nzuXnbTFpuxs0fWtfWDy5bK1V88PP2JW
TVHnW2hq1ebrbl7abj3f8dM7eHieRw/Pnz4xq7yzz00B/79o2v3zrKzXjTHl
rn2edW3vumdPnnz55Jm5tPvrpl09z17VnW1r281fYPvGuC6vV/+RV00Nfe6t
M7vyefa/uqaYZa5pu9auHfy23+Iv/9uYvO82TfvcZHOTwU9Zu+fZySJ7kV+V
K9fU9CGP/6SyP6SfN+3F8+z1q/f0R1F2MNrXpVvKt0XT1x3O4D1021/kFX1q
t3lZPc9yaGyxksa+fPa7C/x4UTTbZCDfLLJXe1tf5G00jm/yOk8+pmF8lbuu
2sddfN+Wv1vTp6N2Txc4xz82zSpq93TTlq5rdhvbJt9S86dV06/WVQ4Lip85
oKPtnmdPnzzNzpvr2tl6lZ11ESHO8jr7qs3ronRFk9LjuxrWGx+HNXZZs85O
trYtizwefJFf/25j811ZXyzLzi1ggY2pm3abd+UV7I8s+/DV6bOnT798DnsD
dkj0hWxF3Ikvf+hs7cqmfk5ty55O9urv2+bawYz9o/xk3l7g/DZdt3PPP//8
ouw2/RLp+Hm0dz8vNnlVwULY+ZI3s41aicYRqJcMJHycnfW7HWwTlwxucijL
qrlYFP5NGlP4c+6kIT1jcxooteS3euY3wtsF9FxV8GQtH49X+wWsQWVXZW3h
6P08mcCDc2gvQxZxZoumXs3/YGvbwko0dfauxv9/aHo4ng/oJTrZGTYyf/Kr
ZG4PdHLuql50Tbtrm++BIyxgMPjR5/K3+3xlXXlRw5x2tv0cHpzzB4tNt60e
TExyztP8sIhmkX4FFHiTdxt7rYfaf/MeaLO/si1/8fWrb7599jSdPa1VZ3Ej
w/Mv7PzVytZduS5hd5/AOPAPZGSr7HVzcQEDyPIuOyvg7D+YXNrWOovscLGO
thqcEWw/oiAwAKDis6dT85V/ZXnPFtnXfV5fHPw2ZiNT339j93mbb/3uGD/x
be821/lm+nvgM98ustfWTn/9Z/iub6a/A+q/aTawd201/QCwqA/5xaavYfWO
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
JI9/nzz5nRhz9EAtzP8Dqs4alsOpAAA=

-->

</rfc>
