<?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-protocol-08" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.10 -->
  <front>
    <title abbrev="Privacy Pass Issuance">Privacy Pass Issuance Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-protocol-08"/>
    <author initials="S." surname="Celi" fullname="Sofía Celi">
      <organization>Brave Software</organization>
      <address>
        <postal>
          <city>Lisbon</city>
          <country>Portugal</country>
        </postal>
        <email>cherenkov@riseup.net</email>
      </address>
    </author>
    <author initials="A." surname="Davidson" fullname="Alex Davidson">
      <organization>Brave Software</organization>
      <address>
        <postal>
          <city>Lisbon</city>
          <country>Portugal</country>
        </postal>
        <email>alex.davidson92@gmail.com</email>
      </address>
    </author>
    <author initials="A." surname="Faz-Hernandez" fullname="Armando Faz-Hernandez">
      <organization>Cloudflare</organization>
      <address>
        <postal>
          <street>101 Townsend St</street>
          <city>San Francisco</city>
          <country>United States of America</country>
        </postal>
        <email>armfazh@cloudflare.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>
        <postal>
          <street>101 Townsend St</street>
          <city>San Francisco</city>
          <country>United States of America</country>
        </postal>
        <email>caw@heapingbits.net</email>
      </address>
    </author>
    <date year="2023" month="January" day="30"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document specifies two variants of the two-message issuance protocol
for Privacy Pass tokens: one that produces tokens that are privately
verifiable using the issuance private key, and another that produces tokens
that are publicly verifiable using the issuance public key.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>The Privacy Pass protocol provides a privacy-preserving authorization
mechanism. In essence, the protocol allows clients to provide cryptographic
tokens that prove nothing other than that they have been created by a given
server in the past <xref target="ARCHITECTURE"/>.</t>
      <t>This document describes the issuance protocol for Privacy Pass built on
<xref target="HTTP"/>. It specifies two variants: one that is privately verifiable
using the issuance private key based on the oblivious pseudorandom function from
<xref target="OPRF"/>, and one that is publicly verifiable using the
issuance public key based on the blind RSA signature scheme
<xref target="BLINDRSA"/>.</t>
      <t>This document does not cover the Privacy Pass architecture, including
choices that are necessary for deployment and application specific choices
for protecting client privacy. This information is covered in <xref target="ARCHITECTURE"/>.</t>
    </section>
    <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>The following terms are used throughout this document.</t>
      <ul spacing="normal">
        <li>Client: An entity that runs the Issuance protocol with an Issuer to produce
Tokens that can be later used for redemption (see
<xref section="2.2" sectionFormat="of" target="AUTHSCHEME"/>).</li>
        <li>Issuer: A service that provides Tokens to Clients.</li>
        <li>Issuer Public Key: The public key (from a private-public key pair) used by
the Issuer for issuing and verifying Tokens.</li>
        <li>Issuer Private Key: The private key (from a private-public key pair) used by
the Issuer for issuing and verifying Tokens.</li>
      </ul>
      <t>This document additionally uses the terms "Origin" and "Token" as defined in
<xref target="ARCHITECTURE"/>.</t>
      <t>Unless otherwise specified, this document encodes protocol messages in TLS
notation from <xref section="3" sectionFormat="of" target="TLS13"/>. Moreover, all constants are in
network byte order.</t>
    </section>
    <section anchor="protocol-overview">
      <name>Protocol Overview</name>
      <t>The issuance protocols defined in this document embody the core of Privacy Pass.
Clients receive TokenChallenge inputs from the redemption protocol
(<xref section="2.1" sectionFormat="comma" target="AUTHSCHEME"/>) and use the issuance protocols to produce
corresponding Token values (<xref section="2.2" sectionFormat="comma" target="AUTHSCHEME"/>). The issuance protocol
describes how Clients and Issuers interact to compute a token using a one-round
protocol consisting of a TokenRequest from the Client and TokenResponse from
the Issuer. This interaction is shown below.</t>
      <figure anchor="fig-issuance">
        <name>Issuance Overview</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="176" width="472" viewBox="0 0 472 176" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
              <path d="M 152,96 L 152,128" fill="none" stroke="black"/>
              <path d="M 464,80 L 464,128" fill="none" stroke="black"/>
              <path d="M 152,64 L 448,64" fill="none" stroke="black"/>
              <path d="M 128,80 L 152,80" fill="none" stroke="black"/>
              <path d="M 224,80 L 280,80" fill="none" stroke="black"/>
              <path d="M 272,96 L 416,96" fill="none" stroke="black"/>
              <path d="M 96,128 L 152,128" fill="none" stroke="black"/>
              <path d="M 176,128 L 328,128" fill="none" stroke="black"/>
              <path d="M 168,144 L 448,144" fill="none" stroke="black"/>
              <path d="M 448,64 C 456.83064,64 464,71.16936 464,80" fill="none" stroke="black"/>
              <path d="M 168,144 C 159.16936,144 152,136.83064 152,128" fill="none" stroke="black"/>
              <path d="M 448,144 C 456.83064,144 464,136.83064 464,128" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="424,96 412,90.4 412,101.6" fill="black" transform="rotate(0,416,96)"/>
              <polygon class="arrowhead" points="288,80 276,74.4 276,85.6" fill="black" transform="rotate(0,280,80)"/>
              <polygon class="arrowhead" points="184,128 172,122.4 172,133.6" fill="black" transform="rotate(180,176,128)"/>
              <polygon class="arrowhead" points="160,80 148,74.4 148,85.6" fill="black" transform="rotate(0,152,80)"/>
              <polygon class="arrowhead" points="104,128 92,122.4 92,133.6" fill="black" transform="rotate(180,96,128)"/>
              <g class="text">
                <text x="28" y="36">Origin</text>
                <text x="180" y="36">Client</text>
                <text x="300" y="36">Attester</text>
                <text x="436" y="36">Issuer</text>
                <text x="60" y="84">TokenChallenge</text>
                <text x="188" y="84">Attest</text>
                <text x="212" y="100">TokenRequest</text>
                <text x="420" y="116">(evaluate)</text>
                <text x="56" y="132">Token</text>
                <text x="400" y="132">TokenResponse</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
  Origin             Client        Attester          Issuer

                    +-------------------------------------.
  TokenChallenge ---> Attest ------->                      |
                    | TokenRequest ------------------>     |
                    |                            (evaluate)|
      Token  <------+  <-------------------  TokenResponse |
                     `------------------------------------'
]]></artwork>
        </artset>
      </figure>
      <t>The TokenChallenge inputs to the issuance protocols described in this
document can be interactive or non-interactive, and per-origin or cross-origin.</t>
      <t>The issuance protocols defined in this document are compatible with any
deployment model defined in <xref section="4" sectionFormat="of" target="ARCHITECTURE"/>. The details of
attestation are outside the scope of the issuance protocol; see
<xref section="4" sectionFormat="of" target="ARCHITECTURE"/> for information about how attestation can
be implemented in each of the relevant deployment models.</t>
      <t>This document describes two variants of the issuance protocol: one that is
privately verifiable (<xref target="private-flow"/>) using the issuance private key based on
the oblivious pseudorandom function from <xref target="OPRF"/>, and one
that is publicly verifiable (<xref target="public-flow"/>) using the issuance public key
based on the blind RSA signature scheme
<xref target="BLINDRSA"/>.</t>
    </section>
    <section anchor="setup">
      <name>Configuration</name>
      <t>Issuers MUST provide two parameters for configuration:</t>
      <ol spacing="normal" type="1"><li>Issuer Request URL: A token request URL for generating access tokens.
For example, an Issuer URL might be
https://issuer.example.net/request.</li>
        <li>Issuer Public Key values: A list of Issuer Public Keys for the issuance
protocol.</li>
      </ol>
      <t>The Issuer parameters can be obtained from an Issuer via a directory object,
which is a JSON object (<xref section="4" sectionFormat="comma" target="RFC8259"/>) whose values are other JSON
values (<xref section="3" sectionFormat="comma" target="RFC8259"/>) for the parameters. The contents of this JSON
object are defined in <xref target="directory-values"/>.</t>
      <table anchor="directory-values">
        <name>Issuer directory object description</name>
        <thead>
          <tr>
            <th align="left">Field Name</th>
            <th align="left">Value</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">issuer-request-uri</td>
            <td align="left">Issuer Request URL value (as an absolute or relative URL) as a percent-encoded URL string, represented as a JSON string (<xref section="7" sectionFormat="comma" target="RFC8259"/>)</td>
          </tr>
          <tr>
            <td align="left">token-keys</td>
            <td align="left">List of Issuer Public Key values, each represented as JSON objects (<xref section="4" sectionFormat="comma" target="RFC8259"/>)</td>
          </tr>
        </tbody>
      </table>
      <t>Each "token-keys" JSON object contains the fields and corresponding raw values
defined in <xref target="tokenkeys-values"/>.</t>
      <table anchor="tokenkeys-values">
        <name>Issuer 'token-keys' object description'</name>
        <thead>
          <tr>
            <th align="left">Field Name</th>
            <th align="left">Value</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">token-type</td>
            <td align="left">Integer value of the Token Type, as defined in <xref target="token-type"/>, represented as a JSON number (<xref section="6" sectionFormat="comma" target="RFC8259"/>)</td>
          </tr>
          <tr>
            <td align="left">token-key</td>
            <td align="left">The base64url encoding of the Public Key for use with the issuance protocol, including padding, represented as a JSON string (<xref section="7" sectionFormat="comma" target="RFC8259"/>)</td>
          </tr>
        </tbody>
      </table>
      <t>Issuers MAY advertise multiple token-keys for the same token-type to
support key rotation. In this case, Issuers indicate preference for which
token key to use based on the order of keys in the list, with preference
given to keys earlier in the list.</t>
      <t>Altogether, the Issuer's directory could look like:</t>
      <artwork><![CDATA[
 {
    "issuer-request-uri": "https://issuer.example.net/request",
    "token-keys": [
      {
        "token-type": 2,
        "token-key": "MI...AB",
      },
      {
        "token-type": 2,
        "token-key": "MI...AQ",
      }
    ]
 }
]]></artwork>
      <t>Issuer directory resources have the media type
"application/token-issuer-directory" and are located at the well-known location
/.well-known/token-issuer-directory; see <xref target="wkuri-reg"/> for the registration
information for this well-known URI.</t>
      <t>Issuers SHOULD use HTTP caching to permit caching of this resource
<xref target="RFC5861"/>. The cache lifetime depends on the Issuer's key rotation schedule.
Regular rotation of token keys is recommended to minimize the risk of key
compromise.</t>
      <t>Issuers can control cache lifetime with the Cache-Control header, as follows:</t>
      <artwork><![CDATA[
  Cache-Control: max-age=86400
]]></artwork>
      <t>Consumers of the Issuer directory resource SHOULD follow the usual HTTP caching
<xref target="RFC9111"/> semantics when processing this resource. Long cache lifetimes may
result in use of stale Issuer configuration information, whereas short
lifetimes may result in decreased performance. When use of an Issuer
configuration results in token issuance failures, e.g., because the
configuration information is too stale, the directory SHOULD be fetched and
revalidated.</t>
    </section>
    <section anchor="private-flow">
      <name>Issuance Protocol for Privately Verifiable Tokens</name>
      <t>The privately verifiable issuance protocol allows Clients to produce Token
values that verify using the Issuer Private Key. This protocol is based
on the oblivious pseudorandom function from <xref target="OPRF"/>.</t>
      <t>Issuers provide a Private and Public Key, denoted <tt>skI</tt> and <tt>pkI</tt> respectively,
used to produce tokens as input to the protocol. See <xref target="issuer-configuration"/>
for how this key pair is generated.</t>
      <t>Clients provide the following as input to the issuance protocol:</t>
      <ul spacing="normal">
        <li>Issuer Request URI: A URI to which token request messages are sent. This can
be a URL derived from the "issuer-request-uri" value in the Issuer's
directory resource, or it can be another Client-configured URL. The value
of this parameter depends on the Client configuration and deployment model.
For example, in the 'Joint Origin and Issuer' deployment model, the Issuer
Request URI might be correspond to the Client's configured Attester, and the
Attester is configured to relay requests to the Issuer.</li>
        <li>Issuer name: An identifier for the Issuer. This is typically a host name that
can be used to construct HTTP requests to the Issuer.</li>
        <li>Issuer Public Key: <tt>pkI</tt>, with a key identifier <tt>token_key_id</tt> computed as
described in <xref target="issuer-configuration"/>.</li>
        <li>Challenge value: <tt>challenge</tt>, an opaque byte string. For example, this might
be provided by the redemption protocol in <xref target="AUTHSCHEME"/>.</li>
      </ul>
      <t>Given this configuration and these inputs, the two messages exchanged in
this protocol are described below. This section uses notation described in
<xref section="4" sectionFormat="comma" target="OPRF"/>, including SerializeElement and DeserializeElement,
SerializeScalar and DeserializeScalar, and DeriveKeyPair.</t>
      <t>The constants <tt>Ne</tt> and <tt>Ns</tt> are as defined in <xref section="4" sectionFormat="comma" target="OPRF"/> for
OPRF(P-384, SHA-384). The constant <tt>Nk</tt> is defined by <xref target="private-token-type"/>.</t>
      <section anchor="private-request">
        <name>Client-to-Issuer Request</name>
        <t>The Client first creates a context as follows:</t>
        <artwork><![CDATA[
client_context = SetupVOPRFClient(0x0004, pkI)
]]></artwork>
        <t>Here, 0x0004 is the two-octet identifier corresponding to the
OPRF(P-384, SHA-384) ciphersuite in <xref target="OPRF"/>. SetupVOPRFClient
is defined in <xref section="3.2" sectionFormat="comma" target="OPRF"/>.</t>
        <t>The Client then creates an issuance request message for a random value <tt>nonce</tt>
with the input challenge and Issuer key identifier as described below:</t>
        <artwork><![CDATA[
nonce = random(32)
challenge_digest = SHA256(challenge)
token_input = concat(0x0001, // Token type field is 2 bytes long
                     nonce,
                     challenge_digest,
                     token_key_id)
blind, blinded_element = client_context.Blind(token_input)
]]></artwork>
        <t>The Blind function is defined in <xref section="3.3.2" sectionFormat="comma" target="OPRF"/>.
If the Blind function fails, the Client aborts the protocol.
The Client stores the <tt>nonce</tt> and <tt>challenge_digest</tt> values locally
for use when finalizing the issuance protocol to produce a token
(as described in <xref target="private-finalize"/>).</t>
        <t>The Client then creates a TokenRequest structured as follows:</t>
        <artwork><![CDATA[
struct {
  uint16_t token_type = 0x0001; /* Type VOPRF(P-384, SHA-384) */
  uint8_t truncated_token_key_id;
  uint8_t blinded_msg[Ne];
} TokenRequest;
]]></artwork>
        <t>The structure fields are defined as follows:</t>
        <ul spacing="normal">
          <li>"token_type" is a 2-octet integer, which matches the type in the challenge.</li>
          <li>"truncated_token_key_id" is the least significant byte of the <tt>token_key_id</tt>
(<xref target="issuer-configuration"/>) in network byte order (in other words, the last 8
bits of <tt>token_key_id</tt>).</li>
          <li>"blinded_msg" is the Ne-octet blinded message defined above, computed as
<tt>SerializeElement(blinded_element)</tt>.</li>
        </ul>
        <t>The values <tt>token_input</tt> and <tt>blinded_element</tt> are stored locally and used
later as described in <xref target="private-finalize"/>. The Client then generates an HTTP
POST request to send to the Issuer Request URI, with the TokenRequest as the
content. The media type for this request is
"application/private-token-request". An example request is shown below.</t>
        <artwork><![CDATA[
:method = POST
:scheme = https
:authority = issuer.example.net
:path = /request
accept = application/private-token-response
cache-control = no-cache, no-store
content-type = application/private-token-request
content-length = <Length of TokenRequest>

<Bytes containing the TokenRequest>
]]></artwork>
      </section>
      <section anchor="private-response">
        <name>Issuer-to-Client Response</name>
        <t>Upon receipt of the request, the Issuer validates the following conditions:</t>
        <ul spacing="normal">
          <li>The TokenRequest contains a supported token_type.</li>
          <li>The TokenRequest.truncated_token_key_id corresponds to the truncated key ID
of a Public Key owned by the issuer.</li>
          <li>The TokenRequest.blinded_msg is of the correct size.</li>
        </ul>
        <t>If any of these conditions is not met, the Issuer MUST return an HTTP 400 error
to the client. The Issuer then tries to deseralize
TokenRequest.blinded_msg using DeserializeElement from <xref section="2.1" sectionFormat="of" target="OPRF"/>,
yielding <tt>blinded_element</tt>. If this fails, the Issuer MUST return an HTTP 400
error to the client. Otherwise, if the Issuer is willing to produce a token to
the Client, the Issuer completes the issuance flow by computing a blinded
response as follows:</t>
        <artwork><![CDATA[
server_context = SetupVOPRFServer(0x0004, skI, pkI)
evaluate_element, proof =
  server_context.Evaluate(skI, blinded_element)
]]></artwork>
        <t>SetupVOPRFServer is in <xref section="3.2" sectionFormat="comma" target="OPRF"/> and Evaluate is defined in
<xref section="3.3.2" sectionFormat="comma" target="OPRF"/>. The Issuer then creates a TokenResponse structured
as follows:</t>
        <artwork><![CDATA[
struct {
   uint8_t evaluate_msg[Ne];
   uint8_t evaluate_proof[Ns+Ns];
} TokenResponse;
]]></artwork>
        <t>The structure fields are defined as follows:</t>
        <ul spacing="normal">
          <li>"evaluate_msg" is the Ne-octet evaluated message, computed as
<tt>SerializeElement(evaluate_element)</tt>.</li>
          <li>"evaluate_proof" is the (Ns+Ns)-octet serialized proof, which is a pair of
Scalar values, computed as
<tt>concat(SerializeScalar(proof[0]), SerializeScalar(proof[1]))</tt>.</li>
        </ul>
        <t>The Issuer generates an HTTP response with status code 200 whose content
consists of TokenResponse, with the content type set as
"application/private-token-response".</t>
        <artwork><![CDATA[
:status = 200
content-type = application/private-token-response
content-length = <Length of TokenResponse>

<Bytes containing the TokenResponse>
]]></artwork>
      </section>
      <section anchor="private-finalize">
        <name>Finalization</name>
        <t>Upon receipt, the Client handles the response and, if successful, deserializes
the content values TokenResponse.evaluate_msg and TokenResponse.evaluate_proof,
yielding <tt>evaluated_element</tt> and <tt>proof</tt>. If deserialization of either value
fails, the Client aborts the protocol. Otherwise, the Client processes the
response as follows:</t>
        <artwork><![CDATA[
authenticator = client_context.Finalize(token_input, blind,
                                        evaluated_element,
                                        blinded_element,
                                        proof)
]]></artwork>
        <t>The Finalize function is defined in <xref section="3.3.2" sectionFormat="comma" target="OPRF"/>. If this
succeeds, the Client then constructs a Token as follows:</t>
        <artwork><![CDATA[
struct {
  uint16_t token_type = 0x0001; /* Type VOPRF(P-384, SHA-384) */
  uint8_t nonce[32];
  uint8_t challenge_digest[32];
  uint8_t token_key_id[32];
  uint8_t authenticator[Nk];
} Token;
]]></artwork>
        <t>The Token.nonce value is that which was sampled in <xref target="private-request"/>.
If the Finalize function fails, the Client aborts the protocol.</t>
      </section>
      <section anchor="token-verification">
        <name>Token Verification</name>
        <t>Verifying a Token requires creating a VOPRF context using the Issuer Private
Key and Public Key, evaluating the token contents, and comparing the result
against the token authenticator value:</t>
        <artwork><![CDATA[
server_context = SetupVOPRFServer(0x0004, skI, pkI)
token_authenticator_input =
  concat(Token.token_type,
         Token.nonce,
         Token.challenge_digest,
         Token.token_key_id)
token_authenticator =
  server_context.Evaluate(token_authenticator_input)
valid = (token_authenticator == Token.authenticator)
]]></artwork>
      </section>
      <section anchor="issuer-configuration">
        <name>Issuer Configuration</name>
        <t>Issuers are configured with Private and Public Key pairs, each denoted <tt>skI</tt>
and <tt>pkI</tt>, respectively, used to produce tokens. These keys MUST NOT be reused
in other protocols. A RECOMMENDED method for generating key pairs is as
follows:</t>
        <artwork><![CDATA[
seed = random(Ns)
(skI, pkI) = DeriveKeyPair(seed, "PrivacyPass")
]]></artwork>
        <t>The key identifier for a public key <tt>pkI</tt>, denoted <tt>token_key_id</tt>, is computed
as follows:</t>
        <artwork><![CDATA[
token_key_id = SHA256(SerializeElement(pkI))
]]></artwork>
        <t>Since Clients truncate <tt>token_key_id</tt> in each <tt>TokenRequest</tt>, Issuers should
ensure that the truncated form of new key IDs do not collide with other
truncated key IDs in rotation.</t>
      </section>
    </section>
    <section anchor="public-flow">
      <name>Issuance Protocol for Publicly Verifiable Tokens</name>
      <t>This section describes a variant of the issuance protocol in <xref target="private-flow"/>
for producing publicly verifiable tokens using the protocol in <xref target="BLINDRSA"/>.
In particular, this variant of the issuance protocol works for the
RSABSSA-SHA384-PSS-Deterministic and RSABSSA-SHA384-PSSZERO-Deterministic
blind RSA protocol variants described in <xref section="5" sectionFormat="of" target="BLINDRSA"/>.</t>
      <t>The publicly verifiable issuance protocol differs from the protocol in
<xref target="private-flow"/> in that the output tokens are publicly verifiable by anyone
with the Issuer Public Key. This means any Origin can select a given Issuer to
produce tokens, as long as the Origin has the Issuer public key, without
explicit coordination or permission from the Issuer. This is because the Issuer
does not learn the Origin that requested the token during the issuance protocol.</t>
      <t>Beyond this difference, the publicly verifiable issuance protocol variant is
nearly identical to the privately verifiable issuance protocol variant. In
particular, Issuers provide a Private and Public Key, denoted skI and pkI,
respectively, used to produce tokens as input to the protocol. See
<xref target="public-issuer-configuration"/> for how this key pair is generated.</t>
      <t>Clients provide the following as input to the issuance protocol:</t>
      <ul spacing="normal">
        <li>Issuer Request URI: A URI to which token request messages are sent. This can
be a URL derived from the "issuer-request-uri" value in the Issuer's
directory resource, or it can be another Client-configured URL. The value
of this parameter depends on the Client configuration and deployment model.
For example, in the 'Split Origin, Attester, Issuer' deployment model, the
Issuer Request URI might be correspond to the Client's configured Attester,
and the Attester is configured to relay requests to the Issuer.</li>
        <li>Issuer name: An identifier for the Issuer. This is typically a host name that
can be used to construct HTTP requests to the Issuer.</li>
        <li>Issuer Public Key: <tt>pkI</tt>, with a key identifier <tt>token_key_id</tt> computed as
described in <xref target="public-issuer-configuration"/>.</li>
        <li>Challenge value: <tt>challenge</tt>, an opaque byte string. For example, this might
be provided by the redemption protocol in <xref target="AUTHSCHEME"/>.</li>
      </ul>
      <t>Given this configuration and these inputs, the two messages exchanged in
this protocol are described below. The constant <tt>Nk</tt> is defined by
<xref target="public-token-type"/>.</t>
      <section anchor="public-request">
        <name>Client-to-Issuer Request</name>
        <t>The Client first creates an issuance request message for a random value
<tt>nonce</tt> using the input challenge and Issuer key identifier as follows:</t>
        <artwork><![CDATA[
nonce = random(32)
challenge_digest = SHA256(challenge)
token_input = concat(0x0002, // Token type field is 2 bytes long
                     nonce,
                     challenge_digest,
                     token_key_id)
blinded_msg, blind_inv =
  Blind(pkI, PrepareIdentity(token_input))
]]></artwork>
        <t>The PrepareIdentity and Blind functions are defined in
<xref section="4.1" sectionFormat="of" target="BLINDRSA"/> and <xref section="4.2" sectionFormat="of" target="BLINDRSA"/>, respectively.
The Client stores the nonce and challenge_digest values locally for use
when finalizing the issuance protocol to produce a token (as described
in <xref target="public-finalize"/>).</t>
        <t>The Client then creates a TokenRequest structured as follows:</t>
        <artwork><![CDATA[
struct {
  uint16_t token_type = 0x0002; /* Type Blind RSA (2048-bit) */
  uint8_t truncated_token_key_id;
  uint8_t blinded_msg[Nk];
} TokenRequest;
]]></artwork>
        <t>The structure fields are defined as follows:</t>
        <ul spacing="normal">
          <li>"token_type" is a 2-octet integer, which matches the type in the challenge.</li>
          <li>"truncated_token_key_id" is the least significant byte of the <tt>token_key_id</tt>
(<xref target="public-issuer-configuration"/>) in network byte order (in other words, the
last 8 bits of <tt>token_key_id</tt>).</li>
          <li>"blinded_msg" is the Nk-octet request defined above.</li>
        </ul>
        <t>The Client then generates an HTTP POST request to send to the Issuer Request
URI, with the TokenRequest as the content. The media type for this request
is "application/private-token-request". An example request is shown below:</t>
        <artwork><![CDATA[
:method = POST
:scheme = https
:authority = issuer.example.net
:path = /request
accept = application/private-token-response
cache-control = no-cache, no-store
content-type = application/private-token-request
content-length = <Length of TokenRequest>

<Bytes containing the TokenRequest>
]]></artwork>
      </section>
      <section anchor="public-response">
        <name>Issuer-to-Client Response</name>
        <t>Upon receipt of the request, the Issuer validates the following conditions:</t>
        <ul spacing="normal">
          <li>The TokenRequest contains a supported token_type.</li>
          <li>The TokenRequest.truncated_token_key_id corresponds to the truncated key
ID of an Issuer Public Key.</li>
          <li>The TokenRequest.blinded_msg is of the correct size.</li>
        </ul>
        <t>If any of these conditions is not met, the Issuer MUST return an HTTP 400 error
to the Client, which will forward the error to the client. Otherwise, if the
Issuer is willing to produce a token token to the Client, the Issuer
completes the issuance flow by computing a blinded response as follows:</t>
        <artwork><![CDATA[
blind_sig = BlindSign(skI, TokenRequest.blinded_msg)
]]></artwork>
        <t>The BlindSign function is defined in <xref section="4.3" sectionFormat="of" target="BLINDRSA"/>.
The result is encoded and transmitted to the client in the following
TokenResponse structure:</t>
        <artwork><![CDATA[
struct {
  uint8_t blind_sig[Nk];
} TokenResponse;
]]></artwork>
        <t>The Issuer generates an HTTP response with status code 200 whose content
consists of TokenResponse, with the content type set as
"application/private-token-response".</t>
        <artwork><![CDATA[
:status = 200
content-type = application/private-token-response
content-length = <Length of TokenResponse>

<Bytes containing the TokenResponse>
]]></artwork>
      </section>
      <section anchor="public-finalize">
        <name>Finalization</name>
        <t>Upon receipt, the Client handles the response and, if successful, processes the
content as follows:</t>
        <artwork><![CDATA[
authenticator =
  Finalize(pkI, nonce, blind_sig, blind_inv)
]]></artwork>
        <t>The Finalize function is defined in <xref section="4.4" sectionFormat="of" target="BLINDRSA"/>. If this
succeeds, the Client then constructs a Token as described in <xref target="AUTHSCHEME"/> as
follows:</t>
        <artwork><![CDATA[
struct {
  uint16_t token_type = 0x0002; /* Type Blind RSA (2048-bit) */
  uint8_t nonce[32];
  uint8_t challenge_digest[32];
  uint8_t token_key_id[32];
  uint8_t authenticator[Nk];
} Token;
]]></artwork>
        <t>The Token.nonce value is that which was sampled in <xref target="private-request"/>.
If the Finalize function fails, the Client aborts the protocol.</t>
      </section>
      <section anchor="token-verification-1">
        <name>Token Verification</name>
        <t>Verifying a Token requires checking that Token.authenticator is a valid
signature over the remainder of the token input using the Issuer Public Key.
The function <tt>RSASSA-PSS-VERIFY</tt> is defined in <xref section="8.1.2" sectionFormat="of" target="RFC8017"/>,
using SHA-384 as the Hash function, MGF1 with SHA-384 as the PSS mask
generation function (MGF), and a 48-byte salt length (sLen).</t>
        <artwork><![CDATA[
token_authenticator_input =
  concat(Token.token_type,
         Token.nonce,
         Token.challenge_digest,
         Token.token_key_id)
valid = RSASSA-PSS-VERIFY(pkI,
                          token_authenticator_input,
                          Token.authenticator)
]]></artwork>
      </section>
      <section anchor="public-issuer-configuration">
        <name>Issuer Configuration</name>
        <t>Issuers are configured with Private and Public Key pairs, each denoted skI and
pkI, respectively, used to produce tokens. Each key pair SHALL be generated as
as specified in FIPS 186-4 <xref target="DSS"/>. These key
pairs MUST NOT be reused in other protocols.</t>
        <t>The key identifier for a keypair (skI, pkI), denoted <tt>token_key_id</tt>, is
computed as SHA256(encoded_key), where encoded_key is a DER-encoded
SubjectPublicKeyInfo (SPKI) object carrying pkI. The SPKI object MUST use the
RSASSA-PSS OID <xref target="RFC5756"/>, which specifies the hash algorithm and salt size.
The salt size MUST match the output size of the hash function associated with
the public key and token type.</t>
        <t>Since Clients truncate <tt>token_key_id</tt> in each <tt>TokenRequest</tt>, Issuers should
ensure that the truncated form of new key IDs do not collide with other
truncated key IDs in rotation.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security considerations</name>
      <t>This document outlines how to instantiate the Issuance protocol
based on the VOPRF defined in <xref target="OPRF"/> and blind RSA protocol defined in
<xref target="BLINDRSA"/>. All security considerations described in the VOPRF and blind RSA
documents also apply in the Privacy Pass use-case. Considerations related to
broader privacy and security concerns in a multi-Client and multi-Issuer
setting are deferred to the Architecture document <xref target="ARCHITECTURE"/>. In
particular, the privacy considerations in
Section <xref target="ARCHITECTURE" section="4" sectionFormat="bare"/> and Section <xref target="ARCHITECTURE" section="5" sectionFormat="bare"/> of <xref target="ARCHITECTURE"/>, particularly those pertaining to
Issuer Public Key rotation and consistency (where consistency is as described
in <xref target="CONSISTENCY"/>) and Issuer selection, are
relevant for implementations of the protocols in this document.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA considerations</name>
      <t>This section contains considerations for IANA.</t>
      <section anchor="wkuri-reg">
        <name>Well-Known 'token-issuer-directory' URI</name>
        <t>This document updates the "Well-Known URIs" Registry <xref target="WellKnownURIs"/> with the
following values.</t>
        <table anchor="wellknownuri-values">
          <name>'token-issuer-directory' Well-Known URI</name>
          <thead>
            <tr>
              <th align="left">URI Suffix</th>
              <th align="left">Change Controller</th>
              <th align="left">Reference</th>
              <th align="left">Status</th>
              <th align="left">Related information</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">token-issuer-directory</td>
              <td align="left">IETF</td>
              <td align="left">[this document]</td>
              <td align="left">permanent</td>
              <td align="left">None</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="token-type">
        <name>Token Type Registry Updates</name>
        <t>This document updates the "Token Type" Registry from
<xref section="5.2" sectionFormat="comma" target="AUTHSCHEME"/> with the following entries.</t>
        <section anchor="private-token-type">
          <name>Token Type VOPRF (P-384, SHA-384)</name>
          <ul spacing="normal">
            <li>Value: 0x0001</li>
            <li>Name: VOPRF (P-384, SHA-384)</li>
            <li>Publicly Verifiable: N</li>
            <li>Public Metadata: N</li>
            <li>Private Metadata: N</li>
            <li>Nk: 48</li>
            <li>Nid: 32</li>
            <li>Reference: <xref target="private-flow"/></li>
            <li>Notes: None</li>
          </ul>
        </section>
        <section anchor="public-token-type">
          <name>Token Type Blind RSA (2048-bit)</name>
          <ul spacing="normal">
            <li>Value: 0x0002</li>
            <li>Name: Blind RSA (2048-bit)</li>
            <li>Publicly Verifiable: Y</li>
            <li>Public Metadata: N</li>
            <li>Private Metadata: N</li>
            <li>Nk: 256</li>
            <li>Nid: 32</li>
            <li>Reference: <xref target="public-flow"/></li>
            <li>Notes: The RSABSSA-SHA384-PSS-Deterministic and
RSABSSA-SHA384-PSSZERO-Deterministic variants are supported</li>
          </ul>
        </section>
      </section>
      <section anchor="media-types">
        <name>Media Types</name>
        <t>This specification defines the following protocol messages, along with their
corresponding media types:</t>
        <ul spacing="normal">
          <li>Token issuer directory: "application/token-issuer-directory"</li>
          <li>TokenRequest: "application/private-token-request"</li>
          <li>TokenResponse: "application/private-token-response"</li>
        </ul>
        <t>The definition for each media type is in the following subsections.</t>
        <section anchor="applicationtoken-issuer-directory-media-type">
          <name>"application/token-issuer-directory" media type</name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>token-issuer-directory</t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>None</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>"binary"</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t>see <xref target="setup"/></t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>this specification</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Additional information:</dt>
            <dd>
              <dl spacing="compact">
                <dt>Magic number(s):</dt>
                <dd>N/A</dd>
                <dt>Deprecated alias names for this type:</dt>
                <dd>N/A</dd>
                <dt>File extension(s):</dt>
                <dd>N/A</dd>
                <dt>Macintosh file type code(s):</dt>
                <dd>N/A</dd>
              </dl>
            </dd>
            <dt>Person and email address to contact for further information:</dt>
            <dd>
              <t>see Authors' Addresses section</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Author:</dt>
            <dd>
              <t>see Authors' Addresses section</t>
            </dd>
            <dt>Change controller:</dt>
            <dd>
              <t>IESG</t>
            </dd>
          </dl>
        </section>
        <section anchor="applicationprivate-token-request-media-type">
          <name>"application/private-token-request" media type</name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>private-token-request</t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>None</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>"binary"</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t>see <xref target="security-considerations"/></t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>this specification</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Additional information:</dt>
            <dd>
              <dl spacing="compact">
                <dt>Magic number(s):</dt>
                <dd>N/A</dd>
                <dt>Deprecated alias names for this type:</dt>
                <dd>N/A</dd>
                <dt>File extension(s):</dt>
                <dd>N/A</dd>
                <dt>Macintosh file type code(s):</dt>
                <dd>N/A</dd>
              </dl>
            </dd>
            <dt>Person and email address to contact for further information:</dt>
            <dd>
              <t>see Authors' Addresses section</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Author:</dt>
            <dd>
              <t>see Authors' Addresses section</t>
            </dd>
            <dt>Change controller:</dt>
            <dd>
              <t>IESG</t>
            </dd>
          </dl>
        </section>
        <section anchor="applicationprivate-token-response-media-type">
          <name>"application/private-token-response" media type</name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>private-token-response</t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>None</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>"binary"</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t>see <xref target="security-considerations"/></t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>this specification</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Additional information:</dt>
            <dd>
              <dl spacing="compact">
                <dt>Magic number(s):</dt>
                <dd>N/A</dd>
                <dt>Deprecated alias names for this type:</dt>
                <dd>N/A</dd>
                <dt>File extension(s):</dt>
                <dd>N/A</dd>
                <dt>Macintosh file type code(s):</dt>
                <dd>N/A</dd>
              </dl>
            </dd>
            <dt>Person and email address to contact for further information:</dt>
            <dd>
              <t>see Authors' Addresses section</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Author:</dt>
            <dd>
              <t>see Authors' Addresses section</t>
            </dd>
            <dt>Change controller:</dt>
            <dd>
              <t>IESG</t>
            </dd>
          </dl>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <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="WellKnownURIs" target="https://www.iana.org/assignments/well-known-uris/well-known-uris.xhtml">
          <front>
            <title>Well-Known URIs</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="OPRF">
          <front>
            <title>Oblivious Pseudorandom Functions (OPRFs) using Prime-Order Groups</title>
            <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, Inc.</organization>
            </author>
            <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <date day="24" month="January" year="2023"/>
            <abstract>
              <t>   An Oblivious Pseudorandom Function (OPRF) is a two-party protocol
   between client and server for computing the output of a Pseudorandom
   Function (PRF).  The server provides the PRF secret key, and the
   client provides the PRF input.  At the end of the protocol, the
   client learns the PRF output without learning anything about the PRF
   secret key, and the server learns neither the PRF input nor output.
   An OPRF can also satisfy a notion of 'verifiability', called a VOPRF.
   A VOPRF ensures clients can verify that the server used a specific
   private key during the execution of the protocol.  A VOPRF can also
   be partially-oblivious, called a POPRF.  A POPRF allows clients and
   servers to provide public input to the PRF computation.  This
   document specifies an OPRF, VOPRF, and POPRF instantiated within
   standard prime-order groups, including elliptic curves.  This
   document is a product of the Crypto Forum Research Group (CFRG) in
   the IRTF.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-voprf-19"/>
        </reference>
        <reference anchor="BLINDRSA">
          <front>
            <title>RSA Blind Signatures</title>
            <author fullname="Frank Denis" initials="F." surname="Denis">
              <organization>Fastly Inc.</organization>
            </author>
            <author fullname="Frederic Jacobs" initials="F." surname="Jacobs">
              <organization>Apple Inc.</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 an RSA-based blind signature protocol.  RSA
   blind signatures were first introduced by Chaum for untraceable
   payments [Chaum83].  A signature that is output from this protocol
   can be verified as an RSA-PSS signature [RFC8017].

   This document is a product of the Crypto Forum Research Group (CFRG)
   in the IRTF.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Source for this draft and an issue tracker can be found at
   https://github.com/chris-wood/draft-wood-cfrg-blind-signatures.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-rsa-blind-signatures-07"/>
        </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="AUTHSCHEME">
          <front>
            <title>The Privacy Pass HTTP Authentication Scheme</title>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <organization>Apple Inc.</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 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>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-auth-scheme-07"/>
        </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="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray">
              <organization/>
            </author>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format.  It was derived from the ECMAScript Programming Language Standard.  JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC5861">
          <front>
            <title>HTTP Cache-Control Extensions for Stale Content</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document defines two independent HTTP Cache-Control extensions that allow control over the use of stale responses by caches.  This  document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5861"/>
          <seriesInfo name="DOI" value="10.17487/RFC5861"/>
        </reference>
        <reference anchor="RFC9111">
          <front>
            <title>HTTP Caching</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 defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages. </t>
              <t>This document obsoletes RFC 7234.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="98"/>
          <seriesInfo name="RFC" value="9111"/>
          <seriesInfo name="DOI" value="10.17487/RFC9111"/>
        </reference>
        <reference anchor="RFC8017">
          <front>
            <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
            <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty">
              <organization/>
            </author>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski">
              <organization/>
            </author>
            <author fullname="J. Jonsson" initials="J." surname="Jonsson">
              <organization/>
            </author>
            <author fullname="A. Rusch" initials="A." surname="Rusch">
              <organization/>
            </author>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document provides recommendations for the implementation of public-key cryptography based on the RSA algorithm, covering cryptographic primitives, encryption schemes, signature schemes with appendix, and ASN.1 syntax for representing keys and for identifying the schemes.</t>
              <t>This document represents a republication of PKCS #1 v2.2 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series.  By publishing this RFC, change control is transferred to the IETF.</t>
              <t>This document also obsoletes RFC 3447.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8017"/>
          <seriesInfo name="DOI" value="10.17487/RFC8017"/>
        </reference>
        <reference anchor="RFC5756">
          <front>
            <title>Updates for RSAES-OAEP and RSASSA-PSS Algorithm Parameters</title>
            <author fullname="S. Turner" initials="S." surname="Turner">
              <organization/>
            </author>
            <author fullname="D. Brown" initials="D." surname="Brown">
              <organization/>
            </author>
            <author fullname="K. Yiu" initials="K." surname="Yiu">
              <organization/>
            </author>
            <author fullname="R. Housley" initials="R." surname="Housley">
              <organization/>
            </author>
            <author fullname="T. Polk" initials="T." surname="Polk">
              <organization/>
            </author>
            <date month="January" year="2010"/>
            <abstract>
              <t>This document updates RFC 4055.  It updates the conventions for using the RSA Encryption Scheme - Optimal Asymmetric Encryption Padding (RSAES-OAEP) key transport algorithm in the Internet X.509 Public Key Infrastructure (PKI).  Specifically, it updates the conventions for algorithm parameters in an X.509 certificate's subjectPublicKeyInfo field.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5756"/>
          <seriesInfo name="DOI" value="10.17487/RFC5756"/>
        </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="HTTP">
          <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="DSS" target="http://dx.doi.org/10.6028/nist.fips.186-4">
          <front>
            <title>Digital Signature Standard (DSS)</title>
            <author fullname="Information Technology Laboratory"/>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date month="July" year="2013"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.186-4"/>
        </reference>
        <reference anchor="CONSISTENCY">
          <front>
            <title>*** BROKEN REFERENCE ***</title>
            <author>
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
      </references>
    </references>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors of this document would like to acknowledge the helpful
feedback and discussions from Benjamin Schwartz, Joseph Salowey, Sofia
Celi, and Tara Whalen.</t>
    </section>
    <section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>This section includes test vectors for the two basic issuance protocols
specified in this document. <xref target="test-vectors-poprf"/> contains test vectors
for token issuance protocol 1 (0x0001), and <xref target="test-vectors-rsa"/> contains
test vectors for token issuance protocol 2 (0x0002).</t>
      <section anchor="test-vectors-poprf">
        <name>Issuance Protocol 1 - VOPRF(P-384, SHA-384)</name>
        <t>The test vector below lists the following values:</t>
        <ul spacing="normal">
          <li>skS: The Issuer private Key, serialized using SerializeScalar from
<xref section="2.1" sectionFormat="of" target="OPRF"/> and represented as a hexadecimal string.</li>
          <li>pkS: The Issuer Public Key, serialized using SerializeElement from
<xref section="2.1" sectionFormat="of" target="OPRF"/> and represented as a hexadecimal string.</li>
          <li>token_challenge: A randomly generated TokenChallenge structure, represented
as a hexadecimal string.</li>
          <li>nonce: The 32-byte client nonce generated according to <xref target="private-request"/>,
represented as a hexadecimal string.</li>
          <li>blind: The blind used when computing the OPRF blinded message, serialized
using SerializeScalar from <xref section="2.1" sectionFormat="of" target="OPRF"/> and represented as a
hexadecimal string.</li>
          <li>token_request: The TokenRequest message constructed according to
<xref target="private-request"/>, represented as a hexadecimal string.</li>
          <li>token_response: The TokenResponse message constructed according to
<xref target="private-response"/>, represented as a hexadecimal string.</li>
          <li>token: The output Token from the protocol, represented as a hexadecimal
string.</li>
        </ul>
        <artwork><![CDATA[
skS: 08f572b675c83bf83c8037e503816119409a21d26e097414678eb44c625f
cddd9b2e4eb16dbccc975c5ae745ffa3f4fa
pkS: 0371b63695ddf79655f770ced74c17938d60c9cb9d8b9537614072b001ff
c6085e80f310cdb4475487736f0f9d1406c7c9
token_challenge: 0001000e6973737565722e6578616d706c6500000e6f7269
67696e2e6578616d706c65
nonce:
1a177bae66ea3341c367c160c635aa52daef9f105bb1240d06a063ae12e9798a
blind: 1e46366a7b619aea7d7e24d2b853f5ddc64524eb5a78f4e3af108f0291
9827cbdea2f8d753869ab9229aeb7fe9988763
token_request: 00017f023d788d4089a5f76f908ce26d18bb3b8ee826223b8a
1df70a052e092aaf235c44c6f1e57f81d17d31632d090d260dc531
token_response: 03c1854b0cb631ceff11079299fdc5c8d9f94c6d7d6dbc862
b259916a4dba69e39ac38817fafaa6e48842c610d41bf0bb6fa3ae6e3025acf22
38c0ef02e0b628437944cdbd0207c86bd9c3025fcacbd0e520576c7ad9bb9cc18
46687168e7c5226bdfd0c89be908d5d90eb60e5533045358e3063b6d3a24cc2f5
5891cded1a7642ef945bcec888e92e15d5ecdb431fdc6d
token: 00011a177bae66ea3341c367c160c635aa52daef9f105bb1240d06a063
ae12e9798ac994f7d5cdc2fb970b13d4e8eb6e6d8f9dcdaa65851fb091025dfe1
34bd5a62a7f13956db7526669425e8eb1128273c17972b5f16a9bc835a9c9f357
72a2add9f5e1bb3ab71770ada81faf1af0fbdfa476fc92a3ff25fac14639b7fe3
4365118ae2ff55a2399e1580bec9aa759659317
]]></artwork>
      </section>
      <section anchor="test-vectors-rsa">
        <name>Issuance Protocol 2 - Blind RSA, 2048</name>
        <t>The test vector below lists the following values:</t>
        <ul spacing="normal">
          <li>skS: The PEM-encoded PKCS#8 RSA Issuer Private Key used for signing tokens,
represented as a hexadecimal string.</li>
          <li>pkS: The DER-encoded SubjectPublicKeyInfo object carrying the Issuer Public
Key, as described in <xref target="public-issuer-configuration"/>, represented as a
hexadecimal string.</li>
          <li>token_challenge: A randomly generated TokenChallenge structure, represented
as a hexadecimal string.</li>
          <li>nonce: The 32-byte client nonce generated according to <xref target="public-request"/>,
represented as a hexadecimal string.</li>
          <li>blind: The blind used when computing the blind RSA blinded message,
represented as a hexadecimal string.</li>
          <li>salt: The randomly generated 48-byte salt used when encoding the blinded
token request message, represented as a hexadecimal string.</li>
          <li>token_request: The TokenRequest message constructed according to
<xref target="public-request"/>, represented as a hexadecimal string.</li>
          <li>token_request: The TokenResponse message constructed according to
<xref target="public-response"/>, represented as a hexadecimal string.</li>
          <li>token: The output Token from the protocol, represented as a hexadecimal
string.</li>
        </ul>
        <artwork><![CDATA[
skS: 2d2d2d2d2d424547494e2050524956415445204b45592d2d2d2d2d0a4d49
4945765149424144414e42676b71686b6947397730424151454641415343424b6
3776767536a41674541416f49424151444c4775317261705831736334420a4f6b
7a38717957355379356b6f6a41303543554b66717444774e38366a424b5a4f764
57245526b49314c527876734d6453327961326333616b4745714c756b440a556a
35743561496b3172417643655844644e44503442325055707851436e6969396e6
b492b6d67725769744444494871386139793137586e6c5079596f784f530a646f
6558563835464f314a752b62397336356d586d34516a755139455961497138337
1724450567a50335758712b524e4d636379323269686763624c766d42390a6a41
355334475666325a6c74785954736f4c364872377a58696a4e394637486271656
76f753967654b524d584645352f2b4a3956595a634a734a624c756570480a544f
72535a4d4948502b5358514d4166414f454a4547426d6d4430683566672f43473
475676a79486e4e51383733414e4b6a55716d3676574574413872514c620a4530
742b496c706641674d4241414543676745414c7a4362647a69316a506435384d6
b562b434c6679665351322b7266486e7266724665502f566344787275690a3270
316153584a596962653645532b4d622f4d4655646c485067414c7731785134576
57266366336444373686c6c784c57535638477342737663386f364750320a6359
366f777042447763626168474b556b5030456b62395330584c4a5763475347356
1556e484a585237696e7834635a6c666f4c6e7245516536685578734d710a6230
644878644844424d644766565777674b6f6a4f6a70532f39386d4555793756422
f3661326c7265676c766a632f326e4b434b7459373744376454716c47460a787a
414261577538364d435a342f5131334c762b426566627174493973715a5a776a7
264556851483856437872793251564d515751696e57684174364d7154340a5342
5354726f6c5a7a7772716a65384d504a393175614e4d6458474c63484c4932367
3587a76374b53514b42675144766377735055557641395a325a583958350a6d49
784d54424e6445467a56625550754b4b413179576e31554d444e63556a71682b7
a652f376b337946786b68305146333162713630654c393047495369414f0a354b
4f574d39454b6f2b7841513262614b314d664f5931472b386a7a4258557042733
9346b353353383879586d4b366e796467763730424a385a6835666b55710a5732
306f5362686b686a5264537a48326b52476972672b5553774b426751445a4a4d6
e7279324578612f3345713750626f737841504d69596e6b354a415053470a7932
7a305a375455622b7548514f2f2b78504d376e433075794c494d44396c61544d4
8776e3673372f4c62476f455031575267706f59482f4231346b2f526e360a6675
77524e3632496f397463392b41434c745542377674476179332b6752775974534
33262356564386c4969656774546b6561306830754453527841745673330a6e35
6b796132513976514b4267464a75467a4f5a742b7467596e576e5155456757385
0304f494a45484d45345554644f637743784b7248527239334a6a7546320a4533
77644b6f546969375072774f59496f614a5468706a50634a62626462664b792b6
e735170315947763977644a724d6156774a6376497077563676315570660a5674
4c61646d316c6b6c7670717336474e4d386a6e4d30587833616a6d6d6e6665573
9794758453570684d727a4c4a6c394630396349324c416f4742414e58760a7567
5658727032627354316f6b6436755361427367704a6a5065774e526433635a4b3
97a306153503144544131504e6b7065517748672f2b36665361564f487a0a7941
7844733968355272627852614e6673542b7241554837783153594456565159564
d68555262546f5a6536472f6a716e544333664e6648563178745a666f740a306c
6f4d4867776570362b53494d436f6565325a6374755a5633326c6349616639726
2484f633764416f47416551386b3853494c4e4736444f413331544535500a6d30
31414a49597737416c5233756f2f524e61432b78596450553354736b75414c787
86944522f57734c455142436a6b46576d6d4a41576e51554474626e594e0a5363
77523847324a36466e72454374627479733733574156476f6f465a6e636d504c5
0386c784c79626c534244454c79615a762f624173506c4d4f39624435630a4a2b
4e534261612b6f694c6c31776d4361354d43666c633d0a2d2d2d2d2d454e44205
0524956415445204b45592d2d2d2d2d0a
pkS: 30820156304106092a864886f70d01010a3034a00f300d06096086480165
030402020500a11c301a06092a864886f70d010108300d0609608648016503040
2020500a2030201300382010f003082010a0282010100cb1aed6b6a95f5b1ce01
3a4cfcab25b94b2e64a23034e4250a7eab43c0df3a8c12993af12b111908d4b47
1bec31d4b6c9ad9cdda90612a2ee903523e6de5a224d6b02f09e5c374d0cfe01d
8f529c500a78a2f67908fa682b5a2b430c81eaf1af72d7b5e794fc98a31392768
79757ce453b526ef9bf6ceb99979b8423b90f4461a22af37aab0cf5733f7597ab
e44d31c732db68a181c6cbbe607d8c0e52e0655fd9996dc584eca0be87afbcd78
a337d17b1dba9e828bbd81e291317144e7ff89f55619709b096cbb9ea474cead2
64c2073fe49740c01f00e109106066983d21e5f83f086e2e823c879cd43cef700
d2a352a9babd612d03cad02db134b7e225a5f0203010001
token_challenge:
d0bea78c3b452a4ccd4484e4c6f1e73d3c494be58a5a81c7c97f12fe5f9bb03c
nonce:
23b29061bc9d3cf3637e067c47abe5122d355e9d681a3fc249fd4d4dd4ae7d61
blind: 1206c0f56241aac4716329f2eb1423dea369eaf05ce759c3ca6426c415
b44f90d4466ba4f57993b0ed753a156aa067a04d5eb9cd27ab930fdedf46a3c5f
d46fed554849fd03df605602b33ed5e70d6266a74dd067563cab0d0f5fae416df
b862b32a1254d60c5add16bbc6382273c75599f50abbe1b0ae9e63a1384a50738
5e492de216fdb9477ab0a4a6843d8068fd533b3014ca2aa127045bc99bb40311c
ed536f28896bcd222b9bc1ba10ade0fa6b1e355af27f00bb189d37142c2976ebb
9c52da0372c3c1b75d030ab736a2889372e55dcd5970fce79cdddd10abf37dd60
ad2e1168081aab519041346cef7b4f4a8052d1c67cf83cf36d7bfac2111a3e00
salt: 0660138f93e216110f176800079b11f2da8ef31ab539ecee16a6c012085
79a61f043c7c8253f830ad38b06b8aa4314aa
token_request: 0002f84040a643a8297d0c6f77c51fe71ab33ba77d1113345f
12d1c6224376b0ae8f332e8df4557c06f9c014ed859dbe5f87cd7811cbf3de6fa
9c680447b28d30cd379776c86dc16d7bfe96336321374d15cd728321fcfd939ea
ef01ebcfe52a72ec0131fcecd447818339a6acde3e3d9034d50e2d88c2360a506
df1fb33f95d9bb84d5af1870f00576c9b47cf949f1f5bd57b7b334fefa3cf301a
52e08c449d198ec8e391b39de3d4d6a121b5288a4ec90df722b43cb13c50d58ce
52d78916ac4bb4d3597c7c816edd2997383fb59b0e565c36b9c19b63deea7538a
c9e5d60e3e28b03b651edb6b3e0c647b327b153f61176ee6d2e1f3708ba946ecd
447610b2c8347
token_response: 67393299cc66da3b450f1c73836a918e543392ce11ccca9a8
a26eb2d9b8aa3f31825d7b89e7f0dd07bdc2770a39d1d0cda6bf597e4585468d4
bc608268b7786cb86be017913d284be7d040069c667dbb2ce49fe87b5e936e5b6
8f66f34d7828f281ea2a5a913cdf97b4b5e60153f9f2fcfebe4099c3bbc2f9d0c
bd63197bf30a451c93f7677665c46112a2296b5e359589cb66c13d2bb6a49b985
89bb3580225bad2014fc433c1801328c1f064fee894cb037613dccc33af197d71
119b572f9fc32dcd614de2008ebfaafad393ff4f95b9d91662ae4a7952f13e958
7aa87810f586b03a14b096ea949da8d4e1d56de7a31a5bd93e921f3652a4d63ab
d70f2d6d
token: 000223b29061bc9d3cf3637e067c47abe5122d355e9d681a3fc249fd4d
4dd4ae7d61a982f3054cb8cd7dd827eb06f6c7bbd05b1f65a8e6e2968895c0ed1
642be52faf861220ad4241ee0e33eb4a486a32f05af05ee33fcfdd1104c665eb8
27c2062154c68677136693e8301583932d67445e8d073eb2dc2593583b0111e36
92129fa6bfa50f556d284e885ea8113a4500619d1559a00739774c4bb9b32adb5
43ee67a0db240ae44e6e84a5bedbe44d3db69b4859e6a36c5a51fa7da5deb13fe
38b3a04335c7e3b4ca495692d4efdec8272f9a718c4dd86a661161b9f26729fe4
87b35d2ccb0729adcfaec1393c64186002641177853e3af7f64f2384c81f3765c
d572d618771a2b845647b4a4a167d51df8b49abe412310a6f1cdcdaea1efe6deb
97ca9cba9b5d90798b2399effeae0ff66a6a67b2f69961b4b34db5f5c79d5e48c
67ace06ba2836197fdb98bb6d276d1df03a006f9f8b06e09c7db7f473fb4736cc
]]></artwork>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
JKKHCbLzpFdk4Xv+7PDi5q9u+eybv2j4PEjl24V8ajbfxmFhdEhXY4FYh97W
fDuf/v8nyzU1gW+j8LthYrtdHNi+P0R12/dGuvDtszd9wBgECvPz1BaP3KaG
2++yXvcdtx8N9N/Km9r6YF8h2ZXJDYsk9BWW0XZ3z23Ui2+6r3C0guCkM1ZR
TNS1dwxru0rkVdtzggB2e4PMaXL7hsVKbVfeoWuQOr+Qq/YJu18q5Clx+Hrw
0tjubDX+52MiK9XRmG2FjnsUNrZZyfVaNzCmgVB3rl5TfRuO2Nbd9pByLTS7
kvQ7wuQ9YMC+Z7x799z0o8t3tnKxcRNtvxdqm8K7jSMTWffvihoE0XbrjTZI
RbdBejjeIfX275AaKNho2zDRfkOPeygrbQoPXbWla2pHgj78xp3nsvCt7tx2
09TkQZLfORxDbF31VV6gJnG70xtcH21A8ItmiJjtyQ78Qs7BwIduVZZtnXrw
ZSvHi45Jo8LQod2rs6BrF+GOss2u7LwDFEl1C9xndEHdTrzLRrc3ytom+NfD
3O113xfWnLHVSkA8xL7td4oHyS17FRiaF/qdS3TZKO++Vor8qXKozohObCfF
JpfoetOu6Vdom9H3tisMWtJdq367m9V36su2T//KNv2tMpZpcG+/oAo1Ne2B
e3ri3fZ+7yfH47V97cavL7j3DFPcmA0uk79+lCpWHbs2P4GRvjw5uT+BAiDi
TV6cnEweciub7UQNRjbWufvQ/3j08vn4QdG343dTdd9k2CrttUE/IZXDBdnW
kD1M2V1GNatr03nftgEM2CS22W7rvU7Xlpu1bV6wbRRXfMOfX2lfXPILDF0a
sLOH7LY6z7XkQIvLdqOem9QNIBS7xO3X4vsvpYqxkzINVdymcTXHdogz2Qzn
7K3epiVYg9A/MHNg58JyuQIKdqh2ZXvVmqZrWNm3yT5oF2q7Brqvb8+1XC2G
xNhv3lpbNt/bbaNqtVldudEBaX6pL02zgfmyi5HX4JCCG0m51WYAwgW7O1uH
iJSw73u5USeRG4n9qmJoNJ/erQN3br81BbcubhKIrm/VEd13YPbvFni/d+z8
Z+rYOYFRth07h4Nmmmsbd4S3h/k/u3EHo7mujt8bd65t3LnW7v479+9c27jS
O6xP61ux79ykbeWTmjVEu1k/+Orgp3RrjHHxr9+lEf7mujTsJoorK4HmtyZh
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

-->

</rfc>
