<?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-rfc2629 version 1.5.17 -->
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-privacypass-auth-scheme-02" category="std" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.11.1 -->
  <front>
    <title abbrev="Privacy Pass Authentication">The Privacy Pass HTTP Authentication Scheme</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-auth-scheme-02"/>
    <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="2022" month="April" day="04"/>
    <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" numbered="true" toc="default">
      <name>Introduction</name>
      <t>Privacy Pass tokens are unlinkable authenticators that can be used to
anonymously authorize a client (see <xref target="I-D.ietf-privacypass-architecture" format="default"/>). A
client possessing such a token is able to prove that it was able to get a token
issued by a token issuer -- based on some check from a token issuer, such as
authentication or solving a CAPTCHA -- without allowing the relying party
redeeming the client's token (the origin) to link it with 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 target="RFC7235" format="default"/>),
PrivateToken, that allows clients to redeem various kinds of Privacy Pass
tokens.</t>
      <t>Clients and relying parties interact using this scheme to perform the token challenge
and token redemption flow. Clients use a token issuance protocol to actually fetch
tokens to redeem.</t>
      <figure anchor="fig-overview">
        <name>Token Architectural Components</name>
        <artwork name="" type="" align="left" alt=""><![CDATA[
 Client                             Relying Party (Origin)

    <------------------------------ Challenge \
                                              |
+----------------------------------\          |
|                                  |          |
|  Issuance Protocol               |          |
|                                  |          |
+----------------------------------/          |
                                              |
     Redemption -------------------------- >  /
]]></artwork>
      </figure>
      <t>In addition to working with different token issuance protocols, this scheme
supports optionally associating tokens 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" numbered="true" toc="default">
        <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" format="default"/> <xref target="RFC8174" format="default"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <!-- TODO: Remove duplicates that occur in Architecture doc -->

<t>Unless otherwise specified, this document encodes protocol messages in TLS
notation from <xref target="TLS13" format="default"/>, Section 3.</t>
        <t>This document uses the terms "Client", "Origin", "Issuer", "Issuance Protocol",
and "Token" as defined in <xref target="I-D.ietf-privacypass-architecture" format="default"/>. 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. 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,
using the "Authorization" HTTP header.</li>
        </ul>
      </section>
    </section>
    <section anchor="challenge-redemption" numbered="true" toc="default">
      <name>HTTP Authentication Scheme</name>
      <t>Token redemption is performed using HTTP Authentication (<xref target="RFC7235" format="default"/>), with
the scheme "PrivateToken". Origins challenge clients to present a token
from a specific issuer (<xref target="challenge" format="default"/>). 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" format="default"/>).</t>
      <section anchor="challenge" numbered="true" toc="default">
        <name>Token Challenge</name>
        <t>Origins send a token challenge to clients in an "WWW-Authenticate" header 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" format="default"/>.</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.</li>
        </ol>
        <t>The TokenChallenge message has the following structure:</t>
        <artwork name="" type="" align="left" alt=""><![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" format="default"/>. 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" format="default"/>
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.</li>
        </ul>
        <t>When used in an authentication challenge, the "PrivateToken" scheme uses the
following attributes:</t>
        <ul spacing="normal">
          <li>"challenge", which contains a base64url-encoded <xref target="RFC4648" format="default"/> TokenChallenge
value. Since the length of the challenge is not fixed, the base64url data MUST
include padding. This MUST be unique for every 401 HTTP response to prevent
replay attacks. This attribute 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 data MUST include padding. This attribute 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 attribute 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 MAY also include the standard "realm" attribute, if desired. Issuance protocols
MAY require other attributes.</t>
        <t>As an example, the WWW-Authenticate header could look like this:</t>
        <artwork name="" type="" align="left" alt=""><![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. Clients MAY have further restrictions and requirements around
validating when a challenge is considered acceptable or valid. For example,
clients can choose to reject 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" format="default"/>.</t>
        <t>Note that it is possible for the WWW-Authenticate header 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 could look like this:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
WWW-Authenticate: PrivateToken challenge=abc..., token-key=123...,
PrivateToken challenge=def..., token-key=234...
]]></artwork>
        <section anchor="context-construction" numbered="true" toc="default">
          <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>
        </section>
        <section anchor="caching" numbered="true" toc="default">
          <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" format="default"/>).</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" format="default"/>, 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" numbered="true" toc="default">
        <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" format="default"/>). 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 name="" type="" align="left" alt=""><![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" format="default"/>).</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.</li>
        </ul>
        <t>The authenticator value in the Token structure is computed over the token_type,
nonce, context, 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
data MUST include padding. 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 as follows:</t>
        <artwork name="" type="" align="left" alt=""><![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 HTTP session with 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="issuance-protocol-requirements" numbered="true" toc="default">
      <name>Issuance Protocol Requirements</name>
      <t>Clients initiate the issuance protocol using a challenge, a randomly
generated nonce, and a public key for the issuer. The issuance protocol
itself can be any interactive protocol between client, issuer, or other
parties that produces a valid authenticator over the client's input, subject
to the following security requirements.</t>
      <ol spacing="normal" type="1"><li>Unconditional input secrecy. The issuance protocol MUST NOT reveal anything
about the client's private input, including the challenge and nonce. The issuance
protocol can reveal the issuer public key for the purposes of determining which
private key to use in producing the issuance protocol. A result of this property
is that the redemption flow is unlinkable from the issuance flow.</li>
        <li>One-more forgery security. The issuance protocol MUST NOT allow malicious
clients to forge tokens without interacting with the issuer directly.</li>
        <li>Concurrent security. The issuance protocol MUST be safe to run concurrently
with arbitrarily many clients.</li>
      </ol>
    </section>
    <section anchor="user-interaction" numbered="true" toc="default">
      <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>
    </section>
    <section anchor="sec-considerations" numbered="true" toc="default">
      <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 name="" type="" align="left" alt=""><![CDATA[
 Client          Attacker                  Origin

                       <----------- Challenge \
                                              |
   <--------- Challenge                       |
                                              |
   Redemption ---->                           |
                                              |
                       Redemption ----------> /
]]></artwork>
      </figure>
      <t>Token challenges that include non-empty origin_info bind tokens to one or more specific
origins. As described in <xref target="challenge" format="default"/>, 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 attribute, 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="I-D.ietf-privacypass-architecture" format="default"/>.</t>
      <t>As discussed in <xref target="challenge" format="default"/>, 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.</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" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <section anchor="authentication-scheme" numbered="true" toc="default">
        <name>Authentication Scheme</name>
        <t>This document registers the "PrivateToken" authentication scheme in the "Hypertext
Transfer Protocol (HTTP) Authentication Scheme Registry" established by <xref target="RFC7235" format="default"/>.</t>
        <t>Authentication Scheme Name: PrivateToken</t>
        <t>Pointer to specification text: <xref target="challenge-redemption" format="default"/> of this document</t>
      </section>
      <section anchor="token-types" numbered="true" toc="default">
        <name>Token Type Registry</name>
        <t>The "Token Type" registry lists 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>
        </ul>
        <t>The initial contents for this registry are defined in the table below.</t>
        <table anchor="aeadid-values" align="center">
          <name>Token Types</name>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Name</th>
              <th align="left">Publicly Verifiable</th>
              <th align="left">Public Metadata</th>
              <th align="left">Private Metadata</th>
              <th align="left">Nk</th>
              <th align="left">Nid</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x0000</td>
              <td align="left">(reserved)</td>
              <td align="left">N/A</td>
              <td align="left">N/A</td>
              <td align="left">N/A</td>
              <td align="left">N/A</td>
              <td align="left">N/A</td>
              <td align="left">N/A</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC7235">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Authentication</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application- level protocol for distributed, collaborative, hypermedia information systems.  This document defines the HTTP Authentication framework.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7235"/>
          <seriesInfo name="DOI" value="10.17487/RFC7235"/>
        </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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="I-D.ietf-privacypass-architecture">
          <front>
            <title>Privacy Pass Architectural Framework</title>
            <author fullname="Alex Davidson">
              <organization>LIP</organization>
            </author>
            <author fullname="Jana Iyengar">
              <organization>Fastly</organization>
            </author>
            <author fullname="Christopher A. Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="7" month="March" year="2022"/>
            <abstract>
              <t>   This document specifies the architectural framework for constructing
   secure and anonymity-preserving instantiations of the Privacy Pass
   protocol.  It provides recommendations on how the protocol ecosystem
   should be constructed 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-03"/>
        </reference>
        <reference anchor="COOKIES">
          <front>
            <title>Cookies: HTTP State Management Mechanism</title>
            <author fullname="Lily Chen">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Steven Englehardt">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Mike West">
              <organization>Google LLC</organization>
            </author>
            <author fullname="John Wilander">
              <organization>Apple, Inc</organization>
            </author>
            <date day="19" month="October" year="2021"/>
            <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-09"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIAJt8S2IAA8Vc2XYbx5m+r6eoQBeRMgAsUksSxnbMoewxT2RSI1LRyXE8
OoXuAlDDRjemF1CIrDzLPMs82fxbLd1o0tLJzAkvJKDRXcu/fv9SPZvNVOva
wp7o67XVr2q3M9levzJNo7+/vn6lT7t2bcvWZaZ1VamvsrXdWGUWi9ruTvr3
929VeZWVZgMD57VZtjNn2+Vsy/dv4faZgdtnDY03e3ys4Cm7qur9iW7aXCm3
rU90W3dNe/z48e/h9xu7v63q/ESfl62tS9vOXuC4SjWtKfN3pqhKmGtvG7V1
J/rHtsqmuqnqtrbLBj7tN/jhJ6Vw2qo+UXqmNPy5soGtz2EHXbGnK7zo62qz
2SdXq3p1ok+328LCArI5XWtgcNue6MvSyk+vTH2j3xp+JHMt7Oas29q6dWU1
1WemcMuqLp3Rv3/2+Ogp31V1ZYvbflO61ub6qgVCNLpa6tONrYGYdJfdGFcA
Qba4oG8MTjbPqk1vF1dz/WdT5PZvyTauWruzZXqdNvJvVbWC5b58eZaO3uzo
tm+ydV1tXLeZw729Gc7m+nSu31ZVnkxxtq5d01bbta17v9JEZ0XV5cvC1Dad
KDO336yt2bpytXBtMwduKjWbzbRZAE1NBt+u167RIELdBkRK53bpSqCKKVkq
TV8qWYp0uzYtjF3qhdVdA7Rc7HVWOLixUW2la5tbu+nLbFvd2LLRt65d4+BV
7VaunOtzHscUTZUOxj/jUypbm6Kw5cr6GeCi3ta2weXio1lmt61ZFHZkwjnv
duPyvLBKPUCZrqu8y2g3Hx645OtHpcZWDBTVXVm48obmSAhS1c0hJWDFpqzK
/abqmmKvWQnc3+BBWb9+2FirP3z44/nsxfxQV+tsDdKZtV1tP358BGKg5LFt
1TS2aYCTuukyICIvUAP3aGFElWonzHGtvjXxl5Vt/QPKNU3HVI5DwJVaA6EW
BveAjK6AzcDs7EYvQUYHt05lCY0ayEdVw5PFDhdp9Nnpq+uz709xXGR71cEa
iqK6xV/hKRCTYo+ft6Zu94qFxv/Gm/61cEE/xGssFI9wP8gO2iOKE67JlJnV
SxgcOP7CLZe2Rpq1+y1reJ9rU2AVTpTHG8PmaCAgJJi1qoA7gbfK8xYIOiIh
8zt1CEzOZlPdq0kPP3z41evvzn57/OQZsHvKEtjaaxx5yqwkmjWp9It+7Uzt
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

-->

</rfc>
