<?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.39 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ladd-privacypass-bbs-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.0 -->
  <front>
    <title abbrev="BBS PPAS">BBS for PrivacyPass</title>
    <seriesInfo name="Internet-Draft" value="draft-ladd-privacypass-bbs-00"/>
    <author fullname="Watson Ladd">
      <organization>Akamai Technologies</organization>
      <address>
        <email>watsonbladd@gmail.com</email>
      </address>
    </author>
    <date year="2023" month="August" day="21"/>
    <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 represnetation, 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 = 0x0003;  /* 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>"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 token_key_id in network byte order.</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>The <tt>ExtendedTokenRequest.TokenRequest</tt> contains a supported <tt>token_type</tt>.</li>
            <li>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.</li>
            <li>The <tt>ExtendedTokenRequest.extensions</tt> value is permitted by the Issuer's policy.</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 = 0x0003
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, 0x0003, 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 = 0x0003
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 = 0x0003;
  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 = 0x0003
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>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <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="10" month="July" year="2023"/>
            <abstract>
              <t>   BBS is a digital signature scheme categorized as a form of short
   group signature that supports several unique properties.  Notably,
   the scheme supports signing multiple messages whilst producing a
   single output digital signature.  Through this capability, the
   possessor of a signature is able to generate proofs that selectively
   disclose subsets of the originally signed set of messages, whilst
   preserving the verifiable authenticity and integrity of the messages.
   Furthermore, these proofs are said to be zero-knowledge in nature as
   they do not reveal the underlying signature; instead, what they
   reveal is a proof of knowledge of the undisclosed signature.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-bbs-signatures-03"/>
        </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="30" month="June" 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-02"/>
        </reference>
      </references>
      <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="9" month="August" 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-14"/>
        </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="9" month="August" 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-12"/>
        </reference>
      </references>
    </references>
    <?line 248?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
