<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.11 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-privacypass-auth-scheme-11" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.10 -->
  <front>
    <title abbrev="Privacy Pass Authentication">The Privacy Pass HTTP Authentication Scheme</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-auth-scheme-11"/>
    <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="June" day="23"/>
    <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, one-time-use 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>
      <t>Origins SHOULD minimize the number of challenges sent on a particular client
session, such as a unique TLS session between a client and origin
(referred to as the "redemption context" in <xref target="ARCHITECTURE"/>). Clients can
have implementation-specific policy to minimize the number of tokens that
can be retrieved by origins, so origins are advised to only request tokens
when necessary within a single session. See <xref target="interaction"/> for more discussion
on how to optimize token challenges to improve the user experience.</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>All token challenges MUST begin with a 2-octet integer that defines the
token type, in network byte order. This type indicates the issuance protocol
used to generate the token and determines the structure and semantics of the rest of
the structure. Values are registered in an IANA registry, <xref target="token-types"/>. Client MUST
ignore challenges with token_types they do not support.</t>
        <t>This document defines the default challenge structure that can be used across
token types, although future token types MAY extend or modify the structure
of the challenge; see <xref target="token-types"/> for the registry information
which establishes and defines the relationship between "token_type" and the
contents of the TokenChallenge message.</t>
        <t>Even when a given token type uses the default challenge, structure,
the requirements on the presence or interpretation of the fields can differ
across token types. For example, some token types might require that "origin_info"
is non-empty, while others allow it to be empty.</t>
        <t>The default 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, as described
above.</li>
          <li>"issuer_name" is an ASCII string that identifies the issuer using the format of the authority portion of a URI
as defined in <xref section="3.2" sectionFormat="of" target="URI"/>. This name identifies the issuer that is allowed to
issue tokens that can be redeemed by this origin. The field that stores this string in the challenge
is prefixed with a 2-octet integer indicating the length, in network byte order.</li>
          <li>"redemption_context" is a field that is either 0 or 32 bytes, prefixed with a single
octet indicating the length (either 0 or 32). If value is non-empty, it is a 32-byte value
generated by the origin that 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. Challenges with redemption_context values of invalid lengths MUST be ignored.</li>
          <li>"origin_info" is an ASCII string that is either empty, or contains one or more
origin names that allow a token to be scoped to a specific set of origins. Each
origin name uses the format of the authority portion of a URI as defined in
<xref section="3.2" sectionFormat="of" target="URI"/>. 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 MAY ignore the challenge, e.g., because 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 validates the TokenChallenge before
responding to it. Validation requirements are as follows:</t>
        <ul spacing="normal">
          <li>The token_type is recognized and supported by the client;</li>
          <li>The TokenChallenge structure is well-formed; and</li>
          <li>If the origin_info field is non-empty, the name of the origin that issued the
authentication challenge is included in the list of origin names.</li>
        </ul>
        <t>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. This value determines the structure and semantics
of the rest of token structure.</t>
        <t>This document defines the default token structure that can be used across
token types, although future token types MAY extend or modify the structure
of the token; see <xref target="token-types"/> for the registry information which
establishes and defines the relationship between "token_type" and the contents
of the Token structure.</t>
        <t>The default Token message has the following 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, as described
above.</li>
          <li>"nonce" is a 32-octet value containing a client-generated random nonce.</li>
          <li>"challenge_digest" is a 32-octet value 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="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>Replay attack example</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="160" width="624" viewBox="0 0 624 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,128" fill="none" stroke="black"/>
              <path d="M 80,32 L 80,64" fill="none" stroke="black"/>
              <path d="M 312,32 L 312,64" fill="none" stroke="black"/>
              <path d="M 360,64 L 360,112" fill="none" stroke="black"/>
              <path d="M 400,32 L 400,64" fill="none" stroke="black"/>
              <path d="M 544,32 L 544,64" fill="none" stroke="black"/>
              <path d="M 576,64 L 576,96" fill="none" stroke="black"/>
              <path d="M 616,32 L 616,64" fill="none" stroke="black"/>
              <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
              <path d="M 312,32 L 400,32" fill="none" stroke="black"/>
              <path d="M 544,32 L 616,32" fill="none" stroke="black"/>
              <path d="M 8,64 L 80,64" fill="none" stroke="black"/>
              <path d="M 312,64 L 400,64" fill="none" stroke="black"/>
              <path d="M 544,64 L 616,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 360,112 L 384,112" fill="none" stroke="black"/>
              <path d="M 552,112 L 576,112" fill="none" stroke="black"/>
              <path d="M 360,128 L 376,128" fill="none" stroke="black"/>
              <path d="M 560,128 L 576,128" fill="none" stroke="black"/>
              <path d="M 40,144 L 128,144" fill="none" stroke="black"/>
              <path d="M 264,144 L 360,144" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="584,112 572,106.4 572,117.6" fill="black" transform="rotate(0,576,112)"/>
              <polygon class="arrowhead" points="368,128 356,122.4 356,133.6" fill="black" transform="rotate(180,360,128)"/>
              <polygon class="arrowhead" points="360,96 348,90.4 348,101.6" fill="black" transform="rotate(0,352,96)"/>
              <polygon class="arrowhead" points="48,144 36,138.4 36,149.6" fill="black" transform="rotate(180,40,144)"/>
              <g class="text">
                <text x="44" y="52">Origin</text>
                <text x="356" y="52">Attacker</text>
                <text x="580" y="52">Client</text>
                <text x="136" y="100">WWW-Authenticate:</text>
                <text x="268" y="100">TokenChallenge</text>
                <text x="424" y="116">(replay</text>
                <text x="500" y="116">challenge)</text>
                <text x="444" y="132">Authorization:</text>
                <text x="528" y="132">Token</text>
                <text x="168" y="148">(replay</text>
                <text x="228" y="148">token)</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+--------+                            +----------+                 +--------+
| Origin |                            | Attacker |                 | Client |
+---+----+                            +-----+----+                 +---+----+
    |                                       |                          |
    +-- WWW-Authenticate: TokenChallenge -->|                          |
    |                                       +--- (replay challenge) --->
    |                                       <-- Authorization: Token --+
    <----------- (replay token) ------------+
]]></artwork>
        </artset>
      </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="TLS13"/> 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 in <xref target="redemption"/></li>
          <li>TokenChallenge Structure: The contents of the TokenChallenge structure in <xref target="challenge"/></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: The contents of the Token structure in <xref target="redemption"/></li>
          <li>TokenChallenge Structure: The contents of the TokenChallenge structure 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>
        <t><xref target="ISSUANCE"/> defines other non-grease entries for this registry.</t>
      </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="URI">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee">
              <organization/>
            </author>
            <author fullname="R. Fielding" initials="R." surname="Fielding">
              <organization/>
            </author>
            <author fullname="L. Masinter" initials="L." surname="Masinter">
              <organization/>
            </author>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource.  This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet.  The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier.  This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </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="15" month="June" 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-13"/>
        </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="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="10" month="May" year="2023"/>
            <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-12"/>
        </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 HTTP authentication scheme specified
in this document. It consists of the following types of test vectors:</t>
      <ol spacing="normal" type="1"><li>Test vectors for the challenge and redemption protocols. Implementations can
use these test vectors for verifying code that builds and encodes
TokenChallenge structures, as well as code that produces a well-formed Token
bound to a TokenChallenge.</li>
        <li>Test vectors for the HTTP headers used for authentication. Implementations
can use these test vectors for validating whether they parse HTTP
authentication headers correctly to produce TokenChallenge structures and the
other associated parameters, such as the token-key and max-age values.</li>
      </ol>
      <section anchor="challenge-and-redemption-structure-test-vectors">
        <name>Challenge and Redemption Structure 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>
        </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>
      <section anchor="http-header-test-vectors">
        <name>HTTP Header Test Vectors</name>
        <t>This section includes test vectors the contents of the HTTP authentication
headers. Each test vector consists of one or more challenges that comprise
a WWW-Authenticate header. For each challenge, the token-type, token-key,
max-age, and token-challenge parameters are listed. Each challenge also
includes an unknown (not specified) parameter that implementations are meant
to ignore.</t>
        <t>The parameters for each challenge are indexed by their position
in the WWW-Authentication challenge list. For example, token-key-0 denotes
the token-key parameter for the first challenge in the list, whereas
token-key-1 denotes the token-key for the second challenge in the list.</t>
        <t>The resulting wire-encoded WWW-Authentication header based on this
list of challenges is then listed at the end.</t>
        <artwork><![CDATA[
token-type-0: 0x0002
token-key-0: 30820152303d06092a864886f70d01010a3030a00d300b060960864
8016503040202a11a301806092a864886f70d010108300b060960864801650304020
2a2030201300382010f003082010a0282010100cb1aed6b6a95f5b1ce013a4cfcab2
5b94b2e64a23034e4250a7eab43c0df3a8c12993af12b111908d4b471bec31d4b6c9
ad9cdda90612a2ee903523e6de5a224d6b02f09e5c374d0cfe01d8f529c500a78a2f
67908fa682b5a2b430c81eaf1af72d7b5e794fc98a3139276879757ce453b526ef9b
f6ceb99979b8423b90f4461a22af37aab0cf5733f7597abe44d31c732db68a181c6c
bbe607d8c0e52e0655fd9996dc584eca0be87afbcd78a337d17b1dba9e828bbd81e2
91317144e7ff89f55619709b096cbb9ea474cead264c2073fe49740c01f00e109106
066983d21e5f83f086e2e823c879cd43cef700d2a352a9babd612d03cad02db134b7
e225a5f0203010001
max-age-0: 10
token-challenge-0: 0002000e6973737565722e6578616d706c65208a3e83a33d9
8005d2f30bef419fa6bf4cd5c6005e36b1285bbb4ccd40fa4b383000e6f726967696
e2e6578616d706c65

WWW-Authenticate: PrivateToken challenge="AAIADmlzc3Vlci5leGFtcGxlII
o-g6M9mABdLzC-9Bn6a_TNXGAF42sShbu0zNQPpLODAA5vcmlnaW4uZXhhbXBsZQ==",
 token-key="MIIBUjA9BgkqhkiG9w0BAQowMKANMAsGCWCGSAFlAwQCAqEaMBgGCSqG
SIb3DQEBCDALBglghkgBZQMEAgKiAwIBMAOCAQ8AMIIBCgKCAQEAyxrta2qV9bHOATpM
_KsluUsuZKIwNOQlCn6rQ8DfOowSmTrxKxEZCNS0cb7DHUtsmtnN2pBhKi7pA1I-beWi
JNawLwnlw3TQz-Adj1KcUAp4ovZ5CPpoK1orQwyB6vGvcte155T8mKMTknaHl1fORTtS
bvm_bOuZl5uEI7kPRGGiKvN6qwz1cz91l6vkTTHHMttooYHGy75gfYwOUuBlX9mZbcWE
7KC-h6-814ozfRex26noKLvYHikTFxROf_ifVWGXCbCWy7nqR0zq0mTCBz_kl0DAHwDh
CRBgZpg9IeX4PwhuLoI8h5zUPO9wDSo1Kpur1hLQPK0C2xNLfiJaXwIDAQAB",unknow
nChallengeAttribute="ignore-me", max-age="10"

token-type-0: 0x0002
token-key-0: 30820152303d06092a864886f70d01010a3030a00d300b060960864
8016503040202a11a301806092a864886f70d010108300b060960864801650304020
2a2030201300382010f003082010a0282010100cb1aed6b6a95f5b1ce013a4cfcab2
5b94b2e64a23034e4250a7eab43c0df3a8c12993af12b111908d4b471bec31d4b6c9
ad9cdda90612a2ee903523e6de5a224d6b02f09e5c374d0cfe01d8f529c500a78a2f
67908fa682b5a2b430c81eaf1af72d7b5e794fc98a3139276879757ce453b526ef9b
f6ceb99979b8423b90f4461a22af37aab0cf5733f7597abe44d31c732db68a181c6c
bbe607d8c0e52e0655fd9996dc584eca0be87afbcd78a337d17b1dba9e828bbd81e2
91317144e7ff89f55619709b096cbb9ea474cead264c2073fe49740c01f00e109106
066983d21e5f83f086e2e823c879cd43cef700d2a352a9babd612d03cad02db134b7
e225a5f0203010001
max-age-0: 10
token-challenge-0: 0002000e6973737565722e6578616d706c65208a3e83a33d9
8005d2f30bef419fa6bf4cd5c6005e36b1285bbb4ccd40fa4b383000e6f726967696
e2e6578616d706c65
token-type-1: 0x0001
token-key-1: ebb1fed338310361c08d0c7576969671296e05e99a17d7926dfc28a
53fabd489fac0f82bca86249a668f3a5bfab374c9
max-age-1: 10
token-challenge-1: 0001000e6973737565722e6578616d706c65208a3e83a33d9
8005d2f30bef419fa6bf4cd5c6005e36b1285bbb4ccd40fa4b383000e6f726967696
e2e6578616d706c65

WWW-Authenticate: PrivateToken challenge="AAIADmlzc3Vlci5leGFtcGxlII
o-g6M9mABdLzC-9Bn6a_TNXGAF42sShbu0zNQPpLODAA5vcmlnaW4uZXhhbXBsZQ==",
 token-key="MIIBUjA9BgkqhkiG9w0BAQowMKANMAsGCWCGSAFlAwQCAqEaMBgGCSqG
SIb3DQEBCDALBglghkgBZQMEAgKiAwIBMAOCAQ8AMIIBCgKCAQEAyxrta2qV9bHOATpM
_KsluUsuZKIwNOQlCn6rQ8DfOowSmTrxKxEZCNS0cb7DHUtsmtnN2pBhKi7pA1I-beWi
JNawLwnlw3TQz-Adj1KcUAp4ovZ5CPpoK1orQwyB6vGvcte155T8mKMTknaHl1fORTtS
bvm_bOuZl5uEI7kPRGGiKvN6qwz1cz91l6vkTTHHMttooYHGy75gfYwOUuBlX9mZbcWE
7KC-h6-814ozfRex26noKLvYHikTFxROf_ifVWGXCbCWy7nqR0zq0mTCBz_kl0DAHwDh
CRBgZpg9IeX4PwhuLoI8h5zUPO9wDSo1Kpur1hLQPK0C2xNLfiJaXwIDAQAB",unknow
nChallengeAttribute="ignore-me", max-age="10", PrivateToken challeng
e="AAEADmlzc3Vlci5leGFtcGxlIIo-g6M9mABdLzC-9Bn6a_TNXGAF42sShbu0zNQPp
LODAA5vcmlnaW4uZXhhbXBsZQ==", token-key="67H-0zgxA2HAjQx1dpaWcSluBem
aF9eSbfwopT-r1In6wPgryoYkmmaPOlv6s3TJ",unknownChallengeAttribute="ig
nore-me", max-age="10"
]]></artwork>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
