<?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.36 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-meunier-privacypass-reverse-flow-04" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title abbrev="Privacy Pass Reverse Flow">Privacy Pass Reverse Flow</title>
    <seriesInfo name="Internet-Draft" value="draft-meunier-privacypass-reverse-flow-04"/>
    <author fullname="Thibault Meunier">
      <organization>Cloudflare Inc.</organization>
      <address>
        <email>ot-ietf@thibault.uk</email>
      </address>
    </author>
    <date year="2026" month="May" day="13"/>
    <area>Security</area>
    <workgroup>Privacy Pass</workgroup>
    <abstract>
      <?line 42?>

<t>This document specifies an instantiation of Privacy Pass Architecture <xref target="RFC9576"/>
that allows for a "reverse" flow from the Origin to the Client.
It describes a method for an Origin to issue a state update to the Client in response to a request in
which a token is redeemed.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://thibmeu.github.io/draft-meunier-privacypass-reverse-flow-informational/draft-meunier-privacypass-reverse-flow.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-meunier-privacypass-reverse-flow/"/>.
      </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/thibmeu/draft-meunier-privacypass-reverse-flow-informational"/>.</t>
    </note>
  </front>
  <middle>
    <?line 49?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document specifies an instantiation of Privacy Pass Architecture <xref target="RFC9576"/>
that allows for a reverse flow from the Origin to the Client.</t>
      <t>In other words, it specifies a way for an Origin to act as an Attester + Issuer.</t>
    </section>
    <section anchor="motivation">
      <name>Motivation</name>
      <t>With Privacy Pass issuance as described in <xref target="RFC9576"/>, once a token is presented by a Client,
it is considered spent and cannot be reused in order to guarantee unlinkability. If a token
was to be presented twice, the two requests would be linkable by the Origin.</t>
      <t>However, requiring that all tokens are spent only once means that Clients need
to request more tokens to perform more requests. This is true even if the initial request
didn't need a token presentation, for instance due to a cost being insignificant to the Origin.</t>
      <t>This draft provides a mechanism for an Origin to provide a requesting Client with an updated
state, allowing them to present new tokens on future requests. Origin act as a new Attester/Issuer
entity.</t>
      <t>Below, we present different use cases.</t>
      <section anchor="refunding-tokens">
        <name>Refunding tokens</name>
        <t>Certain Origins use Privacy Pass tokens to rate-limit requests they receive over a certain
time window because of resource constraints. If a Client sends a request that can
be served without utilising that resource, the Origin would like to authorise them
to do a second request. This is the case for request requiring compute and the compute is low,
or when the request leads to a redirection instead of content generation for instance.</t>
        <t>With a reverse flow,
a Client that has already been authorised by an Origin can maintain that authorization,
without losing the unlinkability property provided by Privacy Pass.</t>
      </section>
      <section anchor="bootstrapping-issuer">
        <name>Bootstrapping Issuer</name>
        <t>An Origin wants to grant 30 access for Clients that solved a
CAPTCHA. To do so, it consumes a type 0x0002 public verifiable token from an initial Issuer that guarantees
a CAPTCHA has been solved,
and use it to issue 30 type 0x0001 private tokens.
Without a reverse flow, the Origin would have to require 30 0x0002 Issuer tokens, which
have lower performance and a higher number of requests going to the Issuer.</t>
      </section>
      <section anchor="attester-feedback-loop">
        <name>Attester feedback loop</name>
        <t>In <xref target="RFC9576"/>, a Client gets a token from an Issuer and redeems it at an Origin.
However, if the Client's request is deemed unwanted by the Origin at redemption
time, there is no mechanism that prevents the Client from going back to
the initial Issuer to get a new token and be authorized again.</t>
        <t>With a reverse flow, the initial Issuer may require Clients to present an
Origin-issued token before providing them with a second token.
This allows for a feedback loop between the Origin and the initial Issuer,
without breaking Client unlinkability.</t>
      </section>
      <section anchor="anonymous-credential-composition">
        <name>Anonymous credential composition</name>
        <t>Privacy Pass Architecture as defined by <xref target="RFC9576"/> centers around tokens,
which issuance flows are defined in <xref target="RFC9578"/>.</t>
        <t>More recent explorations (<xref target="PRIVACYPASS-ARC"/>, <xref target="PRIVACYPASS-BBS"/>, <xref target="PRIVACYPASS-ACT"/>)
are providing credentials to clients, which presentation result in a scoped token.
These schemes are instantiation of a reverse flow, both because the Client holds a state
it can use to perform multiple token presentation, as well as because the Origin can
provides an updated state to requesting Client.</t>
        <t>In additions, these schemes are more costly, and usage specific.
With a reverse flow, the initial Issuer and the Origin issuer may use
different credentials, which are suited to their use case.
One use case is rate limiting and blocking. <xref target="PRIVACYPASS-ARC"/> provides
rate-limit per origin with a unique credentials, while <xref target="PRIVACYPASS-ACT"/>
allows to rate-limit a specific session once it's been established.</t>
      </section>
    </section>
    <section anchor="terminology">
      <name>Terminology</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?>

<t>We reuse terminology from <xref target="RFC9576"/>.</t>
      <t>The following terms are used throughout this document:</t>
      <dl>
        <dt><strong>Flow:</strong></dt>
        <dd>
          <t>Direction from PrivateToken issuance to its redemption. The entity starting
the flow acts as an Issuer, while the end of the flow acts as an Origin. The
Client is always included, as it finalises the CredentialResponse, and coordinate
interactions.</t>
        </dd>
        <dt><strong>Initial Flow:</strong></dt>
        <dd>
          <t>Issuer -&gt; Attester -&gt; Client -&gt; Origin. This flow produces a PrivateToken that
is used by the Origin to kickstart a Reverse Flow.</t>
        </dd>
        <dt><strong>Reverse Flow:</strong></dt>
        <dd>
          <t>Issuer &lt;- Attester &lt;- Client &lt;- Origin. This flow allows the Origin to issue
a PrivateToken. In the reverse flow, the Origin operates one or more Issuer, and
the Client <bcp14>MAY</bcp14> provide these tokens either to the Initial Attester/Issuer, or
use them against the Origin</t>
        </dd>
        <dt><strong>Initial Attester/Issuer:</strong></dt>
        <dd>
          <t>Attester/Issuer part of the Initial Flow</t>
        </dd>
        <dt><strong>Origin Issuer:</strong></dt>
        <dd>
          <t>Issuer operated by the Origin</t>
        </dd>
        <dt><strong>Origin PrivateToken:</strong></dt>
        <dd>
          <t>PrivateToken issued by the Origin</t>
        </dd>
        <dt><strong>Reverse Origin:</strong></dt>
        <dd>
          <t>An entity that consumes the Origin PrivateToken. It can be the Origin, or the
Initial Attester/Issuer</t>
        </dd>
      </dl>
    </section>
    <section anchor="architecture">
      <name>Architecture overview</name>
      <t>Along with sending their PrivateToken for authentication (as specified in <xref target="RFC9576"/>), Client
sends CredentialRequest</t>
      <figure anchor="fig-reverse-flow-architecture">
        <name>Architecture of Privacy Pass with a Reverse Flow</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="336" width="888" viewBox="0 0 888 336" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
              <path d="M 32,64 L 32,320" fill="none" stroke="black"/>
              <path d="M 136,32 L 136,64" fill="none" stroke="black"/>
              <path d="M 208,32 L 208,64" fill="none" stroke="black"/>
              <path d="M 240,64 L 240,320" fill="none" stroke="black"/>
              <path d="M 280,32 L 280,64" fill="none" stroke="black"/>
              <path d="M 552,32 L 552,64" fill="none" stroke="black"/>
              <path d="M 584,64 L 584,176" fill="none" stroke="black"/>
              <path d="M 584,240 L 584,288" fill="none" stroke="black"/>
              <path d="M 624,32 L 624,64" fill="none" stroke="black"/>
              <path d="M 704,32 L 704,64" fill="none" stroke="black"/>
              <path d="M 744,64 L 744,144" fill="none" stroke="black"/>
              <path d="M 744,192 L 744,320" fill="none" stroke="black"/>
              <path d="M 792,32 L 792,64" fill="none" stroke="black"/>
              <path d="M 808,32 L 808,64" fill="none" stroke="black"/>
              <path d="M 840,64 L 840,320" fill="none" stroke="black"/>
              <path d="M 880,32 L 880,64" fill="none" stroke="black"/>
              <path d="M 8,32 L 136,32" fill="none" stroke="black"/>
              <path d="M 208,32 L 280,32" fill="none" stroke="black"/>
              <path d="M 552,32 L 624,32" fill="none" stroke="black"/>
              <path d="M 704,32 L 792,32" fill="none" stroke="black"/>
              <path d="M 808,32 L 880,32" fill="none" stroke="black"/>
              <path d="M 8,64 L 136,64" fill="none" stroke="black"/>
              <path d="M 208,64 L 280,64" fill="none" stroke="black"/>
              <path d="M 552,64 L 624,64" fill="none" stroke="black"/>
              <path d="M 704,64 L 792,64" fill="none" stroke="black"/>
              <path d="M 808,64 L 880,64" fill="none" stroke="black"/>
              <path d="M 248,96 L 376,96" fill="none" stroke="black"/>
              <path d="M 456,96 L 584,96" fill="none" stroke="black"/>
              <path d="M 240,112 L 304,112" fill="none" stroke="black"/>
              <path d="M 512,112 L 576,112" fill="none" stroke="black"/>
              <path d="M 592,142 L 608,142" fill="none" stroke="black"/>
              <path d="M 592,146 L 608,146" fill="none" stroke="black"/>
              <path d="M 720,142 L 736,142" fill="none" stroke="black"/>
              <path d="M 720,146 L 736,146" fill="none" stroke="black"/>
              <path d="M 584,160 L 632,160" fill="none" stroke="black"/>
              <path d="M 792,160 L 832,160" fill="none" stroke="black"/>
              <path d="M 592,176 L 632,176" fill="none" stroke="black"/>
              <path d="M 800,176 L 840,176" fill="none" stroke="black"/>
              <path d="M 248,240 L 344,240" fill="none" stroke="black"/>
              <path d="M 472,240 L 584,240" fill="none" stroke="black"/>
              <path d="M 40,256 L 56,256" fill="none" stroke="black"/>
              <path d="M 216,256 L 240,256" fill="none" stroke="black"/>
              <path d="M 32,272 L 56,272" fill="none" stroke="black"/>
              <path d="M 560,288 L 576,288" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="840,160 828,154.4 828,165.6" fill="black" transform="rotate(0,832,160)"/>
              <polygon class="arrowhead" points="744,144 732,138.4 732,149.6" fill="black" transform="rotate(0,736,144)"/>
              <polygon class="arrowhead" points="600,176 588,170.4 588,181.6" fill="black" transform="rotate(180,592,176)"/>
              <polygon class="arrowhead" points="600,144 588,138.4 588,149.6" fill="black" transform="rotate(180,592,144)"/>
              <polygon class="arrowhead" points="584,288 572,282.4 572,293.6" fill="black" transform="rotate(0,576,288)"/>
              <polygon class="arrowhead" points="584,112 572,106.4 572,117.6" fill="black" transform="rotate(0,576,112)"/>
              <polygon class="arrowhead" points="256,240 244,234.4 244,245.6" fill="black" transform="rotate(180,248,240)"/>
              <polygon class="arrowhead" points="256,96 244,90.4 244,101.6" fill="black" transform="rotate(180,248,96)"/>
              <polygon class="arrowhead" points="48,256 36,250.4 36,261.6" fill="black" transform="rotate(180,40,256)"/>
              <g class="text">
                <text x="44" y="52">Origin</text>
                <text x="100" y="52">Issuer</text>
                <text x="244" y="52">Origin</text>
                <text x="588" y="52">Client</text>
                <text x="748" y="52">Attester</text>
                <text x="844" y="52">Issuer</text>
                <text x="416" y="100">Request</text>
                <text x="372" y="116">TokenChallenge</text>
                <text x="468" y="116">(Issuer)</text>
                <text x="664" y="148">Attestation</text>
                <text x="712" y="164">CredentialRequest</text>
                <text x="716" y="180">CredentialResponse</text>
                <text x="588" y="196">CredentialFinalization</text>
                <text x="584" y="212">|</text>
                <text x="588" y="228">CredentialPresentation</text>
                <text x="408" y="244">Request+Token</text>
                <text x="136" y="260">CredentialRequest</text>
                <text x="412" y="260">+CredentialRequest(Origin)</text>
                <text x="140" y="276">CredentialResponse</text>
                <text x="228" y="276">-&gt;</text>
                <text x="252" y="292">--</text>
                <text x="408" y="292">Response+CredentialResponse(Origin)</text>
                <text x="588" y="308">CredentialFinalization</text>
                <text x="584" y="324">|</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+---------------+        +--------+                                 +--------+         +----------+ +--------+
| Origin Issuer |        | Origin |                                 | Client |         | Attester | | Issuer |
+--+------------+        +---+----+                                 +---+----+         +----+-----+ +---+----+
   |                         |                                          |                   |           |
   |                         |<---------------- Request ----------------+                   |           |
   |                         +-------- TokenChallenge (Issuer) -------->|                   |           |
   |                         |                                          |                   |           |
   |                         |                                          |<== Attestation ==>|           |
   |                         |                                          +------ CredentialRequest ----->|
   |                         |                                          |<----- CredentialResponse -----+
   |                         |                                CredentialFinalization        |           |
   |                         |                                          |                   |           |
   |                         |                                CredentialPresentation        |           |
   |                         |<------------ Request+Token --------------+                   |           |
   |<-- CredentialRequest ---+        +CredentialRequest(Origin)        |                   |           |
   +--- CredentialResponse ->|                                          |                   |           |
   |                         |-- Response+CredentialResponse(Origin) -->|                   |           |
   |                         |                                CredentialFinalization        |           |
   |                         |                                          |                   |           |
]]></artwork>
        </artset>
      </figure>
      <t>The initial flow matches the one defined by <xref target="RFC9576"/>. A Client gets challenged when
accessing a resource on an Origin. The Client goes to the Attester to get issued a Token.</t>
      <t>Through configuration mechanism not defined in this document, the Client is aware the Origin
acts as a Reverse Flow Issuer.</t>
      <t>This is an extension of <xref target="RFC9576"/>. The redemption flow of a Privacy Pass token is defined in
<xref section="3.6.4" sectionFormat="of" target="RFC9576"/>. Reverse flow extends this so that redemption flow is interleaved with
the issuance flow described in <xref section="3.6.3" sectionFormat="of" target="RFC9576"/>.
This is denoted in the diagram above by the Client sending <tt>Request</tt>+<tt>Token</tt>+<tt>CredentialRequest(Origin)</tt>.
The Origin runs the issuance protocol, and returns <tt>Response</tt>+<tt>CredentialResponse(Origin)</tt>.</t>
      <t>Such flow can be performed through various means. This document introduces one to serve as example and
first basis.</t>
    </section>
    <section anchor="credentialrequest-credentialresponse-and-credentialfinalization">
      <name>CredentialRequest, CredentialResponse, and CredentialFinalization</name>
      <t>In <xref target="fig-reverse-flow-architecture"/>, the Client sends an <tt>CredentialRequest</tt> and receives an <tt>CredentialResponse</tt>.
These are meant to abstract request from different protocol to the Issuer.</t>
      <t>As specified in <xref section="3.5" sectionFormat="of" target="RFC9576"/>,</t>
      <ul empty="true">
        <li>
          <t>The structure and semantics of the TokenRequest and TokenResponse messages depend on the issuance protocol and token type being used.</t>
        </li>
      </ul>
      <t>The introduction of Privacy Pass issuance protocol based on Anonymous Credentials, such as <xref target="PRIVACYPASS-ARC"/> or <xref target="PRIVACYPASS-ACT"/>,
modifies <tt>TokenRequest</tt> (resp. <tt>TokenResponse</tt>) to use <tt>CredentialRequest</tt> instead (resp. <tt>CredentialResponse</tt>).</t>
      <t>Upon receiving an <tt>CredentialResponse</tt>, the Client has to finalise the <tt>Credential</tt> so it can be
presented to an Origin.
This may be a <tt>Finalization</tt> for type 0x0002 as defined in <xref section="7" sectionFormat="of" target="RFC9578"/>,
a presentation for <xref section="7.3" sectionFormat="of" target="PRIVACYPASS-ARC"/>,
or even a <tt>TokenRefund</tt> for <xref target="PRIVACYPASS-ACT"/>.</t>
      <t>All three examples ensure that an Origin Issuer provides the Client with a state update that it needs to finalize, and present.</t>
    </section>
    <section anchor="reverse-flow-with-an-http-header">
      <name>Reverse flow with an HTTP header</name>
      <t>This section defines a Reverse Flow, as presented in <xref target="architecture"/>, leveraging <tt>PrivacyPass-Reverse</tt> HTTP header.</t>
      <t><tt>CredentialRequest(Origin)</tt> and <tt>CredentialResponse(Origin)</tt> are transmitted through HTTP Header <tt>PrivacyPass-Reverse</tt>.
<tt>PrivacyPass-Reverse</tt> is a base64url (<xref target="RFC4648"/>) encoded <tt>GenericBatchTokenRequest</tt> (resp. <tt>GenericBatchTokenResponse</tt>)
as defined in <xref section="6.1" sectionFormat="of" target="BATCHED-TOKENS"/> (resp. <xref section="6.1" sectionFormat="of" target="BATCHED-TOKENS"/>).</t>
      <t>Below is an example request that uses <xref target="RFC9577"/> to pass the request Token, as well as <tt>PrivacyPass-Request</tt> for its reverse flow.</t>
      <artwork><![CDATA[
GET /foo HTTP/1.1
Host: example.com
Authorization: PrivateToken token="abc..."
PrivacyPass-Reverse: "def..."

HTTP/1.1 200 OK
PrivacyPass-Reverse: "001..."

[BODY]
]]></artwork>
      <section anchor="client-behaviour">
        <name>Client behaviour</name>
        <t>Along with sending a finalised token from the Initial Issuer to the Origin that it sends through an authorization response as defined in
<xref target="RFC9577"/>, the Client may send a <tt>TokenRequest</tt> as defined in <xref target="RFC9578"/>,
<xref target="BATCHED-TOKENS"/>, or <xref target="PRIVACYPASS-ARC"/>. In all these definitions, <tt>CredentialRequest</tt> <bcp14>MUST</bcp14>
prepended by a <tt>uint16_t</tt> representing the token type.</t>
        <t>The same security and privacy guarantees applies as to the initial issuance flow.
The Client is responsible to coordinate between the different entities.
Specifically, if the Reverse Origin is the Initial Attester/Issuer, the Client
<bcp14>SHOULD</bcp14> account for possible privacy leakage.</t>
      </section>
      <section anchor="originissuerattester-deployment">
        <name>Origin/Issuer/Attester deployment</name>
        <t>In this model, the Origin, Attester, and Issuer are all operated by the same
entity, as shown in <xref target="fig-deploy-shared"/>. The Reverse Flow is the same as
the Initial Flow, except for the request/response encapsulation.
The Origin is the Reverse Origin.</t>
        <figure anchor="fig-deploy-shared">
          <name>Shared Deployment Model</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="304" width="552" viewBox="0 0 552 304" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 56,48 L 56,80" fill="none" stroke="black"/>
                <path d="M 88,80 L 88,192" fill="none" stroke="black"/>
                <path d="M 88,256 L 88,288" fill="none" stroke="black"/>
                <path d="M 128,48 L 128,80" fill="none" stroke="black"/>
                <path d="M 232,32 L 232,80" fill="none" stroke="black"/>
                <path d="M 256,48 L 256,80" fill="none" stroke="black"/>
                <path d="M 304,80 L 304,96" fill="none" stroke="black"/>
                <path d="M 304,144 L 304,160" fill="none" stroke="black"/>
                <path d="M 344,48 L 344,80" fill="none" stroke="black"/>
                <path d="M 360,48 L 360,80" fill="none" stroke="black"/>
                <path d="M 400,80 L 400,104" fill="none" stroke="black"/>
                <path d="M 400,136 L 400,208" fill="none" stroke="black"/>
                <path d="M 432,48 L 432,80" fill="none" stroke="black"/>
                <path d="M 448,48 L 448,80" fill="none" stroke="black"/>
                <path d="M 480,80 L 480,288" fill="none" stroke="black"/>
                <path d="M 520,48 L 520,80" fill="none" stroke="black"/>
                <path d="M 544,48 L 544,80" fill="none" stroke="black"/>
                <path d="M 232,32 L 528,32" fill="none" stroke="black"/>
                <path d="M 56,48 L 128,48" fill="none" stroke="black"/>
                <path d="M 256,48 L 344,48" fill="none" stroke="black"/>
                <path d="M 360,48 L 432,48" fill="none" stroke="black"/>
                <path d="M 448,48 L 520,48" fill="none" stroke="black"/>
                <path d="M 56,80 L 128,80" fill="none" stroke="black"/>
                <path d="M 256,80 L 344,80" fill="none" stroke="black"/>
                <path d="M 360,80 L 432,80" fill="none" stroke="black"/>
                <path d="M 448,80 L 520,80" fill="none" stroke="black"/>
                <path d="M 248,96 L 296,96" fill="none" stroke="black"/>
                <path d="M 312,96 L 392,96" fill="none" stroke="black"/>
                <path d="M 408,96 L 472,96" fill="none" stroke="black"/>
                <path d="M 488,96 L 528,96" fill="none" stroke="black"/>
                <path d="M 88,112 L 240,112" fill="none" stroke="black"/>
                <path d="M 320,112 L 472,112" fill="none" stroke="black"/>
                <path d="M 96,128 L 216,128" fill="none" stroke="black"/>
                <path d="M 352,128 L 480,128" fill="none" stroke="black"/>
                <path d="M 96,158 L 144,158" fill="none" stroke="black"/>
                <path d="M 96,162 L 144,162" fill="none" stroke="black"/>
                <path d="M 256,158 L 296,158" fill="none" stroke="black"/>
                <path d="M 256,162 L 296,162" fill="none" stroke="black"/>
                <path d="M 88,176 L 160,176" fill="none" stroke="black"/>
                <path d="M 320,176 L 392,176" fill="none" stroke="black"/>
                <path d="M 96,192 L 160,192" fill="none" stroke="black"/>
                <path d="M 328,192 L 400,192" fill="none" stroke="black"/>
                <path d="M 88,256 L 112,256" fill="none" stroke="black"/>
                <path d="M 448,256 L 472,256" fill="none" stroke="black"/>
                <path d="M 96,272 L 136,272" fill="none" stroke="black"/>
                <path d="M 440,272 L 480,272" fill="none" stroke="black"/>
                <path d="M 528,32 C 536.83064,32 544,39.16936 544,48" fill="none" stroke="black"/>
                <path d="M 248,96 C 239.16936,96 232,88.83064 232,80" fill="none" stroke="black"/>
                <path d="M 528,96 C 536.83064,96 544,88.83064 544,80" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="480,256 468,250.4 468,261.6" fill="black" transform="rotate(0,472,256)"/>
                <polygon class="arrowhead" points="480,112 468,106.4 468,117.6" fill="black" transform="rotate(0,472,112)"/>
                <polygon class="arrowhead" points="400,176 388,170.4 388,181.6" fill="black" transform="rotate(0,392,176)"/>
                <polygon class="arrowhead" points="304,160 292,154.4 292,165.6" fill="black" transform="rotate(0,296,160)"/>
                <polygon class="arrowhead" points="104,272 92,266.4 92,277.6" fill="black" transform="rotate(180,96,272)"/>
                <polygon class="arrowhead" points="104,192 92,186.4 92,197.6" fill="black" transform="rotate(180,96,192)"/>
                <polygon class="arrowhead" points="104,160 92,154.4 92,165.6" fill="black" transform="rotate(180,96,160)"/>
                <polygon class="arrowhead" points="104,128 92,122.4 92,133.6" fill="black" transform="rotate(180,96,128)"/>
                <g class="text">
                  <text x="92" y="68">Client</text>
                  <text x="300" y="68">Attester</text>
                  <text x="396" y="68">Issuer</text>
                  <text x="484" y="68">Origin</text>
                  <text x="280" y="116">Request</text>
                  <text x="284" y="132">TokenChallenge</text>
                  <text x="200" y="164">Attestation</text>
                  <text x="240" y="180">CredentialRequest</text>
                  <text x="244" y="196">CredentialResponse</text>
                  <text x="92" y="212">CredentialFinalization</text>
                  <text x="304" y="212">|</text>
                  <text x="88" y="228">|</text>
                  <text x="92" y="244">CredentialPresentation</text>
                  <text x="280" y="260">Request+Token+CredentialRequest(Origin)</text>
                  <text x="288" y="276">Response+CredentialResponse(Origin)</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
                            +-------------------------------------.
      +--------+            |  +----------+ +--------+ +--------+  |
      | Client |            |  | Attester | | Issuer | | Origin |  |
      +---+----+            |  +-----+----+ +----+---+ +---+----+  |
          |                  `-------|-----------|---------|------'
          +------------------- Request ------------------->|
          |<--------------- TokenChallenge ----------------+
          |                          |           |         |
          |<====== Attestation =====>|           |         |
          +--------- CredentialRequest --------->|         |
          |<-------- CredentialResponse ---------+         |
CredentialFinalization               |           |         |
          |                                                |
CredentialPresentation                                     |
          +--- Request+Token+CredentialRequest(Origin) --->|
          |<----- Response+CredentialResponse(Origin) -----+
          |                                                |
]]></artwork>
          </artset>
        </figure>
        <t>Similar to the original Shared Deployment Model (<xref section="4.1" sectionFormat="of" target="RFC9576"/>), the Attester,
Issuer, and Origin share the attestation, issuance, and redemption
contexts. Even if this context changes between the Initial and
Reverse Flow, attestation mechanism that can uniquely identify
a Client are not appropriate as they could lead to unlinkability violations.</t>
      </section>
      <section anchor="split-origin-attester-deployment">
        <name>Split Origin-Attester deployment</name>
        <t>In this model, the Attester and Issuer are operated by the same entity
that is separate from the Origin. The Origin trusts the joint Attester
and Issuer to perform attestation and issue Tokens.
Origin Tokens can then be sent by Client on new requests, as long as the
Reverse Origin trusts the Origin to perform attestation and issue Tokens.</t>
        <figure anchor="fig-deploy-joint-issuer">
          <name>Joint Attester and Issuer Deployment Model</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="320" width="944" viewBox="0 0 944 320" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,48 L 8,80" fill="none" stroke="black"/>
                <path d="M 40,80 L 40,304" fill="none" stroke="black"/>
                <path d="M 136,48 L 136,80" fill="none" stroke="black"/>
                <path d="M 216,48 L 216,80" fill="none" stroke="black"/>
                <path d="M 248,80 L 248,304" fill="none" stroke="black"/>
                <path d="M 288,48 L 288,80" fill="none" stroke="black"/>
                <path d="M 592,48 L 592,80" fill="none" stroke="black"/>
                <path d="M 624,80 L 624,176" fill="none" stroke="black"/>
                <path d="M 624,240 L 624,304" fill="none" stroke="black"/>
                <path d="M 664,48 L 664,80" fill="none" stroke="black"/>
                <path d="M 712,32 L 712,80" fill="none" stroke="black"/>
                <path d="M 736,48 L 736,80" fill="none" stroke="black"/>
                <path d="M 784,80 L 784,144" fill="none" stroke="black"/>
                <path d="M 784,192 L 784,304" fill="none" stroke="black"/>
                <path d="M 824,48 L 824,80" fill="none" stroke="black"/>
                <path d="M 840,48 L 840,80" fill="none" stroke="black"/>
                <path d="M 880,80 L 880,304" fill="none" stroke="black"/>
                <path d="M 912,48 L 912,80" fill="none" stroke="black"/>
                <path d="M 936,48 L 936,80" fill="none" stroke="black"/>
                <path d="M 712,32 L 920,32" fill="none" stroke="black"/>
                <path d="M 8,48 L 136,48" fill="none" stroke="black"/>
                <path d="M 216,48 L 288,48" fill="none" stroke="black"/>
                <path d="M 592,48 L 664,48" fill="none" stroke="black"/>
                <path d="M 736,48 L 824,48" fill="none" stroke="black"/>
                <path d="M 840,48 L 912,48" fill="none" stroke="black"/>
                <path d="M 8,80 L 136,80" fill="none" stroke="black"/>
                <path d="M 216,80 L 288,80" fill="none" stroke="black"/>
                <path d="M 592,80 L 664,80" fill="none" stroke="black"/>
                <path d="M 736,80 L 824,80" fill="none" stroke="black"/>
                <path d="M 840,80 L 912,80" fill="none" stroke="black"/>
                <path d="M 728,96 L 776,96" fill="none" stroke="black"/>
                <path d="M 792,96 L 872,96" fill="none" stroke="black"/>
                <path d="M 888,96 L 920,96" fill="none" stroke="black"/>
                <path d="M 248,112 L 264,112" fill="none" stroke="black"/>
                <path d="M 472,112 L 616,112" fill="none" stroke="black"/>
                <path d="M 632,142 L 648,142" fill="none" stroke="black"/>
                <path d="M 632,146 L 648,146" fill="none" stroke="black"/>
                <path d="M 760,142 L 776,142" fill="none" stroke="black"/>
                <path d="M 760,146 L 776,146" fill="none" stroke="black"/>
                <path d="M 624,160 L 672,160" fill="none" stroke="black"/>
                <path d="M 832,160 L 872,160" fill="none" stroke="black"/>
                <path d="M 632,176 L 672,176" fill="none" stroke="black"/>
                <path d="M 840,176 L 880,176" fill="none" stroke="black"/>
                <path d="M 256,240 L 272,240" fill="none" stroke="black"/>
                <path d="M 608,240 L 624,240" fill="none" stroke="black"/>
                <path d="M 48,256 L 64,256" fill="none" stroke="black"/>
                <path d="M 224,256 L 248,256" fill="none" stroke="black"/>
                <path d="M 40,272 L 56,272" fill="none" stroke="black"/>
                <path d="M 224,272 L 240,272" fill="none" stroke="black"/>
                <path d="M 248,288 L 272,288" fill="none" stroke="black"/>
                <path d="M 576,288 L 616,288" fill="none" stroke="black"/>
                <path d="M 920,32 C 928.83064,32 936,39.16936 936,48" fill="none" stroke="black"/>
                <path d="M 728,96 C 719.16936,96 712,88.83064 712,80" fill="none" stroke="black"/>
                <path d="M 920,96 C 928.83064,96 936,88.83064 936,80" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="880,160 868,154.4 868,165.6" fill="black" transform="rotate(0,872,160)"/>
                <polygon class="arrowhead" points="784,144 772,138.4 772,149.6" fill="black" transform="rotate(0,776,144)"/>
                <polygon class="arrowhead" points="640,176 628,170.4 628,181.6" fill="black" transform="rotate(180,632,176)"/>
                <polygon class="arrowhead" points="640,144 628,138.4 628,149.6" fill="black" transform="rotate(180,632,144)"/>
                <polygon class="arrowhead" points="624,288 612,282.4 612,293.6" fill="black" transform="rotate(0,616,288)"/>
                <polygon class="arrowhead" points="624,112 612,106.4 612,117.6" fill="black" transform="rotate(0,616,112)"/>
                <polygon class="arrowhead" points="264,240 252,234.4 252,245.6" fill="black" transform="rotate(180,256,240)"/>
                <polygon class="arrowhead" points="248,272 236,266.4 236,277.6" fill="black" transform="rotate(0,240,272)"/>
                <polygon class="arrowhead" points="56,256 44,250.4 44,261.6" fill="black" transform="rotate(180,48,256)"/>
                <g class="text">
                  <text x="44" y="68">Origin</text>
                  <text x="100" y="68">Issuer</text>
                  <text x="252" y="68">Origin</text>
                  <text x="628" y="68">Client</text>
                  <text x="780" y="68">Attester</text>
                  <text x="876" y="68">Issuer</text>
                  <text x="332" y="116">TokenChallenge</text>
                  <text x="428" y="116">(Issuer)</text>
                  <text x="704" y="148">Attestation</text>
                  <text x="752" y="164">CredentialRequest</text>
                  <text x="756" y="180">CredentialResponse</text>
                  <text x="628" y="196">CredentialFinalization</text>
                  <text x="624" y="212">|</text>
                  <text x="628" y="228">CredentialPresentation</text>
                  <text x="440" y="244">Request+Token+CredentialRequest(Origin)</text>
                  <text x="144" y="260">CredentialRequest</text>
                  <text x="140" y="276">CredentialResponse</text>
                  <text x="424" y="292">Response+CredentialResponse(Origin)</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
                                                                                        +--------------------------.
+---------------+         +--------+                                     +--------+     |  +----------+ +--------+  |
| Origin Issuer |         | Origin |                                     | Client |     |  | Attester | | Issuer |  |
+---+-----------+         +---+----+                                     +---+----+     |  +-----+----+ +----+---+  |
    |                         |                                              |           `-------|-----------|-----'
    |                         +-- TokenChallenge (Issuer) ------------------>|                   |           |
    |                         |                                              |                   |           |
    |                         |                                              |<== Attestation ==>|           |
    |                         |                                              +------ CredentialRequest ----->|
    |                         |                                              |<----- CredentialResponse -----+
    |                         |                                    CredentialFinalization        |           |
    |                         |                                              |                   |           |
    |                         |                                    CredentialPresentation        |           |
    |                         |<-- Request+Token+CredentialRequest(Origin) --+                   |           |
    |<-- CredentialRequest ---+                                              |                   |           |
    +-- CredentialResponse -->|                                              |                   |           |
    |                         +--- Response+CredentialResponse(Origin) ----->|                   |           |
    |                         |                                              |                   |           |
]]></artwork>
          </artset>
        </figure>
        <t>The Origin Issuer <bcp14>MUST NOT</bcp14> issue privately verifiable tokens, as this would
lead to secret material being shared between the Origin and the Reverse Origin.</t>
        <t>A particular deployment model is when the Reverse Origin is the Attester/Issuer.
This model is described in <xref target="fig-deploy-joint-issuer-reserve"/></t>
        <figure anchor="fig-deploy-joint-issuer-reserve">
          <name>Joint Attester and Issuer Deployment Model with reverse</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="384" width="944" viewBox="0 0 944 384" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,48 L 8,80" fill="none" stroke="black"/>
                <path d="M 40,80 L 40,368" fill="none" stroke="black"/>
                <path d="M 136,48 L 136,80" fill="none" stroke="black"/>
                <path d="M 216,48 L 216,80" fill="none" stroke="black"/>
                <path d="M 248,80 L 248,368" fill="none" stroke="black"/>
                <path d="M 288,48 L 288,80" fill="none" stroke="black"/>
                <path d="M 592,48 L 592,80" fill="none" stroke="black"/>
                <path d="M 624,80 L 624,176" fill="none" stroke="black"/>
                <path d="M 624,240 L 624,288" fill="none" stroke="black"/>
                <path d="M 624,352 L 624,368" fill="none" stroke="black"/>
                <path d="M 664,48 L 664,80" fill="none" stroke="black"/>
                <path d="M 712,32 L 712,80" fill="none" stroke="black"/>
                <path d="M 736,48 L 736,80" fill="none" stroke="black"/>
                <path d="M 784,80 L 784,144" fill="none" stroke="black"/>
                <path d="M 784,192 L 784,344" fill="none" stroke="black"/>
                <path d="M 824,48 L 824,80" fill="none" stroke="black"/>
                <path d="M 840,48 L 840,80" fill="none" stroke="black"/>
                <path d="M 880,80 L 880,368" fill="none" stroke="black"/>
                <path d="M 912,48 L 912,80" fill="none" stroke="black"/>
                <path d="M 936,48 L 936,80" fill="none" stroke="black"/>
                <path d="M 712,32 L 920,32" fill="none" stroke="black"/>
                <path d="M 8,48 L 136,48" fill="none" stroke="black"/>
                <path d="M 216,48 L 288,48" fill="none" stroke="black"/>
                <path d="M 592,48 L 664,48" fill="none" stroke="black"/>
                <path d="M 736,48 L 824,48" fill="none" stroke="black"/>
                <path d="M 840,48 L 912,48" fill="none" stroke="black"/>
                <path d="M 8,80 L 136,80" fill="none" stroke="black"/>
                <path d="M 216,80 L 288,80" fill="none" stroke="black"/>
                <path d="M 592,80 L 664,80" fill="none" stroke="black"/>
                <path d="M 736,80 L 824,80" fill="none" stroke="black"/>
                <path d="M 840,80 L 912,80" fill="none" stroke="black"/>
                <path d="M 728,96 L 776,96" fill="none" stroke="black"/>
                <path d="M 792,96 L 872,96" fill="none" stroke="black"/>
                <path d="M 888,96 L 920,96" fill="none" stroke="black"/>
                <path d="M 248,112 L 264,112" fill="none" stroke="black"/>
                <path d="M 472,112 L 616,112" fill="none" stroke="black"/>
                <path d="M 632,142 L 648,142" fill="none" stroke="black"/>
                <path d="M 632,146 L 648,146" fill="none" stroke="black"/>
                <path d="M 760,142 L 776,142" fill="none" stroke="black"/>
                <path d="M 760,146 L 776,146" fill="none" stroke="black"/>
                <path d="M 624,160 L 672,160" fill="none" stroke="black"/>
                <path d="M 832,160 L 872,160" fill="none" stroke="black"/>
                <path d="M 632,176 L 672,176" fill="none" stroke="black"/>
                <path d="M 840,176 L 880,176" fill="none" stroke="black"/>
                <path d="M 256,240 L 272,240" fill="none" stroke="black"/>
                <path d="M 608,240 L 624,240" fill="none" stroke="black"/>
                <path d="M 48,256 L 64,256" fill="none" stroke="black"/>
                <path d="M 224,256 L 248,256" fill="none" stroke="black"/>
                <path d="M 40,272 L 64,272" fill="none" stroke="black"/>
                <path d="M 248,288 L 272,288" fill="none" stroke="black"/>
                <path d="M 576,288 L 616,288" fill="none" stroke="black"/>
                <path d="M 624,352 L 720,352" fill="none" stroke="black"/>
                <path d="M 784,352 L 872,352" fill="none" stroke="black"/>
                <path d="M 920,32 C 928.83064,32 936,39.16936 936,48" fill="none" stroke="black"/>
                <path d="M 728,96 C 719.16936,96 712,88.83064 712,80" fill="none" stroke="black"/>
                <path d="M 920,96 C 928.83064,96 936,88.83064 936,80" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="880,352 868,346.4 868,357.6" fill="black" transform="rotate(0,872,352)"/>
                <polygon class="arrowhead" points="880,160 868,154.4 868,165.6" fill="black" transform="rotate(0,872,160)"/>
                <polygon class="arrowhead" points="784,144 772,138.4 772,149.6" fill="black" transform="rotate(0,776,144)"/>
                <polygon class="arrowhead" points="640,176 628,170.4 628,181.6" fill="black" transform="rotate(180,632,176)"/>
                <polygon class="arrowhead" points="640,144 628,138.4 628,149.6" fill="black" transform="rotate(180,632,144)"/>
                <polygon class="arrowhead" points="624,288 612,282.4 612,293.6" fill="black" transform="rotate(0,616,288)"/>
                <polygon class="arrowhead" points="624,112 612,106.4 612,117.6" fill="black" transform="rotate(0,616,112)"/>
                <polygon class="arrowhead" points="264,240 252,234.4 252,245.6" fill="black" transform="rotate(180,256,240)"/>
                <polygon class="arrowhead" points="56,256 44,250.4 44,261.6" fill="black" transform="rotate(180,48,256)"/>
                <g class="text">
                  <text x="44" y="68">Origin</text>
                  <text x="100" y="68">Issuer</text>
                  <text x="252" y="68">Origin</text>
                  <text x="628" y="68">Client</text>
                  <text x="780" y="68">Attester</text>
                  <text x="876" y="68">Issuer</text>
                  <text x="332" y="116">TokenChallenge</text>
                  <text x="428" y="116">(Issuer)</text>
                  <text x="704" y="148">Attestation</text>
                  <text x="752" y="164">CredentialRequest</text>
                  <text x="756" y="180">CredentialResponse</text>
                  <text x="620" y="196">CredentialFinalization</text>
                  <text x="624" y="212">|</text>
                  <text x="620" y="228">CredentialPresentation</text>
                  <text x="440" y="244">Request+Token+CredentialRequest(Origin)</text>
                  <text x="144" y="260">CredentialRequest</text>
                  <text x="148" y="276">CredentialResponse</text>
                  <text x="236" y="276">-&gt;</text>
                  <text x="424" y="292">Response+CredentialResponse(Origin)</text>
                  <text x="620" y="308">CredentialFinalization</text>
                  <text x="624" y="324">|</text>
                  <text x="620" y="340">CredentialPresentation</text>
                  <text x="752" y="356">Token</text>
                  <text x="784" y="372">|</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
                                                                                        +--------------------------.
+---------------+         +--------+                                     +--------+     |  +----------+ +--------+  |
| Origin Issuer |         | Origin |                                     | Client |     |  | Attester | | Issuer |  |
+---+-----------+         +---+----+                                     +---+----+     |  +-----+----+ +----+---+  |
    |                         |                                              |           `-------|-----------|-----'
    |                         +-- TokenChallenge (Issuer) ------------------>|                   |           |
    |                         |                                              |                   |           |
    |                         |                                              |<== Attestation ==>|           |
    |                         |                                              +------ CredentialRequest ----->|
    |                         |                                              |<----- CredentialResponse -----+
    |                         |                                   CredentialFinalization         |           |
    |                         |                                              |                   |           |
    |                         |                                   CredentialPresentation         |           |
    |                         |<-- Request+Token+CredentialRequest(Origin) --+                   |           |
    |<-- CredentialRequest ---+                                              |                   |           |
    +--- CredentialResponse ->|                                              |                   |           |
    |                         +--- Response+CredentialResponse(Origin) ----->|                   |           |
    |                         |                                   CredentialFinalization         |           |
    |                         |                                              |                   |           |
    |                         |                                   CredentialPresentation         |           |
    |                         |                                              +------------ Token ----------->|
    |                         |                                              |                   |           |
]]></artwork>
          </artset>
        </figure>
        <t>This deployment <bcp14>SHOULD</bcp14> not allow the Reverse Origin such as an Initial Issuer
to infer the request made to the Origin, as it would break unlinkability.</t>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>Privacy Pass <xref target="RFC9576"/> states</t>
      <ul empty="true">
        <li>
          <t>In general, limiting the amount of metadata permitted helps limit the extent
to which metadata can uniquely identify individual Clients. Failure to bound the
number of possible metadata values can therefore lead to a reduction in Client
privacy. Most token types do not admit any metadata, so this bound is implicitly
enforced.</t>
        </li>
      </ul>
      <t>In Privacy Pass with a reverse flow, Clients are provided with new PrivateTokens
depending on their request. They can present these tokens to continue making further
requests.</t>
      <t>While the tokens are still unlinkable, the <tt>token_key_id</tt> associated to them
represent metadata. It leaks some information about the Client. The following
subsections discuss the issues that influence the anonymity set, and possible
mitigations/safeguards to protect against this underlying problem.</t>
      <section anchor="issuer-face-values">
        <name>Issuer face values</name>
        <t>When setting up a reverse flow deployment, an Origin <bcp14>MAY</bcp14> operate multiple
Issuers, and assign them some metadata to them. The amount of possible metadata
grows as <tt>2^(origin_issuers)</tt>.</t>
        <t>We RECOMMEND that:</t>
        <ol spacing="normal" type="1"><li>
            <t>Origins define their anonymity sets, and deploy no more than
<tt>log2(#anonymity_sets)</tt>. This bounds the possible anonymity sets by design.</t>
          </li>
          <li>
            <t>Clients to only send 1 PrivateToken per request. This is consistent with <xref section="3.2" sectionFormat="of" target="RFC9577"/>
and <xref section="11.6.2" sectionFormat="of" target="RFC9110"/> which only allows one challenge response to be
provided as part of Authorization HTTP header.</t>
          </li>
          <li>
            <t>Issuers metadata to be publicly disclosed via an Origin endpoint, and
externally monitored.</t>
          </li>
        </ol>
      </section>
      <section anchor="token-for-specific-clients">
        <name>Token for specific Clients</name>
        <t>In Privacy Pass with a reverse flow, an Origin <bcp14>MAY</bcp14> operate multiple Issuers,
with arbitrary metadata associated to them. A malicious Origin <bcp14>MAY</bcp14> uses this
opportunity to associate certain token values to a specific set of Clients.</t>
        <t>Let's consider the following deployment: the Origin operates two Issuers A and
B. The Client sends Token_A, and (CredentialRequest_A, CredentialRequest_B). Issuer B is
associated to people that like croissant. Issuer A is for the rest of the clients.</t>
        <t>If a Client requests croissant, or sends Token_B, the Origin provides
CredentialResponse_B. If not, it provides CredentialResponse_A.</t>
        <t>Over time, this means the Origin is able to track people that like croissants.</t>
        <t>To mitigate this, we RECOMMEND:</t>
        <ol spacing="normal" type="1"><li>
            <t>The initial PrivateToken to be provided by an Issuer not in control of the
Origin.</t>
          </li>
          <li>
            <t>Clients to reset their state regularly with the initial Issuer.</t>
          </li>
        </ol>
      </section>
      <section anchor="swap-endpoint-and-its-privacy-implication">
        <name>Swap endpoint and its privacy implication</name>
        <t>With multiple Issuers, a Client <bcp14>MAY</bcp14> end up with a bunch of tokens, for various
Issuers. Origins <bcp14>MAY</bcp14> propose a swap endpoint at which a Client can exchange one
or more Origin tokens against one or more new Origin tokens.</t>
        <t>The Origin <bcp14>SHOULD</bcp14> ensure this endpoint receives enough traffic to not reduce the
anonymity sets.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="BATCHED-TOKENS">
          <front>
            <title>Batched Token Issuance Protocol</title>
            <author fullname="Raphael Robert" initials="R." surname="Robert">
              <organization>Phoenix R&amp;D</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Thibault Meunier" initials="T." surname="Meunier">
              <organization>Cloudflare Inc.</organization>
            </author>
            <date day="4" month="May" year="2026"/>
            <abstract>
              <t>   This document specifies two variants of the Privacy Pass issuance
   protocol that allow for batched issuance of tokens.  These allow
   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>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-batched-tokens-08"/>
        </reference>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="RFC9576">
          <front>
            <title>The Privacy Pass Architecture</title>
            <author fullname="A. Davidson" initials="A." surname="Davidson"/>
            <author fullname="J. Iyengar" initials="J." surname="Iyengar"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="June" year="2024"/>
            <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, to help ensure that the desired security and privacy goals are fulfilled.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9576"/>
          <seriesInfo name="DOI" value="10.17487/RFC9576"/>
        </reference>
        <reference anchor="RFC9578">
          <front>
            <title>Privacy Pass Issuance Protocols</title>
            <author fullname="S. Celi" initials="S." surname="Celi"/>
            <author fullname="A. Davidson" initials="A." surname="Davidson"/>
            <author fullname="S. Valdez" initials="S." surname="Valdez"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="June" year="2024"/>
            <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 Issuer Private Key and one that produces tokens that are publicly verifiable using the Issuer Public Key. Instances of "issuance protocol" and "issuance protocols" in the text of this document are used interchangeably to refer to the two variants of the Privacy Pass issuance protocol.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9578"/>
          <seriesInfo name="DOI" value="10.17487/RFC9578"/>
        </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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="PRIVACYPASS-ACT">
          <front>
            <title>Privacy Pass Issuance Protocol for Anonymous Credit Tokens</title>
            <author fullname="Samuel Schlesinger" initials="S." surname="Schlesinger">
              <organization>Google</organization>
            </author>
            <author fullname="Thibault Meunier" initials="T." surname="Meunier">
              <organization>Cloudflare Inc.</organization>
            </author>
            <date day="13" month="February" year="2026"/>
            <abstract>
              <t>   This document specifies the issuance and redemption protocols for
   tokens based on the Anonymous Credit Tokens (ACT) protocol.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-schlesinger-privacypass-act-01"/>
        </reference>
        <reference anchor="PRIVACYPASS-ARC">
          <front>
            <title>Privacy Pass Issuance Protocol for Anonymous Rate-Limited Credentials</title>
            <author fullname="Cathie Yun" initials="C." surname="Yun">
              <organization>Apple, Inc.</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Apple, Inc.</organization>
            </author>
            <author fullname="Armando Faz-Hernandez" initials="A. F." surname="Faz-Hernandez">
              <organization>Cloudflare</organization>
            </author>
            <date day="2" month="March" year="2026"/>
            <abstract>
              <t>   This document specifies the issuance and redemption protocols for
   tokens based on the Anonymous Rate-Limited Credential (ARC)
   cryptographic protocol.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-arc-protocol-01"/>
        </reference>
        <reference anchor="PRIVACYPASS-BBS">
          <front>
            <title>BBS for PrivacyPass</title>
            <author fullname="Watson Ladd" initials="W." surname="Ladd">
              <organization>Akamai Technologies</organization>
            </author>
            <date day="26" month="February" year="2024"/>
            <abstract>
              <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>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ladd-privacypass-bbs-01"/>
        </reference>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC9577">
          <front>
            <title>The Privacy Pass HTTP Authentication Scheme</title>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <author fullname="S. Valdez" initials="S." surname="Valdez"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="June" year="2024"/>
            <abstract>
              <t>This document defines an HTTP authentication scheme for Privacy Pass, a privacy-preserving authentication mechanism used for authorization. The authentication scheme specified 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="RFC" value="9577"/>
          <seriesInfo name="DOI" value="10.17487/RFC9577"/>
        </reference>
      </references>
    </references>
    <?line 447?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The author would like to thank Tommy Pauly, Chris Wood, Raphael Robert, and Armando Faz Hernandez
for helpful discussion on Privacy Pass architecture and its considerations.</t>
    </section>
    <section numbered="false" anchor="changelog">
      <name>Changelog</name>
      <t>v04</t>
      <ul spacing="normal">
        <li>
          <t>Fix: Client finalises a <tt>Credential</tt>, not a <tt>Token</tt>, upon receiving a <tt>CredentialResponse</tt></t>
        </li>
        <li>
          <t>Use "Origin Issuer" consistently when referring to the entity that provides the Client with a state update</t>
        </li>
      </ul>
      <t>v03</t>
      <ul spacing="normal">
        <li>
          <t>Add "Anonymous credential composition" motivation use case</t>
        </li>
        <li>
          <t>Rename section and update diagrams to use Credential vocabulary: <tt>CredentialRequest</tt>, <tt>CredentialResponse</tt>, <tt>CredentialFinalization</tt>, <tt>CredentialPresentation</tt> (previously <tt>TokenRequest</tt>, <tt>TokenResponse</tt>, <tt>Finalisation</tt>)</t>
        </li>
        <li>
          <t>Update PRIVACYPASS-ARC reference to IETF working group draft (<tt>draft-ietf-privacypass-arc-protocol</tt>)</t>
        </li>
        <li>
          <t>Update PRIVACYPASS-ACT reference to use proper I-D reference (<tt>draft-schlesinger-privacypass-act</tt>)</t>
        </li>
        <li>
          <t>Add normative reference to RFC9577</t>
        </li>
        <li>
          <t>Editorial pass and spelling fixes</t>
        </li>
      </ul>
      <t>v02</t>
      <ul spacing="normal">
        <li>
          <t>Diagrams now use Credential instead of Token, and use both Finalization and Presentation as keyword</t>
        </li>
        <li>
          <t>Rework the intro to make it consistent with Anonymous credentials evolutions</t>
        </li>
        <li>
          <t>Have Anonymous credentials use case, given it needs a new architecture</t>
        </li>
        <li>
          <t>Editorial pass on PrivacyPass-Reverse header</t>
        </li>
      </ul>
      <t>v01</t>
      <ul spacing="normal">
        <li>
          <t>Editorial pass on the introduction</t>
        </li>
        <li>
          <t>Add a motivation section: refunding tokens, bootstraping issuer, attester feedback loop</t>
        </li>
        <li>
          <t>Split protocol overview via HTTP headers in its own section</t>
        </li>
        <li>
          <t>Add consideration about anonymous credentials in joint origin/issuer deployment</t>
        </li>
      </ul>
      <t>v00</t>
      <ul spacing="normal">
        <li>
          <t>Initial draft</t>
        </li>
        <li>
          <t>Possibility of a new HTTP request for inlining request</t>
        </li>
        <li>
          <t>Privacy considerations about additional metadata</t>
        </li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
