<?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.35 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-privacypass-architecture-13" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.3 -->
  <front>
    <title abbrev="Privacy Pass Architecture">The Privacy Pass Architecture</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-architecture-13"/>
    <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="June" day="15"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 84?>

<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>
    <?line 92?>

<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 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 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.
<?line -6?>
      </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.</t>
        </dd>
        <dt>Origin:</dt>
        <dd>
          <t>An entity that redeems tokens presented by Clients.</t>
        </dd>
        <dt>Issuer:</dt>
        <dd>
          <t>An entity that issues tokens to Clients for properties
attested to by the Attester.</t>
        </dd>
        <dt>Attester:</dt>
        <dd>
          <t>An entity that attests to properties of Clients for the
purposes of token issuance.</t>
        </dd>
        <dt>Attestation procedure:</dt>
        <dd>
          <t>The procedure by which an Attester determines whether or not a Client
is trusted with a specific set of properties for token issuance.</t>
        </dd>
      </dl>
    </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.</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.  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">
                <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="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 vailidity 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.</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. 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>By ensuring that different contexts cannot be linked in this way, 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 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="DMS2004"/> 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-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">
                <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 Client 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.</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 <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.</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>In general, each attestation procedure 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 supported
attestation procedures helps minimize the amount of information leaked through
a token.</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.
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. 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>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">
                <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 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 <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">
                <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">
                <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,40 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 272,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 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; 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 viability
of an open Web, and (2) centralization. This section describes considerations
relevant to these topics.</t>
      <section anchor="discriminatory-treatment">
        <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. This could lead to harmful ecosystem
effects if left unresolved.</t>
        <t>In principle, Issuers should strive to work with a set of Attesters that are
suitable for all Clients, thereby mitigating such discriminatory behavior.
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. 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 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="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="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="May" 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-10"/>
        </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="6" month="March" 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-10"/>
        </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="KLOR20">
          <front>
            <title>Anonymous Tokens with Private Metadata Bit</title>
            <author fullname="Ben Kreuter" initials="B." surname="Kreuter">
              <organization/>
            </author>
            <author fullname="Tancrède Lepoint" initials="T." surname="Lepoint">
              <organization/>
            </author>
            <author fullname="Michele Orrù" initials="M." surname="Orrù">
              <organization/>
            </author>
            <author fullname="Mariana Raykova" initials="M." surname="Raykova">
              <organization/>
            </author>
            <date year="2020"/>
          </front>
          <seriesInfo name="Advances in Cryptology - CRYPTO 2020" value="pp. 308-336"/>
          <seriesInfo name="DOI" value="10.1007/978-3-030-56784-2_11"/>
        </reference>
        <reference anchor="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="30" month="May" 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-10"/>
        </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>
    <?line 1050?>

<section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors would like to thank Eric Kinnear, Scott Hendrickson, Tommy Pauly,
Christopher Patton, Benjamin Schwartz, Martin Thomson, Steven Valdez and other
contributors of the Privacy Pass Working Group for many helpful contributions
to this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
c/8fvOg1NO3WAAA=

-->

</rfc>
