<?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.24 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-davidben-tls-merkle-tree-certs-04" category="exp" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.0 -->
  <front>
    <title>Merkle Tree Certificates for TLS</title>
    <seriesInfo name="Internet-Draft" value="draft-davidben-tls-merkle-tree-certs-04"/>
    <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="2025" month="March" day="03"/>
    <area>Security</area>
    <workgroup>Transport Layer Security</workgroup>
    <abstract>
      <?line 183?>

<t>This document describes Merkle Tree certificates, a new certificate type for use with TLS. A relying party that regularly fetches information from trusted mirrors 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 187?>

<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, ML-DSA-65 <xref target="FIPS204"/> uses 1,952 bytes per public key and 3,309 bytes per signature. A TLS Certificate message with, say, four ML-DSA-65 signatures (two X.509 signatures and two SCTs) and one intermediate CA's ML-DSA-65 public key would total 15,188 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 TLS 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 authenticating party is expected to use an automated issuance protocol, such as ACME <xref target="RFC8555"/>.</t>
        </li>
        <li>
          <t>Certificates are issued in batches after a significant processing delay of, in the recommended parameters (<xref target="parameters"/>), about an hour. Authenticating parties that need a certificate issued quickly are expected to use a different mechanism.</t>
        </li>
        <li>
          <t>Certificates are only usable with relying parties that have, via a background update process, obtained out-of-band assurance that a batch of certificates is publicly accessible. See <xref target="transparency-ecosystem"/>.</t>
        </li>
      </ul>
      <t>To support the reduced scope, this document also describes a certificate negotiation mechanism. Authenticating parties 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>Authenticating party:</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 authenticating party, and publishes logs of all certificates.</t>
          </dd>
          <dt>Relying party:</dt>
          <dd>
            <t>The party whom the authenticating party presents its identity to. In TLS, this is the side receiving the Certificate and CertificateVerify message.</t>
          </dd>
          <dt>Mirror:</dt>
          <dd>
            <t>A service that mirrors the issued certificates for others to monitor.</t>
          </dd>
          <dt>Monitor:</dt>
          <dd>
            <t>A party who monitors CAs and/or mirrors 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 occurs in three stages.</t>
      <t>First, the CA issues a certificate to the authenticating party:</t>
      <ol spacing="normal" type="1"><li>
          <t>The authenticating party 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 authenticating party. See <xref target="proofs"/>.</t>
        </li>
      </ol>
      <t>Next, tree heads flow to the relying party, after being durably and consistently logged. This occurs periodically in the background, unconnected from uses of individual certificates:</t>
      <ol spacing="normal" type="1" start="4"><li>
          <t>Mirrors periodically download the abridged assertions, recreate the Merkle Tree, and validate the window signature. They mirror the contents for monitors to observe. See <xref target="mirrors"/>.</t>
        </li>
        <li>
          <t>The relying party periodically obtains an updated validity window, after the window's contents have been logged in mirrors that it trusts. See <xref target="relying-party-policy"/>.</t>
        </li>
      </ol>
      <t>Once the relying party has a validity window with the new tree head, the certificate is usable in an application protocol such as TLS:</t>
      <ol spacing="normal" type="1" start="6"><li>
          <t>The relying party communicates its currently saved validity window to the authenticating party.</t>
        </li>
        <li>
          <t>If the relying party’s validity window contains the authenticating party’s certificate, the authenticating party negotiates this protocol and sends the Merkle Tree certificate. See <xref target="certificate-negotiation"/> for details. If there is no match, the authenticating party 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 the three stages combined.</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="416" width="592" viewBox="0 0 592 416" 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 384,256 L 384,272" fill="none" stroke="black"/>
              <path d="M 408,336 L 408,400" fill="none" stroke="black"/>
              <path d="M 456,96 L 456,184" fill="none" stroke="black"/>
              <path d="M 456,272 L 456,328" fill="none" stroke="black"/>
              <path d="M 512,336 L 512,400" 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 568,208 L 568,272" 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 552,208 L 568,208" 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 384,272 L 568,272" fill="none" stroke="black"/>
              <path d="M 408,336 L 512,336" fill="none" stroke="black"/>
              <path d="M 408,400 L 512,400" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="464,328 452,322.4 452,333.6" fill="black" transform="rotate(90,456,328)"/>
              <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="80" y="68">Auth.</text>
                <text x="128" y="68">Party</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="464" y="228">Mirrors</text>
                <text x="476" y="308">4.</text>
                <text x="520" y="308">publish</text>
                <text x="572" y="308">tree</text>
                <text x="460" y="372">Monitors</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
     +--------------+  1. issuance request  +-------------------------+
     |              +---------------------->|                         |
     | Auth. Party  |                       | 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  |<---------------------+        Mirrors       | |
    |                 |                      |                      | |
    +-----------------+                      +-+--------------------+ |
                                               +--------+-------------+
                                                        |
                                                        | 4. publish 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 an authenticating party, 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 authenticating parties 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="RFC9525"/>.</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 an authenticating party.</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.ietf-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 key. For convenience, we use TLS' format, and represent the public key as a <tt>TLSSubjectInfo</tt>, see <xref target="tls-subject-info"/>. 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; Authenticating Party -&gt; RP flow does not depend on the signature, only the CA -&gt; Mirror -&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 authenticating party.</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.ietf-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, called a <tt>batch_id</tt>. It is determined by appending the batch number, as an OID component, 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 <tt>batch_id</tt> 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 an authenticating party 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;
    TrustAnchorIdentifier batch_id;
    uint64 index;
    uint8 level;
} HashEmptyInput;

struct {
    uint8 distinguisher = 1;
    TrustAnchorIdentifier batch_id;
    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;
    TrustAnchorIdentifier batch_id;
    uint64 index;
    AbridgedAssertion abridged_assertion;
} HashAssertionInput;
]]></artwork>
          <t>The <tt>batch_id</tt> is set to the batch-specific trust anchor identifier, i.e. the <tt>issuer_id</tt> with the batch number appended as described in <xref target="identifying"/>.
<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 digital signature over the following structure:</t>
          <artwork><![CDATA[
struct {
    uint8 label[32] = "Merkle Tree Crts ValidityWindow\0";
    TrustAnchorIdentifier issuer_id;
    ValidityWindow window;
} LabeledValidityWindow;
]]></artwork>
          <t>The signature algorithm used is determined by <tt>public_key.signature</tt> as described in <xref section="4.3.2" sectionFormat="of" target="RFC8446"/>. (Signatures are created without the domain separation of <xref section="4.4.3" sectionFormat="of" target="RFC8446"/>.)</t>
          <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: An authenticating party 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-ietf-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.ietf-tls-trust-anchor-ids"/> and <xref section="4.1" sectionFormat="of" target="I-D.ietf-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 a batch's <tt>batch_id</tt>, as described in <xref target="identifying"/>.</t>
          <t>The <tt>proof_data</tt> is a byte string, opaque to the authenticating party, 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 authenticating party.</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 authenticating parties 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 authenticating parties 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 mirrors, as described in <xref target="transparency-ecosystem"/>.</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 an authenticating party 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-ecosystem">
      <name>Transparency Ecosystem</name>
      <t>This section discusses how relying parties achieve transparency, via a combination of <em>mirrors</em> (<xref target="mirrors"/>), who republish information from the CA; <em>relying party policy</em> (<xref target="relying-party-policy"/>), which determines which validity windows to accept; and <em>monitors</em> (<xref target="monitors"/>), who watch for certificates of interest.</t>
      <section anchor="mirrors">
        <name>Mirrors</name>
        <t>A mirror is a service that consumes and saves information hosted by CAs (or other mirrors) and presents it to other parties in the ecosystem. Mirrors are used to ensure transparency even in the face of CA misbehavior or outage. A mirror performs the following functions:</t>
        <ul spacing="normal">
          <li>
            <t>Record all abridged assertions certified by the CA and mirror them to monitors</t>
          </li>
          <li>
            <t>Ensure all tree heads and validity windows that it records and mirrors are self-consistent</t>
          </li>
          <li>
            <t>Provide information about the latest valid validity window recorded</t>
          </li>
        </ul>
        <t>In doing so, the mirror 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, even if a CA signs conflicting information.</t>
          </li>
          <li>
            <t>All tree hashes that it reports MUST be reflected in the mirrored CA state.</t>
          </li>
        </ul>
        <t>The mirror publishes its state using the same interface as <xref target="publishing"/>.</t>
        <section anchor="updating-a-mirror">
          <name>Updating a Mirror</name>
          <t>A mirror maintains a copy of the CA's latest batch number, and batch state. Roughly once every <tt>batch_duration</tt>, it polls the HTTP interface (see <xref target="publishing"/>) from the CA, or another mirror, and runs the following steps:</t>
          <ol spacing="normal" type="1"><li>
              <t>Fetch the 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>:  </t>
              <ol spacing="normal" type="1"><li>
                  <t>If the source is the CA, or if <tt>old_latest_batch</tt> was fetched from this mirror, abort this procedure with an error.</t>
                </li>
                <li>
                  <t>Otherwise, finish this procedure without reporting an error. A mirror that combines multiple sources may observe a source mirror that is behind.</t>
                </li>
              </ol>
            </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, or 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>
      <section anchor="relying-party-policy">
        <name>Relying Party Policy</name>
        <t>In order to accept certificates from a CA that it trusts, a relying party must, in the background, obtain an up-to-date copy of the CA's validity window. In doing so, a relying party SHOULD ensure the following properties:</t>
        <dl>
          <dt>Authenticity:</dt>
          <dd>
            <t>The relying party only accepts validity windows that were certified by the CA</t>
          </dd>
          <dt>Transparency:</dt>
          <dd>
            <t>The relying party only accepts validity windows covering certificates that are published in some publicly-accessible form, so that, in particular, the subject of the certificate can notice any unauthorized certificates</t>
          </dd>
        </dl>
        <t>How the relying party does this has no direct impact on certificate issuance (<xref target="issuing-certificates"/>) or usage (<xref target="using"/>). Different relying parties can obtain validity windows from different sources or apply different policies, while supporting the same unmodified certificates and CAs. Thus this section does not prescribe particular policies or mechanisms, but provides examples and general guidance. Relying parties MAY implement policies other than those described below, and MAY incorporate entities acting in roles not described in this document.</t>
        <t>Relying parties SHOULD ensure transparency by obtaining validity windows from the CA and/or some combination of trusted mirrors. The relying party picks sources which, together, are trusted to satisfy the requirements described in <xref target="mirrors"/>. Mirrors allow the relying party to maintain transparency in the face of a misbehaving or compromised CA that may, for example, stop serving some unauthorized certificate in a batch to evade detection.</t>
        <t>A relying party might trust a combination of mirrors, and only accept a validity window once some minimum number of mirrors have consumed it. When combining multiple mirrors, the following procedure determines the latest validity window for an update:</t>
        <ol spacing="normal" type="1"><li>
            <t>Fetch the latest batch number from each mirror.</t>
          </li>
          <li>
            <t>Compute the highest batch number that satisfies the policy. For example, if requiring windows be represented in at least two mirrors, use the second-to-last batch number after sorting in ascending order.</t>
          </li>
          <li>
            <t>Fetch the validity window from each mirror that contains it.</t>
          </li>
          <li>
            <t>Check that each fetched window gives identical tree hashes. If so, accept the updated window.</t>
          </li>
        </ol>
        <t>To avoid the relying party directly contacting each mirror, this procedure can be performed with some aggregating service on behalf of the relying party, or the relying party's update service.  [[TODO: If the relying party doesn't trust the aggregator, this requires mirrors re-sign validity windows, but we still need to define that. #101]]</t>
        <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"/>. If the relying party considers the service sufficiently trusted (e.g. if the service provides the trust anchor list or certificate validation software), a mirror operated by that service could be used as a single trusted mirror.</t>
        <t>Relying parties SHOULD ensure authenticity by verifying the CA's signature on the validity window. If a relying party has an authenticated channel to some service trusted to perform this check, it MAY rely on that service to validate signatures, instead of downloading the signature itself.</t>
        <t>When fetching any of the above information, the relying party MAY use the interfaces described in <xref target="publishing"/>, or it MAY use some other application-specific channel.</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 may be a mirror or the CA itself. 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="updating-a-mirror"/>, 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 mirrors publish state over an HTTP <xref target="RFC9110"/> interface described below.</t>
      <t>CAs and any mirrors 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 mirrors that maintain 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="batch-state-availability"/> discusses service availability requirements.</t>
      <t>[[TODO: Once a batch has expired, do we allow a CA to stop publishing it? A mirror 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.ietf-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 authenticating party 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.ietf-tls-trust-anchor-ids"/> currently does.</t>
        </li>
        <li>
          <t>Use <xref target="I-D.ietf-acme-ari"/> to move the renewal logic in <xref target="rolling-renewal"/> from the authenticating party 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 authenticating party'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:
            opaque bikeshed_cert_data<1..2^24-1>;

        /* 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 authenticating party 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.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.ietf-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.ietf-tls-trust-anchor-ids"/> and the DNS hint described in <xref section="5" sectionFormat="of" target="I-D.ietf-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 authenticating party's list of candidate certification paths (see <xref section="3.3" sectionFormat="of" target="I-D.ietf-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 authenticating party's policies. Like an X.509 credential, a BikeshedCertificate credential also has a CertificatePropertyList (see <xref section="3.1" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>).</t>
        <t>For each of the authenticating party'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 authenticating party then selects certificates as described in <xref section="4.2" sectionFormat="of" target="I-D.ietf-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>Authenticating parties 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, or are unable to, fetch a sufficiently new validity window.</t>
        <t>If the pipeline of updates from the CA to mirrors 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 an authenticating party 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 trusted mirrors, then pushed to relying parties.</t>
        <t>To account for this, authenticating parties 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. Authenticating parties 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 cannot validate the certificate until they have received a validity window containing said certificate. The authenticating party 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 authenticating party 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="batch-state-availability">
        <name>Batch State Availability</name>
        <t>CAs and mirrors 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, mirrors will be unavailable to update. This will prevent relying parties from accepting new certificates, so authenticating parties 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 authenticating parties or trusted by relying parties.</t>
        <t>However, if a mirror's interface becomes unavailable, monitors may be unable to check for unauthorized certificates, if the certificates are not available in another mirror. This does compromise transparency goals. This can be partially mitigated by a combination of state being replicated in additional mirrors, a relying party requiring multiple mirrors log a batch (see <xref target="relying-party-policy"/>), or a relying party requiring a sufficiently trusted and reliable mirror log a batch.</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.ietf-tls-trust-anchor-ids"/> apply to its use with Merkle Tree Certificates.</t>
      <t>In particular, relying parties that share an update process 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="relying-party-policy"/> 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 mechanisms described in <xref target="transparency-ecosystem"/> do not prevent unauthorized certificates, but they aim to provide comparable security properties to Certificate Transparency <xref target="RFC6962"/>. Before the relying party accepts a Merkle Tree Certificate, the relying party should have assurance the certificate 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 CA issues an unauthorized Merkle Tree certificate, the certificate will be rejected by the relying party, publicly logged among the relying party's trusted mirrors, or both:</t>
          <t>The relying party will only accept the certificate if has been configured with the corresponding tree head (see <xref target="relying-parties"/>). For this to happen, the tree head must be in some validity window that satisfied the relying party's policy (see <xref target="relying-party-policy"/>), which is expected to only accept validity windows whose contents are publicly logged. For example, if the relying party requires a quorum of trusted mirrors, the certificate will be visible as long as sufficiently many trusted mirrors are correctly operated.</t>
          <t>If the certificate did not meet relying party policy because, e.g., the CA withheld publishing the certificate or mirrors could not reach the CA, the certificate may not be publicly visible. However, in that case, the relying party will not trust the corresponding tree head and thus reject the certificate.</t>
          <t>This is analogous to Certificate Transparency, but has some differences:</t>
          <t>Unlike Certificate Transparency, the mechanisms in this document do 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>
          <t>Additionally, accepted Merkle Tree certificates are expected to be immediately publicly visible, rather than after a Maximum Merge Delay (see <xref section="3" sectionFormat="of" target="RFC6962"/>). Relying party policies SHOULD require that certificates be fully mirrored before accepting a tree head. Merkle Tree certificates do not aim to support immediate issuance, as described in <xref target="deployment-considerations"/>.</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 relying party's trusted mirrors at the time of updates determines the canonical batch state for both relying parties and monitors. Certificates that are inconsistent with that view will be rejected by relying parties. If a mirror observes multiple views, the procedure in <xref target="updating-a-mirror"/> will prevent conflicting views 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, 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, when looking for unauthorized certificates that some relying party may accept, monitors SHOULD use tree heads from each of the relying party's trusted mirrors. A monitor MAY skip downloading the contents of a batch if an identical tree head was already checked from another source. Monitors MAY also monitor the CA directly, but this alone is not sufficient to avoid missing certificates if the CA misbehaves.</t>
        </section>
        <section anchor="misbehaving-mirror">
          <name>Misbehaving Mirror</name>
          <t>This document divides CA and mirror responsibilities differently from how <xref target="RFC6962"/> divides CA and Certificate Transparency log responsibilities. The previous section describes the implications of a failure to meet the log-like responsibilities of a CA, provided trusted mirrors are operating correctly.</t>
          <t>For the remainder of log-like responsibilities, a relying party's policy (see <xref target="relying-party-policy"/>) trusts its choice of mirrors to, together, ensure the validity windows it uses are consistent with what monitors observe. If untrustworthy, a malicious mirror and CA could collude to cause a relying party to accept an unauthorized certificate not visible to monitors. If the relying party requires a quorum of trusted mirrors, all or most of the mirrors must collude to succeed in this attack.</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="RFC9525">
          <front>
            <title>Service Identity in TLS</title>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
            <author fullname="R. Salz" initials="R." surname="Salz"/>
            <date month="November" 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.</t>
              <t>This document obsoletes RFC 6125.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9525"/>
          <seriesInfo name="DOI" value="10.17487/RFC9525"/>
        </reference>
        <reference anchor="I-D.ietf-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>
            <author fullname="Kyle Nekritz" initials="K." surname="Nekritz">
              <organization>Meta</organization>
            </author>
            <date day="25" month="February" year="2025"/>
            <abstract>
              <t>   This document defines the TLS Trust Anchors extension, a mechanism
   for relying parties 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-ietf-tls-trust-anchor-ids-00"/>
        </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="FIPS204" target="https://csrc.nist.gov/projects/post-quantum-cryptography">
          <front>
            <title>Module-Lattice-based Digital Signature Standard</title>
            <author>
              <organization>National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2023" month="August"/>
          </front>
          <seriesInfo name="FIPS PUB" value="204"/>
        </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 (SP)" value="pp. 539-556"/>
          <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.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="26" month="February" year="2025"/>
            <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-08"/>
        </reference>
        <reference anchor="I-D.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 1112?>

<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 00120000 000e000c 0b657861 6d706c65 2e636f6d
]]></artwork>
        <t>The corresponding AbridgedAssertion:</t>
        <artwork><![CDATA[
00000022 0807d8e2 c44fc82e 175e5698 b1c25324 6c9a996f c37bad29 fd59b6aa
838b0a93 0b000012 0000000e 000c0b65 78616d70 6c652e63 6f6d
]]></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 00010028 0001000e 000c0b65
78616d70 6c652e63 6f6d0002 00120010 c0000225 c0000c00 c633643c cb007100
]]></artwork>
        <t>The corresponding AbridgedAssertion:</t>
        <artwork><![CDATA[
00000022 08049a04 087a4d52 033a0a20 04333359 ccf29703 25684c5f a96f1ca1
35cb2ab1 f2670028 0001000e 000c0b65 78616d70 6c652e63 6f6d0002 00120010
c0000225 c0000c00 c633643c cb007100
]]></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.ietf-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 (authenticating party) 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 authenticating party 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>Elaborate on CA public key and signature format. #27</t>
          </li>
          <li>
            <t>Miscellaneous changes.</t>
          </li>
          <li>
            <t>Replace the negotiation mechanism with TLS Trust Anchor Identifiers.</t>
          </li>
          <li>
            <t>Switch terminology from "subscriber" to "authenticating party".</t>
          </li>
          <li>
            <t>Use &lt;1..2^24-1&gt; encoding for all certificate types in the CertificateEntry TLS message</t>
          </li>
          <li>
            <t>Clarify discussion and roles in transparency ecosystem</t>
          </li>
          <li>
            <t>Update references</t>
          </li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA8292XYb2ZUmfM+nOEVeiFICIAYCJGU7XUyKsmhrYItMZ3a5
bCKAOCAjBUTAEQFSTKZq9XW/Qb9AP8J/9d/17f8U/ST/ns4UA8W0q9fqXFWW
hIg44z777PHb3W53q0zKpX6p3un801Kry1xrdaLzMlkk86jUhVpkubp8e7EV
Z/M0WsGbcR4tym4c3SbxTKfdcll0V/Rxt4SPu3P4uOj297eKzWyVFEWSpeX9
Gr47O718vYVtXmf5/UulP6+30s1qpvOXWzH8+nJrnqWFTotN8VKV+UZv3b5U
o60o19FLtX2h55s8Ke+3t+6y/NN1nm3W8OtlHqXFOstL9Ta617lyb93qdANN
KvX1V5Xi8W3/AC0n6bX6A36Cv6+iZAm/wwz/NdHlopfl1/hzlM9v4OebslwX
L/f28C38KbnVPfPaHv6wN8uzu0Lvwfd7+N11Ut5sZvClWbu92rrha0tc9tLr
wLze4wZ6SVb/cO8pu9K7KVfL7a2taFPeZLDsqgvdKZWksOLbr3rqO53+FK2S
dJt+5t3efoVNVh7BDKM0+TkqYXPhlT9k2TXQztu3J/xY88KZwfzrNT3vzbPV
Vq3PD8++yxNd6VLfZmn45Gk9RsX9aqXLPJm39/ld77SnfoAV1vksisKOv4uK
2qNKzyfLbBMvYMN10PMsKv51bh9xt2mWr+CzW6LDizcXL9WrD2e9Qb836Q8P
996fXVz2Xp+dX/QGh/3uPrzy8fXJoD/afyl/HQxHL2Hs6sfe5Kj/kjqTs7p9
li64bVimUs9v0myZXd+rrjq+eN8bKJ3Osxgp+eNmqWHOF2s95/OMH2QLBfNM
5uo0eE3tfnf68XlHnURplsK7y9rzE3iuojRWr5KihN83SXGj49prr+A1Xhs6
1uq1nuWbKL9Xw/5wQL9b+lOywMAcLr/vXtIPhYZdLxKYoXnh7OLD3tnpiTo8
HO53By+pGXh0/uHi7Ee7poNB/wjeOj29uHzVG/YHh73D4cHBYDza2krMavFO
nLz5+OHdaffkMljTk5s8WwWsTzHLgO1M5/fqPFsm83v+IsqvNRxQcz6Z1ObU
gHdGvab8lvbm5dWaGqPj6C0UTGzY7Y+6g4PaKnV5lYTseay4Bsfn529rUzle
r5f6WdE+l3X7XIrNGplkL8I2kIz3gJlsir03l8P+eHjYD4c7wOH2x23DpYHg
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
R532SISDlUPh+5ZtdwaZAleh7ZxHRR2R1aaPx+4y9LeKU4t56w18LG5znpWS
20sbl5F72AZhkwGeQz0dPXTaHSB+NrApDVC1tVSjEjvsZajg+wSrRfkAsB+y
VmUY/EeWYYMYvkQZjioQUUl2g2lh+JvoOHhcqZTspvRAH2nNsPZRcBcjUSXp
hiDAGteWl5DDrYqG5QsOk4SNZGtxZ9OSu0vaWTT8Toz4vZKqtYTJU4D6Gwez
MVZAvmMoqc1+4skvhlSJn5q0lzQhTdPJqWRi8YV/13KrBdE/QF5iSk4l5XTL
+jLlJyuRULhsE9clOfbj5x92WmPv6zl5glSYVtE1g7iiAB3UhIbziksUiUmm
SZb3flavg29A0dICXhAorgepZh44PD2tbWyFS8IxxSRg8HGXD3FPnX4m/Ii2
BAKTJld4Eh/ygIwBvIt5ttZWLvFqW7JDx4uwsZANFBZbA06y9C4FrM06zrSE
8viLYhbfFPTx86AtoIVfpRGlkSawKtZASMjDnys3cEFx2C2iVpD3iayoSVbG
Ak8PD03qlaEDu2Xu5DYlRXFDHg5Rdx5hG2+yO0y07XDeBh8F5sKSoxvSk63t
lFGOjFd5aAYbsmCEZ+OSRANg89yz3Led10VWO6pkYWEGnrCrBiNBzoTVzyQw
myJ82wDROuYshBYKEYbcApCxzce09ffh0T2QFw04DU6WpNIVnCnOJqNEvAoa
E2sFDEeQa/bNSdieC/BwkE21YiUGeKiKskQJMyabpwFLPgAqF5CD5pajZtwV
qfuUMNlw3o/XJ+Vfn+PdCOsTWiHYltT8rM1gdPQ0czihxKGrsixcsHfg1fEN
KYSn6LvJG+0CmGykHeKUFSfogC8cFit6pgvQBqKVp/N7J9DPqszZM2Sz2GCs
LWmV7O4Q4CdijbdRbgxc8zwrCv5YqM89xG5QYuCkT5YA4Mq51jlILJweGZUl
8iODt3Aw8vB4mlxh1nHCMOU47tReGqbcYsWbImKGG5fhyeuoKNihwiAAInUs
WMC2PQTtw3WHMq0Nf3j1/qLr2YTKiquMnQBy84vxdS4m9Awjx4lIgcQ2OV5r
VSoFGcDHo8R0Lu+faAAjYacw33vXIhexvSeJvJC4GiGnKo0FCGwOE70FydLh
OIXuDOF65b1LE5HaCNZ96cGn3GUh7OaLhogkG/9pxgbTqao5PMhIZMcAZSgi
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
lDb80ACb0UZjWksuokmF2Pr/AbaWdzUgRgEA

-->

</rfc>
