<?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.5 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ladd-privacypass-bbs-01" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.19.4 -->
  <front>
    <title abbrev="BBS PPAS">BBS for PrivacyPass</title>
    <seriesInfo name="Internet-Draft" value="draft-ladd-privacypass-bbs-01"/>
    <author fullname="Watson Ladd">
      <organization>Akamai Technologies</organization>
      <address>
        <email>watsonbladd@gmail.com</email>
      </address>
    </author>
    <date year="2024" month="February" day="26"/>
    <area>Security</area>
    <workgroup>Privacy Pass</workgroup>
    <keyword>anonymous credentials</keyword>
    <abstract>
      <?line 35?>

<t>Existing token types in privacy pass conflate attribution with rate limiting. This document describes a token type where the issuer attests to a set of properties of the client, which the client can then selectively prove to the origin. Repeated showings of the same credential are unlinkable, unlike other token types in privacy pass.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://wbl.github.io/draft-ladd-bbs-privacypass/draft-ladd-privacypass-bbs.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ladd-privacypass-bbs/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Privacy Pass Working Group mailing list (<eref target="mailto:privacy-pass@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/privacy-pass/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/privacy-pass/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/wbl/draft-ladd-bbs-privacypass"/>.</t>
    </note>
  </front>
  <middle>
    <?line 39?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>In 2004 Boneh-Boyen-Shacham introduced the eponymous BBS signature. The BBS signature scheme as documented in <xref target="BBS"/> lets a signer sign a sequence of strings called attributes, and provides a way for a holder of a signature to prove possession and the value of some of the attributes. This document explains how to use this technology with privacy pass.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" 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>
      <?line -18?>

</section>
    <section anchor="protocol-overview">
      <name>Protocol Overview</name>
      <t>This protocol defines the use of Privacy Pass with selectively disclosable attributes, using <xref target="BBS"/> signatures and zero-knowledge proofs. Those attributes must be agreed upon by Client, Attester, and Issuer during issuance. Example of such attributes include public metadata values (<xref target="PPEXT"/>).</t>
      <t>To run this protocol the Issuer must have a public key and an issuance URL, as well as a common understanding of the meaning of each attribute string (sequence of octets). E.g an age might be encoded as a single octet, or in ASCII numeric base 10 representation, or a fixed field, and could be the first attribute in the list.</t>
      <t>After the successful completion of the Issuance protocol, the Client is able to use the received <tt>TokenResponse</tt> to generate multiple unlinkable tokens.</t>
      <section anchor="issuance-over-generic-transports">
        <name>Issuance over generic transports</name>
        <section anchor="attribute-values">
          <name>Attribute Values</name>
          <t>The Client begins by forming a sequence of strings corresponding to the attributes they wish signed. They engage in the Attestation protocol with the Attestor, and then send the serialized array of attributes to the Issuer. The way with which the list of attributes is communicated to the Issuer is considered protocol specific. An option is to serialize the attributes as a base64 encoded JSON array. The Issuer <bcp14>MUST</bcp14> parse the received attributes list before signing, and verify that each attribute is permitted by their polishes.</t>
          <t>The Attestor interaction and validation of the attributes is not specified here. In a split instantiation as per <xref target="PPARCH"/>, Attestors and Issuers <bcp14>MUST</bcp14> ensure that the claims by the Client are not changeable between attestation and signing.</t>
        </section>
        <section anchor="header-value">
          <name>Header Value</name>
          <t>Each attribute will be selectively disclosable by the Client during the redemption protocol. Protocol and application critical information (for example, a token type) need to be included in the header input value of the BBS signature generation operation as defined in <eref target="https://www.ietf.org/archive/id/draft-irtf-cfrg-bbs-signatures-03.html#name-signature-generation-sign">Section 3.4.1</eref> of <xref target="BBS"/>. The header value will not be selectively disclosable, meaning that the Client will be required to reveal it during redemption. For HTTP based applications it is <bcp14>RECOMMENDED</bcp14> to include the token's type to the header. It is also <bcp14>RECOMMENDED</bcp14> the header value to be protocol or application defined. See <xref target="privacy-considerations"/> for more information.</t>
        </section>
        <section anchor="token-response">
          <name>Token Response</name>
          <t>If parsing and validating the received attributes was successful, the Issuer can sign them together with the selected header using the signature generation function of <xref target="BBS"/>. The Issuer then returns the signature and optionally the selected header (if it is not protocol defined) to the Client. The means with which those values are communicated are considered protocol specific. An option is to encode them using base64. The Client <bcp14>MUST</bcp14> verify the returned signature against their selected set of attributes and header value, using the signature verification operation as defined in <eref target="https://www.ietf.org/archive/id/draft-irtf-cfrg-bbs-signatures-03.html#name-signature-verification-veri">Section 3.4.2</eref> of <xref target="BBS"/>.</t>
        </section>
      </section>
      <section anchor="redemption">
        <name>Redemption</name>
        <t>After the received signature is verified, the Client can generate multiple unlinkable tokens, attesting over a (possibly different at each time) subset of the signed attributes. To do that, the Client uses the proof generation operation as defined in <eref target="https://www.ietf.org/archive/id/draft-irtf-cfrg-bbs-signatures-03.html#name-proof-generation-proofgen">Section 3.4.3</eref> of <xref target="BBS"/>, with the presentation header input value set to a specified channel binding or origin identifier. For HTTP applications it is <bcp14>RECOMMENDED</bcp14> that the origin be used. The presentation header <bcp14>MUST</bcp14> additionally be bound to the received Origin challenge (for example by using the digest of the challenge value). The set of attributes the Client wishes to show is protocol specific and is communicated by means outside this draft.</t>
        <t>Upon receiving a Token, the Origin must construct the required header and presentation header values, which may depend on protocol specific information (like the token's type) or session specific information (like a Client chosen nonce). The form of those values is protocol specific. The Origin <bcp14>MUST</bcp14> validate that both the header and presentation header, as well as the received attributes, conform to their policies (for example, that the presentation header contains a specific challenge digest etc.). Then, they can use the proof verification operation as defined in <eref target="https://www.ietf.org/archive/id/draft-irtf-cfrg-bbs-signatures-03.html#name-proof-verification-proofver">Section 3.4.4</eref> of <xref target="BBS"/>, to verify the received Token and attributes.</t>
      </section>
    </section>
    <section anchor="http-protocol-with-public-metadata">
      <name>HTTP Protocol with Public Metadata</name>
      <t>This section defines a HTTP based instatiation of the issuance and redemption protocol with public metadata (<xref target="PPEXT"/>). The BBS operations used are instantiated with the parameters defined by the <tt>BBS_BLS12381G1_XMD:SHA-256_SSWU_RO_H2G_HM2S_</tt> ciphersuite (<eref target="https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bbs-signatures-03#name-bls12-381-sha-256">Section 6.2.2</eref> of <xref target="BBS"/>). The signed attributes will consist of the public metadata values, giving to the Client the ability to selectively disclose distinguee subsets of metadata during different <tt>Token</tt> redemption attempts.</t>
      <section anchor="token-issuance">
        <name>Token Issuance</name>
        <t>The Client and Issuer agree on the sequence of attributes, as well as the Issuer's public key. These attributes are put in a list of Extensions <xref target="PPEXT"/> with type TBD.</t>
        <section anchor="client-to-issuer-request">
          <name>Client-to-Issuer Request</name>
          <t>The Client first creates an issuance request message using the Issuer key identifier as follows:</t>
          <artwork><![CDATA[
struct {
  uint16_t token_type = 0xTBD;  /* Type BBS with "BLS12-381-SHA-256" */
  uint8_t truncated_token_key_id;
} TokenRequest;
]]></artwork>
          <t>The structure fields are defines bellow:</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 token_key_id in network byte order.</t>
            </li>
          </ul>
          <t>Using the constructed <tt>TokenRequest</tt>, the Client builds an <tt>ExtendedTokenRequest</tt>, defined in <xref target="PPEXT"/>, as follows:</t>
          <artwork><![CDATA[
struct {
  TokenRequest request;
  Extensions extensions;
} ExtendedTokenRequest;
]]></artwork>
          <t>The contents of the <tt>ExtendedTokenRequest.extensions</tt> value, <bcp14>MUST</bcp14> match the Client's configured extensions value. The Client then generates an HTTP POST request to send to the Issuer Request URI, with the <tt>ExtendedTokenRequest</tt> as the content.</t>
        </section>
        <section anchor="issuer-to-client-response">
          <name>Issuer-to-Client Response</name>
          <t>Upon receiving the Client's request, the Issuer needs to validate the following:</t>
          <ul spacing="normal">
            <li>
              <t>The <tt>ExtendedTokenRequest.TokenRequest</tt> contains a supported <tt>token_type</tt>.</t>
            </li>
            <li>
              <t>The <tt>ExtendedTokenRequest.TokenRequest</tt> contains a <tt>truncated_token_key_id</tt> that corresponds to the truncated key ID of an Issuer Public Key.</t>
            </li>
            <li>
              <t>The <tt>ExtendedTokenRequest.extensions</tt> value is permitted by the Issuer's policy.</t>
            </li>
          </ul>
          <t>If any of these conditions is not met, the Issuer <bcp14>MUST</bcp14> return an HTTP 400 error to the Client. Otherwise, if the Issuer is willing to produce a token for the Client, they will complete the issuance flow by signing the agreed upon extension values. To do so, they first must parse the content value <tt>ExtendedTokenRequest.extensions</tt> and if successful, yield the extensions array. Then, they must sign those extensions, using the following steps:</t>
          <artwork><![CDATA[
header = 0xTBD
signature = Sign(skI, pkI,  header, extensions)
]]></artwork>
          <t>The Sign function is defined in <eref target="https://www.ietf.org/archive/id/draft-irtf-cfrg-bbs-signatures-03.html#name-signature-generation-sign">Section 3.4.1</eref> of <xref target="BBS"/> and is instantiated with the parameters defined by the "BLS12-381-SHA-256" ciphersuite (<eref target="https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bbs-signatures-03#name-bls12-381-sha-256">Section 6.2.2</eref> of <xref target="BBS"/>). The result is encoded and transmitted to the client in the following <tt>TokenResponse</tt> structure:</t>
          <artwork><![CDATA[
struct {
  uint8_t signature[octet_point_length + octet_scalar_length];
} TokenResponse;
]]></artwork>
          <t>The <tt>octet_point_length</tt> and <tt>octet_scalar_length</tt> constants are defined in <eref target="https://www.ietf.org/archive/id/draft-irtf-cfrg-bbs-signatures-03.html#name-bls12-381-sha-256">Section 6.2</eref> of <xref target="BBS"/>.</t>
          <t>The Issuer generates an HTTP response with status code 200 whose content consists of <tt>TokenResponse</tt>, with the content type set as "application/private-token-response".</t>
        </section>
        <section anchor="finalization">
          <name>Finalization</name>
          <t>Upon receipt, the Client handles the response and, if successful, deserializes the content values <tt>TokenResponse.signature</tt> yielding the signature value. the Client <bcp14>MUST</bcp14> validate the produced signature as follows:</t>
          <artwork><![CDATA[
result = Verify(pkI, signature, 0xTBD, extensions)
]]></artwork>
          <t>The Verify function is defined in <eref target="https://www.ietf.org/archive/id/draft-irtf-cfrg-bbs-signatures-03.html#name-signature-verification-veri">Section 3.4.2</eref> of <xref target="BBS"/> and is instantiated with the parameters defined by the "BLS12-381-SHA-256" ciphersuite (<eref target="https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bbs-signatures-03#name-bls12-381-sha-256">Section 6.2.2</eref> of <xref target="BBS"/>). If the result is not VALID, the Client <bcp14>MUST</bcp14> abort.</t>
          <t>If signature verification is successful, the Client can generate multiple tokens with unlinkable authenticator values, using the procedure defined in <xref target="token-generation"/>.</t>
        </section>
        <section anchor="issuer-configuration">
          <name>Issuer Configuration</name>
          <t>//TODO</t>
        </section>
      </section>
      <section anchor="token-redemption">
        <name>Token Redemption</name>
        <t>This section describes an HTTP based protocol that allows Clients to generate and redeem tokens, using a <tt>TokenResponse</tt> received by the Issuer during the Issuance protocol defined in <xref target="token-issuance"/>. The <tt>TokenResponse</tt> <bcp14>MUST</bcp14> first be verified using the procedure defined in <xref target="finalization"/>.</t>
        <section anchor="token-generation">
          <name>Token Generation</name>
          <t>The Client can generate multiple Tokens with unlinkable authenticator values, using the ProofGen function as defined in <eref target="https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bbs-signatures-03#name-proof-generation-proofgen">Section 3.4.3</eref> of <xref target="BBS"/>, instantiated with the parameters defined by the "BLS12-381-SHA-256" ciphersuite (<eref target="https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bbs-signatures-03#name-bls12-381-sha-256">Section 6.2.2</eref> of <xref target="BBS"/>).</t>
          <t>The Client can also select a subset of the extensions to disclose to the Origin. The means with which a Client will negotiate with the Origin the required extensions is outside the scope of this document. Let <tt>disclosed_extensions_indexes</tt> to be an ordered array of 2 byte integers from 1 to 65535, corresponding to the indexes that the extensions the Client wishes to disclose have, in the <tt>Extensions.extensions</tt> array. The client produces an authenticator value as follows:</t>
          <artwork><![CDATA[
nonce = random(32)
challenge_digest = SHA256(challenge)
header = 0xTBD
presentation_header = concat(nonce, challenge_digest)

authenticator = ProofGen(pkI,
                         signature,
                         header,
                         presentation_header,
                         extensions,
                         disclosed_extensions_indexes)
]]></artwork>
          <t>If the above calculation succeeds, the Client constructs a <tt>Token</tt> as follows:</t>
          <artwork><![CDATA[
struct {
  uint16_t token_type = 0xTBD;
  uint8_t nonce[32];
  uint8_t challenge_digest[32];
  uint8_t token_key_id[Nid];
  uint16_t disclosed_extensions_indexes<0..2^16-1>
  uint8_t authenticator<0..Nu>;
} Token;
]]></artwork>
          <t>The maximum length of the authenticator <tt>Nu</tt> is defined as <tt>Nu = 2 * octet_point_length + (2^16 + 2) * octet_scalar_length</tt>. Note, the addition of the <tt>disclosed_extensions_indexes</tt> field to the <tt>Token</tt> structure defined in <xref target="PPAUTH"/>.</t>
        </section>
        <section anchor="token-verification">
          <name>Token Verification</name>
          <t>Upon receiving the <tt>Token</tt>, the Origin <bcp14>MUST</bcp14> parse it and validate that all the fields have the correct length. Additionally, the Origin <bcp14>MUST</bcp14> parse the <tt>Token.disclosed_extensions_indexes</tt> content value and verify that it comprised from an ordered array of integers from 1 to 65535. Lastly, the Origin <bcp14>MUST</bcp14> also parse the received (disclosed) <tt>Extensions.extensions</tt> value and create the array <tt>disclosed_extensions</tt>. Verifying a <tt>Token</tt> requires knowledge of the Issuer's public key (pkI) corresponding to the <tt>Token.token_key_id</tt> value. The Origin can verify the <tt>Token</tt> and corresponding disclosed extensions as follows:</t>
          <artwork><![CDATA[
header = 0xTBD
presentation_header = concat(Token.nonce, Token.challenge_digest)

res = ProofVerify(pkI,
                  Token.authenticator,
                  header,
                  presentation_header,
                  disclosed_extensions,
                  Token.disclosed_extensions_indexes)
]]></artwork>
          <t>The ProofVerify function is defined in Section 3.4.4 of <xref target="BBS"/>, instantiated with the parameters defined by the "BLS12-381-SHA-256" ciphersuite (<eref target="https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bbs-signatures-03#name-bls12-381-sha-256">Section 6.2.2</eref> of <xref target="BBS"/>).</t>
        </section>
      </section>
    </section>
    <section anchor="privacy-pass-integration">
      <name>Privacy Pass integration</name>
      <t>In <xref target="PPARCH"/> parameters are provided that any instantiation must amend. TODO: put values in</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>As the redeemed tokens are not single use, instantiations <bcp14>MUST</bcp14> specify a channel binding to use or origin identifier so that an Origin cannot harvest tokens for use at another origin.</t>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>The position of a revealed attribute, as well as the number of unrevealed attributes, is revealed to the origin. Applications <bcp14>MUST</bcp14> ensure all clients recieve the same set of attributes in the same positions to preserve privacy. The Issuer is visible on redemption, this creates partioning attacks. TODO: resolve through hiding them.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>We would like IANA to add to the Privacy Pass Token Type Registry the following registration:</t>
      <t>Value: IANA picks
Name: BBS Token
Token structure: As in Token Generation Section
Token Key Encoding: TODO
Publicly Verifiable: Y
Public Metadata: Y
Private Metadata: N
Nk: Indefinite
NiD: 32? TODO: check this
Reference: This document</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="BBS">
          <front>
            <title>The BBS Signature Scheme</title>
            <author fullname="Tobias Looker" initials="T." surname="Looker">
              <organization>MATTR</organization>
            </author>
            <author fullname="Vasilis Kalos" initials="V." surname="Kalos">
              <organization>MATTR</organization>
            </author>
            <author fullname="Andrew Whitehead" initials="A." surname="Whitehead">
              <organization>Portage</organization>
            </author>
            <author fullname="Mike Lodder" initials="M." surname="Lodder">
              <organization>CryptID</organization>
            </author>
            <date day="21" month="December" year="2023"/>
            <abstract>
              <t>   This document describes the BBS Signature scheme, a secure, multi-
   message digital signature protocol, supporting proving knowledge of a
   signature while selectively disclosing any subset of the signed
   messages.  Concretely, the scheme allows for signing multiple
   messages whilst producing a single, constant size, digital signature.
   Additionally, the possessor of a BBS signatures is able to create
   zero-knowledge, proofs-of-knowledge of a signature, while selectively
   disclosing subsets of the signed messages.  Being zero-knowledge, the
   BBS proofs do not reveal any information about the undisclosed
   messages or the signature it self, while at the same time,
   guarantying the authenticity and integrity of the disclosed messages.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-bbs-signatures-05"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <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="PPEXT">
          <front>
            <title>Public Metadata Issuance</title>
            <author fullname="Scott Hendrickson" initials="S." surname="Hendrickson">
              <organization>Google</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <date day="25" month="November" year="2023"/>
            <abstract>
              <t>   This document specifies Privacy Pass issuance protocols that encode
   public information visible to the Client, Attester, Issuer, and
   Origin into each token.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-hendrickson-privacypass-public-metadata-03"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="PPARCH">
          <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="PPAUTH">
          <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>
      </references>
    </references>
    <?line 258?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA91b63bbtpb+z6fAKD+O3ZHk2EkzHbdpjxInjecktsd22tOV
lbEgEpKwTJEagrSjZqXPMs8yTzb7AoAARbtpV8+as5ofsQSBGxv78u0LwNFo
lNS6ztWhGDx7diHmZSXOKn0j082ZNGaQyNmsUjf217OzycUgSWWtFmW1ORS6
mJdJkpVpIVdAIavkvB7lMstGa6axBhqj2cyMHu4nppmttDG6LOrNGmYfv7h8
KcQDIXNTAn1dZGqt4L+iHgzFQGW6Listc/xyPHkGf4C1wfH55ctBUjSrmaoO
kww4OUzSsjCqMI05FHXVqAS4fZTISkmgeqHSptL1ZpDcltX1oiqbNYzaHQre
4rXawI/ZYSJGQhZlsVmVjRFppZAX4MAkN6poYCEh+gkIwTsa/Ahr6GIhvsdp
OL6SOodxK40RiuOvWtXzcVkt8HdZpUv4fVnXa3O4t4fTcUjfqLGbtocDe7Oq
vDVqLyS0hwQWul42MyBxO8v3AvmjzAMd4NQchGXqYDV4ZMzPj3V5z8N7d+t1
vKxX+SBJZFMvywolCAsJMW/ynE3iR1mbshCv4Vn6BTYkC/2zrMEMDsXkWsKW
xaVKl0WZlwutDM1SVm639PQMV/7rAsfGabmC5YqyWgGJG9BJgjbYfktGI1Di
zNSVTOskefFBmxo1UpfXqiA1GbBaYbchcB8C7GeOwhGyris9a5A3cQuCERWO
5nqlkcZYXC61EWDtzQoMQ2TKpDAdCMqAvLhdqkqJeqkEGHujKqQKcjcwByYa
VYtyDuuXa1XVsF/8hpPTXAPRITyu02UwIlJZ4NcCHs1VitvMN/j8jUKKOBHc
ZKGLsTgH/wGGM2GW5S0w7GkbUEVgz2B1SjRFrotrOcvVkD5fAx2YW90nqTGL
d6WzLFdJ8kAcF3VVZk2KEkuS40IcPHz4WDwrC7UcPSs3qhhdLGW6lCugxDOB
O+RIrZ2bIawYvShk3VQKRaziIWHSpQL2ZSt5oAGMffz4LzDx6fHoaMz2qat6
Pkrn1YLs1xMwnz6JXNWoJRyDHeIfUsV/N6pIFUoJ7IUElso8B/LOEJQZAiJk
JG6dkaZv5YZAUoplmWdADZ6WAbugE1bOujRGEdwRCdz1jcwbXq5cKaecdq2u
gakP61zqwsBKt0i3MWhXMKN2/rJhM+3o6IF4XhY3qGsARlr8SM11oel7kqCI
AfIEYp4RgzdvLy4RY/GvODmlz+cv/vPt8fmLI/x88Wry+rX/kNgZF69O374+
aj+1Tz4/ffPmxckRPwyjIhpKBm8mPw1YqoPTs8vj05PJ6wHqs472LlmUM4WW
o6p1pVDt0iTO68gGnj0/+9//2X+MtnD+8vnB/v6/g7L5y1f7//YYvoA3Frxa
WYDf8FcQ+yaRa/CWCqmAzkHxa10D1A/R0NB/CoF+DNL84h1K5v2h+GaWrvcf
f2sHcMPRoJNZNEgy2x7ZepiF2DPUs4yXZjTekXTM7+Sn6LuTezD4zXcAB0qM
9r/67lu0oLOqrMu0zMXpjaputLpFuwEFrd14hiYFHoEmjIYJ1hwGRTbMELIy
bdK8NIg4kX81BvH540dwZtBX67aktJ9VVY6ui/IWvHKhcPVyTn5SmpCKWDWm
RmORi0qBaTQAL2K2Ec8tqE4IglXFlnDMuJw16POE0hJgYCxefJCrdc4O2gAI
B/R1keZNBgw0s1ynYqVqCbmHZI82Ygds7uzsxd8vAzgCS8sqnV5DAIuiJpMY
ORKfPu2CkV2WomqsD3gRo2gtr7S/pQRYkY4HdGHcDYQHtwXx9vw1GfCtApOW
CFcQL1cgiwbyqsrUMB+3bJFnpSAU81clw/1aOBQ7IUSWaQ0ougtiGi9wUQn6
WOnFkuQOk8qMHJTAsFigGPEBytrAxyYXz4+PBeRtCmQiZhLUt/9QVAocG3K3
mvIBmivFXH8ASnOt8oz1lZZNnuEqyPRcwz4CVgk5MEibGuQ4mdcYwjDmNWkK
8AuZCMoA1EpR3e782AnMyZowwZoLiFOQlXrIVcBoqsCMMzG9xPB4rswak84p
zlkoCCqYKKyavNZoQG1s5WhKoPygXRXCQ8WPgSwgUymAWlUbnPQAbdVu7Qcy
LgZsy9pMLTAgzCgGrVBHd8SxsqqIx4yTn06kIQQEFzVLjokZBd4NqHGBarUy
Za8h1bRGSX7d/lpan7IZig10RmHmrn9Gi6gqiJgYJIPVy8C2OeZjWCXSbf6D
Ku08qA0ZdFPolBKdiBD/WhgI1JDqtBybtUr1XKdjMQEDWNN2NDHh2eyKh8wY
jfTJY2/a/3FxesK7YY7tohQL1rLqGkpAjTYyU6AxReIGlbDQwAz0fAPPybrr
gYgDCjRc4zZnOEfpCnIKoLVUaE+XgQo4RkpKw5gw7CqTocXHQizK2okFyFOg
g1wObWmda3CAAqECUkUmSKwAQn8H5d/581dhygU1SgRuVLxAeoII/unT0HNo
AuA1LDOs2ChRhs1zuiv1yti9OnvHNACZhRyyWCjyqJmqbxUYmwysE4lbyY7Z
i14pickZuRCUAbFwbzXA40zdGZ5iHmycYO1marWOHGLchkpC4zVIMGWuIE+p
4XMufIkCgzuYPCqONMOoctgVhWKbpqyHAk7mfHHJ+9HFuqnbPLLeypYtGJHm
1+4T5s4UroncuwvFlvJo/Hi8/37Hl4O3t3HRCYLZ09ne/dn16OEjKgIfYL3X
jo9aRmhwF9m1QZ79x+6I90IaQUXfrZWhj1feZKyCnDorAEJdsQgrdaNQ8l59
rerG4iWo4NXl5Rm5eKQzg0+AgwSZFFJz4R8XJYX9xXCxZwGI9wI+xMEjN2VM
obtd1rFHKAx7gd1YXY3FhVLi3fudB67qd+jGrO5SHbJCVAkMzNo/hSnh4hTU
ZnMCKYoYAUB4u95GrVtMhH0QHYZAiyUpFVEwtoLNLBRVjj40sAYJWWjTnOLR
L32GOm+K1GFVZCJ2OYotUAA0VWE6VCixJ61CEr/pXXxHz61S0b46+Wu261TI
tsTroqGZOBxhvmmTPcSkKArxwG8JPBxTWHwsHA42vLw1a0JJHyKUlYDKwu0v
sD6sbXTwO7dNhjCgFVlkgcNendBizgo/Cz4O/lHwEbJCXyIAoXTq3Ht0mPd5
U263BTJnciqL8jw0489I3oY21FCqjJmbFDtY3OsZAdR8DlrHUGVjeK1XAOWm
mVktOBFH3gWKLqHYJSiLeIKEk22cSp3fDOeP/lh9EBMhlNMAfA+1MWwdP8zm
+0IWioTbYD75wMheKMBvbWuTyvazhKZ2FUyqAsT+Nax2ocHSmFFxyultL3fk
ZDLLtMcQeGRWNoVPLr1BnTJJYDjPIVFWUSjHnKF1qUwvlPHab58gKewyN9tO
GoU0TPMoR8XmT1gVOlQhn+4mxMAFg1fZ1IhHtquCKgeneYtlMe+HSweKEmx/
dndUaCKY1VWT1lYANqxakXFDbFuUDI+ug7mChJ4b+iIsHzz3UU5E7cducN1F
W3AttHuek96fEaULgHkohqyQcS6rIQDwPmnydCsERl4OkTZDnZXWxO8XQlR9
3xFZh9RwRsbYwmxen2IzOM4OvTX3iRuI1NQdlK1wWkuzFqjqdMyisG0vAj1X
1TLG/HbUf/yPQJkI8WkIRmKcAXlF8dCKlnMdyr5bgMUmFiHGWVS5nnHz5I3t
vtiulrGbc00tGaaHVA25Ysi6tO+44Ko9VYHty3a6RTsfP1KXCHs+vtPtJW4I
qiibaAswGGjRVVYgrhorKKcZW6lMgdDVs9cX+wePvtr/fv/q72+ODi9eTUYH
Xz65urj48e3V+enVq4Pvr169Obi4mopUryFfMw1UamLHa/bJ+CCM58gxnqJc
A/56DWdluoeK+3X9smpnudk/GAFTI7OUyE6oUAeE3eDICT1lVC2I9nfehmLB
WBZlcVzxzjTUshuu87cqCvQQCumNUjZY03GJp2/Lhja+c+dnGmob8wL4aNs7
bIauyRO1bYKuI3UoERI5V21bN9GZQwwi/CjAYtv6I9HFPVA0HAy12NH2zZMX
H2pIYci6vPFZi8L65fLZkS0YmNNRXY4so+fIm6mjfXDzLa3wmMlEnceKZ4P8
jMEWUhsLLTlsV7YRHXc2L/O8vDWHSfLLL78kNuB8TIRodFHvP7mqORpcEaNP
xcMPwOzXQux9IS5xBH2HNjIgwycjszY/EF/sWTpfIZkKCgx0pSsmCKxc6ezr
5JOwzTxi/Wtig3bLvGDqSF1IFq3DhplCtoHrkRi0DA6o8BMHI+p6UkNmgeHA
BcM6XdoIT9uxVb3H6zFR6+WTKFM/TEkQMLU5ECexG7ipfRsgfATJF6rGE287
p8LyFBIArxUf4oOeJolhGqWjs0bT/gsxJUvKVNaZHMQIb2DDe9UbEnB28zWM
B6aq/EfUUt/KgbYwEAKv/rSzl9NxS3LqSiAK86SaYMt/4fNgvWgw5Wmf4oei
Ao3qUldAkJA44JwCWecPhD5Ft1Ppdv/2/DjInvtF7EDAbtO6KxNCd7XMtKV+
J8uLtmbZiqp57DpRqhlkPMqqDwiQpV/eKdeY1zApadbY1Ub7at1kOv59xKb9
vjHlFKntdvvesp9PwHN8RAhbuC3bLOBvgKP38rNlNH192QCeMY0DkthtkcXG
GqQh3XGF4buvKxUrgWyRK3xvSI8fPhSqqsqq26M4xXYLlAhgw3oeUtEcO21A
XPOJu28yYm7Zkhm6Q4Dcn5C01xYI0+dgALhH21nlqBocsHnp2GDsilpTWtoc
LqikaDvk1o6tPH9d7lTmzKNW1AZRme8RtP7ZtuZdqksL2z4VRvx2ctj+8IYO
sK/WDq9skm3DTtI2E56KC/i8Y67Bc9f4n8/8W/K7LTjh5LbBpf+5GrGuhPyt
6WZfxP3nyilhfpNTd8CfTCII41Gb9V3rUvaSjY3HrS10z/l8StCfrmCa4Vl9
RznA1bqEH64wvINA/5WPQ69MKnNZ2dH3QQ7CCwVhbbpNhZ1h2kNpygFdYhhs
k5XYyp780d26exVhj6gsMG1Hycru2F4UALvAO3fYFT0A2Lslh3VQYUsBivAd
xQTh082mBAu7KxA4B0G/iC/P1WpEaDhyDAxsRH2pCzwLlNxQbIPoOm7QLUEF
uXLFvd0DjA27IJUpf7xotoHPdDYy9kKeMrz1dGc5AQl46fYplIP8qEfcTcWs
bzwVP1AtvUMo5ucPGfHugDN+5LMA7f+nNfznhLTjubM3i2qYQvwweX18NNyy
BzmDrItzkDs6+3r7YOfejji3wVmKQXcc73xiPQdUy7b71wZWsEWwxKaDRu93
HrD/tXFpN8pp8fIapd/WE/f2Lk+PToMKO+z7d7o3/kJmETZwggs1kCxK8gW7
YxNd4HDNHDrU4tY/b0duxQPffIpywPCseOuOSb8YXLZlA1d3HVIp51Ez5Y8x
PkfK8wDPdqNTwe+95KPivl/5l79P+WfYwPteBbnP551a/CHu9JnHFn8qjNhS
JZ1Cc+eLqrHwPCpIm8H+fUvM5kSn9j5x71GojE7dC7UoSYCt/GwPPTo5CNbT
4dkE3u4t17aHEVz/HIvXwOzUMZZdtQSu8D2BD8pM7SE67JS6G+FVowPuetgm
DMS/qlyJfXzgyZdfPvpy2H89yhJuu+6hlPqOZrzc8GLe0OWQ07aPEdcx7dUh
m3TaYE1w1eNP25GbTjYgcEMam5WrnUcHu4nvIF3Zjj/UJ68mYB07/pfdbjET
niZc+d8gPYHFd2iNoejS3eU7/i2LT72LUwJB1/Z7/7WZxd1zbAl194Qelu+Z
HRR6d0+6z7hsxmPDLkTUG4VXw9Mm5whK4VNlJg6erqVmfLyY/u4+Z1BXkEbe
PTp4Hw529dP9PeySvDvRmf+RFrxv7988HI8P/mv/yWj/24BepHycctJ866uX
oGpZyQ961ayELXvc7bPIdKYnzTTMHEFGMARbPxBfiN7aaQcZgr8Hu35GXP6M
xUlZK1aHO831/cD7YWTOzQTGAKe2tgMc9TfxBtzby/tvwMFWR/zOgr2o4MLu
D0EO1tuls4tH57HB9UJdh1d3lM9muHLlRjVdEeZiAxAO7IzlMxaT4Ij7rgVa
Hsb3iyxu4XRvMuqa+kmVxtyLoLcPo+8CZ4B+aeo+Jimg9dy03PHM7t4Jvi2n
fHjBhkK89JoHGBSXOmH2N3UBzYj2SnoZNuCiIxqBwLjbH2usmONeZtBhdncN
QHLBiacHFboUHZL1e4g6Yl3s+S1xgBm00YC/9MQElIWNBEE12QO6TCHCgb5p
d0P7Z0aAPmXezc9nxIBLl8zeX/pGx+N/5izzQfyaB7mxKyaO+QwILwlDJR5s
kY4m+R2qzOJWselcM6ZuLTxQ4G0dqPgOhb83hMvgyu5lTiwRg4uQSSImriGD
xRt196hqcdeH7RsJDXXMw1XtXWS+QLHB9yU615HsOwB9t5KEKd1eAn/F5Zay
uuHDH+IC++4NndXi66XYu3ev7IXi7O4JDW9dGh/KpL3TGh6Vb50U84uxOL0p
tqdDvqJNS6bz+uAkvFoVXtGm96NsuQyoq5WNMfRa4fY1JpsH069uA4bPI7Al
hq/G8ZajS554SU/jnTo6HG8P2YdcGbgzZzAqHCVYrmswduOsBYiXOXFWlc1i
KZba9dBWJOfjyclkS8g/QuFCb5fQTSKagvfTMi+cyNg5jtPp87laaEgSNp22
ccXD/HprktD180Omu8Z3gZITeisWz66JWMIk2+4yWjIIsFuoO3yx8/8G0eUF
NrbxfI72n/CRVr6xaQYW6Yfip6Rz34WGuA0ajJ0kJ9fAZZHxa4IqOdFHh+LR
wXdWtJDNpNekh+Rc0XWIFIhHLyvym6EzUAjKepK6AIm/meTjIRumyp4O5hDH
1eATGDjQFtLPVOPk/wAcQtFkjT4AAA==

-->

</rfc>
