<?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.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-davidben-tls-merkle-tree-certs-07" category="exp" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.0 -->
  <front>
    <title>Merkle Tree Certificates</title>
    <seriesInfo name="Internet-Draft" value="draft-davidben-tls-merkle-tree-certs-07"/>
    <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/>
      <address>
        <email>devon.obrien@gmail.com</email>
      </address>
    </author>
    <author initials="B. E." surname="Westerbaan" fullname="Bas Westerbaan">
      <organization>Cloudflare</organization>
      <address>
        <email>bas@cloudflare.com</email>
      </address>
    </author>
    <author initials="L." surname="Valenta" fullname="Luke Valenta">
      <organization>Cloudflare</organization>
      <address>
        <email>lvalenta@cloudflare.com</email>
      </address>
    </author>
    <author initials="F." surname="Valsorda" fullname="Filippo Valsorda">
      <organization>Geomys</organization>
      <address>
        <email>ietf@filippo.io</email>
      </address>
    </author>
    <date year="2025" month="August" day="25"/>
    <area>Security</area>
    <abstract>
      <?line 182?>

<t>This document describes Merkle Tree certificates, a new form of X.509 certificates which integrate public logging of the certificate, in the style of Certificate Transparency. The integrated design reduces logging overhead in the face of both shorter-lived certificates and large post-quantum signature algorithms, while still achieving comparable security properties to traditional X.509 and Certificate Transparency. Merkle Tree certificates additionally admit an optional signatureless optimization, which decreases the message size by avoiding signatures altogether, at the cost of only applying to up-to-date relying parties and older certificates.</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>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 186?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Authors' Note: This is an early draft of a proposal with many parts. We expect most details will change as the proposal evolves. This document has a concrete specification of these details, but this is only intended as a starting point, and to help convey the overall idea. The name of the draft says "tls" to keep continuity with earlier iterations of this work, but the protocol itself is not TLS-specific.</t>
      <t>In Public Key Infrastructures (PKIs) that use Certificate Transparency (CT) <xref target="RFC6962"/> for a public logging requirement, an authenticating party must present Signed Certificate Timestamps (SCTs) alongside certificates. CT policies often require two or more SCTs per certificate <xref target="APPLE-CT"/> <xref target="CHROME-CT"/>, each of which carries a signature. These signatures are in addition to those in the certificate chain itself.</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-44 <xref target="FIPS204"/> uses 1,312 bytes per public key and 2,420 bytes per signature. ML-DSA-65 uses 1,952 bytes per public key and 3,309 bytes per signature. Even with a directly-trusted intermediate (<xref section="7.5" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>), two SCTs and a leaf certificate signature adds 7,260 bytes of authentication overhead with ML-DSA-44 and 9,927 bytes with ML-DSA-65.</t>
      <t>This increased overhead additionally impacts CT logs themselves. Most of a log's costs scale with the total storage size of the log. Each log entry contains both a public key, and a signature from the CA. With larger public keys and signatures, the size of each log entry will grow.</t>
      <t>Additionally, as PKIs transition to shorter-lived certificates <xref target="CABF-153"/> <xref target="CABF-SC081"/>, the number of entries in the log will grow.</t>
      <t>This document introduces Merkle Tree certificates, a new form of X.509 certificate that integrates logging with certificate issuance. Each CA maintains a log of everything it issues, signing views of the log to assert it has issued the contents. The CA signature is combined with cosignatures from other parties who verify correct operation and optionally mirror the log. These signatures, together with an inclusion proof for an individual entry, constitute a certificate.</t>
      <t>This achieves the following:</t>
      <ul spacing="normal">
        <li>
          <t>Log entries do not scale with public key and signature sizes. Entries replace public keys with hashes and do not contain signatures, while preserving non-repudiability (<xref target="non-repudiation"/>).</t>
        </li>
        <li>
          <t>To bound growth, long-expired entries can be pruned from logs and mirrors without interrupting existing clients. This allows log sizes to scale by retention policies, not the lifetime of the log, even as certificate lifetimes decrease.</t>
        </li>
        <li>
          <t>After a processing delay, authenticating parties can obtain a second "signatureless" certificate for the same log entry. This second certificate is an optional size optimization that avoids the need for any signatures, assuming an up-to-date client that has some predistributed log information.</t>
        </li>
      </ul>
      <t><xref target="overview"/> gives an overview of the system. <xref target="subtrees"/> describes a Merkle Tree primitive used by this system. <xref target="issuance-logs"/> describes the log structure. Finally, <xref target="certificates"/> and <xref target="relying-parties"/> describe how to construct and consume a Merkle Tree certificate.</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>
      <t><tt>U+</tt> followed by four hexadecimal characters denotes a Unicode codepoint, to be encoded in UTF-8 <xref target="RFC3629"/>. <tt>0x</tt> followed by two hexadecimal characters denotes a byte value in the 0-255 range.</t>
      <t><tt>[start, end)</tt>, where <tt>start &lt;= end</tt>, denotes the half-open interval containing integers <tt>x</tt> such that <tt>start &lt;= x &lt; end</tt>.</t>
      <section anchor="terminology-and-roles">
        <name>Terminology and Roles</name>
        <t>This document discusses the following roles:</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>Certification authority (CA):</dt>
          <dd>
            <t>The service that issues certificates to the authenticating party, after performing some validation process on the certificate contents.</t>
          </dd>
          <dt>Relying party:</dt>
          <dd>
            <t>The party to whom the authenticating party presents its identity. In TLS, this is the side receiving the Certificate and CertificateVerify message.</t>
          </dd>
          <dt>Monitor:</dt>
          <dd>
            <t>Parties who watch logs for certificates of interest, analogous to the role in <xref section="8.2" sectionFormat="of" target="RFC9162"/>.</t>
          </dd>
          <dt>Issuance log:</dt>
          <dd>
            <t>A log, maintained by the CA, of everything issued by that CA.</t>
          </dd>
          <dt>Cosigner:</dt>
          <dd>
            <t>A service that signs views of an issuance log, to assert correct operation and other properties about the entries.</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>Checkpoint:</dt>
          <dd>
            <t>A description of the complete state of the log at some time.</t>
          </dd>
          <dt>Entry:</dt>
          <dd>
            <t>An individual element of the log, describing information which the CA has validated and certified.</t>
          </dd>
          <dt>Subtree:</dt>
          <dd>
            <t>A smaller Merkle Tree over a portion of the log, defined by an interior node of some snapshot of the log. Subtrees can be efficiently shown to be consistent with the whole log.</t>
          </dd>
          <dt>Inclusion proof:</dt>
          <dd>
            <t>A sequence of hashes that efficiently proves some entry is contained in some checkpoint or subtree.</t>
          </dd>
          <dt>Consistency proof:</dt>
          <dd>
            <t>A sequence of hashes that efficiently proves a checkpoint or subtree is contained within another checkpoint.</t>
          </dd>
          <dt>Cosignature:</dt>
          <dd>
            <t>A signature from either the CA or other cosigner, over some checkpoint or subtree.</t>
          </dd>
          <dt>Landmark:</dt>
          <dd>
            <t>One of an infrequent subset of tree sizes that can be used to predistribute trusted subtrees to relying parties for signatureless certificates.</t>
          </dd>
          <dt>Landmark subtree:</dt>
          <dd>
            <t>A subtree determined by a landmark. Landmark subtrees are common points of reference between relying parties and signatureless certificates.</t>
          </dd>
          <dt>Full certificate:</dt>
          <dd>
            <t>A certificate containing an inclusion proof to some subtree, and several cosignatures over that subtree.</t>
          </dd>
          <dt>Signatureless certificate:</dt>
          <dd>
            <t>An optimized certificate containing an inclusion proof to a landmark subtree, and no signatures.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>In Certificate Transparency, a CA first certifies information by signing it, then submits the resulting certificate (or precertificate) to logs for logging. Merkle Tree Certificates inverts this process: the CA certifies information by logging it, then submits the log to cosigners to verify log operation. A certificate is assembled from the result and proves the information is in the CA's log.</t>
      <figure anchor="fig-issuance-overview">
        <name>A diagram of the issuance architecture, detailed below</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="528" width="544" viewBox="0 0 544 528" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,272" fill="none" stroke="black"/>
              <path d="M 8,352 L 8,480" fill="none" stroke="black"/>
              <path d="M 24,480 L 24,512" fill="none" stroke="black"/>
              <path d="M 72,80 L 72,112" fill="none" stroke="black"/>
              <path d="M 128,280 L 128,320" fill="none" stroke="black"/>
              <path d="M 256,32 L 256,272" fill="none" stroke="black"/>
              <path d="M 256,352 L 256,480" fill="none" stroke="black"/>
              <path d="M 272,384 L 272,512" fill="none" stroke="black"/>
              <path d="M 296,32 L 296,272" fill="none" stroke="black"/>
              <path d="M 296,352 L 296,464" fill="none" stroke="black"/>
              <path d="M 536,32 L 536,272" fill="none" stroke="black"/>
              <path d="M 536,352 L 536,464" fill="none" stroke="black"/>
              <path d="M 8,32 L 24,32" fill="none" stroke="black"/>
              <path d="M 216,32 L 256,32" fill="none" stroke="black"/>
              <path d="M 296,32 L 312,32" fill="none" stroke="black"/>
              <path d="M 504,32 L 536,32" fill="none" stroke="black"/>
              <path d="M 224,64 L 312,64" fill="none" stroke="black"/>
              <path d="M 72,160 L 96,160" fill="none" stroke="black"/>
              <path d="M 224,176 L 312,176" fill="none" stroke="black"/>
              <path d="M 40,224 L 104,224" fill="none" stroke="black"/>
              <path d="M 8,272 L 256,272" fill="none" stroke="black"/>
              <path d="M 296,272 L 536,272" fill="none" stroke="black"/>
              <path d="M 8,352 L 24,352" fill="none" stroke="black"/>
              <path d="M 240,352 L 256,352" fill="none" stroke="black"/>
              <path d="M 296,352 L 312,352" fill="none" stroke="black"/>
              <path d="M 400,352 L 536,352" fill="none" stroke="black"/>
              <path d="M 72,384 L 96,384" fill="none" stroke="black"/>
              <path d="M 256,384 L 272,384" fill="none" stroke="black"/>
              <path d="M 240,432 L 312,432" fill="none" stroke="black"/>
              <path d="M 40,448 L 104,448" fill="none" stroke="black"/>
              <path d="M 296,464 L 536,464" fill="none" stroke="black"/>
              <path d="M 8,480 L 256,480" fill="none" stroke="black"/>
              <path d="M 24,512 L 272,512" fill="none" stroke="black"/>
              <path d="M 72,384 L 104,448" fill="none" stroke="black"/>
              <path d="M 72,160 L 104,224" fill="none" stroke="black"/>
              <path d="M 156,280 L 176,320" fill="none" stroke="black"/>
              <path d="M 40,224 L 72,160" fill="none" stroke="black"/>
              <path d="M 80,320 L 100,280" fill="none" stroke="black"/>
              <path d="M 40,448 L 72,384" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="320,176 308,170.4 308,181.6" fill="black" transform="rotate(0,312,176)"/>
              <polygon class="arrowhead" points="248,432 236,426.4 236,437.6" fill="black" transform="rotate(180,240,432)"/>
              <polygon class="arrowhead" points="232,64 220,58.4 220,69.6" fill="black" transform="rotate(180,224,64)"/>
              <polygon class="arrowhead" points="184,320 172,314.4 172,325.6" fill="black" transform="rotate(63.43494882292201,176,320)"/>
              <polygon class="arrowhead" points="136,320 124,314.4 124,325.6" fill="black" transform="rotate(90,128,320)"/>
              <polygon class="arrowhead" points="88,320 76,314.4 76,325.6" fill="black" transform="rotate(116.56505117707799,80,320)"/>
              <polygon class="arrowhead" points="80,112 68,106.4 68,117.6" fill="black" transform="rotate(90,72,112)"/>
              <circle cx="48" cy="240" r="6" class="closeddot" fill="black"/>
              <circle cx="48" cy="464" r="6" class="closeddot" fill="black"/>
              <circle cx="64" cy="240" r="6" class="closeddot" fill="black"/>
              <circle cx="64" cy="464" r="6" class="closeddot" fill="black"/>
              <circle cx="80" cy="240" r="6" class="closeddot" fill="black"/>
              <circle cx="80" cy="464" r="6" class="closeddot" fill="black"/>
              <circle cx="96" cy="240" r="6" class="closeddot" fill="black"/>
              <circle cx="96" cy="464" r="6" class="closeddot" fill="black"/>
              <circle cx="384" cy="208" r="6" class="closeddot" fill="black"/>
              <g class="text">
                <text x="80" y="36">Certificate</text>
                <text x="168" y="36">Authority</text>
                <text x="388" y="36">Authenticating</text>
                <text x="472" y="36">Party</text>
                <text x="36" y="68">2.</text>
                <text x="84" y="68">Validate</text>
                <text x="152" y="68">request</text>
                <text x="340" y="68">1.</text>
                <text x="384" y="68">Request</text>
                <text x="464" y="68">certificate</text>
                <text x="36" y="148">3.</text>
                <text x="64" y="148">Add</text>
                <text x="92" y="148">to</text>
                <text x="140" y="148">issuance</text>
                <text x="192" y="148">log</text>
                <text x="104" y="164">[</text>
                <text x="124" y="164">CA</text>
                <text x="164" y="164">cosign</text>
                <text x="200" y="164">]</text>
                <text x="340" y="180">5.</text>
                <text x="388" y="180">Download</text>
                <text x="476" y="180">certificates</text>
                <text x="432" y="212">tbscert</text>
                <text x="352" y="228">=</text>
                <text x="368" y="228">=</text>
                <text x="384" y="228">=</text>
                <text x="440" y="228">inclusion</text>
                <text x="504" y="228">proof</text>
                <text x="144" y="244">tbscert</text>
                <text x="208" y="244">entries</text>
                <text x="344" y="244">[</text>
                <text x="364" y="244">CA</text>
                <text x="384" y="244">]</text>
                <text x="452" y="244">cosignatures</text>
                <text x="312" y="260">[</text>
                <text x="348" y="260">mirror</text>
                <text x="384" y="260">]</text>
                <text x="212" y="308">4.</text>
                <text x="252" y="308">Submit</text>
                <text x="296" y="308">log</text>
                <text x="324" y="308">to</text>
                <text x="376" y="308">cosigners</text>
                <text x="240" y="324">for</text>
                <text x="308" y="324">cosignatures</text>
                <text x="68" y="356">Mirrors,</text>
                <text x="128" y="356">other</text>
                <text x="192" y="356">cosigners</text>
                <text x="356" y="356">Monitors</text>
                <text x="104" y="388">[</text>
                <text x="124" y="388">CA</text>
                <text x="164" y="388">cosign</text>
                <text x="200" y="388">]</text>
                <text x="104" y="404">[</text>
                <text x="140" y="404">mirror</text>
                <text x="196" y="404">cosign</text>
                <text x="232" y="404">]</text>
                <text x="340" y="436">6.</text>
                <text x="384" y="436">Monitor</text>
                <text x="428" y="436">CA</text>
                <text x="480" y="436">operation</text>
                <text x="80" y="500">...quorum</text>
                <text x="132" y="500">of</text>
                <text x="196" y="500">cosigners...</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+-- Certificate Authority -----+    +--  Authenticating Party ----+
|                              |    |                             |
|  2. Validate request     <---+----+--  1. Request certificate   |
|       |                      |    |                             |
|       |                      |    |                             |
|       V                      |    |                             |
|                              |    |                             |
|  3. Add to issuance log      |    |                             |
|       +---[ CA cosign ]      |    |                             |
|      / \                 ----+----+->  5. Download certificates |
|     /   \                    |    |                             |
|    /     \                   |    |          *  tbscert         |
|   +-------+                  |    |      = = =  inclusion proof |
|    * * * *  tbscert entries  |    |     [ CA ]  cosignatures    |
|                              |    | [ mirror ]                  |
+------------------------------+    +-----------------------------+
           /   |   \
          /    |    \    4. Submit log to cosigners
         V     V     V      for cosignatures

+-- Mirrors, other cosigners --+    +-- Monitors -----------------+
|                              |    |                             |
|       +---[ CA cosign ]      +-+  |                             |
|      / \  [ mirror cosign ]  | |  |                             |
|     /   \                    | |  |                             |
|    /     \                 <-+-+--+--  6. Monitor CA operation  |
|   +-------+                  | |  |                             |
|    * * * *                   | |  +-----------------------------+
+-+----------------------------+ |
  |  ...quorum of cosigners...   |
  +------------------------------+
]]></artwork>
        </artset>
      </figure>
      <t>Merkle Tree Certificates are issued as follows. <xref target="fig-issuance-overview"/> depicts this process.</t>
      <ol spacing="normal" type="1"><li>
          <t>The authenticating party requests a certificate, e.g. over ACME <xref target="RFC8555"/></t>
        </li>
        <li>
          <t>The CA validates each incoming issuance request, e.g. with ACME challenges. From there, the process differs.</t>
        </li>
        <li>
          <t>The CA operates an append-only <em>issuance log</em> (<xref target="issuance-logs"/>). Unlike a CT log, this log only contains entries added by the CA:  </t>
          <ol spacing="normal" type="1"><li>
              <t>The CA adds a TBSCertificateLogEntry (<xref target="log-entries"/>) to its log, describing the information it is certifying.</t>
            </li>
            <li>
              <t>The CA signs a <em>checkpoint</em>, which describes the current state of the log. A signed checkpoint certifies that the CA issued <em>every</em> entry in the Merkle Tree (<xref target="certification-authority-cosigners"/>).</t>
            </li>
            <li>
              <t>The CA additionally signs <em>subtrees</em> (<xref target="subtrees"/>) that together contain certificates added since the last checkpoint (<xref target="arbitrary-intervals"/>). This is an optimization to reduce inclusion proof sizes. A signed subtree certifies that the CA has issued <em>every</em> entry in the subtree.</t>
            </li>
          </ol>
        </li>
        <li>
          <t>The CA submits the new log state to <em>cosigners</em>. Cosigners validate the log is append-only and optionally provide additional services, such as mirroring its contents. They cosign the CA's checkpoints and subtrees.</t>
        </li>
        <li>
          <t>The CA now has enough information to construct a certificate and give it to the authenticating party. A certificate contains:  </t>
          <ul spacing="normal">
            <li>
              <t>The TBSCertificate being certified</t>
            </li>
            <li>
              <t>An inclusion proof from the TBSCertificate to some subtree</t>
            </li>
            <li>
              <t>Cosignatures from the CA and cosigners on the subtree</t>
            </li>
          </ul>
        </li>
        <li>
          <t>As in Certificate Transparency, monitors observe the issuance log to ensure the CA is operated correctly.</t>
        </li>
      </ol>
      <t>A certificate with cosignatures is known as a <em>full certificate</em>. Analogous to X.509 trust anchors and trusted CT logs, relying parties are configured with trusted cosigners (<xref target="trusted-cosigners"/>) that allow them to accept Merkle Tree certificates. The inclusion proof proves the TBSCertificate is part of some subtree, and cosignatures from trusted cosigners prove the subtree was certified by the CA and available to monitors. Where CT logs entire certificates, the issuance log's entries are smaller TBSCertificateLogEntry (<xref target="log-entries"/>) structures, which do not scale with public key or signature size.</t>
      <t>This same issuance process also produces a <em>signatureless certificate</em>. This is an optional, optimized certificate that avoids all cosignatures, including the CA signature. Signatureless certificates are available after a short period of time and usable with up-to-date relying parties.</t>
      <figure anchor="fig-signatureless-overview">
        <name>A diagram of signatureless certificate construction and usage, detailed below</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="416" width="488" viewBox="0 0 488 416" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,112" fill="none" stroke="black"/>
              <path d="M 8,192 L 8,384" fill="none" stroke="black"/>
              <path d="M 224,96 L 224,184" fill="none" stroke="black"/>
              <path d="M 272,32 L 272,112" fill="none" stroke="black"/>
              <path d="M 272,192 L 272,384" fill="none" stroke="black"/>
              <path d="M 296,48 L 296,112" fill="none" stroke="black"/>
              <path d="M 296,240 L 296,288" fill="none" stroke="black"/>
              <path d="M 296,320 L 296,368" fill="none" stroke="black"/>
              <path d="M 432,80 L 432,224" fill="none" stroke="black"/>
              <path d="M 464,48 L 464,112" fill="none" stroke="black"/>
              <path d="M 480,240 L 480,288" fill="none" stroke="black"/>
              <path d="M 480,320 L 480,368" fill="none" stroke="black"/>
              <path d="M 8,32 L 24,32" fill="none" stroke="black"/>
              <path d="M 216,32 L 272,32" fill="none" stroke="black"/>
              <path d="M 296,48 L 312,48" fill="none" stroke="black"/>
              <path d="M 448,48 L 464,48" fill="none" stroke="black"/>
              <path d="M 264,80 L 432,80" fill="none" stroke="black"/>
              <path d="M 32,96 L 72,96" fill="none" stroke="black"/>
              <path d="M 8,112 L 272,112" fill="none" stroke="black"/>
              <path d="M 296,112 L 464,112" fill="none" stroke="black"/>
              <path d="M 8,192 L 24,192" fill="none" stroke="black"/>
              <path d="M 208,192 L 272,192" fill="none" stroke="black"/>
              <path d="M 296,240 L 312,240" fill="none" stroke="black"/>
              <path d="M 440,240 L 480,240" fill="none" stroke="black"/>
              <path d="M 264,256 L 288,256" fill="none" stroke="black"/>
              <path d="M 296,288 L 480,288" fill="none" stroke="black"/>
              <path d="M 296,320 L 312,320" fill="none" stroke="black"/>
              <path d="M 432,320 L 480,320" fill="none" stroke="black"/>
              <path d="M 176,352 L 288,352" fill="none" stroke="black"/>
              <path d="M 296,368 L 480,368" fill="none" stroke="black"/>
              <path d="M 8,384 L 272,384" fill="none" stroke="black"/>
              <path d="M 52,56 L 72,96" fill="none" stroke="black"/>
              <path d="M 32,96 L 52,56" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="440,224 428,218.4 428,229.6" fill="black" transform="rotate(90,432,224)"/>
              <polygon class="arrowhead" points="296,352 284,346.4 284,357.6" fill="black" transform="rotate(0,288,352)"/>
              <polygon class="arrowhead" points="296,256 284,250.4 284,261.6" fill="black" transform="rotate(0,288,256)"/>
              <polygon class="arrowhead" points="232,184 220,178.4 220,189.6" fill="black" transform="rotate(90,224,184)"/>
              <g class="text">
                <text x="80" y="36">Certificate</text>
                <text x="168" y="36">Authority</text>
                <text x="348" y="52">Update</text>
                <text x="408" y="52">Channel</text>
                <text x="92" y="84">1.</text>
                <text x="140" y="84">Allocate</text>
                <text x="216" y="84">landmarks</text>
                <text x="44" y="148">2.</text>
                <text x="76" y="148">Make</text>
                <text x="152" y="148">signatureless</text>
                <text x="316" y="148">3.</text>
                <text x="372" y="148">Distribute</text>
                <text x="76" y="164">cert</text>
                <text x="116" y="164">from</text>
                <text x="172" y="164">landmark</text>
                <text x="376" y="164">landmarks</text>
                <text x="92" y="196">Authenticating</text>
                <text x="176" y="196">Party</text>
                <text x="72" y="228">signatureless</text>
                <text x="148" y="228">cert</text>
                <text x="64" y="244">tbscert</text>
                <text x="364" y="244">Up-to-date</text>
                <text x="420" y="244">RP</text>
                <text x="72" y="260">inclusion</text>
                <text x="136" y="260">proof</text>
                <text x="172" y="260">to</text>
                <text x="220" y="260">landmark</text>
                <text x="340" y="260">landmark</text>
                <text x="404" y="260">hashes</text>
                <text x="336" y="276">trusted</text>
                <text x="408" y="276">cosigners</text>
                <text x="36" y="308">full</text>
                <text x="76" y="308">cert</text>
                <text x="64" y="324">tbscert</text>
                <text x="360" y="324">Unupdated</text>
                <text x="412" y="324">RP</text>
                <text x="72" y="340">inclusion</text>
                <text x="136" y="340">proof</text>
                <text x="332" y="340">(stale</text>
                <text x="372" y="340">or</text>
                <text x="396" y="340">no</text>
                <text x="440" y="340">hashes)</text>
                <text x="84" y="356">cosignatures</text>
                <text x="336" y="356">trusted</text>
                <text x="408" y="356">cosigners</text>
                <text x="180" y="404">4.</text>
                <text x="220" y="404">Select</text>
                <text x="296" y="404">certificate</text>
                <text x="356" y="404">by</text>
                <text x="380" y="404">RP</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+-- Certificate Authority -------+
|                                |  +-- Update Channel --+
|    /\                          |  |                    |
|   /  \  1. Allocate landmarks -+--+----------------+   |
|  +----+                  |     |  |                |   |
+--------------------------+-----+  +----------------+---+
                           |                         |
    2. Make signatureless  |          3. Distribute  |
       cert from landmark  |              landmarks  |
                           V                         |
+-- Authenticating Party --------+                   |
|                                |                   |
| signatureless cert             |                   V
|   tbscert                      |  +-- Up-to-date RP -----+
|   inclusion proof to landmark -+->| landmark hashes      |
|                                |  | trusted cosigners    |
|                                |  +----------------------+
| full cert                      |
|   tbscert                      |  +-- Unupdated RP ------+
|   inclusion proof              |  | (stale or no hashes) |
|   cosignatures     ------------+->| trusted cosigners    |
|                                |  +----------------------+
+--------------------------------+
                     4. Select certificate by RP
]]></artwork>
        </artset>
      </figure>
      <t>Signatureless certificates are constructed and used as follows. <xref target="fig-signatureless-overview"/> depicts this process.</t>
      <ol spacing="normal" type="1"><li>
          <t>Periodically, the tree size of the CA's most recent checkpoint is designated as a <em>landmark</em>. This determines <em>landmark subtrees</em>, which are common points of reference between relying parties and signatureless certificates.</t>
        </li>
        <li>
          <t>Once some landmark includes the TBSCertificate, the signatureless certificate is constructed with:  </t>
          <ul spacing="normal">
            <li>
              <t>The TBSCertificate being certified</t>
            </li>
            <li>
              <t>An inclusion proof from the TBSCertificate to a landmark subtree</t>
            </li>
          </ul>
        </li>
        <li>
          <t>In the background, landmark subtrees are predistributed to relying parties, with cosignatures checked against relying party requirements. This occurs periodically in the background, separate from the application protocol.</t>
        </li>
        <li>
          <t>During the application protocol, such as TLS <xref target="RFC8446"/>, if the relying party already supports the landmark subtree, the authenticating party can present the signatureless certificate. Otherwise, it presents a full certificate. The authenticating party may also select between several signatureless certificates, as described in <xref target="certificate-renewal"/>.</t>
        </li>
      </ol>
    </section>
    <section anchor="subtrees">
      <name>Subtrees</name>
      <t>This section extends the Merkle Tree definition in <xref section="2.1" sectionFormat="of" target="RFC9162"/> by defining a <em>subtree</em> of a Merkle Tree. A subtree is an interior node of a Merkle Tree, which can be efficiently shown consistent with the original Merkle Tree and any Merkle Tree with additional elements appended. This specification uses subtrees to reduce the size of inclusion proofs.</t>
      <section anchor="definition-of-a-subtree">
        <name>Definition of a Subtree</name>
        <t>Given an ordered list of <tt>n</tt> inputs, <tt>D_n = {d[0], d[1], ..., d[n-1]}</tt>, <xref section="2.1.1" sectionFormat="of" target="RFC9162"/> defines the Merkle Tree via the Merkle Tree Hash <tt>MTH(D_n)</tt>.</t>
        <t>A <em>subtree</em> of this Merkle Tree is defined by two integers, <tt>start</tt> and <tt>end</tt>, such that:</t>
        <ul spacing="normal">
          <li>
            <t><tt>0 &lt;= start &lt; end &lt;= n</tt></t>
          </li>
          <li>
            <t>If <tt>s</tt> is the smallest power of two that is greater than or equal to <tt>end - start</tt>, <tt>start</tt> must be a multiple of <tt>s</tt></t>
          </li>
        </ul>
        <t>Note that, if <tt>start</tt> is zero, the second condition is always true.</t>
        <t>A subtree is itself a Merkle Tree, defined by <tt>MTH(D[start:end])</tt>. In the context of a single Merkle Tree, the subtree defined by <tt>start</tt> and <tt>end</tt> is denoted by half-open interval <tt>[start, end)</tt>. It contains the entries whose indices are in that half-open interval.</t>
        <t>The <em>size</em> of the subtree is <tt>end - start</tt>. If the subtree's size is a power of two, it is said to be <em>full</em>, otherwise it is said to be <em>partial</em>.</t>
        <t>If a subtree is full, then it is directly contained in the tree of hash operations in <tt>MTH(D_n)</tt> for <tt>n &gt;= end</tt>.</t>
        <t>If a subtree is partial, it is directly contained in <tt>MTH(D_n)</tt> only if <tt>n = end</tt>.</t>
      </section>
      <section anchor="subtree-inclusion-proofs">
        <name>Subtree Inclusion Proofs</name>
        <t>Subtrees are Merkle Trees, so entries can be proven to be contained in the subtree. A subtree inclusion proof for entry <tt>index</tt> of the subtree <tt>[start, end)</tt> is a Merkle inclusion proof, as defined in <xref section="2.1.3.1" sectionFormat="of" target="RFC9162"/>, where <tt>m</tt> is <tt>index - start</tt> and the tree inputs are <tt>D[start:end]</tt>. A subtree inclusion proof can be verified with the procedure in <xref section="2.1.3.2" sectionFormat="of" target="RFC9162"/>, where <tt>leaf_index</tt> is <tt>index - start</tt> and <tt>tree_size</tt> is <tt>end - start</tt>.</t>
      </section>
      <section anchor="subtree-consistency-proofs">
        <name>Subtree Consistency Proofs</name>
        <t>A subtree <tt>[start, end)</tt> can be efficiently proven to be consistent with the full Merkle Tree. That is, given <tt>MTH(D[start:end])</tt> and <tt>MTH(D_n)</tt>, the proof demonstrates that the input <tt>D[start:end]</tt> to the subtree hash was equal to the corresponding elements of the input <tt>D_n</tt> to the Merkle Tree hash.</t>
        <section anchor="generating-a-subtree-consistency-proof">
          <name>Generating a Subtree Consistency Proof</name>
          <t>The subtree consistency proof, <tt>SUBTREE_PROOF(start, end, D_n)</tt> is defined similarly to <xref section="2.1.4.1" sectionFormat="of" target="RFC9162"/>, in terms of a helper function that tracks whether the subtree hash is known:</t>
          <sourcecode type="pseudocode"><![CDATA[
SUBTREE_PROOF(start, end, D_n) =
    SUBTREE_SUBPROOF(start, end, D_n, true)
]]></sourcecode>
          <t>If <tt>start = 0</tt> and <tt>end = n</tt>, the subtree is the root:</t>
          <sourcecode type="pseudocode"><![CDATA[
SUBTREE_SUBPROOF(0, n, D_n, true) = {}
SUBTREE_SUBPROOF(0, n, D_n, false) = {MTH(D_n)}
]]></sourcecode>
          <t>Otherwise, <tt>n &gt; 1</tt>. Let <tt>k</tt> be the largest power of two smaller than <tt>n</tt>. The consistency proof is defined recursively as:</t>
          <ul spacing="normal">
            <li>
              <t>If <tt>end &lt;= k</tt>, the subtree is on the left of <tt>k</tt>. The proof proves consistency with the left child and includes the right child:  </t>
              <sourcecode type="pseudocode"><![CDATA[
SUBTREE_SUBPROOF(start, end, D_n, b) =
    SUBTREE_SUBPROOF(start, end, D[0:k], b) : MTH(D[k:n])
]]></sourcecode>
            </li>
            <li>
              <t>If <tt>k &lt;= start</tt>, the subtree is on the right of <tt>k</tt>. The proof proves consistency with the right child and includes the left child.  </t>
              <sourcecode type="pseudocode"><![CDATA[
SUBTREE_SUBPROOF(start, end, D_n, b) =
    SUBTREE_SUBPROOF(start - k, end - k, D[k:n], b) : MTH(D[0:k])
]]></sourcecode>
            </li>
            <li>
              <t>Otherwise, <tt>start &lt; k &lt; end</tt>, which implies <tt>start = 0</tt>. The proof proves consistency with the right child and includes the left child.  </t>
              <sourcecode type="pseudocode"><![CDATA[
SUBTREE_SUBPROOF(0, end, D_n, b) =
    SUBTREE_SUBPROOF(0, end - k, D[k:n], false) : MTH(D[0:k])
]]></sourcecode>
            </li>
          </ul>
          <t>When <tt>start</tt> is zero, this computes a Merkle consistency proof:</t>
          <sourcecode type="pseudocode"><![CDATA[
SUBTREE_PROOF(0, end, D_n) = PROOF(end, D_n)
]]></sourcecode>
          <t>When <tt>end = start + 1</tt>, this computes a Merkle inclusion proof:</t>
          <sourcecode type="pseudocode"><![CDATA[
SUBTREE_PROOF(start, start + 1, D_n) = PATH(start, D_n)
]]></sourcecode>
        </section>
        <section anchor="verifying-a-subtree-consistency-proof">
          <name>Verifying a Subtree Consistency Proof</name>
          <t>The following procedure can be used to verify a subtree consistency proof.</t>
          <t>Given a Merkle Tree over <tt>n</tt> elements, a subtree defined by <tt>[start, end)</tt>, a consistency proof <tt>proof</tt>, a subtree hash <tt>node_hash</tt>, and a root hash <tt>root_hash</tt>:</t>
          <ol spacing="normal" type="1"><li>
              <t>If <tt>end</tt> is <tt>n</tt>, run the following:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>Set <tt>fn</tt> to <tt>start</tt> and <tt>sn</tt> to <tt>end - 1</tt>.</t>
                </li>
                <li>
                  <t>Set <tt>r</tt> to <tt>node_hash</tt>.</t>
                </li>
                <li>
                  <t>Right-shift <tt>fn</tt> and <tt>sn</tt> equally until <tt>LSB(fn)</tt> is set or <tt>sn</tt> is zero.</t>
                </li>
                <li>
                  <t>For each value <tt>p</tt> in the <tt>proof</tt> array:
                  </t>
                  <ol spacing="normal" type="1"><li>
                      <t>If <tt>sn</tt> is 0, then stop iteration and fail the proof verification.</t>
                    </li>
                    <li>
                      <t>Set <tt>r</tt> to <tt>HASH(0x01 || p || r)</tt>.</t>
                    </li>
                    <li>
                      <t>If <tt>LSB(sn)</tt> is not set, the right-shift <tt>sn</tt> until either <tt>LSB(sn)</tt> is set or <tt>sn</tt> is zero.</t>
                    </li>
                    <li>
                      <t>Right-shift <tt>sn</tt> once more.</t>
                    </li>
                  </ol>
                </li>
                <li>
                  <t>Check <tt>sn</tt> is 0 and <tt>r</tt> is <tt>root_hash</tt>. If either is not equal, fail the proof verification. If all are equal, accept the proof.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>Otherwise, run the following:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>If <tt>proof</tt> is an empty array, stop and fail verification.</t>
                </li>
                <li>
                  <t>If <tt>end - start</tt> is an exact power of two, prepend <tt>node_hash</tt> to the <tt>proof</tt> array.</t>
                </li>
                <li>
                  <t>Set <tt>fn</tt> to <tt>start</tt>, <tt>sn</tt> to <tt>end - 1</tt>, and <tt>tn</tt> to <tt>n - 1</tt>.</t>
                </li>
                <li>
                  <t>Right-shift <tt>fn</tt>, <tt>sn</tt>, and <tt>tn</tt> equally until <tt>LSB(sn)</tt> is not set or <tt>fn = sn</tt>.</t>
                </li>
                <li>
                  <t>Set both <tt>fr</tt> and <tt>sr</tt> to the first value in the <tt>proof</tt> array.</t>
                </li>
                <li>
                  <t>For each subsequent value <tt>c</tt> in the <tt>proof</tt> array:
                  </t>
                  <ol spacing="normal" type="1"><li>
                      <t>If <tt>tn</tt> is 0, then stop the iteration and fail the proof verification.</t>
                    </li>
                    <li>
                      <t>If <tt>LSB(sn)</tt> is set, or if <tt>sn</tt> is equal to <tt>tn</tt>, then:
                      </t>
                      <ol spacing="normal" type="1"><li>
                          <t>If <tt>fn &lt; sn</tt>, set <tt>fr</tt> to <tt>HASH(0x01 || c || fr)</tt>.</t>
                        </li>
                        <li>
                          <t>Set <tt>sr</tt> to <tt>HASH(0x01 || c || sr)</tt>.</t>
                        </li>
                        <li>
                          <t>If <tt>LSB(sn)</tt> is not set, then right-shift each of <tt>fn</tt>, <tt>sn</tt>, and <tt>tn</tt> equally until either <tt>LSB(sn)</tt> is set or <tt>sn</tt> is 0.</t>
                        </li>
                      </ol>
                    </li>
                    <li>
                      <t>Otherwise:
                      </t>
                      <ol spacing="normal" type="1"><li>
                          <t>Set <tt>sr</tt> to <tt>HASH(0x01 || sr || c)</tt>.</t>
                        </li>
                      </ol>
                    </li>
                    <li>
                      <t>Finally, right-shift each of <tt>fn</tt>, <tt>sn</tt>, and <tt>tn</tt> one time.</t>
                    </li>
                  </ol>
                </li>
                <li>
                  <t>Check <tt>tn</tt> is 0, <tt>fr</tt> is <tt>node_hash</tt>, and <tt>sr</tt> is <tt>root_hash</tt>. If any are not equal, fail the proof verification. If all are equal, accept the proof.</t>
                </li>
              </ol>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="arbitrary-intervals">
        <name>Arbitrary Intervals</name>
        <t>Not all <tt>[start, end)</tt> intervals of a Merkle tree are valid subtrees. This section describes how, for any <tt>start &lt; end</tt>, to determine up to two subtrees that efficiently cover the interval. The subtrees are determined by the following procedure:</t>
        <ol spacing="normal" type="1"><li>
            <t>If <tt>end - start</tt> is one, return a single subtree, <tt>[start, end)</tt>.</t>
          </li>
          <li>
            <t>Otherwise, run the following to return a pair of subtrees:  </t>
            <ol spacing="normal" type="1"><li>
                <t>Let <tt>last</tt> be <tt>end - 1</tt>, the last index in <tt>[start, end)</tt>.</t>
              </li>
              <li>
                <t>Let <tt>split</tt> be the bit index of the most significant bit where <tt>start</tt> and <tt>last</tt> differ. Bits are numbered from the least significant bit, starting at zero. <tt>split</tt> is the height at which <tt>start</tt> and <tt>last</tt>'s paths in the tree diverge.</t>
              </li>
              <li>
                <t>Let <tt>mid</tt> be <tt>last</tt> with the least significant <tt>split</tt> bits set to zero. <tt>mid</tt> is the leftmost leaf node in the above divergence point's right branch.</t>
              </li>
              <li>
                <t>Within the least significant <tt>split</tt> bits of <tt>left</tt>, let <tt>b</tt> be the bit index of the most significant bit with value zero, if any:      </t>
                <ol spacing="normal" type="1"><li>
                    <t>If there is such a bit, let <tt>left_split</tt> be <tt>b + 1</tt>.</t>
                  </li>
                  <li>
                    <t>Otherwise, let <tt>left_split</tt> be zero.</t>
                  </li>
                </ol>
                <t>
<tt>left_split</tt> is the height of the lowest common ancestor of the nodes in <tt>[start, mid)</tt>.</t>
              </li>
              <li>
                <t>Let <tt>left_start</tt> be <tt>start</tt> with the least significant <tt>left_split</tt> bits set to zero. <tt>left_start</tt> is the above lowest common ancestor's leftmost leaf node.</t>
              </li>
              <li>
                <t>Return the subtrees <tt>[left_start, mid)</tt> and <tt>[mid, end)</tt>.</t>
              </li>
            </ol>
          </li>
        </ol>
        <t>When the procedure returns a single subtree, the subtree is <tt>[start, start+1)</tt>. When it returns two subtrees, <tt>left</tt> and <tt>right</tt>, the subtrees satisfy the following properties:</t>
        <ul spacing="normal">
          <li>
            <t><tt>left.end = right.start</tt>. That is, the two subtrees cover adjacent intervals.</t>
          </li>
          <li>
            <t><tt>left.start &lt;= start</tt> and <tt>end = right.end</tt>. That is, the two subtrees together cover the entire target interval, possibly with some extra entries before <tt>start</tt> left, but not after <tt>end</tt>.</t>
          </li>
          <li>
            <t><tt>left.end - left.start &lt; 2 * (end - start)</tt> and <tt>right.end - right.start &lt;= end - start</tt>. That is, the two subtrees efficiently cover the interval.</t>
          </li>
          <li>
            <t><tt>left</tt> is full, while <tt>right</tt> may be partial.</t>
          </li>
        </ul>
        <t>The following Python code implements this procedure:</t>
        <sourcecode type="python"><![CDATA[
def find_subtrees(start, end):
    """ Returns a list of one or two subtrees that efficiently
    cover [start, end). """
    assert start < end
    if end - start == 1:
        return [(start, end),]
    last = end - 1
    # Find where start and last's tree paths diverge. The two
    # subtrees will be on either side of the split.
    split = (start ^ last).bit_length() - 1
    mask = (1 << split) - 1
    mid = last & ~mask
    # Maximize the left endpoint. This is just before start's
    # path leaves the right edge of its new subtree.
    left_split = (~start & mask).bit_length()
    left_start = start & ~((1 << left_split) - 1)
    return [(left_start, mid), (mid, end)]
]]></sourcecode>
        <t><xref target="fig-subtree-example"/> shows the subtrees which cover <tt>[5, 13)</tt> in a Merkle Tree of 13 elements. The two subtrees selected are <tt>[4, 8)</tt> and <tt>[8, 13)</tt>. Note that the subtrees cover a slightly larger interval than <tt>[5, 13)</tt>.</t>
        <!-- Ideally we'd use the Unicode box-drawing characters for the text form, but aasvg doesn't support them: https://github.com/martinthomson/aasvg/issues/9 -->

<figure anchor="fig-subtree-example">
          <name>An example selection of subtrees to cover an interval</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="336" width="456" viewBox="0 0 456 336" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                <path d="M 8,288 L 8,320" fill="none" stroke="black"/>
                <path d="M 24,288 L 24,320" fill="none" stroke="black"/>
                <path d="M 32,160 L 32,192" fill="none" stroke="black"/>
                <path d="M 40,288 L 40,320" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 56,288 L 56,320" fill="none" stroke="black"/>
                <path d="M 64,96 L 64,128" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                <path d="M 72,288 L 72,320" fill="none" stroke="black"/>
                <path d="M 88,288 L 88,320" fill="none" stroke="black"/>
                <path d="M 104,160 L 104,192" fill="none" stroke="black"/>
                <path d="M 104,288 L 104,320" fill="none" stroke="black"/>
                <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                <path d="M 120,288 L 120,320" fill="none" stroke="black"/>
                <path d="M 136,32 L 136,64" fill="none" stroke="black"/>
                <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                <path d="M 136,288 L 136,320" fill="none" stroke="black"/>
                <path d="M 152,288 L 152,320" fill="none" stroke="black"/>
                <path d="M 160,160 L 160,192" fill="none" stroke="black"/>
                <path d="M 168,288 L 168,320" fill="none" stroke="black"/>
                <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                <path d="M 184,288 L 184,320" fill="none" stroke="black"/>
                <path d="M 200,96 L 200,128" fill="none" stroke="black"/>
                <path d="M 200,224 L 200,256" fill="none" stroke="black"/>
                <path d="M 200,288 L 200,320" fill="none" stroke="black"/>
                <path d="M 216,288 L 216,320" fill="none" stroke="black"/>
                <path d="M 232,160 L 232,192" fill="none" stroke="black"/>
                <path d="M 232,288 L 232,320" fill="none" stroke="black"/>
                <path d="M 248,224 L 248,256" fill="none" stroke="black"/>
                <path d="M 248,288 L 248,320" fill="none" stroke="black"/>
                <path d="M 264,224 L 264,256" fill="none" stroke="black"/>
                <path d="M 264,288 L 264,320" fill="none" stroke="black"/>
                <path d="M 280,288 L 280,320" fill="none" stroke="black"/>
                <path d="M 288,160 L 288,192" fill="none" stroke="black"/>
                <path d="M 296,288 L 296,320" fill="none" stroke="black"/>
                <path d="M 312,96 L 312,128" fill="none" stroke="black"/>
                <path d="M 312,288 L 312,320" fill="none" stroke="black"/>
                <path d="M 320,224 L 320,256" fill="none" stroke="black"/>
                <path d="M 328,288 L 328,320" fill="none" stroke="black"/>
                <path d="M 336,224 L 336,256" fill="none" stroke="black"/>
                <path d="M 352,288 L 352,320" fill="none" stroke="black"/>
                <path d="M 368,160 L 368,192" fill="none" stroke="black"/>
                <path d="M 368,288 L 368,320" fill="none" stroke="black"/>
                <path d="M 376,32 L 376,64" fill="none" stroke="black"/>
                <path d="M 392,288 L 392,320" fill="none" stroke="black"/>
                <path d="M 400,224 L 400,256" fill="none" stroke="black"/>
                <path d="M 408,288 L 408,320" fill="none" stroke="black"/>
                <path d="M 424,144 L 424,272" fill="none" stroke="black"/>
                <path d="M 432,288 L 432,320" fill="none" stroke="black"/>
                <path d="M 448,96 L 448,128" fill="none" stroke="black"/>
                <path d="M 136,32 L 376,32" fill="none" stroke="black"/>
                <path d="M 136,64 L 376,64" fill="none" stroke="black"/>
                <path d="M 64,96 L 200,96" fill="none" stroke="black"/>
                <path d="M 312,94 L 448,94" fill="none" stroke="black"/>
                <path d="M 312,98 L 448,98" fill="none" stroke="black"/>
                <path d="M 64,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 312,126 L 448,126" fill="none" stroke="black"/>
                <path d="M 312,130 L 448,130" fill="none" stroke="black"/>
                <path d="M 32,160 L 104,160" fill="none" stroke="black"/>
                <path d="M 160,158 L 232,158" fill="none" stroke="black"/>
                <path d="M 160,162 L 232,162" fill="none" stroke="black"/>
                <path d="M 288,160 L 368,160" fill="none" stroke="black"/>
                <path d="M 32,192 L 104,192" fill="none" stroke="black"/>
                <path d="M 160,190 L 232,190" fill="none" stroke="black"/>
                <path d="M 160,194 L 232,194" fill="none" stroke="black"/>
                <path d="M 288,192 L 368,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 56,224" fill="none" stroke="black"/>
                <path d="M 72,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 136,224 L 184,224" fill="none" stroke="black"/>
                <path d="M 200,224 L 248,224" fill="none" stroke="black"/>
                <path d="M 264,224 L 320,224" fill="none" stroke="black"/>
                <path d="M 336,224 L 400,224" fill="none" stroke="black"/>
                <path d="M 8,256 L 56,256" fill="none" stroke="black"/>
                <path d="M 72,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,256 L 184,256" fill="none" stroke="black"/>
                <path d="M 200,256 L 248,256" fill="none" stroke="black"/>
                <path d="M 264,256 L 320,256" fill="none" stroke="black"/>
                <path d="M 336,256 L 400,256" fill="none" stroke="black"/>
                <path d="M 8,288 L 24,288" fill="none" stroke="black"/>
                <path d="M 40,288 L 56,288" fill="none" stroke="black"/>
                <path d="M 72,288 L 88,288" fill="none" stroke="black"/>
                <path d="M 104,288 L 120,288" fill="none" stroke="black"/>
                <path d="M 136,288 L 152,288" fill="none" stroke="black"/>
                <path d="M 168,286 L 184,286" fill="none" stroke="black"/>
                <path d="M 168,290 L 184,290" fill="none" stroke="black"/>
                <path d="M 200,286 L 216,286" fill="none" stroke="black"/>
                <path d="M 200,290 L 216,290" fill="none" stroke="black"/>
                <path d="M 232,286 L 248,286" fill="none" stroke="black"/>
                <path d="M 232,290 L 248,290" fill="none" stroke="black"/>
                <path d="M 264,286 L 280,286" fill="none" stroke="black"/>
                <path d="M 264,290 L 280,290" fill="none" stroke="black"/>
                <path d="M 296,286 L 312,286" fill="none" stroke="black"/>
                <path d="M 296,290 L 312,290" fill="none" stroke="black"/>
                <path d="M 328,286 L 352,286" fill="none" stroke="black"/>
                <path d="M 328,290 L 352,290" fill="none" stroke="black"/>
                <path d="M 368,286 L 392,286" fill="none" stroke="black"/>
                <path d="M 368,290 L 392,290" fill="none" stroke="black"/>
                <path d="M 408,286 L 432,286" fill="none" stroke="black"/>
                <path d="M 408,290 L 432,290" fill="none" stroke="black"/>
                <path d="M 8,320 L 24,320" fill="none" stroke="black"/>
                <path d="M 40,320 L 56,320" fill="none" stroke="black"/>
                <path d="M 72,320 L 88,320" fill="none" stroke="black"/>
                <path d="M 104,320 L 120,320" fill="none" stroke="black"/>
                <path d="M 136,320 L 152,320" fill="none" stroke="black"/>
                <path d="M 168,318 L 184,318" fill="none" stroke="black"/>
                <path d="M 168,322 L 184,322" fill="none" stroke="black"/>
                <path d="M 200,318 L 216,318" fill="none" stroke="black"/>
                <path d="M 200,322 L 216,322" fill="none" stroke="black"/>
                <path d="M 232,318 L 248,318" fill="none" stroke="black"/>
                <path d="M 232,322 L 248,322" fill="none" stroke="black"/>
                <path d="M 264,318 L 280,318" fill="none" stroke="black"/>
                <path d="M 264,322 L 280,322" fill="none" stroke="black"/>
                <path d="M 296,318 L 312,318" fill="none" stroke="black"/>
                <path d="M 296,322 L 312,322" fill="none" stroke="black"/>
                <path d="M 328,318 L 352,318" fill="none" stroke="black"/>
                <path d="M 328,322 L 352,322" fill="none" stroke="black"/>
                <path d="M 368,318 L 392,318" fill="none" stroke="black"/>
                <path d="M 368,322 L 392,322" fill="none" stroke="black"/>
                <path d="M 408,318 L 432,318" fill="none" stroke="black"/>
                <path d="M 408,322 L 432,322" fill="none" stroke="black"/>
                <g class="text">
                  <text x="248" y="52">[0,</text>
                  <text x="280" y="52">13)</text>
                  <text x="160" y="84">/</text>
                  <text x="352" y="84">\</text>
                  <text x="120" y="116">[0,</text>
                  <text x="148" y="116">8)</text>
                  <text x="368" y="116">[8,</text>
                  <text x="400" y="116">13)</text>
                  <text x="72" y="148">/</text>
                  <text x="192" y="148">\</text>
                  <text x="336" y="148">/</text>
                  <text x="56" y="180">[0,</text>
                  <text x="84" y="180">4)</text>
                  <text x="184" y="180">[4,</text>
                  <text x="212" y="180">8)</text>
                  <text x="312" y="180">[8,</text>
                  <text x="344" y="180">12)</text>
                  <text x="40" y="212">/</text>
                  <text x="96" y="212">\</text>
                  <text x="168" y="212">/</text>
                  <text x="224" y="212">\</text>
                  <text x="304" y="212">/</text>
                  <text x="360" y="212">\</text>
                  <text x="32" y="244">[0,2)</text>
                  <text x="96" y="244">[2,4)</text>
                  <text x="160" y="244">[4,6)</text>
                  <text x="224" y="244">[6,8)</text>
                  <text x="292" y="244">[8,10)</text>
                  <text x="368" y="244">[10,12)</text>
                  <text x="24" y="276">/</text>
                  <text x="40" y="276">\</text>
                  <text x="88" y="276">/</text>
                  <text x="104" y="276">\</text>
                  <text x="152" y="276">/</text>
                  <text x="168" y="276">\</text>
                  <text x="216" y="276">/</text>
                  <text x="232" y="276">\</text>
                  <text x="280" y="276">/</text>
                  <text x="296" y="276">\</text>
                  <text x="352" y="276">/</text>
                  <text x="368" y="276">\</text>
                  <text x="16" y="308">0</text>
                  <text x="48" y="308">1</text>
                  <text x="80" y="308">2</text>
                  <text x="112" y="308">3</text>
                  <text x="144" y="308">4</text>
                  <text x="176" y="308">5</text>
                  <text x="208" y="308">6</text>
                  <text x="240" y="308">7</text>
                  <text x="272" y="308">8</text>
                  <text x="304" y="308">9</text>
                  <text x="340" y="308">10</text>
                  <text x="380" y="308">11</text>
                  <text x="420" y="308">12</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
                +-----------------------------+
                |            [0, 13)          |
                +-----------------------------+
                   /                       \
       +----------------+             +================+
       |     [0, 8)     |             |     [8, 13)    |
       +----------------+             +================+
        /              \                 /          |
   +--------+      +========+      +---------+      |
   | [0, 4) |      | [4, 8) |      | [8, 12) |      |
   +--------+      +========+      +---------+      |
    /      \        /      \         /      \       |
+-----+ +-----+ +-----+ +-----+ +------+ +-------+  |
|[0,2)| |[2,4)| |[4,6)| |[6,8)| |[8,10)| |[10,12)|  |
+-----+ +-----+ +-----+ +-----+ +------+ +-------+  |
  / \     / \     / \     / \     / \      / \      |
+-+ +-+ +-+ +-+ +-+ +=+ +=+ +=+ +=+ +=+ +==+ +==+ +==+
|0| |1| |2| |3| |4| |5| |6| |7| |8| |9| |10| |11| |12|
+-+ +-+ +-+ +-+ +-+ +=+ +=+ +=+ +=+ +=+ +==+ +==+ +==+
]]></artwork>
          </artset>
        </figure>
        <t>Two subtrees are needed because a single subtree may not be able to efficiently cover an interval. <xref target="fig-subtree-counterexample"/> shows the smallest subtree that contains <tt>[7, 9)</tt> in a 9-element tree. The smallest single subtree that contains the interval is <tt>[0, 9)</tt> but this is the entire tree. Using two subtrees, the interval can be described by <tt>[7, 8)</tt> and <tt>[8, 9)</tt>.</t>
        <figure anchor="fig-subtree-counterexample">
          <name>An example showing an inefficient choice of a single subtree</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="336" width="304" viewBox="0 0 304 336" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                <path d="M 8,288 L 8,320" fill="none" stroke="black"/>
                <path d="M 24,288 L 24,320" fill="none" stroke="black"/>
                <path d="M 32,160 L 32,192" fill="none" stroke="black"/>
                <path d="M 40,288 L 40,320" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 56,288 L 56,320" fill="none" stroke="black"/>
                <path d="M 64,96 L 64,128" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                <path d="M 72,288 L 72,320" fill="none" stroke="black"/>
                <path d="M 88,288 L 88,320" fill="none" stroke="black"/>
                <path d="M 104,160 L 104,192" fill="none" stroke="black"/>
                <path d="M 104,288 L 104,320" fill="none" stroke="black"/>
                <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                <path d="M 120,288 L 120,320" fill="none" stroke="black"/>
                <path d="M 136,32 L 136,64" fill="none" stroke="black"/>
                <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                <path d="M 136,288 L 136,320" fill="none" stroke="black"/>
                <path d="M 152,288 L 152,320" fill="none" stroke="black"/>
                <path d="M 160,160 L 160,192" fill="none" stroke="black"/>
                <path d="M 168,288 L 168,320" fill="none" stroke="black"/>
                <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                <path d="M 184,288 L 184,320" fill="none" stroke="black"/>
                <path d="M 200,96 L 200,128" fill="none" stroke="black"/>
                <path d="M 200,224 L 200,256" fill="none" stroke="black"/>
                <path d="M 200,288 L 200,320" fill="none" stroke="black"/>
                <path d="M 216,288 L 216,320" fill="none" stroke="black"/>
                <path d="M 232,160 L 232,192" fill="none" stroke="black"/>
                <path d="M 232,288 L 232,320" fill="none" stroke="black"/>
                <path d="M 248,224 L 248,256" fill="none" stroke="black"/>
                <path d="M 248,288 L 248,320" fill="none" stroke="black"/>
                <path d="M 264,288 L 264,320" fill="none" stroke="black"/>
                <path d="M 272,80 L 272,272" fill="none" stroke="black"/>
                <path d="M 280,288 L 280,320" fill="none" stroke="black"/>
                <path d="M 296,32 L 296,64" fill="none" stroke="black"/>
                <path d="M 136,30 L 296,30" fill="none" stroke="black"/>
                <path d="M 136,34 L 296,34" fill="none" stroke="black"/>
                <path d="M 136,62 L 296,62" fill="none" stroke="black"/>
                <path d="M 136,66 L 296,66" fill="none" stroke="black"/>
                <path d="M 64,96 L 200,96" fill="none" stroke="black"/>
                <path d="M 64,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 32,160 L 104,160" fill="none" stroke="black"/>
                <path d="M 160,160 L 232,160" fill="none" stroke="black"/>
                <path d="M 32,192 L 104,192" fill="none" stroke="black"/>
                <path d="M 160,192 L 232,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 56,224" fill="none" stroke="black"/>
                <path d="M 72,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 136,224 L 184,224" fill="none" stroke="black"/>
                <path d="M 200,224 L 248,224" fill="none" stroke="black"/>
                <path d="M 8,256 L 56,256" fill="none" stroke="black"/>
                <path d="M 72,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,256 L 184,256" fill="none" stroke="black"/>
                <path d="M 200,256 L 248,256" fill="none" stroke="black"/>
                <path d="M 8,288 L 24,288" fill="none" stroke="black"/>
                <path d="M 40,288 L 56,288" fill="none" stroke="black"/>
                <path d="M 72,288 L 88,288" fill="none" stroke="black"/>
                <path d="M 104,288 L 120,288" fill="none" stroke="black"/>
                <path d="M 136,288 L 152,288" fill="none" stroke="black"/>
                <path d="M 168,288 L 184,288" fill="none" stroke="black"/>
                <path d="M 200,288 L 216,288" fill="none" stroke="black"/>
                <path d="M 232,286 L 248,286" fill="none" stroke="black"/>
                <path d="M 232,290 L 248,290" fill="none" stroke="black"/>
                <path d="M 264,286 L 280,286" fill="none" stroke="black"/>
                <path d="M 264,290 L 280,290" fill="none" stroke="black"/>
                <path d="M 8,320 L 24,320" fill="none" stroke="black"/>
                <path d="M 40,320 L 56,320" fill="none" stroke="black"/>
                <path d="M 72,320 L 88,320" fill="none" stroke="black"/>
                <path d="M 104,320 L 120,320" fill="none" stroke="black"/>
                <path d="M 136,320 L 152,320" fill="none" stroke="black"/>
                <path d="M 168,320 L 184,320" fill="none" stroke="black"/>
                <path d="M 200,320 L 216,320" fill="none" stroke="black"/>
                <path d="M 232,318 L 248,318" fill="none" stroke="black"/>
                <path d="M 232,322 L 248,322" fill="none" stroke="black"/>
                <path d="M 264,318 L 280,318" fill="none" stroke="black"/>
                <path d="M 264,322 L 280,322" fill="none" stroke="black"/>
                <g class="text">
                  <text x="200" y="52">[0,</text>
                  <text x="228" y="52">9)</text>
                  <text x="160" y="84">/</text>
                  <text x="120" y="116">[0,</text>
                  <text x="148" y="116">8)</text>
                  <text x="72" y="148">/</text>
                  <text x="192" y="148">\</text>
                  <text x="56" y="180">[0,</text>
                  <text x="84" y="180">4)</text>
                  <text x="184" y="180">[4,</text>
                  <text x="212" y="180">8)</text>
                  <text x="40" y="212">/</text>
                  <text x="96" y="212">\</text>
                  <text x="168" y="212">/</text>
                  <text x="224" y="212">\</text>
                  <text x="32" y="244">[0,2)</text>
                  <text x="96" y="244">[2,4)</text>
                  <text x="160" y="244">[4,6)</text>
                  <text x="224" y="244">[6,8)</text>
                  <text x="24" y="276">/</text>
                  <text x="40" y="276">\</text>
                  <text x="88" y="276">/</text>
                  <text x="104" y="276">\</text>
                  <text x="152" y="276">/</text>
                  <text x="168" y="276">\</text>
                  <text x="216" y="276">/</text>
                  <text x="232" y="276">\</text>
                  <text x="16" y="308">0</text>
                  <text x="48" y="308">1</text>
                  <text x="80" y="308">2</text>
                  <text x="112" y="308">3</text>
                  <text x="144" y="308">4</text>
                  <text x="176" y="308">4</text>
                  <text x="208" y="308">6</text>
                  <text x="240" y="308">7</text>
                  <text x="272" y="308">8</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
                +===================+
                |      [0, 9)       |
                +===================+
                   /             |
       +----------------+        |
       |     [0, 8)     |        |
       +----------------+        |
        /              \         |
   +--------+      +--------+    |
   | [0, 4) |      | [4, 8) |    |
   +--------+      +--------+    |
    /      \        /      \     |
+-----+ +-----+ +-----+ +-----+  |
|[0,2)| |[2,4)| |[4,6)| |[6,8)|  |
+-----+ +-----+ +-----+ +-----+  |
  / \     / \     / \     / \    |
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +=+ +=+
|0| |1| |2| |3| |4| |4| |6| |7| |8|
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +=+ +=+
]]></artwork>
          </artset>
        </figure>
      </section>
    </section>
    <section anchor="issuance-logs">
      <name>Issuance Logs</name>
      <t>This section defines the structure of an <em>issuance log</em>.</t>
      <t>An issuance log describes an append-only sequence of <em>entries</em> (<xref target="log-entries"/>), identified consecutively by an index value, starting from zero. Each entry is an assertion that the CA has certified. The entries in the issuance log are represented as a Merkle Tree, described in <xref section="2.1" sectionFormat="of" target="RFC9162"/>.</t>
      <t>Unlike <xref target="RFC6962"/> and <xref target="RFC9162"/>, an issuance log does not have a public submission interface. The log only contains entries which the log operator, i.e. the CA, chose to add. As entries are added, the Merkle Tree is updated to be computed over the new sequence.</t>
      <t>A snapshot of the log is known as a <em>checkpoint</em>. A checkpoint is identified by its <em>tree size</em>, that is the number of elements comitted to the log at the time. Its contents can be described by the Merkle Tree Hash (<xref section="2.1.1" sectionFormat="of" target="RFC9162"/>) of entries zero through <tt>tree_size - 1</tt>.</t>
      <t>Cosigners (<xref target="cosigners"/>) sign assertions about the state of the issuance log. A Merkle Tree CA operates a combination of an issuance log and one or more CA cosigners (<xref target="certification-authority-cosigners"/>) that authenticate the log state and certifies the contents. External cosigners may also be deployed to assert correct log operation or provide other services to relying parties (<xref target="trusted-cosigners"/>).</t>
      <section anchor="log-parameters">
        <name>Log Parameters</name>
        <t>An issuance log has the following parameters:</t>
        <ul spacing="normal">
          <li>
            <t>A log ID, which uniquely identifies the log. See <xref target="log-ids"/>.</t>
          </li>
          <li>
            <t>A collision-resistant cryptographic hash function. SHA-256 <xref target="SHS"/> is RECOMMENDED.</t>
          </li>
          <li>
            <t>A minimum index, which is the index of the first log entry which is available. See <xref target="log-pruning"/>. This value changes over the lifetime of the log.</t>
          </li>
        </ul>
        <t>Throughout this document, the hash algorithm in use is referred to as HASH, and the size of its output in bytes is referred to as HASH_SIZE.</t>
      </section>
      <section anchor="log-ids">
        <name>Log IDs</name>
        <t>Each issuance log is identified by a <em>log ID</em>, which is a trust anchor ID <xref target="I-D.ietf-tls-trust-anchor-ids"/>.</t>
        <t>An issuance log's log ID determines an X.509 distinguished name (<xref section="4.1.2.4" sectionFormat="of" target="RFC5280"/>). The distinguished name has a single relative distinguished name, which has a single attribute. The attribute has type <tt>id-rdna-trustAnchorID</tt>, defined below:</t>
        <sourcecode type="asn.1"><![CDATA[
id-rdna-trustAnchorID OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) rdna(TBD1) TBD2}
]]></sourcecode>
        <t>[[TODO: Fill in TBD1 from the PKIX rdna arc in <xref target="I-D.ietf-lamps-x509-alg-none"/>, once allocated.]]</t>
        <t>The attribute's value is a RELATIVE-OID containing the trust anchor ID's ASN.1 representation. For example, the distinguished name for a log named <tt>32473.1</tt> would be represented in syntax of <xref target="RFC4514"/> as:</t>
        <artwork><![CDATA[
1.3.6.1.5.5.7.TBD1.TBD2=#0d0481fd5901
]]></artwork>
        <t>For initial experimentation, early implementations of this design will use the OID 1.3.6.1.4.1.44363.47.1 instead of <tt>id-rdna-trustAnchorID</tt>.</t>
      </section>
      <section anchor="log-entries">
        <name>Log Entries</name>
        <t>Each entry in the log is a MerkleTreeCertEntry, defined with the TLS presentation syntax below. A MerkleTreeCertEntry describes certificate information that the CA has validated and certified.</t>
        <sourcecode type="tls-presentation"><![CDATA[
struct {} Empty;

enum {
    null_entry(0), tbs_cert_entry(1), (2^16-1)
} MerkleTreeCertEntryType;

struct {
    MerkleTreeCertEntryType type;
    select (type) {
       case null_entry: Empty;
       case tbs_cert_entry: opaque tbs_cert_entry_data[N];
       /* May be extended with future types. */
    }
} MerkleTreeCertEntry;
]]></sourcecode>
        <t>When <tt>type</tt> is <tt>tbs_cert_entry</tt>, <tt>N</tt> is the number of bytes needed to consume the rest of the input. A MerkleTreeCertEntry is expected to be decoded in contexts where the total length of the entry is known.</t>
        <t><tt>tbs_cert_entry_data</tt> contains the DER <xref target="X.690"/> encoding of a TBSCertificateLogEntry, defined below:</t>
        <sourcecode type="asn.1"><![CDATA[
TBSCertificateLogEntry  ::=  SEQUENCE  {
      version             [0]  EXPLICIT Version DEFAULT v1,
      issuer                   Name,
      validity                 Validity,
      subject                  Name,
      subjectPublicKeyInfoHash OCTET STRING,
      issuerUniqueID      [1]  IMPLICIT UniqueIdentifier OPTIONAL,
      subjectUniqueID     [2]  IMPLICIT UniqueIdentifier OPTIONAL,
      extensions          [3]  EXPLICIT Extensions OPTIONAL }
]]></sourcecode>
        <t>The <tt>version</tt>, <tt>issuer</tt>, <tt>validity</tt>, <tt>subject</tt>, <tt>issuerUniqueID</tt>, <tt>subjectUniqueID</tt>, and <tt>extensions</tt> fields have the corresponding semantics as in <xref section="4.1.2" sectionFormat="of" target="RFC5280"/>, with the exception of <tt>subjectPublicKeyInfoHash</tt>. <tt>subjectPublicKeyInfoHash</tt> contains the hash of subject's public key as a SubjectPublicKeyInfo (<xref section="4.1.2.7" sectionFormat="of" target="RFC5280"/>). The hash uses the log's hash function (<xref target="log-parameters"/>) and is computed over the SubjectPublicKeyInfo's DER <xref target="X.690"/> encoding. The <tt>issuer</tt> field MUST be the issuance log's log ID as an X.509 distinguished name, as described in <xref target="log-ids"/>.</t>
        <t>When <tt>type</tt> is <tt>null_entry</tt>, the entry does not represent any information. The entry at index zero of every issuance log MUST be of type <tt>null_entry</tt>. Other entries MUST NOT use <tt>null_entry</tt>. <tt>null_entry</tt> exists to avoid zero serial numbers in the certificate format (<xref target="certificate-format"/>).</t>
        <t>MerkleTreeCertEntry is an extensible structure. Future documents may define new values for MerkleTreeCertEntryType, with corresponding semantics. See <xref target="certification-authority-cosigners"/> and <xref target="new-log-entry-types"/> for additional discussion.</t>
      </section>
      <section anchor="cosigners">
        <name>Cosigners</name>
        <t>This section defines a log <em>cosigner</em>. A cosigner follows some append-only view of the log and signs subtrees (<xref target="subtrees"/>) consistent with that view. The signatures generated by a cosigner are known as <em>cosignatures</em>. All subtrees signed by a cosigner MUST be consistent with each other. The cosigner may be external to the log, in which case it might ensure consistency by checking consistency proofs. The cosigner may be operated together with the log, in which case it can trust its log state.</t>
        <t>A cosignature MAY implicitly make additional statements about a subtree, determined by the cosigner's role. This document defines one concrete cosigner role, a CA cosigner (<xref target="certification-authority-cosigners"/>), to authenticate the log and certify entries. Other documents and specific deployments may define other cosigner roles, to perform different functions in a PKI. For example, <xref target="TLOG-WITNESS"/> defines a cosigner that only checks the log is append-only, and <xref target="TLOG-MIRROR"/> defines a cosigner that mirrors a log.</t>
        <t>Each cosigner has a public key and a <em>cosigner ID</em>, which uniquely identifies the cosigner. The cosigner ID is a trust anchor ID <xref target="I-D.ietf-tls-trust-anchor-ids"/>. By identifying the cosigner, the cosigner ID specifies both the public key and the additional statements made by the cosigner's signatures. If a single operator performs multiple cosigner roles in an ecosystem, each role MUST use a distinct cosigner ID and SHOULD use a distinct key.</t>
        <t>A single cosigner, with a single cosigner ID and public key, MAY generate cosignatures for multiple logs. In this case, signed subtrees only need to be consistent with others for the same log.</t>
        <section anchor="signature-format">
          <name>Signature Format</name>
          <t>A cosigner computes a cosignature for a subtree in some log by signing a MTCSubtreeSignatureInput, defined below using the TLS presentation language (<xref section="3" sectionFormat="of" target="RFC8446"/>):</t>
          <sourcecode type="tls-presentation"><![CDATA[
opaque HashValue[HASH_SIZE];

/* From Section 4.1 of draft-ietf-tls-trust-anchor-ids */
opaque TrustAnchorID<1..2^8-1>;

struct {
    TrustAnchorID log_id;
    uint64 start;
    uint64 end;
    HashValue hash;
} MTCSubtree;

struct {
    uint8 label[16] = "mtc-subtree/v1\n\0";
    TrustAnchorID cosigner_id;
    MTCSubtree subtree;
} MTCSubtreeSignatureInput;
]]></sourcecode>
          <t><tt>log_id</tt> MUST be the issuance log's ID (<xref target="log-ids"/>), in its binary representation (<xref section="3" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>). <tt>start</tt> and <tt>end</tt> MUST define a valid subtree of the log, and <tt>hash</tt> MUST be the subtree's hash value in the cosigner's view of the log. The <tt>label</tt> is a fixed prefix for domain separation. Its value MUST be the string <tt>mtc-subtree/v1</tt>, followed by a newline (U+000A), followed by a zero byte (U+0000). <tt>cosigner_id</tt> MUST be the cosigner ID, in its binary representation.</t>
          <t>The resulting signature is known as a <em>subtree signature</em>. When <tt>start</tt> is zero, the resulting signature describes the checkpoint with tree size <tt>end</tt> and is also known as a <em>checkpoint signature</em>.</t>
          <t>For each supported log, a cosigner retains its checkpoint signature with the largest <tt>end</tt>. This is known as the cosigner's <em>current</em> checkpoint. If the cosigner's current checkpoint has tree size <tt>tree_size</tt>, it MUST NOT generate a signature for a subtree <tt>[start, end)</tt> if <tt>start &gt; 0</tt> and <tt>end &gt; tree_size</tt>. That is, a cosigner can only sign a non-checkpoint subtree if it is contained in its current checkpoint. In a correctly-operated cosigner, every signature made by the cosigner can be proven consistent with its current checkpoint with a subtree consistency proof (<xref target="subtree-consistency-proofs"/>). As a consequence, a cosigner that signs a subtree is held responsible for all the entries in the tree of size matching the subtree end, even if the corresponding checkpoint is erroneously unavailable.</t>
          <t>Before signing a subtree, the cosigner MUST ensure that <tt>hash</tt> is consistent with its log state. Different cosigner roles may obtain this assurance differently. For example, a cosigner may compute the hash from its saved log state (e.g. if it is the log operator or maintains a copy of the log) or by verifying a subtree consistency proof (<xref target="subtree-consistency-proofs"/>) from its current checkpoint. When a cosigner signs a subtree, it is held responsible <em>both</em> for the subtree being consistent with its other signatures, <em>and</em> for the cosigner-specific additional statements.</t>
          <t>Cosigners SHOULD publish their current checkpoint, along with the checkpoint signature.</t>
          <t>[[TODO: CT and tlog put timestamps in checkpoint signatures. Do we want them here? In CT and tlog, the timestamps are monotonically increasing as the log progresses, but we also sign subtrees. We can separate subtree and checkpoint signatures, with timestamps only in the latter, but it's unclear if there is any benefit to this.]]</t>
        </section>
        <section anchor="signature-algorithms">
          <name>Signature Algorithms</name>
          <t>The cosigner's public key specifies both the key material and the signature algorithm to use with the key material. In order to change key or signature parameters, a cosigner operator MUST deploy a new cosigner, with a new cosigner ID. Signature algorithms MUST fully specify the algorithm parameters, such as hash functions used. This document defines the following signature algorithms:</t>
          <ul spacing="normal">
            <li>
              <t>ECDSA with P-256 and SHA-256 <xref target="FIPS186-5"/></t>
            </li>
            <li>
              <t>ECDSA with P-384 and SHA-384 <xref target="FIPS186-5"/></t>
            </li>
            <li>
              <t>Ed25519 <xref target="RFC8032"/></t>
            </li>
            <li>
              <t>ML-DSA-44 <xref target="FIPS204"/></t>
            </li>
            <li>
              <t>ML-DSA-65 <xref target="FIPS204"/></t>
            </li>
            <li>
              <t>ML-DSA-87 <xref target="FIPS204"/></t>
            </li>
          </ul>
          <t>Other documents or deployments MAY define other signature schemes and formats. Log clients that accept cosignatures from some cosigner are assumed to be configured with all parameters necessary to verify that cosigner's signatures, including the signature algorithm and version of the signature format.</t>
        </section>
      </section>
      <section anchor="certification-authority-cosigners">
        <name>Certification Authority Cosigners</name>
        <t>A <em>CA cosigner</em> is a cosigner (<xref target="cosigners"/>) that certifies the contents of a log.</t>
        <t>When a CA cosigner signs a subtree, it makes the additional statement that it has certified each entry in the subtree. For example, a domain-validating CA states that it has performed domain validation for each entry, at some time consistent with the entry's validity dates. CAs are held responsible for every entry in every subtree they sign. Proving an entry is included (<xref target="subtree-inclusion-proofs"/>) in a CA-signed subtree is sufficient to prove the CA certified it.</t>
        <t>What it means to certify an entry depends on the entry type:</t>
        <ul spacing="normal">
          <li>
            <t>To certify an entry of type <tt>null_entry</tt> is a no-op. A CA MAY freely certify <tt>null_entry</tt> without being held responsible for any validation.</t>
          </li>
          <li>
            <t>To certify an entry of type <tt>tbs_cert_entry</tt> is to certify the TBSCertificateLogEntry, as defined in <xref target="log-entries"/>.</t>
          </li>
        </ul>
        <t>Entries are extensible. Future documents MAY define <tt>type</tt> values and what it means to certify them. A CA MUST NOT sign a subtree if it contains an entry with <tt>type</tt> that it does not recognize. Doing so would certify that the CA has validated the information in some not-yet-defined entry format. <xref target="new-log-entry-types"/> further discusses security implications of new formats.</t>
        <t>A CA operator MAY operate multiple CA cosigners that all certify the same log in parallel. This may be useful when, e.g., rotating CA keys. In this case, each CA instance MUST have a distinct name. The CA operator's ACME server can return all CA cosignatures together in a single certificate, with the application protocol selecting the cosignatures to use. <xref target="use-in-tls"/> describes how this is done in TLS <xref target="RFC8446"/>.</t>
        <t>If the CA operator additionally operates a traditional X.509 CA, that CA key MUST be distinct from any Merkle Tree CA cosigner keys.</t>
      </section>
      <section anchor="publishing-logs">
        <name>Publishing Logs</name>
        <t><em>[[NOTE: This section is written to avoid depending on a specific serving protocol. The current expectation is that a Web PKI deployment would derive from <xref target="TLOG-TILES"/>, to match the direction of Certificate Transparency and pick up improvements made there.</em></t>
        <t><em>For now, we avoid a normative reference on <xref target="TLOG-TILES"/> and also capture the fact that the certificate construction is independent of the choice of protocol. Similar to how the CT ecosystem is migrating to a tiled interface, were someone to improve on <xref target="TLOG-TILES"/>, a PKI could migrate to that new protocol without impacting certificate verification.</em></t>
        <t><em>That said, this is purely a starting point for describing the design. We expect the scope of this document, and other related documents to adapt as the work evolves across the IETF, C2SP, Certificate Transparency, and other communities.]]</em></t>
        <t>Issuance logs are intended to be publicly accessible in some form, to allow monitors to detect misissued certificates.</t>
        <t>The access method does not affect certificate interoperability, so this document does not prescribe a specific protocol. An individual issuance log MAY be published in any form, provided other parties in the PKI are able to consume it. Relying parties SHOULD define log serving requirements, including the allowed protocols and expected availability, as part of their policies on which CAs to support. See also <xref target="log-availability"/>.</t>
        <t>For example, a log ecosystem could use <xref target="TLOG-TILES"/> to serve logs. <xref target="TLOG-TILES"/> improves on <xref target="RFC6962"/> and <xref target="RFC9162"/> by exposing the log as a collection of cacheable, immutable "tiles". This works well with a variety of common HTTP <xref target="RFC9110"/> serving architectures. It also allows log clients to request arbitrary tree nodes, so log clients can fetch the structures described in <xref target="subtrees"/>.</t>
        <section anchor="log-pruning">
          <name>Log Pruning</name>
          <t>Over time, an issuance log's entries will expire and likely be replaced with certificate renewals. As this happens, the total size of the log grows, even if the unexpired subset remains fixed. To mitigate this, issuance logs MAY be <em>pruned</em>, as described in this section.</t>
          <t>Pruning makes some prefix of the log unavailable, without changing the tree structure. It may be used to reduce the serving cost of long-lived logs, where any entries have long expired. <xref target="log-availability"/> discusses policies on when pruning may be permitted. This section discusses how it is done and the impact on log structure.</t>
          <t>An issuance log is pruned by updating its <em>minimum index</em> parameter (<xref target="log-parameters"/>). The minimum index is the index of the first log entry that the log publishes. (See <xref target="publishing-logs"/>.) It MUST be less than or equal to the tree size of the log's current checkpoint, and also satisfy any availability policies set by relying parties who trust the CA.</t>
          <t>An entry is said to be <em>available</em> if its index is greater than or equal to the minimum index. A checkpoint is said to be available if its tree size is greater than the minimum index. A subtree <tt>[start, end)</tt> is said to be available if <tt>end</tt> is greater than the minimum index.</t>
          <t>Log protocols MUST serve enough information to allow a log client to efficiently obtain the following:</t>
          <ul spacing="normal">
            <li>
              <t>Signatures over the latest checkpoint by the CA's cosigners (<xref target="certification-authority-cosigners"/>)</t>
            </li>
            <li>
              <t>Any individual available log entry (<xref target="log-entries"/>)</t>
            </li>
            <li>
              <t>The hash value of any available checkpoint</t>
            </li>
            <li>
              <t>An inclusion proof (<xref section="2.1.3" sectionFormat="of" target="RFC9162"/>) for any available entry to any containing checkpoint</t>
            </li>
            <li>
              <t>A consistency proof (<xref section="2.1.4" sectionFormat="of" target="RFC9162"/>) between any two available checkpoints</t>
            </li>
            <li>
              <t>The hash value of any available subtree (<xref target="subtrees"/>)</t>
            </li>
            <li>
              <t>A subtree inclusion proof (<xref target="subtree-inclusion-proofs"/>) for any available entry in any containing subtree</t>
            </li>
            <li>
              <t>A subtree consistency proof (<xref target="subtree-consistency-proofs"/>) between any available subtree to any containing checkpoint</t>
            </li>
          </ul>
          <t>Meeting these requirements requires a log to retain some information about pruned entries. Given a node <tt>[start, end)</tt> in the Merkle Tree, if <tt>end</tt> is less than or equal to the minimum index, the node's children MAY be discarded in favor of the node's hash.</t>
          <t><xref target="fig-prune-tree"/> shows an example pruned tree with 13 elements, where the minimum index is 7. It shows the original tree, followed by the pruned tree. The pruned tree depicts the nodes that MUST be available or computable. Note that entry 6 MAY be discarded, only the hash of entry 6 must be available.</t>
          <figure anchor="fig-prune-tree">
            <name>An example showing the minimum nodes that must be available after pruning</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="672" width="456" viewBox="0 0 456 672" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                  <path d="M 8,288 L 8,320" fill="none" stroke="black"/>
                  <path d="M 24,288 L 24,320" fill="none" stroke="black"/>
                  <path d="M 32,160 L 32,192" fill="none" stroke="black"/>
                  <path d="M 32,496 L 32,528" fill="none" stroke="black"/>
                  <path d="M 40,288 L 40,320" fill="none" stroke="black"/>
                  <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                  <path d="M 56,288 L 56,320" fill="none" stroke="black"/>
                  <path d="M 64,96 L 64,128" fill="none" stroke="black"/>
                  <path d="M 64,432 L 64,464" fill="none" stroke="black"/>
                  <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                  <path d="M 72,288 L 72,320" fill="none" stroke="black"/>
                  <path d="M 88,288 L 88,320" fill="none" stroke="black"/>
                  <path d="M 104,160 L 104,192" fill="none" stroke="black"/>
                  <path d="M 104,288 L 104,320" fill="none" stroke="black"/>
                  <path d="M 104,496 L 104,528" fill="none" stroke="black"/>
                  <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                  <path d="M 120,288 L 120,320" fill="none" stroke="black"/>
                  <path d="M 136,32 L 136,64" fill="none" stroke="black"/>
                  <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                  <path d="M 136,288 L 136,320" fill="none" stroke="black"/>
                  <path d="M 136,368 L 136,400" fill="none" stroke="black"/>
                  <path d="M 136,560 L 136,592" fill="none" stroke="black"/>
                  <path d="M 152,288 L 152,320" fill="none" stroke="black"/>
                  <path d="M 160,160 L 160,192" fill="none" stroke="black"/>
                  <path d="M 160,496 L 160,528" fill="none" stroke="black"/>
                  <path d="M 168,288 L 168,320" fill="none" stroke="black"/>
                  <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                  <path d="M 184,288 L 184,320" fill="none" stroke="black"/>
                  <path d="M 184,560 L 184,592" fill="none" stroke="black"/>
                  <path d="M 200,96 L 200,128" fill="none" stroke="black"/>
                  <path d="M 200,224 L 200,256" fill="none" stroke="black"/>
                  <path d="M 200,288 L 200,320" fill="none" stroke="black"/>
                  <path d="M 200,432 L 200,464" fill="none" stroke="black"/>
                  <path d="M 200,560 L 200,592" fill="none" stroke="black"/>
                  <path d="M 200,624 L 200,656" fill="none" stroke="black"/>
                  <path d="M 216,288 L 216,320" fill="none" stroke="black"/>
                  <path d="M 216,624 L 216,656" fill="none" stroke="black"/>
                  <path d="M 232,160 L 232,192" fill="none" stroke="black"/>
                  <path d="M 232,288 L 232,320" fill="none" stroke="black"/>
                  <path d="M 232,496 L 232,528" fill="none" stroke="black"/>
                  <path d="M 232,624 L 232,656" fill="none" stroke="black"/>
                  <path d="M 248,224 L 248,256" fill="none" stroke="black"/>
                  <path d="M 248,288 L 248,320" fill="none" stroke="black"/>
                  <path d="M 248,560 L 248,592" fill="none" stroke="black"/>
                  <path d="M 248,624 L 248,656" fill="none" stroke="black"/>
                  <path d="M 264,224 L 264,256" fill="none" stroke="black"/>
                  <path d="M 264,288 L 264,320" fill="none" stroke="black"/>
                  <path d="M 264,560 L 264,592" fill="none" stroke="black"/>
                  <path d="M 264,624 L 264,656" fill="none" stroke="black"/>
                  <path d="M 280,288 L 280,320" fill="none" stroke="black"/>
                  <path d="M 280,624 L 280,656" fill="none" stroke="black"/>
                  <path d="M 288,160 L 288,192" fill="none" stroke="black"/>
                  <path d="M 288,496 L 288,528" fill="none" stroke="black"/>
                  <path d="M 296,288 L 296,320" fill="none" stroke="black"/>
                  <path d="M 296,624 L 296,656" fill="none" stroke="black"/>
                  <path d="M 312,96 L 312,128" fill="none" stroke="black"/>
                  <path d="M 312,288 L 312,320" fill="none" stroke="black"/>
                  <path d="M 312,432 L 312,464" fill="none" stroke="black"/>
                  <path d="M 312,624 L 312,656" fill="none" stroke="black"/>
                  <path d="M 320,224 L 320,256" fill="none" stroke="black"/>
                  <path d="M 320,560 L 320,592" fill="none" stroke="black"/>
                  <path d="M 328,288 L 328,320" fill="none" stroke="black"/>
                  <path d="M 328,624 L 328,656" fill="none" stroke="black"/>
                  <path d="M 336,224 L 336,256" fill="none" stroke="black"/>
                  <path d="M 336,560 L 336,592" fill="none" stroke="black"/>
                  <path d="M 352,288 L 352,320" fill="none" stroke="black"/>
                  <path d="M 352,624 L 352,656" fill="none" stroke="black"/>
                  <path d="M 368,160 L 368,192" fill="none" stroke="black"/>
                  <path d="M 368,288 L 368,320" fill="none" stroke="black"/>
                  <path d="M 368,496 L 368,528" fill="none" stroke="black"/>
                  <path d="M 368,624 L 368,656" fill="none" stroke="black"/>
                  <path d="M 376,32 L 376,64" fill="none" stroke="black"/>
                  <path d="M 376,368 L 376,400" fill="none" stroke="black"/>
                  <path d="M 392,288 L 392,320" fill="none" stroke="black"/>
                  <path d="M 392,624 L 392,656" fill="none" stroke="black"/>
                  <path d="M 400,224 L 400,256" fill="none" stroke="black"/>
                  <path d="M 400,560 L 400,592" fill="none" stroke="black"/>
                  <path d="M 408,288 L 408,320" fill="none" stroke="black"/>
                  <path d="M 408,624 L 408,656" fill="none" stroke="black"/>
                  <path d="M 424,136 L 424,272" fill="none" stroke="black"/>
                  <path d="M 424,472 L 424,608" fill="none" stroke="black"/>
                  <path d="M 432,288 L 432,320" fill="none" stroke="black"/>
                  <path d="M 432,624 L 432,656" fill="none" stroke="black"/>
                  <path d="M 448,96 L 448,128" fill="none" stroke="black"/>
                  <path d="M 448,432 L 448,464" fill="none" stroke="black"/>
                  <path d="M 136,32 L 376,32" fill="none" stroke="black"/>
                  <path d="M 136,64 L 376,64" fill="none" stroke="black"/>
                  <path d="M 64,96 L 200,96" fill="none" stroke="black"/>
                  <path d="M 312,96 L 448,96" fill="none" stroke="black"/>
                  <path d="M 64,128 L 200,128" fill="none" stroke="black"/>
                  <path d="M 312,128 L 448,128" fill="none" stroke="black"/>
                  <path d="M 32,160 L 104,160" fill="none" stroke="black"/>
                  <path d="M 160,160 L 232,160" fill="none" stroke="black"/>
                  <path d="M 288,160 L 368,160" fill="none" stroke="black"/>
                  <path d="M 32,192 L 104,192" fill="none" stroke="black"/>
                  <path d="M 160,192 L 232,192" fill="none" stroke="black"/>
                  <path d="M 288,192 L 368,192" fill="none" stroke="black"/>
                  <path d="M 8,224 L 56,224" fill="none" stroke="black"/>
                  <path d="M 72,224 L 120,224" fill="none" stroke="black"/>
                  <path d="M 136,224 L 184,224" fill="none" stroke="black"/>
                  <path d="M 200,224 L 248,224" fill="none" stroke="black"/>
                  <path d="M 264,224 L 320,224" fill="none" stroke="black"/>
                  <path d="M 336,224 L 400,224" fill="none" stroke="black"/>
                  <path d="M 8,256 L 56,256" fill="none" stroke="black"/>
                  <path d="M 72,256 L 120,256" fill="none" stroke="black"/>
                  <path d="M 136,256 L 184,256" fill="none" stroke="black"/>
                  <path d="M 200,256 L 248,256" fill="none" stroke="black"/>
                  <path d="M 264,256 L 320,256" fill="none" stroke="black"/>
                  <path d="M 336,256 L 400,256" fill="none" stroke="black"/>
                  <path d="M 8,286 L 24,286" fill="none" stroke="black"/>
                  <path d="M 8,290 L 24,290" fill="none" stroke="black"/>
                  <path d="M 40,286 L 56,286" fill="none" stroke="black"/>
                  <path d="M 40,290 L 56,290" fill="none" stroke="black"/>
                  <path d="M 72,286 L 88,286" fill="none" stroke="black"/>
                  <path d="M 72,290 L 88,290" fill="none" stroke="black"/>
                  <path d="M 104,286 L 120,286" fill="none" stroke="black"/>
                  <path d="M 104,290 L 120,290" fill="none" stroke="black"/>
                  <path d="M 136,286 L 152,286" fill="none" stroke="black"/>
                  <path d="M 136,290 L 152,290" fill="none" stroke="black"/>
                  <path d="M 168,286 L 184,286" fill="none" stroke="black"/>
                  <path d="M 168,290 L 184,290" fill="none" stroke="black"/>
                  <path d="M 200,286 L 216,286" fill="none" stroke="black"/>
                  <path d="M 200,290 L 216,290" fill="none" stroke="black"/>
                  <path d="M 232,286 L 248,286" fill="none" stroke="black"/>
                  <path d="M 232,290 L 248,290" fill="none" stroke="black"/>
                  <path d="M 264,286 L 280,286" fill="none" stroke="black"/>
                  <path d="M 264,290 L 280,290" fill="none" stroke="black"/>
                  <path d="M 296,286 L 312,286" fill="none" stroke="black"/>
                  <path d="M 296,290 L 312,290" fill="none" stroke="black"/>
                  <path d="M 328,286 L 352,286" fill="none" stroke="black"/>
                  <path d="M 328,290 L 352,290" fill="none" stroke="black"/>
                  <path d="M 368,286 L 392,286" fill="none" stroke="black"/>
                  <path d="M 368,290 L 392,290" fill="none" stroke="black"/>
                  <path d="M 408,286 L 432,286" fill="none" stroke="black"/>
                  <path d="M 408,290 L 432,290" fill="none" stroke="black"/>
                  <path d="M 8,318 L 24,318" fill="none" stroke="black"/>
                  <path d="M 8,322 L 24,322" fill="none" stroke="black"/>
                  <path d="M 40,318 L 56,318" fill="none" stroke="black"/>
                  <path d="M 40,322 L 56,322" fill="none" stroke="black"/>
                  <path d="M 72,318 L 88,318" fill="none" stroke="black"/>
                  <path d="M 72,322 L 88,322" fill="none" stroke="black"/>
                  <path d="M 104,318 L 120,318" fill="none" stroke="black"/>
                  <path d="M 104,322 L 120,322" fill="none" stroke="black"/>
                  <path d="M 136,318 L 152,318" fill="none" stroke="black"/>
                  <path d="M 136,322 L 152,322" fill="none" stroke="black"/>
                  <path d="M 168,318 L 184,318" fill="none" stroke="black"/>
                  <path d="M 168,322 L 184,322" fill="none" stroke="black"/>
                  <path d="M 200,318 L 216,318" fill="none" stroke="black"/>
                  <path d="M 200,322 L 216,322" fill="none" stroke="black"/>
                  <path d="M 232,318 L 248,318" fill="none" stroke="black"/>
                  <path d="M 232,322 L 248,322" fill="none" stroke="black"/>
                  <path d="M 264,318 L 280,318" fill="none" stroke="black"/>
                  <path d="M 264,322 L 280,322" fill="none" stroke="black"/>
                  <path d="M 296,318 L 312,318" fill="none" stroke="black"/>
                  <path d="M 296,322 L 312,322" fill="none" stroke="black"/>
                  <path d="M 328,318 L 352,318" fill="none" stroke="black"/>
                  <path d="M 328,322 L 352,322" fill="none" stroke="black"/>
                  <path d="M 368,318 L 392,318" fill="none" stroke="black"/>
                  <path d="M 368,322 L 392,322" fill="none" stroke="black"/>
                  <path d="M 408,318 L 432,318" fill="none" stroke="black"/>
                  <path d="M 408,322 L 432,322" fill="none" stroke="black"/>
                  <path d="M 136,368 L 376,368" fill="none" stroke="black"/>
                  <path d="M 136,400 L 376,400" fill="none" stroke="black"/>
                  <path d="M 64,432 L 200,432" fill="none" stroke="black"/>
                  <path d="M 312,432 L 448,432" fill="none" stroke="black"/>
                  <path d="M 64,464 L 200,464" fill="none" stroke="black"/>
                  <path d="M 312,464 L 448,464" fill="none" stroke="black"/>
                  <path d="M 32,496 L 104,496" fill="none" stroke="black"/>
                  <path d="M 160,496 L 232,496" fill="none" stroke="black"/>
                  <path d="M 288,496 L 368,496" fill="none" stroke="black"/>
                  <path d="M 32,528 L 104,528" fill="none" stroke="black"/>
                  <path d="M 160,528 L 232,528" fill="none" stroke="black"/>
                  <path d="M 288,528 L 368,528" fill="none" stroke="black"/>
                  <path d="M 136,560 L 184,560" fill="none" stroke="black"/>
                  <path d="M 200,560 L 248,560" fill="none" stroke="black"/>
                  <path d="M 264,560 L 320,560" fill="none" stroke="black"/>
                  <path d="M 336,560 L 400,560" fill="none" stroke="black"/>
                  <path d="M 136,592 L 184,592" fill="none" stroke="black"/>
                  <path d="M 200,592 L 248,592" fill="none" stroke="black"/>
                  <path d="M 264,592 L 320,592" fill="none" stroke="black"/>
                  <path d="M 336,592 L 400,592" fill="none" stroke="black"/>
                  <path d="M 200,624 L 216,624" fill="none" stroke="black"/>
                  <path d="M 232,622 L 248,622" fill="none" stroke="black"/>
                  <path d="M 232,626 L 248,626" fill="none" stroke="black"/>
                  <path d="M 264,622 L 280,622" fill="none" stroke="black"/>
                  <path d="M 264,626 L 280,626" fill="none" stroke="black"/>
                  <path d="M 296,622 L 312,622" fill="none" stroke="black"/>
                  <path d="M 296,626 L 312,626" fill="none" stroke="black"/>
                  <path d="M 328,622 L 352,622" fill="none" stroke="black"/>
                  <path d="M 328,626 L 352,626" fill="none" stroke="black"/>
                  <path d="M 368,622 L 392,622" fill="none" stroke="black"/>
                  <path d="M 368,626 L 392,626" fill="none" stroke="black"/>
                  <path d="M 408,622 L 432,622" fill="none" stroke="black"/>
                  <path d="M 408,626 L 432,626" fill="none" stroke="black"/>
                  <path d="M 200,656 L 216,656" fill="none" stroke="black"/>
                  <path d="M 232,654 L 248,654" fill="none" stroke="black"/>
                  <path d="M 232,658 L 248,658" fill="none" stroke="black"/>
                  <path d="M 264,654 L 280,654" fill="none" stroke="black"/>
                  <path d="M 264,658 L 280,658" fill="none" stroke="black"/>
                  <path d="M 296,654 L 312,654" fill="none" stroke="black"/>
                  <path d="M 296,658 L 312,658" fill="none" stroke="black"/>
                  <path d="M 328,654 L 352,654" fill="none" stroke="black"/>
                  <path d="M 328,658 L 352,658" fill="none" stroke="black"/>
                  <path d="M 368,654 L 392,654" fill="none" stroke="black"/>
                  <path d="M 368,658 L 392,658" fill="none" stroke="black"/>
                  <path d="M 408,654 L 432,654" fill="none" stroke="black"/>
                  <path d="M 408,658 L 432,658" fill="none" stroke="black"/>
                  <g class="text">
                    <text x="248" y="52">[0,</text>
                    <text x="280" y="52">13)</text>
                    <text x="160" y="84">/</text>
                    <text x="352" y="84">\</text>
                    <text x="120" y="116">[0,</text>
                    <text x="148" y="116">8)</text>
                    <text x="368" y="116">[8,</text>
                    <text x="400" y="116">13)</text>
                    <text x="72" y="148">/</text>
                    <text x="192" y="148">\</text>
                    <text x="336" y="148">/</text>
                    <text x="56" y="180">[0,</text>
                    <text x="84" y="180">4)</text>
                    <text x="184" y="180">[4,</text>
                    <text x="212" y="180">8)</text>
                    <text x="312" y="180">[8,</text>
                    <text x="344" y="180">12)</text>
                    <text x="40" y="212">/</text>
                    <text x="96" y="212">\</text>
                    <text x="168" y="212">/</text>
                    <text x="224" y="212">\</text>
                    <text x="304" y="212">/</text>
                    <text x="360" y="212">\</text>
                    <text x="32" y="244">[0,2)</text>
                    <text x="96" y="244">[2,4)</text>
                    <text x="160" y="244">[4,6)</text>
                    <text x="224" y="244">[6,8)</text>
                    <text x="292" y="244">[8,10)</text>
                    <text x="368" y="244">[10,12)</text>
                    <text x="24" y="276">/</text>
                    <text x="40" y="276">\</text>
                    <text x="88" y="276">/</text>
                    <text x="104" y="276">\</text>
                    <text x="152" y="276">/</text>
                    <text x="168" y="276">\</text>
                    <text x="216" y="276">/</text>
                    <text x="232" y="276">\</text>
                    <text x="280" y="276">/</text>
                    <text x="296" y="276">\</text>
                    <text x="352" y="276">/</text>
                    <text x="368" y="276">\</text>
                    <text x="16" y="308">0</text>
                    <text x="48" y="308">1</text>
                    <text x="80" y="308">2</text>
                    <text x="112" y="308">3</text>
                    <text x="144" y="308">4</text>
                    <text x="176" y="308">5</text>
                    <text x="208" y="308">6</text>
                    <text x="240" y="308">7</text>
                    <text x="272" y="308">8</text>
                    <text x="304" y="308">9</text>
                    <text x="340" y="308">10</text>
                    <text x="380" y="308">11</text>
                    <text x="420" y="308">12</text>
                    <text x="248" y="388">[0,</text>
                    <text x="280" y="388">13)</text>
                    <text x="160" y="420">/</text>
                    <text x="352" y="420">\</text>
                    <text x="120" y="452">[0,</text>
                    <text x="148" y="452">8)</text>
                    <text x="368" y="452">[8,</text>
                    <text x="400" y="452">13)</text>
                    <text x="72" y="484">/</text>
                    <text x="192" y="484">\</text>
                    <text x="336" y="484">/</text>
                    <text x="56" y="516">[0,</text>
                    <text x="84" y="516">4)</text>
                    <text x="184" y="516">[4,</text>
                    <text x="212" y="516">8)</text>
                    <text x="312" y="516">[8,</text>
                    <text x="344" y="516">12)</text>
                    <text x="168" y="548">/</text>
                    <text x="224" y="548">\</text>
                    <text x="304" y="548">/</text>
                    <text x="360" y="548">\</text>
                    <text x="160" y="580">[4,6)</text>
                    <text x="224" y="580">[6,8)</text>
                    <text x="292" y="580">[8,10)</text>
                    <text x="368" y="580">[10,12)</text>
                    <text x="216" y="612">/</text>
                    <text x="232" y="612">\</text>
                    <text x="280" y="612">/</text>
                    <text x="296" y="612">\</text>
                    <text x="352" y="612">/</text>
                    <text x="368" y="612">\</text>
                    <text x="208" y="644">6</text>
                    <text x="240" y="644">7</text>
                    <text x="272" y="644">8</text>
                    <text x="304" y="644">9</text>
                    <text x="340" y="644">10</text>
                    <text x="380" y="644">11</text>
                    <text x="420" y="644">12</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
                +-----------------------------+
                |            [0, 13)          |
                +-----------------------------+
                   /                       \
       +----------------+             +----------------+
       |     [0, 8)     |             |     [8, 13)    |
       +----------------+             +----------------+
        /              \                 /          |
   +--------+      +--------+      +---------+      |
   | [0, 4) |      | [4, 8) |      | [8, 12) |      |
   +--------+      +--------+      +---------+      |
    /      \        /      \         /      \       |
+-----+ +-----+ +-----+ +-----+ +------+ +-------+  |
|[0,2)| |[2,4)| |[4,6)| |[6,8)| |[8,10)| |[10,12)|  |
+-----+ +-----+ +-----+ +-----+ +------+ +-------+  |
  / \     / \     / \     / \     / \      / \      |
+=+ +=+ +=+ +=+ +=+ +=+ +=+ +=+ +=+ +=+ +==+ +==+ +==+
|0| |1| |2| |3| |4| |5| |6| |7| |8| |9| |10| |11| |12|
+=+ +=+ +=+ +=+ +=+ +=+ +=+ +=+ +=+ +=+ +==+ +==+ +==+


                +-----------------------------+
                |            [0, 13)          |
                +-----------------------------+
                   /                       \
       +----------------+             +----------------+
       |     [0, 8)     |             |     [8, 13)    |
       +----------------+             +----------------+
        /              \                 /          |
   +--------+      +--------+      +---------+      |
   | [0, 4) |      | [4, 8) |      | [8, 12) |      |
   +--------+      +--------+      +---------+      |
                    /      \         /      \       |
                +-----+ +-----+ +------+ +-------+  |
                |[4,6)| |[6,8)| |[8,10)| |[10,12)|  |
                +-----+ +-----+ +------+ +-------+  |
                          / \     / \      / \      |
                        +-+ +=+ +=+ +=+ +==+ +==+ +==+
                        |6| |7| |8| |9| |10| |11| |12|
                        +-+ +=+ +=+ +=+ +==+ +==+ +==+
]]></artwork>
            </artset>
          </figure>
          <t>Logs MAY retain additional nodes, or expect log clients to compute required nodes from other nodes. For example, in <xref target="fig-prune-tree"/>, the log's serving protocol MAY instead serve <tt>[0, 2)</tt> and <tt>[2, 4)</tt>, with the log client computing <tt>[0, 4)</tt> from those values.</t>
        </section>
      </section>
    </section>
    <section anchor="certificates">
      <name>Certificates</name>
      <t>This section defines how to construct Merkle Tree Certificates, which are X.509 Certificates <xref target="RFC5280"/> that assert the information in an issuance log entry. A Merkle Tree Certificate is constructed from the following:</t>
      <ul spacing="normal">
        <li>
          <t>A TBSCertificateLogEntry (<xref target="log-entries"/>) contained in the issuance log (<xref target="issuance-logs"/>)</t>
        </li>
        <li>
          <t>A subject public key whose hash matches the TBSCertificateLogEntry</t>
        </li>
        <li>
          <t>A subtree (<xref target="subtrees"/>) that contains the log entry</t>
        </li>
        <li>
          <t>Zero or more signatures (<xref target="cosigners"/>) over the subtree, which together satisfy relying party requirements (<xref target="trusted-cosigners"/>)</t>
        </li>
      </ul>
      <t>For any given TBSCertificateLogEntry, there are multiple possible certificates that may prove the entry is certified by the CA and publicly logged, varying by choice of subtree and signatures. <xref target="certificate-format"/> defines how the certificate is constructed based on those choices. <xref target="full-certificates"/> and <xref target="signatureless-certificates"/> define two profiles of Merkle Tree Certificates, full certificates and signatureless certificates, and how to select the subtree and signatures for them.</t>
      <section anchor="certificate-format">
        <name>Certificate Format</name>
        <t>The information is encoded in an X.509 Certificate <xref target="RFC5280"/> as follows:</t>
        <t>The TBSCertificate's <tt>version</tt>, <tt>issuer</tt>, <tt>validity</tt>, <tt>subject</tt>, <tt>issuerUniqueID</tt>, <tt>subjectUniqueID</tt>, and <tt>extensions</tt> MUST match the corresponding fields of the TBSCertificateLogEntry. Per <xref target="log-entries"/>, this means <tt>issuer</tt> MUST be the issuance log's log ID as an X.509 distinguished name, as described in <xref target="log-ids"/>.</t>
        <t>The TBSCertificate's <tt>serialNumber</tt> MUST contain the zero-based index of the TBSCertificateLogEntry in the log. <xref section="4.1.2.2" sectionFormat="of" target="RFC5280"/> forbids zero as a serial number, but <xref target="log-entries"/> defines a <tt>null_entry</tt> type for use in entry zero, so the index will be positive. This encoding is intended to avoid implementation errors by having the serial numbers and indices off by one.</t>
        <t>The TBSCertificate's <tt>subjectPublicKeyInfo</tt> contains the specified public key. Its hash MUST match the TBSCertificateLogEntry's <tt>subjectPublicKeyInfoHash</tt>.</t>
        <t>The TBSCertificate's <tt>signature</tt> and the Certificate's <tt>signatureAlgorithm</tt> MUST contain an AlgorithmIdentifier whose <tt>algorithm</tt> is id-alg-mtcProof, defined below, and whose <tt>parameters</tt> is omitted.</t>
        <sourcecode type="asn.1"><![CDATA[
id-alg-mtcProof OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) algorithms(6) TBD}
]]></sourcecode>
        <t>For initial experimentation, early implementations of this design will use the OID 1.3.6.1.4.1.44363.47.0 instead of <tt>id-alg-mtcProof</tt>.</t>
        <t>The <tt>signatureValue</tt> contains an MTCProof structure, defined below using the TLS presentation language (<xref section="3" sectionFormat="of" target="RFC8446"/>):</t>
        <sourcecode type="tls-presentation"><![CDATA[
opaque HashValue[HASH_SIZE];

struct {
    TrustAnchorID cosigner_id;
    opaque signature<0..2^16-1>;
} MTCSignature;

struct {
    uint64 start;
    uint64 end;
    HashValue inclusion_proof<0..2^16-1>;
    MTCSignature signatures<0..2^16-1>;
} MTCProof;
]]></sourcecode>
        <t><tt>start</tt> and <tt>end</tt> MUST contain the corresponding parameters of the chosen subtree. <tt>inclusion_proof</tt> MUST contain a subtree inclusion proof (<xref target="subtree-inclusion-proofs"/>) for the log entry and the subtree. <tt>signatures</tt> contains the chosen subtree signatures. In each signature, <tt>cosigner_id</tt> contains the cosigner ID (<xref target="cosigners"/>) in its binary representation (<xref section="3" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>), and <tt>signature</tt> contains the signature value as described in <xref target="signature-format"/>.</t>
        <t>The MTCProof is encoded into the <tt>signatureValue</tt> with no additional ASN.1 wrapping. The most significant bit of the first octet of the signature value SHALL become the first bit of the bit string, and so on through the least significant bit of the last octet of the signature value, which SHALL become the last bit of the bit string.</t>
      </section>
      <section anchor="full-certificates">
        <name>Full Certificates</name>
        <t>A <em>full certificate</em> is a Merkle Tree certificate which contains sufficient signatures to allow a relying party to trust the choice of subtree, without any predistributed information beyond the cosigner(s) parameters. Full certificates can be issued without significant processing delay.</t>
        <t>When issuing a certificate, the CA first adds the TBSCertificateLogEntry to its issuance log. It then schedules a job to construct a checkpoint and collect cosignatures. The job proceeds as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>The CA signs the checkpoint with its key(s) (<xref target="certification-authority-cosigners"/>).</t>
          </li>
          <li>
            <t>Using the procedure in <xref target="arbitrary-intervals"/>, the CA determines the two subtrees that cover the entries added between this checkpoint and the most recent checkpoint.</t>
          </li>
          <li>
            <t>The CA signs each subtree with its key(s) (<xref target="cosigners"/>).</t>
          </li>
          <li>
            <t>The CA requests sufficient checkpoint cosignatures (<xref target="cosigners"/>) from external cosigners to meet relying party requirements (<xref target="trusted-cosigners"/>).</t>
          </li>
          <li>
            <t>The CA requests subtree cosignatures (<xref target="requesting-subtree-signatures"/>) from the cosigners above.</t>
          </li>
          <li>
            <t>For each certificate in the interval, the CA constructs certificates (<xref target="certificate-format"/>) using the covering subtree.</t>
          </li>
        </ol>
        <t>Steps 4 and 5 are analogous to requesting SCTs from CT logs in Certificate Transparency, except that a single run of this job collects signatures for many certificates at once. The CA MAY request signatures from a redundant set of cosigners and select the ones that complete first.</t>
        <t>This document does not prescribe the specific cosigner roles, or a particular protocol for requesting cosignatures. Protocols for cosigners MAY vary depending on the needs for that cosigner. A consistency-only cosigner, such as <xref target="TLOG-WITNESS"/>, might only require a checkpoint signature and consistency proof, while a mirroring cosigner, such as <xref target="TLOG-MIRROR"/> might require the full log contents.</t>
        <t>A cosigner MAY expose a private interface for the CA, to reduce denial-of-service risk, or a cosigner MAY expose a public interface for other parties to request additional cosignatures. The latter may be useful if a relying party requires a cosigner that the CA does not communicate with. In this case, an authenticating party MAY request cosignatures and add them to the certificate. However, it is RECOMMENDED that the CA collect cosignatures for the authenticating party. This simplifies deployment, as relying party policies change over time.</t>
        <t>This document does not place any requirements on how frequently this job runs. More frequent runs results in lower issuance delay, but higher signing overhead. It is RECOMMENDED that CAs run at most one instance of this job at a time, starting the next instance after the previous one completes. A single run collects signatures for all entries since the most recent checkpoint, so there is little benefit to overlapping them. Less frequent runs may also aid relying parties that wish to directly audit signatures, as described in Section 5.2 of <xref target="AuditingRevisited"/>, though this document does not define such a system.</t>
      </section>
      <section anchor="signatureless-certificates">
        <name>Signatureless Certificates</name>
        <t>A <em>signatureless certificate</em> is a Merkle Tree certificate which contains no signatures and instead assumes the relying party had predistributed information about which subtrees were trusted. Signatureless certificates are an optional size optimization. They require a processing delay to construct, and only work in a sufficiently up-to-date relying party. Authenticating parties thus SHOULD deploy a corresponding full certificate alongside any signatureless certificate, and use some application-protocol-specific mechanism to select between the two. <xref target="use-in-tls"/> discusses such a mechanism for TLS <xref target="RFC8446"/>.</t>
        <section anchor="landmarks">
          <name>Landmarks</name>
          <t>A signatureless certificate is constructed based on a <em>landmark sequence</em>, which is a sequence of <em>landmarks</em>. Landmarks are agreed-upon tree sizes across the ecosystem for optimizing certificates. Landmarks SHOULD be allocated by the CA, but they can also be allocated by some other coordinating party. It is possible, but NOT RECOMMENDED, for multiple landmark sequences to exist per CA. Landmarks are allocated to balance minimizing the delay in obtaining a signatureless certificate with minimizing the size of the relying party's predistributed state.</t>
          <t>A landmark sequence has the following fixed parameters:</t>
          <ul spacing="normal">
            <li>
              <t><tt>base_id</tt>: An OID arc for trust anchor IDs of individual landmarks</t>
            </li>
            <li>
              <t><tt>max_landmarks</tt>: A positive integer, describing the maximum number of landmarks that may contain unexpired certificates at any time</t>
            </li>
            <li>
              <t><tt>landmark_url</tt>: Some URL to fetch the current list of landmarks</t>
            </li>
          </ul>
          <t>Landmarks are numbered consecutively from zero. Each landmark has a trust anchor ID, determined by appending the landmark number to <tt>base_id</tt>. For example, the trust anchor ID for landmark 42 of a sequence with <tt>base_id</tt> of <tt>32473.1</tt> would be <tt>32473.1.42</tt>.</t>
          <t>Each landmark specifies a tree size. The first landmark, numbered zero, is always a tree size of zero. The sequence of tree sizes MUST be append-only and monotonically increasing.</t>
          <t>Landmarks determine <em>landmark subtrees</em>: for each landmark, other than number zero, let <tt>tree_size</tt> be the landmark's tree size and <tt>prev_tree_size</tt> be that of the previous landmark. As described in <xref target="arbitrary-intervals"/>, select the one or two subtrees that cover <tt>[prev_tree_size, tree_size)</tt>. Each of those subtrees is a landmark subtree.</t>
          <t>The most recent <tt>max_landmarks</tt> landmarks are said to be <em>active</em>. Landmarks MUST be allocated such that, at any given time, only active landmarks contain unexpired certificates. The active landmark subtrees are those determined by the active landmarks. There are at most <tt>2 * max_landmarks</tt> active landmark subtrees at any time. Every unexpired entry will be contained in one or more landmark subtree, or between the last landmark subtree and the latest checkpoint. Active landmark subtrees are predistributed to the relying party as trusted subtrees, as described in <xref target="trusted-subtrees"/>.</t>
          <t>It is RECOMMENDED that landmarks be allocated following the procedure described in <xref target="allocating-landmarks"/>. If landmarks are allocated incorrectly (e.g. past landmarks change, or <tt>max_landmarks</tt> is inaccurate), there are no security consequences, but some older certificates may fail to validate.</t>
          <t>Relying parties will locally retain up to <tt>2 * max_landmarks</tt> hashes (<xref target="trusted-subtrees"/>) per CA, so <tt>max_landmarks</tt> should be set to balance the delay between landmarks and the amount of state the relying party must maintain. Using the recommended procedure above, a CA with a maximum certificate lifetime of 7 days, allocating a landmark every hour, will have a <tt>max_landmarks</tt> of 168. The client state is then 336 hashes, or 10,752 bytes with SHA-256.</t>
          <t><tt>landmark_url</tt> MUST serve a resource with <tt>Content-Type: text/plain; charset=utf-8</tt> and the following lines. Each line MUST be terminated by a newline character (U+000A):</t>
          <ul spacing="normal">
            <li>
              <t>Two space-separated non-negative decimal integers: <tt>&lt;last_landmark&gt; &lt;num_active_landmarks&gt;</tt>.
This line MUST satisfy the following, otherwise it is invalid:
              </t>
              <ul spacing="normal">
                <li>
                  <t><tt>num_active_landmarks &lt;= max_landmarks</tt></t>
                </li>
                <li>
                  <t><tt>num_active_landmarks &lt;= last_landmark</tt></t>
                </li>
              </ul>
            </li>
            <li>
              <t><tt>num_active_landmarks + 1</tt> lines each containing a single non-negative decimal integer, containing a tree size. Numbered from zero to <tt>num_active_landmarks</tt>, line <tt>i</tt> contains the tree size for landmark <tt>last_landmark - i</tt>. The integers MUST be monotonically decreasing and lower or equal to the log's latest tree size.</t>
            </li>
          </ul>
        </section>
        <section anchor="allocating-landmarks">
          <name>Allocating Landmarks</name>
          <t>It is RECOMMENDED that landmarks be allocated using the following procedure:</t>
          <ol spacing="normal" type="1"><li>
              <t>Select some <tt>time_between_landmarks</tt> duration. Define a series of consecutive, non-overlapping time intervals, each of duration <tt>time_between_landmarks</tt>.</t>
            </li>
            <li>
              <t>At most once per time interval, append the latest checkpoint tree size to the landmark sequence if it is greater than the last landmark's tree size.</t>
            </li>
          </ol>
          <t>To ensure that only active landmarks contain unexpired certificates, set <tt>max_landmarks</tt> to <tt>ceil(max_cert_lifetime / time_between_landmarks) + 1</tt>, where <tt>max_cert_lifetime</tt> is the CA's maximum certificate lifetime.</t>
        </section>
        <section anchor="constructing-signatureless-certificates">
          <name>Constructing Signatureless Certificates</name>
          <t>Given a TBSCertificateLogEntry in the issuance log and a landmark sequence, a signatureless certificate is constructed as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Wait for the first landmark to be allocated that contains the entry.</t>
            </li>
            <li>
              <t>Determine the landmark's subtrees and select the one that contains the entry.</t>
            </li>
            <li>
              <t>Construct a certificate (<xref target="certificate-format"/>) using the selected subtree and no signatures.</t>
            </li>
          </ol>
          <t>Before sending this certificate, the authenticating party SHOULD obtain some application-protocol-specific signal that implies the relying party has been configured with the corresponding landmark. (<xref target="trusted-subtrees"/> defines how relying parties are configured.) The trust anchor ID of the landmark may be used as an efficient identifier in the application protocol. <xref target="use-in-tls"/> discusses how to do this in TLS <xref target="RFC8446"/>.</t>
        </section>
      </section>
      <section anchor="size-estimates">
        <name>Size Estimates</name>
        <t>The inclusion proofs in full and signatureless certificates scale logarithmically with the size of the subtree. These sizes can be estimated with the CA's issuance rate. The byte counts below assume the issuance log's hash function is SHA-256.</t>
        <t>Some organizations have published statistics which can be used to estimate this rate for the Web PKI. As of June 9th, 2025:</t>
        <ul spacing="normal">
          <li>
            <t><xref target="LetsEncrypt"/> reported around 558,000,000 active certificates for a single CA</t>
          </li>
          <li>
            <t><xref target="MerkleTown"/> reported around 2,100,000,000 unexpired certificates in CT logs, across all CAs</t>
          </li>
          <li>
            <t><xref target="MerkleTown"/> reported an issuance rate of around 444,000 certificates per hour, across all CAs</t>
          </li>
        </ul>
        <t>The current issuance rate across the Web PKI may not necessarily be representative of the Web PKI after a transition to short-lived certificates. Assuming a certificate lifetime of 7 days, and that subscribers will update their certificates 75% of the way through their lifetime (see <xref target="certificate-renewal"/>), every certificate will be reissued every 126 hours. This gives issuance rate estimates of around 4,400,000 certificates per hour and 17,000,000 certificates per hour, for the first two values above. Note the larger estimate is across all CAs, while subtrees would only span one CA.</t>
        <t>Using the per-CA short lifetime estimate, if the CA mints a checkpoint every 2 seconds, full certificate subtrees will span around 2,500 certificates, leading to 12 hashes in the inclusion proof, or 384 bytes. Full certificates additionally must carry a sufficient set of signatures to meet relying party requirements.</t>
        <t>If a new landmark is allocated every hour, signatureless certificate subtrees will span around 4,400,000 certificates, leading to 23 hashes in the inclusion proof, giving an inclusion proof size of 736 bytes, with no signatures. This is significantly smaller than a single ML-DSA-44 signature, 2,420 bytes, and almost ten times smaller than the three ML-DSA-44 signatures necessary to include post-quantum SCTs.</t>
        <t>The proof sizes grow logarithmically, so 32 hashes, or 1024 bytes, is sufficient for subtrees of up to 2^32 (4,294,967,296) certificates.</t>
      </section>
    </section>
    <section anchor="relying-parties">
      <name>Relying Parties</name>
      <t>This section discusses how relying parties verify Merkle Tree Certificates.</t>
      <section anchor="trust-anchors">
        <name>Trust Anchors</name>
        <t>In order to accept certificates from a Merkle Tree CA, a relying party MUST be configured with:</t>
        <ul spacing="normal">
          <li>
            <t>The log ID (<xref target="log-ids"/>)</t>
          </li>
          <li>
            <t>A set of supported cosigners, as pairs of cosigner ID and public key</t>
          </li>
          <li>
            <t>A policy on which combinations of cosigners to accept in a certificate (<xref target="trusted-cosigners"/>)</t>
          </li>
          <li>
            <t>An optional list of trusted subtrees that are known to be consistent with the relying party's cosigner requirements (<xref target="trusted-subtrees"/>)</t>
          </li>
          <li>
            <t>A list of revoked ranges of indices (<xref target="revocation-by-index"/>)</t>
          </li>
        </ul>
        <t>[[TODO: Define some representation for this. In a trust anchor, there's a lot of room for flexibility in what the client stores. In principle, we could even encode some of this information in an X.509 intermediate certificate, if an application wishes to use this with a delegation model with intermediates, though the security story becomes more complex. Decide how/whether to do that.]]</t>
      </section>
      <section anchor="verifying-certificate-signatures">
        <name>Verifying Certificate Signatures</name>
        <t>When verifying the signature on an X.509 certificate (Step (a)(1) of <xref section="6.1.3" sectionFormat="of" target="RFC5280"/>) whose issuer is a Merkle Tree CA, the relying party performs the following procedure:</t>
        <ol spacing="normal" type="1"><li>
            <t>Check that the TBSCertificate's <tt>signature</tt> field is <tt>id-mtc-proof</tt> with omitted parameters. If either check fails, abort this process and fail verification.</t>
          </li>
          <li>
            <t>Let <tt>index</tt> be the certificate's serial number. Check that <tt>start &lt;= index &lt; end</tt>, and that <tt>[start, end)</tt> describes a subtree per <xref target="definition-of-a-subtree"/>. If either check fails, abort this process and fail verification.</t>
          </li>
          <li>
            <t>If <tt>index</tt> is contained in one of the relying party's revoked ranges (<xref target="revocation-by-index"/>), abort this process and fail verification.</t>
          </li>
          <li>
            <t>Construct a TBSCertificateLogEntry as follows:
            </t>
            <ol spacing="normal" type="1"><li>
                <t>Copy the <tt>version</tt>, <tt>issuer</tt>, <tt>validity</tt>, <tt>subject</tt>, <tt>issuerUniqueID</tt>, <tt>subjectUniqueID</tt>, and <tt>extensions</tt> fields from the TBSCertificate.</t>
              </li>
              <li>
                <t>Set <tt>subjectPublicKeyInfoHash</tt> to the hash of the DER encoding of <tt>subjectPublicKeyInfo</tt>.</t>
              </li>
            </ol>
          </li>
          <li>
            <t>Construct a MerkleTreeCertEntry of type <tt>tbs_cert_entry</tt> with contents the TBSCertificateLogEntry.</t>
          </li>
          <li>
            <t>Evaluate <tt>inclusion_proof</tt> against the MerkleTreeCertEntry to compute the expected subtree hash</t>
          </li>
          <li>
            <t>If the subtree is a trusted subtree (<xref target="trusted-subtrees"/>), check that the hash matches. Return success if it matches and failure if it does not.</t>
          </li>
          <li>
            <t>Otherwise, check that <tt>signatures</tt> contain a sufficient set of valid signatures from cosigners to satisfy the relying party's cosigner requirements (<xref target="trusted-cosigners"/>). Unrecognized cosigners MUST be ignored. Signatures are verified as described in <xref target="signature-format"/>.</t>
          </li>
        </ol>
        <t>This procedure only replaces the signature verification portion of X.509 path validation. The relying party MUST continue to perform other checks, such as checking expiry.</t>
      </section>
      <section anchor="trusted-cosigners">
        <name>Trusted Cosigners</name>
        <t>A relying party's cosigner policy determines the sets of cosigners that must sign a view of the issuance log before it is trusted.</t>
        <t>This document does not prescribe a particular policy, but gives general guidance. Relying parties MAY implement policies other than those described below, and MAY incorporate cosigners acting in roles not described in this document.</t>
        <t>In picking trusted cosigners, the relying party SHOULD ensure the following security properties:</t>
        <dl>
          <dt>Authenticity:</dt>
          <dd>
            <t>The relying party only accepts entries certified by the CA</t>
          </dd>
          <dt>Transparency:</dt>
          <dd>
            <t>The relying party only accepts entries that are publicly accessible, so that monitors, particularly the subject of the certificate, can notice any unauthorized certificates</t>
          </dd>
        </dl>
        <t>Relying parties SHOULD ensure authenticity by requiring a signature from the most recent CA cosigner key. If the CA is transitioning from an old to new key, the relying party SHOULD accept both until certificates that predate the new key expire. This is analogous to the signature in a traditional X.509 certificate.</t>
        <t>While a CA signature is sufficient to prove a subtree came from the CA, this is not enough to ensure the certificate is visible to monitors. A misbehaving CA might not operate the log correctly, either presenting inconsistent versions of the log to relying parties and monitors, or refuse to publish some entries.</t>
        <t>To mitigate this, relying parties SHOULD ensure transparency by requiring a quorum of signatures from additional cosigners. At minimum, these cosigners SHOULD enforce a consistent view of the log. For example, <xref target="TLOG-WITNESS"/> describes a lightweight "witness" cosigner role that checks this with consistency proofs. This is not sufficient to ensure durable logging. <xref target="revocation-by-index"/> discusses mitigations for this. Alternatively, a relying party MAY require cosigners that serve a copy of the log, in addition to enforcing a consistent view. For example, <xref target="TLOG-MIRROR"/> describes a "mirror" cosigner role.</t>
        <t>Relying parties MAY accept the same set of additional cosigners across issuance logs.</t>
        <t>Cosigner roles are extensible without changes to certificate verification itself. Future specifications and individual deployments MAY define other cosigner roles to incorporate into relying party policies.</t>
        <t><xref target="choosing-cosigners"/> discusses additional deployment considerations in cosigner selection.</t>
      </section>
      <section anchor="trusted-subtrees">
        <name>Trusted Subtrees</name>
        <t>As an optional optimization, a relying party MAY incorporate a periodically updated, predistributed list of active landmark subtrees, determined as described in <xref target="landmarks"/>. The relying party configures these as trusted subtrees, allowing it to accept signatureless certificates (<xref target="signatureless-certificates"/>) constructed against those subtrees.</t>
        <t>Before configuring the subtrees as trusted, the relying party MUST obtain assurance that each subtree is consistent with checkpoints observed by a sufficient set of cosigners (see <xref target="cosigners"/>) to meet its cosigner requirements. It is not necessary that the cosigners have generated signatures over the specific subtrees, only that they are consistent.</t>
        <t>This criteria can be checked given:</t>
        <ul spacing="normal">
          <li>
            <t>Some <em>reference checkpoint</em> that contains the latest landmark</t>
          </li>
          <li>
            <t>For each cosigner, either:
            </t>
            <ul spacing="normal">
              <li>
                <t>A cosignature on the reference checkpoint</t>
              </li>
              <li>
                <t>A cosigned checkpoint containing the referenced checkpoint and a valid Merkle consistency proof (<xref section="2.1.4" sectionFormat="of" target="RFC9162"/>) between the two</t>
              </li>
            </ul>
          </li>
          <li>
            <t>For each subtree, a valid subtree consistency proof (<xref target="subtree-consistency-proofs"/>) between the subtree and the reference checkpoint</t>
          </li>
        </ul>
        <t>[[TODO: The subtree consistency proofs have many nodes in common. It is possible to define a single "bulk consistency proof" that verifies all the hashes at once, but it's a lot more complex.]]</t>
        <t>This document does not prescribe how relying parties obtain this information. A relying party MAY, for example, use an application-specific update service, 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), it MAY trust the update service to perform these checks.</t>
        <t>The relying party SHOULD incorporate its trusted subtree configuration in application-protocol-specific certificate selection mechanisms, to allow an authenticating party to select a signatureless certificate. The trust anchor IDs of the landmarks may be used as efficient identifiers in the application protocol. <xref target="use-in-tls"/> discusses how to do this in TLS <xref target="RFC8446"/>.</t>
      </section>
      <section anchor="revocation-by-index">
        <name>Revocation by Index</name>
        <t>For each supported Merkle Tree CA, the relying party maintains a list of revoked ranges of indices. This allows a relying party to efficiently revoke entries of an issuance log, even if the contents are not necessarily known. This may be used to mitigate the security consequences of misbehavior by a CA, or other parties in the ecosystem.</t>
        <t>When a relying party is first configured to trust a CA, it SHOULD be configured to revoke all entries from zero up to but not including the first available unexpired certificate at the time. This revocation SHOULD be periodically updated as entries expire and logs are pruned (<xref target="log-pruning"/>). In particular, when CAs prune entries, relying parties SHOULD be updated to revoke all newly unavailable entries. This gives assurance that, even if some unavailable entry had not yet expired, the relying party will not trust it. It also allows monitors to start monitoring a log without processing expired entries.</t>
        <t>A misbehaving CA might correctly construct a globally consistent log, but refuse to make some entries or intermediate nodes available. Consistency proofs between checkpoints and subtrees would pass, but monitors cannot observe the entries themselves. Relying parties whose cosigner policies (<xref target="trusted-cosigners"/>) do not require durable logging (e.g. via <xref target="TLOG-MIRROR"/>) are particularly vulnerable to this. In this case, the indices of the missing entries will still be known, so relying parties can use this mechanism to revoke the unknown entries, possibly as an initial, targeted mitigation before a complete CA removal.</t>
        <t>When a CA is found to be untrustworthy, relying parties SHOULD remove trust in that CA. To minimize the compatibility impact of this mitigation, index-based revocation can be used to only distrust entries after some index, while leaving existing entries accepted. This is analogous to the <xref target="SCTNotAfter"/> mechanism used in some PKIs.</t>
      </section>
    </section>
    <section anchor="use-in-tls">
      <name>Use in TLS</name>
      <t>TLS implementations that authenticate with or accept Merkle Tree certificates SHOULD support trust anchor IDs (<xref target="I-D.ietf-tls-trust-anchor-ids"/>) for certificate selection.</t>
      <t>A full certificate has a trust anchor ID of the corresponding log ID (<xref target="log-ids"/>). The authenticating party can obtain this information either by parsing the certificate's issuer field or via out-of-band information as described in <xref section="3.2" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>.</t>
      <t>[[TODO: Ideally we would negotiate cosigners. https://github.com/tlswg/tls-trust-anchor-ids/issues/54 has a sketch of how one might do this, though other designs are possible. Negotiating cosigners allows the ecosystem to manage cosigners efficiently, without needing to collect every possible cosignature and send them all at once. This is wasteful, particularly with post-quantum algorithms.]]</t>
      <t>A full certificate MAY be used without signals about what the relying party trusts. As with other choices of default certificates, an authenticating party that does so assumes that the relying party trusts the issuing CA, e.g. because the CA is relatively ubiquitous among the relying parties that it supports.</t>
      <t>A signatureless certificate has a trust anchor ID of the corresponding landmark, as described in <xref target="landmarks"/>. This can be configured in the authenticating party via out-of-band information, as described in <xref section="3.2" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>. A relying party that has been configured with trusted subtrees (<xref target="trusted-subtrees"/>) derived from a set of landmarks SHOULD be configured to support those landmarks' trust anchor IDs. TLS certificate selection will then correctly determine whether the signatureless certificate is compatible with the relying party.</t>
      <t>[[TODO: We can do slightly better. If the relying party supports landmark 42, it can be assumed to also support landmark 41, 40, 39, etc. https://github.com/tlswg/tls-trust-anchor-ids/issues/62 discusses how to fit this into the trust anchor IDs framework. This allows the client to summarize its state with one ID per CA.]]</t>
      <t>Authenticating parties SHOULD preferentially use signatureless certificates over full certificates, when both are supported by the relying party. A signatureless certificate asserts the same information as its full counterpart, but is expected to be smaller. A signatureless certificate SHOULD NOT be used without a signal that the relying party trusts the corresponding landmark subtree. Even if the relying party is assumed to trust the issuing CA, the relying party may not have sufficiently up-to-date trusted subtrees predistributed.</t>
    </section>
    <section anchor="acme-extensions">
      <name>ACME Extensions</name>
      <t>This section describes how to issue Merkle Tree certificates using ACME <xref target="RFC8555"/>.</t>
      <t>When downloading the certificate (<xref section="7.4.2" sectionFormat="of" target="RFC8555"/>), ACME clients supporting Merkle Tree certificates SHOULD send "application/pem-certificate-chain-with-properties" in their Accept header (<xref section="12.5.1" sectionFormat="of" target="RFC9110"/>). ACME servers issuing Merkle Tree certificates SHOULD then respond with that content type and include trust anchor ID information as described in <xref section="6" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>. <xref target="use-in-tls"/> decribes the trust anchor ID assignments for full and signatureless certificates.</t>
      <t>When processing an order for a Merkle Tree certificate, the ACME server moves the order to the "valid" state once the corresponding entry is sequenced in the issuance log. The order's certificate URL then serves the full certificate, constructed as described in <xref target="full-certificates"/>.</t>
      <t>The full certificate response SHOULD additionally carry a alternate URL for the signatureless certificate, as described <xref section="7.4.2" sectionFormat="of" target="RFC8555"/>. Before the signatureless certificate is available, the alternate URL SHOULD return a HTTP 503 (Service Unavailable) response, with a Retry-After header (<xref section="10.2.3" sectionFormat="of" target="RFC9110"/>) estimating when the certificate will become available. Once the next landmark is allocated, the ACME server constructs a signatureless certificate, as described in <xref target="signatureless-certificates"/> and serves it from the alternate URL.</t>
      <t>ACME clients supporting Merkle Tree certificates SHOULD support fetching alternate chains. If an alternate chain returns an HTTP 503 with a Retry-After header, as described above, the client SHOULD retry the request at the specified time.</t>
    </section>
    <section anchor="deployment-considerations">
      <name>Deployment Considerations</name>
      <section anchor="operational-costs">
        <name>Operational Costs</name>
        <section anchor="certification-authority-costs">
          <name>Certification Authority Costs</name>
          <t>While Merkle Tree certificates expects CAs to operate logs, the costs of these logs are expected to be much lower than a CT log from <xref target="RFC6962"/> or <xref target="RFC9162"/>:</t>
          <t><xref target="publishing-logs"/> does not constrain the API to the one defined in <xref target="RFC6962"/> or <xref target="RFC9162"/>. If the PKI uses a tile-based protocol, such as <xref target="TLOG-TILES"/>, the issuance log benefits from the improved caching properties of such designs.</t>
          <t>Unlike a CT log, an issuance log does not have public submission APIs. Log entries are only added by the CA directly. The costs are thus expected to scale with the CA's own operations.</t>
          <t>A CA only needs to produce a digital signature for every checkpoint, rather than for every certificate. The lower signature rate requirements could allow more secure and/or economical key storage choices.</t>
          <t>Individual entries are kept small and do not scale with public key or signature sizes. This mitigates growth from post-quantum algorithms. Public keys in entries are replaced with fixed-sized hashes. There are no signatures in entries themselves, and only signatures on the very latest checkpoint are retained. Every new checkpoint completely subsumes the old checkpoint, so there is no need to retain older signatures. Likewise, a subtree is only signed if contained in another signed checkpoint.</t>
          <t>Log pruning (<xref target="log-pruning"/>) allows a long-lived log to serve only the more recent entries, scaling with the size of the retention window, rather than the log's total lifetime.</t>
          <t>Mirrors of the log can also reduce CA bandwidth costs, because monitors can fetch data from mirrors instead of CAs directly. In PKIs that deploy mirrors as part of cosigner policies, relying parties could set few availability requirements on CAs, as described in <xref target="log-availability"/>.</t>
        </section>
        <section anchor="cosigner-costs">
          <name>Cosigner Costs</name>
          <t>The costs of cosigners vary by cosigner role. A consistency-checking cosigner, such as <xref target="TLOG-WITNESS"/>, requires very little state and can be run with low cost.</t>
          <t>A mirroring cosigner, such as <xref target="TLOG-MIRROR"/>, performs comparable roles as CT logs, but several of the cost-saving properties in <xref target="certification-authority-costs"/> also apply: improved protocols, smaller entries, less frequent signatures, and log pruning. While a mirror does need to accommodate another party's (the CA's) growth rate, it grows only from new issuances from that one CA. If one CA's issuance rate exceeds the mirror's capacity, that does not impact the mirror's copies of other CAs. Mirrors also do not need to defend against a client uploading a large number of existing certificates all at once. Submissions are also naturally batched and serialized.</t>
        </section>
        <section anchor="monitor-costs">
          <name>Monitor Costs</name>
          <t>In a CT-based PKI, every log carries a potentially distinct subset of active certificates, so monitors must check the contents of every CT log. At the same time, certificates are commonly synchronized between CT logs. As a result, a monitor will typically download each certificate multiple times, once for every log. In Merkle Tree Certificates, each entry appears in exactly one log. A relying party might require a log to be covered by a quorum of mirrors, but each mirror is cryptographically verified to serve the same contents. Once a monitor has obtained some entry from one mirror, it does not need to download it from the others.</t>
          <t>In addition to downloading each entry only once, the entries themselves are smaller, as discussed in <xref target="certification-authority-costs"/>.</t>
        </section>
      </section>
      <section anchor="choosing-cosigners">
        <name>Choosing Cosigners</name>
        <t>In selecting trusted cosigners and cosigner requirements (<xref target="trusted-cosigners"/>), relying parties navigate a number of trade-offs:</t>
        <t>A consistency-checking cosigner, such as <xref target="TLOG-WITNESS"/>, is very cheap to run, but does not guarantee durable logging, while a mirroring cosigner is more expensive and may take longer to cosign structures. Requiring a mirror signature provides stronger guarantees to the relying party, which in turn can reduce the requirements on CAs (see <xref target="log-availability"/>), however it may cause certificate issuance to take longer. That said, mirrors are comparable to CT logs, if not cheaper (see <xref target="operational-costs"/>), so they may be appropriate in PKIs where running CT logs is already viable.</t>
        <t>Relying parties that require larger quorums of trusted cosigners can reduce the trust placed in any individual cosigner. However, these larger quorums result in larger, more expensive full certificates. The cost of this will depend on how frequently the signatureless optimization occurs in a given PKI. Conversely, relying parties that require smaller quorums have smaller full certificates, but place more trust in their cosigners.</t>
        <t>Relying party policies also impact monitor operation. If a relying party accepts any one of three cosigners, monitors SHOULD check the checkpoints of all three. Otherwise, a malicious CA may send different split views to different cosigners. More generally, monitors SHOULD check the checkpoints in the union of all cosigners trusted by all supported relying parties. This is an efficient check because, if the CA is operating correctly, all cosigners will observe the same tree. Thus the monitor only needs to check consistency proofs between the checkpoints, and check the log contents themselves once. Monitors MAY also rely on other parties in the transparency ecosystem to perform this check.</t>
      </section>
      <section anchor="log-availability">
        <name>Log Availability</name>
        <t>CAs and mirrors are expected to serve their log contents over HTTP. It is possible for the contents to be unavailable, either due to temporary service outage or because the log has been pruned (<xref target="log-pruning"/>). If some resources are unavailable, they may not be visible to monitors.</t>
        <t>As in CT, PKIs which deploy Merkle Tree certificates SHOULD establish availability policies, adhered to by trusted CAs and mirrors, and enforced by relying party vendors as a condition of trust. Exact availability policies for these services are out of scope for this document, but this section provides some general guidance.</t>
        <t>Availability policies SHOULD specify how long an entry must be made available, before a CA or mirror is permitted to prune the entry. It is RECOMMENDED to define this using a <em>retention period</em>, which is some time after the entry has expired. In such a policy, an entry could only be pruned if it, and all preceding entries, have already expired for the retention period. Policies MAY opt to set different retention periods between CAs and mirrors. Permitting limited log retention is analogous to the CT practice of temporal sharding <xref target="CHROME-CT"/>, except that a pruned issuance log remains compatible with older, unupdated relying parties.</t>
        <t>Such policies impact monitors. If the retention period is, e.g. 6 months, this means that monitors are expected to check entries of interest within 6 months. It also means that a new monitor may only be aware of a 6 month history of entries issued for a particular domain.</t>
        <t>If historical data is not available to verify the retention period, such as information in another mirror or a trusted summary of expiration dates of entries, it may not be possible to confirm correct behavior. This is mitigated by the revocation process described in <xref target="revocation-by-index"/>: if a CA were to prune a forward-dated entry and, in the 6 months when the entry was available, no monitor noticed the unusual expiry, an updated relying party would not accept it anyway.</t>
        <t>The log pruning process simply makes some resources unavailable, so availability policies SHOULD constrain log pruning in the same way as general resource availability. That is, if it would be a policy violation for the log to fail to serve a resource, it should also be a policy violation for the log to prune such that the resource is removed, and vice versa.</t>
        <t>PKIs that require mirror cosignatures (<xref target="trusted-cosigners"/>) can impose minimal to no availability requirements on CAs, all without compromising transparency goals. If a CA never makes some entry available, mirrors will be unable to update. This will prevent relying parties from accepting the undisclosed entries. 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 issuance, if the entries are not available in another mirror. This does compromise transparency goals. As such, availability policies SHOULD set availability expectations on mirrors. This can also be mitigated by using multiple mirrors, either directly enforced in cosigner requirements, or by keeping mirrors up-to-date with each other.</t>
        <t>In PKIs that do not require mirroring cosigners, the CA's serving endpoint is more crucial for monitors. Such PKIs thus SHOULD set availability requirements on CAs.</t>
        <t>In each of these cases, availability failures can be mitigated by revoking the unavailable entries by index, as described in <xref target="revocation-by-index"/>, likely as a first step in a broader distrust.</t>
      </section>
      <section anchor="certificate-renewal">
        <name>Certificate Renewal</name>
        <t>When an authenticating party requests a certificate, the signatureless certificate will not be available until the next landmark is ready. From there, the signatureless certificate will not be available until relying parties receive new trusted subtrees.</t>
        <t>To maximize coverage of the signatureless certificate optimization, authenticating parties performing routine renewal SHOULD request a new Merkle Tree certificate some time before the previous Merkle Tree certificate expires. Renewing around 75% 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 subtrees are delivered to relying parties, certificate negotiation will transition relying parties to the new certificate, while retaining the old certificate for relying parties that are not yet updated.</t>
        <t>The above also applies if the authenticating party is performing a routine key rotation alongside the routine renewal. In this case, certificate negotiation would pick the key as part of the certificate selection. 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 appropriate. Instead, the service SHOULD immediately discard the old key and request a full certificate and the revocation of the previous certificate. This will interrupt the size optimization until the new signatureless certificate is available and relying parties are updated.</t>
      </section>
      <section anchor="multiple-ca-keys">
        <name>Multiple CA Keys</name>
        <t>The separation between issuance logs and CA cosigners gives CAs additional flexibility in managing keys. A CA operator wishing to rotate keys, e.g. to guard against compromise of older key material, or upgrade to newer algorithms, could retain the same issuance log and sign its checkpoints and subtrees with both keys in parallel, until relying parties are all updated. Older relying parties would verify the older signatures, while newer relying parties would verify the newer signatures. A cosignature negotiation mechanism in the application protocol (see <xref target="use-in-tls"/>) would avoid using extra bandwidth for the two signatures.</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 for trusted subtrees (<xref target="trusted-subtrees"/>) 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. Merkle Tree certificates achieve this by ensuring the relying party only accepts authentic subtree hashes:</t>
        <ul spacing="normal">
          <li>
            <t>In full certificates, the relying party's cosigner requirements (<xref target="trusted-cosigners"/>) are expected to include some signature by the CA's cosigner. The CA's cosigner (<xref target="certification-authority-cosigners"/>) is defined to certify the contents of every checkpoint and subtree that it signs.</t>
          </li>
          <li>
            <t>In signatureless certificates, the cosigner requirements are checked ahead of time, when the trusted subtrees are predistributed (<xref target="trusted-subtrees"/>).</t>
          </li>
        </ul>
        <t>Given such a subtree hash, computed over entries that the CA certified, it then must be computationally infeasible to construct an entry not on this list, and some inclusion proof, such that inclusion proof verification succeeds. This requires using a collision-resistant hash in the Merkle Tree construction.</t>
        <t>Log entries contain public key hashes, so it must additionally be computationally infeasible to compute a public key whose hash matches the entry, other than the intended public key. This also requires a collision-resistant hash.</t>
      </section>
      <section anchor="transparency">
        <name>Transparency</name>
        <t>The transparency mechanisms in this document do not prevent a CA from issuing an unauthorized certificate. Rather, they provide comparable security properties as Certificate Transparency <xref target="RFC9162"/> in ensuring that all certificates are either rejected by relying parties, or visible to monitors and, in particular, the subject of the certificate.</t>
        <t>Compared to Certificate Transparency, some of the responsibilities of a log have moved to the CA. All signatures generated by the CA in this system are assertions about some view of the CA's issuance log. However, a CA does not need to function correctly to ensure transparency properties. Relying parties are expected to require a quorum of additional cosigners, which together enforce properties of the log (<xref target="trusted-cosigners"/>) and prevent or detect CA misbehavior:</t>
        <t>A CA might violate the append-only property of its log and present different views to different parties. However, each individual cosigner will only follow a single append-only view of the log history. Provided the cosigners are correctly operated, relying parties and monitors will observe consistent views between each other. Views that were not cosigned at all may not be detected, but they also will not be accepted by relying parties.</t>
        <t>If the CA sends one view to some cosigners and another view to other cosigners, it is possible that multiple views will be accepted by relying parties. However, in that case monitors will observe that cosigners do not match each other. Relying parties can then react by revoking the inconsistent indices (<xref target="revocation-by-index"/>), and likely removing the CA. If the cosigners are mirrors, the underlying entries in both views will also be visible.</t>
        <t>A CA might correctly construct its log, but refuse to serve some unauthorized entry, e.g. by feigning an outage or pruning the log outside the retention policy (<xref target="log-availability"/>). If the relying party requires cosignatures from trusted mirrors, the entry will either be visible to monitors in the mirrors, or have never reached a mirror. In the latter case, the entry will not have been cosigned, so the relying party would not accept it. If the relying party accepts log views without a trusted mirror, the unauthorized entry may not be available. However, the existence of <em>some</em> entry at that index will be visible, so monitors will know the CA is failing to present an entry. Relying parties can then react by revoking the undisclosed entries by index (<xref target="revocation-by-index"/>), and likely removing the CA.</t>
      </section>
      <section anchor="public-key-hashes">
        <name>Public Key Hashes</name>
        <t>Unlike Certificate Transparency, the mechanisms in this document do not provide the subject public keys, only the hashed values. This is intended to reduce log 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 unhashed key. This document does not define a mechanism for doing this, or require that CAs or mirrors retain unhashed keys. The transparency mechanisms in this protocol are primarily intended to allow monitors to observe certificate issuance.</t>
      </section>
      <section anchor="non-repudiation">
        <name>Non-Repudiation</name>
        <t>When a monitor finds an unauthorized certificate issuance in a log or mirror, it must be possible to prove the CA indeed certified the information in the entry. However, only the latest checkpoint signature is retained by the transparency ecosystem, so it may not be possible to reconstruct the exact certificate seen by relying parties.</t>
        <t>However, per <xref target="certification-authority-cosigners"/>, any checkpoint signature is a binding assertion by the CA that it has certified every entry in the checkpoint. Thus, given <em>any</em> signed checkpoint that contains the unauthorized entry, a Merkle inclusion proof (<xref section="2.1.3" sectionFormat="of" target="RFC9162"/>) is sufficient to prove the CA issued the entry. This is analogous to how, in <xref section="3.2.1" sectionFormat="of" target="RFC9162"/>, CAs are held accountable for signed CT precertificates.</t>
        <t>The transparency ecosystem does not retain unhashed public keys, so it also may not be possible to construct a complete certificate from the checkpoint signature and inclusion proof. However, if the log entry's <tt>subjectPublicKeyInfoHash</tt> does not correspond to an authorized key for the subject of the certificate, the entry is still unauthorized. A Merkle Tree CA is held responsible for all log entries it certifies, whether or not the preimage of the hash is known.</t>
      </section>
      <section anchor="new-log-entry-types">
        <name>New Log Entry Types</name>
        <t>MerkleTreeCertEntry (<xref target="log-entries"/>) is extensible and permits protocol extensions to define new formats for the CA to certify. This means older CAs, cosigners, relying parties, and monitors might interact with new entries:</t>
        <t><xref target="log-entries"/> and <xref target="certification-authority-cosigners"/> forbid a CA from logging or signing entries that it does not recognize. A CA cannot faithfully claim to certify information if it does not understand it. This is analogous to how a correctly-operated X.509 can never sign an unrecognized X.509 extension.</t>
        <t>External cosigners may or may not interact with the unrecognized entries. <xref target="TLOG-MIRROR"/> and <xref target="TLOG-WITNESS"/> describe cosigners whose roles do not interpret the contents of log entries. New entry types MAY be added without updating them. If a cosigner role does interpret a log entry, it MUST define how it interacts with unknown ones.</t>
        <t>If a relying party trusts an issuance log, but the issuance log contains an unrecognized entry, the entry will not cause it to accept an unexpected certificate. In <xref target="verifying-certificate-signatures"/>, the relying party constructs the MerkleTreeCertEntry that it expects. The unrecognized entry will have a different <tt>type</tt> value, so the proof will never succeed, assuming the underlying hash function remains collision-resistant.</t>
        <t>If a monitor observes an entry with unknown type, it may not be able to determine if it is of interest. For example, it may be unable to tell whether it covers some relevant DNS name. Until the monitor is updated to reflect the current state of the PKI, the monitor may be unable to detect all misissued certificates.</t>
        <t>This situation is analogous to the addition of a new X.509 extension. When relying parties add support for log entry types or new X.509 extensions, they SHOULD coordinate with monitors to ensure the transparency ecosystem is able to monitor the new formats.</t>
      </section>
      <section anchor="certificate-malleability">
        <name>Certificate Malleability</name>
        <t>An ASN.1 structure like X.509’s Certificate is an abstract data type that is independent of its serialization. There are multiple encoding rules for ASN.1. Commonly, protocols use DER <xref target="X.690"/>, such as <xref section="4.4.2" sectionFormat="of" target="RFC8446"/>. This aligns with <xref section="4.1.1.3" sectionFormat="of" target="RFC5280"/>, which says X.509 signatures are computed over the DER-encoded TBSCertificate. After signature verification, applications can assume the DER-encoded TBSCertificate is not malleable.</t>
        <t>While the signature verification process in <xref target="verifying-certificate-signatures"/> first transforms the TBSCertificate into a TBSCertificateLogEntry, it preserves this non-malleability. There is a unique valid DER encoding for every abstract TBSCertificate structure, so malleability of the DER-encoded TBSCertificate reduces to malleability of the TBSCertificate value:</t>
        <ul spacing="normal">
          <li>
            <t>The <tt>version</tt>, <tt>issuer</tt>, <tt>validity</tt>, <tt>subject</tt>, <tt>issuerUniqueID</tt>, <tt>subjectUniqueID</tt>, and <tt>extensions</tt> fields are copied from the TBSCertificate to the TBSCertificateLogEntry unmodified, so they are directly authenticated by the inclusion proof.</t>
          </li>
          <li>
            <t><tt>serialNumber</tt> is omitted from TBSCertificateLogEntry, but its value determines the inclusion proof index, which authenticates it.</t>
          </li>
          <li>
            <t>The redundant <tt>signature</tt> field in TBSCertificate is omitted from TBSCertificateLogEntry, but <xref target="verifying-certificate-signatures"/> checks for an exact value, so no other values are possible.</t>
          </li>
          <li>
            <t><tt>subjectPublicKeyInfo</tt> is hashed as <tt>subjectPublicKeyInfoHash</tt> in TBSCertificateLogEntry. Provided the underlying hash function is collision-resistant, no other values are possible for a given log entry.</t>
          </li>
        </ul>
        <t>Some non-conforming X.509 implementations use a BER <xref target="X.690"/> parser instead of DER and then, instead of computing the canonical DER encoding per <xref section="4.1.1.3" sectionFormat="of" target="RFC5280"/>, verify the signature over the particular BER encoding received. Those implementations may still assume the received BER-encoded TBSCertificate is not malleable. However, as BER encoding is not unique, this breaks the above assumptions in Merkle Tree Certificates. To preserve non-malleability, these non-conforming implementations MUST do the following when verifying a Merkle Tree Certificate:</t>
        <ul spacing="normal">
          <li>
            <t>When parsing the outermost TBSCertificate SEQUENCE tag and length, reparse with a conforming DER parser.</t>
          </li>
          <li>
            <t>When copying the <tt>version</tt>, <tt>issuer</tt>, <tt>validity</tt>, <tt>subject</tt>, <tt>issuerUniqueID</tt>, <tt>subjectUniqueID</tt>, and <tt>extensions</tt> fields, either reparse with a conforming DER parser, or copy over the observed BER encodings.</t>
          </li>
          <li>
            <t>Reparse the <tt>serialNumber</tt> field with a conforming DER parser.</t>
          </li>
          <li>
            <t>Reparse the <tt>signature</tt> field with a conforming DER parser. Equivalently, check for an exact match for the expected, DER-encoded value.</t>
          </li>
          <li>
            <t>When hashing <tt>subjectPublicKeyInfo</tt>, either reparse with a conforming DER parser, or hash the observed BER encoding.</t>
          </li>
        </ul>
        <t><xref target="log-entries"/> requires that the TBSCertificateLogEntry in a MerkleTreeCertEntry be DER-encoded, so applying a stricter parser will be compatible with conforming CAs. While these existing non-conforming implementations may be unable to switch to a DER parser due to compatibility concerns, Merkle Tree Certificates is new, so there is no existing deployment of malformed BER-encoded TBSCertificateLogEntry structures.</t>
        <t>The above only ensures the TBSCertificate portion is non-malleable. In Merkle Tree Certificates, similar to ECDSA X.509 signature, the signature value is malleable. Multiple MTCProof structures may prove a single TBSCertificate structure. Additionally, in all X.509-based protocols, a BER-based parser for the outer, unsigned Certificate structure will admit malleability in those portions of the encoding. Applications that derive a unique identifier from the Certificate MUST instead use the TBSCertificate, or some portion of it, for Merkle Tree Certificates.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="module-identifier">
        <name>Module Identifier</name>
        <t>IANA is requested to add the following entry in the "SMI Security for PKIX Module Identifier" registry <xref target="RFC7299"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Decimal</th>
              <th align="left">Description</th>
              <th align="left">References</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD</td>
              <td align="left">id-mod-mtc-2025</td>
              <td align="left">[this-RFC]</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="algorithm">
        <name>Algorithm</name>
        <t>IANA is requested to add the following entry to the "SMI Security for PKIX Algorithms" registry <xref target="RFC7299"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Decimal</th>
              <th align="left">Description</th>
              <th align="left">References</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD</td>
              <td align="left">id-alg-mtcProof</td>
              <td align="left">[this-RFC]</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="relative-distinguished-name-attribute">
        <name>Relative Distinguished Name Attribute</name>
        <t>IANA is requested to add the following entry to the "SMI Security for PKIX Relative Distinguished Name Attribute" registry <xref target="I-D.ietf-lamps-x509-alg-none"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Decimal</th>
              <th align="left">Description</th>
              <th align="left">References</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD</td>
              <td align="left">id-rdna-trustAnchorID</td>
              <td align="left">[this-RFC]</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="RFC5912">
          <front>
            <title>New ASN.1 Modules for the Public Key Infrastructure Using X.509 (PKIX)</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="June" year="2010"/>
            <abstract>
              <t>The Public Key Infrastructure using X.509 (PKIX) certificate format, and many associated formats, are expressed using ASN.1. The current ASN.1 modules conform to the 1988 version of ASN.1. This document updates those ASN.1 modules to conform to the 2002 version of ASN.1. There are no bits-on-the-wire changes to any of the formats; this is simply a change to the syntax. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5912"/>
          <seriesInfo name="DOI" value="10.17487/RFC5912"/>
        </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="FIPS204">
          <front>
            <title>Module-lattice-based digital signature standard</title>
            <author>
              <organization/>
            </author>
            <date month="August" year="2024"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.204"/>
          <refcontent>National Institute of Standards and Technology (U.S.)</refcontent>
        </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="14" month="May" 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-01"/>
        </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="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="RFC3629">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
            <date month="November" year="2003"/>
            <abstract>
              <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
          <seriesInfo name="DOI" value="10.17487/RFC3629"/>
        </reference>
        <reference anchor="RFC9162">
          <front>
            <title>Certificate Transparency Version 2.0</title>
            <author fullname="B. Laurie" initials="B." surname="Laurie"/>
            <author fullname="E. Messeri" initials="E." surname="Messeri"/>
            <author fullname="R. Stradling" initials="R." surname="Stradling"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>This document describes version 2.0 of the Certificate Transparency (CT) protocol for publicly logging the existence of Transport Layer Security (TLS) server certificates as they are issued or observed, in a manner that allows anyone to audit certification 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>This document obsoletes RFC 6962. It also specifies a new TLS extension that is used to send various CT log artifacts.</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="9162"/>
          <seriesInfo name="DOI" value="10.17487/RFC9162"/>
        </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="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="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="I-D.ietf-lamps-x509-alg-none">
          <front>
            <title>Unsigned X.509 Certificates</title>
            <author fullname="David Benjamin" initials="D." surname="Benjamin">
              <organization>Google LLC</organization>
            </author>
            <date day="7" month="July" year="2025"/>
            <abstract>
              <t>   This document defines a placeholder X.509 signature algorithm that
   may be used in contexts where the consumer of the certificate is not
   expected to verify the signature.  As part of this, it updates RFC
   5280.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-lamps-x509-alg-none-08"/>
        </reference>
        <reference anchor="FIPS186-5">
          <front>
            <title>Digital Signature Standard (DSS)</title>
            <author>
              <organization/>
            </author>
            <date month="February" year="2023"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.186-5"/>
          <refcontent>National Institute of Standards and Technology (U.S.)</refcontent>
        </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="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </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="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="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="STH-Discipline" target="https://mailarchive.ietf.org/arch/msg/trans/Zm4NqyRc7LDsOtV56EchBIT9r4c/">
          <front>
            <title>STH Discipline &amp; Security Considerations</title>
            <author initials="R." surname="Barnes" fullname="Richard Barnes">
              <organization/>
            </author>
            <date year="2017" month="March" day="03"/>
          </front>
        </reference>
        <reference anchor="CABF-153" target="https://cabforum.org/2015/11/11/ballot-153-short-lived-certificates/">
          <front>
            <title>Ballot 153 – Short-Lived Certificates</title>
            <author>
              <organization>CA/Browser Forum</organization>
            </author>
            <date year="2015" month="November" day="11"/>
          </front>
        </reference>
        <reference anchor="CABF-SC081" target="https://cabforum.org/2025/04/11/ballot-sc081v3-introduce-schedule-of-reducing-validity-and-data-reuse-periods/">
          <front>
            <title>Ballot SC081v3: Introduce Schedule of Reducing Validity and Data Reuse Periods</title>
            <author>
              <organization>CA/Browser Forum</organization>
            </author>
            <date year="2025" month="April" day="11"/>
          </front>
        </reference>
        <reference anchor="SCTNotAfter" target="https://dadrian.io/blog/posts/sct-not-after/">
          <front>
            <title>How to distrust a CA without any certificate errors</title>
            <author initials="D." surname="Adrian" fullname="David Adrian">
              <organization/>
            </author>
            <date year="2025" month="March"/>
          </front>
        </reference>
        <reference anchor="AuditingRevisited" target="https://eprint.iacr.org/2025/556.pdf">
          <front>
            <title>Private SCT Auditing, Revisited</title>
            <author initials="L." surname="Heimberger" fullname="Lena Heimberger">
              <organization/>
            </author>
            <author initials="C." surname="Patton" fullname="Christopher Patton">
              <organization/>
            </author>
            <author initials="B." surname="Westerbaan" fullname="Bas Westerbaan">
              <organization/>
            </author>
            <date year="2025" month="April" day="25"/>
          </front>
        </reference>
        <reference anchor="TLOG-TILES" target="https://c2sp.org/tlog-tiles">
          <front>
            <title>Tiled Transparency Logs</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2025" month="June"/>
          </front>
        </reference>
        <reference anchor="TLOG-WITNESS" target="https://c2sp.org/tlog-witness">
          <front>
            <title>Transparency Log Witness Protocol</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2025" month="June"/>
          </front>
        </reference>
        <reference anchor="TLOG-MIRROR" target="https://c2sp.org/tlog-mirror">
          <front>
            <title>Transparency Log Mirrors</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2025" month="July"/>
          </front>
        </reference>
        <reference anchor="TLOG-CHECKPOINT" target="https://c2sp.org/tlog-checkpoint">
          <front>
            <title>Transparency Log Checkpoints</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2024" month="March"/>
          </front>
        </reference>
        <reference anchor="SIGNED-NOTE" target="https://c2sp.org/signed-note">
          <front>
            <title>Note</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2025" month="April"/>
          </front>
        </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="RFC4514">
          <front>
            <title>Lightweight Directory Access Protocol (LDAP): String Representation of Distinguished Names</title>
            <author fullname="K. Zeilenga" initials="K." role="editor" surname="Zeilenga"/>
            <date month="June" year="2006"/>
            <abstract>
              <t>The X.500 Directory uses distinguished names (DNs) as primary keys to entries in the directory. This document defines the string representation used in the Lightweight Directory Access Protocol (LDAP) to transfer distinguished names. The string representation is designed to give a clean representation of commonly used distinguished names, while being able to represent any distinguished name. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4514"/>
          <seriesInfo name="DOI" value="10.17487/RFC4514"/>
        </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="RFC7299">
          <front>
            <title>Object Identifier Registry for the PKIX Working Group</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="July" year="2014"/>
            <abstract>
              <t>When the Public-Key Infrastructure using X.509 (PKIX) Working Group was chartered, an object identifier arc was allocated by IANA for use by that working group. This document describes the object identifiers that were assigned in that arc, returns control of that arc to IANA, and establishes IANA allocation policies for any future assignments within that arc.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7299"/>
          <seriesInfo name="DOI" value="10.17487/RFC7299"/>
        </reference>
      </references>
    </references>
    <?line 1319?>

<section anchor="asn1-module">
      <name>ASN.1 Module</name>
      <sourcecode type="asn.1"><![CDATA[
MerkleTreeCertificates
  { iso(1) identified-organization(3) dod(6) internet(1)
    security(5) mechanisms(5) pkix(7) id-mod(0)
    id-mod-mtc-2025(TBD) }

DEFINITIONS IMPLICIT TAGS ::=
BEGIN

IMPORTS
  SIGNATURE-ALGORITHM
  FROM AlgorithmInformation-2009  -- in [RFC5912]
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-algorithmInformation-02(58) }
  ATTRIBUTE
  FROM PKIX-CommonTypes-2009 -- in [RFC5912]
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-pkixCommon-02(57) } ;
  TrustAnchorID
  FROM TrustAnchorIDs-2025 -- in [I-D.ietf-tls-trust-ancohor-ids]
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-trustAnchorIDs-2025(TBD) }

TBSCertificateLogEntry  ::=  SEQUENCE  {
      version             [0]  EXPLICIT Version DEFAULT v1,
      issuer                   Name,
      validity                 Validity,
      subject                  Name,
      subjectPublicKeyInfoHash OCTET STRING,
      issuerUniqueID      [1]  IMPLICIT UniqueIdentifier OPTIONAL,
      subjectUniqueID     [2]  IMPLICIT UniqueIdentifier OPTIONAL,
      extensions          [3]  EXPLICIT Extensions OPTIONAL }

id-alg-mtcProof OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) algorithms(6) TBD}

sa-mtcProof SIGNATURE-ALGORITHM ::= {
   IDENTIFIER id-alg-mtcProof
   PARAMS ARE absent
}

id-rdna-trustAnchorID OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) rdna(TBD1) TBD2}

at-trustAnchorID ATTRIBUTE ::= {
   TYPE TrustAnchorID
   IDENTIFIED BY id-rdna-trustAnchorID
}

END
]]></sourcecode>
    </section>
    <section anchor="extensions-to-tiled-transparency-logs-to-be-removed">
      <name>Extensions to Tiled Transparency Logs (To Be Removed)</name>
      <t>[[TODO: This section is expected to be removed. It is sketched here purely for illustrative purposes, until the features are defined somewhere else, e.g. in the upstream tlog documents.]]</t>
      <section anchor="subtree-signed-note-format">
        <name>Subtree Signed Note Format</name>
        <t>A subtree, with signatures, can be represented as a signed note <xref target="SIGNED-NOTE"/>. Trust anchor IDs can be converted into log origins and cosigner names by concatenating the ASCII string <tt>oid/1.3.6.1.4.1.</tt> and the ASCII representation of the trust anchor ID. For example, the checkpoint origin for a log named <tt>32473.1</tt> would be <tt>oid/1.3.6.1.4.1.32473.1</tt>.</t>
        <t>The note body is a sequence of the following lines, each terminated by a newline character (U+000A):</t>
        <ul spacing="normal">
          <li>
            <t>The log origin</t>
          </li>
          <li>
            <t>Two space-separated, non-negative decimal integers, <tt>&lt;start&gt; &lt;end&gt;</tt></t>
          </li>
          <li>
            <t>The subtree hash, as single hash encoded in base64</t>
          </li>
        </ul>
        <t>Each note signature has a key name of the cosigner name. The signature's key ID is computed using the reserved signature type in <xref target="SIGNED-NOTE"/>, and a fixed string, as follows:</t>
        <sourcecode type="pseudocode"><![CDATA[
key ID = SHA-256(key name || 0x0A || 0xFF || "mtc-subtree/v1")[:4]
]]></sourcecode>
        <t>A subtree whose <tt>start</tt> is zero can also be represented as a checkpoint <xref target="TLOG-CHECKPOINT"/>. A corresponding subtree signature can be represented as a note signature using a key ID computed as follows:</t>
        <sourcecode type="pseudocode"><![CDATA[
key ID = SHA-256(key name || 0x0A || 0xFF || "mtc-checkpoint/v1")[:4]
]]></sourcecode>
        <t>The only difference between the two forms is the implicit transformation from the signed note text to the MTCSubtree structure.</t>
      </section>
      <section anchor="requesting-subtree-signatures">
        <name>Requesting Subtree Signatures</name>
        <t>This section defines the <tt>sign-subtree</tt> cosigner HTTP endpoint for clients to obtain subtree signatures from non-CA cosigners, such as mirrors and witnesses. It may be used by the CA when assembling a certificate, or by an authenticating party to add a cosignature to a certificate that the CA did not themselves obtain.</t>
        <t>The cosigner MAY expose this endpoint publicly to general authenticating parties, or privately to the CA. The latter is sufficient if the CA is known to automatically request cosignatures from this cosigner when constructing certificates. If private, authenticating the CA is out of scope for this document.</t>
        <t>Clients call this endpoint as <tt>POST &lt;prefix&gt;/sign-subtree</tt>, where <tt>prefix</tt> is some URL prefix. For a mirror or witness, the URL prefix is the submission prefix. The client's request body MUST be a sequence of:</t>
        <ul spacing="normal">
          <li>
            <t>The requested subtree as a signed note (<xref target="subtree-signed-note-format"/>), with zero or more signatures. The endpoint MAY require signatures from the CA as a DoS mitigation, as described below.</t>
          </li>
          <li>
            <t>A blank line</t>
          </li>
          <li>
            <t>A checkpoint, signed by the requested cosigner. The checkpoint's tree size must be at least <tt>end</tt>.</t>
          </li>
          <li>
            <t>A blank line</t>
          </li>
          <li>
            <t>Zero or more subtree consistency proof (<xref target="subtree-consistency-proofs"/>) lines. Each line MUST encode a single hash in base64 <xref target="RFC4648"/>. The client MUST NOT send more than 63 consistency proof lines.</t>
          </li>
        </ul>
        <t>Each line MUST terminate in a newline character (U+000A).</t>
        <t>The cosigner performs the following steps:</t>
        <ol spacing="normal" type="1"><li>
            <t>Check that the checkpoint contains signatures from itself</t>
          </li>
          <li>
            <t>Check that the subtree consistency proof proves consistency between the subtree hash and the checkpoint</t>
          </li>
          <li>
            <t>If all checks pass, cosign the subtree, as described in <xref target="cosigners"/></t>
          </li>
        </ol>
        <t>On success, the response body MUST be a sequence of one or more note signature lines <xref target="SIGNED-NOTE"/>, each starting with an em dash character (U+2014) and ending with a newline character (U+000A). The signatures MUST be cosignatures from the cosigner key(s) on the subtree.</t>
        <t>Instead of statelessly validating checkpoints by signature, the cosigner MAY statefully check the requested checkpoint against internal witness or mirror state. In this case, if the cosigner needs a newer checkpoint, it responds with a "409 Conflict" with its latest signed checkpoint. In this case, the subtree cosigning SHOULD remember and accept the last few signed checkpoints, to minimize conflicts.</t>
        <t>If operating statefully, the subtree cosigner process only needs read access to the mirror or witness state and can freely operate on stale state without violating any invariants.</t>
        <t>Mirrors MAY choose to check subtree hashes by querying their log state, instead of evaluating proofs.</t>
        <t>Publicly-exposed subtree cosigning endpoints MAY mitigate DoS in a variety of techniques:</t>
        <ul spacing="normal">
          <li>
            <t>Only cosigning recent subtrees, as old subtrees do not need to be co-signed</t>
          </li>
          <li>
            <t>Caching subtree signatures</t>
          </li>
          <li>
            <t>Requiring a CA signature on the subtree; CAs are only expected to sign two subtrees (<xref target="arbitrary-intervals"/>) for each checkpoint</t>
          </li>
          <li>
            <t>Rate-limiting requests</t>
          </li>
        </ul>
      </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, X.509, and Certificate Transparency. 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, Aaron Gable, Nick Harper, Dennis Jackson, Chris Patton, 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>
      <t>The idea to mint tree heads infrequently was originally described by Richard Barnes in <xref target="STH-Discipline"/>. The size optimization in Merkle Tree Certificates is an application of this idea to the certificate itself.</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>Simplify 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>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-01">
        <name>Since draft-davidben-tls-merkle-tree-certs-01</name>
        <ul spacing="normal">
          <li>
            <t>Minor editorial changes</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-02">
        <name>Since draft-davidben-tls-merkle-tree-certs-02</name>
        <ul spacing="normal">
          <li>
            <t>Replace the negotiation mechanism with TLS Trust Anchor Identifiers.</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-03">
        <name>Since draft-davidben-tls-merkle-tree-certs-03</name>
        <ul spacing="normal">
          <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 numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-04">
        <name>Since draft-davidben-tls-merkle-tree-certs-04</name>
        <t>Substantially reworked the design. The old design was essentially the landmark checkpoint and CA-built logs ideas, but targeting only the optimized and slow issuance path, and with a more bespoke tree structure:</t>
        <t>In both draft-04 and draft-05, a CA looks like today’s CAs except that they run some software to publish what they issue and sign tree heads to certify certificates in bulk.</t>
        <t>In draft-04, the CA software publishes certificates in a bunch of independent Merkle trees. This is very easy to do as a collection of highly cacheable, immutable static files because each tree is constructed independently, and never appended to after being built. In draft-05, the certificates are published in a single Merkle tree. The <xref target="TLOG-TILES"/> interface allows such trees to also use highly cacheable, immutable static files.</t>
        <t>In draft-04, there only are hourly tree heads. Clients are provisioned with tree heads ahead of time so we can make small, inclusion-proof-only certificates. In draft-05, the ecosystem must coordinate on defining "landmark" checkpoints. Clients are provisioned with subtrees describing landmark checkpoints ahead of time so we can make small, inclusion-proof-only certificates.</t>
        <t>In draft-04, each tree head is independent. In draft-05, each landmark checkpoint contains all the previous checkpoints.</t>
        <t>In draft-04, the independent tree heads were easily prunable. In draft-05, we define how to prune a Merkle tree.</t>
        <t>In draft-04, there is no fast issuance mode. In draft-05, frequent, non-landmark checkpoints can be combined with inclusion proofs and witness signatures for fast issuance. This is essentially an STH and inclusion proof in CT.</t>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-05">
        <name>Since draft-davidben-tls-merkle-tree-certs-05</name>
        <ul spacing="normal">
          <li>
            <t>Add some discussion on malleability</t>
          </li>
          <li>
            <t>Discuss the monitoring impacts of the responsibility shift from CA with log quorum to CA+log with mirror quorum</t>
          </li>
          <li>
            <t>Sketch out a more concrete initial ACME extension</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-06">
        <name>Since draft-davidben-tls-merkle-tree-certs-06</name>
        <ul spacing="normal">
          <li>
            <t>Fix mistyped reference</t>
          </li>
          <li>
            <t>Removed now unnecessary placeholder text</t>
          </li>
          <li>
            <t>First draft at IANA registration and ASN.1 module</t>
          </li>
          <li>
            <t>Added a prose version of the procedure to select subtrees</t>
          </li>
          <li>
            <t>Rename 'landmarks checkpoint' to 'landmarks'</t>
          </li>
          <li>
            <t>Clarify and fix an off-by-one error in recommended landmark allocation scheme</t>
          </li>
          <li>
            <t>Add some diagrams to the Overview section</t>
          </li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+y963bcyJUu+J9PgaNac0pkZSYvInVhV9lNUZSLbd1apFw+
ra4WwUwkCSsTSANIUrSqvM7v+Tu/5p3mKc6TzL5G7AgASUq2+8xa07KlIjOB
uMe+fnvv4XC41uTNLNtPXmbVx1mWnFZZlhxmVZNP83HaZPXapBwX6RyemFTp
tBlO0qt8cp4Vw2ZWD+f00rCBl4ZjeKkebj1aq5fn87yu87Jobhbw3vHR6fM1
bOuirG72k+zTYq1Yzs+zan9tAp/ur43Los6KelnvJ021zNau9pMHa2mVpfvJ
vZNsvKzy5ube2lVWLOHhJLnIm8vlOXynQ9lsDeMePDbD0Tfw2GXTLOr9zU19
fMQNjPKy/eLmXSY5umzms3tra+myuSxhFskQukuSvIAJ3Hs2Sp5mxZ/SeV7c
o4958e49wyajr8rqIi3yv6QNrBU88ruyvIAtePHikL/O5mk+g3WXwfzzBX0/
GpfztVafr799WuVZ1GV2VRbhN9okfjMqz/GLf77AzzpafTo6GiU/wRpm1Xma
hk0/TevWV9FsDmflcjKdwT4GXZ+n9T+P3Vcd3b4YJX9IZ1nRpEGPL5Yfs/CL
u/U3u+J3Vnf6nDqty2oS9vo8n+WLRRl9Ge9bVs5v6qDXPGum/zzll+Ggra0V
ZTWH56/oBP9x9PDJ1j49L7fv3nEx5Sdgx5psfFmUs/LiJhkmByevRttJVozL
SV5cJG+XswwGfLLIxnxD8YVymsCG5OPkKHgsuf/06O36IDlMi7KAZ2et7w/h
+yQtJsmzvG7g82VeX2aT1mPP4DGeHl3Y5Hl2Xi3T6ibZ2drZps/dVUhkfeDa
n74bntIHdQbnrM5hhvrA8cnrzeOjw+Tx453d4fY+NQNffZM8L6ukucxk1vNy
AgOAL94+P9x7sr2zv7aW6zrxSh7++Pb1y6Ph4WmwmoeXVTkPyBjQtbSoF7D5
xfgmeVPO8vENv5FWFxlQCSUSfMfG1IAhFKYp29LmuPmwoMaIJpglgintDLce
DLcftdZnyOsjt53HirM/ePPmRWsqB4vFLPu27p/Lon8u9RJOX9WMUmwDD/0m
ULRlvfnj6c7W3s7jrXC42zjcrb2+4dJA1nTJj9+9DFe8nC/KAu5Z8m6BLVad
A6JlzZfzEa9yXS6rMQ9Mv9msq/Hmd5twiYrNsbZZ+x8/LLn5zbdHB89eHo3m
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
p+3s3WBVYe4GzpcK7rRF9YQC/+/N7tsg6P2iM/9nvYKWRfj61TC4ae2Y3ggr
aPkPGs1cZLyq0kU/6w/mQnPm/cXWNsVHgrPOsDcMBjRVT1/k+2fcNB1bi8Zm
V7X+5myVs3Os+/BV4Xm5Nt6079WEd2btJLznS9jRj9mb8SaLe9jZ0Y+9zjDo
d3unw/5xn4x4vFN5kX9lFvrzjxupnoOujBf30zSjrmWR61aF/nMd8zpbGA5+
PQ8vwpNBEF70EOqlrtdk2BV7zD80ePQES6vFI29T96J1oWdWP7oeDX8975XU
jet7Nzj6tXorxfh7p13sk9g8e7l0hyG5gXG+MuYVqsO3hovgCDglXDOy7Xgj
c1R2ZXpABX4yEILCg4u8R/hzy2sG6YTtQm7CNeLwUm15vQKkU2aqrdkKSrwD
E1OCB8NdMIOTKbKMOYfR4Kcutbh2LaQ1kh8obLNkmQ20mG0g3svpgvyFY96a
mFRVflU+LL8+29AmJJqhKzHVyCQizdHO3R3ma6/bOD0b9vjIqMg/6RhUSTeu
udCZ5CX5eOmVnIt7mNw4CzUplNC4c3vaT7ZPp99ntx9hjUUaf9tq7jUPm60m
QpQji2Ag19lu57AMCmxzhVPcQvaSdFCDtugxOhcHo732/uO9ZmvkQMhKvTGX
qM/NshovYuFntARxplfO7p0ipq9VKxLiN+cJfNCKn0GUhVMclHK+/mZ3dzfc
tgcqTqz4AhXqy+gyaZgs1XiHnfl5ciWzL1ZbFwv5ihN3Rs+ydbRaPw+eJfP4
+UibzZdDRpnxvDkmZOIPKEMg7/lwn9Ycus9jdp6+UPQiKwtS9Hgx3HuX3AJ7
y8OMLwcZYeYODq9tiFOjrh4zoBytSp6dPy0VMlNIe3QG8ThE8Mg4IhWxzJJr
Wjw0mJo+94dg8DJstA8Ot2y/P30Kdj/uhvLv8TH+rcPkVRF9e9Oqb795uv9W
dI5dXpoWM2Lp8inF78lqkUPHKq0zbyZq4k3nZa/z0/lZ/3QobMB5/kHzKCeO
TSu48GpMGaiO2or6bxWQG01BRnjnHI0yWSOMm+aAkgG0IIeoqZ52cZp36p2v
KlCfCYz4CmoNyCf1I0+GHaMLXZBInVf2RiEGX1uKJiyRmE7swRsHes27H7nZ
zNR1FiGMeeuVQ4+znzkRs/S6tIIFK9RHJ3Gn9RZ+WSg9qRNZIrigJj6Z5QoY
+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

-->

</rfc>
