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

<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 50?>

<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>
      <t>This document does not replace <xref target="RFC9576"/>. Each issuance and redemption step
still follows that architecture. The gap is composition: <xref target="RFC9576"/> does not
define how token redemption at an Origin causes that Origin to issue new
Client-held state in the same exchange. Reverse Flow defines that composition,
including Client coordination, transport binding, and the privacy effects of
letting the Origin's redemption decision shape later tokens.</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, such as HTTP headers (<xref target="REVERSE-FLOW-HTTP-HEADER"/>), MOQ Parameters (<xref target="MOQ-PRIVACYPASS"/>), or even a dedicated endpoint.</t>
      <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="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>
    <section anchor="deployment-modes">
      <name>Deployment modes</name>
      <t>Similar to <xref section="5" sectionFormat="of" target="RFC9576"/>, Privacy Pass with a Reverse Flow supports multiple
deployment modes.</t>
      <t>Any deployment needs a transport to carry the CredentialRequest and CredentialResponse from
<xref target="architecture"/> alongside the regular Client-Origin exchange. Transport and deployment model
are independent choices. Options include MOQ Parameters (<xref target="MOQ-PRIVACYPASS"/>), an HTTP header
(<xref target="REVERSE-FLOW-HTTP-HEADER"/>), or a dedicated endpoint — each covered in its own document.</t>
      <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="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="MOQ-PRIVACYPASS">
          <front>
            <title>Privacy Pass Authentication for Media over QUIC (MoQ)</title>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Cullen Fluffy Jennings" initials="C. F." surname="Jennings">
              <organization>Cisco</organization>
            </author>
            <author fullname="Thibault Meunier" initials="T." surname="Meunier">
              <organization>Cloudflare Inc.</organization>
            </author>
            <date day="2" month="March" year="2026"/>
            <abstract>
              <t>   This document specifies the use of Privacy Pass architecture and
   issuance protocols for authorization in Media over QUIC (MoQ)
   transport protocol.  It defines how Privacy Pass tokens can be
   integrated with MoQ's authorization framework to provide privacy-
   preserving authentication for subscriptions, fetches, publications,
   and relay operations while supporting fine-grained access control
   through prefix-based track namespace and track name matching rules.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-privacy-pass-auth-02"/>
        </reference>
        <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="REVERSE-FLOW-HTTP-HEADER">
          <front>
            <title>Privacy Pass Reverse Flow HTTP Transport</title>
            <author fullname="Thibault Meunier" initials="T." surname="Meunier">
              <organization>Cloudflare Inc.</organization>
            </author>
            <date day="18" month="June" year="2026"/>
            <abstract>
              <t>   This document specifies an instantiation of Privacy Pass Reverse Flow
   [REVERSE-FLOW] where HTTP is used as a transport mechanism.

   It describes a novel HTTP header field that Clients and Origins can
   use to carry reverse flow data.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-meunier-privacypass-reverse-flow-http-00"/>
        </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 442?>

<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>v05</t>
      <ul spacing="normal">
        <li>
          <t>Clarify why Reverse Flow is more than applying <xref target="RFC9576"/> twice</t>
        </li>
        <li>
          <t>Add transport requirement text to Deployment Modes</t>
        </li>
        <li>
          <t>Add anonymous credential composition motivation</t>
        </li>
        <li>
          <t>Update terminology and diagrams to use Credential vocabulary</t>
        </li>
        <li>
          <t>Use "Origin Issuer" consistently for the entity providing Client state updates</t>
        </li>
      </ul>
      <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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
GS4eDGIAAA==

-->

</rfc>
