<?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.19 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-davidben-tls-merkle-tree-certs-03" category="exp" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.0 -->
  <front>
    <title>Merkle Tree Certificates for TLS</title>
    <seriesInfo name="Internet-Draft" value="draft-davidben-tls-merkle-tree-certs-03"/>
    <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="September" day="05"/>
    <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="certificate-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>A trust anchor identifier (see <xref section="3" sectionFormat="of" target="I-D.beck-tls-trust-anchor-ids"/>) that identifies the CA. See <xref target="identifying"/> for details.</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="identifying">
        <name>Identifying CAs and Batches</name>
        <t>A Merkle Tree CA's <tt>issuer_id</tt> is a trust anchor identifier, defined in <xref section="3" sectionFormat="of" target="I-D.beck-tls-trust-anchor-ids"/>. However, unlike an X.509 CA, the entire OID arc rooted at the identifier is associated with the CA. OIDs under this arc are used to identify batches below.</t>
        <t>An individual batch from a Merkle Tree CA also has an associated trust anchor identifier. It is determined by appending the batch number to the CA's <tt>issuer_id</tt>.</t>
        <t>For example, a Merkle Tree CA may have an <tt>issuer_id</tt> of <tt>32473.1</tt>, in the ASCII representation. The batch with batch number 42 would then have a trust anchor identifier of <tt>32473.1.42</tt>.</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>[[TODO: A subscriber has no way to know when a certificate expires. We need to define a mandatory expiration certificate property, or do #83, which, depending on how it's done could avoid that.]]</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[
/* See Section 4.1 of draft-beck-tls-trust-anchor-ids */
opaque TrustAnchorIdentifier<1..2^8-1>;

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

struct {
    Assertion assertion;
    Proof proof;
} BikeshedCertificate;
]]></artwork>
          <t>A proof's <tt>trust_anchor</tt> field is a trust anchor identifier (see <xref section="3" sectionFormat="of" target="I-D.beck-tls-trust-anchor-ids"/> and <xref section="4.1" sectionFormat="of" target="I-D.beck-tls-trust-anchor-ids"/>), which determines the proof's type and issuer. It is analogous to an X.509 trust anchor's subject name. When the issuer is a Merkle Tree CA, the <tt>trust_anchor</tt> is the containing batch's trust anchor identifier, as described in <xref target="identifying"/>.</t>
          <t>The <tt>proof_data</tt> is a byte string, opaque to the subscriber, in some format agreed upon by the proof issuer and relying party. If the issuer is a Merkle Tree CA, as defined in this document, the <tt>proof_data</tt> contains a MerkleTreeProofSHA256, described below. Future mechanisms using the BikeshedCertificate may define other formats.</t>
          <artwork><![CDATA[
opaque HashValueSHA256[32];

struct {
    uint64 index;
    HashValueSHA256 path<0..2^16-1>;
} MerkleTreeProofSHA256;
]]></artwork>
          <t>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.</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>
        <t>Each batch in the relying party's validity window is a trust anchor for purposes of certificate verification (see <xref target="verifying"/>) and certificate negotiation (see <xref target="certificate-negotiation"/>).</t>
      </section>
      <section anchor="verifying">
        <name>Certificate Verification</name>
        <t>This section describes the verification process for a BikeshedCertificate. It describes error conditions 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>
        <t>When a subscriber presents a BikeshedCertificate, the relying party runs the following procedure:</t>
        <ol spacing="normal" type="1"><li>
            <t>Determines if <tt>trust_anchor</tt> corresponds to a supported trust anchor, and the type of that trust anchor. If <tt>trust_anchor</tt> is unrecognized, the relying party rejects the certificate with an <tt>unknown_ca</tt> error.</t>
          </li>
          <li>
            <t>Run the verification subroutine corresponding to that trust anchor, defined below.</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>
        <t>Step 2 in the above procedure runs a trust-anchor-specific verification subroutine. This subroutine is determined by the type of trust anchor. Each mechanism using the BikeshedCertificate format MUST define a verification subroutine.</t>
        <t>For a Merkle Tree trust anchor, the trust anchor will identify a batch in the relying party's validity window. (See <xref target="identifying"/> and <xref target="relying-parties"/>.) The batch's verification subroutine is defined below:</t>
        <ol spacing="normal" type="1"><li>
            <t>Compute the batch's expiration time, 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 batch's tree head in the relying party's saved validity window (see <xref target="relying-parties"/>), abort this procedure with a <tt>bad_certificate</tt> error.</t>
          </li>
          <li>
            <t>If all the preceding checks succeed, the Merkle Tree certificate verification subroutine completes successfully.</t>
          </li>
        </ol>
      </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 discussion. #13 ]]</t>
      <t><xref section="6" sectionFormat="of" target="I-D.draft-beck-tls-trust-anchor-ids"/> defines the bulk of what's needed. The missing parts are:</t>
      <ul spacing="normal">
        <li>
          <t>Some way to specify that the client supports BikeshedCertificate. At minimum a separate MIME type, but it likely needs to be known at order creation.</t>
        </li>
        <li>
          <t>Some way to accommodate MTC's long issuance time. ACME has the "processing" state, and the Retry-After header can tell the subscriber when to query again. But the fallback certificate will issue much faster, so they cannot be issued together in the same ACME order, as <xref target="I-D.draft-beck-tls-trust-anchor-ids"/> currently does.</t>
        </li>
        <li>
          <t>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>
        </li>
      </ul>
      <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="certificate-negotiation">
        <name>Certificate Negotiation</name>
        <t>Merkle Tree certificates will only be accepted in up-to-date relying parties, and require a negotiation mechanism to use. Merkle Tree certificate implementations SHOULD use the <tt>trust_anchors</tt> extension <xref target="I-D.draft-beck-tls-trust-anchor-ids"/> as described below:</t>
        <t>For each Merkle Tree CA trusted by the relying party, the batches in the validity window each determine a trust anchor, as described in <xref target="relying-parties"/>. The trust anchor's identifier is the batch identifier, as described in <xref target="identifying"/>. Future mechanisms using the BikeshedCertificate format (see <xref target="proofs"/>) MUST similarly define how relying parties determine trust anchor identifiers.</t>
        <t>As even a single validity window results in <tt>validity_window_size</tt> trust anchors, sending all trust anchors in the <tt>trust_anchors</tt> extension would be prohitively large in most cases. Instead, relying parties SHOULD use the retry mechanism described in <xref section="4.3" sectionFormat="of" target="I-D.draft-beck-tls-trust-anchor-ids"/> and the DNS hint described in <xref section="5" sectionFormat="of" target="I-D.draft-beck-tls-trust-anchor-ids"/>.</t>
        <t>[[TODO: We could reduce the reliance on DNS by adding https://github.com/davidben/tls-trust-expressions/issues/62, either in this draft or the main trust anchor IDs draft.]]</t>
        <t>The subscriber's list of candidate certification paths (see <xref section="3.3" sectionFormat="of" target="I-D.beck-tls-trust-anchor-ids"/>) is extended to carry both X.509 and BikeshedCertificate credentials. The two types of credentials MAY appear in any relative preference order, based on the subscriber's policies. Like an X.509 credential, a BikeshedCertificate credential also has a CertificatePropertyList (see <xref section="3.1" sectionFormat="of" target="I-D.beck-tls-trust-anchor-ids"/>).</t>
        <t>For each of the subscriber's BikeshedCertificate credentials, the corresponding trust anchor identifier is the <tt>trust_anchor</tt> field in the BikeshedCertificate structure. This differs from X.509 credentials, which require an out-of-band value in the CertificatePropertyList. It is an error for a BikeshedCertificate credential's CertificatePropertyList to contain the <tt>trust_anchor_identifier</tt> property.</t>
        <t>The subscriber then selects certificates as described in <xref section="4.2" sectionFormat="of" target="I-D.draft-beck-tls-trust-anchor-ids"/>. In doing so, it SHOULD incorporate trust anchor negotiation and certificate type negotiation (see <xref target="tls-certificate-type"/>) into the selection criteria for BikeshedCertificate-based credentials.</t>
        <t>[[TODO: Certificate type negotiation doesn't work right for client certificates. See <xref target="cert-type-problems"/>]]</t>
      </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="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>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>The Privacy Considerations described in <xref section="9" sectionFormat="of" target="I-D.beck-tls-trust-anchor-ids"/> apply to its use with Merkle Tree Certificates.</t>
      <t>In particular, relying parties that share a transparency service will fetch the same stream of updates. However, updates may reach different users at different times, resulting in some variation across users. This variation may contribute to a fingerprinting attack <xref target="RFC6973"/>. If the Merkle Tree CA trust anchors are sent unconditionally in <tt>trust_anchors</tt>, this variation will be passively observable. If they are sent conditionally, e.g. with the DNS-mechanism, the trust anchor list will require active probing.</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, certificate negotiation allows 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 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>
      </ul>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="SHS">
          <front>
            <title>Secure hash standard</title>
            <author>
              <organization/>
            </author>
            <date year="2015"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.180-4"/>
          <refcontent>National Institute of Standards and Technology (U.S.)</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="I-D.beck-tls-trust-anchor-ids">
          <front>
            <title>TLS Trust Anchor Identifiers</title>
            <author fullname="Bob Beck" initials="B." surname="Beck">
              <organization>Google LLC</organization>
            </author>
            <author fullname="David Benjamin" initials="D." surname="Benjamin">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Devon O'Brien" initials="D." surname="O'Brien">
              <organization>Google LLC</organization>
            </author>
            <date day="5" month="September" year="2024"/>
            <abstract>
              <t>   This document defines the TLS Trust Anchors extension, a mechanism
   for relying parties and subscribers to convey trusted certification
   authorities.  It describes individual certification authorities more
   succinctly than the TLS Certificate Authorities extension.

   Additionally, to support TLS clients with many trusted certification
   authorities, it supports a mode where servers describe their
   available certification paths and the client selects from them.
   Servers may describe this during connection setup, or in DNS for
   lower latency.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-beck-tls-trust-anchor-ids-01"/>
        </reference>
        <reference anchor="I-D.draft-beck-tls-trust-anchor-ids">
          <front>
            <title>TLS Trust Anchor Identifiers</title>
            <author fullname="Bob Beck" initials="B." surname="Beck">
              <organization>Google LLC</organization>
            </author>
            <author fullname="David Benjamin" initials="D." surname="Benjamin">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Devon O'Brien" initials="D." surname="O'Brien">
              <organization>Google LLC</organization>
            </author>
            <date day="5" month="September" year="2024"/>
            <abstract>
              <t>   This document defines the TLS Trust Anchors extension, a mechanism
   for relying parties and subscribers to convey trusted certification
   authorities.  It describes individual certification authorities more
   succinctly than the TLS Certificate Authorities extension.

   Additionally, to support TLS clients with many trusted certification
   authorities, it supports a mode where servers describe their
   available certification paths and the client selects from them.
   Servers may describe this during connection setup, or in DNS for
   lower latency.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-beck-tls-trust-anchor-ids-01"/>
        </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="23" month="August" 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-05"/>
        </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="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>
        <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>
      </references>
    </references>
    <?line 1113?>

<section anchor="examples">
      <name>Examples</name>
      <section anchor="abridgedassertions">
        <name>(Abridged)Assertions</name>
        <t>The following is an Assertion claiming <tt>example.com</tt> for
a TLS subject with Ed25519 public key
<tt>c5d2080fa9a489a226b58166dad00be8120931a769c9c6f1f8eefafc38af9065</tt>.</t>
        <artwork><![CDATA[
00000024 08070020 c5d2080f a9a489a2 26b58166 dad00be8 120931a7 69c9c6f1
f8eefafc 38af9065 00130000 000f000d 000b6578 616d706c 652e636f 6d
]]></artwork>
        <t>The corresponding AbridgedAssertion:</t>
        <artwork><![CDATA[
00000022 0807d8e2 c44fc82e 175e5698 b1c25324 6c9a996f c37bad29 fd59b6aa
838b0a93 0b000013 0000000f 000d000b 6578616d 706c652e 636f6d
]]></artwork>
        <t>Next, we have an Assertion claiming <tt>*.example.com</tt>, <tt>192.0.2.37</tt>,
<tt>192.0.12.0</tt>, <tt>198.51.100.60</tt> and <tt>203.0.113.0</tt> for
a TLS subject with RSASSA-PSS public key with modulus <tt>264851…51544459</tt>
and exponent 65537.</t>
        <artwork><![CDATA[
00000112 0804010e 3082010a 02820101 00d1cd9c d613c050 929e6418 14b4957c
40f30d07 0927f653 bde7054c 06d53a89 36228b70 72fad4db a186c379 7e00300b
a5b6de8e 7ab3fed4 cb5a537e 7674916a 130a0435 664428a9 7f1983b7 e028b9ab
f24700de 1d6478c9 ae361176 daa64c2f 89b42ec0 270add68 85323401 35d22724
c7bd8f65 075b25b8 96a89ab8 2a2b2194 49b029b8 97e130dc dc96fce1 37351f2b
7a28f1d0 7b710afb 2c796211 d9ba1feb 43d30810 63f19afd b7ba2ab0 e19fd008
e719491d d10ed235 5d4790f0 3039e3a3 31aa2644 2d656716 ebe710f2 4260599a
2d082db1 eccfaa8f f51cfb8e 3dfca0eb e1af59c2 f007b35e 02b0582f 50090018
b78a6b06 c0188ab3 514d60d6 6243e017 8b020301 00010029 0001000f 000d000b
6578616d 706c652e 636f6d00 02001200 10c00002 25c0000c 00c63364 3ccb0071
00
]]></artwork>
        <t>The corresponding AbridgedAssertion:</t>
        <artwork><![CDATA[
00000022 08049a04 087a4d52 033a0a20 04333359 ccf29703 25684c5f a96f1ca1
35cb2ab1 f2670029 0001000f 000d000b 6578616d 706c652e 636f6d00 02001200
10c00002 25c0000c 00c63364 3ccb0071 00
]]></artwork>
      </section>
    </section>
    <section anchor="cert-type-problems">
      <name>TLS Certificate Type Negotiation Challenges</name>
      <t>[[TODO: We may need a new TLS 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="I-D.beck-tls-trust-anchor-ids"/>). 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 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 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>
          <li>
            <t>Replace the negotiation mechanism with TLS Trust Anchor Identifiers.</t>
          </li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
90dS49svDv//A64GqmluQgEA

-->

</rfc>
