<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.36 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-hendrickson-privacypass-expiration-extension-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.4 -->
  <front>
    <title abbrev="Privacy Pass Token Expiration Extension">Privacy Pass Token Expiration Extension</title>
    <seriesInfo name="Internet-Draft" value="draft-hendrickson-privacypass-expiration-extension-00"/>
    <author fullname="Scott Hendrickson">
      <organization>Google</organization>
      <address>
        <email>scott@shendrickson.com</email>
      </address>
    </author>
    <author fullname="Christopher A. Wood">
      <organization>Cloudflare, Inc.</organization>
      <address>
        <email>caw@heapingbits.net</email>
      </address>
    </author>
    <date year="2023" month="July" day="10"/>
    <area>Security</area>
    <workgroup>Privacy Pass</workgroup>
    <keyword>token</keyword>
    <keyword>extensions</keyword>
    <abstract>
      <?line 42?>

<t>This document describes an extension for Privacy Pass that allows tokens
to encode expiration information.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://chris-wood.github.io/draft-hendrickson-privacypass-token-extensions/draft-hendrickson-privacypass-token-extensions.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-hendrickson-privacypass-expiration-extension/"/>.
      </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/chris-wood/draft-hendrickson-privacypass-token-extensions"/>.</t>
    </note>
  </front>
  <middle>
    <?line 47?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Some Privacy Pass token types support binding additional information to
the tokens, often referred to as public metadata. <xref target="AUTH-EXTENSIONS"/> describes
an extension parameter to the basic PrivateToken HTTP authentication scheme <xref target="AUTH-SCHEME"/>
for supplying this metadata alongside a token. <xref target="EXTENDED-ISSUANCE"/> describes
variants of the basic Privacy Pass issuance protocols <xref target="BASIC-ISSUANCE"/> that
support issuing tokens with public metadata. However, there are no existing
extensions defined to make use of these protocol extensions.</t>
      <t>This document describes an extension for Privacy Pass that allows tokens
to encode expiration information. The use case and deployment considerations,
especially with respect to the resulting privacy impact, are also discussed.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="expiration-extension">
      <name>Expiration Extension</name>
      <t>The expiration extension is an extension used to convey the expiration for an issued
token. It is useful for Privacy Pass deployments that make use of cached tokens, i.e.,
those that are not bound to a specific TokenChallenge redemption context, without having
to frequently rotate issuing public keys.</t>
      <t>For example, consider a Privacy Pass deployment wherein clients use cached tokens that
are valid for one hour. Clients could pre-fetch these tokens each hour and the issuer
and origin could rotate the verification key every hour to force expiration. Alternatively,
clients could pre-fetch tokens for the entire day all at once, including an expiration
timestamp in each token to indicate the time window for which the token is valid.</t>
      <t>Including a specific expiration timestamp could reveal specific information about a client,
if, say, a client has a uniquely skewed clock. For that reason, clients can round the timestamp,
resulting in a loss of precision but overall less unique value. Clients do this by choosing an
expiration timestamp and the precision they would like, e.g., the UNIX time of expiration rounded
to the nearest hour, day, or week.</t>
      <t>The value of this extension is an ExpirationTimestamp, defined as follows.</t>
      <artwork><![CDATA[
struct {
   uint64 timestamp_precision;
   uint64 timestamp;
} ExpirationTimestmap;
]]></artwork>
      <t>The ExpirationTimestmap fields are defined as follows:</t>
      <ul spacing="normal">
        <li>"timestamp_precision" is an 8-octet integer, in network byte order, representing the granularity of the timestamp,
i.e., the target to which the timestamp is rounded for loss of precision.</li>
        <li>"timestamp" is an 8-octet integer, in network byte order, representing the expiration timestamp. The
expiration timestamp is the UNIX time in seconds at which a token expires.</li>
      </ul>
      <t>As an example, an ExpirationTimestamp structure with the following value would be interpreted as an
expiration timestamp of 1688583600, i.e., July 05, 2023 at 19:00:00 GMT+0000, which is the timestamp
rounded to the nearest hour (timestamp_precision = 3600).</t>
      <artwork><![CDATA[
struct {
   uint64 timestamp_precision = 3600;
   uint64 timestamp = 1688583600;
} ExpirationTimestmap;
]]></artwork>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Use of extensions risks revealing additional information to parties that see these extensions, including
the Attester, Issuer, and Origin. Each extension in this document specifies security and privacy
considerations relevant to its use. More general information regarding the use of extensions and their
possible impact on client privacy can be found in <xref target="ARCHITECTURE"/>.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document registers the following entry into the "Privacy Pass PrivateToken Extensions" registry.</t>
      <ul spacing="normal">
        <li>
          <t>Expiration extension
          </t>
          <ul spacing="normal">
            <li>Type: 0x0001</li>
            <li>Name: Expiration</li>
            <li>Value: ExpirationTimestamp value as defined in <xref target="expiration-extension"/></li>
            <li>Reference: This document</li>
            <li>Notes: None</li>
          </ul>
        </li>
      </ul>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="AUTH-EXTENSIONS">
        <front>
          <title>The PrivateToken HTTP Authentication Scheme Extensions Parameter</title>
          <author fullname="Scott Hendrickson" initials="S." surname="Hendrickson">
            <organization>Google</organization>
          </author>
          <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
            <organization>Cloudflare, Inc.</organization>
          </author>
          <date day="10" month="July" year="2023"/>
          <abstract>
            <t>   This document specifies a new parameter for the "PrivateToken" HTTP
   authentication scheme.  This purpose of this parameter is to carry
   extensions for Privacy Pass protocols that support public metadata.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-wood-privacypass-auth-scheme-extensions-00"/>
      </reference>
      <reference anchor="AUTH-SCHEME">
        <front>
          <title>The Privacy Pass HTTP Authentication Scheme</title>
          <author fullname="Tommy Pauly" initials="T." surname="Pauly">
            <organization>Apple Inc.</organization>
          </author>
          <author fullname="Steven Valdez" initials="S." surname="Valdez">
            <organization>Google LLC</organization>
          </author>
          <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
            <organization>Cloudflare</organization>
          </author>
          <date day="23" month="June" year="2023"/>
          <abstract>
            <t>   This document defines an HTTP authentication scheme that 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 an acceptable
   Privacy Pass token.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-auth-scheme-11"/>
      </reference>
      <reference anchor="EXTENDED-ISSUANCE">
        <front>
          <title>*** BROKEN REFERENCE ***</title>
          <author>
            <organization/>
          </author>
          <date/>
        </front>
      </reference>
      <reference anchor="BASIC-ISSUANCE">
        <front>
          <title>Privacy Pass Issuance Protocol</title>
          <author fullname="Sofia Celi" initials="S." surname="Celi">
            <organization>Brave Software</organization>
          </author>
          <author fullname="Alex Davidson" initials="A." surname="Davidson">
            <organization>Brave Software</organization>
          </author>
          <author fullname="Steven Valdez" initials="S." surname="Valdez">
            <organization>Google LLC</organization>
          </author>
          <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
            <organization>Cloudflare</organization>
          </author>
          <date day="26" month="June" year="2023"/>
          <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 issuance private key, and another that
   produces tokens that are publicly verifiable using the issuance
   public key.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-protocol-11"/>
      </reference>
      <reference anchor="ARCHITECTURE">
        <front>
          <title>The Privacy Pass Architecture</title>
          <author fullname="Alex Davidson" initials="A." surname="Davidson">
            <organization>LIP</organization>
          </author>
          <author fullname="Jana Iyengar" initials="J." surname="Iyengar">
            <organization>Fastly</organization>
          </author>
          <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
            <organization>Cloudflare</organization>
          </author>
          <date day="15" month="June" year="2023"/>
          <abstract>
            <t>   This document specifies the Privacy Pass architecture and
   requirements for its constituent protocols used for constructing
   privacy-preserving authentication mechanisms.  It provides
   recommendations on how the architecture should be deployed to ensure
   the privacy of clients and the security of all participating
   entities.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-architecture-13"/>
      </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 150?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This document received input and feedback from Jim Laskey.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
s17yK4ERAUD9F1n+amLZFQAA

-->

</rfc>
