<?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.7 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-davidben-tls-merkle-tree-certs-02" category="exp" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.20.0 -->
  <front>
    <title>Merkle Tree Certificates for TLS</title>
    <seriesInfo name="Internet-Draft" value="draft-davidben-tls-merkle-tree-certs-02"/>
    <author initials="D." surname="Benjamin" fullname="David Benjamin">
      <organization>Google LLC</organization>
      <address>
        <email>davidben@google.com</email>
      </address>
    </author>
    <author initials="D." surname="O'Brien" fullname="Devon O'Brien">
      <organization>Google LLC</organization>
      <address>
        <email>asymmetric@google.com</email>
      </address>
    </author>
    <author initials="B. E." surname="Westerbaan" fullname="Bas Westerbaan">
      <organization>Cloudflare</organization>
      <address>
        <email>bas@cloudflare.com</email>
      </address>
    </author>
    <date year="2024" month="March" day="04"/>
    <area>Security</area>
    <workgroup>Transport Layer Security</workgroup>
    <abstract>
      <?line 203?>

<t>This document describes Merkle Tree certificates, a new certificate type for use with TLS. A relying party that regularly fetches information from a transparency service can use this certificate type as a size optimization over more conventional mechanisms with post-quantum signatures. Merkle Tree certificates integrate the roles of X.509 and Certificate Transparency, achieving comparable security properties with a smaller message size, at the cost of more limited applicability.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://davidben.github.io/merkle-tree-certs/draft-davidben-tls-merkle-tree-certs.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-davidben-tls-merkle-tree-certs/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Transport Layer Security Working Group mailing list (<eref target="mailto:tls@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/tls/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/tls/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/davidben/merkle-tree-certs"/>.</t>
    </note>
  </front>
  <middle>
    <?line 207?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Authors' Note: This is an early draft of a proposal with many parts. While we have tried to make it as concrete as possible, we anticipate that most details will change as the proposal evolves.</t>
      <t>A typical TLS <xref target="RFC8446"/> handshake uses many signatures to authenticate the server public key. In a certificate chain with an end-entity certificate, an intermediate certificate, and an implicit trust anchor, there are two X.509 signatures <xref target="RFC5280"/>. Intermediate certificates additionally send an extra public key. If the handshake uses Certificate Transparency (CT) <xref target="RFC6962"/>, each Signed Certificate Timestamp (SCT) also carries a signature. CT policies often require two or more SCTs per certificate <xref target="APPLE-CT"/> <xref target="CHROME-CT"/>. If the handshake staples an OCSP response <xref target="RFC6066"/> for revocation, that adds an additional signature.</t>
      <t>Current signature schemes can use as few as 32 bytes per key and 64 bytes per signature <xref target="RFC8032"/>, but post-quantum replacements are much larger. For example, Dilithium3 <xref target="Dilithium"/> uses 1,952 bytes per public key and 3,293 bytes per signature. A TLS Certificate message with, say, four Dilithum3 signatures (two X.509 signatures and two SCTs) and one intermediate CA's Dilithium3 public key would total 15,124 bytes of authentication overhead. Falcon-512 and Falcon-1024 <xref target="Falcon"/> would, respectively, total 3,561 and 6,913 bytes.</t>
      <t>This document introduces Merkle Tree Certificates, an optimization that authenticates a subscriber key using under 1,000 bytes. See <xref target="sizes"/>. To achieve this, it reduces its scope from general authentication:</t>
      <ul spacing="normal">
        <li>
          <t>Certificates are short-lived. The subscriber is expected to use an automated issuance protocol, such as ACME <xref target="RFC8555"/>.</t>
        </li>
        <li>
          <t>Certificates are only usable with relying parties that have contacted a transparency service sufficiently recently. See <xref target="transparency-service"/>.</t>
        </li>
        <li>
          <t>Certificates are issued after a significant processing delay of, in the recommended parameters (<xref target="parameters"/>), about an hour. Subscribers that need a certificate issued quickly are expected to use a different mechanism.</t>
        </li>
      </ul>
      <t>To support the reduced scope, this document also describes a certificate negotiation mechanism. Subscribers send these more efficient certificates when available, and otherwise fall back to other mechanisms.</t>
      <t>Merkle Tree Certificates are not intended to replace existing Public Key Infrastructure (PKI) mechanisms but, in applications where a significant portion of authentications meet the above requirements, complement them as an optional optimization. In particular, it is expected that, even within applications that implement it, this mechanism will not be usable for all TLS connections.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" 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>
      <t>This document additionally uses the TLS presentation language defined in <xref section="3" sectionFormat="of" target="RFC8446"/>.</t>
      <section anchor="time">
        <name>Time</name>
        <t>All time computations in this document are represented by POSIX timestamps, defined in this document to be integers containing a number of seconds since the Epoch, defined in Section 4.16 of <xref target="POSIX"/>. That is, the number of seconds after 1970-01-01 00:00:00 UTC, excluding leap seconds. A UTC time is converted to a POSIX timestamp as described in <xref target="POSIX"/>.</t>
        <t>Durations of time are integers, representing a number of seconds not including leap seconds. They can be added to POSIX timestamps to produce other POSIX timestamps.</t>
        <t>The current time is a POSIX timestamp determined by converting the current UTC time to seconds since the Epoch. One POSIX timestamp is said to be before (respectively, after) another POSIX timestamp if it is less than (respectively, greater than) the other value.</t>
      </section>
      <section anchor="terminology-and-roles">
        <name>Terminology and Roles</name>
        <t>There are five roles involved in a Merkle Tree certificate deployment:</t>
        <dl>
          <dt>Subscriber:</dt>
          <dd>
            <t>The party that authenticates itself in the protocol. In TLS, this is the side sending the Certificate and CertificateVerify message.</t>
          </dd>
          <dt>Merkle Tree certification authority (CA):</dt>
          <dd>
            <t>The service that issues Merkle Tree certificates to the subscriber, and publishes logs of all certificates.</t>
          </dd>
          <dt>Relying party:</dt>
          <dd>
            <t>The party authenticating the subscriber. In TLS, this is the side receiving the Certificate and CertificateVerify message.</t>
          </dd>
          <dt>Transparency service:</dt>
          <dd>
            <t>The service that mirrors the issued certificates for others to monitor. It additionally summarizes the CA's activity for relying parties, in order for certificates to be accepted. This is conceptually a single service, but may be multiple services, run by multiple entities in concert. See <xref target="transparency-service"/>. For example, if the relying party is a web browser, the browser vendor might run the transparency service, or it may trust a collection of third-party mirrors.</t>
          </dd>
          <dt>Monitors:</dt>
          <dd>
            <t>Parties who monitor the list of valid certificates, published by the transparency service, for unauthorized certificates.</t>
          </dd>
        </dl>
        <t>Additionally, there are several terms used throughout this document to describe this proposal. This section provides an overview. They will be further defined and discussed in detail throughout the document.</t>
        <dl>
          <dt>Assertion:</dt>
          <dd>
            <t>A protocol-specific statement that the CA is certifying. For example, in TLS, the assertion is that a TLS signing key can speak on behalf of some DNS name or other identity.</t>
          </dd>
          <dt>Abridged assertion:</dt>
          <dd>
            <t>A partially-hashed Assertion to save space. For example, in TLS, an abridged assertion replaces the subject public key by a hash.</t>
          </dd>
          <dt>Certificate:</dt>
          <dd>
            <t>A structure, generated by the CA, that proves to the relying party that the CA has certified some assertion. A certificate consists of the assertion itself accompanied by an associated proof string.</t>
          </dd>
          <dt>Batch:</dt>
          <dd>
            <t>A collection of assertions certified at the same time. CAs in this proposal only issue certificates in batches at a fixed frequency.</t>
          </dd>
          <dt>Batch tree head:</dt>
          <dd>
            <t>A hash computed over all the assertions in a batch, by building a Merkle Tree. The Merkle Tree construction and this hash are described in more detail in <xref target="building-tree"/>.</t>
          </dd>
          <dt>Inclusion proof:</dt>
          <dd>
            <t>A structure which proves that some assertion is contained in some tree head. See <xref target="proofs"/>.</t>
          </dd>
          <dt>Validity window:</dt>
          <dd>
            <t>A range of consecutive batch tree heads. A relying party maintains a copy of the CA's latest validity window. At any time, it will accept only assertions contained in tree heads contained in the current validity window.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>The process of issuing and using a certificate is as follows:</t>
      <ol spacing="normal" type="1"><li>
          <t>The subscriber requests a certificate from the CA. <xref target="acme-extensions"/> describes ACME <xref target="RFC8555"/> extensions for this.</t>
        </li>
        <li>
          <t>The CA collects certificate requests into a batch (see <xref target="parameters"/>) and builds the Merkle Tree and computes the tree head (see <xref target="building-tree"/>). It then signs the validity window ending at this tree head (see <xref target="signing"/>) and publishes (see <xref target="publishing"/>) the result.</t>
        </li>
        <li>
          <t>The CA constructs a certificate using the inclusion proof. It sends this certificate to the subscriber. See <xref target="proofs"/>.</t>
        </li>
        <li>
          <t>The transparency service downloads the abridged assertions, recreates the Merkle Tree, and validates the window signature. It mirrors them for monitors to observe. See <xref target="transparency-service"/>.</t>
        </li>
        <li>
          <t>The relying party fetches the latest validity window from the transparency service. This validity window will contain the new tree head.</t>
        </li>
        <li>
          <t>In an application protocol such as TLS, the relying party communicates its currently saved validity window to the subscriber.</t>
        </li>
        <li>
          <t>If the relying party’s validity window contains the subscriber’s certificate, the subscriber negotiates this protocol and sends the Merkle Tree certificate. See <xref target="trust-anchor-negotiation"/> for details. If there is no match, the subscriber proceeds as if this protocol were not in use (e.g., by sending a traditional X.509 certificate chain).</t>
        </li>
      </ol>
      <t><xref target="fig-deployment"/> below shows this process.</t>
      <figure anchor="fig-deployment">
        <name>An overview of a Merkle Tree certificate deployment</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="400" width="584" viewBox="0 0 584 400" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 40,192 L 40,256" fill="none" stroke="black"/>
              <path d="M 48,32 L 48,96" fill="none" stroke="black"/>
              <path d="M 104,104 L 104,192" fill="none" stroke="black"/>
              <path d="M 128,96 L 128,184" fill="none" stroke="black"/>
              <path d="M 168,32 L 168,96" fill="none" stroke="black"/>
              <path d="M 184,192 L 184,256" fill="none" stroke="black"/>
              <path d="M 360,32 L 360,96" fill="none" stroke="black"/>
              <path d="M 368,192 L 368,256" fill="none" stroke="black"/>
              <path d="M 408,320 L 408,384" fill="none" stroke="black"/>
              <path d="M 456,96 L 456,184" fill="none" stroke="black"/>
              <path d="M 456,256 L 456,312" fill="none" stroke="black"/>
              <path d="M 512,320 L 512,384" fill="none" stroke="black"/>
              <path d="M 552,192 L 552,256" fill="none" stroke="black"/>
              <path d="M 568,32 L 568,96" fill="none" stroke="black"/>
              <path d="M 48,32 L 168,32" fill="none" stroke="black"/>
              <path d="M 360,32 L 568,32" fill="none" stroke="black"/>
              <path d="M 168,48 L 352,48" fill="none" stroke="black"/>
              <path d="M 176,80 L 360,80" fill="none" stroke="black"/>
              <path d="M 48,96 L 168,96" fill="none" stroke="black"/>
              <path d="M 360,96 L 568,96" fill="none" stroke="black"/>
              <path d="M 40,192 L 184,192" fill="none" stroke="black"/>
              <path d="M 368,192 L 552,192" fill="none" stroke="black"/>
              <path d="M 192,224 L 368,224" fill="none" stroke="black"/>
              <path d="M 40,256 L 184,256" fill="none" stroke="black"/>
              <path d="M 368,256 L 552,256" fill="none" stroke="black"/>
              <path d="M 408,320 L 512,320" fill="none" stroke="black"/>
              <path d="M 408,384 L 512,384" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="464,312 452,306.4 452,317.6" fill="black" transform="rotate(90,456,312)"/>
              <polygon class="arrowhead" points="464,184 452,178.4 452,189.6" fill="black" transform="rotate(90,456,184)"/>
              <polygon class="arrowhead" points="360,48 348,42.4 348,53.6" fill="black" transform="rotate(0,352,48)"/>
              <polygon class="arrowhead" points="200,224 188,218.4 188,229.6" fill="black" transform="rotate(180,192,224)"/>
              <polygon class="arrowhead" points="184,80 172,74.4 172,85.6" fill="black" transform="rotate(180,176,80)"/>
              <polygon class="arrowhead" points="136,184 124,178.4 124,189.6" fill="black" transform="rotate(90,128,184)"/>
              <polygon class="arrowhead" points="112,104 100,98.4 100,109.6" fill="black" transform="rotate(270,104,104)"/>
              <g class="text">
                <text x="196" y="36">1.</text>
                <text x="244" y="36">issuance</text>
                <text x="312" y="36">request</text>
                <text x="108" y="68">Subscriber</text>
                <text x="424" y="68">Certification</text>
                <text x="520" y="68">Authority</text>
                <text x="204" y="100">3.</text>
                <text x="256" y="100">inclusion</text>
                <text x="320" y="100">proof</text>
                <text x="476" y="132">2.</text>
                <text x="508" y="132">sign</text>
                <text x="544" y="132">and</text>
                <text x="12" y="148">6.</text>
                <text x="60" y="148">accepted</text>
                <text x="148" y="148">7.</text>
                <text x="200" y="148">inclusion</text>
                <text x="264" y="148">proof</text>
                <text x="504" y="148">publish</text>
                <text x="556" y="148">tree</text>
                <text x="28" y="164">tree</text>
                <text x="72" y="164">heads</text>
                <text x="212" y="212">5.</text>
                <text x="248" y="212">batch</text>
                <text x="292" y="212">tree</text>
                <text x="336" y="212">heads</text>
                <text x="88" y="228">Relying</text>
                <text x="144" y="228">Party</text>
                <text x="428" y="228">Transparency</text>
                <text x="512" y="228">Service</text>
                <text x="476" y="292">4.</text>
                <text x="516" y="292">mirror</text>
                <text x="564" y="292">tree</text>
                <text x="460" y="356">Monitors</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
     +--------------+  1. issuance request  +-------------------------+
     |              +---------------------->|                         |
     |  Subscriber  |                       | Certification Authority |
     |              |<----------------------+                         |
     +---------+----+   3. inclusion proof  +-----------+-------------+
            ^  |                                        |
            |  |                                        | 2. sign and
6. accepted |  | 7. inclusion proof                     |  publish tree
 tree heads |  |                                        |
            |  v                                        v
    +-------+---------+                      +----------------------+
    |                 |  5. batch tree heads |                      |
    |  Relying Party  |<---------------------+ Transparency Service |
    |                 |                      |                      |
    +-----------------+                      +----------+-----------+
                                                        |
                                                        | 4. mirror tree
                                                        v
                                                  +------------+
                                                  |            |
                                                  |  Monitors  |
                                                  |            |
                                                  +------------+
]]></artwork>
        </artset>
      </figure>
      <t>The remainder of this document discusses this process in detail, followed by concrete instantions of it in TLS <xref target="RFC8446"/> and ACME <xref target="RFC8555"/>.</t>
    </section>
    <section anchor="assertions">
      <name>Assertions</name>
      <t>[[TODO: The protocol described in this document is broadly independent of the assertion format. We describe, below, one possible structure, but welcome feedback on how best to structure the encoding. The main aims are simplicity and to improve on handling cross-protocol attacks per <xref target="cross-protocol"/>.]]</t>
      <t>TLS certificates associate some application-specific identifier with a TLS signing key. When TLS is used to authenticate HTTPS <xref target="RFC9110"/> servers, these identifiers specify DNS names or HTTP origins. Other protocols may require other kinds of assertions.</t>
      <t>To represent this, this document defines an Assertion structure:</t>
      <artwork><![CDATA[
enum { tls(0), (2^16-1) } SubjectType;

enum {
    dns(0),
    dns_wildcard(1),
    ipv4(2),
    ipv6(3),
    (2^16-1)
} ClaimType;

struct {
    ClaimType claim_type;
    opaque claim_info<0..2^16-1>;
} Claim;

struct {
    SubjectType subject_type;
    opaque subject_info<0..2^16-1>;
    Claim claims<0..2^16-1>;
} Assertion;
]]></artwork>
      <t>An Assertion is roughly analogous to an X.509 TBSCertificate (<xref section="4.1.2" sectionFormat="of" target="RFC5280"/>). It describes a series of claims about some subject. The <tt>subject_info</tt> field is interpreted according to the <tt>subject_type</tt> value. For TLS, the <tt>subject_type</tt> is <tt>tls</tt>, and the <tt>subject_info</tt> is a TLSSubjectInfo structure. TLSSubjectInfo is defined in full in <xref target="tls-subject-info"/> below, but as an illustrative example, it is reproduced below:</t>
      <artwork><![CDATA[
struct {
    SignatureScheme signature;
    opaque public_key<1..2^16-1>;
} TLSSubjectInfo;
]]></artwork>
      <t>This structure represents the public half of a TLS signing key. The semantics are thus that each claim in <tt>claims</tt> applies to the TLS client or server. This is analogous to X.509's SubjectPublicKeyInfo structure (<xref section="4.1.2.7" sectionFormat="of" target="RFC5280"/>) but additionally incorporates the protocol. Protocols consuming an Assertion MUST check the <tt>subject_type</tt> is a supported value before processing <tt>subject_info</tt>. If unrecognized, the structure MUST be rejected.</t>
      <t>Other protocols aiming to integrate with this structure allocate a SubjectType codepoint and describe how it is interpreted.</t>
      <t>Likewise, a Claim structure describes some claim about the subject. The <tt>claim_info</tt> field is interpreted according to the <tt>claim_type</tt>. Each Claim structure in an Assertion's <tt>claims</tt> field MUST have a unique <tt>claim_type</tt> and all values MUST be sorted in order of increasing <tt>claim_type</tt>. Structures violating this constraint MUST be rejected.</t>
      <t>When a relying party interprets an Assertion certified by the CA, it MUST ignore any Claim values with unrecognized <tt>claim_type</tt>. When a CA interprets an Assertion in a certification request from a subscriber, it MUST reject any Claim values with unrecognized <tt>claim_type</tt>.</t>
      <t>This document defines claim types for DNS names and IP addresses, but others can be defined.</t>
      <t>[[TODO: For now, the claims below just transcribe the X.509 GeneralName structure. Should these be origins instead? For HTTPS, it's a pity to not capture the scheme and port. We do mandate ALPN in <xref target="tls-certificate-type"/>, so cross-protocol attacks are mitigated, but it's unfortunate that subscribers cannot properly separate their HTTPS vs FTPS keys, or their port 443 vs port 444 keys. One option here is to have HTTPS claims instead, and then other protocols can have FTPS claims, etc. #35 ]]</t>
      <section anchor="dns-claims">
        <name>DNS Claims</name>
        <t>The <tt>dns</tt> and <tt>dns_wildcard</tt> claims indicate that the subject is authoritative for a set of DNS names. They use the DNSNameList structure, defined below:</t>
        <artwork><![CDATA[
opaque DNSName<1..255>;

struct {
    DNSName dns_names<1..2^16-1>;
} DNSNameList;
]]></artwork>
        <t>DNSName values use the "preferred name syntax" as specified by <xref section="3.5" sectionFormat="of" target="RFC1034"/> and as modified by <xref section="2.1" sectionFormat="of" target="RFC1123"/>. Alphabetic characters MUST additionally be represented in lowercase. IDNA names <xref target="RFC5890"/> are represented as A-labels. For example, possible values include <tt>example.com</tt> or <tt>xn--iv8h.example</tt>. Values <tt>EXAMPLE.COM</tt> and <tt>&lt;U+1F50F&gt;.example</tt> would not be permitted.</t>
        <t>Names in a <tt>dns</tt> claim represent the exact DNS name specified. Names in a <tt>dns_wildcard</tt> claim represent wildcard DNS names and are processed as if prepended with the string "<tt>*.</tt>" and then following the steps in <xref section="6.3" sectionFormat="of" target="I-D.draft-ietf-uta-rfc6125bis"/>.</t>
      </section>
      <section anchor="ip-claims">
        <name>IP Claims</name>
        <t>The <tt>ipv4</tt> and <tt>ipv6</tt> claims indicate the subject is authoritative for a set of IPv4 and IPv6 addresses, respectively. They use the IPv4AddressList and IPv6AddressList structures, respectively, defined below. IPv4Address and IPv6Address are interpreted in network byte order.</t>
        <artwork><![CDATA[
uint8 IPv4Address[4];
uint8 IPv6Address[16];

struct {
    IPv4Address addresses<4..2^16-1>;
} IPv4AddressList;

struct {
    IPv6Address addresses<16..2^16-1>;
} IPv6AddressList;
]]></artwork>
      </section>
    </section>
    <section anchor="issuing-certificates">
      <name>Issuing Certificates</name>
      <t>This section describes the structure of Merkle Tree certificates and defines the process of how a Merkle Tree certification authority issues certificates for a subscriber.</t>
      <section anchor="parameters">
        <name>Merkle Tree CA Parameters</name>
        <t>A Merkle Tree certification authority is defined by the following values:</t>
        <dl>
          <dt><tt>hash</tt>:</dt>
          <dd>
            <t>A cryptographic hash function. In this document, the hash function is always SHA-256 <xref target="SHS"/>, but others may be defined.</t>
          </dd>
          <dt><tt>issuer_id</tt>:</dt>
          <dd>
            <t>An opaque byte string that identifies the CA. This value should be short and is limited to at most 32 bytes.</t>
          </dd>
          <dt><tt>public_key</tt>:</dt>
          <dd>
            <t>The public half of a signing keypair. The corresponding private key, <tt>private_key</tt>, is known only to the CA.</t>
          </dd>
          <dt><tt>start_time</tt>:</dt>
          <dd>
            <t>The issuance time of the first batch of certificates, represented as a POSIX timestamp (see <xref target="time"/>).</t>
          </dd>
          <dt><tt>batch_duration</tt>:</dt>
          <dd>
            <t>A number of seconds which determines how frequently the CA issues certificates. See details below.</t>
          </dd>
          <dt><tt>lifetime</tt>:</dt>
          <dd>
            <t>A number of seconds which determines the lifetime of certificates issued by this CA. MUST be a multiple of <tt>batch_duration</tt>.</t>
          </dd>
          <dt><tt>validity_window_size</tt>:</dt>
          <dd>
            <t>An integer describing the maximum number of unexpired batches which may exist at a time. This value is determined from <tt>lifetime</tt> and <tt>batch_duration</tt> by <tt>lifetime / batch_duration</tt>.</t>
          </dd>
        </dl>
        <t>These values are public and known by the relying party and the CA. They may not be changed for the lifetime of the CA. To change these parameters, the entity operating a CA may deploy a second CA and either operate both during a transition, or stop issuing from the previous CA.</t>
        <t>[[TODO: The signing key case is interesting. A CA could actually maintain a single stream of Merkle Trees, but then sign everything with multiple keys to support rotation. The CA -&gt; Subscriber -&gt; RP flow does not depend on the signature, only the CA -&gt; Transparency Service -&gt; RP flow. The document is not currently arranged to capture this, but it probably should be. We probably need to decouple the signing half and the Merkle Tree half slightly. #36 ]]</t>
        <t>Certificates are issued in batches. Batches are numbered consecutively, starting from zero. All certificates in a batch have the same issuance time, determined by <tt>start_time + batch_duration * batch_number</tt>. This is known as the batch's issuance time. That is, batch 0 has an issuance time of <tt>start_time</tt>, and issuance times increment by <tt>batch_duration</tt>. A CA can issue no more frequently than <tt>batch_duration</tt>. <tt>batch_duration</tt> determines how long it takes for the CA to return a certificate to the subscriber.</t>
        <t>All certificates in a batch have the same expiration time, computed as <tt>lifetime</tt> past the issuance time. After this time, the certificates in a batch are no longer valid. Merkle Tree certificates uses a short-lived certificates model, such that certificate expiration replaces an external revocation signal like CRLs <xref target="RFC5280"/> or OCSP <xref target="RFC6960"/>. <tt>lifetime</tt> SHOULD be set accordingly. For instance, a deployment with a corresponding maximum OCSP <xref target="RFC6960"/> response lifetime of 14 days SHOULD use a value no higher than 14 days. See <xref target="revocation"/> for details.</t>
        <t>CAs are RECOMMENDED to use a <tt>batch_duration</tt> of one hour, and a <tt>lifetime</tt> of 14 days. This results in a <tt>validity_window_size</tt> of 336, for a total of 10,752 bytes in SHA-256 hashes.</t>
        <t>To prevent cross-protocol attacks, the key used in a Merkle Tree CA MUST be unique to that Merkle Tree CA. It MUST NOT be used in another Merkle Tree CA, or for another protocol, such as X.509 certificates.</t>
      </section>
      <section anchor="batches">
        <name>Batch State</name>
        <t>Each batch is in one of three states:</t>
        <dl>
          <dt>pending:</dt>
          <dd>
            <t>The current time is before the batch's issuance time</t>
          </dd>
          <dt>ready:</dt>
          <dd>
            <t>The current time is not before the batch's issuance time, but the batch has not yet been issued</t>
          </dd>
          <dt>issued:</dt>
          <dd>
            <t>Certificates have been issued for this batch</t>
          </dd>
        </dl>
        <t>The CA also maintains a latest batch number, which is the number of the last batch in the "issued" state. As an invariant, all batches before this value MUST also be in the "issued" state.</t>
        <t>For each batch in the "issued" state, the CA maintains the following batch state:</t>
        <ul spacing="normal">
          <li>
            <t>The list of abridged assertions certified in this batch.</t>
          </li>
          <li>
            <t>The tree head, a hash computed over this list, described in <xref target="building-tree"/>.</t>
          </li>
          <li>
            <t>A validity window signature computed as described in <xref target="signing"/>.</t>
          </li>
        </ul>
        <t>The CA exposes all of this information in an HTTP <xref target="RFC9110"/> interface described in <xref target="publishing"/>.</t>
      </section>
      <section anchor="issuance-queue-and-scheduling">
        <name>Issuance Queue and Scheduling</name>
        <t>The CA additionally maintains an issuance queue, not exposed via the HTTP interface.</t>
        <t>When a subscriber requests a certificate for some assertion, the CA first validates it per its issuance policy. For example, it may perform ACME identifier validation challenges (<xref section="8" sectionFormat="of" target="RFC8555"/>). Once validation is complete and the CA is willing to certify the assertion, the CA appends it to the issuance queue.</t>
        <t>The CA runs a regularly-scheduled issuance job which converts this queue into certificates. This job runs the following procedure:</t>
        <ol spacing="normal" type="1"><li>
            <t>If no batches are in the "ready" state, do nothing and abort this procedure. Schedule a new job to run sometime after the earliest "pending" batch's issuance time.</t>
          </li>
          <li>
            <t>For each batch in the "ready" state other than the latest one, run the procedure in <xref target="certifying-batch"/> with an empty assertion list, in order of increasing batch number. Batches cannot be skipped.</t>
          </li>
          <li>
            <t>Empty the issuance queue into an ordered list of assertions. Run the procedure in <xref target="certifying-batch"/> using this list and the remaining batch in the "ready" state. This batch's issuance time will be at or shortly before the current time.</t>
          </li>
        </ol>
      </section>
      <section anchor="certifying-batch">
        <name>Certifying a Batch of Assertions</name>
        <t>This section describes how to certify a given list of assertions at a given batch number. The batch MUST be in the "ready" state, and all preceding batches MUST be in the "issued" state.</t>
        <section anchor="building-tree">
          <name>Building the Merkle Tree</name>
          <t>First, the CA then builds a Merkle Tree from the list as follows:</t>
          <t>Let <tt>n</tt> be the number of input assertions. If <tt>n &gt; 0</tt>, the CA builds a binary tree with l levels numbered <tt>0</tt> to <tt>l-1</tt>, where <tt>l</tt> is the smallest positive integer such that <tt>n &lt;= 2^(l-1)</tt>. Each node in the tree contains a hash value. Hashes in the tree are built from the following functions:</t>
          <artwork><![CDATA[
    HashEmpty(level, index) = hash(HashEmptyInput)
    HashNode(left, right, level, index) = hash(HashNodeInput)
    HashAssertion(assertion, index) = hash(HashAssertionInput)
]]></artwork>
          <t><tt>HashEmpyInput</tt>, <tt>HashNodeInput</tt> and <tt>HashAssertionInput</tt> are computed by encoding the structures defined below:</t>
          <artwork><![CDATA[
struct {
    uint8 distinguisher = 0;
    opaque issuer_id<1..32>;
    uint32 batch_number;
    uint64 index;
    uint8 level;
} HashEmptyInput;

struct {
    uint8 distinguisher = 1;
    opaque issuer_id<1..32>;
    uint32 batch_number;
    uint64 index;
    uint8 level;
    opaque left[hash.length];
    opaque right[hash.length];
} HashNodeInput;

struct {
    SubjectType subject_type;
    opaque subject_info_hash[hash.length];
    Claim claims<0..2^16-1>;
} AbridgedAssertion;

struct {
    uint8 distinguisher = 2;
    opaque issuer_id<1..32>;
    uint32 batch_number;
    uint64 index;
    AbridgedAssertion abridged_assertion;
} HashAssertionInput;
]]></artwork>
          <t><tt>issuer_id</tt> and <tt>batch_number</tt> are set to the CA's <tt>issuer_id</tt> and the current batch number. <tt>HashAssertionInput.abridged_assertion.subject_info_hash</tt> is set to <tt>hash(assertion.subject_info)</tt> from the function input <tt>assertion</tt>, and the remaining fields of <tt>HashAssertionInput.abridged_assertion</tt> are taken unmodified from <tt>assertion</tt>. The remaining fields, such as <tt>index</tt>, are set to inputs of the function.</t>
          <t>Tree levels are computed iteratively as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Initialize level 0 with n elements. For <tt>j</tt> between <tt>0</tt> and <tt>n-1</tt>, inclusive,
set element <tt>j</tt> to the output of <tt>HashAssertion(assertion[j], j)</tt>.</t>
            </li>
            <li>
              <t>For <tt>i</tt> between <tt>1</tt> and <tt>l-1</tt>, inclusive, compute level <tt>i</tt> from level <tt>i-1</tt> as
follows:  </t>
              <ul spacing="normal">
                <li>
                  <t>If level <tt>i-1</tt> has an odd number of elements <tt>j</tt>, append <tt>HashEmpty(i-1, j)</tt> to the level.</t>
                </li>
                <li>
                  <t>Initialize level <tt>i</tt> with half as many elements as level <tt>i-1</tt>. For all <tt>j</tt>,
set element <tt>j</tt> to the output of <tt>HashNode(left, right, i, j)</tt> where <tt>left</tt> is
element <tt>2*j</tt> of level <tt>i-1</tt> and <tt>right</tt> is element <tt>2*j+1</tt> of level <tt>i-1</tt>.
<tt>left</tt> and <tt>right</tt> are the left and right children of element <tt>j</tt>.</t>
                </li>
              </ul>
            </li>
          </ol>
          <t>At the end of this process, level <tt>l-1</tt> will have exactly one root element. This element is called the tree head. <xref target="fig-example-tree"/> shows an example tree for three assertions. The tree head in this example is t20.</t>
          <figure anchor="fig-example-tree">
            <name>An example Merkle Tree for three assertions</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="192" width="320" viewBox="0 0 320 192" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 144,96 L 152,112" fill="none" stroke="black"/>
                  <path d="M 244,40 L 256,64" fill="none" stroke="black"/>
                  <path d="M 272,96 L 280,112" fill="none" stroke="black"/>
                  <path d="M 120,112 L 128,96" fill="none" stroke="black"/>
                  <path d="M 144,64 L 156,40" fill="none" stroke="black"/>
                  <path d="M 248,112 L 256,96" fill="none" stroke="black"/>
                  <path d="M 156,40 L 180,40" fill="none" stroke="black"/>
                  <path d="M 220,40 L 244,40" fill="none" stroke="black"/>
                  <g class="text">
                    <text x="24" y="36">level</text>
                    <text x="60" y="36">2:</text>
                    <text x="200" y="36">t20</text>
                    <text x="24" y="84">level</text>
                    <text x="60" y="84">1:</text>
                    <text x="136" y="84">t10</text>
                    <text x="264" y="84">t11</text>
                    <text x="24" y="132">level</text>
                    <text x="60" y="132">0:</text>
                    <text x="104" y="132">t00</text>
                    <text x="168" y="132">t01</text>
                    <text x="232" y="132">t02</text>
                    <text x="296" y="132">empty</text>
                    <text x="104" y="148">|</text>
                    <text x="168" y="148">|</text>
                    <text x="232" y="148">|</text>
                    <text x="108" y="164">a0</text>
                    <text x="172" y="164">a1</text>
                    <text x="236" y="164">a2</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
    level 2:           ___ t20 ___
                      /           \
                     /             \
    level 1:       t10             t11
                   / \             / \
                  /   \           /   \
    level 0:   t00     t01     t02    empty
                |       |       |
                a0      a1      a2
]]></artwork>
            </artset>
          </figure>
          <t>If <tt>n</tt> is zero, the CA does not build a tree and the tree head is <tt>HashEmpty(0, 0)</tt>.</t>
          <t>If <tt>n</tt> is one, the tree contains a single level, level 0, and has a tree head of <tt>HashAssertion(assertion, 0)</tt>.</t>
        </section>
        <section anchor="signing">
          <name>Signing a ValidityWindow</name>
          <t>Batches are grouped into consecutive ranges of <tt>validity_window_size</tt> batches, called validity windows. As <tt>validity_window_size</tt> is computed to cover the full certificate lifetime, a validity window that ends at the latest batch number covers all certificates that may still be valid from a CA.</t>
          <t>Validity Windows are serialized into the following structure:</t>
          <artwork><![CDATA[
opaque TreeHead[hash.length];

struct {
    uint32 batch_number;
    TreeHead tree_heads[validity_window_size*hash.length];
} ValidityWindow;
]]></artwork>
          <t><tt>batch_number</tt> is the batch number of the highest batch in the validity window.</t>
          <t><tt>tree_heads</tt> value contains the last <tt>validity_window_size</tt> tree heads. (Recall the TLS presentation language brackets the total length of a vector in bytes; not the number of elements.) <tt>tree_heads</tt> starts from <tt>batch_number</tt>, in decreasing batch number order. That is, <tt>tree_heads[0]</tt> is the tree head for batch <tt>batch_number</tt>, <tt>tree_heads[1]</tt> is the tree head for <tt>batch_number - 1</tt>, and so on. If <tt>batch_number &lt; validity_window_size - 1</tt>, any tree heads for placeholder negative batch numbers are filled with <tt>HashEmpty(0, 0)</tt>, computed with <tt>batch_number</tt> set to 0.</t>
          <t>After the CA builds the Merkle Tree for a batch, it constructs the ValidityWindow structure whose <tt>batch_number</tt> is the number of the batch being issued. It then computes a signature over the following structure:</t>
          <artwork><![CDATA[
struct {
    uint8 label[32] = "Merkle Tree Crts ValidityWindow\0";
    opaque issuer_id<1..32>;
    ValidityWindow window;
} LabeledValidityWindow;
]]></artwork>
          <t>The <tt>label</tt> field is an ASCII string. The final byte of the string, "\0", is a zero byte, or ASCII NULL character. The <tt>issuer_id</tt> field is the CA's <tt>issuer_id</tt>. Other parties can verify the signature by constructing the same input and verifying with the CA's <tt>public_key</tt>.</t>
          <t>The CA saves this signature as the batch's validity window signature. It then updates the latest batch to point to <tt>batch_number</tt>. A CA which generates such a signature is considered to have certified every assertion contained in every value in the <tt>tree_heads</tt> list, with expiry determined by <tt>batch_number</tt>, the position of the tree head in the list, and the CA's input parameters as described in <xref target="parameters"/>.</t>
          <t>A CA MUST NOT generate signatures over inputs that are parseable as LabeledValidityWindow, except via the above process. If a LabeledValidityWindow structure that was not produced in this way has a valid signature by CA's <tt>public_key</tt>, this indicates misuse of the private key by the CA, even if the preimages to the <tt>tree_heads</tt> values, or intermediate nodes, or <tt>subject_info_hash</tt> values are not known.</t>
        </section>
        <section anchor="proofs">
          <name>Certificate Format</name>
          <t>[[TODO: BikeshedCertificate is a placeholder name until someone comes up with a better one. #15 ]]</t>
          <t>For each assertion in the tree, the CA constructs a BikeshedCertificate structure containing the assertion and a proof. A proof is a message that allows the relying party to accept the associated assertion, provided it trusts the CA and recognizes the tree head. The structures are defined below:</t>
          <artwork><![CDATA[
enum { merkle_tree_sha256(0), (2^16-1) } ProofType;

struct {
    ProofType proof_type;
    opaque trust_anchor_data<0..2^8-1>;
} TrustAnchor;

struct {
    TrustAnchor trust_anchor;
    opaque proof_data<0..2^16-1>;
} Proof;

struct {
    Assertion assertion;
    Proof proof;
} BikeshedCertificate;
]]></artwork>
          <t>The <tt>proof_type</tt> identifies a type of proof. It determines the format of the <tt>trust_anchor_data</tt> and <tt>proof_data</tt> values. The mechanism defined in this document is <tt>merkle_tree_sha256</tt>, which uses <tt>trust_anchor_data</tt> and <tt>proof_data</tt> formats of MerkleTreeTrustAnchor and MerkleTreeProofSHA256, respectively:</t>
          <artwork><![CDATA[
struct {
    opaque issuer_id<1..32>;
    uint32 batch_number;
} MerkleTreeTrustAnchor;

opaque HashValueSHA256[32];

struct {
    uint64 index;
    HashValueSHA256 path<0..2^16-1>;
} MerkleTreeProofSHA256;
]]></artwork>
          <t>A trust anchor is a short identifier that identifies a source of certificates. It is analogous to an X.509 trust anchor's subject name. These are used for certificate selection, described in <xref target="trust-anchor-negotiation"/>. In Merkle Tree certificates, each batch is a distinct trust anchor. The <tt>trust_anchor_data</tt> for <tt>merkle_tree_sha256</tt> is a MerkleTreeTrustAnchor structure. The <tt>issuer_id</tt> field is the CA's <tt>issuer_id</tt>. The <tt>batch_number</tt> field is the number of the batch.</t>
          <t>A relying party that trusts a trust anchor must know the batch's tree head. It then trusts any assertion which can be proven to be in the corresponding Merkle Tree, as described in <xref target="verifying"/>.</t>
          <t>The <tt>proof_data</tt> for <tt>merkle_tree_sha256</tt> is a MerkleTreeProofSHA256. After building the tree, the CA constructs a MerkleTreeProofSHA256 for each assertion as follows. For each index <tt>i</tt> in the batch's assertion list:</t>
          <ol spacing="normal" type="1"><li>
              <t>Set <tt>index</tt> to <tt>i</tt>. This will be a value between <tt>0</tt> and <tt>n-1</tt>, inclusive.</t>
            </li>
            <li>
              <t>Set <tt>path</tt> to an array of <tt>l-1</tt> hashes. Set element <tt>j</tt> of this array to element
<tt>k</tt> of level <tt>j</tt>, where <tt>k</tt> is <tt>(i &gt;&gt; j) ^ 1</tt>. <tt>&gt;&gt;</tt> denotes a bitwise
right-shift, and <tt>^</tt> denotes a bitwise exclusive OR (XOR) operation. This
element is the sibling of an ancestor of assertion <tt>i</tt> in the tree. Note the
tree head is never included.</t>
            </li>
          </ol>
          <t>For example, the <tt>path</tt> value for the third assertion in a batch of three assertions would contain the marked nodes in <xref target="fig-example-proof"/>, from bottom to top.</t>
          <figure anchor="fig-example-proof">
            <name>An example Merkle Tree proof for the third of three assertions</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="192" width="320" viewBox="0 0 320 192" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 144,96 L 152,112" fill="none" stroke="black"/>
                  <path d="M 244,40 L 256,64" fill="none" stroke="black"/>
                  <path d="M 272,96 L 280,112" fill="none" stroke="black"/>
                  <path d="M 120,112 L 128,96" fill="none" stroke="black"/>
                  <path d="M 144,64 L 156,40" fill="none" stroke="black"/>
                  <path d="M 248,112 L 256,96" fill="none" stroke="black"/>
                  <path d="M 156,40 L 180,40" fill="none" stroke="black"/>
                  <path d="M 220,40 L 244,40" fill="none" stroke="black"/>
                  <g class="text">
                    <text x="24" y="36">level</text>
                    <text x="60" y="36">2:</text>
                    <text x="200" y="36">t20</text>
                    <text x="24" y="84">level</text>
                    <text x="60" y="84">1:</text>
                    <text x="132" y="84">*t10</text>
                    <text x="264" y="84">t11</text>
                    <text x="24" y="132">level</text>
                    <text x="60" y="132">0:</text>
                    <text x="104" y="132">t00</text>
                    <text x="168" y="132">t01</text>
                    <text x="232" y="132">t02</text>
                    <text x="292" y="132">*empty</text>
                    <text x="104" y="148">|</text>
                    <text x="168" y="148">|</text>
                    <text x="232" y="148">|</text>
                    <text x="108" y="164">a0</text>
                    <text x="172" y="164">a1</text>
                    <text x="236" y="164">a2</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
    level 2:           ___ t20 ___
                      /           \
                     /             \
    level 1:      *t10             t11
                   / \             / \
                  /   \           /   \
    level 0:   t00     t01     t02   *empty
                |       |       |
                a0      a1      a2
]]></artwork>
            </artset>
          </figure>
          <t>If the batch only contained one assertion, <tt>path</tt> will be empty and <tt>index</tt> will be zero.</t>
          <t>For each assertion, the CA assembles a BikeshedCertificate structure and sends it to the subscriber. It SHOULD also send the additional information described in <xref target="trust-anchor-negotiation"/>.</t>
          <t>This certificate can be presented to supporting relying parties as described in <xref target="using"/>. It is valid until the batch expires.</t>
        </section>
      </section>
      <section anchor="sizes">
        <name>Size Estimates</name>
        <t>Merkle Tree proofs scale logarithmically in the batch size. <xref target="rolling-renewal"/> recommends subscribers renew halfway through the previous certificate's lifetime. Batch sizes will thus, on average, be <tt>subscriber_count * 2 / validity_window_size</tt>, where <tt>subscriber_count</tt> is a CA's active subscriber count. The recommended parameters in <xref target="parameters"/> give an average of <tt>subscriber_count / 168</tt>.</t>
        <t>Some organizations have published statistics which can estimate batch sizes for the Web PKI. On March 7th, 2023, <xref target="LetsEncrypt"/> reported around 330,000,000 active subscribers for a single CA. <xref target="MerkleTown"/> reported around 3,800,000,000 unexpired certificates in Certificate Transparency logs, and an issuance rate of around 257,000 per hour. Note the numbers from <xref target="MerkleTown"/> represent, respectively, all Web PKI CAs combined and issuance rates for longer-lived certificates and may not be representative of a Merkle Tree certificate deployment.</t>
        <t>These three estimates correspond to batch sizes of, respectively, around 2,000,000, around 20,000,000, and 257,000. The corresponding <tt>path</tt> lengths will be 20, 24, and 17, given proof sizes of, respectively, 640 bytes, 768 bytes, and 544 bytes.</t>
        <t>For larger batch sizes, 32 hashes, or 1024 bytes, is sufficient for batch sizes up to 2^33 (8,589,934,592) certificates.</t>
      </section>
    </section>
    <section anchor="using">
      <name>Using Certificates</name>
      <t>This section describes how subscribers present and relying parties verify Merkle Tree certificates.</t>
      <section anchor="relying-parties">
        <name>Relying Party State</name>
        <t>For each Merkle Tree CA it trusts, a relying party maintains a copy of the most recent validity window from the CA. This structure determines which certificates the relying party will accept. It is regularly updated from the transparency service, as described in <xref target="transparency-service"/>.</t>
      </section>
      <section anchor="verifying">
        <name>Certificate Verification</name>
        <t>When a subscriber presents a BikeshedCertificate whose <tt>proof_type</tt> field is <tt>merkle_tree_sha256</tt>, the relying party runs the following procedure to verify it. This procedure's error conditions are described with TLS alerts, defined in <xref section="6.2" sectionFormat="of" target="RFC8446"/>. Non-TLS applications SHOULD map these error conditions to the corresponding application-specific errors. When multiple error conditions apply, the application MAY return any applicable error.</t>
        <ol spacing="normal" type="1"><li>
            <t>Decode the <tt>trust_anchor_data</tt> and <tt>proof_data</tt> fields as MerkleTreeTrustAnchor and MerkleTreeProofSHA256 structures, respectively. If they cannot be decoded, abort this procedure with a <tt>bad_certificate</tt> error.</t>
          </li>
          <li>
            <t>Check if the certificate's <tt>issuer_id</tt> corresponds to a trusted Merkle Tree CA with a saved validity window. If not, abort this procedure with an <tt>unknown_ca</tt> error.</t>
          </li>
          <li>
            <t>Check if the certificate's <tt>batch_number</tt> is contained in the saved validity window. If not, abort this procedure with a <tt>unknown_ca</tt> error.</t>
          </li>
          <li>
            <t>Compute the expiration time of the certificate's <tt>batch_number</tt>, as described in <xref target="parameters"/>. If this value is before the current time, abort this procedure with a <tt>certificate_expired</tt> error.</t>
          </li>
          <li>
            <t>Set <tt>hash</tt> to the output of <tt>HashAssertion(assertion, index)</tt>. Set <tt>remaining</tt> to the certificate's <tt>index</tt> value.</t>
          </li>
          <li>
            <t>For each element <tt>v</tt> at zero-based index <tt>i</tt> of the certificate's <tt>path</tt> field, in order:  </t>
            <ul spacing="normal">
              <li>
                <t>If <tt>remaining</tt> is odd, set <tt>hash</tt> to the output of <tt>HashNode(v, hash, i + 1, remaining &gt;&gt; 1)</tt>.
Otherwise, set <tt>hash</tt> to the output of <tt>HashNode(hash, v, i + 1, remaining &gt;&gt; 1)</tt></t>
              </li>
              <li>
                <t>Set <tt>remaining</tt> to <tt>remaining &gt;&gt; 1</tt>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If <tt>remaining</tt> is non-zero, abort this procedure with an error.</t>
          </li>
          <li>
            <t>If <tt>hash</tt> is not equal to the corresponding tree head in the saved validity window, abort this procedure with a <tt>bad_certificate</tt> error.</t>
          </li>
          <li>
            <t>Optionally, perform any additional application-specific checks on the assertion and issuer. For example, an HTTPS client might constrain an issuer to a particular DNS subtree.</t>
          </li>
          <li>
            <t>If all the preceding checks succeed, the certificate is valid and the application can proceed with using the assertion.</t>
          </li>
        </ol>
      </section>
      <section anchor="trust-anchor-negotiation">
        <name>Certificate Negotiation</name>
        <t>Merkle Tree certificates can only be presented to up-to-date relying parties, so this document describes a mechanism for subscribers to select certificates. This section describes the general negotiation mechanism. <xref target="tls-trust-anchors-extension"/> describes it as used in TLS.</t>
        <t>Subscribers maintain a certificate set of available BikeshedCertificates. The TrustAnchor value in each BikeshedCertificate is known as the primary TrustAnchor. Each BikeshedCertificate is also associated with the following values:</t>
        <ul spacing="normal">
          <li>
            <t>A set of additional TrustAnchor values which also match this certificate</t>
          </li>
          <li>
            <t>An expiration time, after which the certificate is no longer usable</t>
          </li>
        </ul>
        <t>These values can be computed from the BikeshedCertificate, given knowledge of the ProofType value and the CA's parameters. However, CAs are RECOMMENDED to send this information to subscribers in a ProofType-independent form. See <xref target="acme-extensions"/> for how this is represented in ACME. This simplifies subscriber deployment and improves ecosystem agility, by allowing subscribers to use certificates without precise knowledge of their parameters.</t>
        <t>For Merkle Tree certificates, the expiration time is computed as described in <xref target="parameters"/>. There are <tt>validity_window_size - 1</tt> additional TrustAnchor values: for each <tt>i</tt> from 1 to <tt>validity_window_size - 1</tt>, make a copy of the primary TrustAnchor with the <tt>batch_number</tt> value replaced with <tt>batch_number + i</tt>.</t>
        <t>Each relying party maintains a set of TrustAnchor values, which describe the certificates it accepts. This set is sent to the subscriber to aid in certificate selection.  The ProofType code point defines how the relying party determines the TrustAnchor values.  For Merkle Tree certificates, the <tt>proof_type</tt> is <tt>merkle_tree_sha256</tt>, the <tt>issuer_id</tt> is the CA's <tt>issuer_id</tt>, and the <tt>batch_number</tt> is the <tt>batch_number</tt> of the relying party's validity window.</t>
        <t>The subscriber compares this set with its certificate set. A certificate is eligible if all of the following are true:</t>
        <ul spacing="normal">
          <li>
            <t>The current time is before the certificate's expiration time</t>
          </li>
          <li>
            <t>Either the certificate's primary TrustAnchor value or one of the additional TrustAnchor values appears in the relying party's TrustAnchor set.</t>
          </li>
          <li>
            <t>Any additional application-specific constraints hold. For example, the TLS <tt>signature_algorithms</tt> (<xref section="4.2.3" sectionFormat="of" target="RFC8446"/>) extension constrains the types of keys which may be used.</t>
          </li>
        </ul>
        <t>The subscriber SHOULD select the smallest available certificate where the above checks succeed. When two comparably-sized certificates are available, the subscriber SHOULD select the one with the later expiration time, to reduce clock skew risks. If no certificate is available, the subscriber SHOULD fallback to another PKI mechanism, such as X.509.</t>
      </section>
    </section>
    <section anchor="transparency-service">
      <name>Transparency Services</name>
      <t>This section describes the role of the transparency service. The transparency service ensures all certificates accepted by the relying party are consistently and publicly logged. It performs three functions:</t>
      <ul spacing="normal">
        <li>
          <t>Mirror all abridged assertions certified by the CA and present them to monitors</t>
        </li>
        <li>
          <t>Validate all tree heads and validity windows produced by the CA</t>
        </li>
        <li>
          <t>Provide the latest valid validity window to relying parties</t>
        </li>
      </ul>
      <t>In doing so, the transparency service MUST satisfy the following requirements:</t>
      <ul spacing="normal">
        <li>
          <t>The mirrored CA state is append-only. That is, the hashes, signatures, and assertions for a given batch number MUST NOT change.</t>
        </li>
        <li>
          <t>All tree hashes sent to relying parties MUST be reflected in the mirrored CA state.</t>
        </li>
      </ul>
      <t>The transparency service publishes the mirrored CA state using the same interface as <xref target="publishing"/>. The protocol between the relying party and transparency service is out of scope of this document. The relying party MAY use the interface defined here, or an existing application-specific authenticated channel.</t>
      <t>As discussed in <xref target="authenticity"/>, relying parties MUST ensure that any validity windows obtained were asserted by the CA. This SHOULD be done by having the transparency service forward the CA's signature, with the relying party verifying it. However, if the transparency service already maintains a trusted, authenticated channel to the relying parties (e.g. a software or root store update channel), relying parties MAY rely on the transparency service to validate the signature on their behalf, rather than sending it over this channel.</t>
      <t>Although described as a single service for clarity, the transparency service may be implemented as a combination of services run by multiple entities, depending on security goals. For example deployments, this section first describes a single trusted service, then it describes other possible models where trust is divided between entities.</t>
      <section anchor="single-trusted-service">
        <name>Single Trusted Service</name>
        <t>Some relying parties regularly contact a trusted update service, either for software updates or to update individual components, such as the services described in <xref target="CHROMIUM"/> and <xref target="FIREFOX"/>. Where these services are already trusted for the components such as the trust anchor list or certificate validation software, a single trusted transparency service may be a suitable model.</t>
        <t>The transparency service maintains a mirror of the CA's latest batch number, and batch state. Roughly once every <tt>batch_duration</tt>, it polls the CA's HTTP interface (see <xref target="publishing"/>) and runs the following steps:</t>
        <ol spacing="normal" type="1"><li>
            <t>Fetch the CA's latest batch number.  If this fetch fails, abort this procedure with an error.</t>
          </li>
          <li>
            <t>Let <tt>new_latest_batch</tt> be the result and <tt>old_latest_batch</tt> be the currently mirrored value. If <tt>new_latest_batch</tt> equals <tt>old_latest_batch</tt>, finish this procedure without reporting an error.</t>
          </li>
          <li>
            <t>If <tt>new_latest_batch</tt> is less than <tt>old_latest_batch</tt>, abort this procedure with an error.</t>
          </li>
          <li>
            <t>If the issuance time for batch <tt>new_latest_batch</tt> is after the current time (see <xref target="parameters"/>), abort this procedure with an error.</t>
          </li>
          <li>
            <t>For all <tt>i</tt> such that <tt>old_latest_batch &lt; i &lt;= new_latest_batch</tt>:  </t>
            <ol spacing="normal" type="1"><li>
                <t>Fetch the signature, tree head, and abridged assertion list for batch <tt>i</tt>. If this fetch fails, abort this procedure with an error.</t>
              </li>
              <li>
                <t>Compute the tree head for the assertion list, as described in <xref target="building-tree"/>. If this value does not match the fetched tree head, abort this procedure with an error.</t>
              </li>
              <li>
                <t>Compute the ValidityWindow structure and verify the signature, as described in <xref target="signing"/>. Set <tt>tree_heads[0]</tt> to the tree head fetched above. Set the other values in <tt>tree_heads</tt> to the previously mirrored values. If signature verification fails, abort this procedure with an error.</t>
              </li>
              <li>
                <t>Set the mirrored latest batch number to <tt>i</tt> and save the fetched batch state.</t>
              </li>
            </ol>
          </li>
        </ol>
        <t>[[TODO: If the mirror gets far behind, if the CA just stops publishing for a while, it may suddenly have to catch up on many batches. Should we allow the mirror to catch up to the latest validity window and skip the intervening batches? The intervening batches are guaranteed to have been expired #37 ]]</t>
      </section>
      <section anchor="single-update-multiple-mirrors">
        <name>Single Update Service with Multiple Mirrors</name>
        <t>If the relying party has a trusted update service, but the update service does not have the resources to mirror the full batch state, the transparency service can be composed of this update service and several, less trusted mirrors. In this model, the mirrors are not trusted to serve authoritative trust anchor information to relying parties, but the update service trusts at least half of them to faithfully and consistently mirror the batch state.</t>
        <t>Each mirror follows the procedure in <xref target="single-trusted-service"/> to maintain and publish a mirror of the CA's batch state.</t>
        <t>The update server maintains the latest validity window validated to appear in all mirrors. It updates this by polling the mirrors and running the following steps:</t>
        <ol spacing="normal" type="1"><li>
            <t>For each mirror, fetch the latest batch number.</t>
          </li>
          <li>
            <t>Let <tt>new_latest_batch</tt> be the highest batch number that is bounded by the value fetched from at least half of the mirrors. Let <tt>old_latest_batch</tt> be the batch number of the currently stored validity window.</t>
          </li>
          <li>
            <t>If <tt>new_latest_batch</tt> equals <tt>old_latest_batch</tt>, finish this procedure without reporting an error.</t>
          </li>
          <li>
            <t>If <tt>new_latest_batch</tt> is less than <tt>old_latest_batch</tt>, abort this procedure with an error.</t>
          </li>
          <li>
            <t>If the issuance time for batch <tt>new_latest_batch</tt> is after the current time (see <xref target="parameters"/>), abort this procedure with an error.</t>
          </li>
          <li>
            <t>Fetch the validity window with <tt>new_latest_batch</tt> from each mirror that returned an equal or higher latest batch number. If any fetches fail, or if the results do not match across all mirrors, abort this procedure with an error.</t>
          </li>
          <li>
            <t>Verify the validity window signature, as described in <xref target="signing"/>. If the signature is invalid, abort this procedure with an error.</t>
          </li>
          <li>
            <t>If the old and new validity windows contain overlapping batch numbers, verify that the tree hashes match. If not, abort this procedure with an error.</t>
          </li>
          <li>
            <t>Update the saved validity window with the new value.</t>
          </li>
        </ol>
        <t>Compared to <xref target="single-trusted-service"/>, this model reduces trust in the mirror services, but can delay certificate usability if some of the mirrors consume CA updates too slowly. This can be tuned by adjusting the threshold in step 2.</t>
        <t>In a transparency service using this model, each mirror independently publishes the batch state via <xref target="publishing"/>.</t>
      </section>
      <section anchor="multiple-transparency-services">
        <name>Multiple Transparency Services</name>
        <t>Relying parties without a trusted update service can fetch from mirrors directly. Rather than relying on the update service to fetch the validity window state, the relying party runs the procedure described in <xref target="single-update-multiple-mirrors"/>, and uses the saved validity window to verify certificates.</t>
      </section>
      <section anchor="monitors">
        <name>Monitors</name>
        <t>Monitors in this document are analogous to monitors in <xref target="RFC6962"/>. Monitors watch an implementation of the HTTP APIs in <xref target="publishing"/> to verify correct behavior and watch for certificates of interest. This is typically the transparency service. A monitor needs to, at least, inspect every new batch. It may also maintain a copy of the batch state.</t>
        <t>It does so by following the procedure in <xref target="single-trusted-service"/>, fetching from the service being monitored. If the procedure fails for a reason other than the service availability, this should be viewed as misbehavior on the part of the service. If the procedure fails due to service availability and the service remains unavailable for an extended period, this should also be viewed as misbehavior. If the monitor is not maintaining a copy of the batch state, it skips saving the abridged assertions.</t>
        <t><xref target="RFC6962"/> additionally defines the role of auditor, which validates that Signed Certificate Timestamps (SCTs) and Signed Tree Heads (STHs) in Certificate Transparency are correct. There is no analog to SCTs in this document. The signed validity window structure (<xref target="signing"/>) is analogous to an STH, but consistency is checked simply by ensuring overlapping tree heads match, so this document does not define this as an explicit role. If two inconsistent signed validity windows are ever observed from a Merkle Tree CA, this should be viewed as misbehavior on the part of the CA.</t>
      </section>
    </section>
    <section anchor="publishing">
      <name>HTTP Interface</name>
      <t>[[TODO: This section hasn't been written yet. For now, this is just an informal sketch. The real text will need to define request/response formats more precisely, with MIME types, etc. #12 ]]</t>
      <t>CAs and transparency services publish state over an HTTP <xref target="RFC9110"/> interface described below.</t>
      <t>CAs and any components of the transparency service that maintain validity window information implement the following interfaces:</t>
      <ul spacing="normal">
        <li>
          <t><tt>GET {prefix}/latest</tt> returns the latest batch number.</t>
        </li>
        <li>
          <t><tt>GET {prefix}/validity-window/latest</tt> returns the ValidityWindow structure and signature (see <xref target="signing"/>) for the latest batch number.</t>
        </li>
        <li>
          <t><tt>GET {prefix}/validity-window/{number}</tt> returns the ValidityWindow structure and signature (see <xref target="signing"/>) for batch <tt>number</tt>, if it is in the "issued" state, and a 404 error otherwise.</t>
        </li>
        <li>
          <t><tt>GET {prefix}/batch/{number}/info</tt> returns the validity window signature and tree head for batch <tt>number</tt>, if batch <tt>number</tt> is in the "issued" state, and a 404 error otherwise.</t>
        </li>
      </ul>
      <t>CAs and any components of the transparency service that mirror the full abridged assertion list additionally implement the following interface:</t>
      <ul spacing="normal">
        <li>
          <t><tt>GET {prefix}/batch/{number}/assertions</tt> returns the abridged assertion list for batch <tt>number</tt>, if <tt>number</tt> is in the issued state, and a 404 error otherwise.</t>
        </li>
      </ul>
      <t>If the interface is implemented by a distributed service, with multiple servers, updates may propagate to servers at different times, which will cause temporary inconsistency. This inconsistency can impede this system's transparency goals (<xref target="transparency"/>).</t>
      <t>Services implementing this interface SHOULD wait until batch state is fully propagated to all servers before updating the latest batch number. That is, if any server returns a latest batch number of N in either of the first two HTTP endpoints, batch numbers N and below SHOULD be available under the last three batch-number-specific HTTP endpoints in all servers. If this property does not hold at any time, it is considered a service unavailability.</t>
      <t>Individual servers in a service MAY return different latest batch numbers. Individual servers MAY also differ on whether a batch number has a response available or return a 404 error. Provided the above consistency property holds, these two inconsistencies do not constitute service unavailability.</t>
      <t><xref target="ts-and-ca-availability"/> discusses service availability requirements.</t>
      <t>[[TODO: Once a batch has expired, do we allow a CA to stop publishing it? The transparency service can already log it for as long, or as little, as it wishes. We effectively have CT log temporal sharding built into the system. #2 ]]</t>
      <t>[[TODO: If we have the validity window endpoint, do we still need to separate "info" and "assertions"? #12]]</t>
    </section>
    <section anchor="acme-extensions">
      <name>ACME Extensions</name>
      <t>[[TODO: This section hasn't been written yet. Instead, what follows is an informal sketch and design discussion. #13 ]]</t>
      <t>See <xref target="agility"/> for the overall model this should target.</t>
      <t>Define ACME <xref target="RFC8555"/> extensions for requesting these. We probably need to add a new field in the Order object (<xref section="9.7.2" sectionFormat="of" target="RFC8555"/> to request this. Also a new MIME type for the thing being fetched <xref section="7.4.2" sectionFormat="of" target="RFC8555"/>. This format should capture additional metadata per <xref target="trust-anchor-negotiation"/>.</t>
      <t>Otherwise, the long issuance time is already modeled by the allowance for the "processing" state taking a while. The ACME server should use the Retry-After header so the subscriber knows when to query again.</t>
      <t>Also use <xref target="I-D.draft-ietf-acme-ari"/> to move the renewal logic in <xref target="rolling-renewal"/> from the subscriber to the ACME server.</t>
      <t>Per <xref target="agility"/>, a subscriber may need multiple certificates. That should be a service provided by the ACME server. Come up with a scheme to mint multiple orders from a single newOrder request, or request multiple certificates off of a single order. (Note different certificates may have different processing time. It seems an ACME order only transitions from the "processing" state to the "valid" state once, so the former is probably better.)</t>
      <t>We should also define a certificate request format, though it is broadly just reusing the Assertion structure. If the CA wishes to check possession of the private key, it'll need to come with a signature or do some online operation (e.g. if it's a KEM key). This is inherently protocol-specific, because the mechanism needs to coexist with the target protocol. (Signed CSRs implicitly assume the target protocol's signature payloads cannot overlap with that of a CSR.)</t>
    </section>
    <section anchor="tls-protocol">
      <name>Use in TLS</name>
      <section anchor="tls-subject-info">
        <name>TLS Subjects</name>
        <t>This section describes the SubjectType for use with TLS <xref target="RFC8446"/>. The SubjectType value is <tt>tls</tt>, and the <tt>subject_info</tt> field contains a TLSSubjectInfo structure, defined below:</t>
        <artwork><![CDATA[
enum { tls(0), (2^16-1) } SubjectType;

struct {
    SignatureScheme signature;
    opaque public_key<1..2^16-1>;
    /* TODO: Should there be an extension list? #38 */
} TLSSubjectInfo;
]]></artwork>
        <t>A TLSSubjectInfo describes a TLS signing key. The <tt>signature</tt> field is a SignatureScheme <xref section="4.2.3" sectionFormat="of" target="RFC8446"/> value describing the key type and signature algorithm it uses for CertificateVerify.</t>
        <t>The <tt>public_key</tt> field contains the subscriber's public key. The encoding is determined by the <tt>signature</tt> field as follows:</t>
        <dl>
          <dt>RSASSA-PSS algorithms:</dt>
          <dd>
            <t>The public key is an RSAPublicKey structure <xref target="RFC8017"/> encoded in DER <xref target="X.690"/>. BER encodings which are not DER MUST be rejected.</t>
          </dd>
          <dt>ECDSA algorithms:</dt>
          <dd>
            <t>The public key is a UncompressedPointRepresentation structure defined in <xref section="4.2.8.2" sectionFormat="of" target="RFC8446"/>, using the curve specified by the SignatureScheme.</t>
          </dd>
          <dt>EdDSA algorithms:</dt>
          <dd>
            <t>The public key is the byte string encoding defined in <xref target="RFC8032"/></t>
          </dd>
        </dl>
        <t>This document does not define the public key format for other algorithms. In order for a SignatureScheme to be usable with TLSSubjectInfo, this format must be defined in a corresponding document.</t>
        <t>[[TODO: If other schemes get defined before this document is done, add them here. After that, it's on the other schemes to do it. #39 ]]</t>
      </section>
      <section anchor="tls-certificate-type">
        <name>The Bikeshed Certificate Type</name>
        <t>[[TODO: Bikeshed is a placeholder name until someone comes up with a better one. #15]]</t>
        <t>This section defines the <tt>Bikeshed</tt> TLS certificate type, which may be negotiated with the <tt>client_certificate_type</tt>, <tt>server_certificate_type</tt> <xref target="RFC7250"/>, or <tt>cert_type</tt> <xref target="RFC6091"/> extensions. It can only be negotiated with TLS 1.3 or later. Servers MUST NOT negotiate it in TLS 1.2 or below. If the client receives a ServerHello that negotiates it in TLS 1.2 or below, it MUST abort the connection with an <tt>illegal_parameter</tt> alert.</t>
        <t>[[TODO: None of these three extensions is quite right for client certificates because the negotiation isn't symmetric. See discussion in <xref target="cert-type-problems"/>. We may need to define another one. #18]]</t>
        <t>When negotiated, the Certificate message MUST contain a single CertificateEntry structure.
CertificateEntry is updated as follows:</t>
        <artwork><![CDATA[
enum { Bikeshed(TBD), (255) } CertificateType;

struct {
    select (certificate_type) {
        /* Certificate type defined in this document */
        case Bikeshed:
            BikeshedCertificate certificate;

        /* From RFC 7250 */
        case RawPublicKey:
            opaque ASN1_subjectPublicKeyInfo<1..2^24-1>;

        case X509:
            opaque cert_data<1..2^24-1>;

        /* Additional certificate types based on the
          "TLS Certificate Types" registry */
    };
    Extension extensions<0..2^16-1>;
} CertificateEntry;
]]></artwork>
        <t>The <tt>subject_type</tt> field in the certificate MUST be of type <tt>tls</tt> (<xref target="tls-subject-info"/>). The CertificateVerify message is computed and processed as in <xref target="RFC8446"/>, with the following modifications:</t>
        <ul spacing="normal">
          <li>
            <t>The signature is computed and verified with the key described in the TLSSubjectInfo. The relying party uses the key decoded from the <tt>public_key</tt> field, and the subscriber uses the corresponding private key.</t>
          </li>
          <li>
            <t>The SignatureScheme in the CertificateVerify MUST match the <tt>signature</tt> field in the TLSSubjectInfo.</t>
          </li>
        </ul>
        <t>The second modification differs from <xref target="RFC8446"/>. Where <xref target="RFC8446"/> allowed an id-rsaEncryption key to sign both <tt>rsa_pss_rsae_sha256</tt> and <tt>rsa_pss_rsae_sha384</tt>, TLSSubjectInfo keys are specific to a single algorithm. Future documents MAY relax this restriction for a new SignatureScheme, provided it was designed to be used concurrently with the value in TLSSubjectInfo. In particular, the underlying signature algorithm MUST match, and there MUST be appropriate domain separation between the two modes. For example, <xref target="I-D.draft-ietf-tls-batch-signing"/> defines new SignatureSchemes, but the same keypair can be safely used with one of the new values and the corresponding base SignatureScheme.</t>
        <t>If this certificate type is used for either the client or server certificate, the ALPN <xref target="RFC7301"/> extension MUST be negotiated. If no application protocol is selected, endpoints MUST close the connection with a <tt>no_application_protocol</tt> alert.</t>
        <t>[[TODO: Suppose we wanted to introduce a second SubjectType for TLS, either to add new fields or capture a new kind of key. That would need to be negotiated. We could use another extension, but defining a new certificate type seems most natural. That suggests this certificate type isn't about negotiating BikeshedCertificate in general, but specifically SubjectType.tls and TLSSubjectInfo. So perhaps the certificate type should be TLSSubjectInfo or BikeshedTLS. #7 ]]</t>
      </section>
      <section anchor="tls-trust-anchors-extension">
        <name>The Trust Anchors Extension</name>
        <t>The TLS <tt>trust_anchors</tt> extension which implements certificate negotiation (see <xref target="trust-anchor-negotiation"/>). The extension body is a TrustAnchors structure, defined below:</t>
        <artwork><![CDATA[
enum { trust_anchors(TBD), (2^16-1) } ExtensionType;

struct {
    TrustAnchor trust_anchors<1..2^16-1>;
} TrustAnchors;
]]></artwork>
        <t>This extension carries the relying party's trust anchor set, computed as described in <xref target="trust-anchor-negotiation"/>. When the client is the relying party for a server certificate, the extension is sent in the ClientHello. When the server is the relying party for a client certificate, the extension is sent in the CertificateRequest message. This extension is only defined for use with TLS 1.3 and later. It MUST be ignored when negotiating TLS 1.2.</t>
        <t>When the subscriber receives this extension, selects a certificate from its certificate set, as described in <xref target="trust-anchor-negotiation"/>. If none match, it does not negotiate the Bikeshed type and selects a different certificate type. [[TODO: This last step does not work. See <xref target="cert-type-problems"/>]]</t>
      </section>
      <section anchor="cert-type-problems">
        <name>Certificate Type Negotiation</name>
        <t>[[TODO: We may need a new certificate types extension, either in this document or a separate one. For now, this section just informally describes the problem. #18 ]]</t>
        <t>The server certificate type is negotiated as follows:</t>
        <ul spacing="normal">
          <li>
            <t>The client sends <tt>server_certificate_type</tt> in ClientHello with accepted certificate types.</t>
          </li>
          <li>
            <t>The server selects a certificate type to use, It sends it in <tt>server_certificate_type</tt> in EncryptedExtensions.</t>
          </li>
          <li>
            <t>The server sends a certificate of the server-selected type in Certificate.</t>
          </li>
        </ul>
        <t>This model allows the server to select its certificate type based on not just <tt>server_certificate_type</tt>, but also other ClientHello extensions like <tt>certificate_authorities</tt> or <tt>trust_anchors</tt> (<xref target="tls-trust-anchors-extension"/>). In particular, if there is no match in <tt>trust_anchors</tt>, it can fallback to X.509, rather than staying within the realm of BikeshedCertificate.</t>
        <t>However, the client certificate type is negotiated differently:</t>
        <ul spacing="normal">
          <li>
            <t>The client sends <tt>client_certificate_type</tt> in ClientHello with certificates it can send</t>
          </li>
          <li>
            <t>The server selects a certificate type to request. It sends it in <tt>client_certificate_type</tt> in EncryptedExtensions.</t>
          </li>
          <li>
            <t>The server requests a client certificate in CertificateRequest</t>
          </li>
          <li>
            <t>The client sends a certificate of the server-selected type in Certificate.</t>
          </li>
        </ul>
        <t>Here, the client (subscriber) does not select the certificate type. The server (relying party) does. Moreover, this selection is made before the client can see the server's <tt>certificate_authorities</tt> or <tt>trust_anchors</tt> value, in CertificateRequest. There is no opportunity for the client to fallback to X.509.</t>
        <t>The <tt>cert_types</tt> extension behaves similarly, but additionally forces the client and server types to match. These extensions were defined when TLS 1.2 was current, but TLS 1.3 aligns the client and server certificate negotiation. Most certificate negotiation extensions, such as <tt>certificate_authorities</tt> or <tt>compress_certificate</tt> <xref target="RFC8879"/> can be offered in either direction, in ClientHello or CertificateRequest. They are then symmetrically accepted in the Certificate message.</t>
        <t>A more corresponding TLS 1.3 negotiation would be to defer the client certificate type negotiation to CertificateRequest, with the server offering the supported certificate types. The client can then make its selection, taking other CertificateRequest extensions into account, and indicate its selection in the Certificate message.</t>
        <t>Two possible design sketches:</t>
        <section anchor="indicate-in-first-certificateentry">
          <name>Indicate in First CertificateEntry</name>
          <t>We can have the subscriber indicate the certificate type in an extension of the first CertificateEntry. One challenge is the extensions come after the certificate, so the relying party must seek to the <tt>extensions</tt> field independent of the certificate type. Thus all certificate types must be updated to use a consistent <tt>opaque cert_data&lt;0..2^24&gt;</tt> syntax, with any type-specific structures embedded inside.</t>
          <t>RawPublicKey and X509 already meet this requirement. OpenPGP and Bikeshed need an extra length prefix.</t>
        </section>
        <section anchor="change-certificate-syntax">
          <name>Change Certificate Syntax</name>
          <t>Alternatively, we can negotiate an extension that changes the syntax to Certificate to:</t>
          <artwork><![CDATA[
struct {
    CertificateType certificate_type;
    opaque certificate_request_context<0..2^8-1>;
    CertificateEntry certificate_list<0..2^24-1>;
} Certificate;
]]></artwork>
          <t>The negotiation can be:</t>
          <ul spacing="normal">
            <li>
              <t>Client sends its accepted certificate types in ClientHello. Offering this new extension also signatures it is willing to accept the new message format. Unlike the existing extensions, an X.509-only client still sends the extension with just X509 in the list.</t>
            </li>
            <li>
              <t>Server, if it implements the new syntax, acknowledges the syntax change with an empty extension in EncryptedExtensions. (It doesn't indicate its selection yet.)</t>
            </li>
            <li>
              <t>If both of the above happen, Certificate's syntax has changed. Server indicates its selection with the <tt>certificate_type</tt> field</t>
            </li>
            <li>
              <t>Server can also send this extension in CertificateRequest to offer non-X.509 certificate types</t>
            </li>
            <li>
              <t>Client likewise indicates its selection with the <tt>certificate_type</tt> field.</t>
            </li>
          </ul>
          <t>This is a bit cleaner to parse, but the negotiation is more complex.</t>
        </section>
      </section>
    </section>
    <section anchor="deployment-considerations">
      <name>Deployment Considerations</name>
      <section anchor="fallback-mechanisms">
        <name>Fallback Mechanisms</name>
        <t>Subscribers using Merkle Tree certificates SHOULD additionally provision certificates from another PKI mechanism, such as X.509. This ensures the service remains available to relying parties that have not recently fetched validity window updates, or lack connectivity to the transparency service.</t>
        <t>If the pipeline of updates from the CA to the transparency service to relying parties is interrupted, certificate issuance may halt, or newly issued certificates may no longer be usable. When this happens, the optimization in this document may fail, but fallback mechanisms ensure services remain available.</t>
      </section>
      <section anchor="rolling-renewal">
        <name>Rolling Renewal</name>
        <t>When a subscriber requests a certificate, the CA cannot fulfill the request until the next batch is ready. Once published, the certificate will not be accepted by relying parties until the batch state is mirrored by their respective transparency services, then pushed to relying parties.</t>
        <t>To account for this, subscribers SHOULD request a new Merkle Tree certificate significantly before the previous Merkle Tree certificate expires. Renewing halfway into the previous certificate's lifetime is RECOMMENDED. Subscribers additionally SHOULD retain both the new and old certificates in the certificate set until the old certificate expires. As the new tree hash is delivered to relying parties, certificate negotiation will transition relying parties to the new certificate, while retaining the old certificate for clients that are not yet updated.</t>
      </section>
      <section anchor="new-keys">
        <name>Deploying New Keys</name>
        <t>Merkle Tree certificates' issuance delays make them unsuitable when rapidly deploying a new service and reacting to key compromise.</t>
        <t>When a new service is provisioned with a brand new Merkle Tree certificate, relying parties will not yet have received a validity window containing this certificate from the transparency service and can therefore not validate this certificate until receiving them. The subscriber SHOULD, in parallel, also provision a certificate using another PKI mechanism (e.g. X.509). Certificate negotiation will then switch over to serving the Merkle Tree certificate as relying parties are updated.</t>
        <t>If the service is performing a routine key rotation, and not in response to a known compromise, the subscriber MAY use the process described in <xref target="rolling-renewal"/>, allowing certificate negotiation to also switch the private key used. This slightly increases the lifetime of the old key but maintains the size optimization continuously.</t>
        <t>If the service is rotating keys in response to a key compromise, this option is not available. Instead, the service SHOULD immediately discard the old key and request a more immediate issuance mechanism. As in the initial deployment case, it SHOULD request a Merkle Tree certificate in parallel, which will restore the size optimization over time.</t>
      </section>
      <section anchor="agility">
        <name>Agility and Extensibility</name>
        <t>Beyond negotiating Merkle Tree certificates, certificate negotiation can also handle variations in which CAs a relying party trusts. With a single certificate, the subscriber is limited to the intersection of these sets. Instead, <xref target="trust-anchor-negotiation"/> allows a subscriber to maintain multiple certificates that, together, encompass the relying parties it supports.</t>
        <t>This improves trust agility. If a relying party distrusts a CA, a subscriber can include certificates from both the distrusted CA and a replacement CA. This allows the distrusting relying party to request the replacement CA, while existing relying parties, which may not trust the replacement CA, can continue to use the distrusted CA. Likewise, an entity operating a CA may deploy a second CA to rotate key material. The certificate set can include both the new and old CA to ensure a smooth transition.</t>
        <t>Moreover, <xref target="trust-anchor-negotiation"/> allows subscribers to select certificates without recognizing either the CA or the ProofType. Only the Assertion structure directly impacts the application protocol on the subscriber's side. This allows for a more flexible deployment model where ACME servers, or other certificate management services, assemble the certificate set:</t>
        <t>Instead of each subscriber being individually configured with the CAs to use, the ACME server can provide multiple certificates, covering all supported relying parties. As relying party requirements evolve, CAs rotate keys, or new ProofTypes are designed, the ACME server is updated to incorporate these into certificate sets. As the PKI evolves, subscribers are automatically provisioned appropriately.</t>
      </section>
      <section anchor="ts-and-ca-availability">
        <name>Batch State Availability</name>
        <t>CAs and transparency services serve an HTTP interface defined in <xref target="publishing"/>. This service may be temporarily unavailable, either from service outage or if the service does not meet the consistency condition mid-update. Exact availability requirements for these services are out of scope for this document, but this section provides some general guidance.</t>
        <t>If the CA's interface becomes unavailable, the transparency service will be unavailable to update. This will prevent relying parties from accepting new certificates, so subscribers will need to use fallback mechanisms per <xref target="fallback-mechanisms"/>. This does not compromise transparency goals per <xref target="misbehaving-ca"/>. However, a CA which is persistently unavailable may not offer sufficient benefit to be used by subscribers or trusted by relying parties.</t>
        <t>However, if the transparency service's interface becomes unavailable, monitors will be unable to check for unauthorized certificates. This does compromise transparency goals. Mirrors of the batch state partially mitigate this, but service unavailability may prevent mirrors from replicating a batch that relying parties accept.</t>
      </section>
      <section anchor="trust-anchor-list-size">
        <name>Trust Anchor List Size</name>
        <t><xref target="trust-anchor-negotiation"/> and <xref target="tls-trust-anchors-extension"/> involve the relying party sending a list of TrustAnchor values to aid the subscriber in selecting certificates. A sufficiently large list may be impractical to fit in a ClientHello and require alternate negotiation mechanisms or a different PKI structure. To reduce overhead, <tt>issuer_id</tt> values SHOULD be short, no more than eight bytes long.</t>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>The negotiation mechanism described in <xref target="trust-anchor-negotiation"/> and <xref target="tls-trust-anchors-extension"/> presumes the relying party's trust anchor list is not sensitive. In particular, information sent in a TLS ClientHello is unencrypted without the Encrypted ClientHello extension <xref target="I-D.draft-ietf-tls-esni"/>.</t>
      <t>This mechanism SHOULD NOT be used in contexts where the list reveals information about an individual user. For example, a web browser may support both a common set of trust anchors configured by the browser vendor, and a set of user-specified trust anchors. The common trust anchors would only reveal which browser is used, while the user-specified trust anchors may reveal information about the user. In this case, the trust anchor list SHOULD be limited to the common trust anchors.</t>
      <t>Additionally, even if all users are served the same updates, individual users may fetch from the transparency service at different times, resulting in variation in the trust anchor list. Like other behavior changes triggered by updates, this may, when combined with other sources of user variation, lead to a fingerprinting attack <xref target="RFC6973"/>.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="authenticity">
        <name>Authenticity</name>
        <t>A key security requirement of any PKI scheme is that relying parties only accept assertions that were certified by a trusted certification authority. This is achieved by the following two properties:</t>
        <ul spacing="normal">
          <li>
            <t>The relying party MUST NOT accept any validity window that was not authenticated as coming from the CA.</t>
          </li>
          <li>
            <t>For any tree head computed from a list of assertions as in <xref target="building-tree"/>, it is computationally infeasible to construct an assertion not this list, and some inclusion proof, such that the procedure in <xref target="verifying"/> succeeds.</t>
          </li>
        </ul>
        <t><xref target="transparency-service"/> discusses achieving the first property.</t>
        <t>The second property is achieved by using a collision-resistant hash in the Merkle Tree construction. The <tt>HashEmpty</tt>, <tt>HashNode</tt>, and <tt>HashAssertion</tt> functions use distinct initial bytes when calling the hash function, to achieve domain separation.</t>
      </section>
      <section anchor="cross-protocol">
        <name>Cross-protocol attacks</name>
        <t>Using the same key material in different, incompatible ways risks cross-protocol attacks when the two uses overlap. To avoid this, <xref target="parameters"/> forbids the reuse of Merkle Tree CA private keys in another protocol.  A CA MUST NOT generate signatures with its private key, except as defined in <xref target="signing"/>, or an extension of this protocol. Any valid signature of a CA's <tt>public_key</tt> that does not meet these requirements indicates misuse of the private key by the CA.</t>
        <t>To reduce the risk of attacks if this guidance is not followed, the LabeledValidityWindow structure defined in <xref target="signing"/> includes a label string, and the CA's <tt>issuer_id</tt>. Extensions of this protocol MAY be defined which reuse the keys, but any that do MUST use a different label string and analyze the security of the two uses concurrently.</t>
        <t>Likewise, key material included in an assertion (<xref target="assertions"/>) MUST NOT be used in another protocol, unless that protocol was designed to be used concurrently with the original purpose. The Assertion structure is designed to facilitate this. Where X.509 uses an optional key usage extension (see <xref section="4.2.1.3" sectionFormat="of" target="RFC5280"/>) and extended key usage extension (see <xref section="4.2.1.12" sectionFormat="of" target="RFC5280"/>) to specify key usage, an Assertion is always defined first by a SubjectType value. Subjects cannot be constructed without first specifying the type, and subjects of different types cannot be accidentally interpreted as each other.</t>
        <t>The TLSSubjectInfo structure additionally protects against cross-protocol attacks in two further ways:</t>
        <ul spacing="normal">
          <li>
            <t>A TLSSubjectInfo specifies the key type not with a SubjectPublicKeyInfo <xref section="4.1.2.7" sectionFormat="of" target="RFC5280"/> object identifier, but with a SignatureScheme structure. Where <xref target="RFC8446"/> allows an id-rsaEncryption key to sign both <tt>rsa_pss_rsae_sha256</tt> and <tt>rsa_pss_rsae_sha384</tt>, this protocol specifies the full signature algorithm parameters.</t>
          </li>
          <li>
            <t>To mitigate cross-protocol attacks at the application protocol <xref target="ALPACA"/>, this document requires connections using it to negotiate the ALPN <xref target="RFC7301"/> extension.</t>
          </li>
        </ul>
      </section>
      <section anchor="revocation">
        <name>Revocation</name>
        <t>Merkle Tree certificates avoid sending an additional signature for OCSP responses by using a short-lived certificates model. Per <xref target="parameters"/>,  Merkle Tree CA's certificate lifetime MUST be set such that certificate expiration replaces revocation. Existing revocation mechanisms like CRLs and OCSP are themselves short-lived, signed messages, so a low enough certificate lifetime provides equivalent revocation capability.</t>
        <t>Relying parties with additional sources of revocation such as <xref target="CRLite"/> or <xref target="CRLSets"/> SHOULD provide a mechanism to express revoked assertions in such systems, in order to opportunistically revoke assertions in up-to-date relying parties sooner. It is expected that, in most deployments, relying parties can fetch this revocation data and Merkle Tree CA validity windows from the same service.</t>
        <t>[[TODO: Is it worth defining an API for Merkle Tree CAs to publish a revocation list? That would allow automatically populating CRLite and CRLSets. Maybe that's a separate document. #41]]</t>
      </section>
      <section anchor="transparency">
        <name>Transparency</name>
        <t>The transparency service does not prevent unauthorized certificates, but it aims to provide comparable security properties to Certificate Transparency <xref target="RFC6962"/>. If a subscriber presents an acceptable Merkle Tree certificate to a relying party, the relying party should have assurance it was published in some form that monitors and, in particular, the subject of the certificate will be able to notice.</t>
        <section anchor="unauthorized-certificates">
          <name>Unauthorized Certificates</name>
          <t>If a Merkle Tree certificate was unauthorized, but seen and mirrored by the transparency service, the relying party may accept it. However, provided the transparency service is operating correctly, this will be detectable. Unlike Certificate Transparency, Merkle Tree certificates achieve this property without a Maximum Merge Delay (MMD). Certificates are fully mirrored by the transparency service before the relying party will accept them. However, this comes at the cost of immediate issuance, as described in <xref target="deployment-considerations"/>.</t>
          <t>If the unauthorized certificate was not seen by the transparency service, the relying party will reject it. In order to accept a certificate, the relying party must have been provisioned with the corresponding tree head. A correctly operating transparency service will never present relying parties with tree heads unless the corresponding certificates have all been mirrored.</t>
          <t>Unlike Certificate Transparency, the transparency service will not provide the preimages for <tt>subject_info_hash</tt>, only the hashed values. This is intended to reduce serving costs, particularly with large post-quantum keys. As a result, monitors look for unrecognized hashes instead of unrecognized keys. Any unrecognized hash, even if the preimage is unknown, indicates an unauthorized certificate.</t>
          <t>This optimization complicates studies of weak public keys, e.g. <xref target="SharedFactors"/>. Such studies will have to retrieve the public keys separately, such as by connecting to the TLS servers, or fetching from the CA if it retains the unabridged assertion. This document does not define a mechanism for doing this.</t>
        </section>
        <section anchor="misbehaving-ca">
          <name>Misbehaving Certification Authority</name>
          <t>Although CAs in this document publish structures similar to a Certificate Transparency log, they do not need to function correctly to provide transparency.</t>
          <t>A CA could violate the append-only property of its batch state, and present differing views to different parties. Unlike a misbehaving Certificate Transparency log, this would not compromise transparency. Whichever view is presented to the transparency service at the time of updates determines the canonical batch state for both relying parties and monitors. Certificates that are consistent with only the other view will be rejected by relying parties. If the transparency service observes both views, the procedures in <xref target="transparency-service"/> will prevent the new, conflicting view from overwriting the originally saved view. Instead, the update process will fail and further certificates will not be accepted.</t>
          <t>A CA could also sign a validity window containing an unauthorized certificate and feign an outage when asked to serve the corresponding assertions. However, if the assertion list was never mirrored by the transparency service, the tree head will never be pushed to relying parties, so the relying party will reject the certificate. If the assertion list was mirrored, the unauthorized certificate continues to be available to monitors.</t>
          <t>As a consequence, monitors MUST use the transparency service's view of the batch state when monitoring for unauthorized certificates. If the transparency service is a collection of mirrors, as in <xref target="single-update-multiple-mirrors"/> or <xref target="multiple-transparency-services"/>, monitors MUST monitor each mirror. Monitors MAY optionally monitor the CA directly, but this alone is not sufficient to avoid missing certificates.</t>
        </section>
        <section anchor="misbehaving-transparency-service">
          <name>Misbehaving Transparency Service</name>
          <t>This document divides CA and transparency service responsibilities differently from how <xref target="RFC6962"/> divides CA and Certificate Transparency log. The previous section describes the implications of a failure to meet the log-like responsibilities of a CA, provided the transparency service is operating correctly.</t>
          <t>For the remainder of log-like responsibilities, the relying party trusts its choice of transparency service deployment to ensure the validity windows it uses are consistent with what monitors observe. Otherwise, a malicious transparency service and CA could collude to cause a relying party to accept an unauthorized certificate not visible to monitors. Where a single trusted service is not available, the <xref target="transparency-service"/> discusses possible deployment structures where the transparency service is a collection of mirrors, all or most of whom must collude instead.</t>
        </section>
      </section>
      <section anchor="security-of-fallback-mechanisms">
        <name>Security of Fallback Mechanisms</name>
        <t>Merkle Tree certificates are intended to be used as an optimization over other PKI mechanisms. More generally, <xref target="trust-anchor-negotiation"/> and <xref target="agility"/> allow relying parties to support many kinds of certificates, to meet different goals. This document discusses the security properties of Merkle Tree certificates, but the overall system's security properties depend on all of a relying party's trust anchors.</t>
        <t>In particular, in relying parties that require a publicly auditable PKI, the supported fallback mechanisms must also provide a transparency property, either with Certificate Transparency <xref target="RFC6962"/> or another mechanism.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA is requested to create the following entry in the TLS ExtensionType registry <xref target="RFC8447"/>. The "Reference" column should be set to this document.</t>
      <table>
        <name>Additions to the TLS ExtensionType Registry</name>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">Extension Name</th>
            <th align="left">TLS 1.3</th>
            <th align="left">DTLS-Only</th>
            <th align="left">Recommended</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">TBD</td>
            <td align="left">
              <tt>trust_anchors</tt></td>
            <td align="left">CH, CR</td>
            <td align="left">N</td>
            <td align="left">TBD</td>
          </tr>
        </tbody>
      </table>
      <t>IANA is requested to create the following entry in the TLS Certificate Types registry <xref target="RFC8447"/>. The "Reference" column should be set to this document.</t>
      <table>
        <name>Additions to the TLS Certificate Types Registry</name>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">Name</th>
            <th align="left">Recommended</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">TBD</td>
            <td align="left">
              <tt>Bikeshed</tt></td>
            <td align="left">TBD</td>
          </tr>
        </tbody>
      </table>
      <t>[[ TODO: Define registries for the enums introduced in this document. #42]]</t>
      <ul spacing="normal">
        <li>
          <t>SubjectType</t>
        </li>
        <li>
          <t>ClaimType</t>
        </li>
        <li>
          <t>ProofType</t>
        </li>
      </ul>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="SHS">
          <front>
            <title>Secure Hash Standard</title>
            <author fullname="Quynh H. Dang" initials="Q." surname="Dang">
              <organization/>
            </author>
            <date month="July" year="2015"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.180-4"/>
          <refcontent>National Institute of Standards and Technology</refcontent>
        </reference>
        <reference anchor="RFC1034">
          <front>
            <title>Domain names - concepts and facilities</title>
            <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
            <date month="November" year="1987"/>
            <abstract>
              <t>This RFC is the revised basic definition of The Domain Name System. It obsoletes RFC-882. This memo describes the domain style names and their used for host address look up and electronic mail forwarding. It discusses the clients and servers in the domain name system and the protocol used between them.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="13"/>
          <seriesInfo name="RFC" value="1034"/>
          <seriesInfo name="DOI" value="10.17487/RFC1034"/>
        </reference>
        <reference anchor="RFC1123">
          <front>
            <title>Requirements for Internet Hosts - Application and Support</title>
            <author fullname="R. Braden" initials="R." role="editor" surname="Braden"/>
            <date month="October" year="1989"/>
            <abstract>
              <t>This RFC is an official specification for the Internet community. It incorporates by reference, amends, corrects, and supplements the primary protocol standards documents relating to hosts. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="3"/>
          <seriesInfo name="RFC" value="1123"/>
          <seriesInfo name="DOI" value="10.17487/RFC1123"/>
        </reference>
        <reference anchor="X.690">
          <front>
            <title>Information technology - ASN.1 encoding Rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)</title>
            <author>
              <organization>ITU-T</organization>
            </author>
            <date year="2021" month="February"/>
          </front>
          <seriesInfo name="ISO/IEC 8824-1:2021" value=""/>
        </reference>
        <reference anchor="POSIX">
          <front>
            <title>IEEE Standard for Information Technology--Portable Operating System Interface (POSIX(TM)) Base Specifications, Issue 7</title>
            <author>
              <organization/>
            </author>
            <date month="January" year="2018"/>
          </front>
          <seriesInfo name="DOI" value="10.1109/ieeestd.2018.8277153"/>
          <seriesInfo name="ISBN" value="[&quot;9781504445429&quot;]"/>
          <refcontent>IEEE</refcontent>
        </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="RFC8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8032"/>
          <seriesInfo name="DOI" value="10.17487/RFC8032"/>
        </reference>
        <reference anchor="RFC8555">
          <front>
            <title>Automatic Certificate Management Environment (ACME)</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="J. Hoffman-Andrews" initials="J." surname="Hoffman-Andrews"/>
            <author fullname="D. McCarney" initials="D." surname="McCarney"/>
            <author fullname="J. Kasten" initials="J." surname="Kasten"/>
            <date month="March" year="2019"/>
            <abstract>
              <t>Public Key Infrastructure using X.509 (PKIX) certificates are used for a number of purposes, the most significant of which is the authentication of domain names. Thus, certification authorities (CAs) in the Web PKI are trusted to verify that an applicant for a certificate legitimately represents the domain name(s) in the certificate. As of this writing, this verification is done through a collection of ad hoc mechanisms. This document describes a protocol that a CA and an applicant can use to automate the process of verification and certificate issuance. The protocol also provides facilities for other certificate management functions, such as certificate revocation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8555"/>
          <seriesInfo name="DOI" value="10.17487/RFC8555"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="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="RFC5890">
          <front>
            <title>Internationalized Domain Names for Applications (IDNA): Definitions and Document Framework</title>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <date month="August" year="2010"/>
            <abstract>
              <t>This document is one of a collection that, together, describe the protocol and usage context for a revision of Internationalized Domain Names for Applications (IDNA), superseding the earlier version. It describes the document collection and provides definitions and other material that are common to the set. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5890"/>
          <seriesInfo name="DOI" value="10.17487/RFC5890"/>
        </reference>
        <reference anchor="I-D.draft-ietf-uta-rfc6125bis">
          <front>
            <title>Service Identity in TLS</title>
            <author fullname="Peter Saint-Andre" initials="P." surname="Saint-Andre">
              <organization>independent</organization>
            </author>
            <author fullname="Rich Salz" initials="R." surname="Salz">
              <organization>Akamai Technologies</organization>
            </author>
            <date day="10" month="August" year="2023"/>
            <abstract>
              <t>Many application technologies enable secure communication between two entities by means of Transport Layer Security (TLS) with Internet Public Key Infrastructure using X.509 (PKIX) certificates. This document specifies procedures for representing and verifying the identity of application services in such interactions.

 This document obsoletes RFC 6125.
              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-uta-rfc6125bis-15"/>
        </reference>
        <reference anchor="RFC8017">
          <front>
            <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
            <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <author fullname="J. Jonsson" initials="J." surname="Jonsson"/>
            <author fullname="A. Rusch" initials="A." surname="Rusch"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document provides recommendations for the implementation of public-key cryptography based on the RSA algorithm, covering cryptographic primitives, encryption schemes, signature schemes with appendix, and ASN.1 syntax for representing keys and for identifying the schemes.</t>
              <t>This document represents a republication of PKCS #1 v2.2 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series. By publishing this RFC, change control is transferred to the IETF.</t>
              <t>This document also obsoletes RFC 3447.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8017"/>
          <seriesInfo name="DOI" value="10.17487/RFC8017"/>
        </reference>
        <reference anchor="RFC7250">
          <front>
            <title>Using Raw Public Keys in Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)</title>
            <author fullname="P. Wouters" initials="P." role="editor" surname="Wouters"/>
            <author fullname="H. Tschofenig" initials="H." role="editor" surname="Tschofenig"/>
            <author fullname="J. Gilmore" initials="J." surname="Gilmore"/>
            <author fullname="S. Weiler" initials="S." surname="Weiler"/>
            <author fullname="T. Kivinen" initials="T." surname="Kivinen"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>This document specifies a new certificate type and two TLS extensions for exchanging raw public keys in Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS). The new certificate type allows raw public keys to be used for authentication.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7250"/>
          <seriesInfo name="DOI" value="10.17487/RFC7250"/>
        </reference>
        <reference anchor="RFC6091">
          <front>
            <title>Using OpenPGP Keys for Transport Layer Security (TLS) Authentication</title>
            <author fullname="N. Mavrogiannopoulos" initials="N." surname="Mavrogiannopoulos"/>
            <author fullname="D. Gillmor" initials="D." surname="Gillmor"/>
            <date month="February" year="2011"/>
            <abstract>
              <t>This memo defines Transport Layer Security (TLS) extensions and associated semantics that allow clients and servers to negotiate the use of OpenPGP certificates for a TLS session, and specifies how to transport OpenPGP certificates via TLS. It also defines the registry for non-X.509 certificate types. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6091"/>
          <seriesInfo name="DOI" value="10.17487/RFC6091"/>
        </reference>
        <reference anchor="RFC7301">
          <front>
            <title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
            <author fullname="S. Friedl" initials="S." surname="Friedl"/>
            <author fullname="A. Popov" initials="A." surname="Popov"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="E. Stephan" initials="E." surname="Stephan"/>
            <date month="July" year="2014"/>
            <abstract>
              <t>This document describes a Transport Layer Security (TLS) extension for application-layer protocol negotiation within the TLS handshake. For instances in which multiple application protocols are supported on the same TCP or UDP port, this extension allows the application layer to negotiate which protocol will be used within the TLS connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7301"/>
          <seriesInfo name="DOI" value="10.17487/RFC7301"/>
        </reference>
        <reference anchor="RFC8447">
          <front>
            <title>IANA Registry Updates for TLS and DTLS</title>
            <author fullname="J. Salowey" initials="J." surname="Salowey"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document describes a number of changes to TLS and DTLS IANA registries that range from adding notes to the registry all the way to changing the registration policy. These changes were mostly motivated by WG review of the TLS- and DTLS-related registries undertaken as part of the TLS 1.3 development process.</t>
              <t>This document updates the following RFCs: 3749, 5077, 4680, 5246, 5705, 5878, 6520, and 7301.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8447"/>
          <seriesInfo name="DOI" value="10.17487/RFC8447"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="CHROME-CT" target="https://googlechrome.github.io/CertificateTransparency/ct_policy.html">
          <front>
            <title>Chrome Certificate Transparency Policy</title>
            <author>
              <organization>Google Chrome</organization>
            </author>
            <date year="2022" month="March" day="17"/>
          </front>
        </reference>
        <reference anchor="APPLE-CT" target="https://support.apple.com/en-us/HT205280">
          <front>
            <title>Apple's Certificate Transparency policy</title>
            <author>
              <organization>Apple</organization>
            </author>
            <date year="2021" month="March" day="05"/>
          </front>
        </reference>
        <reference anchor="Dilithium" target="https://pq-crystals.org/dilithium/data/dilithium-specification-round3-20210208.pdf">
          <front>
            <title>CRYSTALS-Dilithium Algorithm Specifications and Supporting Documentation</title>
            <author initials="S." surname="Bai" fullname="Shi Bai">
              <organization/>
            </author>
            <author initials="L." surname="Ducas" fullname="Léo Ducas">
              <organization/>
            </author>
            <author initials="E." surname="Kiltz" fullname="Eike Kiltz">
              <organization/>
            </author>
            <author initials="T." surname="Lepoint" fullname="Tancrède Lepoint">
              <organization/>
            </author>
            <author initials="V." surname="Lyubashevsky" fullname="Vadim Lyubashevsky">
              <organization/>
            </author>
            <author initials="P." surname="Schwabe" fullname="Peter Schwabe">
              <organization/>
            </author>
            <author initials="G." surname="Seiler" fullname="Gregor Seiler">
              <organization/>
            </author>
            <author initials="D." surname="Stehlé" fullname="Damien Stehlé">
              <organization/>
            </author>
            <date year="2021" month="February" day="08"/>
          </front>
        </reference>
        <reference anchor="Falcon" target="https://falcon-sign.info/falcon.pdf">
          <front>
            <title>Falcon: Fast-Fourier Lattice-based Compact Signatures over NTRU</title>
            <author initials="P." surname="Fouque" fullname="Pierre-Alain Fouque">
              <organization/>
            </author>
            <author initials="J." surname="Hoffstein" fullname="Jeffrey Hoffstein">
              <organization/>
            </author>
            <author initials="P." surname="Kirchner" fullname="Paul Kirchner">
              <organization/>
            </author>
            <author initials="V." surname="Lyubashevsky" fullname="Vadim Lyubashevsky">
              <organization/>
            </author>
            <author initials="T." surname="Pornin" fullname="Thomas Pornin">
              <organization/>
            </author>
            <author initials="T." surname="Prest" fullname="Thomas Prest">
              <organization/>
            </author>
            <author initials="T." surname="Ricosset" fullname="Thomas Ricosset">
              <organization/>
            </author>
            <author initials="G." surname="Seiler" fullname="Gregor Seiler">
              <organization/>
            </author>
            <author initials="W." surname="Whyte" fullname="William Whyte">
              <organization/>
            </author>
            <author initials="Z." surname="Zhang" fullname="Zhenfei Zhang">
              <organization/>
            </author>
            <date year="2020" month="January" day="10"/>
          </front>
        </reference>
        <reference anchor="CHROMIUM" target="https://chromium.googlesource.com/chromium/src/+/main/components/component_updater/README.md">
          <front>
            <title>Component Updater</title>
            <author>
              <organization>Chromium</organization>
            </author>
            <date year="2022" month="March" day="03"/>
          </front>
        </reference>
        <reference anchor="FIREFOX" target="https://wiki.mozilla.org/Firefox/RemoteSettings">
          <front>
            <title>Firefox Remote Settings</title>
            <author>
              <organization>Mozilla</organization>
            </author>
            <date year="2022" month="August" day="20"/>
          </front>
        </reference>
        <reference anchor="ALPACA" target="https://www.usenix.org/conference/usenixsecurity21/presentation/brinkmann">
          <front>
            <title>ALPACA: Application Layer Protocol Confusion - Analyzing and Mitigating Cracks in TLS Authentication</title>
            <author initials="M." surname="Brinkmann" fullname="Marcus Brinkmann">
              <organization/>
            </author>
            <author initials="C." surname="Dresen" fullname="Christian Dresen">
              <organization/>
            </author>
            <author initials="R." surname="Merget" fullname="Robert Merget">
              <organization/>
            </author>
            <author initials="D." surname="Poddebniak" fullname="Damian Poddebniak">
              <organization/>
            </author>
            <author initials="J." surname="Müller" fullname="Jens Müller">
              <organization/>
            </author>
            <author initials="J." surname="Somorovsky" fullname="Juraj Somorovsky">
              <organization/>
            </author>
            <author initials="J." surname="Schwenk" fullname="Jörg Schwenk">
              <organization/>
            </author>
            <author initials="S." surname="Schinzel" fullname="Sebastian Schinzel">
              <organization/>
            </author>
            <date year="2021" month="August"/>
          </front>
        </reference>
        <reference anchor="CRLite">
          <front>
            <title>CRLite: A Scalable System for Pushing All TLS Revocations to All Browsers</title>
            <author fullname="James Larisch" initials="J." surname="Larisch">
              <organization/>
            </author>
            <author fullname="David Choffnes" initials="D." surname="Choffnes">
              <organization/>
            </author>
            <author fullname="Dave Levin" initials="D." surname="Levin">
              <organization/>
            </author>
            <author fullname="Bruce M. Maggs" initials="B." surname="Maggs">
              <organization/>
            </author>
            <author fullname="Alan Mislove" initials="A." surname="Mislove">
              <organization/>
            </author>
            <author fullname="Christo Wilson" initials="C." surname="Wilson">
              <organization/>
            </author>
            <date month="May" year="2017"/>
          </front>
          <seriesInfo name="2017 IEEE Symposium on Security and Privacy" value="(SP)"/>
          <seriesInfo name="DOI" value="10.1109/sp.2017.17"/>
          <refcontent>IEEE</refcontent>
        </reference>
        <reference anchor="CRLSets" target="https://www.chromium.org/Home/chromium-security/crlsets/">
          <front>
            <title>CRLSets</title>
            <author>
              <organization>Chromium</organization>
            </author>
            <date year="2022" month="August" day="04"/>
          </front>
        </reference>
        <reference anchor="LetsEncrypt" target="https://letsencrypt.org/stats/">
          <front>
            <title>Let's Encrypt Stats</title>
            <author>
              <organization>Let's Encrypt</organization>
            </author>
            <date year="2023" month="March" day="07"/>
          </front>
        </reference>
        <reference anchor="MerkleTown" target="https://ct.cloudflare.com/">
          <front>
            <title>Merkle Town</title>
            <author>
              <organization>Cloudflare, Inc.</organization>
            </author>
            <date year="2023" month="March" day="07"/>
          </front>
        </reference>
        <reference anchor="SharedFactors" target="https://bora.uib.no/bora-xmlui/bitstream/handle/11250/3001128/Masters_thesis__for_University_of_Bergen.pdf">
          <front>
            <title>Finding shared RSA factors in the Certificate Transparency logs</title>
            <author initials="H. F." surname="Våge" fullname="Henry Faltin Våge">
              <organization/>
            </author>
            <author>
              <organization>University of Bergen</organization>
            </author>
            <date year="2022" month="May" day="13"/>
          </front>
        </reference>
        <reference anchor="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="RFC6962">
          <front>
            <title>Certificate Transparency</title>
            <author fullname="B. Laurie" initials="B." surname="Laurie"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="E. Kasper" initials="E." surname="Kasper"/>
            <date month="June" year="2013"/>
            <abstract>
              <t>This document describes an experimental protocol for publicly logging the existence of Transport Layer Security (TLS) certificates as they are issued or observed, in a manner that allows anyone to audit certificate authority (CA) activity and notice the issuance of suspect certificates as well as to audit the certificate logs themselves. The intent is that eventually clients would refuse to honor certificates that do not appear in a log, effectively forcing CAs to add all issued certificates to the logs.</t>
              <t>Logs are network services that implement the protocol operations for submissions and queries that are defined in this document.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6962"/>
          <seriesInfo name="DOI" value="10.17487/RFC6962"/>
        </reference>
        <reference anchor="RFC6066">
          <front>
            <title>Transport Layer Security (TLS) Extensions: Extension Definitions</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <date month="January" year="2011"/>
            <abstract>
              <t>This document provides specifications for existing TLS extensions. It is a companion document for RFC 5246, "The Transport Layer Security (TLS) Protocol Version 1.2". The extensions specified are server_name, max_fragment_length, client_certificate_url, trusted_ca_keys, truncated_hmac, and status_request. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6066"/>
          <seriesInfo name="DOI" value="10.17487/RFC6066"/>
        </reference>
        <reference anchor="RFC6960">
          <front>
            <title>X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP</title>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="M. Myers" initials="M." surname="Myers"/>
            <author fullname="R. Ankney" initials="R." surname="Ankney"/>
            <author fullname="A. Malpani" initials="A." surname="Malpani"/>
            <author fullname="S. Galperin" initials="S." surname="Galperin"/>
            <author fullname="C. Adams" initials="C." surname="Adams"/>
            <date month="June" year="2013"/>
            <abstract>
              <t>This document specifies a protocol useful in determining the current status of a digital certificate without requiring Certificate Revocation Lists (CRLs). Additional mechanisms addressing PKIX operational requirements are specified in separate documents. This document obsoletes RFCs 2560 and 6277. It also updates RFC 5912.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6960"/>
          <seriesInfo name="DOI" value="10.17487/RFC6960"/>
        </reference>
        <reference anchor="I-D.draft-ietf-acme-ari">
          <front>
            <title>Automated Certificate Management Environment (ACME) Renewal Information (ARI) Extension</title>
            <author fullname="Aaron Gable" initials="A." surname="Gable">
              <organization>Internet Security Research Group</organization>
            </author>
            <date day="8" month="February" year="2024"/>
            <abstract>
              <t>   This document specifies how an ACME server may provide suggestions to
   ACME clients as to when they should attempt to renew their
   certificates.  This allows servers to mitigate load spikes, and
   ensures clients do not make false assumptions about appropriate
   certificate renewal periods.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-acme-ari-03"/>
        </reference>
        <reference anchor="I-D.draft-ietf-tls-batch-signing">
          <front>
            <title>Batch Signing for TLS</title>
            <author fullname="David Benjamin" initials="D." surname="Benjamin">
              <organization>Google LLC</organization>
            </author>
            <date day="13" month="January" year="2020"/>
            <abstract>
              <t>   This document describes a mechanism for batch signing in TLS.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-batch-signing-00"/>
        </reference>
        <reference anchor="RFC8879">
          <front>
            <title>TLS Certificate Compression</title>
            <author fullname="A. Ghedini" initials="A." surname="Ghedini"/>
            <author fullname="V. Vasiliev" initials="V." surname="Vasiliev"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>In TLS handshakes, certificate chains often take up the majority of the bytes transmitted.</t>
              <t>This document describes how certificate chains can be compressed to reduce the amount of data transmitted and avoid some round trips.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8879"/>
          <seriesInfo name="DOI" value="10.17487/RFC8879"/>
        </reference>
        <reference anchor="I-D.draft-ietf-tls-esni">
          <front>
            <title>TLS Encrypted Client Hello</title>
            <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
              <organization>Windy Hill Systems, LLC</organization>
            </author>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
              <organization>Cryptography Consulting LLC</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="4" month="March" year="2024"/>
            <abstract>
              <t>   This document describes a mechanism in Transport Layer Security (TLS)
   for encrypting a ClientHello message under a server public key.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Source for this draft and an issue tracker can be found at
   https://github.com/tlswg/draft-ietf-tls-esni
   (https://github.com/tlswg/draft-ietf-tls-esni).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-esni-18"/>
        </reference>
        <reference anchor="RFC6973">
          <front>
            <title>Privacy Considerations for Internet Protocols</title>
            <author fullname="A. Cooper" initials="A." surname="Cooper"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="J. Peterson" initials="J." surname="Peterson"/>
            <author fullname="J. Morris" initials="J." surname="Morris"/>
            <author fullname="M. Hansen" initials="M." surname="Hansen"/>
            <author fullname="R. Smith" initials="R." surname="Smith"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document offers guidance for developing privacy considerations for inclusion in protocol specifications. It aims to make designers, implementers, and users of Internet protocols aware of privacy-related design choices. It suggests that whether any individual RFC warrants a specific privacy considerations section will depend on the document's content.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6973"/>
          <seriesInfo name="DOI" value="10.17487/RFC6973"/>
        </reference>
      </references>
    </references>
    <?line 1221?>

<section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>This document stands on the shoulders of giants and builds upon decades of work in TLS authentication and X.509. The authors would like to thank all those who have contributed over the history of these protocols.</t>
      <t>The authors additionally thank Bob Beck, Ryan Dickson, Nick Harper, Dennis Jackson, Ryan Sleevi, and Emily Stark for many valuable discussions and insights which led to this document. We wish to thank Mia Celeste in particular, whose implementation of an earlier draft revealed several pitfalls.</t>
    </section>
    <section numbered="false" anchor="change-log">
      <name>Change log</name>
      <ul empty="true">
        <li>
          <t><strong>RFC Editor's Note:</strong> Please remove this section prior to publication of a
final version of this document.</t>
        </li>
      </ul>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-00">
        <name>Since draft-davidben-tls-merkle-tree-certs-00</name>
        <ul spacing="normal">
          <li>
            <t>Simpify hashing by removing the internal padding to align with block size. #72</t>
          </li>
          <li>
            <t>Avoid the temptation of floating points. #66</t>
          </li>
          <li>
            <t>Require <tt>lifetime</tt> to be a multiple of <tt>batch_duration</tt>. #65</t>
          </li>
          <li>
            <t>Rename window to validity window. #21</t>
          </li>
          <li>
            <t>Split Assertion into Assertion and AbridgedAssertion. The latter is used in the Merkle Tree and HTTP interface. It replaces <tt>subject_info</tt> by a hash, to save space by not serving large post-quantum public keys. The original Assertion is used everywhere else, including BikeshedCertificate. #6</t>
          </li>
          <li>
            <t>Add proper context to every node in the Merkle tree. #32</t>
          </li>
          <li>
            <t>Clarify we use a single <tt>CertificateEntry</tt>. #11</t>
          </li>
          <li>
            <t>Clarify we use POSIX time. #1</t>
          </li>
          <li>
            <t>Miscellaneous changes.</t>
          </li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
g/hAHMf1nxY5uxdm1LsVbYIrkqSm+UxsRVX9QfvKmDA/CjzEclhadcVJHKJq
81z4iLrUlB+IXsJTLCt8VrENCbUI7YfNqbJo1yswo1YjWRrnHcmNxBHoJFHY
AM/xTTXJvnHTD4Ps8BI43PNi+qHBiLN38I/sVV6vUFd77kqgXdnvc3lIrx4t
HIiSbPF4scQ0o6M2r9nMt5TgxzWR4tCPppGScQ1Gumurr4VaI6Lz/s5Ro8MA
jbcFGn8WeBNTN8oFAcnXbspVfMCgrbxeFFgyEMPBJRqZRB1iXdmqaJErkFSv
pcRA1OxHkK+zL7/E7iwvZihHAd/CLpbPvgS0W2ByOQqslToXQpISxu+qd28a
lgajzSlaB015NqjM3HIUZQoqAkHB7DNQN2YTV1JA+5K4M4V1UjuqZri93b/s
IQyyXGHADJpOkV6RxQTWqlYJikOhyCHEECnShUUimdlNFhUgA+ZqY033XRxx
T6L5OM8sQHy+qFig564A8P6jR/j+obDqsXq4x6oGm56j82xMKuvJbM1ccYzf
P+TvqXuWhtFWqXyO7ZJ3aKugv7Q2FgjzAMOfiH57Ygnds4ZQ6ojehiD3vkhQ
/DhOyiMntA8iSHoxUrgRW6tResupURwlKF2Kb4WN7D22dGMa5sX52K4oyokW
iph8yaK1W1CSPoWmFf3tARCidIAzjZLVZAdSgHAsWNzMJftHNMMuaXT4QHKp
M8uFk5A70SPGabk6PL+dnZ5PDt4fvf6TtHK9TS+APj11i0VeOqpaw/Huo63/
H/i9f0kXSwEA

-->

</rfc>
