<?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.7.21 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-privacypass-batched-tokens-04" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.25.0 -->
  <front>
    <title abbrev="Batched Tokens">Batched Token Issuance Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-batched-tokens-04"/>
    <author initials="R." surname="Robert" fullname="Raphael Robert">
      <organization>Phoenix R&amp;D</organization>
      <address>
        <email>ietf@raphaelrobert.com</email>
      </address>
    </author>
    <author initials="C. A." surname="Wood" fullname="Christopher A. Wood">
      <organization>Cloudflare</organization>
      <address>
        <email>caw@heapingbits.net</email>
      </address>
    </author>
    <author initials="T." surname="Meunier" fullname="Thibault Meunier">
      <organization>Cloudflare Inc.</organization>
      <address>
        <email>ot-ietf@thibault.uk</email>
      </address>
    </author>
    <date year="2025" month="February" day="02"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 31?>

<t>This document specifies a variant of the Privacy Pass issuance protocol that
allows for batched issuance of tokens. This allows clients to request more than
one token at a time and for issuers to issue more than one token at a time.</t>
    </abstract>
  </front>
  <middle>
    <?line 37?>

<section anchor="change-log">
      <name>Change Log:</name>
      <t>RFC EDITOR PLEASE DELETE THIS SECTION.</t>
      <t>draft-03</t>
      <ul spacing="normal">
        <li>
          <t>Arbitrary token types</t>
        </li>
        <li>
          <t>Error code 400 aligned with RFC9578 and replaced by error code 422</t>
        </li>
      </ul>
      <t>draft-02</t>
      <ul spacing="normal">
        <li>
          <t>Renaming TokenRequest to BatchTokenRequest and TokenResponse to
BatchTokenResponse</t>
        </li>
        <li>
          <t>IANA: Media types for BatchTokenRequest and BatchTokenResponse</t>
        </li>
        <li>
          <t>IANA: Expand Token Type registry entry</t>
        </li>
        <li>
          <t>Various editorial fixes</t>
        </li>
      </ul>
      <t>draft-01</t>
      <ul spacing="normal">
        <li>
          <t>Initial WG document version</t>
        </li>
      </ul>
    </section>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>This document specifies two Privacy Pass issuance protocols (as defined in
<xref target="RFC9576"/>) that allow for batched issuance
of tokens. This allows clients to request more than one token at a time and for
issuers to issue more than one token at a time.</t>
      <t>The base Privacy Pass issuance protocol
<xref target="RFC9578"/> defines stateless anonymous tokens,
which can either be publicly verifiable or not. While it is possible to run
multiple instances of the issuance protocol in parallel, e.g., over a
multiplexed transport such as HTTP/3 <xref target="HTTP3"/> or by orchestrating
multiple HTTP requests, these ad-hoc solutions vary based on transport protocol
support. In addition, in some cases, they cannot take advantage of cryptographic
optimizations.</t>
      <t>The first variant of the issuance protocol builds upon the privately verifiable
issuance protocol in <xref target="RFC9578"/> that uses VOPRF <xref target="OPRF"/>,
and allows for batched issuance of tokens. This allows clients to request more
than one token at a time and for issuers to issue more than one token at a time.
In effect, private batched issuance performance scales better than linearly.</t>
      <t>The second variant of the issuance protocol introduces a new Client-Issuer
communication method, which allows for batched issuance of arbitrary token
types. This allows clients to request more than one token at a time and for
issuers to issue more than one token at a time. This variant has no other effect
than batching requests and responses and the issuance performance remains
linear.</t>
      <t>This batched issuance protocol registers one new token type
(<xref target="iana-token-type"/>), to be used with the PrivateToken HTTP authentication
scheme defined in <xref target="AUTHSCHEME"/>.</t>
    </section>
    <section anchor="motivation">
      <name>Motivation</name>
      <t>Privacy Pass tokens (as defined in <xref target="RFC9576"/> and
<xref target="RFC9578"/>) are unlinkable during issuance and
redemption. The basic issuance protocols defined in <xref target="RFC9578"/> however only
allow for a single token to be issued at a time for every challenge. In some
cases, especially where a large number of clients need to fetch a large number
of tokens, this may introduce performance bottlenecks. Batched token issuance
improves upon the basic Privately Verifiable Token issuance protocol in the
following key ways:</t>
      <ol spacing="normal" type="1"><li>
          <t>Issuing multiple tokens at once in response to a single TokenChallenge,
thereby reducing the size of the proofs required for multiple tokens.</t>
        </li>
        <li>
          <t>Improving server and client issuance efficiency by amortizing the cost of the
VOPRF proof generation and verification, respectively.</t>
        </li>
      </ol>
      <t>For all Verifiable Token issuance protocol, it allows for a single TokenRequest
to be sent that encompasses multiple token requests. This enables the issuance
of tokens for more than one key in one round trip between the Client and the
Issuer. The cost remains linear.</t>
    </section>
    <section anchor="presentation-language">
      <name>Presentation Language</name>
      <t>This document uses the TLS presentation language <xref target="RFC8446"/> to describe the
structure of protocol messages.  In addition to the base syntax, it uses two
additional features: the ability for fields to be optional and the ability for
vectors to have variable-size length headers.</t>
      <section anchor="optional-value">
        <name>Optional Value</name>
        <t>An optional value is encoded with a presence-signaling octet, followed by the
value itself if present.  When decoding, a presence octet with a value other
than 0 or 1 MUST be rejected as malformed.</t>
        <sourcecode type="tls-presentation"><![CDATA[
struct {
    uint8 present;
    select (present) {
        case 0: struct{};
        case 1: T value;
    };
} optional<T>;
]]></sourcecode>
      </section>
      <section anchor="variable-size-vector-length-headers">
        <name>Variable-Size Vector Length Headers</name>
        <t>In the TLS presentation language, vectors are encoded as a sequence of encoded
elements prefixed with a length.  The length field has a fixed size set by
specifying the minimum and maximum lengths of the encoded sequence of elements.</t>
        <t>In this document, there are several vectors whose sizes vary over significant
ranges.  So instead of using a fixed-size length field, it uses a variable-size
length using a variable-length integer encoding based on the one described in
<xref section="16" sectionFormat="of" target="RFC9000"/>. They differ only in that the one here requires a
minimum-size encoding. Instead of presenting min and max values, the vector
description simply includes a <tt>V</tt>. For example:</t>
        <sourcecode type="tls-presentation"><![CDATA[
struct {
    uint32 fixed<0..255>;
    opaque variable<V>;
} StructWithVectors;
]]></sourcecode>
      </section>
    </section>
    <section anchor="batched-privately-verifiable-token">
      <name>Batched Privately Verifiable Token</name>
      <t>This section describes a batched issuance protocol for select token types,
including 0x0001 (defined in <xref target="RFC9578"/>) and 0x0005 (defined in this document).
This variant is more efficient than Arbitary Batch Token Issuance defined below.
It does so by requiring the same key to be used by all token requests.</t>
      <section anchor="client-to-issuer-request">
        <name>Client-to-Issuer Request</name>
        <t>Except where specified otherwise, the client follows the same protocol as
described in <xref section="5.1" sectionFormat="comma" target="RFC9578"/>.</t>
        <t>The Client first creates a context as follows:</t>
        <artwork><![CDATA[
client_context = SetupVOPRFClient(ciphersuiteID, pkI)
]]></artwork>
        <t><tt>ciphersuiteID</tt> is the ciphersuite identifier from <xref target="OPRF"/> corresponding to the
ciphersuite being used for this token version. SetupVOPRFClient is defined in
<xref section="3.2" sectionFormat="comma" target="OPRF"/>.</t>
        <t><tt>Nr</tt> denotes the number of tokens the clients wants to request. For every token,
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_i = random(32)
challenge_digest = SHA256(challenge)
token_input = concat(token_type, nonce_i, challenge_digest,
                token_key_id)
blind_i, blinded_element_i = client_context.Blind(token_input)
]]></artwork>
        <t><tt>token_type</tt> corresponds to the 2-octet integer in the challenge.</t>
        <t>The above is repeated for each token to be requested. Importantly, a fresh nonce
MUST be sampled each time.</t>
        <t>The Client then creates a BatchTokenRequest structured as follows:</t>
        <sourcecode type="tls"><![CDATA[
struct {
    uint8_t blinded_element[Ne];
} BlindedElement;

struct {
   uint16_t token_type;
   uint8_t truncated_token_key_id;
   BlindedElement blinded_elements<V>;
} BatchTokenRequest;
]]></sourcecode>
        <t>The structure fields are defined as follows:</t>
        <ul spacing="normal">
          <li>
            <t>"token_type" is a 2-octet integer, which matches the type in the challenge.</t>
          </li>
          <li>
            <t>"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>).</t>
          </li>
          <li>
            <t>"blinded_elements" is a list of <tt>Nr</tt> serialized elements, each of length <tt>Ne</tt>
bytes and computed as <tt>SerializeElement(blinded_element_i)</tt>, where
blinded_element_i is the i-th output sequence of <tt>Blind</tt> invocations above. Ne
is as defined in <xref section="4" sectionFormat="comma" target="OPRF"/>.</t>
          </li>
        </ul>
        <t>The Client then generates an HTTP POST request to send to the Issuer Request
URL, with the BatchTokenRequest as the content. The media type for this request
is "application/private-token-privately-verifiable-batch-request". An example
request for the Issuer Request URL "https://issuer.example.net/request" is shown
below.</t>
        <artwork><![CDATA[
POST /request HTTP/1.1
Host: issuer.example.net
Accept: application/private-token-privately-verifiable-batch-response
Content-Type: application/private-token-privately-verifiable-batch-request
Content-Length: <Length of BatchTokenRequest>

<Bytes containing the BatchTokenRequest>
]]></artwork>
      </section>
      <section anchor="issuer-to-client-response">
        <name>Issuer-to-Client Response</name>
        <t>Except where specified otherwise, the client follows the same protocol as
described in <xref section="5.2" sectionFormat="comma" target="RFC9578"/>.</t>
        <t>Upon receipt of the request, the Issuer validates the following conditions:</t>
        <ul spacing="normal">
          <li>
            <t>The BatchTokenRequest contains a supported token_type equal to one of the
batched token types defined in this document.</t>
          </li>
          <li>
            <t>The BatchTokenRequest.truncated_token_key_id corresponds to a key ID of a
Public Key owned by the issuer.</t>
          </li>
          <li>
            <t>Nr, as determined based on the size of BatchTokenRequest.blinded_elements, is
less than or equal to the number of tokens that the issuer can issue in a
single batch.</t>
          </li>
        </ul>
        <t>If any of these conditions is not met, the Issuer MUST return an HTTP 422
(Unprocessable Content) error to the client.</t>
        <t>The Issuer then tries to deseralize the i-th element of
BatchTokenRequest.blinded_elements using DeserializeElement from <xref section="2.1" sectionFormat="of" target="OPRF"/>, yielding <tt>blinded_element_i</tt> of type <tt>Element</tt>. If this fails for any
of the BatchTokenRequest.blinded_elements values, the Issuer MUST return an HTTP
422 (Unprocessable Content) error to the client. Otherwise, if the Issuer is
willing to produce a token to the Client, the issuer forms a list of <tt>Element</tt>
values, denoted <tt>blinded_elements</tt>, and computes a blinded response as follows:</t>
        <artwork><![CDATA[
server_context = SetupVOPRFServer(ciphersuiteID, skI, pkI)
evaluated_elements, proof =
  server_context.BlindEvaluateBatch(skI, blinded_elements)
]]></artwork>
        <t><tt>ciphersuiteID</tt> is the ciphersuite identifier from <xref target="OPRF"/> corresponding to the
ciphersuite being used for this token version. SetupVOPRFServer is defined in
<xref section="3.2" sectionFormat="comma" target="OPRF"/>. The issuer uses a list of blinded elements to compute in
the proof generation step. The <tt>BlindEvaluateBatch</tt> function is a batch-oriented
version of the <tt>BlindEvaluate</tt> function described in <xref section="3.3.2" sectionFormat="comma" target="OPRF"/>.
The description of <tt>BlindEvaluateBatch</tt> is below.</t>
        <artwork><![CDATA[
Input:

  Element blindedElements[Nr]

Output:

  Element evaluatedElements[Nr]
  Proof proof

Parameters:

  Group G
  Scalar skS
  Element pkS

def BlindEvaluateBatch(blindedElements):
  evaluatedElements = []
  for blindedElement in blindedElements:
    evaluatedElements.append(skS * blindedElement)

  proof = GenerateProof(skS, G.Generator(), pkS,
                        blindedElements, evaluatedElements)
  return evaluatedElements, proof
]]></artwork>
        <t>The Issuer then creates a BatchTokenResponse structured as follows:</t>
        <sourcecode type="tls"><![CDATA[
struct {
    uint8_t evaluated_element[Ne];
} EvaluatedElement;

struct {
   EvaluatedElement evaluated_elements<V>;
   uint8_t evaluated_proof[Ns + Ns];
} BatchTokenResponse;
]]></sourcecode>
        <t>The structure fields are defined as follows:</t>
        <ul spacing="normal">
          <li>
            <t>"evaluated_elements" is a list of <tt>Nr</tt> serialized elements, each of length
<tt>Ne</tt> bytes and computed as <tt>SerializeElement(evaluate_element_i)</tt>, where
evaluate_element_i is the i-th output of <tt>BlindEvaluate</tt>.</t>
          </li>
          <li>
            <t>"evaluated_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"/>.</t>
          </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-privately-verifiable-batch-response".</t>
        <artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/private-token-privately-verifiable-batch-response
Content-Length: <Length of BatchTokenResponse>

<Bytes containing the BatchTokenResponse>
]]></artwork>
      </section>
      <section anchor="finalization">
        <name>Finalization</name>
        <t>Upon receipt, the Client handles the response and, if successful, deserializes
the body values TokenResponse.evaluate_response and
TokenResponse.evaluate_proof, yielding <tt>evaluated_elements</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_values = client_context.FinalizeBatch(token_input, blind,
                         evaluated_elements, blinded_elements, proof)
]]></artwork>
        <t>The <tt>FinalizeBatch</tt> function is a batched variant of the <tt>Finalize</tt> function as
defined in <xref section="3.3.2" sectionFormat="comma" target="OPRF"/>. <tt>FinalizeBatch</tt> accepts lists of evaluated
elements and blinded elements as input parameters, and is implemented as
described below:</t>
        <artwork><![CDATA[
Input:

  PrivateInput input
  Scalar blind
  Element evaluatedElements[Nr]
  Element blindedElements[Nr]
  Proof proof

Output:

  opaque output[Nh * Nr]

Parameters:

  Group G
  Element pkS

Errors: VerifyError

def FinalizeBatch(input, blind,
  evaluatedElements, blindedElements, proof):
  if VerifyProof(G.Generator(), pkS, blindedElements,
                 evaluatedElements, proof) == false:
    raise VerifyError

  output = nil
  for evaluatedElement in evaluatedElements:
    N = G.ScalarInverse(blind) * evaluatedElement
    unblindedElement = G.SerializeElement(N)
    hashInput = I2OSP(len(input), 2) || input ||
                I2OSP(len(unblindedElement), 2) || unblindedElement ||
                "Finalize"
    output = concat(output, Hash(hashInput))

  return output
]]></artwork>
        <t>If this succeeds, the Client then constructs <tt>Nr</tt> Token values, where
<tt>authenticator</tt> is the i-th Nh-byte length slice of <tt>authenticator_values</tt> that
corresponds to <tt>nonce</tt>, the i-th nonce that was sampled in
<xref target="client-to-issuer-request"/>:</t>
        <artwork><![CDATA[
struct {
    uint16_t token_type;
    uint8_t nonce[32];
    uint8_t challenge_digest[32];
    uint8_t token_key_id[32];
    uint8_t authenticator[Nh];
} Token;
]]></artwork>
        <t>If the FinalizeBatch function fails, the Client aborts the protocol. Token
verification works exactly as specified in <xref target="RFC9578"/>.</t>
      </section>
    </section>
    <section anchor="arbitrary-batched-token-issuance">
      <name>Arbitrary Batched Token Issuance</name>
      <t>This section describes an issuance protocol mechanism for issuing multiple
tokens in one round trip between Client and Issuer. An arbitrary batched token
request can contain token requests for any token type.</t>
      <section anchor="arbitrary-client-to-issuer-request">
        <name>Client-to-Issuer Request</name>
        <t>The Client first creates all TokenRequest it wants to batch. To do so, the
client follows protocol describing issuance, such as <xref section="5.1" sectionFormat="comma" target="RFC9578"/> or
<xref section="6.1" sectionFormat="comma" target="RFC9578"/>.</t>
        <t>The Client then creates a BatchedTokenRequest structured as follows:</t>
        <sourcecode type="tls"><![CDATA[
struct {
   uint16_t token_type;
   select (token_type) {
      case (0x0001): /* Type VOPRF(P-384, SHA-384), RFC 9578 */
         uint8_t truncated_token_key_id;
         uint8_t blinded_msg[Ne];
      case (0x0002): /* Type Blind RSA (2048-bit), RFC 9578 */
         uint8_t truncated_token_key_id;
         uint8_t blinded_msg[Nk];
   }
} TokenRequest;

struct {
  TokenRequest token_requests<V>;
} BatchTokenRequest
]]></sourcecode>
        <t>The structure fields are defined as follows:</t>
        <ul spacing="normal">
          <li>
            <t>TokenRequest's "token_type" is a 2-octet integer. TokenRequest MUST always start
with a uint16 "token_type" indicating the token type. The rest of the
structure follows based on that type, within the inner opaque token_request
attribute. The above definition corresponds to TokenRequest from <xref target="RFC9578"/>.
A TokenRequest with a token type not defined in <xref target="RFC9578"/> MAY be used but
MUST always start with a 2-octet token_type.</t>
          </li>
          <li>
            <t>"token_requests" is an array of TokenRequest satisfying the above constraint.</t>
          </li>
        </ul>
        <t>The Client then generates an HTTP POST request to send to the Issuer Request
URL, with the BatchTokenRequest as the content. The media type for this request
is "application/private-token-arbitrary-batch-request". An example request for
the Issuer Request URL "https://issuer.example.net/request" is shown below.</t>
        <artwork><![CDATA[
POST /request HTTP/1.1
Host: issuer.example.net
Accept: application/private-token-arbitrary-batch-response
Content-Type: application/private-token-arbitrary-batch-request
Content-Length: <Length of BatchTokenRequest>

<Bytes containing the BatchTokenRequest>
]]></artwork>
      </section>
      <section anchor="arbitrary-issuer-to-client-response">
        <name>Issuer-to-Client Response</name>
        <t>Upon receipt of the request, the Issuer validates the following conditions:</t>
        <ul spacing="normal">
          <li>
            <t>The Content-Type is application/private-token-arbitrary-batch-request as
registered with IANA.</t>
          </li>
        </ul>
        <t>If this condition is not met, the Issuer MUST return an HTTP 422 (Unprocessable
Content) error to the client.</t>
        <t>The Issuer then tries to deserialize the first 2 bytes of the i-th element of
BatchTokenRequest.token_requests. If this is not a token type registered with
IANA, the Issuer MUST return an HTTP 422 (Unprocessable Content) error to the
client. The issuer creates a BatchTokenResponse structured as follows:</t>
        <sourcecode type="tls"><![CDATA[
struct {
  select (token_type) {
    case (0x0001): /* Type VOPRF(P-384, SHA-384), RFC 9578 */
      uint8_t evaluated_msg[Ne];
      uint8_t evaluated_proof[Ns + Ns];
    case (0x0002): /* Type Blind RSA (2048-bit), RFC 9578 */
      uint8_t blind_sig[Nk];
  }
} TokenResponse;

struct {
  optional<TokenResponse> token_response; /* Defined by token_type */
} OptionalTokenResponse;

struct {
  OptionalTokenResponse token_responses<V>;
} BatchTokenResponse
]]></sourcecode>
        <t>BatchTokenResponse.token_responses is a vector of OptionalTokenResponses, length
prefixed with two bytes. OptionalTokenResponse.token_response is a
length-prefix-encoded TokenResponse, where a length of 0 indicates that the
Issuer failed or refused to issue the associated TokenRequest.</t>
        <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-arbitrary-batch-response".</t>
        <t>If the Issuer issues some tokens but not all, it MUST return an HTTP 206 to the
client and continue processing further requests.</t>
        <artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/private-token-arbitrary-batch-response
Content-Length: <Length of BatchTokenResponse>

<Bytes containing the BatchTokenResponse>
]]></artwork>
      </section>
      <section anchor="arbitrary-finalization">
        <name>Finalization</name>
        <t>The Client tries to deserialize the i-th element of
BatchTokenResponse.token_responses using the protocol associated to
BatchTokenRequest.token_type. If the element has a size of 0, the Client MUST
ignore this token, and continue processing the next token. The Client finalizes
each deserialized TokenResponse using the matching TokenRequest according to the
corresponding finalization procedure defined by the token type.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security considerations</name>
      <section anchor="batched-privately-verifiable-tokens">
        <name>Batched Privately Verifiable Tokens</name>
        <t>Implementors SHOULD be aware of the security considerations described in <xref section="6.2.3" sectionFormat="comma" target="OPRF"/> and implement mitigation mechanisms. Application can mitigate
this issue by limiting the number of clients and limiting the number of token
requests per client per key.</t>
      </section>
      <section anchor="arbitrary-batched-verifiable-tokens">
        <name>Arbitrary Batched Verifiable Tokens</name>
        <t>Implementors SHOULD be aware of the inherent linear cost of this token type. An
Issuer MAY ignore TokenRequest if the number of tokens per request past a limit.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA considerations</name>
      <t>This section contains IANA codepoint allocation requests.</t>
      <section anchor="iana-token-type">
        <name>Token Type</name>
        <t>This document updates the "Token Type" Registry (<xref target="AUTHSCHEME"/>) with the
following entry:</t>
        <ul spacing="normal">
          <li>
            <t>Value: 0x0005 (suggested)</t>
          </li>
          <li>
            <t>Name: VOPRF (ristretto255, SHA-512)</t>
          </li>
          <li>
            <t>Token Structure: As defined in <xref section="2.2" sectionFormat="of" target="AUTHSCHEME"/></t>
          </li>
          <li>
            <t>Token Key Encoding: Serialized using SerializeElement from <xref section="2.1" sectionFormat="of" target="OPRF"/></t>
          </li>
          <li>
            <t>TokenChallenge Structure: As defined in <xref section="2.1" sectionFormat="of" target="AUTHSCHEME"/></t>
          </li>
          <li>
            <t>Publicly Verifiable: N</t>
          </li>
          <li>
            <t>Public Metadata: N</t>
          </li>
          <li>
            <t>Private Metadata: N</t>
          </li>
          <li>
            <t>Nk: 32</t>
          </li>
          <li>
            <t>Nid: 32</t>
          </li>
          <li>
            <t>Reference: <xref section="5" sectionFormat="comma" target="RFC9578"/></t>
          </li>
          <li>
            <t>Notes: None</t>
          </li>
        </ul>
      </section>
      <section anchor="media-types">
        <name>Media Types</name>
        <t>The following entries should be added to the IANA "media types" registry:</t>
        <ul spacing="normal">
          <li>
            <t>"application/private-token-privately-verifiable-batch-request"</t>
          </li>
          <li>
            <t>"application/private-token-privately-verifiable-batch-response"</t>
          </li>
          <li>
            <t>"application/private-token-arbitrary-batch-request"</t>
          </li>
          <li>
            <t>"application/private-token-arbitrary-batch-response"</t>
          </li>
        </ul>
        <t>The templates for these entries are listed below and the reference should be
this RFC.</t>
        <section anchor="applicationprivate-token-privately-verifiable-batch-request-media-type">
          <name>"application/private-token-privately-verifiable-batch-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>N/A</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>Applications that want to issue or facilitate issuance of Privacy Pass tokens,
including Privacy Pass issuer applications themselves.</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>IETF</t>
            </dd>
          </dl>
        </section>
        <section anchor="applicationprivate-token-privately-verifiable-batch-response-media-type">
          <name>"application/private-token-privately-verifiable-batch-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>N/A</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>Applications that want to issue or facilitate issuance of Privacy Pass tokens,
including Privacy Pass issuer applications themselves.</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>IETF</t>
            </dd>
          </dl>
        </section>
        <section anchor="applicationprivate-token-arbitrary-batch-request-media-type">
          <name>"application/private-token-arbitrary-batch-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>N/A</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>Applications that want to issue or facilitate issuance of Privacy Pass tokens,
including Privacy Pass issuer applications themselves.</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>IETF</t>
            </dd>
          </dl>
        </section>
        <section anchor="applicationprivate-token-arbitrary-batch-response-media-type">
          <name>"application/private-token-arbitrary-batch-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>N/A</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>Applications that want to issue or facilitate issuance of Privacy Pass tokens,
including Privacy Pass issuer applications themselves.</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>IETF</t>
            </dd>
          </dl>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC9576">
          <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="25" month="September" year="2023"/>
            <abstract>
              <t>   This document specifies the Privacy Pass architecture and
   requirements for its constituent protocols used for authorization
   based on privacy-preserving authentication mechanisms.  It describes
   the conceptual model of Privacy Pass and its protocols, its security
   and privacy goals, practical deployment models, and recommendations
   for each deployment model that helps ensure the desired security and
   privacy goals are fulfilled.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-architecture-16"/>
        </reference>
        <reference anchor="RFC9578">
          <front>
            <title>Privacy Pass Issuance Protocol</title>
            <author fullname="Sofia Celi" initials="S." surname="Celi">
              <organization>Brave Software</organization>
            </author>
            <author fullname="Alex Davidson" initials="A." surname="Davidson">
              <organization>Brave Software</organization>
            </author>
            <author fullname="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="3" month="October" year="2023"/>
            <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>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-protocol-16"/>
        </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="21" month="February" 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 private 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
   private 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-21"/>
        </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="23" month="October" year="2023"/>
            <abstract>
              <t>   This document defines an HTTP authentication scheme for Privacy Pass,
   a privacy-preserving authentication mechanism used for authorization.
   The authentication scheme in this document 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 Privacy Pass tokens.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-auth-scheme-15"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="HTTP3">
          <front>
            <title>HTTP/3</title>
            <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment. This document describes a mapping of HTTP semantics over QUIC. This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9114"/>
          <seriesInfo name="DOI" value="10.17487/RFC9114"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
