<?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.25 (Ruby 3.1.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-privacypass-auth-scheme-09" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.16.0 -->
  <front>
    <title abbrev="Privacy Pass Authentication">The Privacy Pass HTTP Authentication Scheme</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-auth-scheme-09"/>
    <author initials="T." surname="Pauly" fullname="Tommy Pauly">
      <organization>Apple Inc.</organization>
      <address>
        <postal>
          <street>One Apple Park Way</street>
          <city>Cupertino, California 95014</city>
          <country>United States of America</country>
        </postal>
        <email>tpauly@apple.com</email>
      </address>
    </author>
    <author initials="S." surname="Valdez" fullname="Steven Valdez">
      <organization>Google LLC</organization>
      <address>
        <email>svaldez@chromium.org</email>
      </address>
    </author>
    <author initials="C. A." surname="Wood" fullname="Christopher A. Wood">
      <organization>Cloudflare</organization>
      <address>
        <email>caw@heapingbits.net</email>
      </address>
    </author>
    <date year="2023" month="March" day="06"/>
    <keyword>Internet-Draft</keyword>
    <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>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Privacy Pass tokens are unlinkable authenticators that can be used to
anonymously authorize a client (see
<xref target="ARCHITECTURE"/>).
Tokens are generated by token issuers, on the basis of authentication,
attestation, or some previous action such as solving a CAPTCHA. A client
possessing such a token is able to prove that it was able to get a token
issued, without allowing the relying party redeeming the client's token
(the origin) to link it with the issuance flow.</t>
      <t>Different types of authenticators, using different token issuance protocols,
can be used as Privacy Pass tokens.</t>
      <t>This document defines a common HTTP authentication scheme
(<xref section="11" sectionFormat="comma" target="RFC9110"/>), PrivateToken, that allows clients to redeem various
kinds of Privacy Pass tokens.</t>
      <t>Clients and relying parties (origins) interact using this scheme to perform the
token challenge and token redemption flow. In particular, origins challenge
clients for a token with an HTTP Authentication challenge (using the
WWW-Authenticate response header field). Clients then respond to that challenge
with an HTTP authentiation response (using the Authorization request header
field). Clients produce an authentication response based on the origin's token
challenge by running the token issuance protocol
<xref target="ISSUANCE"/>. The act of presenting a token in an
Authorization request header is referred to as token redemption. This
interaction between client and origin is shown below.</t>
      <figure anchor="fig-overview">
        <name>Challenge-response redemption protocol flow</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="160" width="568" viewBox="0 0 568 160" 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,112" fill="none" stroke="black"/>
              <path d="M 80,32 L 80,64" fill="none" stroke="black"/>
              <path d="M 328,32 L 328,64" fill="none" stroke="black"/>
              <path d="M 360,64 L 360,144" fill="none" stroke="black"/>
              <path d="M 400,32 L 400,64" fill="none" stroke="black"/>
              <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
              <path d="M 328,32 L 400,32" fill="none" stroke="black"/>
              <path d="M 8,64 L 80,64" fill="none" stroke="black"/>
              <path d="M 328,64 L 400,64" fill="none" stroke="black"/>
              <path d="M 40,96 L 56,96" fill="none" stroke="black"/>
              <path d="M 336,96 L 352,96" fill="none" stroke="black"/>
              <path d="M 40,128 L 96,128" fill="none" stroke="black"/>
              <path d="M 280,128 L 360,128" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="360,96 348,90.4 348,101.6" fill="black" transform="rotate(0,352,96)"/>
              <polygon class="arrowhead" points="48,128 36,122.4 36,133.6" fill="black" transform="rotate(180,40,128)"/>
              <g class="text">
                <text x="44" y="52">Origin</text>
                <text x="364" y="52">Client</text>
                <text x="136" y="100">WWW-Authenticate:</text>
                <text x="268" y="100">TokenChallenge</text>
                <text x="380" y="116">//</text>
                <text x="408" y="116">Run</text>
                <text x="460" y="116">issuance</text>
                <text x="532" y="116">protocol</text>
                <text x="164" y="132">Authorization:</text>
                <text x="248" y="132">Token</text>
                <text x="40" y="148">|</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+--------+                              +--------+
| Origin |                              | Client |
+---+----+                              +---+----+
    |                                       |
    +-- WWW-Authenticate: TokenChallenge -->|
    |                                       | // Run issuance protocol
    <------- Authorization: Token ----------+
    |                                       |
]]></artwork>
        </artset>
      </figure>
      <t>In addition to working with different token issuance protocols, this scheme
optionally supports use of tokens that are associated with origin-chosen
contexts and specific origin names. Relying parties that request and redeem
tokens can choose a specific kind of token, as appropriate for its use case.
These options allow for different deployment models to prevent double-spending,
and allow for both interactive (online challenges) and non-interactive
(pre-fetched) tokens.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <t>Unless otherwise specified, this document encodes protocol messages in TLS
notation from <xref target="TLS13"/>, Section 3.</t>
        <t>This document uses the terms "Client", "Origin", "Issuer", "Issuance Protocol",
and "Token" as defined in <xref target="ARCHITECTURE"/>. It additionally
uses the following terms in more specific ways:</t>
        <ul spacing="normal">
          <li>Issuer key: Keying material that can be used with an issuance protocol
to create a signed token.</li>
          <li>Token challenge: A requirement for tokens sent from an origin to a client,
using the "WWW-Authenticate" HTTP header field. This challenge is bound to a
specific token issuer and issuance protocol, and may be additionally bound to
a specific context or origin name.</li>
          <li>Token redemption: An action by which a client presents a token to an origin
in an HTTP request, using the "Authorization" HTTP header field.</li>
        </ul>
      </section>
    </section>
    <section anchor="challenge-redemption">
      <name>HTTP Authentication Scheme</name>
      <t>Token redemption is performed using HTTP Authentication
(<xref section="11" sectionFormat="comma" target="RFC9110"/>), with the scheme "PrivateToken". Origins challenge
clients to present a token from a specific issuer (<xref target="challenge"/>). Once a
client has received a token from that issuer, or already has a valid token
available, it presents the token to the origin (<xref target="redemption"/>).</t>
      <t>Unlike many authentication schemes in which a client will present the same
credentials across multiple requests, tokens used with the "PrivateToken"
scheme are single-use credentials, and are not reused. Spending the same token
value more than once allows the origin to link multiple transactions to the
same client. In deployment scenarios where origins send token challenges to
request tokens, origins ought to expect at most one request containing a token
from the client in reaction to a particular challenge.</t>
      <section anchor="challenge">
        <name>Token Challenge</name>
        <t>Origins send a token challenge to clients in an "WWW-Authenticate" header field
with the "PrivateToken" scheme. This challenge includes a TokenChallenge
message, along with information about what keys to use when requesting a token
from the issuer.</t>
        <t>Origins that support this authentication scheme need to handle the following
tasks:</t>
        <ol spacing="normal" type="1"><li>Select which issuer to use, and configure the issuer name and token-key to
include in WWW-Authenticate challenges.</li>
          <li>Determine a redemption context construction to include in the
TokenChallenge, as discussed in <xref target="context-construction"/>.</li>
          <li>Select the origin information to include in the TokenChallenge. This can
be empty to allow fully cross-origin tokens, a single origin name that
matches the origin itself, or a list of origin names containing the origin
itself.</li>
        </ol>
        <t>The TokenChallenge message has the following structure:</t>
        <artwork><![CDATA[
struct {
    uint16_t token_type;
    opaque issuer_name<1..2^16-1>;
    opaque redemption_context<0..32>;
    opaque origin_info<0..2^16-1>;
} TokenChallenge;
]]></artwork>
        <t>The structure fields are defined as follows:</t>
        <ul spacing="normal">
          <li>"token_type" is a 2-octet integer, in network byte order. This type indicates
the issuance protocol used to generate the token. Values are registered
in an IANA registry, <xref target="token-types"/>. Challenges with unsupported token_type
values MUST be ignored. This value determines the structure and semantics of
the rest of the structure.</li>
          <li>"issuer_name" is a string containing the name of the issuer. This is a
hostname that is used to identify the issuer that is allowed to issue
tokens that can be redeemed by this origin. The string is prefixed with a
2-octet integer indicating the length, in network byte order.</li>
          <li>"redemption_context" is an optional field. If present, it allows the origin
to require that clients fetch tokens bound to a specific context, as opposed
to reusing tokens that were fetched for other contexts. See
<xref target="context-construction"/> for example contexts that might be useful in practice.
When present, this value is a 32-byte context generated by the origin. Valid
lengths for this field are either 0 or 32 bytes. The field is prefixed with a
single octet indicating the length. Challenges with redemption_context values
of invalid lengths MUST be ignored.</li>
          <li>"origin_info" is an optional string containing one or more origin names,
which allows a token to be scoped to a specific set of origins. The string
is prefixed with a 2-octet integer indicating the length, in network byte
order. If empty, any non-origin-specific token can be redeemed. If the string
contains multiple origin names, they are delimited with commas "," without any
whitespace. If this field is not empty, the Origin MUST include its own name
as one of the names in the list.</li>
        </ul>
        <t>When used in an authentication challenge, the "PrivateToken" scheme uses the
following parameters:</t>
        <ul spacing="normal">
          <li>"challenge", which contains a base64url-encoded <xref target="RFC4648"/> TokenChallenge
 value. Since the length of the challenge is not fixed, the base64url value
 MUST include padding. As an Authentication Parameter (<tt>auth-param</tt> from
 <xref section="11.2" sectionFormat="comma" target="RFC9110"/>), the value can be either a token or a
 quoted-string, and might be required to be a quoted-string if the base64url
 string includes "=" characters. This challenge value MUST be unique for every
 401 HTTP response to prevent replay attacks. This parameter is required for
 all challenges.</li>
          <li>"token-key", which contains a base64url encoding of the public key for
use with the issuance protocol indicated by the challenge. Since the length of
the key is not fixed, the base64url value MUST include padding. As an
Authentication Parameter (<tt>auth-param</tt> from <xref section="11.2" sectionFormat="comma" target="RFC9110"/>), the
value can be either a token or a quoted-string, and might be required to be a
quoted-string if the base64url string includes "=" characters. This parameter
MAY be omitted in deployments where clients are able to retrieve the issuer key
using an out-of-band mechanism.</li>
          <li>"max-age", an optional parameter that consists of the number of seconds for
which the challenge will be accepted by the origin.</li>
        </ul>
        <t>Clients can ignore the challenge if the token-key is invalid or otherwise
untrusted.</t>
        <t>The header field MAY also include the standard "realm" parameter, if desired.
Issuance protocols MAY require other parameters. Clients SHOULD ignore unknown
parameters in challenges, except if otherwise specified by issuance protocols.</t>
        <t>As an example, the WWW-Authenticate header field could look like this:</t>
        <artwork><![CDATA[
WWW-Authenticate:
  PrivateToken challenge="abc...", token-key="123..."
]]></artwork>
        <t>Upon receipt of this challenge, a client uses the message and keys in the
issuance protocol indicated by the token_type. If the TokenChallenge has a
token_type the client does not recognize or support, it MUST NOT parse or
respond to the challenge. If the TokenChallenge contains a non-empty
origin_info field, the client MUST validate that the name of the origin
that issued the authentication challenge is included in the list of origin
names; if validation fails, the client MUST NOT process or respond to the
challenge. Clients MAY have further restrictions and requirements around
validating when a challenge is considered acceptable or valid. For example,
clients can choose to ignore challenges that list origin names for which
current connection is not authoritative (according to the TLS certificate).</t>
        <t>Caching and pre-fetching of tokens is discussed in <xref target="caching"/>.</t>
        <t>Note that it is possible for the WWW-Authenticate header field to include
multiple challenges. This allows the origin to indicate support for different
token types, issuers, or to include multiple redemption contexts. For example,
the WWW-Authenticate header field could look like this:</t>
        <artwork><![CDATA[
WWW-Authenticate:
  PrivateToken challenge="abc...", token-key="123...",
  PrivateToken challenge="def...", token-key="234..."
]]></artwork>
        <t>Origins should only include challenges for different types of issuance
protocols with functionally equivalent properties. For instance, both issuance
protocols in <xref target="ISSUANCE"/> have the same functional properties, albeit with
different mechanisms for verifying the resulting tokens during redemption.
Since clients are free to choose which challenge they want to consume when
presented with options, mixing multiple challenges with different functional
properties for one use case is nonsensical. If the origin has a preference
for one challenge over another (for example, if one uses a token type
that is faster to verify), it can sort it to be first in the list
of challenges as a hint to the client.</t>
        <section anchor="context-construction">
          <name>Redemption Context Construction</name>
          <t>The TokenChallenge redemption context allows the origin to determine the
context in which a given token can be redeemed. This value can be a unique
per-request nonce, constructed from 32 freshly generated random bytes. It
can also represent state or properties of the client session. Some example
properties and methods for constructing the corresponding context are below.
This list is not exhaustive.</t>
          <ul spacing="normal">
            <li>Context bound to a given time window: Construct redemption context as
SHA256(current time window).</li>
            <li>Context bound to a client location: Construct redemption context as
SHA256(client IP address prefix).</li>
            <li>Context bound to a given time window and location: Construct redemption
context as SHA256(current time window, client IP address prefix).</li>
          </ul>
          <t>An empty redemption context is not bound to any property of the client session.
Preventing double spending on tokens requires the origin to keep state
associated with the redemption context. The size of this state varies based on
the size of the redemption context. For example, double spend state for unique,
per-request redemption contexts does only needs to exist within the scope of
the request connection or session. In contrast, double spend state for empty
redemption contexts must be stored and shared across all requests until
token-key expiration or rotation.</t>
          <t>Origins that share redemption contexts, i.e., by using the same redemption
context, choosing the same issuer, and providing the same origin_info field in
the TokenChallenge, must necessarily share state required to enforce double
spend prevention. Origins should consider the operational complexity of this
shared state before choosing to share redemption contexts. Failure to
successfully synchronize this state and use it for double spend prevention can
allow Clients to redeem tokens to one Origin that were issued after an
interaction with another Origin that shares the context.</t>
        </section>
        <section anchor="caching">
          <name>Token Caching</name>
          <t>Clients can generate multiple tokens from a single TokenChallenge, and cache
them for future use. This improves privacy by separating the time of token
issuance from the time of token redemption, and also allows clients to avoid
any overhead of receiving new tokens via the issuance protocol.</t>
          <t>Cached tokens can only be redeemed when they match all of the fields in the
TokenChallenge: token_type, issuer_name, redemption_context, and origin_info.
Clients ought to store cached tokens based on all of these fields, to
avoid trying to redeem a token that does not match. Note that each token
has a unique client nonce, which is sent in token redemption (<xref target="redemption"/>).</t>
          <t>If a client fetches a batch of multiple tokens for future use that are bound
to a specific redemption context (the redemption_context in the TokenChallenge
was not empty), clients SHOULD discard these tokens upon flushing state such as
HTTP cookies <xref target="COOKIES"/>, or changing networks.
Using these tokens in a context that otherwise would not be linkable to the
original context could allow the origin to recognize a client.</t>
        </section>
      </section>
      <section anchor="redemption">
        <name>Token Redemption</name>
        <t>The output of the issuance protocol is a token that corresponds to the origin's
challenge (see <xref target="challenge"/>). A token is a structure that begins with a
two-octet field that indicates a token type, which MUST match the token_type in
the TokenChallenge structure.</t>
        <artwork><![CDATA[
struct {
    uint16_t token_type;
    uint8_t nonce[32];
    uint8_t challenge_digest[32];
    uint8_t token_key_id[Nid];
    uint8_t authenticator[Nk];
} Token;
]]></artwork>
        <t>The structure fields are defined as follows:</t>
        <ul spacing="normal">
          <li>"token_type" is a 2-octet integer, in network byte order. This value must
match the value in the challenge (<xref target="challenge"/>). This value determines the
structure and semantics of the rest of the structure.</li>
          <li>"nonce" is a 32-octet message containing a client-generated random
nonce.</li>
          <li>"challenge_digest" is a 32-octet message containing the hash of the
original TokenChallenge, SHA256(TokenChallenge).</li>
          <li>"token_key_id" is an Nid-octet identifier for the the token authentication
key. The value of this field is defined by the token_type and corresponding
issuance protocol.</li>
          <li>"authenticator" is a Nk-octet authenticator that covers the preceding fields
in the token. The value of this field is defined by the token_type and
corresponding issuance protocol. The value of constant Nk depends on
token_type, as defined in <xref target="token-types"/>.</li>
        </ul>
        <t>The authenticator value in the Token structure is computed over the token_type,
nonce, challenge_digest, and token_key_id fields.</t>
        <t>When used for client authorization, the "PrivateToken" authentication
scheme defines one parameter, "token", which contains the base64url-encoded
Token struct. Since the length of the Token struct is not fixed, the base64url
value MUST include padding. As an Authentication Parameter (<tt>auth-param</tt> from
<xref section="11.2" sectionFormat="comma" target="RFC9110"/>), the value can be either a token or a
quoted-string, and might be required to be a quoted-string if the base64url
string includes "=" characters. All unknown or unsupported parameters to
"PrivateToken" authentication credentials MUST be ignored.</t>
        <t>Clients present this Token structure to origins in a new HTTP request using
the Authorization header field as follows:</t>
        <artwork><![CDATA[
Authorization: PrivateToken token="abc..."
]]></artwork>
        <t>For token types that support public verifiability, origins verify the token
authenticator using the public key of the issuer, and validate that the signed
message matches the concatenation of the client nonce and the hash of a
valid TokenChallenge. For context-bound tokens, origins store or reconstruct
the contexts of previous TokenChallenge structures in order to validate the
token. A TokenChallenge MAY be bound to a specific TLS session with a client,
but origins can also accept tokens for valid challenges in new sessions.
Origins SHOULD implement some form of double-spend prevention that prevents
a token with the same nonce from being redeemed twice. This prevents clients
from "replaying" tokens for previous challenges. For context-bound tokens,
this double-spend prevention can require no state or minimal state, since
the context can be used to verify token uniqueness.</t>
        <t>If a client is unable to fetch a token, it MUST react to the challenge as
if it could not produce a valid Authorization response.</t>
      </section>
    </section>
    <section anchor="user-interaction">
      <name>User Interaction</name>
      <t>When used in contexts like websites, origins that challenge clients for
tokens need to consider how to optimize their interaction model to ensure a
good user experience.</t>
      <t>Tokens challenges can be performed without explicit user involvement, depending
on the issuance protocol. If tokens are scoped to a specific origin,
there is no need for per-challenge user interaction. Note that the issuance
protocol may separately involve user interaction if the client needs to be
newly validated.</t>
      <t>If a client cannot use cached tokens to respond to a challenge (either because
it has run out of cached tokens or the associated context is unique), the token
issuance process can add user-perceivable latency. Origins need not block
useful work on token authentication. Instead, token authentication can be used
in similar ways to CAPTCHA validation today, but without the need for user
interaction. If issuance is taking a long time, a website could show an
indicator that it is waiting, or fall back to another method of user
validation.</t>
      <t>An origin MUST NOT use more than one redemption context value for a given token
type and issuer per client request. If an origin issues a large number of
challenges with unique contexts, such as more than once for each request, this
can indicate that the origin is either not functioning correctly or is trying
to attack or overload the client or issuance server. In such cases, a client
MUST ignore redundant token challenges for the same request and SHOULD alert
the user if possible.</t>
      <t>Origins MAY include multiple challenges, where each challenge refers to a
different issuer or a different token type, to allow clients to choose a
preferred issuer or type.</t>
      <t>An origin MUST NOT assume that token challenges will always yield a valid
token. Clients might experience issues running the issuance protocol, e.g.,
because the attester or issuer is unavailable, or clients might simply not
support the requested token type. Origins SHOULD account for such operational
or interoperability failures by offering clients an alternative type of
challenge such as CAPTCHA for accessing a resource.</t>
      <t>For example, consider a scenario in which the client is a web browser, and the
origin can accept either a token or a solution to a puzzle intended to
determine if the client is a real human user. The origin would send clients a
401 HTTP response that contains a token challenge in a "WWW-Authenticate"
header field along with content that contains the puzzle to display to the
user. Clients that are able to respond with a token will be able to
automatically return the token and not show the puzzle, while clients that
either do not support tokens or are unable to fetch tokens at a particular
time can present the user with the puzzle.</t>
      <t>To mitigate the risk of deployments becoming dependent on tokens, clients and
servers SHOULD grease their behavior unless explicitly configured not to. In
particular, clients SHOULD ignore token challenges with some non-zero
probability. Likewise, origins SHOULD randomly choose to not challenge clients
for tokens with some non-zero probability. Moreover, origins SHOULD include
random token types, from the Reserved list of "greased" types (defined in
<xref target="token-types"/>), with some non-zero probability.</t>
    </section>
    <section anchor="sec-considerations">
      <name>Security Considerations</name>
      <t>The security properties of token challenges vary depending on whether the
challenge contains a redemption context or not, as well as whether the
challenge is per-origin or not. For example, cross-origin tokens with empty
contexts can be replayed from one party by another, as shown below.</t>
      <figure anchor="fig-replay">
        <name>Token Architectural Components</name>
        <artwork><![CDATA[
 Client          Attacker                  Origin
                       <------ TokenChallenge \
   <--- TokenChallenge                        |
    Token ---------->                         |
                       Token ---------------> /
]]></artwork>
      </figure>
      <t>Moreover, when a Client holds cross-origin tokens with empty contexts, it
is possible for any Origin in the cross-origin set to deplete that Client
set of tokens. To prevent this from happening, tokens can be scoped to single
Origins (with non-empty origin_info) such that they can only be redeemed for
a single Origin. Alternatively, if tokens are cross-Origin, Clients can use
alternate methods to prevent many tokens from being redeemed at once. For
example, if the Origin requests an excess of tokens, the Client could choose to
not present any tokens for verification if a redemption had already
occurred in a given time window.</t>
      <t>Token challenges that include non-empty origin_info bind tokens to one or more
specific origins. As described in <xref target="challenge"/>, clients only accept such
challenges from origin names listed in the origin_info string. Even if multiple
origins are listed, a token can only be redeemed for an origin if the challenge
has an exact match for the origin_info. For example, if "a.example.com" issues
a challenge with an origin_info string of "a.example.com,b.example.com", a
client could redeem a token fetched for this challenge if and only if
"b.example.com" also included an origin_info string of
"a.example.com,b.example.com". On the other hand, if "b.example.com" had an
origin_info string of "b.example.com" or "b.example.com,a.example.com" or
"a.example.com,b.example.com,c.example.com", the string would not match and the
client would need to use a different token.</t>
      <t>Context-bound token challenges require clients to obtain matching tokens when
challenged, rather than presenting a token that was obtained from a different
context in the past. This can make it more likely that issuance and redemption
events will occur at approximately the same time. For example, if a client is
challenged for a token with a unique context at time T1 and then subsequently
obtains a token at time T2, a colluding issuer and origin can link this to the
same client if T2 is unique to the client. This linkability is less feasible as
the number of issuance events at time T2 increases. Depending on the "max-age"
token challenge parameter, clients MAY try to augment the time between getting
challenged then redeeming a token so as to make this sort of linkability more
difficult. For more discussion on correlation risks between token issuance and
redemption, see <xref target="ARCHITECTURE"/>.</t>
      <t>As discussed in <xref target="challenge"/>, clients SHOULD discard any context-bound tokens
upon flushing cookies or changing networks, to prevent an origin using the
redemption context state as a cookie to recognize clients.</t>
      <t>Applications SHOULD constrain tokens to a single origin unless the use case can
accommodate such replay attacks. Replays are also possible if the client
redeems a token sent as part of 0-RTT data. If successful token redemption
produces side effects, origins SHOULD implement an anti-replay mechanism to
mitigate the harm of such replays. See <xref section="8" sectionFormat="comma" target="RFC8446"/> and
<xref section="9.2" sectionFormat="comma" target="RFC9001"/> for details about anti-replay mechanisms, as well as
<xref section="3" sectionFormat="comma" target="RFC8470"/> for discussion about safety considerations for 0-RTT
HTTP data.</t>
      <t>All random values in the challenge and token MUST be generated using a
cryptographically secure source of randomness.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <section anchor="authentication-scheme">
        <name>Authentication Scheme</name>
        <t>This document registers the "PrivateToken" authentication scheme in the
"Hypertext Transfer Protocol (HTTP) Authentication Scheme Registry" defined
in <xref section="16.4" sectionFormat="comma" target="RFC9110"/>.</t>
        <t>Authentication Scheme Name: PrivateToken</t>
        <t>Pointer to specification text: <xref target="challenge-redemption"/> of this document</t>
      </section>
      <section anchor="token-types">
        <name>Token Type Registry</name>
        <t>IANA is requested to create a new "Privacy Pass Token Type" registry in a new
"Privacy Pass Parameters" page to list identifiers for issuance protocols
defined for use with the Privacy Pass token authentication scheme. These
identifiers are two-byte values, so the maximum possible value is
0xFFFF = 65535.</t>
        <t>Template:</t>
        <ul spacing="normal">
          <li>Value: The two-byte identifier for the algorithm</li>
          <li>Name: Name of the issuance protocol</li>
          <li>Token Structure: The contents of the Token structure</li>
          <li>TokenChallenge Structure: The contents of the TokenChallenge structure</li>
          <li>Publicly Verifiable: A Y/N value indicating if the output tokens are
publicly verifiable</li>
          <li>Public Metadata: A Y/N value indicating if the output tokens can contain
public metadata.</li>
          <li>Private Metadata: A Y/N value indicating if the output tokens can contain
private metadata.</li>
          <li>Nk: The length in bytes of an output authenticator</li>
          <li>Nid: The length of the token key identifier</li>
          <li>Reference: Where this algorithm is defined</li>
          <li>Notes: Any notes associated with the entry</li>
        </ul>
        <t>New entries in this registry are subject to the Specification Required
registration policy (<xref section="4.6" sectionFormat="comma" target="RFC8126"/>). Designated experts need to
ensure that the token type is sufficiently clearly defined to be used for both
token issuance and redemption, and meets the common security and privacy
requirements for issuance protocols defined in <xref section="3.2" sectionFormat="of" target="ARCHITECTURE"/>.</t>
        <t>This registry also will also allow provisional registrations to allow for
experimentation with protocols being developed. Designated experts review,
approve, and revoke provisional registrations.</t>
        <t>Values 0xFF00-0xFFFF are reserved for private use, to enable proprietary uses
and limited experimentation.</t>
        <t>This document defines several Reserved values, which can be used by clients
and servers to send "greased" values in token challenges and responses to
ensure that implementations remain able to handle unknown token types
gracefully (this technique is inspired by <xref target="RFC8701"/>). Implemenations SHOULD
select reserved values at random when including them in greased messages.
Servers can include these in TokenChallenge structures, either as the only
challenge when no real token type is desired, or as one challenge in a list of
challenges that include real values. Clients can include these in Token
structures when they are not able to present a real token response. The
contents of the Token structure SHOULD be filled with random bytes when
using greased values.</t>
        <t>The initial contents for this registry consist of the following Values.
For each Value, the Name is "RESERVED", the Publicly Verifiable, Public
Metadata, Private Metadata, Nk, and Nid attributes are all assigned "N/A",
the Reference is this document, and the Notes attribute is "None". The
iniital list of Values is as follows:</t>
        <ul spacing="normal">
          <li>0x0000</li>
          <li>0x02AA</li>
          <li>0x1132</li>
          <li>0x2E96</li>
          <li>0x3CD3</li>
          <li>0x4473</li>
          <li>0x5A63</li>
          <li>0x6D32</li>
          <li>0x7F3F</li>
          <li>0x8D07</li>
          <li>0x916B</li>
          <li>0xA6A4</li>
          <li>0xBEAB</li>
          <li>0xC3F3</li>
          <li>0xDA42</li>
          <li>0xE944</li>
          <li>0xF057</li>
        </ul>
        <t>Additionally, the registry is to be initialized with the following entry
for Private Use.</t>
        <ul spacing="normal">
          <li>Value: 0xFF00-0xFFFF</li>
          <li>Name: Private Use</li>
          <li>Token Structure: As defined in <xref target="redemption"/></li>
          <li>TokenChallenge Structure: As defined in <xref target="challenge"/></li>
          <li>Publicly Verifiable: N/A</li>
          <li>Public Metadata: N/A</li>
          <li>Private Metadata: N/A</li>
          <li>Nk: N/A</li>
          <li>Nid: N/A</li>
          <li>Reference: This document</li>
          <li>Notes: None</li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes. </t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="TLS13">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson">
              <organization/>
            </author>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes.  It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton">
              <organization/>
            </author>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <author fullname="T. Narten" initials="T." surname="Narten">
              <organization/>
            </author>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters.  To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper.  For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed.  This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="ARCHITECTURE">
          <front>
            <title>The Privacy Pass Architecture</title>
            <author fullname="Alex Davidson" initials="A." surname="Davidson">
              <organization>LIP</organization>
            </author>
            <author fullname="Jana Iyengar" initials="J." surname="Iyengar">
              <organization>Fastly</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="30" month="January" year="2023"/>
            <abstract>
              <t>   This document specifies the Privacy Pass architecture and
   requirements for its constituent protocols used for constructing
   privacy-preserving authentication mechanisms.  It provides
   recommendations on how the architecture should be deployed to ensure
   the privacy of clients and the security of all participating
   entities.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-architecture-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="30" month="January" 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-08"/>
        </reference>
        <reference anchor="COOKIES">
          <front>
            <title>Cookies: HTTP State Management Mechanism</title>
            <author fullname="Steven Bingler" initials="S." surname="Bingler">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Mike West" initials="M." surname="West">
              <organization>Google LLC</organization>
            </author>
            <author fullname="John Wilander" initials="J." surname="Wilander">
              <organization>Apple, Inc</organization>
            </author>
            <date day="7" month="November" year="2022"/>
            <abstract>
              <t>   This document defines the HTTP Cookie and Set-Cookie header fields.
   These header fields can be used by HTTP servers to store state
   (called cookies) at HTTP user agents, letting the servers maintain a
   stateful session over the mostly stateless HTTP protocol.  Although
   cookies have many historical infelicities that degrade their security
   and privacy, the Cookie and Set-Cookie header fields are widely used
   on the Internet.  This document obsoletes RFC 6265.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-rfc6265bis-11"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC9001">
          <front>
            <title>Using TLS to Secure QUIC</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <author fullname="S. Turner" initials="S." role="editor" surname="Turner">
              <organization/>
            </author>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes how Transport Layer Security (TLS) is used to secure QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9001"/>
          <seriesInfo name="DOI" value="10.17487/RFC9001"/>
        </reference>
        <reference anchor="RFC8470">
          <front>
            <title>Using Early Data in HTTP</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <author fullname="W. Tarreau" initials="W." surname="Tarreau">
              <organization/>
            </author>
            <date month="September" year="2018"/>
            <abstract>
              <t>Using TLS early data creates an exposure to the possibility of a replay attack.  This document defines mechanisms that allow clients to communicate with servers about HTTP requests that are sent in early data.  Techniques are described that use these mechanisms to mitigate the risk of replay.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8470"/>
          <seriesInfo name="DOI" value="10.17487/RFC8470"/>
        </reference>
        <reference anchor="RFC8701">
          <front>
            <title>Applying Generate Random Extensions And Sustain Extensibility (GREASE) to TLS Extensibility</title>
            <author fullname="D. Benjamin" initials="D." surname="Benjamin">
              <organization/>
            </author>
            <date month="January" year="2020"/>
            <abstract>
              <t>This document describes GREASE (Generate Random Extensions And Sustain Extensibility), a mechanism to prevent extensibility failures in the TLS ecosystem. It reserves a set of TLS protocol values that may be advertised to ensure peers correctly handle unknown values.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8701"/>
          <seriesInfo name="DOI" value="10.17487/RFC8701"/>
        </reference>
      </references>
    </references>
    <section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>This section includes test vectors for the challenge and redemption
functionalities described in <xref target="challenge"/> and <xref target="redemption"/>. Each test vector
lists the following values:</t>
      <ul spacing="normal">
        <li>token_type: The type of token issuance protocol, a value from
<xref target="token-types"/>. For these test vectors, token_type is 0x0002, corresponding
to the issuance protocol in <xref target="ISSUANCE"/>.</li>
        <li>issuer_name: The name of the issuer in the TokenChallenge structure,
represented as a hexadecimal string.</li>
        <li>redemption_context: The redemption context in the TokenChallenge structure,
represented as a hexadecimal string.</li>
        <li>origin_info: The origin info in the TokenChallenge structure, represented as
a hexadecimal string.</li>
        <li>nonce: The nonce in the Token structure, represented as a hexadecimal string.</li>
        <li>token_key: The public token-key, encoded based on the corresponding token
type, represented as a hexadecimal string.</li>
        <li>token_authenticator_input: The values in the Token structure used to compute
the Token authenticator value, represented as a hexadecimal string.</li>
        <li>token_authenticator: The output Token authenticator which verifies under
token_key, represented as a hexadecimal string.</li>
      </ul>
      <t>Test vectors are provided for each of the following TokenChallenge
configurations:</t>
      <ul spacing="normal">
        <li>TokenChallenge with a single origin and non-empty redemption context</li>
        <li>TokenChallenge with a single origin and empty redemption context</li>
        <li>TokenChallenge with an empty origin and redemption context</li>
        <li>TokenChallenge with an empty origin and non-empty redemption context</li>
        <li>TokenChallenge with a multiple origins and non-empty redemption context</li>
      </ul>
      <t>These test vectors are below.</t>
      <artwork><![CDATA[
token_type: 2
issuer_name: 6973737565722e6578616d706c65
redemption_context:
9d262778b3dc2be365d667b03f9cca99efd049e76eb53a6de37120ca34da373b
origin_info: 6f726967696e2e6578616d706c65
nonce:
86ed4bb9f76ab1107a05a9af4aa4eec84dd02f390f9bf5ef14730e0ee15aa92d
token_key_id:
f861220ad4241ee0e33eb4a486a32f05af05ee33fcfdd1104c665eb827c20621
token_authenticator_input: 000286ed4bb9f76ab1107a05a9af4aa4eec84d
d02f390f9bf5ef14730e0ee15aa92df099ea46d6c892cdbc8513586fa8518a6d6
3f28fe4da6f8ddd2a46a405c14488f861220ad4241ee0e33eb4a486a32f05af05
ee33fcfdd1104c665eb827c20621

token_type: 2
issuer_name: 6973737565722e6578616d706c65
redemption_context:
origin_info: 6f726967696e2e6578616d706c65
nonce:
86ed4bb9f76ab1107a05a9af4aa4eec84dd02f390f9bf5ef14730e0ee15aa92d
token_key_id:
f861220ad4241ee0e33eb4a486a32f05af05ee33fcfdd1104c665eb827c20621
token_authenticator_input: 000286ed4bb9f76ab1107a05a9af4aa4eec84d
d02f390f9bf5ef14730e0ee15aa92d11e15c91a7c2ad02abd66645802373db1d8
23bea80f08d452541fb2b62b5898bf861220ad4241ee0e33eb4a486a32f05af05
ee33fcfdd1104c665eb827c20621

token_type: 2
issuer_name: 6973737565722e6578616d706c65
redemption_context:
origin_info:
nonce:
86ed4bb9f76ab1107a05a9af4aa4eec84dd02f390f9bf5ef14730e0ee15aa92d
token_key_id:
f861220ad4241ee0e33eb4a486a32f05af05ee33fcfdd1104c665eb827c20621
token_authenticator_input: 000286ed4bb9f76ab1107a05a9af4aa4eec84d
d02f390f9bf5ef14730e0ee15aa92db741ec1b6fd05f1e95f8982906aec161289
6d9ca97d53eef94ad3c9fe023f7a4f861220ad4241ee0e33eb4a486a32f05af05
ee33fcfdd1104c665eb827c20621

token_type: 2
issuer_name: 6973737565722e6578616d706c65
redemption_context:
9d262778b3dc2be365d667b03f9cca99efd049e76eb53a6de37120ca34da373b
origin_info:
nonce:
86ed4bb9f76ab1107a05a9af4aa4eec84dd02f390f9bf5ef14730e0ee15aa92d
token_key_id:
f861220ad4241ee0e33eb4a486a32f05af05ee33fcfdd1104c665eb827c20621
token_authenticator_input: 000286ed4bb9f76ab1107a05a9af4aa4eec84d
d02f390f9bf5ef14730e0ee15aa92dda5366799e0facc5cf9ea3dfc4a6f57072c
31fff84e7331919ebdb06445b2c50f861220ad4241ee0e33eb4a486a32f05af05
ee33fcfdd1104c665eb827c20621

token_type: 2
issuer_name: 6973737565722e6578616d706c65
redemption_context:
9d262778b3dc2be365d667b03f9cca99efd049e76eb53a6de37120ca34da373b
origin_info:
6f726967696e2e6578616d706c652c6f726967696e322e6578616d706c65
nonce:
86ed4bb9f76ab1107a05a9af4aa4eec84dd02f390f9bf5ef14730e0ee15aa92d
token_key_id:
f861220ad4241ee0e33eb4a486a32f05af05ee33fcfdd1104c665eb827c20621
token_authenticator_input: 000286ed4bb9f76ab1107a05a9af4aa4eec84d
d02f390f9bf5ef14730e0ee15aa92df7eeba1bd7c550a8184bee32ce66e6fb527
17aa67da7e0ca32f4cdca9dec7130f861220ad4241ee0e33eb4a486a32f05af05
ee33fcfdd1104c665eb827c20621
]]></artwork>
    </section>
  </back>
  <!-- ##markdown-source:
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
562DAAA=

-->

</rfc>
