<?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-08" 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-08"/>
    <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="January" day="30"/>
    <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="128" width="496" viewBox="0 0 496 128" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
              <path d="M 328,80 L 328,96" fill="none" stroke="black"/>
              <path d="M 488,64 L 488,96" fill="none" stroke="black"/>
              <path d="M 328,48 L 472,48" fill="none" stroke="black"/>
              <path d="M 128,64 L 144,64" fill="none" stroke="black"/>
              <path d="M 296,64 L 328,64" fill="none" stroke="black"/>
              <path d="M 128,96 L 152,96" fill="none" stroke="black"/>
              <path d="M 280,96 L 328,96" fill="none" stroke="black"/>
              <path d="M 344,112 L 472,112" fill="none" stroke="black"/>
              <path d="M 472,48 C 480.83064,48 488,55.16936 488,64" fill="none" stroke="black"/>
              <path d="M 344,112 C 335.16936,112 328,104.83064 328,96" fill="none" stroke="black"/>
              <path d="M 472,112 C 480.83064,112 488,104.83064 488,96" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="336,64 324,58.4 324,69.6" fill="black" transform="rotate(0,328,64)"/>
              <polygon class="arrowhead" points="136,96 124,90.4 124,101.6" fill="black" transform="rotate(180,128,96)"/>
              <g class="text">
                <text x="60" y="36">Origin</text>
                <text x="404" y="36">Client</text>
                <text x="60" y="68">TokenChallenge</text>
                <text x="220" y="68">WWW-Authenticate</text>
                <text x="372" y="84">Issuance</text>
                <text x="444" y="84">Protocol</text>
                <text x="56" y="100">Token</text>
                <text x="216" y="100">Authorization</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
    Origin                                     Client
                                        +------------------.
TokenChallenge --- WWW-Authenticate ---->                   |
                                        | Issuance Protocol |
    Token      <--- Authorization ------+                   |
                                         `-----------------'
]]></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.</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"/>).</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

                       <----------- Challenge \
                                              |
   <--------- Challenge                       |
                                              |
   Redemption ---->                           |
                                              |
                       Redemption ----------> /
]]></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>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>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="8" month="December" year="2022"/>
            <abstract>
              <t>   This document specifies the Privacy Pass architecture and
   requirements for its constituent protocols used for constructing
   anonymous-credential 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-09"/>
        </reference>
        <reference anchor="ISSUANCE">
          <front>
            <title>Privacy Pass Issuance Protocol</title>
            <author fullname="Sofia Celi" initials="S." surname="Celi">
              <organization>Brave Software</organization>
            </author>
            <author fullname="Alex Davidson" initials="A." surname="Davidson">
              <organization>Brave Software</organization>
            </author>
            <author fullname="Armando Faz-Hernandez" initials="A." surname="Faz-Hernandez">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Steven Valdez" initials="S." surname="Valdez">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="8" month="December" year="2022"/>
            <abstract>
              <t>   This document specifies two variants of the the two-message issuance
   protocol for Privacy Pass tokens: one that produces tokens that are
   privately verifiable using the issuance private key, and another that
   produces tokens that are publicly verifiable using the issuance
   public key.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-protocol-07"/>
        </reference>
        <reference anchor="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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
bVXa+JtkzbtZDLWMBGT3VRM3Yh4gHsRBZ/5iV/XA7hzKXS5g4dzuqZ4rXL9k
UXKYHKL1zcA+JAerBhPl+EffIk/YL5xcXYeqCc0gN3kQ95jMccdgNxlKWdwP
O3pn7o+1XLQKcK2kqf0bTw/1P/mKYb52CNt0JRjiF738X9pGq6Fx9fmR5C9z
1e0jC5EroTafqYYGXJ4ez+E/R8uj49nMwP+eLKfL5HiyjJdHqkd7qdNktpwd
H5+s5kk8W5n58ihZLo9Xk3l6Gsf69NSkyWRxao6XZnU018vEzI+ns0ms54tE
w0wr1dBOy/R4tjxdHsN/TWd6VjDqZGmSxWp1mh4v9Wo6nRzryZE+1elC64Ux
8ckiSSazdH46SU9X6ZFJp+AATczEmOmR1qczQbrKBcczlcIUs9lEJ4vZYmrg
ufncrBZ6cbLU81kKQ8N/DXyZxmmSwHSLeLk8MquT2XE8myxnU/WIukDr9fnl
qsfXm06AinqxTJbxyeksTlbxydF0fnSyTDV8OAGaLtU8nZ2kBki6TE+SJJnB
43oxOYqni8XJyZfsUD26xV+VY/7/gX/mwKdT+BSfTjVMqOFRvQKRWi6OTiYz
oHSymiYnajZfGX0ySScnyeJodrSYpqvZajlbHZ2cnqz+jg/8H/VMV8ewrni6
WoI6PEqn5vQohZOanU6WGr6GxZ+cqmVyChrzODmaG5OeLnQyj09TA4eeHuvF
39mZ/qpq/x+VKRJ9NAeqAbUmqY7jozgFRT9P0ngBevzoeHI8i9V8mqbpycIc
z+fT0+mpWSWryXKxOFrN4qPJ/9NM8ZhpmMXhb+fd5f2DclR6bMxKT1fJcXx0
NNEn05PFChY0i81yaZbp6mh2rKbHWi+PE31skPSzdBEncDjg9B9P578CR6GD
+X8ADdP81oiCAAA=

-->

</rfc>
