<?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.20 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-hendrickson-pp-attesterissuer-00" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.24.0 -->
  <front>
    <title abbrev="Attester-Issuer">Attester Issuer Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-hendrickson-pp-attesterissuer-00"/>
    <author fullname="Scott Hendrickson">
      <organization>Google</organization>
      <address>
        <email>scott@shendrickson.com</email>
      </address>
    </author>
    <author fullname="Thibault Meunier">
      <organization>Cloudflare Inc.</organization>
      <address>
        <email>ot-ietf@thibault.uk</email>
      </address>
    </author>
    <date year="2024" month="November" day="07"/>
    <abstract>
      <?line 28?>

<t>TODO Abstract</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://smhendrickson.github.io/draft-hendrickson-pp-attesterissuer/draft-hendrickson-pp-attesterissuer.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-hendrickson-pp-attesterissuer/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/smhendrickson/draft-hendrickson-pp-attesterissuer"/>.</t>
    </note>
  </front>
  <middle>
    <?line 33?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document specifies the protocol between the Attester and Issuer as defined
in <xref target="RFC9576"/>. This draft is intended for those deploying the split Attester
Issuer as defined in Section 4.4 of <xref target="RFC9576"/>.</t>
      <t>The base Privacy Pass issuance protocol <xref target="RFC9578"/> defines stateless anonymous
tokens, which can either be publicly verifiable or not. This draft is agnostic
to all cryptographic protocols and public/private verifiability.</t>
      <t>This draft defines the protocol that will occur behind the issuer as defined in
<xref target="RFC9577"/>.</t>
      <section anchor="protocol-overview">
        <name>Protocol Overview</name>
        <t><xref target="fig-overview"/> shows how this draft is only specifying a protocol between the
Attester and Issuer, and makes no changes to the protocols between Attesters and
Clients, or Attesters and Origins.</t>
        <figure anchor="fig-overview">
          <name>Issuance Protocol Overview</name>
          <artwork><![CDATA[
                                                        +-----------+
      Client                                            |   Origin  |
        |                    Challenge                  |           |
        <----------------------------------------------------+      |
        |                                               |           |
        |      +~~~~~~ defined in this draft ~~~~~~~+   |           |
        |      |                                    |   |           |
        |      |   +-------------+                  |   |           |
        |      |   |   Attester  |                  |   |           |
        |      |   |             |                  |   |           |
        |      |   | Attest      |    +----------+  |   |           |
        +----------------->      |    |  Issuer  |  |   |           |
        |      |   |             |    |          |  |   |           |
        |   TokenRequest         |    |          |  |   |           |
        +----------------->      |    |          |  |   |           |
        |      |   |             |    |          |  |   |           |
        |      |   |       TokenRequest          |  |   |           |
        |      |   |     +------------------->   |  |   |           |
        |      |   |             |    |          |  |   |           |
        |      |   |             |    |          |  |   |           |
        |      |   |       TokenResponse         |  |   |           |
        |      |   |     <-------------------+   |  |   |           |
        |      |   |             |    |          |  |   |           |
        |   TokenResponse        |    |          |  |   |           |
        <-----------------+      |    |          |  |   |           |
        |      |   |             |    |          |  |   |           |
        |      |   +-------------+    +----------+  |   |           |
        |      |                                    |   |           |
        |      +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+   |           |
        |                                               |           |
        |                    Redeem                     |           |
        +---------------------------------------------------->      |
                                                        |           |
                                                        +-----------+
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="issuance">
      <name>Attester Issuer Protocol</name>
      <t>This section describes the Issuance protocol for an Attester to request and
receive a token from an Issuer. This protocol occurs entirely between Section
5.1 and 5.2 of <xref target="RFC9578"/> or Section 6.1 and 6.2 of <xref target="RFC9578"/>.</t>
      <ol spacing="normal" type="1"><li>
          <t>The Client sends a token request to the attester as defined in Section 5.1 or
6.1 of <xref target="RFC9577"/>.</t>
        </li>
        <li>
          <t>The Attester authenticates the client as defined in Section 3.5.1 of <xref target="RFC9576"/>.</t>
        </li>
        <li>
          <t>The Attester sends an IssuerTokenRequest to the Issuer</t>
        </li>
        <li>
          <t>The Issuer signs the token, and returns an IssuerTokenResponse to the Attester.</t>
        </li>
        <li>
          <t>The Attester parses the signature from the IssuerTokenResponse, and sends the
client a TokenResponse as defined in 5.2 or 6.2 of <xref target="RFC9577"/>.</t>
        </li>
        <li>
          <t>The client uses the TokenResponse to particpate in a redemption protocol.</t>
        </li>
      </ol>
      <t>The Attester Issuer issuance protocol is designed such that the Issuer learns
only enough to satisfy issuance requirements, which can be as simple as the
token to sign. Notably the Issuer should not learn any information that may be
uniquely identifying at the Origin, especially if the Origin and Issuer are the
same entity, as defined in section 4.3 of <xref target="RFC9576"/>.</t>
      <section anchor="request">
        <name>Attester-to-Issuer Request</name>
        <t>The Attester and Issuer <bcp14>MUST</bcp14> use a mutually authenticated and secure HTTPS
connection. They <bcp14>MAY</bcp14> use Mutual TLS for mutual authentication. The
"IssuerTokenRequest" defined below is written in TLS Presentation Layer (Section
4 of <xref target="RFC8446"/>), although the Attester and Issuer may instead choose to use
another equivelent data interchange format such as JSON (<xref target="RFC8259"/>).</t>
        <sourcecode type="tls"><![CDATA[
struct {
   uint16_t token_type;
   select (token_type) {
      case (0x0001): /* Type VOPRF(P-384, SHA-384), RFC 9578 */
         uint8_t truncated_token_key_id;
         uint8_t blinded_msg[Ne];
      case (0x0002): /* Type Blind RSA (2048-bit), RFC 9578 */
         uint8_t truncated_token_key_id;
         uint8_t blinded_msg[Nk];
   }
} IssuerTokenRequest;
]]></sourcecode>
        <t>The structure fields are defined as follows:</t>
        <ul spacing="normal">
          <li>
            <t>"token_type" is a 2-octet integer. TokenRequest <bcp14>MUST</bcp14> be prefixed with a uint16
"token_type" indicating the token type.</t>
          </li>
          <li>
            <t>The rest of the structure after "token_type" is based on that type, within the
inner opaque token_request attribute. The above definition corresponds to
TokenRequest from <xref target="RFC9578"/>. For TokenRequest not defined in <xref target="RFC9578"/>, they
<bcp14>MAY</bcp14> be used as long as they are prefixed with a 2-octet token_type.</t>
          </li>
        </ul>
        <t>The Attester will encode the IssuerTokenRequest in the chosen interchange format,
and send the IssuerTokenRequest to the issuer over the chosen connection.</t>
      </section>
      <section anchor="issuer-behavior">
        <name>Issuer behavior</name>
        <t>In the simplest case, the issuer will recieve the IssuerTokenRequest, sign the
message, and return it to the Attester. The signature may be defined by Sections 5
or 6 of <xref target="RFC9578"/>, depending on the token_type used.</t>
      </section>
      <section anchor="response">
        <name>Issuer-to-Attester Response</name>
        <t>After signing the request, the issuer assembles and returns an
"IssuerTokenResponse" to the attester.  The response should be sent in the same
HTTPS connection as the request was delivered on.  Like the request, the
response below is written in TLS Presentation Language, but any data interchange
format is acceptable.</t>
        <t>struct {
     uint8_t blinded_signature[Ne];
   } IssuerTokenResponse;</t>
        <t>The structure fields are defined as follows:</t>
        <ul spacing="normal">
          <li>
            <t>"blinded_signature" is a Ne-octet blinded signature over "blinded_msg".</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <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="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>
      <reference anchor="RFC8446">
        <front>
          <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
          <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
          <date month="August" year="2018"/>
          <abstract>
            <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
            <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8446"/>
        <seriesInfo name="DOI" value="10.17487/RFC8446"/>
      </reference>
      <reference anchor="RFC8259">
        <front>
          <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
          <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
          <date month="December" year="2017"/>
          <abstract>
            <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
            <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="90"/>
        <seriesInfo name="RFC" value="8259"/>
        <seriesInfo name="DOI" value="10.17487/RFC8259"/>
      </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>
    <?line 211?>

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

-->

</rfc>
