<?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-01" 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-01"/>
    <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="March" day="20"/>
    <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>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_name<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. When present, this value
is a 32-byte context generated by the origin. This value can be a unique
per-request nonce, or represent some state such as properties of the client
session or current time window. 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_name" is an optional string containing the name of the origin, which
allows a token to be scoped to a specific origin. 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.</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>Origins 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.</t>
        <t>Note that it is possible for the WWW-Authenticate header to include multiple
challenges, in order to allow the Client to fetch a batch of multiple tokens
for future use.</t>
        <t>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>
        <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 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>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:
H4sIACOGNmIAA8Vc2XbbRpq+r6eopi/a7iEZSV46UcfpaORkotOO5LHk+PRJ
Z3yKQJGsEYDiAAXJbMd5lnmWebL5l9oAUopzZmldOCRY679+/4LMZjPhjKv0
sbxaa/mqNTeq2MpXquvkd1dXr+RJ79a6caZQzthGXhZrXWuhFotW3xwPxw+H
itIWjaph4bJVSzcz2i1nGx6/geEzBcNnHa03OzgUMEuvbLs9lp0rhTCb9li6
tu/c0cHBFwdH4lpvb21bHsuzxum20W72AtcVonOqKd+pyjaw11Z3YmOO5Y/O
FlPZ2da1etnBp22NH34SAre17bGQMyHhzzQdXH0ON+irLT3hQ1/Zut5mT227
OpYnm02l4QDFnJ51sLh2x/Ki0f6nV6q9lm8VTymMg9uc9hvdOtPYqTxVlVna
tjFKfvH04PAJj7J94/DabxrjdCkvHRCik3YpT2rdAjFplK6VqYAgGzzQ1wo3
mxe2Htzici5/UFWp/55d49LpG93kz+ki/2LtCo778uVpvnp3Q8O+LtatrU1f
z2HsYIfTuTyZy7fWltkWp+vWdM5u1rod/EobnVa2L5eVanW+UaFuv15rtTHN
amFcNwduCjGbzaRaAE1VAd+u1qaTIEJ9DSIlS700DVBFNSyVaiiVLEXSrZWD
tRu50LLvgJaLrSwqAwM74axsdal1PZRZZ69108lb49a4uG3NyjRzecbrqKqz
+WL8M84SxVpVlW5WOuwAD+Wm1R0eF6cWhd44taj0ng3nfNvalGWlhXiAMt3a
si/oNh8emOzrRyH2nRgoKvumMs017ZERxLbdLiXgxKqxzba2fVdtJSuB+TtM
9OeXDzut5YcPfz6bvZjv6mpbrEE6C9e3+uPHRyAGwk/b2K7TXQeclF1fABH5
gBK4Rwcjqtgbzxzj5K1Kv6y0CxOE6bqeqZyWgCetBEItFN4BGW2BzcDs4lou
QUZHQ6f+CJ0YyYdtYWZ1g4dU8vTk1dXpdye4LrLd9nCGqrK3+CvMAjGptvh5
o1q3FSw04Te+9O89F+RDfMZC8Qjvg+ygO6I44ZlUU2i5hMWB4y/McqlbpJnb
bljDh1ybAqtwozINjJejhYCQYNZsBSOBtyLwFgi6R0Lmd+oQmJy6tvdq0sMP
H373+tvTPx49fgrsnrIEOn2FK0+ZlUSzLpd+r183qjUgZfLaNCXdMj+ciIc7
9RPBeA9IbuCIBk08mAFPEIf3CDoO8qRbsKI1MYQpFJVR4Gr8DE9Tb+hSxAAZ
NgSaDeRmQFpcHzbuYb2tXGpXrP2J0wXh7L/88ovw68n7/l77e71CUZIPL1hS
BJnCL2f3/oFZDQbmb+LeTXb+fhb/dP/a+Pe3fPzPn7DoaPxZoNyrQLn7x/+m
9T/h/J/l4399+cFWPP51EpB72PCVlJ8Rvz8cywdLs5qBLWtvjL6VBJueT0gn
5EkykKqSp7beABwBaZuA+T4Db1CWhnYCKQIUc41CQUbiU3Q9E3/R9ZsNgBrQ
Kzo5iSmolS0M6C+qSubP2DDNirXtUEcsKNV7VjjRbXRhlqbwY8iTd/Mor0EP
SdFb/R+97pxXVFJxvws6GFgdlhdKxiVR71HtHRsLNPcbuA24E7AgEjQXLCRr
YQFmfY64Ez7zfTo2KwJHJdKUelPZLRmx2pa6Cr72hn60PXiTGWzflHD2KZ2T
VqG9FtatRbAnBvzQQ4teUyeb0T2iKeAdZ4NxsMGMLIAuHyWb+uCBvNItOARb
2dUWbayWAE2Rq2DtJt+/ubyaTPm/8vyCPr/+5l/fnL3+5gV+vvzu5OXL+EH4
EZffXbx5+SJ9SjNPL77//pvzFzwZnsrBIzH5/uSvE77y5OLV1dnF+cnLCZhP
lplo+hEsOEIydEO4mSO/IUrdFa1ZwBeY88+nr/7rPw+fSLb9R4eHX3z86L98
fvjHJ/Dldk0cRf42IHj8FczwVgCLtWpxFaAqMHZjnELZBe53a3vbSECHGsgn
vvwdKNXVxYuLY5C2GoFB2W8qdD9B3mxR9LRSplMa7wJq+pUQb5oK8IYEtur2
1oDkeMHT5XR0a90UIC1dsu0g451akX+RVy8vRWMdez3CEnBTeHj4+Dne98mT
Zx8/TuWlZkj2eMebgvx27IFAGoDx7A2QS2zl8dMZoZLwaWAtgXfENLIeEyQT
u2dixKehMEKpwbCgIRDxTEsbAQ2dDtasbauTjt6qbXcMIFTyEVGCj+VfNCl/
DawAXa12QWRAyTtGCtF10WrUbzAEZtXoMgFdeTX00RBGkU0xrSZKopZ6g0Lg
mYFdwOLkkD3K8ABJ4BUnb9++nWURp54wnoGwotQtWhXgVgLp8GUBgVbJy0U6
ZNCzJbneuRqLe622SIWc2nvX80YWAWdmWTMqJFQCZMAogcRrgbpkCD0HWM2R
RBeRCu4TaDIVARcBHU48lCdJHhIBI4u7g3iIMyJ9Zulc4LDGR0XqedAFjOW9
9607Qo0kL8Qsj90mOYyczOWFD6fuj6U8kzzej6T2TIM943SKTC6Qe5GOa9Cs
VhcaLHo5XIrjER83AL9UBQJcbmmGAhBbmYAk1Q0ErRiyTBHbR87AxUTkTQoE
8EQZNeFI7DRoZAJ1GfGB4oESsHI8ZkYW2CCgV7SwzT7pZ54nmg+J7VmwqxdN
UfUlRQU0MB3QG0uwU5UNaMU0KAPMbLXAyOkWqQjWg1iGPh19QoAMHG/xZZDm
dC4m+Zw95/49iQdDO9a5tie7d8zom7/LDwTlevBqh8/eeQz1DsOrP3EKYqPg
IH7Ld6iKXx7O50f/dvhsdvjVYEji2Duvw18ezOePj4ajmMO80EG20MfRRf5E
Z6QbxoNLcFFVyYF7sPVwTb4iG+NJOv+EAmh5NLOFgyAZ3fYKBRUtinYIIcFo
ODxRsnY4DwaU7EwjsYfxjc8GQOjdANRxOkVRlD3qNZ+w1SvTgR/QpWCJOzs5
P/FP2+0UXBTNmVEoi74o3t2Dz77xUDW4ArqWuOEtCB4hHFk14JdKMpCTjE3+
+rAXMh85okwTTB4OIICZpIkJgHMEoF1HI7yCxxubEpVluc3mxTGEF/0w/CUG
fZkLZOzLKQoCGiFZ5NmMx0ND2QJz30dvKUYsDAwKl0GaufVdjCW67Momk6eJ
QQDLFgCCZTBPZKp8iJ5sE2fByPX6q3mrQjg3eOF7HBsBOgt8BZryYt4TZeS6
1SjsDJzJuRNUi/HHXL5FExHPSaQksRDE88dHMyJAcKVBUD3ddUb2MDFwSIHU
GdBTAc5qFsIWwPWFJgvf6uBTKI3UYaI1ZIxQQShPy4mZlOsRlN3iHBLgUg7V
DEwHs1RiWuEH8hTMxo7BDB6MOEKqpA3d/wBWEI+PiLsdCw2P2ZUZiTSt4KZe
cPYIzFyMFW5XSqRXNriPaW4Gx9yrf5l12xGwX9dED00YyAgvehl6WSAMABqP
Jev/QYtQL5A2WwRzW4GRno+Nh0BwrOlAFpJVsiBsBkfpsuhIp/JOnxtDBZHc
mXJw00UPksCGP64z8QQMlEYSYvbz2ZO+rWYc0ZQ+KHvy7MnnH8euhy3sXF4a
NPuJNlGqc0gMAZAkMvPx40ayVE6RkAgPEOQGsW+z8moX5If1jaQeovF2K58c
HDI0BE3bQDyvs1BdgAJWAKTh8qq47vxSkRR4IG+c2G5QJBmlfJ485AwAx72E
4tAPCe1vvekXFaYmIFCHlQUBFRSs/T4y+NBocuIp9tKVPC0u/UkUlfspmsgA
IT2mdm1tnGO5S/mPDvFVm3Ay2peQTIegvjX6Ruf+DU/FMRMqc+9mdjlbUECj
4U6N6Woma63ezxRJX6706UzsLICf4P6jgWz6egF7wLdOw28lWz/W/6Go3Rpg
JRpoKookujLszZLBqIBsk8bCukxAZeZpHYxacDGUDcBiWg/IBZU3oGqgKJdy
AukpJsGyoWpL9K+qqifptlPcDTAxCuI8JTpjRk7gesGNsnNL+gzbnpDp1O9V
vam8YRjD9YDWC9uDB6isvZaVudbkOjzCHU/xxVZvXBJpnqtFMZ/Pp4k2zw+P
HsMTxqBvQAs5Ato4ZlyO/6cpUorJgwDCUUwI2VM6SYtP0JME9Mjmul2ET9GV
SOMyTytLq1mB4Lh21WB1Cgs3DCMJ0ISsGiYoMWfYCjYzZQjBkqIKcW5dqjqh
S7HgyFFX2EffzRSXBKXuK2eAi6nc15GTIb9CjowSjbiaLwfAMwZTaI7wv0Dz
sIqHSZTdXPYUFADV4ajfov38R8vLsMqTTYBoZTTh6PGTKGDAZxUuz6ivu+fu
cnh3X0qCLwQ6xRAaZBmIAGkecoVuB+qwjI59IdYaUaDI+T+axiDaZ1lL0xVo
ARxloP0B+w1VjPpuzXFnBhIFebYCqI8w8cOHP59eXPzl7JvL5zFbt3ZuszDd
rF0Wz46ePYWPmEVE6AjWdoULengCduJNyOGkvRFjxKtyMjQatltiPd4GDGms
+7LcC4YzYLLDZBaUJJ0XMZmWlCuwLU9QZEWRDw+GSSHEeL3b9C6PvUYGIUN8
7DFar6DdMEny+y4roPvK8zCNc5LVkbMgmpZdaDLrHiwDPRkcCsbTrPIhDE4H
AmsTMAPZkZpEdGi27pCjuP/8t2Qf8IfP3/kI5MfHRz8NH8f7visN2BW3O4IX
BIV7Z8ofz005+nlQPf7x/PqnmIj4x+QfOBarwfuKRFt+6Mma8XzEb9qeCOV3
fhy2Du4oCz2Cz5ql2LAFb2VrQSvMh5Dak/cT1sUjgoMKWDlp1VAcpmA/To6e
Pns4fPwoQ6ieaSGMAt4FQnISwoAtD24olbGHwQV2PHFYxDQMzjtGjYGLO86X
XHfSPYR/O7rKhx2IkKfQ+bU/6+DHoNCA8hkmbBBUEMb2goXphZRL+j88Ny49
PNtAyNiQJblHvGNrsFvYQnKj29GmU+EzBCnFEXoIPBf9BQfRIDLPwxaVJ+D3
xoEjvvqwMPRj2AZjgRZCaYcaxgK0G94MwokQCYr8sncHffmo+6IUcU+UcgIQ
vm+uGyzmweXz/F48PVn54eXHrTgFOhX4Cnh8TxYiOOiQqCHBGTMU9gjInhxm
o29DzMkpn1QlGhRHAogaWD00lINRI9xE3PCYia3qt6Fe5ft4SDE8MUKgCWIG
Sq4WpjKYdQh9Y/Q4k3oxFONU1cni1UGik4WTwh4V0C0FM1RzE8Gmkfn1cB4E
CB1h4zuh8twWeyaW98z0KcFx1dC8zSVe3CvJLOQIEbak+3UOIzdKtWGwyPKG
ljQ2H1jKUN5Qg9AoNIgM7gYIO7tsMC7iZDwXI7KF3pu5JMkISTyCDKGYCPGa
CCeP3X4couZolYmRAgD2gbdhTbALQRo9rDSI4+uYZ6ReJbh33qgQUiLUEoJM
9N87EeBKTE90mGNjRlHdaqFRSGIy2t2aIpR1wiKx6ZEmTDjtArMm+bUiG7IU
y90sFr60vv8KSL0QEDfWg2ZYqga/WlP2UGFY3aF5El4oGaYOWhSjfhAFOLcE
FhItL0UZXmoxp98E9BuCLd9tEoJEiOkLtxMVIoaH2N4EfIx2cEOdljrW/IYm
I6SxqJa62/P0OtWxu2S94NbOBJHdV4LxICaPwhnAVFuRMI33S9TPMspgjWof
e3YRxnW6WsbUeLOVeXdLPMwC0JzGcM8rRVYRpdhDDHqBPLFShXRowKJ7jX2S
pgHHi32Zi3/XhROeIVldTxd9CzYy7whAfh/O5ZsGk0q+3s4L4XAwLds77pzy
AyiamMBqtm5N2S8qVg5OtmErH07I/i72eSaJaTwjhnuKuCfLPm2XJd72sGvT
t1g3IRtYoresGXVywiwcB2f4UqppPL3DqXbBELVSdBBiR5Tl6xhbLKZE9zDq
hWQNijGkL4dn63PH6iEW0/WMOkfgEivM7wZ+/SoHOPQE5TcFWhmRVfZprbxT
DXkThTPUmjNiliAYhau2dKRTYIavw3zSYbDuoJacIe0pkeCng65xBNkujGtV
a6otnLeJLeOk8m862P8snA3A27AiEP0aZWNu9aIzTmcOkUHzTnsD5qD9/RvN
po+Sq+jy1hixW0rC1hilAx1Mm8hjG+6BwzEwH/GQEitrsS9DYxYJuA+bUBR0
5dv0kuvy1iA1cwTywzzklONVTHNjqxtSxilmn7m1TtjmLjE8W+Z96ffUedCR
6NYXH/jy5Ix0O0tk8meIN57LlMtze5UQ+3M6jTjU6Wobzr+zUEgjB/gD23e+
NgUeHQQigI1y5HKAbugruGmRCpt5V3BMQao8wvV1v4UuFMwDe8zNKD0l4lFf
hyt5KxGaOXUZnSRpK/rCR9MMOuZcKLAjjiBMyXIwA4Ji0wvpd4XwD41mwClE
dsokVba4xgnLvhIU1NtmbywKHAY4B/B5uvfngR8HtehAdCvVCmwzo+YV33Lv
ycuNsKXaEgaLMkg1hSARuzIA/IiMR+OmrtmNUnsKlmTRjXoV9P4dWw+pYY2z
QSGK5XzwrTJobaYCM5JYa1ooIAb1WXFSH0KataVWVjpMOjzm+GN/WrR4KBw1
Vy6wiNLofflLjlSpuiVX5iYEGBRKiNCApkkhguz5qIYIkNriaBz6YaDzKq/F
ZNpOvUC+RBcsVXxHYnDWwtfwQCLDfr4yXyTyJQ0U8RChuk0RZd8Qq7hQ3LLN
RrlGbrVb7hPw1T/p0UJlVZlX22m0F2wg+g1Vbxs+M7YLd1nFguNUrhYBqQGt
qthHnVGBjG0A0nkzs4frqgJ/SWdgmVvGSsGohDQuCsi8KMB1OSJgsgGtXvqg
WGXtzMxiQTIw7v/mLGUsLGRekxutEQnSqlgk9bKCYo0lF/RXlwFPnXp/orit
+sMDcJazYvDQJ3UjBBu1QIzpeKPA/0dngJYC7kzMHyAmkRVk9yiAJVmhPpJb
DUqnuv3L+J5DX6gXPI0DlFgpKVpg1Cz2iabOd8r3J+ccy/oYB6F9QcADCkrY
dkuvHLHKZ/3KC81v7ex91eOEZBiOvPPH8iLueiMhf+njf/SGx2CtbKV7xv/W
9UfvR3z1a+N/6/r7/va+k/HV6A0M30bwye9fnO4GtLlch8A10zW7QAnmNEr+
VsU6n1lOBSgSC66KDU15zyO3Q2HHFK0XJC/X+lH9aqPQ0GMwL1BoawWo0jg2
1Qgxq62Mfasq5G4yLfPxP9XbuY8ey2v4+sV7UzM2QvNNphBd5kihzDDKTlf1
HitLTYReq3gDBdEd9kVdHYaEEprtRYcGtyFHsAhmwUMI30h1dUQ2HUJCjr+y
bmyv2viyG71aRx7Jx5B0h3DWJayScFKM+7m8xckRDncoIYcj8SUCsdSKS8K+
3zR50UhgT9F0WHQDrUZXNJcvcmtIid/QSCHGLbxZd0EQNPQp4BfJ2vermvOd
zJcYlq+0I5FKrBBu7Zuz+bXEQE7MXRFxSGj4nSHMSMJl8quTKKH8mQLcGPMf
nwkshva+1a1h/135HIjprrt4otF7SkMBBHShtfjE9xeoU8JvG158yIpCiVCj
ci3FaHuSVMPSrQh12n3V12n+BhEomi+PpgTsHs/FWS18udSXgIfV1BQ14qvg
HhjHs3M6VCU/xcGR7/Pzu/ObLR6JENwh0VcFvbBZxkr0qI8KdgR15wRS6Pnb
KbilFyNDVJwSTTEh1W43zq5atVnD+fGNEsIGsKvtIZxAUeJdfFLuAXcF70AN
oxr1kYrK+//vAaNXaUKvcffrtZPQUuevN/lui4gFuCOu4GQdGNWUm3uImd9H
d7z78Np3Mk8koEGIkky35opU/goDUnbv7HN68T0/qBCvLEUryNgQ8/pIB453
nIt2/rLFx5i4CeTIivFXWBMLJwW65i3XjN0maeAkdmeDvmOXVio1csJ399XC
WInzAZeIiZfd94n3MyK8vZfvRS+b3Vru4mVxnIqOLTKYR1P3derF8ZW7Th68
/xb+5HP57OnTx08xeQEkwsj1WIg/cGc6/y8q4tJ7SqmqWoEuuXUNU5hH56Ne
8WGO9A/yFeXpwDv94Cs2Fb2f9NfPzmNRMTaa+uSBb4LI8h2bsMhNXCQuLb/X
TmFZ7bctS69WMpAOucTaLzTHtX228H9hcb9Svvr5NZPaFxFNw03LVBtqwlqD
zC9OMuVgls069rg7MvILRr/WBIAKoPZbipxIByL/sjIxCzqn1H1/i0+h8Zwo
9Xljg7cP/P9fCFD+ZxYjfNeYxGIPLt0nD/FppDY+GTEA17ymlU0J/8brMdr9
+dhD2fhh/Lf/h92ne8bxo/zf9BPc+eD9AfzBmR4iQIWIunw0uvP5Zyd7KDF+
umccP8r/zRA+onWlVWnKmfdJA8COJgvR+X8D7Q5cSoFGAAA=

-->

</rfc>
