<?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-07" 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-07"/>
    <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="2022" month="December" day="08"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document specifies two variants of the the two-message issuance protocol
for Privacy Pass tokens: one that produces tokens that are privately
verifiable using the issuance private key, and another that produces tokens
that are publicly verifiable using the issuance public key.</t>
    </abstract>
  </front>
  <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 ensuring that client privacy leaks.
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 provides authorization tokens to services
across the Internet, in return for authorization.</li>
        <li>Issuer: A service that produces Privacy Pass tokens to clients.</li>
        <li>Private Key: The secret key used by the Issuer for issuing tokens.</li>
        <li>Public Key: The public key used by the Issuer for issuing and verifying
tokens.</li>
      </ul>
      <t>Unless otherwise specified, this document encodes protocol messages in TLS
notation from <xref target="TLS13"/>, Section 3. Moreover, all constants are in network byte order.</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 URI: A token request URL for generating access tokens.
For example, an Issuer URL might be https://issuer.example.net/example-token-request.
This parameter uses resource media type "text/plain".</li>
        <li>Issuer Public Key values: An Issuer Public Key for an 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.</t>
      <table>
        <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 URI resource 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 following fields and corresponding raw values.</t>
      <table>
        <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/example-token-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/json"
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>
    </section>
    <section anchor="token-challenge-requirements">
      <name>Token Challenge Requirements</name>
      <t>Clients receive challenges for tokens, as described in <xref target="AUTHSCHEME"/>.
The basic token issuance protocols described in this document can be
interactive or non-interactive, and per-origin or cross-origin.</t>
    </section>
    <section anchor="private-flow">
      <name>Issuance Protocol for Privately Verifiable Tokens</name>
      <t>The Privacy Pass issuance protocol is a two message protocol that takes
as input a TokenChallenge from the redemption protocol <xref section="2.1" sectionFormat="comma" target="AUTHSCHEME"/>
and produces a Token <xref section="2.2" sectionFormat="comma" target="AUTHSCHEME"/>, as shown in the figure below.</t>
      <artwork><![CDATA[
   Origin            Client                   Issuer
                      (pkI)                 (skI, pkI)
                   +------------------------------------\
TokenChallenge ----> TokenRequest ------------->        |
                   |                       (evaluate)   |
     Token    <----+     <--------------- TokenResponse |
                   \------------------------------------/
]]></artwork>
      <t>Issuers provide a Private and Public Key, denoted skI and pkI, 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 name, identifying the Issuer. This is typically a host name that
can be used to construct HTTP requests to the Issuer.</li>
        <li>Issuer Public Key pkI, 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>
      <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, 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 nonce and challenge_digest 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; /* Token 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> 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>. Ne is as defined in <xref section="4" sectionFormat="comma" target="OPRF"/>.</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, 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 = /example-token-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>
        <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.</t>
      </section>
      <section anchor="private-response">
        <name>Issuer-to-Client Response</name>
        <t>Upon receipt of a TokenRequest, the Issuer 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 messaged, 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>,
where Ns is as defined in <xref section="4" sectionFormat="comma" target="OPRF"/>.</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; /* Token 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>To verify a token, a verifier creates a VOPRF context using the Issuer Private Key,
evaluates the token contents, and compares the result against the token authenticator
value, as follows:</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 skI and
pkI, respectively, used to produce tokens. 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(concat(0x0001, 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. It differs from the previous variant
in that the output tokens are publicly verifiable by anyone with the Issuer public
key.</t>
      <t>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 name, identifying the Issuer. This is typically a host name that
can be used to construct HTTP requests to the Issuer.</li>
        <li>Issuer Public Key pkI, 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.</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, nonce, challenge_digest, token_key_id)
blinded_msg, blind_inv = rsabssa_blind(pkI, token_input)
]]></artwork>
        <t>The rsabssa_blind function is defined in <xref section="5.1.1." sectionFormat="comma" target="BLINDRSA"/>.
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; /* Token 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> 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,
with the TokenRequest as the content. The media type for this request
is "application/private-token-request". An example request is shown below, where
Nk = 512.</t>
        <artwork><![CDATA[
:method = POST
:scheme = https
:authority = issuer.example.net
:path = /example-token-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>
        <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, which will forward the error to the client.</t>
      </section>
      <section anchor="public-response">
        <name>Issuer-to-Client Response</name>
        <t>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 = rsabssa_blind_sign(skI, TokenRequest.blinded_msg)
]]></artwork>
        <t>This 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 rsabssa_blind_sign function is defined in <xref section="5.1.2." sectionFormat="comma" target="BLINDRSA"/>.
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 = rsabssa_finalize(pkI, nonce, blind_sig, blind_inv)
]]></artwork>
        <t>The rsabssa_finalize function is defined in <xref section="5.1.3." sectionFormat="comma" 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; /* Token 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 rsabssa_finalize function fails, the Client aborts the protocol.</t>
      </section>
      <section anchor="token-verification-1">
        <name>Token Verification</name>
        <t>To verify a token, a verifier checks 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"/>.</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"/>.</t>
      <t>Beyond these considerations, it is worth highlighting the fact that Client TokenRequest
messages contain truncated token key IDs. This is done to minimize the chance that an Issuer
can use distinct keys for targeting specific users. Since the key ID is truncated
to a single byte, an Issuer can partition the set of Clients into at most 256 different
anonymity sets. On top of this key ID space, Clients SHOULD apply some form of key
consistency mechanism to help ensure they are not being given unique keys; see
<xref target="CONSISTENCY"/> for more details.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA considerations</name>
      <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>'xxx' 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</name>
        <t>This document updates the "Token Type" Registry from <xref section="5.2" sectionFormat="comma" target="AUTHSCHEME"/> with the following values.</t>
        <table anchor="tokentype-values">
          <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>
              <th align="left">Notes</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x0001</td>
              <td align="left">VOPRF (P-384, SHA-384)</td>
              <td align="left">N</td>
              <td align="left">N</td>
              <td align="left">N</td>
              <td align="left">48</td>
              <td align="left">32</td>
              <td align="left">
                <xref target="private-flow"/></td>
              <td align="left">None</td>
            </tr>
            <tr>
              <td align="left">0x0002</td>
              <td align="left">Blind RSA (2048-bit)</td>
              <td align="left">Y</td>
              <td align="left">N</td>
              <td align="left">N</td>
              <td align="left">256</td>
              <td align="left">32</td>
              <td align="left">
                <xref target="public-flow"/></td>
              <td align="left">The RSABSSA-SHA384-PSS-Deterministic and RSABSSA-SHA384-PSSZERO-Deterministic variants are supported</td>
            </tr>
          </tbody>
        </table>
      </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>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="applicationprivate-token-request-media-type">
          <name>"application/private-token-request" media type</name>
          <dl>
            <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>only "8bit" or "binary" is permitted</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>
                <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>
            <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>only "8bit" or "binary" is permitted</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>
                <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="HTTP-Authentication" target="https://datatracker.ietf.org/doc/html/draft-pauly-privacypass-auth-scheme-00">
          <front>
            <title>The Privacy Pass HTTP Authentication Scheme</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </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="28" month="November" year="2022"/>
            <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-16"/>
        </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="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="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="31" month="January" 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.

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/tfpauly/privacy-proxy.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-pauly-privacypass-auth-scheme-00"/>
        </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="17" month="October" 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-08"/>
        </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 encoded OPRF private key, serialized using SerializeScalar from <xref section="2.1" sectionFormat="of" target="OPRF"/> and
represented as a hexadecimal string.</li>
          <li>pkS: The encoded OPRF public key, serialized using SerializeElement from <xref section="2.1" sectionFormat="of" target="OPRF"/> and
represented as a hexadecimal string.</li>
          <li>challenge: A random challenge digest, 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_request: 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: 0177781aeced893dccdf80713d318a801e2a0498240fdcf650304bbbfd0f8d3b5c0
cf6cfee457aaa983ec02ff283b7a9
pkS: 022c63f79ac59c0ba3d204245f676a2133bd6120c90d67afa05cd6f8614294b7366
c252c6458300551b79a4911c2590a36
challenge:
a5d46383359ef34e3c4a7b8d1b3165778bffc9b70c9e6a60dd14143e4c9c9fbd
nonce: 5d4799f8338ddc50a6685f83b8ecd264b2f157015229d12b3384c0f199efe7b8
blind: 0322fec505230992256296063d989b59cc03e83184eb6187076d264137622d202
48e4e525bdc007b80d1560e0a6f49d9
token_request: 00011a02861fd50d14be873611cff0131d2c872c79d0260c6763498a2
a3f14ca926009c0f247653406e1d52b68d61b7ed2bac9ea
token_response: 038e3625b6a769668a99680e46cf9479f5dc1e86d57164ab3b4a569d
dfc486bf1485d4916a5194fdc0518d3e8444968421ba36e8144aa7902705ff0f3cf40586
3d69451a2a7ba210cc45760c2f1a6045134d877b39e8bcbbf920e5de4a3372557debf211
765cd969976860bc039f9082d6a3e03f8e891246240173d2cf3d69a4613b0f8415979029
22e74c7a1f2e4639e4
token: 00015d4799f8338ddc50a6685f83b8ecd264b2f157015229d12b3384c0f199efe
7b8742cdfb0ed756ea680868ef109a280a393e001d2fa56b1be46ecb31fa25e76731a5b1
d698ea7ab843b8e8a71ed9b2fffa70457a43a8fc687939424b29a7554b40fde130ab7a82
2715909cb73f99a45b640ca1c85180ba9ca1a40bab8b664406a34bcbc63b5e2e5c455cea
00001a968f7
]]></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 private key used for signing tokens, represented
as a hexadecimal string.</li>
          <li>pkS: The DER-encoded SubjectPublicKeyInfo object carrying the public key corresponding
to skS, as described in <xref target="public-issuer-configuration"/>, represented as a hexadecimal string.</li>
          <li>challenge: A random challenge digest, 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: 2d2d2d2d2d424547494e2050524956415445204b45592d2d2d2d2d0a4d494945765
149424144414e42676b71686b6947397730424151454641415343424b63776767536a416
74541416f49424151444c4775317261705831736334420a4f6b7a38717957355379356b6
f6a41303543554b66717444774e38366a424b5a4f76457245526b49314c527876734d645
3327961326333616b4745714c756b440a556a35743561496b3172417643655844644e445
03442325055707851436e6969396e6b492b6d67725769744444494871386139793137586
e6c5079596f784f530a646f6558563835464f314a752b62397336356d586d34516a75513
94559614971383371724450567a50335758712b524e4d636379323269686763624c766d4
2390a6a41355334475666325a6c74785954736f4c364872377a58696a4e3946374862716
5676f753967654b524d584645352f2b4a3956595a634a734a624c756570480a544f72535
a4d4948502b5358514d4166414f454a4547426d6d4430683566672f43473475676a79486
e4e51383733414e4b6a55716d3676574574413872514c620a4530742b496c706641674d4
241414543676745414c7a4362647a69316a506435384d6b562b434c6679665351322b726
6486e7266724665502f566344787275690a3270316153584a596962653645532b4d622f4
d4655646c485067414c773178513457657266366336444373686c6c784c5753563847734
2737663386f364750320a6359366f777042447763626168474b556b5030456b623953305
84c4a57634753473561556e484a585237696e7834635a6c666f4c6e72455165366855787
34d710a6230644878644844424d644766565777674b6f6a4f6a70532f39386d455579375
6422f3661326c7265676c766a632f326e4b434b7459373744376454716c47460a787a414
261577538364d435a342f5131334c762b426566627174493973715a5a776a72645568514
83856437872793251564d515751696e57684174364d7154340a53425354726f6c5a7a777
2716a65384d504a393175614e4d6458474c63484c49323673587a76374b53514b4267514
4766377735055557641395a325a583958350a6d49784d54424e6445467a56625550754b4
b413179576e31554d444e63556a71682b7a652f376b337946786b6830514633316271363
0654c393047495369414f0a354b4f574d39454b6f2b7841513262614b314d664f5931472
b386a7a42585570427339346b353353383879586d4b366e796467763730424a385a68356
66b55710a5732306f5362686b686a5264537a48326b52476972672b5553774b426751445
a4a4d6e7279324578612f3345713750626f737841504d69596e6b354a415053470a79327
a305a375455622b7548514f2f2b78504d376e433075794c494d44396c61544d48776e367
3372f4c62476f455031575267706f59482f4231346b2f526e360a667577524e3632496f3
97463392b41434c745542377674476179332b675277597453433262356564386c4969656
774546b6561306830754453527841745673330a6e356b796132513976514b4267464a754
67a4f5a742b7467596e576e51554567573850304f494a45484d45345554644f637743784
b7248527239334a6a7546320a453377644b6f546969375072774f59496f614a5468706a5
0634a62626462664b792b6e735170315947763977644a724d6156774a637649707756367
6315570660a56744c61646d316c6b6c7670717336474e4d386a6e4d30587833616a6d6d6
e66655739794758453570684d727a4c4a6c394630396349324c416f4742414e58760a756
75658727032627354316f6b6436755361427367704a6a5065774e526433635a4b397a306
153503144544131504e6b7065517748672f2b36665361564f487a0a79417844733968355
272627852614e6673542b7241554837783153594456565159564d68555262546f5a65364
72f6a716e544333664e6648563178745a666f740a306c6f4d4867776570362b53494d436
f6565325a6374755a5633326c63496166397262484f633764416f47416551386b3853494
c4e4736444f413331544535500a6d3031414a49597737416c5233756f2f524e61432b785
96450553354736b75414c78786944522f57734c455142436a6b46576d6d4a41576e51554
474626e594e0a536377523847324a36466e72454374627479733733574156476f6f465a6
e636d504c50386c784c79626c534244454c79615a762f624173506c4d4f39624435630a4
a2b4e534261612b6f694c6c31776d4361354d43666c633d0a2d2d2d2d2d454e442050524
956415445204b45592d2d2d2d2d0a
pkS: 30820152303d06092a864886f70d01010a3030a00d300b060960864801650304020
2a11a301806092a864886f70d010108300b0609608648016503040202a20302013003820
10f003082010a0282010100cb1aed6b6a95f5b1ce013a4cfcab25b94b2e64a23034e4250
a7eab43c0df3a8c12993af12b111908d4b471bec31d4b6c9ad9cdda90612a2ee903523e6
de5a224d6b02f09e5c374d0cfe01d8f529c500a78a2f67908fa682b5a2b430c81eaf1af7
2d7b5e794fc98a3139276879757ce453b526ef9bf6ceb99979b8423b90f4461a22af37aa
b0cf5733f7597abe44d31c732db68a181c6cbbe607d8c0e52e0655fd9996dc584eca0be8
7afbcd78a337d17b1dba9e828bbd81e291317144e7ff89f55619709b096cbb9ea474cead
264c2073fe49740c01f00e109106066983d21e5f83f086e2e823c879cd43cef700d2a352
a9babd612d03cad02db134b7e225a5f0203010001
challenge:
3f5a1c30d13f860622458ce836d8af325378054370fe8a3d771eebd67d4d810d
nonce: c0fcbbb243d8f5d4f661dbdefca95879b39aeccb77b7db731b59c09688773125
blind: 04d00c700128b4b201b4bec4f05d942bc903d49c26568b5956e0827590d2e4b43
570105ae492f655d41a3d68f1cc6a9a2895c36fd45c88239257f2e6cee5bd88e7d870f35
67069d78f8b85947c7ab123b16c9f3b76d856112802dd0fefa800a9c3807fbb5d949481b
4f7a21da0269f17611b93dfa7197e87ef9c1ef9c2fd0f86119917cdf01284038435f2df3
f8ae2935ae0ef5440b3b4ac12fed83a03bc494abaa87241d624d2dcb0c6a64422eb63dbf
ba0193161648e5b2afbdf3140901840c7d08a0e2953320fffa09641500122ba81c5907e7
ebd4d2384221ddb99439c2465138b98348b58a5f89b4e05b70856a270e1f5308512e368c
fe6dfe4cf3759ed
salt: 4daf07bc96a829736ce6386a4d3ed988192ea4f0acb3ed715dca2ae688c16ad346
ee5e2b3dd26eb2868639a778e3bc5d
token_request: 0002ca832fffabdd44e2cd54e5e24d74519d297608aec9ab88e26b732
adcb382781e7e2657c8b94751b9fa6b2ed02cec383f8cd04e9627d5b62a7f1b7ea16b81e
46f35637cca49f8990d5359f8a7dcac1ba58fb685d4b32a67621d368cc112197d4f84ee5
241c359299cb5fc41182bd65bba112f35a4073d1231290447fb884888ba84eb5b4602534
787aa1e167bc1ddcceb7fb5ad43e2b242fd4b4939349897cfb911cf0f3785847edaeaca6
350c16cb05b7882ec076a3adde7c361f54d6eb67ec239aeafe8a4816b29e4c6aa8bf2873
ba36ec6e2b9596aa508b5e34543a469286be2404f1f481f6a274a2afb429d62377f7ab6d
e56379d2c42f7205e3bf1c74d3159
token_response: 6e7d5334765bea44ea43b81ae8f41334fdac47b3dfaaeb2c3b99f42a
67d8239592ac4fa129a938e139bf052d85804bdaa90f7f54fdfa34d6efeaea0ccc15a500
fb2987b534d0558e8d32df68b3533f6cbc953dabcfff2ef6b6af336c1128f607f0796190
6a2fed919691340e751a8e2173e674569f7e4beb7ad0ee5c65ce82ad477d3e44b3755bcd
0f168ab85ce662d3f87c5634be036382d6ad4ab870ab975e8bffd0b95bcf457dc83337ff
ea85b7c77d44e5cb4bddc5aecfc958cc822cc53ded3da699af86bfad3054fe49da8eeb55
162e444a3b4d438f9e3cbadd50cba56b4f3f0718a65e7d8dfc40762cdb9962edc731f6a7
ec8641cbf98a0ec9cdf8b7f6
token: 0002c0fcbbb243d8f5d4f661dbdefca95879b39aeccb77b7db731b59c09688773
125ad76ab53adc2ca44e4eaae3d71b9bf3fc9332122faeef07cb70d9e04da68c6a7ca572
f8982a9ca248a3056186322d93ca147266121ddeb5632c07f1f71cd27080d1f816364e5d
4d516d2f3e80366e56edc1de4ba0d7aed2675c15156d774b311778091bf5f2aea9926156
2289459a41c5739dec6dc42447744fe07c53c9d090f053263d019255cdfc27739132bd68
21ad49f1a98db6873319d04c04703d74a8fe1d0806b2a25b46246c5bb2ff927463b03152
589068389df89494c6d82f3b92be773a9fe6bc1fed9cbf26bdfbae1ff369f20d0267cdd2
0f3bcba30f8b0c0e9d9a1a39a40156b0614030d5099aa36f085347681aef502f3d081b36
cd79f7ea14df1ca9694320fc44ccbc7c5d90aeedc915af3ac11a3baf562d38c8213e39f6
731fa5e701697d0bfbfcfc83b447945b351115a20770370226b52a19df939f3080e
]]></artwork>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
tu6pWwglXYOyerFeQg8vjZ5Kb3VzZby9lXm5un01k9P53kSE3dJ6rUGommFY
az7bX1rNn2+Hx4kz2OaBAUcV7i4ZqFaYEupn5d6v/AUIk56eLiF1JK2472/4
dACPMVXn9LHS+9fTxyfCXW+dTJgUvaI4f7OAWjrKrXo4WMFH26uvXm09GeFJ
LsjhiJZkLOW192BqZto7wSWv//Waqc16eOUDf70Wr48Od/16y+X3/8KInlOQ
Vg2Ioy2N28raa8KVwZ/z1aGzU20VD2gbynqAmywUnDuP3zC++XYX9zJwj2Q4
ZYR/qUesQu68Ijh/m4IdeEZCxBuz2jmdsHeKLLaTivt8dK+feW/4IC2Y2ub8
dx9DKsq0tm5OLZaY9WoxJzzwlvK6IWpb9p9O5r9J1m6p1oStjMGvM5qPpa1J
gZ5Zf/QM99hwqk1lLc6ik/55+tjdop6vL0uMuYPr6aaonYhp8cR+abxezpzv
t5DekTMIPDQyuCTvero63w2vB2gNpqj1b9DI3tEf/+BJjfixYsy6XM9WUzjP
ob62xl9T1gMWrxaiXl9dLZYu9i6boGUTIRvwFFZ94LUTAbcyQedqTMXClDJ2
aOvEhAsTHAfRnlwYI3jGLbLMEtQkNTPYzoHjVj+kcOkPBrG3AkUBOSyHj0B7
j2dIugyd38EgzH9eD1ysWqyh3rPF4gIPXRhEuL///e/Ce2UT+r1tp7J35O19
bEwC4rSjDSz0yPtROMt4JVob2et5ju/Dg80v8CBnf/RwMpkcf73Xfv/m4LeN
9G/9SPbvnwQ+kAmN6gyY1XrO2uWkZOkwmgLNzprazO2/1Yv5ns2mGIBmC2UT
V5fSen29w31Ddb096a/edmQ23O/m/0LUhnnT9QUEAeaeDSIWfpqyUuKykUFm
4m6Alg4mRRRwKYlVxrvnAFRmfmZslMBktkgjxN0mj8fsBsrmqfa+xlQskGmc
yyAfQFQ+/u7ZN6d3v7n/yCXf7yw0MTtqXEdbGth2CBtTjGGmAxXC5ihSsdgG
O0JiCAb2l1z+gYh3CJh+hjGI7Qjrm58tP7YK8n2eb/Py7/sc+JmD7K8+a7Lx
wwpx5c2Oast27cDiGELNtjrVfeNqHvICWYek+V8ho5Fuql5IFjM5kWtzeWWF
3I2AzLPjfe8Kw0nw5o1Vxi7/aIZ96wMhI0OXhjVuxSJh1mKw1knjKTzvsWPo
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
A1c3FScX0NkkCH9vSv7elPyv2pRsO2VN+Ww6s8njtVxawLKzN/f+BmaLPbr+
ZVNy+8AW3jsbeWJ3I8/7dY08F/fhUDfjPq/NXZnjbbLqkIAD1e3bWRbrAdDU
l9OV07cB87od2p0Ov6Wd9o4WWkffRhzb6o5tL+hjQUrYgZTfuz6fuOuzAbI+
RdNn1A1pV7Kt85sF0lZNWloc5G1QdKc7A4y8AwJX72147FawaNJV5BljP7Lr
sbFxeJiN/fqmyMfgz//XeiJvF+d/bm/k3KiLhuYdtXUHrC0IEP3xFN1hEkse
7DNvXsjrWx4uO9xur3Tx2SJG0a3wOSR8enp8+OT09PD7+08fPvjh+ZYSt6qb
0zdyOvtisx9kPJLDTdV0zVp0+o2szzsuHniP/vwgcL5u4z7MihyhvhBtVX4x
cNa38Nh+czaNRw20lQw5Y7nPOqdbNbzU/mRYB/+n6Mi0jZQt1g7T6h2UHnx8
i6X3qTsLRf/IDox977l7i8YeDcIqU1cCZNWLNtqez0Bde/DwyakX5OkhD+z4
473T0zv3Hj+cBP4k9cP89snD02cT3jKxt3R7M3a2V3DRTtw3bT6owUKqmspL
A214236T/HiDa84+791/2r2hfrq273Q7VoKTD3mo3a3TJ395uN+97i2XS1ug
BEEud+PX7bcWu7Y17l57vMeA2e44gSRLePKEcD5ucMwUHjin0cnZGbOt80sr
VWstFkq7MzraH91MNju3UbPpMNivGndyPjRhcKVeqKkVW4dZBg0si/662DH5
L9tTgqdb21zVYjbduKR682wfsAvRkS/assi94BlwPO2D/Omc7vhAr9F71K4V
vrUxotmz1h9K1FWwRlvXWkjBjRPHSFzq3TRvvpPaTjuaQrRLgirP6oWFijft
/aMXRaGVh3yTfEL/M5xmaWbSAX5RLheSAak9jshq4IA6ZZZzu2FPujfc2ySK
97kLTbIDAOxyGVeCQjrWZxTHg3OTeonsONOoa+U0eeOAaFi8rW5cI5afe+fT
s/MZy+BtzKykWrmw3BA4VE/R1a4bBDxQK2cCjXL1jQdtj6xaeJeAy5c0saYE
Nm/P3enOGBFsQ9ABaCQMMKGV17/7b4+vI4mN1SveuMQ0ztZWjSOEq5j2FqeZ
8UqPMXrmegHDs1w4m+0sudOFzl3qAXtqDReAbMHXwi/ZLoFP7HpiKyERKm8u
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

-->

</rfc>
