<?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-09" category="exp" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title>Merkle Tree Certificates</title>
    <seriesInfo name="Internet-Draft" value="draft-davidben-tls-merkle-tree-certs-09"/>
    <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="December" day="01"/>
    <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"/>, as well as the notation defined in <xref section="2.1.1" sectionFormat="of" target="RFC9162"/>.</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>
      <t>Given a non-negative integer <tt>n</tt>,</t>
      <ul spacing="normal">
        <li>
          <t><tt>LSB(n)</tt> refers to the least-significant bit of <tt>n</tt>'s binary representation. Equivalently, it is the remainder when <tt>n</tt> is divided by 2.</t>
        </li>
        <li>
          <t><tt>BIT_WIDTH(n)</tt> refers to the smallest number of bits needed to represent <tt>n</tt>. <tt>BIT_WIDTH(0)</tt> is zero.</t>
        </li>
        <li>
          <t><tt>POPCOUNT(n)</tt> refers to the number of set bits in <tt>n</tt>'s binary representation.</t>
        </li>
        <li>
          <t><tt>BIT_CEIL(n)</tt> refers to the smallest power of 2 that is greater or equal to <tt>n</tt>.</t>
        </li>
      </ul>
      <t>To <em>left-shift</em> a non-negative integer <tt>n</tt> is to shift each bit in its binary representation to one upper position. Equivalently, it is <tt>n</tt> times 2. Given non-negative integers <tt>a</tt> and <tt>b</tt>, <tt>a &lt;&lt; b</tt> refers to <tt>a</tt> left-shifted <tt>b</tt> times.</t>
      <t>To <em>right-shift</em> a non-negative integer <tt>n</tt> is to shift each bit in its binary representation to one lower position, discarding the least-significant bit. Equivalently, it is the floor of <tt>n</tt> divided by 2. Given non-negative integers <tt>a</tt> and <tt>b</tt>, <tt>a &gt;&gt; b</tt> refers to <tt>a</tt> right-shifted <tt>b</tt> times.</t>
      <t>Given two non-negative integers <tt>a</tt> and <tt>b</tt>, <tt>a &amp; b</tt> refers to the non-negative integer such that each bit position is set if the corresponding bit is set in both <tt>a</tt> and <tt>b</tt>, and unset otherwise. This is commonly referred to as the bitwise AND operator.</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 itself a Merkle Tree, defined by <tt>MTH(D[start:end])</tt>. <tt>start</tt> and <tt>end</tt> are integers such that:</t>
        <ul spacing="normal">
          <li>
            <t><tt>0 &lt;= start &lt; end &lt;= n</tt></t>
          </li>
          <li>
            <t><tt>start</tt> is a multiple of <tt>BIT_CEIL(end - start)</tt></t>
          </li>
        </ul>
        <t>Note that, if <tt>start</tt> is zero, the second condition is always true.</t>
        <t>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="example-subtrees">
        <name>Example Subtrees</name>
        <t><xref target="fig-subtree-example"/> shows the subtrees <tt>[4, 8)</tt> and <tt>[8, 13)</tt>:</t>
        <figure anchor="fig-subtree-example">
          <name>Two example subtrees, one full and one partial</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="464" width="200" viewBox="0 0 200 464" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,96 L 8,128" fill="none" stroke="black"/>
                <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                <path d="M 8,352 L 8,384" fill="none" stroke="black"/>
                <path d="M 8,416 L 8,448" fill="none" stroke="black"/>
                <path d="M 24,160 L 24,192" fill="none" stroke="black"/>
                <path d="M 24,416 L 24,448" fill="none" stroke="black"/>
                <path d="M 32,32 L 32,64" fill="none" stroke="black"/>
                <path d="M 32,288 L 32,320" fill="none" stroke="black"/>
                <path d="M 40,160 L 40,192" fill="none" stroke="black"/>
                <path d="M 40,416 L 40,448" fill="none" stroke="black"/>
                <path d="M 56,96 L 56,128" fill="none" stroke="black"/>
                <path d="M 56,160 L 56,192" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 56,416 L 56,448" fill="none" stroke="black"/>
                <path d="M 64,352 L 64,384" fill="none" stroke="black"/>
                <path d="M 72,96 L 72,128" fill="none" stroke="black"/>
                <path d="M 72,160 L 72,192" fill="none" stroke="black"/>
                <path d="M 72,416 L 72,448" fill="none" stroke="black"/>
                <path d="M 80,352 L 80,384" fill="none" stroke="black"/>
                <path d="M 88,160 L 88,192" fill="none" stroke="black"/>
                <path d="M 96,416 L 96,448" fill="none" stroke="black"/>
                <path d="M 104,32 L 104,64" fill="none" stroke="black"/>
                <path d="M 104,160 L 104,192" fill="none" stroke="black"/>
                <path d="M 112,288 L 112,320" fill="none" stroke="black"/>
                <path d="M 112,416 L 112,448" fill="none" stroke="black"/>
                <path d="M 120,96 L 120,128" fill="none" stroke="black"/>
                <path d="M 120,160 L 120,192" fill="none" stroke="black"/>
                <path d="M 136,416 L 136,448" fill="none" stroke="black"/>
                <path d="M 144,352 L 144,384" fill="none" stroke="black"/>
                <path d="M 152,416 L 152,448" fill="none" stroke="black"/>
                <path d="M 168,264 L 168,408" fill="none" stroke="black"/>
                <path d="M 176,416 L 176,448" fill="none" stroke="black"/>
                <path d="M 192,224 L 192,256" fill="none" stroke="black"/>
                <path d="M 32,32 L 104,32" fill="none" stroke="black"/>
                <path d="M 32,64 L 104,64" fill="none" stroke="black"/>
                <path d="M 8,96 L 56,96" fill="none" stroke="black"/>
                <path d="M 72,96 L 120,96" fill="none" stroke="black"/>
                <path d="M 8,128 L 56,128" fill="none" stroke="black"/>
                <path d="M 72,128 L 120,128" fill="none" stroke="black"/>
                <path d="M 8,160 L 24,160" fill="none" stroke="black"/>
                <path d="M 40,160 L 56,160" fill="none" stroke="black"/>
                <path d="M 72,160 L 88,160" fill="none" stroke="black"/>
                <path d="M 104,160 L 120,160" fill="none" stroke="black"/>
                <path d="M 8,192 L 24,192" fill="none" stroke="black"/>
                <path d="M 40,192 L 56,192" fill="none" stroke="black"/>
                <path d="M 72,192 L 88,192" fill="none" stroke="black"/>
                <path d="M 104,192 L 120,192" fill="none" stroke="black"/>
                <path d="M 56,224 L 192,224" fill="none" stroke="black"/>
                <path d="M 56,256 L 192,256" fill="none" stroke="black"/>
                <path d="M 32,288 L 112,288" fill="none" stroke="black"/>
                <path d="M 32,320 L 112,320" fill="none" stroke="black"/>
                <path d="M 8,352 L 64,352" fill="none" stroke="black"/>
                <path d="M 80,352 L 144,352" fill="none" stroke="black"/>
                <path d="M 8,384 L 64,384" fill="none" stroke="black"/>
                <path d="M 80,384 L 144,384" fill="none" stroke="black"/>
                <path d="M 8,416 L 24,416" fill="none" stroke="black"/>
                <path d="M 40,416 L 56,416" fill="none" stroke="black"/>
                <path d="M 72,416 L 96,416" fill="none" stroke="black"/>
                <path d="M 112,416 L 136,416" fill="none" stroke="black"/>
                <path d="M 152,416 L 176,416" fill="none" stroke="black"/>
                <path d="M 8,448 L 24,448" fill="none" stroke="black"/>
                <path d="M 40,448 L 56,448" fill="none" stroke="black"/>
                <path d="M 72,448 L 96,448" fill="none" stroke="black"/>
                <path d="M 112,448 L 136,448" fill="none" stroke="black"/>
                <path d="M 152,448 L 176,448" fill="none" stroke="black"/>
                <g class="text">
                  <text x="56" y="52">[4,</text>
                  <text x="84" y="52">8)</text>
                  <text x="40" y="84">/</text>
                  <text x="96" y="84">\</text>
                  <text x="32" y="116">[4,6)</text>
                  <text x="96" y="116">[6,8)</text>
                  <text x="24" y="148">/</text>
                  <text x="40" y="148">\</text>
                  <text x="88" y="148">/</text>
                  <text x="104" y="148">\</text>
                  <text x="16" y="180">4</text>
                  <text x="48" y="180">5</text>
                  <text x="80" y="180">6</text>
                  <text x="112" y="180">7</text>
                  <text x="112" y="244">[8,</text>
                  <text x="144" y="244">13)</text>
                  <text x="80" y="276">/</text>
                  <text x="56" y="308">[8,</text>
                  <text x="88" y="308">12)</text>
                  <text x="48" y="340">/</text>
                  <text x="104" y="340">\</text>
                  <text x="36" y="372">[8,10)</text>
                  <text x="112" y="372">[10,12)</text>
                  <text x="24" y="404">/</text>
                  <text x="40" y="404">\</text>
                  <text x="96" y="404">/</text>
                  <text x="112" y="404">\</text>
                  <text x="16" y="436">8</text>
                  <text x="48" y="436">9</text>
                  <text x="84" y="436">10</text>
                  <text x="124" y="436">11</text>
                  <text x="164" y="436">12</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
   +--------+
   | [4, 8) |
   +--------+
    /      \
+-----+ +-----+
|[4,6)| |[6,8)|
+-----+ +-----+
  / \     / \
+-+ +-+ +-+ +-+
|4| |5| |6| |7|
+-+ +-+ +-+ +-+

      +----------------+
      |     [8, 13)    |
      +----------------+
         /          |
   +---------+      |
   | [8, 12) |      |
   +---------+      |
     /      \       |
+------+ +-------+  |
|[8,10)| |[10,12)|  |
+------+ +-------+  |
  / \      / \      |
+-+ +-+ +--+ +--+ +--+
|8| |9| |10| |11| |12|
+-+ +-+ +--+ +--+ +--+
]]></artwork>
          </artset>
        </figure>
        <t>Both subtrees are directly contained in a Merkle Tree of size 13, depicted in <xref target="fig-subtree-containment-example"/>. <tt>[4, 8)</tt> is contained because, although <tt>n</tt> (13) is not <tt>end</tt> (8), the subtree is full. <tt>[8, 13)</tt> is contained because <tt>n</tt> (13) is <tt>end</tt> (13).</t>
        <figure anchor="fig-subtree-containment-example">
          <name>A Merkle Tree of size 13</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,96 Q 314,92.8 316,96 Q 318,99.2 320,96 Q 322,92.8 324,96 Q 326,99.2 328,96 Q 330,92.8 332,96 Q 334,99.2 336,96 Q 338,92.8 340,96 Q 342,99.2 344,96 Q 346,92.8 348,96 Q 350,99.2 352,96 Q 354,92.8 356,96 Q 358,99.2 360,96 Q 362,92.8 364,96 Q 366,99.2 368,96 Q 370,92.8 372,96 Q 374,99.2 376,96 Q 378,92.8 380,96 Q 382,99.2 384,96 Q 386,92.8 388,96 Q 390,99.2 392,96 Q 394,92.8 396,96 Q 398,99.2 400,96 Q 402,92.8 404,96 Q 406,99.2 408,96 Q 410,92.8 412,96 Q 414,99.2 416,96 Q 418,92.8 420,96 Q 422,99.2 424,96 Q 426,92.8 428,96 Q 430,99.2 432,96 Q 434,92.8 436,96 Q 438,99.2 440,96 Q 442,92.8 444,96 Q 446,99.2 448,96 " fill="none" stroke="black"/>
                <path d="M 64,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 312,128 Q 314,124.8 316,128 Q 318,131.2 320,128 Q 322,124.8 324,128 Q 326,131.2 328,128 Q 330,124.8 332,128 Q 334,131.2 336,128 Q 338,124.8 340,128 Q 342,131.2 344,128 Q 346,124.8 348,128 Q 350,131.2 352,128 Q 354,124.8 356,128 Q 358,131.2 360,128 Q 362,124.8 364,128 Q 366,131.2 368,128 Q 370,124.8 372,128 Q 374,131.2 376,128 Q 378,124.8 380,128 Q 382,131.2 384,128 Q 386,124.8 388,128 Q 390,131.2 392,128 Q 394,124.8 396,128 Q 398,131.2 400,128 Q 402,124.8 404,128 Q 406,131.2 408,128 Q 410,124.8 412,128 Q 414,131.2 416,128 Q 418,124.8 420,128 Q 422,131.2 424,128 Q 426,124.8 428,128 Q 430,131.2 432,128 Q 434,124.8 436,128 Q 438,131.2 440,128 Q 442,124.8 444,128 Q 446,131.2 448,128 " 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 Q 290,156.8 292,160 Q 294,163.2 296,160 Q 298,156.8 300,160 Q 302,163.2 304,160 Q 306,156.8 308,160 Q 310,163.2 312,160 Q 314,156.8 316,160 Q 318,163.2 320,160 Q 322,156.8 324,160 Q 326,163.2 328,160 Q 330,156.8 332,160 Q 334,163.2 336,160 Q 338,156.8 340,160 Q 342,163.2 344,160 Q 346,156.8 348,160 Q 350,163.2 352,160 Q 354,156.8 356,160 Q 358,163.2 360,160 Q 362,156.8 364,160 Q 366,163.2 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 Q 290,188.8 292,192 Q 294,195.2 296,192 Q 298,188.8 300,192 Q 302,195.2 304,192 Q 306,188.8 308,192 Q 310,195.2 312,192 Q 314,188.8 316,192 Q 318,195.2 320,192 Q 322,188.8 324,192 Q 326,195.2 328,192 Q 330,188.8 332,192 Q 334,195.2 336,192 Q 338,188.8 340,192 Q 342,195.2 344,192 Q 346,188.8 348,192 Q 350,195.2 352,192 Q 354,188.8 356,192 Q 358,195.2 360,192 Q 362,188.8 364,192 Q 366,195.2 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,222 L 184,222" fill="none" stroke="black"/>
                <path d="M 136,226 L 184,226" fill="none" stroke="black"/>
                <path d="M 200,222 L 248,222" fill="none" stroke="black"/>
                <path d="M 200,226 L 248,226" fill="none" stroke="black"/>
                <path d="M 264,224 Q 266,220.8 268,224 Q 270,227.2 272,224 Q 274,220.8 276,224 Q 278,227.2 280,224 Q 282,220.8 284,224 Q 286,227.2 288,224 Q 290,220.8 292,224 Q 294,227.2 296,224 Q 298,220.8 300,224 Q 302,227.2 304,224 Q 306,220.8 308,224 Q 310,227.2 312,224 Q 314,220.8 316,224 Q 318,227.2 320,224 " fill="none" stroke="black"/>
                <path d="M 336,224 Q 338,220.8 340,224 Q 342,227.2 344,224 Q 346,220.8 348,224 Q 350,227.2 352,224 Q 354,220.8 356,224 Q 358,227.2 360,224 Q 362,220.8 364,224 Q 366,227.2 368,224 Q 370,220.8 372,224 Q 374,227.2 376,224 Q 378,220.8 380,224 Q 382,227.2 384,224 Q 386,220.8 388,224 Q 390,227.2 392,224 Q 394,220.8 396,224 Q 398,227.2 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,254 L 184,254" fill="none" stroke="black"/>
                <path d="M 136,258 L 184,258" fill="none" stroke="black"/>
                <path d="M 200,254 L 248,254" fill="none" stroke="black"/>
                <path d="M 200,258 L 248,258" fill="none" stroke="black"/>
                <path d="M 264,256 Q 266,252.8 268,256 Q 270,259.2 272,256 Q 274,252.8 276,256 Q 278,259.2 280,256 Q 282,252.8 284,256 Q 286,259.2 288,256 Q 290,252.8 292,256 Q 294,259.2 296,256 Q 298,252.8 300,256 Q 302,259.2 304,256 Q 306,252.8 308,256 Q 310,259.2 312,256 Q 314,252.8 316,256 Q 318,259.2 320,256 " fill="none" stroke="black"/>
                <path d="M 336,256 Q 338,252.8 340,256 Q 342,259.2 344,256 Q 346,252.8 348,256 Q 350,259.2 352,256 Q 354,252.8 356,256 Q 358,259.2 360,256 Q 362,252.8 364,256 Q 366,259.2 368,256 Q 370,252.8 372,256 Q 374,259.2 376,256 Q 378,252.8 380,256 Q 382,259.2 384,256 Q 386,252.8 388,256 Q 390,259.2 392,256 Q 394,252.8 396,256 Q 398,259.2 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,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,288 Q 266,284.8 268,288 Q 270,291.2 272,288 Q 274,284.8 276,288 Q 278,291.2 280,288 " fill="none" stroke="black"/>
                <path d="M 296,288 Q 298,284.8 300,288 Q 302,291.2 304,288 Q 306,284.8 308,288 Q 310,291.2 312,288 " fill="none" stroke="black"/>
                <path d="M 328,288 Q 330,284.8 332,288 Q 334,291.2 336,288 Q 338,284.8 340,288 Q 342,291.2 344,288 Q 346,284.8 348,288 Q 350,291.2 352,288 " fill="none" stroke="black"/>
                <path d="M 368,288 Q 370,284.8 372,288 Q 374,291.2 376,288 Q 378,284.8 380,288 Q 382,291.2 384,288 Q 386,284.8 388,288 Q 390,291.2 392,288 " fill="none" stroke="black"/>
                <path d="M 408,288 Q 410,284.8 412,288 Q 414,291.2 416,288 Q 418,284.8 420,288 Q 422,291.2 424,288 Q 426,284.8 428,288 Q 430,291.2 432,288 " 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,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,320 Q 266,316.8 268,320 Q 270,323.2 272,320 Q 274,316.8 276,320 Q 278,323.2 280,320 " fill="none" stroke="black"/>
                <path d="M 296,320 Q 298,316.8 300,320 Q 302,323.2 304,320 Q 306,316.8 308,320 Q 310,323.2 312,320 " fill="none" stroke="black"/>
                <path d="M 328,320 Q 330,316.8 332,320 Q 334,323.2 336,320 Q 338,316.8 340,320 Q 342,323.2 344,320 Q 346,316.8 348,320 Q 350,323.2 352,320 " fill="none" stroke="black"/>
                <path d="M 368,320 Q 370,316.8 372,320 Q 374,323.2 376,320 Q 378,316.8 380,320 Q 382,323.2 384,320 Q 386,316.8 388,320 Q 390,323.2 392,320 " fill="none" stroke="black"/>
                <path d="M 408,320 Q 410,316.8 412,320 Q 414,323.2 416,320 Q 418,316.8 420,320 Q 422,323.2 424,320 Q 426,316.8 428,320 Q 430,323.2 432,320 " 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>In contrast, <tt>[8, 13)</tt> is not directly contained in a Merkle Tree of size 14, depicted in <xref target="fig-subtree-containment-example-2"/>. However, the subtree is still computed over consistent elements.</t>
        <figure anchor="fig-subtree-containment-example-2">
          <name>A Merkle Tree of size 14</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="336" width="488" viewBox="0 0 488 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 416,224 L 416,256" fill="none" stroke="black"/>
                <path d="M 432,136 L 432,216" 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 448,288 L 448,320" fill="none" stroke="black"/>
                <path d="M 472,288 L 472,320" fill="none" stroke="black"/>
                <path d="M 480,224 L 480,256" 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 416,224 L 480,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 416,256 L 480,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,288 L 248,288" fill="none" stroke="black"/>
                <path d="M 264,288 Q 266,284.8 268,288 Q 270,291.2 272,288 Q 274,284.8 276,288 Q 278,291.2 280,288 " fill="none" stroke="black"/>
                <path d="M 296,288 Q 298,284.8 300,288 Q 302,291.2 304,288 Q 306,284.8 308,288 Q 310,291.2 312,288 " fill="none" stroke="black"/>
                <path d="M 328,288 Q 330,284.8 332,288 Q 334,291.2 336,288 Q 338,284.8 340,288 Q 342,291.2 344,288 Q 346,284.8 348,288 Q 350,291.2 352,288 " fill="none" stroke="black"/>
                <path d="M 368,288 Q 370,284.8 372,288 Q 374,291.2 376,288 Q 378,284.8 380,288 Q 382,291.2 384,288 Q 386,284.8 388,288 Q 390,291.2 392,288 " fill="none" stroke="black"/>
                <path d="M 408,288 Q 410,284.8 412,288 Q 414,291.2 416,288 Q 418,284.8 420,288 Q 422,291.2 424,288 Q 426,284.8 428,288 Q 430,291.2 432,288 " fill="none" stroke="black"/>
                <path d="M 448,288 L 472,288" 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,320 L 248,320" fill="none" stroke="black"/>
                <path d="M 264,320 Q 266,316.8 268,320 Q 270,323.2 272,320 Q 274,316.8 276,320 Q 278,323.2 280,320 " fill="none" stroke="black"/>
                <path d="M 296,320 Q 298,316.8 300,320 Q 302,323.2 304,320 Q 306,316.8 308,320 Q 310,323.2 312,320 " fill="none" stroke="black"/>
                <path d="M 328,320 Q 330,316.8 332,320 Q 334,323.2 336,320 Q 338,316.8 340,320 Q 342,323.2 344,320 Q 346,316.8 348,320 Q 350,323.2 352,320 " fill="none" stroke="black"/>
                <path d="M 368,320 Q 370,316.8 372,320 Q 374,323.2 376,320 Q 378,316.8 380,320 Q 382,323.2 384,320 Q 386,316.8 388,320 Q 390,323.2 392,320 " fill="none" stroke="black"/>
                <path d="M 408,320 Q 410,316.8 412,320 Q 414,323.2 416,320 Q 418,316.8 420,320 Q 422,323.2 424,320 Q 426,316.8 428,320 Q 430,323.2 432,320 " fill="none" stroke="black"/>
                <path d="M 448,320 L 472,320" fill="none" stroke="black"/>
                <g class="text">
                  <text x="248" y="52">[0,</text>
                  <text x="280" y="52">14)</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">14)</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="448" y="244">[12,14)</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="432" y="276">/</text>
                  <text x="448" 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="460" y="308">13</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
                +-----------------------------+
                |            [0, 14)          |
                +-----------------------------+
                   /                       \
       +----------------+             +----------------+
       |     [0, 8)     |             |     [8, 14)    |
       +----------------+             +----------------+
        /              \                 /           |
   +--------+      +--------+      +---------+       |
   | [0, 4) |      | [4, 8) |      | [8, 12) |       |
   +--------+      +--------+      +---------+       |
    /      \        /      \         /      \        |
+-----+ +-----+ +-----+ +-----+ +------+ +-------+ +-------+
|[0,2)| |[2,4)| |[4,6)| |[6,8)| |[8,10)| |[10,12)| |[12,14)|
+-----+ +-----+ +-----+ +-----+ +------+ +-------+ +-------+
  / \     / \     / \     / \     / \      / \       / \
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +~+ +~+ +~~+ +~~+ +~~+ +--+
|0| |1| |2| |3| |4| |5| |6| |7| |8| |9| |10| |11| |12| |13|
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +~+ +~+ +~~+ +~~+ +~~+ +--+
]]></artwork>
          </artset>
        </figure>
      </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>.</t>
        <t>Subtree inclusion proofs contain a sequence of nodes that are sufficient to reconstruct the subtree hash, <tt>MTH(D[start:end])</tt>, out of the hash for entry <tt>index</tt>, <tt>MTH({d[index]})</tt>, thus demonstrating that the subtree hash contains the entry's hash.</t>
        <section anchor="example-subtree-inclusion-proofs">
          <name>Example Subtree Inclusion Proofs</name>
          <t>The inclusion proof for entry 10 of subtree <tt>[8, 13)</tt> contains the hashes <tt>MTH({d[11]})</tt>, <tt>MTH(D[8:10])</tt>, and <tt>MTH({d[12]})</tt>, depicted in  <xref target="fig-subtree-inclusion-proof"/>. <tt>MTH({d[10]})</tt> is not part of the proof because the verifier is assumed to already know its value.</t>
          <figure anchor="fig-subtree-inclusion-proof">
            <name>An example subtree inclusion proof</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="272" width="200" viewBox="0 0 200 272" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                  <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                  <path d="M 24,224 L 24,256" fill="none" stroke="black"/>
                  <path d="M 32,96 L 32,128" fill="none" stroke="black"/>
                  <path d="M 40,224 L 40,256" fill="none" stroke="black"/>
                  <path d="M 56,32 L 56,64" fill="none" stroke="black"/>
                  <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                  <path d="M 64,160 L 64,192" fill="none" stroke="black"/>
                  <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                  <path d="M 80,160 L 80,192" fill="none" stroke="black"/>
                  <path d="M 96,224 L 96,256" fill="none" stroke="black"/>
                  <path d="M 112,96 L 112,128" fill="none" stroke="black"/>
                  <path d="M 112,224 L 112,256" fill="none" stroke="black"/>
                  <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                  <path d="M 144,160 L 144,192" fill="none" stroke="black"/>
                  <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                  <path d="M 168,72 L 168,208" fill="none" stroke="black"/>
                  <path d="M 176,224 L 176,256" fill="none" stroke="black"/>
                  <path d="M 192,32 L 192,64" fill="none" stroke="black"/>
                  <path d="M 56,32 L 192,32" fill="none" stroke="black"/>
                  <path d="M 56,64 L 192,64" fill="none" stroke="black"/>
                  <path d="M 32,96 L 112,96" fill="none" stroke="black"/>
                  <path d="M 32,128 L 112,128" fill="none" stroke="black"/>
                  <path d="M 8,158 L 64,158" fill="none" stroke="black"/>
                  <path d="M 8,162 L 64,162" fill="none" stroke="black"/>
                  <path d="M 80,160 L 144,160" fill="none" stroke="black"/>
                  <path d="M 8,190 L 64,190" fill="none" stroke="black"/>
                  <path d="M 8,194 L 64,194" fill="none" stroke="black"/>
                  <path d="M 80,192 L 144,192" fill="none" stroke="black"/>
                  <path d="M 8,224 L 24,224" fill="none" stroke="black"/>
                  <path d="M 40,224 L 56,224" fill="none" stroke="black"/>
                  <path d="M 72,224 Q 74,220.8 76,224 Q 78,227.2 80,224 Q 82,220.8 84,224 Q 86,227.2 88,224 Q 90,220.8 92,224 Q 94,227.2 96,224 " fill="none" stroke="black"/>
                  <path d="M 112,222 L 136,222" fill="none" stroke="black"/>
                  <path d="M 112,226 L 136,226" fill="none" stroke="black"/>
                  <path d="M 152,222 L 176,222" fill="none" stroke="black"/>
                  <path d="M 152,226 L 176,226" fill="none" stroke="black"/>
                  <path d="M 8,256 L 24,256" fill="none" stroke="black"/>
                  <path d="M 40,256 L 56,256" fill="none" stroke="black"/>
                  <path d="M 72,256 Q 74,252.8 76,256 Q 78,259.2 80,256 Q 82,252.8 84,256 Q 86,259.2 88,256 Q 90,252.8 92,256 Q 94,259.2 96,256 " fill="none" stroke="black"/>
                  <path d="M 112,254 L 136,254" fill="none" stroke="black"/>
                  <path d="M 112,258 L 136,258" fill="none" stroke="black"/>
                  <path d="M 152,254 L 176,254" fill="none" stroke="black"/>
                  <path d="M 152,258 L 176,258" fill="none" stroke="black"/>
                  <g class="text">
                    <text x="112" y="52">[8,</text>
                    <text x="144" y="52">13)</text>
                    <text x="80" y="84">/</text>
                    <text x="56" y="116">[8,</text>
                    <text x="88" y="116">12)</text>
                    <text x="48" y="148">/</text>
                    <text x="104" y="148">\</text>
                    <text x="36" y="180">[8,10)</text>
                    <text x="112" y="180">[10,12)</text>
                    <text x="24" y="212">/</text>
                    <text x="40" y="212">\</text>
                    <text x="96" y="212">/</text>
                    <text x="112" y="212">\</text>
                    <text x="16" y="244">8</text>
                    <text x="48" y="244">9</text>
                    <text x="84" y="244">10</text>
                    <text x="124" y="244">11</text>
                    <text x="164" y="244">12</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
      +----------------+
      |     [8, 13)    |
      +----------------+
         /          |
   +---------+      |
   | [8, 12) |      |
   +---------+      |
     /      \       |
+======+ +-------+  |
|[8,10)| |[10,12)|  |
+======+ +-------+  |
  / \      / \      |
+-+ +-+ +~~+ +==+ +==+
|8| |9| |10| |11| |12|
+-+ +-+ +~~+ +==+ +==+
]]></artwork>
            </artset>
          </figure>
        </section>
        <section anchor="evaluating-a-subtree-inclusion-proof">
          <name>Evaluating a Subtree Inclusion Proof</name>
          <t>Given a subtree inclusion proof, <tt>inclusion_proof</tt>, for entry <tt>index</tt>, with hash <tt>entry_hash</tt>, of a subtree <tt>[start, end)</tt>, the subtree inclusion proof can be <em>evaluated</em> to compute the expected subtree hash:</t>
          <!-- If changing this procedure, remember to update {{inclusion-proof-evaluation-explain}} -->

<ol spacing="normal" type="1"><li>
              <t>Check that <tt>[start, end)</tt> is a valid subtree (<xref target="definition-of-a-subtree"/>), and that <tt>start &lt;= index &lt; end</tt>. If either do not hold, fail proof evaluation.</t>
            </li>
            <li>
              <t>Set <tt>fn</tt> to <tt>index - start</tt> and <tt>sn</tt> to <tt>end - start - 1</tt>.</t>
            </li>
            <li>
              <t>Set <tt>r</tt> to <tt>entry_hash</tt>.</t>
            </li>
            <li>
              <t>For each value <tt>p</tt> in the <tt>inclusion_proof</tt> array:  </t>
              <ol spacing="normal" type="1"><li>
                  <t>If <tt>sn</tt> is 0, then stop the iteration and fail proof evaluation.</t>
                </li>
                <li>
                  <t>If <tt>LSB(fn)</tt> is set, or if <tt>fn</tt> is equal to <tt>sn</tt>, then:      </t>
                  <ol spacing="normal" type="1"><li>
                      <t>Set <tt>r</tt> to <tt>HASH(0x01 || p || r)</tt>.</t>
                    </li>
                    <li>
                      <t>Until <tt>LSB(fn)</tt> is set, right-shift <tt>fn</tt> and <tt>sn</tt> equally.</t>
                    </li>
                  </ol>
                  <t>
Otherwise:      </t>
                  <ol spacing="normal" type="1"><li>
                      <t>Set <tt>r</tt> to <tt>HASH(0x01 || r || p)</tt>.</t>
                    </li>
                  </ol>
                </li>
                <li>
                  <t>Finally, right-shift both <tt>fn</tt> and <tt>sn</tt> one time.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>If <tt>sn</tt> is not zero, fail proof evaluation.</t>
            </li>
            <li>
              <t>Return <tt>r</tt> as the expected subtree hash.</t>
            </li>
          </ol>
          <t>This is the same as the procedure in <xref section="2.1.3.2" sectionFormat="of" target="RFC9162"/>, where <tt>leaf_index</tt> is <tt>index - start</tt>, <tt>tree_size</tt> is <tt>end - start</tt>, and <tt>r</tt> is returned instead of compared with <tt>root_hash</tt>.</t>
          <t><xref target="inclusion-proof-evaluation-explain"/> explains this procedure in more detail.</t>
        </section>
        <section anchor="verifying-a-subtree-inclusion-proof">
          <name>Verifying a Subtree Inclusion Proof</name>
          <t>Given a subtree inclusion proof, <tt>inclusion_proof</tt>, for entry <tt>index</tt>, with hash <tt>entry_hash</tt>, of a subtree <tt>[start, end)</tt> with hash <tt>subtree_hash</tt>, the subtree inclusion proof can be <em>verified</em> to verify the described entry is contained in the subtree:</t>
          <ol spacing="normal" type="1"><li>
              <t>Let <tt>expected_subtree_hash</tt> be the result of evaluating the inclusion proof as described <xref target="evaluating-a-subtree-inclusion-proof"/>. If evaluation fails, fail the proof verification.</t>
            </li>
            <li>
              <t>If <tt>subtree_hash</tt> is equal to <tt>expected_subtree_hash</tt>, the entry is contained in the subtree. Otherwise, fail the proof verification.</t>
            </li>
          </ol>
        </section>
      </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>
        <t>Subtree consistency proofs contain sufficient nodes to reconstruct both the subtree hash, <tt>MTH(D[start:end])</tt>, and the full tree hash, <tt>MTH(D_n)</tt>, in such a way that every input to the subtree hash was also incorporated into the full 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>
          <t><xref target="consistency-proof-structure"/> explains the structure of a subtree consistency proof in more detail.</t>
        </section>
        <section anchor="example-subtree-consistency-proofs">
          <name>Example Subtree Consistency Proofs</name>
          <t>The subtree consistency proof for <tt>[4, 8)</tt> and a tree of size 14 contains <tt>MTH(D[0:4])</tt> and <tt>MTH(D[8:14])</tt>, depicted in <xref target="fig-subtree-consistency-example-1"/>. The verifier is assumed to know the subtree hash, so there is no need to include <tt>MTH(D[4:8])</tt> itself in the consistency proof.</t>
          <figure anchor="fig-subtree-consistency-example-1">
            <name>An example subtree consistency proof for a subtree that is directly contained in the full tree</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="528" width="488" viewBox="0 0 488 528" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,96 L 8,128" fill="none" stroke="black"/>
                  <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                  <path d="M 8,416 L 8,448" fill="none" stroke="black"/>
                  <path d="M 8,480 L 8,512" fill="none" stroke="black"/>
                  <path d="M 24,160 L 24,192" fill="none" stroke="black"/>
                  <path d="M 24,480 L 24,512" fill="none" stroke="black"/>
                  <path d="M 32,32 L 32,64" fill="none" stroke="black"/>
                  <path d="M 32,352 L 32,384" fill="none" stroke="black"/>
                  <path d="M 40,160 L 40,192" fill="none" stroke="black"/>
                  <path d="M 40,480 L 40,512" fill="none" stroke="black"/>
                  <path d="M 56,96 L 56,128" fill="none" stroke="black"/>
                  <path d="M 56,160 L 56,192" fill="none" stroke="black"/>
                  <path d="M 56,416 L 56,448" fill="none" stroke="black"/>
                  <path d="M 56,480 L 56,512" fill="none" stroke="black"/>
                  <path d="M 64,288 L 64,320" fill="none" stroke="black"/>
                  <path d="M 72,96 L 72,128" fill="none" stroke="black"/>
                  <path d="M 72,160 L 72,192" fill="none" stroke="black"/>
                  <path d="M 72,416 L 72,448" fill="none" stroke="black"/>
                  <path d="M 72,480 L 72,512" fill="none" stroke="black"/>
                  <path d="M 88,160 L 88,192" fill="none" stroke="black"/>
                  <path d="M 88,480 L 88,512" fill="none" stroke="black"/>
                  <path d="M 104,32 L 104,64" fill="none" stroke="black"/>
                  <path d="M 104,160 L 104,192" fill="none" stroke="black"/>
                  <path d="M 104,352 L 104,384" fill="none" stroke="black"/>
                  <path d="M 104,480 L 104,512" fill="none" stroke="black"/>
                  <path d="M 120,96 L 120,128" fill="none" stroke="black"/>
                  <path d="M 120,160 L 120,192" fill="none" stroke="black"/>
                  <path d="M 120,416 L 120,448" fill="none" stroke="black"/>
                  <path d="M 120,480 L 120,512" fill="none" stroke="black"/>
                  <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                  <path d="M 136,416 L 136,448" fill="none" stroke="black"/>
                  <path d="M 136,480 L 136,512" fill="none" stroke="black"/>
                  <path d="M 152,480 L 152,512" fill="none" stroke="black"/>
                  <path d="M 160,352 L 160,384" fill="none" stroke="black"/>
                  <path d="M 168,480 L 168,512" fill="none" stroke="black"/>
                  <path d="M 184,416 L 184,448" fill="none" stroke="black"/>
                  <path d="M 184,480 L 184,512" fill="none" stroke="black"/>
                  <path d="M 200,288 L 200,320" fill="none" stroke="black"/>
                  <path d="M 200,416 L 200,448" fill="none" stroke="black"/>
                  <path d="M 200,480 L 200,512" fill="none" stroke="black"/>
                  <path d="M 216,480 L 216,512" fill="none" stroke="black"/>
                  <path d="M 232,352 L 232,384" fill="none" stroke="black"/>
                  <path d="M 232,480 L 232,512" fill="none" stroke="black"/>
                  <path d="M 248,416 L 248,448" fill="none" stroke="black"/>
                  <path d="M 248,480 L 248,512" fill="none" stroke="black"/>
                  <path d="M 264,416 L 264,448" fill="none" stroke="black"/>
                  <path d="M 264,480 L 264,512" fill="none" stroke="black"/>
                  <path d="M 280,480 L 280,512" fill="none" stroke="black"/>
                  <path d="M 288,352 L 288,384" fill="none" stroke="black"/>
                  <path d="M 296,480 L 296,512" fill="none" stroke="black"/>
                  <path d="M 312,288 L 312,320" fill="none" stroke="black"/>
                  <path d="M 312,480 L 312,512" fill="none" stroke="black"/>
                  <path d="M 320,416 L 320,448" fill="none" stroke="black"/>
                  <path d="M 328,480 L 328,512" fill="none" stroke="black"/>
                  <path d="M 336,416 L 336,448" fill="none" stroke="black"/>
                  <path d="M 352,480 L 352,512" fill="none" stroke="black"/>
                  <path d="M 368,352 L 368,384" fill="none" stroke="black"/>
                  <path d="M 368,480 L 368,512" fill="none" stroke="black"/>
                  <path d="M 376,224 L 376,256" fill="none" stroke="black"/>
                  <path d="M 392,480 L 392,512" fill="none" stroke="black"/>
                  <path d="M 400,416 L 400,448" fill="none" stroke="black"/>
                  <path d="M 408,480 L 408,512" fill="none" stroke="black"/>
                  <path d="M 416,416 L 416,448" fill="none" stroke="black"/>
                  <path d="M 432,336 L 432,408" fill="none" stroke="black"/>
                  <path d="M 432,480 L 432,512" fill="none" stroke="black"/>
                  <path d="M 448,288 L 448,320" fill="none" stroke="black"/>
                  <path d="M 448,480 L 448,512" fill="none" stroke="black"/>
                  <path d="M 472,480 L 472,512" fill="none" stroke="black"/>
                  <path d="M 480,416 L 480,448" fill="none" stroke="black"/>
                  <path d="M 32,32 Q 34,28.8 36,32 Q 38,35.2 40,32 Q 42,28.8 44,32 Q 46,35.2 48,32 Q 50,28.8 52,32 Q 54,35.2 56,32 Q 58,28.8 60,32 Q 62,35.2 64,32 Q 66,28.8 68,32 Q 70,35.2 72,32 Q 74,28.8 76,32 Q 78,35.2 80,32 Q 82,28.8 84,32 Q 86,35.2 88,32 Q 90,28.8 92,32 Q 94,35.2 96,32 Q 98,28.8 100,32 Q 102,35.2 104,32 " fill="none" stroke="black"/>
                  <path d="M 32,64 Q 34,60.8 36,64 Q 38,67.2 40,64 Q 42,60.8 44,64 Q 46,67.2 48,64 Q 50,60.8 52,64 Q 54,67.2 56,64 Q 58,60.8 60,64 Q 62,67.2 64,64 Q 66,60.8 68,64 Q 70,67.2 72,64 Q 74,60.8 76,64 Q 78,67.2 80,64 Q 82,60.8 84,64 Q 86,67.2 88,64 Q 90,60.8 92,64 Q 94,67.2 96,64 Q 98,60.8 100,64 Q 102,67.2 104,64 " fill="none" stroke="black"/>
                  <path d="M 8,96 L 56,96" fill="none" stroke="black"/>
                  <path d="M 72,96 L 120,96" fill="none" stroke="black"/>
                  <path d="M 8,128 L 56,128" fill="none" stroke="black"/>
                  <path d="M 72,128 L 120,128" fill="none" stroke="black"/>
                  <path d="M 8,160 L 24,160" fill="none" stroke="black"/>
                  <path d="M 40,160 L 56,160" fill="none" stroke="black"/>
                  <path d="M 72,160 L 88,160" fill="none" stroke="black"/>
                  <path d="M 104,160 L 120,160" fill="none" stroke="black"/>
                  <path d="M 8,192 L 24,192" fill="none" stroke="black"/>
                  <path d="M 40,192 L 56,192" fill="none" stroke="black"/>
                  <path d="M 72,192 L 88,192" fill="none" stroke="black"/>
                  <path d="M 104,192 L 120,192" fill="none" stroke="black"/>
                  <path d="M 136,224 L 376,224" fill="none" stroke="black"/>
                  <path d="M 136,256 L 376,256" fill="none" stroke="black"/>
                  <path d="M 64,288 L 200,288" fill="none" stroke="black"/>
                  <path d="M 312,286 L 448,286" fill="none" stroke="black"/>
                  <path d="M 312,290 L 448,290" fill="none" stroke="black"/>
                  <path d="M 64,320 L 200,320" fill="none" stroke="black"/>
                  <path d="M 312,318 L 448,318" fill="none" stroke="black"/>
                  <path d="M 312,322 L 448,322" fill="none" stroke="black"/>
                  <path d="M 32,350 L 104,350" fill="none" stroke="black"/>
                  <path d="M 32,354 L 104,354" fill="none" stroke="black"/>
                  <path d="M 160,352 Q 162,348.8 164,352 Q 166,355.2 168,352 Q 170,348.8 172,352 Q 174,355.2 176,352 Q 178,348.8 180,352 Q 182,355.2 184,352 Q 186,348.8 188,352 Q 190,355.2 192,352 Q 194,348.8 196,352 Q 198,355.2 200,352 Q 202,348.8 204,352 Q 206,355.2 208,352 Q 210,348.8 212,352 Q 214,355.2 216,352 Q 218,348.8 220,352 Q 222,355.2 224,352 Q 226,348.8 228,352 Q 230,355.2 232,352 " fill="none" stroke="black"/>
                  <path d="M 288,352 L 368,352" fill="none" stroke="black"/>
                  <path d="M 32,382 L 104,382" fill="none" stroke="black"/>
                  <path d="M 32,386 L 104,386" fill="none" stroke="black"/>
                  <path d="M 160,384 Q 162,380.8 164,384 Q 166,387.2 168,384 Q 170,380.8 172,384 Q 174,387.2 176,384 Q 178,380.8 180,384 Q 182,387.2 184,384 Q 186,380.8 188,384 Q 190,387.2 192,384 Q 194,380.8 196,384 Q 198,387.2 200,384 Q 202,380.8 204,384 Q 206,387.2 208,384 Q 210,380.8 212,384 Q 214,387.2 216,384 Q 218,380.8 220,384 Q 222,387.2 224,384 Q 226,380.8 228,384 Q 230,387.2 232,384 " fill="none" stroke="black"/>
                  <path d="M 288,384 L 368,384" fill="none" stroke="black"/>
                  <path d="M 8,416 L 56,416" fill="none" stroke="black"/>
                  <path d="M 72,416 L 120,416" fill="none" stroke="black"/>
                  <path d="M 136,416 L 184,416" fill="none" stroke="black"/>
                  <path d="M 200,416 L 248,416" fill="none" stroke="black"/>
                  <path d="M 264,416 L 320,416" fill="none" stroke="black"/>
                  <path d="M 336,416 L 400,416" fill="none" stroke="black"/>
                  <path d="M 416,416 L 480,416" fill="none" stroke="black"/>
                  <path d="M 8,448 L 56,448" fill="none" stroke="black"/>
                  <path d="M 72,448 L 120,448" fill="none" stroke="black"/>
                  <path d="M 136,448 L 184,448" fill="none" stroke="black"/>
                  <path d="M 200,448 L 248,448" fill="none" stroke="black"/>
                  <path d="M 264,448 L 320,448" fill="none" stroke="black"/>
                  <path d="M 336,448 L 400,448" fill="none" stroke="black"/>
                  <path d="M 416,448 L 480,448" fill="none" stroke="black"/>
                  <path d="M 8,480 L 24,480" fill="none" stroke="black"/>
                  <path d="M 40,480 L 56,480" fill="none" stroke="black"/>
                  <path d="M 72,480 L 88,480" fill="none" stroke="black"/>
                  <path d="M 104,480 L 120,480" fill="none" stroke="black"/>
                  <path d="M 136,480 L 152,480" fill="none" stroke="black"/>
                  <path d="M 168,480 L 184,480" fill="none" stroke="black"/>
                  <path d="M 200,480 L 216,480" fill="none" stroke="black"/>
                  <path d="M 232,480 L 248,480" fill="none" stroke="black"/>
                  <path d="M 264,480 L 280,480" fill="none" stroke="black"/>
                  <path d="M 296,480 L 312,480" fill="none" stroke="black"/>
                  <path d="M 328,480 L 352,480" fill="none" stroke="black"/>
                  <path d="M 368,480 L 392,480" fill="none" stroke="black"/>
                  <path d="M 408,480 L 432,480" fill="none" stroke="black"/>
                  <path d="M 448,480 L 472,480" fill="none" stroke="black"/>
                  <path d="M 8,512 L 24,512" fill="none" stroke="black"/>
                  <path d="M 40,512 L 56,512" fill="none" stroke="black"/>
                  <path d="M 72,512 L 88,512" fill="none" stroke="black"/>
                  <path d="M 104,512 L 120,512" fill="none" stroke="black"/>
                  <path d="M 136,512 L 152,512" fill="none" stroke="black"/>
                  <path d="M 168,512 L 184,512" fill="none" stroke="black"/>
                  <path d="M 200,512 L 216,512" fill="none" stroke="black"/>
                  <path d="M 232,512 L 248,512" fill="none" stroke="black"/>
                  <path d="M 264,512 L 280,512" fill="none" stroke="black"/>
                  <path d="M 296,512 L 312,512" fill="none" stroke="black"/>
                  <path d="M 328,512 L 352,512" fill="none" stroke="black"/>
                  <path d="M 368,512 L 392,512" fill="none" stroke="black"/>
                  <path d="M 408,512 L 432,512" fill="none" stroke="black"/>
                  <path d="M 448,512 L 472,512" fill="none" stroke="black"/>
                  <g class="text">
                    <text x="56" y="52">[4,</text>
                    <text x="84" y="52">8)</text>
                    <text x="40" y="84">/</text>
                    <text x="96" y="84">\</text>
                    <text x="32" y="116">[4,6)</text>
                    <text x="96" y="116">[6,8)</text>
                    <text x="24" y="148">/</text>
                    <text x="40" y="148">\</text>
                    <text x="88" y="148">/</text>
                    <text x="104" y="148">\</text>
                    <text x="16" y="180">4</text>
                    <text x="48" y="180">5</text>
                    <text x="80" y="180">6</text>
                    <text x="112" y="180">7</text>
                    <text x="248" y="244">[0,</text>
                    <text x="280" y="244">14)</text>
                    <text x="160" y="276">/</text>
                    <text x="352" y="276">\</text>
                    <text x="120" y="308">[0,</text>
                    <text x="148" y="308">8)</text>
                    <text x="368" y="308">[8,</text>
                    <text x="400" y="308">14)</text>
                    <text x="72" y="340">/</text>
                    <text x="192" y="340">\</text>
                    <text x="336" y="340">/</text>
                    <text x="56" y="372">[0,</text>
                    <text x="84" y="372">4)</text>
                    <text x="184" y="372">[4,</text>
                    <text x="212" y="372">8)</text>
                    <text x="312" y="372">[8,</text>
                    <text x="344" y="372">12)</text>
                    <text x="40" y="404">/</text>
                    <text x="96" y="404">\</text>
                    <text x="168" y="404">/</text>
                    <text x="224" y="404">\</text>
                    <text x="304" y="404">/</text>
                    <text x="360" y="404">\</text>
                    <text x="32" y="436">[0,2)</text>
                    <text x="96" y="436">[2,4)</text>
                    <text x="160" y="436">[4,6)</text>
                    <text x="224" y="436">[6,8)</text>
                    <text x="292" y="436">[8,10)</text>
                    <text x="368" y="436">[10,12)</text>
                    <text x="448" y="436">[12,14)</text>
                    <text x="24" y="468">/</text>
                    <text x="40" y="468">\</text>
                    <text x="88" y="468">/</text>
                    <text x="104" y="468">\</text>
                    <text x="152" y="468">/</text>
                    <text x="168" y="468">\</text>
                    <text x="216" y="468">/</text>
                    <text x="232" y="468">\</text>
                    <text x="280" y="468">/</text>
                    <text x="296" y="468">\</text>
                    <text x="352" y="468">/</text>
                    <text x="368" y="468">\</text>
                    <text x="432" y="468">/</text>
                    <text x="448" y="468">\</text>
                    <text x="16" y="500">0</text>
                    <text x="48" y="500">1</text>
                    <text x="80" y="500">2</text>
                    <text x="112" y="500">3</text>
                    <text x="144" y="500">4</text>
                    <text x="176" y="500">5</text>
                    <text x="208" y="500">6</text>
                    <text x="240" y="500">7</text>
                    <text x="272" y="500">8</text>
                    <text x="304" y="500">9</text>
                    <text x="340" y="500">10</text>
                    <text x="380" y="500">11</text>
                    <text x="420" y="500">12</text>
                    <text x="460" y="500">13</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
   +~~~~~~~~+
   | [4, 8) |
   +~~~~~~~~+
    /      \
+-----+ +-----+
|[4,6)| |[6,8)|
+-----+ +-----+
  / \     / \
+-+ +-+ +-+ +-+
|4| |5| |6| |7|
+-+ +-+ +-+ +-+

                +-----------------------------+
                |            [0, 14)          |
                +-----------------------------+
                   /                       \
       +----------------+             +================+
       |     [0, 8)     |             |     [8, 14)    |
       +----------------+             +================+
        /              \                 /           |
   +========+      +~~~~~~~~+      +---------+       |
   | [0, 4) |      | [4, 8) |      | [8, 12) |       |
   +========+      +~~~~~~~~+      +---------+       |
    /      \        /      \         /      \        |
+-----+ +-----+ +-----+ +-----+ +------+ +-------+ +-------+
|[0,2)| |[2,4)| |[4,6)| |[6,8)| |[8,10)| |[10,12)| |[12,14)|
+-----+ +-----+ +-----+ +-----+ +------+ +-------+ +-------+
  / \     / \     / \     / \     / \      / \       / \
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +--+ +--+ +--+ +--+
|0| |1| |2| |3| |4| |5| |6| |7| |8| |9| |10| |11| |12| |13|
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +--+ +--+ +--+ +--+
]]></artwork>
            </artset>
          </figure>
          <t>The subtree consistency proof for <tt>[8, 13)</tt> and a tree of size 14 contains <tt>MTH({d[12]})</tt>, <tt>MTH({d[13]})</tt>, <tt>MTH(D[8:12])</tt>, and <tt>MTH(D[0:8])</tt>, depicted in <xref target="fig-subtree-consistency-example-2"/>. <tt>[8, 13)</tt> is not directly contained in the tree, so the proof must include sufficient nodes to reconstruct both hashes.</t>
          <figure anchor="fig-subtree-consistency-example-2">
            <name>An example subtree consistency proof for a subtree that is not directly contained in the full tree</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="592" width="488" viewBox="0 0 488 592" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                  <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                  <path d="M 8,480 L 8,512" fill="none" stroke="black"/>
                  <path d="M 8,544 L 8,576" fill="none" stroke="black"/>
                  <path d="M 24,224 L 24,256" fill="none" stroke="black"/>
                  <path d="M 24,544 L 24,576" fill="none" stroke="black"/>
                  <path d="M 32,96 L 32,128" fill="none" stroke="black"/>
                  <path d="M 32,416 L 32,448" fill="none" stroke="black"/>
                  <path d="M 40,224 L 40,256" fill="none" stroke="black"/>
                  <path d="M 40,544 L 40,576" fill="none" stroke="black"/>
                  <path d="M 56,32 L 56,64" fill="none" stroke="black"/>
                  <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                  <path d="M 56,480 L 56,512" fill="none" stroke="black"/>
                  <path d="M 56,544 L 56,576" fill="none" stroke="black"/>
                  <path d="M 64,160 L 64,192" fill="none" stroke="black"/>
                  <path d="M 64,352 L 64,384" fill="none" stroke="black"/>
                  <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                  <path d="M 72,480 L 72,512" fill="none" stroke="black"/>
                  <path d="M 72,544 L 72,576" fill="none" stroke="black"/>
                  <path d="M 80,160 L 80,192" fill="none" stroke="black"/>
                  <path d="M 88,544 L 88,576" fill="none" stroke="black"/>
                  <path d="M 96,224 L 96,256" fill="none" stroke="black"/>
                  <path d="M 104,416 L 104,448" fill="none" stroke="black"/>
                  <path d="M 104,544 L 104,576" fill="none" stroke="black"/>
                  <path d="M 112,96 L 112,128" fill="none" stroke="black"/>
                  <path d="M 112,224 L 112,256" fill="none" stroke="black"/>
                  <path d="M 120,480 L 120,512" fill="none" stroke="black"/>
                  <path d="M 120,544 L 120,576" 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,480 L 136,512" fill="none" stroke="black"/>
                  <path d="M 136,544 L 136,576" fill="none" stroke="black"/>
                  <path d="M 144,160 L 144,192" fill="none" stroke="black"/>
                  <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                  <path d="M 152,544 L 152,576" fill="none" stroke="black"/>
                  <path d="M 160,416 L 160,448" fill="none" stroke="black"/>
                  <path d="M 168,72 L 168,208" fill="none" stroke="black"/>
                  <path d="M 168,544 L 168,576" fill="none" stroke="black"/>
                  <path d="M 176,224 L 176,256" fill="none" stroke="black"/>
                  <path d="M 184,480 L 184,512" fill="none" stroke="black"/>
                  <path d="M 184,544 L 184,576" fill="none" stroke="black"/>
                  <path d="M 192,32 L 192,64" fill="none" stroke="black"/>
                  <path d="M 200,352 L 200,384" fill="none" stroke="black"/>
                  <path d="M 200,480 L 200,512" fill="none" stroke="black"/>
                  <path d="M 200,544 L 200,576" fill="none" stroke="black"/>
                  <path d="M 216,544 L 216,576" fill="none" stroke="black"/>
                  <path d="M 232,416 L 232,448" fill="none" stroke="black"/>
                  <path d="M 232,544 L 232,576" fill="none" stroke="black"/>
                  <path d="M 248,480 L 248,512" fill="none" stroke="black"/>
                  <path d="M 248,544 L 248,576" fill="none" stroke="black"/>
                  <path d="M 264,480 L 264,512" fill="none" stroke="black"/>
                  <path d="M 264,544 L 264,576" fill="none" stroke="black"/>
                  <path d="M 280,544 L 280,576" fill="none" stroke="black"/>
                  <path d="M 288,416 L 288,448" fill="none" stroke="black"/>
                  <path d="M 296,544 L 296,576" fill="none" stroke="black"/>
                  <path d="M 312,352 L 312,384" fill="none" stroke="black"/>
                  <path d="M 312,544 L 312,576" fill="none" stroke="black"/>
                  <path d="M 320,480 L 320,512" fill="none" stroke="black"/>
                  <path d="M 328,544 L 328,576" fill="none" stroke="black"/>
                  <path d="M 336,480 L 336,512" fill="none" stroke="black"/>
                  <path d="M 352,544 L 352,576" fill="none" stroke="black"/>
                  <path d="M 368,416 L 368,448" fill="none" stroke="black"/>
                  <path d="M 368,544 L 368,576" fill="none" stroke="black"/>
                  <path d="M 376,288 L 376,320" fill="none" stroke="black"/>
                  <path d="M 392,544 L 392,576" fill="none" stroke="black"/>
                  <path d="M 400,480 L 400,512" fill="none" stroke="black"/>
                  <path d="M 408,544 L 408,576" fill="none" stroke="black"/>
                  <path d="M 416,480 L 416,512" fill="none" stroke="black"/>
                  <path d="M 432,392 L 432,472" fill="none" stroke="black"/>
                  <path d="M 432,544 L 432,576" fill="none" stroke="black"/>
                  <path d="M 448,352 L 448,384" fill="none" stroke="black"/>
                  <path d="M 448,544 L 448,576" fill="none" stroke="black"/>
                  <path d="M 472,544 L 472,576" fill="none" stroke="black"/>
                  <path d="M 480,480 L 480,512" fill="none" stroke="black"/>
                  <path d="M 56,32 L 192,32" fill="none" stroke="black"/>
                  <path d="M 56,64 L 192,64" fill="none" stroke="black"/>
                  <path d="M 32,94 L 112,94" fill="none" stroke="black"/>
                  <path d="M 32,98 L 112,98" fill="none" stroke="black"/>
                  <path d="M 32,126 L 112,126" fill="none" stroke="black"/>
                  <path d="M 32,130 L 112,130" fill="none" stroke="black"/>
                  <path d="M 8,160 L 64,160" fill="none" stroke="black"/>
                  <path d="M 80,160 L 144,160" fill="none" stroke="black"/>
                  <path d="M 8,192 L 64,192" fill="none" stroke="black"/>
                  <path d="M 80,192 L 144,192" fill="none" stroke="black"/>
                  <path d="M 8,224 L 24,224" fill="none" stroke="black"/>
                  <path d="M 40,224 L 56,224" fill="none" stroke="black"/>
                  <path d="M 72,224 L 96,224" fill="none" stroke="black"/>
                  <path d="M 112,224 L 136,224" fill="none" stroke="black"/>
                  <path d="M 152,222 L 176,222" fill="none" stroke="black"/>
                  <path d="M 152,226 L 176,226" fill="none" stroke="black"/>
                  <path d="M 8,256 L 24,256" fill="none" stroke="black"/>
                  <path d="M 40,256 L 56,256" fill="none" stroke="black"/>
                  <path d="M 72,256 L 96,256" fill="none" stroke="black"/>
                  <path d="M 112,256 L 136,256" fill="none" stroke="black"/>
                  <path d="M 152,254 L 176,254" fill="none" stroke="black"/>
                  <path d="M 152,258 L 176,258" fill="none" stroke="black"/>
                  <path d="M 136,288 L 376,288" fill="none" stroke="black"/>
                  <path d="M 136,320 L 376,320" fill="none" stroke="black"/>
                  <path d="M 64,350 L 200,350" fill="none" stroke="black"/>
                  <path d="M 64,354 L 200,354" fill="none" stroke="black"/>
                  <path d="M 312,352 L 448,352" fill="none" stroke="black"/>
                  <path d="M 64,382 L 200,382" fill="none" stroke="black"/>
                  <path d="M 64,386 L 200,386" fill="none" stroke="black"/>
                  <path d="M 312,384 L 448,384" fill="none" stroke="black"/>
                  <path d="M 32,416 L 104,416" fill="none" stroke="black"/>
                  <path d="M 160,416 L 232,416" fill="none" stroke="black"/>
                  <path d="M 288,414 L 368,414" fill="none" stroke="black"/>
                  <path d="M 288,418 L 368,418" fill="none" stroke="black"/>
                  <path d="M 32,448 L 104,448" fill="none" stroke="black"/>
                  <path d="M 160,448 L 232,448" fill="none" stroke="black"/>
                  <path d="M 288,446 L 368,446" fill="none" stroke="black"/>
                  <path d="M 288,450 L 368,450" fill="none" stroke="black"/>
                  <path d="M 8,480 L 56,480" fill="none" stroke="black"/>
                  <path d="M 72,480 L 120,480" fill="none" stroke="black"/>
                  <path d="M 136,480 L 184,480" fill="none" stroke="black"/>
                  <path d="M 200,480 L 248,480" fill="none" stroke="black"/>
                  <path d="M 264,480 L 320,480" fill="none" stroke="black"/>
                  <path d="M 336,480 L 400,480" fill="none" stroke="black"/>
                  <path d="M 416,480 L 480,480" fill="none" stroke="black"/>
                  <path d="M 8,512 L 56,512" fill="none" stroke="black"/>
                  <path d="M 72,512 L 120,512" fill="none" stroke="black"/>
                  <path d="M 136,512 L 184,512" fill="none" stroke="black"/>
                  <path d="M 200,512 L 248,512" fill="none" stroke="black"/>
                  <path d="M 264,512 L 320,512" fill="none" stroke="black"/>
                  <path d="M 336,512 L 400,512" fill="none" stroke="black"/>
                  <path d="M 416,512 L 480,512" fill="none" stroke="black"/>
                  <path d="M 8,544 L 24,544" fill="none" stroke="black"/>
                  <path d="M 40,544 L 56,544" fill="none" stroke="black"/>
                  <path d="M 72,544 L 88,544" fill="none" stroke="black"/>
                  <path d="M 104,544 L 120,544" fill="none" stroke="black"/>
                  <path d="M 136,544 L 152,544" fill="none" stroke="black"/>
                  <path d="M 168,544 L 184,544" fill="none" stroke="black"/>
                  <path d="M 200,544 L 216,544" fill="none" stroke="black"/>
                  <path d="M 232,544 L 248,544" fill="none" stroke="black"/>
                  <path d="M 264,544 L 280,544" fill="none" stroke="black"/>
                  <path d="M 296,544 L 312,544" fill="none" stroke="black"/>
                  <path d="M 328,544 L 352,544" fill="none" stroke="black"/>
                  <path d="M 368,544 L 392,544" fill="none" stroke="black"/>
                  <path d="M 408,542 L 432,542" fill="none" stroke="black"/>
                  <path d="M 408,546 L 432,546" fill="none" stroke="black"/>
                  <path d="M 448,542 L 472,542" fill="none" stroke="black"/>
                  <path d="M 448,546 L 472,546" fill="none" stroke="black"/>
                  <path d="M 8,576 L 24,576" fill="none" stroke="black"/>
                  <path d="M 40,576 L 56,576" fill="none" stroke="black"/>
                  <path d="M 72,576 L 88,576" fill="none" stroke="black"/>
                  <path d="M 104,576 L 120,576" fill="none" stroke="black"/>
                  <path d="M 136,576 L 152,576" fill="none" stroke="black"/>
                  <path d="M 168,576 L 184,576" fill="none" stroke="black"/>
                  <path d="M 200,576 L 216,576" fill="none" stroke="black"/>
                  <path d="M 232,576 L 248,576" fill="none" stroke="black"/>
                  <path d="M 264,576 L 280,576" fill="none" stroke="black"/>
                  <path d="M 296,576 L 312,576" fill="none" stroke="black"/>
                  <path d="M 328,576 L 352,576" fill="none" stroke="black"/>
                  <path d="M 368,576 L 392,576" fill="none" stroke="black"/>
                  <path d="M 408,574 L 432,574" fill="none" stroke="black"/>
                  <path d="M 408,578 L 432,578" fill="none" stroke="black"/>
                  <path d="M 448,574 L 472,574" fill="none" stroke="black"/>
                  <path d="M 448,578 L 472,578" fill="none" stroke="black"/>
                  <g class="text">
                    <text x="112" y="52">[8,</text>
                    <text x="144" y="52">13)</text>
                    <text x="80" y="84">/</text>
                    <text x="56" y="116">[8,</text>
                    <text x="88" y="116">12)</text>
                    <text x="48" y="148">/</text>
                    <text x="104" y="148">\</text>
                    <text x="36" y="180">[8,10)</text>
                    <text x="112" y="180">[10,12)</text>
                    <text x="24" y="212">/</text>
                    <text x="40" y="212">\</text>
                    <text x="96" y="212">/</text>
                    <text x="112" y="212">\</text>
                    <text x="16" y="244">8</text>
                    <text x="48" y="244">9</text>
                    <text x="84" y="244">10</text>
                    <text x="124" y="244">11</text>
                    <text x="164" y="244">12</text>
                    <text x="248" y="308">[0,</text>
                    <text x="280" y="308">14)</text>
                    <text x="160" y="340">/</text>
                    <text x="352" y="340">\</text>
                    <text x="120" y="372">[0,</text>
                    <text x="148" y="372">8)</text>
                    <text x="368" y="372">[8,</text>
                    <text x="400" y="372">14)</text>
                    <text x="72" y="404">/</text>
                    <text x="192" y="404">\</text>
                    <text x="336" y="404">/</text>
                    <text x="56" y="436">[0,</text>
                    <text x="84" y="436">4)</text>
                    <text x="184" y="436">[4,</text>
                    <text x="212" y="436">8)</text>
                    <text x="312" y="436">[8,</text>
                    <text x="344" y="436">12)</text>
                    <text x="40" y="468">/</text>
                    <text x="96" y="468">\</text>
                    <text x="168" y="468">/</text>
                    <text x="224" y="468">\</text>
                    <text x="304" y="468">/</text>
                    <text x="360" y="468">\</text>
                    <text x="32" y="500">[0,2)</text>
                    <text x="96" y="500">[2,4)</text>
                    <text x="160" y="500">[4,6)</text>
                    <text x="224" y="500">[6,8)</text>
                    <text x="292" y="500">[8,10)</text>
                    <text x="368" y="500">[10,12)</text>
                    <text x="448" y="500">[12,14)</text>
                    <text x="24" y="532">/</text>
                    <text x="40" y="532">\</text>
                    <text x="88" y="532">/</text>
                    <text x="104" y="532">\</text>
                    <text x="152" y="532">/</text>
                    <text x="168" y="532">\</text>
                    <text x="216" y="532">/</text>
                    <text x="232" y="532">\</text>
                    <text x="280" y="532">/</text>
                    <text x="296" y="532">\</text>
                    <text x="352" y="532">/</text>
                    <text x="368" y="532">\</text>
                    <text x="432" y="532">/</text>
                    <text x="448" y="532">\</text>
                    <text x="16" y="564">0</text>
                    <text x="48" y="564">1</text>
                    <text x="80" y="564">2</text>
                    <text x="112" y="564">3</text>
                    <text x="144" y="564">4</text>
                    <text x="176" y="564">5</text>
                    <text x="208" y="564">6</text>
                    <text x="240" y="564">7</text>
                    <text x="272" y="564">8</text>
                    <text x="304" y="564">9</text>
                    <text x="340" y="564">10</text>
                    <text x="380" y="564">11</text>
                    <text x="420" y="564">12</text>
                    <text x="460" y="564">13</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
      +----------------+
      |     [8, 13)    |
      +----------------+
         /          |
   +=========+      |
   | [8, 12) |      |
   +=========+      |
     /      \       |
+------+ +-------+  |
|[8,10)| |[10,12)|  |
+------+ +-------+  |
  / \      / \      |
+-+ +-+ +--+ +--+ +==+
|8| |9| |10| |11| |12|
+-+ +-+ +--+ +--+ +==+

                +-----------------------------+
                |            [0, 14)          |
                +-----------------------------+
                   /                       \
       +================+             +----------------+
       |     [0, 8)     |             |     [8, 14)    |
       +================+             +----------------+
        /              \                 /           |
   +--------+      +--------+      +=========+       |
   | [0, 4) |      | [4, 8) |      | [8, 12) |       |
   +--------+      +--------+      +=========+       |
    /      \        /      \         /      \        |
+-----+ +-----+ +-----+ +-----+ +------+ +-------+ +-------+
|[0,2)| |[2,4)| |[4,6)| |[6,8)| |[8,10)| |[10,12)| |[12,14)|
+-----+ +-----+ +-----+ +-----+ +------+ +-------+ +-------+
  / \     / \     / \     / \     / \      / \       / \
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +--+ +--+ +==+ +==+
|0| |1| |2| |3| |4| |5| |6| |7| |8| |9| |10| |11| |12| |13|
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +--+ +--+ +==+ +==+
]]></artwork>
            </artset>
          </figure>
        </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>
          <!-- If changing this procedure, remember to update {{consistency-proof-verification-explain}} -->

<ol spacing="normal" type="1"><li>
              <t>Check that <tt>[start, end)</tt> is a valid subtree (<xref target="definition-of-a-subtree"/>), and that <tt>end &lt;= n</tt>. If either do not hold, fail proof verification. These checks imply <tt>0 &lt;= start &lt; end &lt;= n</tt>.</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>If <tt>sn</tt> is <tt>tn</tt>, then:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>Until <tt>fn</tt> is <tt>sn</tt>, right-shift <tt>fn</tt>, <tt>sn</tt>, and <tt>tn</tt> equally.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>Otherwise:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>Until <tt>fn</tt> is <tt>sn</tt> or <tt>LSB(sn)</tt> is not set, right-shift <tt>fn</tt>, <tt>sn</tt>, and <tt>tn</tt> equally.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>If <tt>fn</tt> is <tt>sn</tt>, set <tt>fr</tt> and <tt>sr</tt> to <tt>node_hash</tt>.</t>
            </li>
            <li>
              <t>Otherwise:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>If <tt>proof</tt> is an empty array, stop and fail verification.</t>
                </li>
                <li>
                  <t>Remove the first value of the <tt>proof</tt> array and set <tt>fr</tt> and <tt>sr</tt> to the removed value.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>For each value <tt>c</tt> in the <tt>proof</tt> array:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>If <tt>tn</tt> is <tt>0</tt>, 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>Until <tt>LSB(sn)</tt> is set, right-shift <tt>fn</tt>, <tt>sn</tt>, and <tt>tn</tt> equally.</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>Right-shift <tt>fn</tt>, <tt>sn</tt>, and <tt>tn</tt> once more.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>Compare <tt>tn</tt> to <tt>0</tt>, <tt>fr</tt> to <tt>node_hash</tt>, and <tt>sr</tt> to <tt>root_hash</tt>. If any are not equal, fail the proof verification. If all are equal, accept the proof.</t>
            </li>
          </ol>
          <t><xref target="consistency-proof-verification-explain"/> explains this procedure in more detail.</t>
        </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-pair-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-pair-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(25) TBD}
]]></sourcecode>
        <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.25.TBD=#0d0481fd5901
]]></artwork>
        <t>For initial experimentation, early implementations of this design will:</t>
        <ol spacing="normal" type="1"><li>
            <t>Use UTF8String to represent the attribute's value rather than RELATIVE-OID. The UTF8String contains trust anchor ID's ASCII representation, e.g. <tt>324731.1</tt>.</t>
          </li>
          <li>
            <t>Use the OID 1.3.6.1.4.1.44363.47.1 instead of <tt>id-rdna-trustAnchorID</tt>.</t>
          </li>
        </ol>
        <t>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.4.1.44363.47.1=#0c0733323437332e31
]]></artwork>
      </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 strictly 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. Landmark zero has no landmark subtrees.</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 strictly 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<sup>32</sup> (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, with their hashes, 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-alg-mtcProof</tt> with omitted parameters. If either check fails, abort this process and fail verification.</t>
          </li>
          <li>
            <t>Decode the <tt>signatureValue</tt> as an MTCProof, as described in <xref target="certificate-format"/>.</t>
          </li>
          <li>
            <t>Let <tt>index</tt> be the certificate's serial number. 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. Let <tt>entry_hash</tt> be the hash of the entry, <tt>MTH({entry}) = HASH(0x00 || entry)</tt>, as defined in <xref section="2.1.1" sectionFormat="of" target="RFC9162"/>.</t>
          </li>
          <li>
            <t>Let <tt>expected_subtree_hash</tt> be the result of evaluating the MTCProof's <tt>inclusion_proof</tt> for entry <tt>index</tt>, with hash <tt>entry_hash</tt>, of the subtree described by the MTCProof's <tt>start</tt> and <tt>end</tt>, following the procedure in <xref target="evaluating-a-subtree-inclusion-proof"/>. If evaluation fails, abort this process and fail verification.</t>
          </li>
          <li>
            <t>If <tt>[start, end)</tt> matches a trusted subtree (<xref target="trusted-subtrees"/>), check that <tt>expected_subtree_hash</tt> is equal to the trusted subtree's hash. Return success if it matches and failure if it does not.</t>
          </li>
          <li>
            <t>Otherwise, check that the MTCProof's <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"/>. The <tt>hash</tt> field of the MTCSubtree is set to <tt>expected_subtree_hash</tt>.</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>Most X.509 fields such as subjectPublicKeyInfo and X.509 extensions such as subjectAltName are unmodified in Merkle Tree certificates. They apply to TLS-based applications as in a traditional X.509 certificate. The primary new considerations for use in TLS are:</t>
      <ul spacing="normal">
        <li>
          <t>Whether the authenticating party should send a certificate from one Merkle Tree CA, another Merkle Tree CA, or a traditional X.509 CA</t>
        </li>
        <li>
          <t>Whether the authenticating party should send a full or signatureless certificate</t>
        </li>
        <li>
          <t>What the relying party should communicate to the authenticating party to help it make this decision</t>
        </li>
      </ul>
      <t>Certificate selection in TLS, described in Section <xref target="RFC8446" section="4.4.2.2" sectionFormat="bare"/> and Section <xref target="RFC8446" section="4.4.2.3" sectionFormat="bare"/> of <xref target="RFC8446"/>, incorporates both explicit relying-party-provided information in the ClientHello and CertificateRequest messages and implicit deployment-specific assumptions. This section describes a RECOMMENDED integration of Merkle Tree certificates into TLS trust anchor IDs (<xref target="I-D.ietf-tls-trust-anchor-ids"/>), but applications MAY use application-specific criteria in addition to, or instead of, this recommendation.</t>
      <section anchor="extensions-to-trust-anchor-ids">
        <name>Extensions to Trust Anchor IDs</name>
        <t>[[TODO: Move this into draft-ietf-tls-trust-anchor-ids once the PLANTS WG is further along. See https://github.com/tlswg/tls-trust-anchor-ids/issues/62]]</t>
        <t>A TLS deployment may know that all relying parties that accept one trust anchor must additionally accept another trust anchor, or desire identifiers for groups of related trust anchors. For example, in this document, the relying party will recognize up to <tt>max_landmark</tt> consecutive landmarks, so the latest landmark can be used to represent the range.</t>
        <t>Incorporating this knowledge into certificate selection can optimize the ClientHello or CertificateRequest extension. It is RECOMMENDED that this information be provisioned alongside the certificate, e.g. provided by the CA. This section extends the CertificatePropertyList structure (<xref section="6" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>) with the <tt>additional_trust_anchor_ranges</tt> certificate property to do this:</t>
        <sourcecode type="tls-presentation"><![CDATA[
enum {
    additional_trust_anchor_ranges(1), (2^16-1)
} CertificatePropertyType;

struct {
    TrustAnchorID base;
    uint64 min;
    uint64 max;
} TrustAnchorRange;

TrustAnchorRange TrustAnchorRangeList<1..2^16-1>;
]]></sourcecode>
        <t>A trust anchor range <tt>r</tt> is said to <em>contain</em> a trust anchor ID <tt>id</tt>, if <tt>id</tt>, as a relative OID, is the concatenation of <tt>r.base</tt> and some integer component between <tt>min</tt> and <tt>max</tt>, inclusive.</t>
        <t>The following procedure can be used to perform this check. It succeeds if <tt>r</tt> contains <tt>id</tt> and fails otherwise:</t>
        <ol spacing="normal" type="1"><li>
            <t>Check that <tt>r.base</tt> does not end in the middle of an OID component. That is, check that the most-significant bit of the last byte of <tt>r.base</tt> is unset. If it is set, fail the procedure.</t>
          </li>
          <li>
            <t>Check that <tt>r.base</tt> is a prefix of <tt>id</tt>. If not, fail the procedure. Let <tt>rest</tt> be <tt>id</tt> with the <tt>r.base</tt> prefix removed.</t>
          </li>
          <li>
            <t>Decode <tt>rest</tt> as a minimally-encoded, big-endian, base-128 OID component as follows:
            </t>
            <ol spacing="normal" type="1"><li>
                <t>If <tt>rest</tt> is empty, fail the procedure.</t>
              </li>
              <li>
                <t>If the most-significant bit of the last byte of <tt>rest</tt> is set, fail the procedure.</t>
              </li>
              <li>
                <t>If the most-significant bit of any other byte of <tt>rest</tt> is unset, fail the procedure.</t>
              </li>
              <li>
                <t>If the first byte of <tt>rest</tt> is 0x80, fail the procedure.</t>
              </li>
              <li>
                <t>Set <tt>v</tt> to zero. Throughout this procedure, <tt>v</tt> will be less than 2<sup>64</sup>.</t>
              </li>
              <li>
                <t>For each byte <tt>b</tt> of <tt>rest</tt>:
                </t>
                <ol spacing="normal" type="1"><li>
                    <t>If <tt>v</tt> is greater than or equal to 2<sup>57</sup>, fail the procedure.</t>
                  </li>
                  <li>
                    <t>Set <tt>v</tt> to <tt>(v &lt;&lt; 7) + (b &amp; 127)</tt>.</t>
                  </li>
                </ol>
              </li>
            </ol>
          </li>
          <li>
            <t>Check if <tt>min &lt;= v &lt;= max</tt>. If this is not true, fail the procedure. Otherwise, the procedure succeeds.</t>
          </li>
        </ol>
        <t><xref section="4.2" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/> is updated as follows. If the ClientHello or CertificateRequest contains a <tt>trust_anchors extension</tt>, the authenticating party SHOULD send a certification path such that one of the following is true:</t>
        <ul spacing="normal">
          <li>
            <t>The certification path's trust anchor ID appears in the relying party's <tt>trust_anchors</tt> extension, or</t>
          </li>
          <li>
            <t>One of the certification path's additional trust anchor ranges contains some ID in the relying party's <tt>trust_anchors</tt> extension</t>
          </li>
        </ul>
        <t>Trust anchor ranges do not impact an authenticating party's list of available trust anchors in EncryptedExtensions (see <xref section="4.3" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>) or the HTTPS/SVCB record (see <xref section="5" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>). Those continue to reference the single trust anchor ID that corresponds to each certificate.</t>
        <t>In applications that use additional trust anchor ranges, relying parties MAY send a single trust anchor ID to represent all certificates whose trust anchor ranges contain that trust anchor ID. This includes:</t>
        <ul spacing="normal">
          <li>
            <t>Trust anchors that are sent in response to an EncryptedExtensions or HTTPS/SVCB message from the authenticating party</t>
          </li>
          <li>
            <t>Trust anchors that are sent in <tt>trust_anchors</tt>, independently of the authenticating party</t>
          </li>
        </ul>
      </section>
      <section anchor="using-trust-anchor-ids">
        <name>Using Trust Anchor IDs</name>
        <t>A full certificate will generally be accepted by relying parties that trust the issuing CA. To determine this, 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"/>. Authenticating and relying parties SHOULD use the <tt>trust_anchors</tt> extension to determine whether the full certificate would be acceptable.</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 also be sent without explicit relying party trust signals, however doing so means the authenticating party implicitly assumes the relying party trusts the issuing CA. This may be viable if, for example, the CA is relatively ubiquitous among supported relying parties.</t>
        <t>A signatureless certificate, defined against landmark number <tt>L</tt>, has a trust anchor ID of <tt>base_id</tt>, concatenated with <tt>L</tt>, as described in <xref target="landmarks"/>, and SHOULD be provisioned with this value. Additionally, relying parties that trust later landmarks may also be assumed to trust landmark <tt>L</tt>, so a signatureless certificate SHOULD additionally provisioned with an additional trust anchor range whose <tt>base</tt> is <tt>base_id</tt>, <tt>min</tt> is <tt>L</tt>, and <tt>max</tt> is <tt>L + max_landmarks - 1</tt>.</t>
        <t>A relying party that has been configured with trusted subtrees (<xref target="trusted-subtrees"/>) derived from a set of landmarks SHOULD configure the <tt>trust_anchors</tt> extension to advertise the highest supported landmark in the set. The selection procedures defined in <xref target="I-D.ietf-tls-trust-anchor-ids"/> and <xref target="extensions-to-trust-anchor-ids"/> will then correctly determine whether a signatureless certificate is compatible with the relying party.</t>
        <t>When both a signatureless and full certificate are supported by a relying party, an authenticating party SHOULD preferentially use the signatureless certificate. A signatureless certificate asserts the same information as its full counterpart, but is expected to be smaller. An authenticating party SHOULD NOT send a signatureless certificate 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.</t>
      </section>
    </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>X.509 implementations often implement <xref section="4.1.1.3" sectionFormat="of" target="RFC5280"/> by equivalently retaining the original received DER encoding, rather than recomputing the canonical DER encoding TBSCertificate. This optimization is compatible with the assumptions above.</t>
        <t>Some non-conforming X.509 implementations use a BER <xref target="X.690"/> parser instead of DER, and then apply this optimization to the received BER encoding. BER encoding is not unique, so this does not produce the same result. In such implementations, the BER-encoded TBSCertificate becomes also non-malleable, and applications may rely on this. To preserve this property in Merkle Tree Certificates, such non-conforming implementations MUST do the following when implementing <xref target="verifying-certificate-signatures"/>:</t>
        <ul spacing="normal">
          <li>
            <t>Reparse the initial identifier (the SEQUENCE tag) and length octets of the TBSCertificate structure with a conforming DER parser and fail verification if invalid.</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 copy over the observed BER encodings, or reparse each field with a conforming DER parser and fail verification if invalid.</t>
          </li>
          <li>
            <t>Reparse the <tt>serialNumber</tt> field with a conforming DER parser and fail verification if invalid.</t>
          </li>
          <li>
            <t>Reparse the <tt>signature</tt> field with a conforming DER parser and fail verification if invalid. Equivalently, check for an exact equality with for the expected, DER-encoded value.</t>
          </li>
          <li>
            <t>When hashing <tt>subjectPublicKeyInfo</tt>, either hash the observed BER encoding, or reparse the structure with a conforming DER parser and fail verification if invalid.</t>
          </li>
        </ul>
        <t>These additional checks are redundant in X.509 implementations that use a conforming DER parser.</t>
        <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>OpenSSL</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">
         </author>
            <author fullname="Kyle Nekritz" initials="K." surname="Nekritz">
              <organization>Meta</organization>
            </author>
            <date day="15" month="September" 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-02"/>
        </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="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="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="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="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>
        <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="5" month="September" 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-10"/>
        </reference>
      </references>
    </references>
    <?line 1642?>

<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(25) TBD}

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

END
]]></sourcecode>
    </section>
    <section anchor="merkle-tree-structure">
      <name>Merkle Tree Structure</name>
      <t>This non-normative section describes how the Merkle Tree structure relates to the binary representations of indices. It is included to help implementors understand the procedures described in <xref target="subtrees"/>.</t>
      <section anchor="binary-representations">
        <name>Binary Representations</name>
        <t>Within a Merkle Tree whose size is a power of two, the binary representation of an leaf's index gives the path to that leaf. The leaf is a left child if the least-significant bit is unset and a right child if it is set. The next bit indicates the direction of the parent node, and so on. <xref target="fig-merkle-tree-bits-full"/> demonstrates this in a Merkle Tree of size 8:</t>
        <figure anchor="fig-merkle-tree-bits-full">
          <name>An example Merkle Tree of size 8</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="272" width="328" viewBox="0 0 328 272" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                <path d="M 24,224 L 24,256" fill="none" stroke="black"/>
                <path d="M 32,96 L 32,128" fill="none" stroke="black"/>
                <path d="M 40,224 L 40,256" fill="none" stroke="black"/>
                <path d="M 56,160 L 56,192" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 64,32 L 64,64" fill="none" stroke="black"/>
                <path d="M 72,160 L 72,192" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                <path d="M 88,224 L 88,256" fill="none" stroke="black"/>
                <path d="M 104,96 L 104,128" fill="none" stroke="black"/>
                <path d="M 104,224 L 104,256" fill="none" stroke="black"/>
                <path d="M 120,160 L 120,192" fill="none" stroke="black"/>
                <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,160 L 136,192" fill="none" stroke="black"/>
                <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                <path d="M 160,96 L 160,128" fill="none" stroke="black"/>
                <path d="M 168,224 L 168,256" fill="none" stroke="black"/>
                <path d="M 184,160 L 184,192" fill="none" stroke="black"/>
                <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                <path d="M 200,32 L 200,64" fill="none" stroke="black"/>
                <path d="M 200,160 L 200,192" fill="none" stroke="black"/>
                <path d="M 200,224 L 200,256" fill="none" stroke="black"/>
                <path d="M 216,224 L 216,256" fill="none" stroke="black"/>
                <path d="M 232,96 L 232,128" fill="none" stroke="black"/>
                <path d="M 232,224 L 232,256" fill="none" stroke="black"/>
                <path d="M 248,160 L 248,192" fill="none" stroke="black"/>
                <path d="M 248,224 L 248,256" fill="none" stroke="black"/>
                <path d="M 64,32 L 200,32" fill="none" stroke="black"/>
                <path d="M 64,64 L 200,64" fill="none" stroke="black"/>
                <path d="M 32,96 L 104,96" fill="none" stroke="black"/>
                <path d="M 160,96 L 232,96" fill="none" stroke="black"/>
                <path d="M 32,128 L 104,128" fill="none" stroke="black"/>
                <path d="M 160,128 L 232,128" fill="none" stroke="black"/>
                <path d="M 8,160 L 56,160" fill="none" stroke="black"/>
                <path d="M 72,160 L 120,160" fill="none" stroke="black"/>
                <path d="M 136,160 L 184,160" fill="none" stroke="black"/>
                <path d="M 200,160 L 248,160" fill="none" stroke="black"/>
                <path d="M 8,192 L 56,192" fill="none" stroke="black"/>
                <path d="M 72,192 L 120,192" fill="none" stroke="black"/>
                <path d="M 136,192 L 184,192" fill="none" stroke="black"/>
                <path d="M 200,192 L 248,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 24,224" fill="none" stroke="black"/>
                <path d="M 40,224 L 56,224" fill="none" stroke="black"/>
                <path d="M 72,224 L 88,224" fill="none" stroke="black"/>
                <path d="M 104,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 136,224 L 152,224" fill="none" stroke="black"/>
                <path d="M 168,224 L 184,224" fill="none" stroke="black"/>
                <path d="M 200,224 L 216,224" fill="none" stroke="black"/>
                <path d="M 232,224 L 248,224" fill="none" stroke="black"/>
                <path d="M 8,256 L 24,256" fill="none" stroke="black"/>
                <path d="M 40,256 L 56,256" fill="none" stroke="black"/>
                <path d="M 72,256 L 88,256" fill="none" stroke="black"/>
                <path d="M 104,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,256 L 152,256" fill="none" stroke="black"/>
                <path d="M 168,256 L 184,256" fill="none" stroke="black"/>
                <path d="M 200,256 L 216,256" fill="none" stroke="black"/>
                <path d="M 232,256 L 248,256" fill="none" stroke="black"/>
                <g class="text">
                  <text x="120" y="52">[0,</text>
                  <text x="148" y="52">8)</text>
                  <text x="288" y="52">level</text>
                  <text x="320" y="52">3</text>
                  <text x="72" y="84">/</text>
                  <text x="192" y="84">\</text>
                  <text x="56" y="116">[0,</text>
                  <text x="84" y="116">4)</text>
                  <text x="184" y="116">[4,</text>
                  <text x="212" y="116">8)</text>
                  <text x="288" y="116">level</text>
                  <text x="320" y="116">2</text>
                  <text x="40" y="148">/</text>
                  <text x="96" y="148">\</text>
                  <text x="168" y="148">/</text>
                  <text x="224" y="148">\</text>
                  <text x="32" y="180">[0,2)</text>
                  <text x="96" y="180">[2,4)</text>
                  <text x="160" y="180">[4,6)</text>
                  <text x="224" y="180">[6,8)</text>
                  <text x="288" y="180">level</text>
                  <text x="320" y="180">1</text>
                  <text x="24" y="212">/</text>
                  <text x="40" y="212">\</text>
                  <text x="88" y="212">/</text>
                  <text x="104" y="212">\</text>
                  <text x="152" y="212">/</text>
                  <text x="168" y="212">\</text>
                  <text x="216" y="212">/</text>
                  <text x="232" y="212">\</text>
                  <text x="16" y="244">0</text>
                  <text x="48" y="244">1</text>
                  <text x="80" y="244">2</text>
                  <text x="112" y="244">3</text>
                  <text x="144" y="244">4</text>
                  <text x="176" y="244">5</text>
                  <text x="208" y="244">6</text>
                  <text x="240" y="244">7</text>
                  <text x="288" y="244">level</text>
                  <text x="320" y="244">0</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
       +----------------+
       |     [0, 8)     |        level 3
       +----------------+
        /              \
   +--------+      +--------+
   | [0, 4) |      | [4, 8) |    level 2
   +--------+      +--------+
    /      \        /      \
+-----+ +-----+ +-----+ +-----+
|[0,2)| |[2,4)| |[4,6)| |[6,8)|  level 1
+-----+ +-----+ +-----+ +-----+
  / \     / \     / \     / \
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
|0| |1| |2| |3| |4| |5| |6| |7|  level 0
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
]]></artwork>
          </artset>
        </figure>
        <t>The binary representation of <tt>4</tt> is <tt>0b100</tt>. It is the left (0) child of <tt>[4, 6)</tt>, which is the left (0) child of <tt>[4, 8)</tt>, which is the right (1) child of <tt>[0, 8)</tt>.</t>
        <t>Each level in the tree corresponds to a bit position and can be correspondingly numbered, with 0 indicating the least-significant bit and the leaf level, and so on. In this numbering, a node's level can be determined as follows: if the node is a root of subtree <tt>[start, end)</tt>, the node's level is <tt>BIT_WIDTH(end - start - 1)</tt>.</t>
        <t>Comparing two indices determines the relationship between two paths. The highest differing bit gives the level at which paths from root to leaf diverge. For example, the bit representations of 4 and 6 are <tt>0b100</tt> and <tt>0b110</tt>, respectively. The highest differing bit is bit 1. Bits 2 and up are the same between the two indices. This indicates that the paths from the root to leaves 4 and 6 diverge when going to level 2 to level 1.</t>
        <t>This can be generalized to arbitrary-sized Merkle Trees. <xref target="fig-merkle-tree-bits-partial"/> depicts a Merkle Tree of size 6:</t>
        <figure anchor="fig-merkle-tree-bits-partial">
          <name>An example Merkle Tree of size 6</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="272" width="272" viewBox="0 0 272 272" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                <path d="M 24,224 L 24,256" fill="none" stroke="black"/>
                <path d="M 32,96 L 32,128" fill="none" stroke="black"/>
                <path d="M 40,224 L 40,256" fill="none" stroke="black"/>
                <path d="M 56,160 L 56,192" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 64,32 L 64,64" fill="none" stroke="black"/>
                <path d="M 72,160 L 72,192" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                <path d="M 88,224 L 88,256" fill="none" stroke="black"/>
                <path d="M 104,96 L 104,128" fill="none" stroke="black"/>
                <path d="M 104,224 L 104,256" fill="none" stroke="black"/>
                <path d="M 120,160 L 120,192" fill="none" stroke="black"/>
                <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,160 L 136,192" fill="none" stroke="black"/>
                <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                <path d="M 160,72 L 160,152" fill="none" stroke="black"/>
                <path d="M 168,224 L 168,256" fill="none" stroke="black"/>
                <path d="M 184,32 L 184,64" fill="none" stroke="black"/>
                <path d="M 184,160 L 184,192" fill="none" stroke="black"/>
                <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                <path d="M 64,32 L 184,32" fill="none" stroke="black"/>
                <path d="M 64,64 L 184,64" fill="none" stroke="black"/>
                <path d="M 32,96 L 104,96" fill="none" stroke="black"/>
                <path d="M 32,128 L 104,128" fill="none" stroke="black"/>
                <path d="M 8,160 L 56,160" fill="none" stroke="black"/>
                <path d="M 72,160 L 120,160" fill="none" stroke="black"/>
                <path d="M 136,160 L 184,160" fill="none" stroke="black"/>
                <path d="M 8,192 L 56,192" fill="none" stroke="black"/>
                <path d="M 72,192 L 120,192" fill="none" stroke="black"/>
                <path d="M 136,192 L 184,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 24,224" fill="none" stroke="black"/>
                <path d="M 40,224 L 56,224" fill="none" stroke="black"/>
                <path d="M 72,224 L 88,224" fill="none" stroke="black"/>
                <path d="M 104,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 136,224 L 152,224" fill="none" stroke="black"/>
                <path d="M 168,224 L 184,224" fill="none" stroke="black"/>
                <path d="M 8,256 L 24,256" fill="none" stroke="black"/>
                <path d="M 40,256 L 56,256" fill="none" stroke="black"/>
                <path d="M 72,256 L 88,256" fill="none" stroke="black"/>
                <path d="M 104,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,256 L 152,256" fill="none" stroke="black"/>
                <path d="M 168,256 L 184,256" fill="none" stroke="black"/>
                <circle cx="160" cy="112" r="6" class="closeddot" fill="black"/>
                <g class="text">
                  <text x="120" y="52">[0,</text>
                  <text x="148" y="52">6)</text>
                  <text x="232" y="52">level</text>
                  <text x="264" y="52">3</text>
                  <text x="72" y="84">/</text>
                  <text x="56" y="116">[0,</text>
                  <text x="84" y="116">4)</text>
                  <text x="232" y="116">level</text>
                  <text x="264" y="116">2</text>
                  <text x="40" y="148">/</text>
                  <text x="96" y="148">\</text>
                  <text x="32" y="180">[0,2)</text>
                  <text x="96" y="180">[2,4)</text>
                  <text x="160" y="180">[4,6)</text>
                  <text x="232" y="180">level</text>
                  <text x="264" y="180">1</text>
                  <text x="24" y="212">/</text>
                  <text x="40" y="212">\</text>
                  <text x="88" y="212">/</text>
                  <text x="104" y="212">\</text>
                  <text x="152" y="212">/</text>
                  <text x="168" y="212">\</text>
                  <text x="16" y="244">0</text>
                  <text x="48" y="244">1</text>
                  <text x="80" y="244">2</text>
                  <text x="112" y="244">3</text>
                  <text x="144" y="244">4</text>
                  <text x="176" y="244">5</text>
                  <text x="232" y="244">level</text>
                  <text x="264" y="244">0</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
       +--------------+
       |     [0, 6)   |   level 3
       +--------------+
        /          |
   +--------+      |
   | [0, 4) |      *      level 2
   +--------+      |
    /      \       |
+-----+ +-----+ +-----+
|[0,2)| |[2,4)| |[4,6)|   level 1
+-----+ +-----+ +-----+
  / \     / \     / \
+-+ +-+ +-+ +-+ +-+ +-+
|0| |1| |2| |3| |4| |5|   level 0
+-+ +-+ +-+ +-+ +-+ +-+
]]></artwork>
          </artset>
        </figure>
        <t>When the size of a Merkle Tree is not a power of two, some levels on the rightmost edge of the tree are skipped. The rightmost edge is the path to the last element. The skipped levels can be seen in its binary representation. Here, the last element is 5, which has binary representation <tt>0b101</tt>. When a bit is set, the corresponding node is a right child. When it is unset, the corresponding node is skipped.</t>
        <t>In a tree of the next power of two size, the skipped nodes in this path are where there <em>would</em> have been a right child, had there been enough elements to construct one. Without a right child, the hash operation is skipped and a skipped node has the same value as its singular child. <xref target="fig-merkle-tree-bits-partial-comparison"/> depicts this for a tree of size 6.</t>
        <figure anchor="fig-merkle-tree-bits-partial-comparison">
          <name>An example Merkle Tree of size 6, viewed as a subset of a tree of size 8</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="272" width="328" viewBox="0 0 328 272" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                <path d="M 24,224 L 24,256" fill="none" stroke="black"/>
                <path d="M 32,96 L 32,128" fill="none" stroke="black"/>
                <path d="M 40,224 L 40,256" fill="none" stroke="black"/>
                <path d="M 56,160 L 56,192" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 64,32 L 64,64" fill="none" stroke="black"/>
                <path d="M 72,160 L 72,192" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                <path d="M 88,224 L 88,256" fill="none" stroke="black"/>
                <path d="M 104,96 L 104,128" fill="none" stroke="black"/>
                <path d="M 104,224 L 104,256" fill="none" stroke="black"/>
                <path d="M 120,160 L 120,192" fill="none" stroke="black"/>
                <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,160 L 136,192" fill="none" stroke="black"/>
                <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                <path d="M 160,96 L 160,128" fill="none" stroke="black"/>
                <path d="M 168,224 L 168,256" fill="none" stroke="black"/>
                <path d="M 184,160 L 184,192" fill="none" stroke="black"/>
                <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                <path d="M 200,32 L 200,64" fill="none" stroke="black"/>
                <path d="M 200,160 L 200,192" fill="none" stroke="black"/>
                <path d="M 200,224 L 200,256" fill="none" stroke="black"/>
                <path d="M 216,224 L 216,256" fill="none" stroke="black"/>
                <path d="M 232,96 L 232,128" fill="none" stroke="black"/>
                <path d="M 232,224 L 232,256" fill="none" stroke="black"/>
                <path d="M 248,160 L 248,192" fill="none" stroke="black"/>
                <path d="M 248,224 L 248,256" fill="none" stroke="black"/>
                <path d="M 64,32 L 200,32" fill="none" stroke="black"/>
                <path d="M 64,64 L 200,64" fill="none" stroke="black"/>
                <path d="M 32,96 L 104,96" fill="none" stroke="black"/>
                <path d="M 160,96 L 232,96" fill="none" stroke="black"/>
                <path d="M 32,128 L 104,128" fill="none" stroke="black"/>
                <path d="M 160,128 L 232,128" fill="none" stroke="black"/>
                <path d="M 8,160 L 56,160" fill="none" stroke="black"/>
                <path d="M 72,160 L 120,160" fill="none" stroke="black"/>
                <path d="M 136,160 L 184,160" fill="none" stroke="black"/>
                <path d="M 200,160 L 248,160" fill="none" stroke="black"/>
                <path d="M 8,192 L 56,192" fill="none" stroke="black"/>
                <path d="M 72,192 L 120,192" fill="none" stroke="black"/>
                <path d="M 136,192 L 184,192" fill="none" stroke="black"/>
                <path d="M 200,192 L 248,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 24,224" fill="none" stroke="black"/>
                <path d="M 40,224 L 56,224" fill="none" stroke="black"/>
                <path d="M 72,224 L 88,224" fill="none" stroke="black"/>
                <path d="M 104,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 136,224 L 152,224" fill="none" stroke="black"/>
                <path d="M 168,224 L 184,224" fill="none" stroke="black"/>
                <path d="M 200,224 L 216,224" fill="none" stroke="black"/>
                <path d="M 232,224 L 248,224" fill="none" stroke="black"/>
                <path d="M 8,256 L 24,256" fill="none" stroke="black"/>
                <path d="M 40,256 L 56,256" fill="none" stroke="black"/>
                <path d="M 72,256 L 88,256" fill="none" stroke="black"/>
                <path d="M 104,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,256 L 152,256" fill="none" stroke="black"/>
                <path d="M 168,256 L 184,256" fill="none" stroke="black"/>
                <path d="M 200,256 L 216,256" fill="none" stroke="black"/>
                <path d="M 232,256 L 248,256" fill="none" stroke="black"/>
                <g class="text">
                  <text x="120" y="52">[0,</text>
                  <text x="148" y="52">6)</text>
                  <text x="288" y="52">level</text>
                  <text x="320" y="52">3</text>
                  <text x="72" y="84">/</text>
                  <text x="192" y="84">\</text>
                  <text x="56" y="116">[0,</text>
                  <text x="84" y="116">4)</text>
                  <text x="184" y="116">[4,</text>
                  <text x="212" y="116">6)</text>
                  <text x="288" y="116">level</text>
                  <text x="320" y="116">2</text>
                  <text x="40" y="148">/</text>
                  <text x="96" y="148">\</text>
                  <text x="168" y="148">/</text>
                  <text x="224" y="148">\</text>
                  <text x="32" y="180">[0,2)</text>
                  <text x="96" y="180">[2,4)</text>
                  <text x="160" y="180">[4,6)</text>
                  <text x="288" y="180">level</text>
                  <text x="320" y="180">1</text>
                  <text x="24" y="212">/</text>
                  <text x="40" y="212">\</text>
                  <text x="88" y="212">/</text>
                  <text x="104" y="212">\</text>
                  <text x="152" y="212">/</text>
                  <text x="168" y="212">\</text>
                  <text x="216" y="212">/</text>
                  <text x="232" y="212">\</text>
                  <text x="16" y="244">0</text>
                  <text x="48" y="244">1</text>
                  <text x="80" y="244">2</text>
                  <text x="112" y="244">3</text>
                  <text x="144" y="244">4</text>
                  <text x="176" y="244">5</text>
                  <text x="288" y="244">level</text>
                  <text x="320" y="244">0</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
       +----------------+
       |     [0, 6)     |        level 3
       +----------------+
        /              \
   +--------+      +--------+
   | [0, 4) |      | [4, 6) |    level 2
   +--------+      +--------+
    /      \        /      \
+-----+ +-----+ +-----+ +-----+
|[0,2)| |[2,4)| |[4,6)| |     |  level 1
+-----+ +-----+ +-----+ +-----+
  / \     / \     / \     / \
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
|0| |1| |2| |3| |4| |5| | | | |  level 0
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
]]></artwork>
          </artset>
        </figure>
        <t>Zero bits also indicate skipped nodes in paths that have not yet diverged from the rightmost edge (i.e. the path to the last element), when viewed from root to leaf. In the example, the binary representation of 4 is <tt>0b100</tt>. While bit 0 and bit 1 are both unset, they manifest in the tree differently. Bit 0 indicates that 4 is a right child. However, at bit 1, <tt>0b100</tt> has not yet diverged from the last element, <tt>0b101</tt>. That instead indicates a skipped node, not a left child.</t>
      </section>
      <section anchor="inclusion-proof-evaluation-explain">
        <name>Inclusion Proof Evaluation</name>
        <t>The procedure in <xref target="evaluating-a-subtree-inclusion-proof"/> builds up a subtree hash in <tt>r</tt> by staring from <tt>entry_hash</tt> and iteratively hashing elements of <tt>inclusion_proof</tt> on the left or right. That means this procedure, when successful, must return <em>some</em> hash that contains <tt>entry_hash</tt>.</t>
        <t>Treating <tt>[start, end)</tt> as a Merkle Tree of size <tt>end - start</tt>, the procedure hashes by based on the path to <tt>index</tt>. Within this smaller Merkle Tree, it has index <tt>fn = index - start</tt> (first number), and the last element has index <tt>sn = end - start - 1</tt> (second number).</t>
        <t>Step 4 iterates through <tt>inclusion_proof</tt> and the paths to <tt>fn</tt> and <tt>sn</tt> in parallel. As the procedure right-shifts <tt>fn</tt> and <tt>sn</tt> and looks at the least-significant bit, it moves up the two paths, towards the root. When <tt>sn</tt> is zero, the procedure has reached the top of the tree. The procedure checks that the two iterations complete together.</t>
        <t>Iterating from level 0 up, <tt>fn</tt> and <tt>sn</tt> will initially be different. While they are different, step 4.2 hashes on the left or right based on the binary representation, as discussed in <xref target="binary-representations"/>.</t>
        <t>Once <tt>fn = sn</tt>, the remainder of the path is on the right edge. At that point, the condition in step 4.2 is always true. It only incorporates proof entries on the left, once per set bit. Unset bits are skipped.</t>
        <t>Inclusion proofs can also be evaluated by considering these two stages separately. The first stage consumes <tt>l1 = BIT_WIDTH(fn XOR sn)</tt> proof entries. The second stage consumes <tt>l2 = POPCOUNT(fn &gt;&gt; l1)</tt> proof entries. A valid inclusion proof must then have <tt>l1 + l2</tt> entries. The first <tt>l1</tt> entries are hashed based on <tt>fn</tt>'s least significant bits, and the remaining <tt>l2</tt> entries are hashed on the left.</t>
      </section>
      <section anchor="consistency-proof-structure">
        <name>Consistency Proof Structure</name>
        <t>A subtree consistency proof for <tt>[start, end)</tt> and the tree of <tt>n</tt> elements is similar to an inclusion proof for element <tt>end - 1</tt>. If one starts from <tt>end - 1</tt>'s hash, incorporating the whole inclusion proof should reconstruct <tt>root_hash</tt> and incorporating a subset of the inclusion proof should reconstruct <tt>node_hash</tt>. Thus <tt>end - 1</tt>'s hash and this inclusion proof can prove consistency. A subtree consistency proof in this document applies two optimizations over this construction:</t>
        <ol spacing="normal" type="1"><li>
            <t>Instead of starting at level 0 with <tt>end - 1</tt>, the proof can start at a higher level. Any ancestor of <tt>end - 1</tt> shared by both the subtree and the overall tree is a valid starting node to reconstruct <tt>node_hash</tt> and <tt>root_hash</tt>. Use the highest level with a commmon ancestor. This truncates the inclusion proof portion of the consistency proof.</t>
          </li>
          <li>
            <t>If this starting node is the entire subtree, omit its hash from the consistency proof. The verifier is assumed to already know <tt>node_hash</tt>.</t>
          </li>
        </ol>
        <t>A Merkle consistency proof, defined in <xref section="2.1.4" sectionFormat="of" target="RFC9162"/>, applies these same optimizations.</t>
        <t><xref target="fig-truncate-consistency-proof"/> depicts a subtree consistency proof between the subtree <tt>[0, 6)</tt> and the Merkle Tree of size 8. The consistency proof begins at level 1, or node <tt>[4, 6)</tt>. The inclusion proof portion is similarly truncated to start at level 1: <tt>[6, 8)</tt> and <tt>[0, 4)</tt>. If the consistency proof began at level 0, the starting node would be leaf 5, and the consistency proof would additionally include leaf 4.</t>
        <figure anchor="fig-truncate-consistency-proof">
          <name>A subtree consistency proof that starts at level 1 instead of level 0</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="544" width="336" viewBox="0 0 336 544" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                <path d="M 8,432 L 8,464" fill="none" stroke="black"/>
                <path d="M 8,496 L 8,528" fill="none" stroke="black"/>
                <path d="M 24,224 L 24,256" fill="none" stroke="black"/>
                <path d="M 24,496 L 24,528" fill="none" stroke="black"/>
                <path d="M 32,96 L 32,128" fill="none" stroke="black"/>
                <path d="M 32,368 L 32,400" fill="none" stroke="black"/>
                <path d="M 40,224 L 40,256" fill="none" stroke="black"/>
                <path d="M 40,496 L 40,528" fill="none" stroke="black"/>
                <path d="M 56,160 L 56,192" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 56,432 L 56,464" fill="none" stroke="black"/>
                <path d="M 56,496 L 56,528" fill="none" stroke="black"/>
                <path d="M 64,32 L 64,64" fill="none" stroke="black"/>
                <path d="M 64,304 L 64,336" fill="none" stroke="black"/>
                <path d="M 72,160 L 72,192" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                <path d="M 72,432 L 72,464" fill="none" stroke="black"/>
                <path d="M 72,496 L 72,528" fill="none" stroke="black"/>
                <path d="M 88,224 L 88,256" fill="none" stroke="black"/>
                <path d="M 88,496 L 88,528" fill="none" stroke="black"/>
                <path d="M 104,96 L 104,128" fill="none" stroke="black"/>
                <path d="M 104,224 L 104,256" fill="none" stroke="black"/>
                <path d="M 104,368 L 104,400" fill="none" stroke="black"/>
                <path d="M 104,496 L 104,528" fill="none" stroke="black"/>
                <path d="M 120,160 L 120,192" fill="none" stroke="black"/>
                <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                <path d="M 120,432 L 120,464" fill="none" stroke="black"/>
                <path d="M 120,496 L 120,528" fill="none" stroke="black"/>
                <path d="M 128,96 L 128,128" fill="none" stroke="black"/>
                <path d="M 136,160 L 136,192" fill="none" stroke="black"/>
                <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                <path d="M 136,432 L 136,464" fill="none" stroke="black"/>
                <path d="M 136,496 L 136,528" fill="none" stroke="black"/>
                <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                <path d="M 152,496 L 152,528" fill="none" stroke="black"/>
                <path d="M 160,368 L 160,400" fill="none" stroke="black"/>
                <path d="M 168,224 L 168,256" fill="none" stroke="black"/>
                <path d="M 168,496 L 168,528" fill="none" stroke="black"/>
                <path d="M 184,160 L 184,192" fill="none" stroke="black"/>
                <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                <path d="M 184,432 L 184,464" fill="none" stroke="black"/>
                <path d="M 184,496 L 184,528" fill="none" stroke="black"/>
                <path d="M 200,32 L 200,64" fill="none" stroke="black"/>
                <path d="M 200,96 L 200,128" fill="none" stroke="black"/>
                <path d="M 200,304 L 200,336" fill="none" stroke="black"/>
                <path d="M 200,432 L 200,464" fill="none" stroke="black"/>
                <path d="M 200,496 L 200,528" fill="none" stroke="black"/>
                <path d="M 216,496 L 216,528" fill="none" stroke="black"/>
                <path d="M 232,368 L 232,400" fill="none" stroke="black"/>
                <path d="M 232,496 L 232,528" fill="none" stroke="black"/>
                <path d="M 248,432 L 248,464" fill="none" stroke="black"/>
                <path d="M 248,496 L 248,528" fill="none" stroke="black"/>
                <path d="M 64,32 L 200,32" fill="none" stroke="black"/>
                <path d="M 64,64 L 200,64" fill="none" stroke="black"/>
                <path d="M 32,94 L 104,94" fill="none" stroke="black"/>
                <path d="M 32,98 L 104,98" fill="none" stroke="black"/>
                <path d="M 128,96 L 200,96" fill="none" stroke="black"/>
                <path d="M 32,126 L 104,126" fill="none" stroke="black"/>
                <path d="M 32,130 L 104,130" fill="none" stroke="black"/>
                <path d="M 128,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 8,160 L 56,160" fill="none" stroke="black"/>
                <path d="M 72,160 L 120,160" fill="none" stroke="black"/>
                <path d="M 136,160 Q 138,156.8 140,160 Q 142,163.2 144,160 Q 146,156.8 148,160 Q 150,163.2 152,160 Q 154,156.8 156,160 Q 158,163.2 160,160 Q 162,156.8 164,160 Q 166,163.2 168,160 Q 170,156.8 172,160 Q 174,163.2 176,160 Q 178,156.8 180,160 Q 182,163.2 184,160 " fill="none" stroke="black"/>
                <path d="M 8,192 L 56,192" fill="none" stroke="black"/>
                <path d="M 72,192 L 120,192" fill="none" stroke="black"/>
                <path d="M 136,192 Q 138,188.8 140,192 Q 142,195.2 144,192 Q 146,188.8 148,192 Q 150,195.2 152,192 Q 154,188.8 156,192 Q 158,195.2 160,192 Q 162,188.8 164,192 Q 166,195.2 168,192 Q 170,188.8 172,192 Q 174,195.2 176,192 Q 178,188.8 180,192 Q 182,195.2 184,192 " fill="none" stroke="black"/>
                <path d="M 8,224 L 24,224" fill="none" stroke="black"/>
                <path d="M 40,224 L 56,224" fill="none" stroke="black"/>
                <path d="M 72,224 L 88,224" fill="none" stroke="black"/>
                <path d="M 104,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 136,224 L 152,224" fill="none" stroke="black"/>
                <path d="M 168,224 L 184,224" fill="none" stroke="black"/>
                <path d="M 8,256 L 24,256" fill="none" stroke="black"/>
                <path d="M 40,256 L 56,256" fill="none" stroke="black"/>
                <path d="M 72,256 L 88,256" fill="none" stroke="black"/>
                <path d="M 104,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,256 L 152,256" fill="none" stroke="black"/>
                <path d="M 168,256 L 184,256" fill="none" stroke="black"/>
                <path d="M 64,304 L 200,304" fill="none" stroke="black"/>
                <path d="M 64,336 L 200,336" fill="none" stroke="black"/>
                <path d="M 32,366 L 104,366" fill="none" stroke="black"/>
                <path d="M 32,370 L 104,370" fill="none" stroke="black"/>
                <path d="M 160,368 L 232,368" fill="none" stroke="black"/>
                <path d="M 32,398 L 104,398" fill="none" stroke="black"/>
                <path d="M 32,402 L 104,402" fill="none" stroke="black"/>
                <path d="M 160,400 L 232,400" fill="none" stroke="black"/>
                <path d="M 8,432 L 56,432" fill="none" stroke="black"/>
                <path d="M 72,432 L 120,432" fill="none" stroke="black"/>
                <path d="M 136,432 Q 138,428.8 140,432 Q 142,435.2 144,432 Q 146,428.8 148,432 Q 150,435.2 152,432 Q 154,428.8 156,432 Q 158,435.2 160,432 Q 162,428.8 164,432 Q 166,435.2 168,432 Q 170,428.8 172,432 Q 174,435.2 176,432 Q 178,428.8 180,432 Q 182,435.2 184,432 " fill="none" stroke="black"/>
                <path d="M 200,430 L 248,430" fill="none" stroke="black"/>
                <path d="M 200,434 L 248,434" fill="none" stroke="black"/>
                <path d="M 8,464 L 56,464" fill="none" stroke="black"/>
                <path d="M 72,464 L 120,464" fill="none" stroke="black"/>
                <path d="M 136,464 Q 138,460.8 140,464 Q 142,467.2 144,464 Q 146,460.8 148,464 Q 150,467.2 152,464 Q 154,460.8 156,464 Q 158,467.2 160,464 Q 162,460.8 164,464 Q 166,467.2 168,464 Q 170,460.8 172,464 Q 174,467.2 176,464 Q 178,460.8 180,464 Q 182,467.2 184,464 " fill="none" stroke="black"/>
                <path d="M 200,462 L 248,462" fill="none" stroke="black"/>
                <path d="M 200,466 L 248,466" fill="none" stroke="black"/>
                <path d="M 8,496 L 24,496" fill="none" stroke="black"/>
                <path d="M 40,496 L 56,496" fill="none" stroke="black"/>
                <path d="M 72,496 L 88,496" fill="none" stroke="black"/>
                <path d="M 104,496 L 120,496" fill="none" stroke="black"/>
                <path d="M 136,496 L 152,496" fill="none" stroke="black"/>
                <path d="M 168,496 L 184,496" fill="none" stroke="black"/>
                <path d="M 200,496 L 216,496" fill="none" stroke="black"/>
                <path d="M 232,496 L 248,496" fill="none" stroke="black"/>
                <path d="M 8,528 L 24,528" fill="none" stroke="black"/>
                <path d="M 40,528 L 56,528" fill="none" stroke="black"/>
                <path d="M 72,528 L 88,528" fill="none" stroke="black"/>
                <path d="M 104,528 L 120,528" fill="none" stroke="black"/>
                <path d="M 136,528 L 152,528" fill="none" stroke="black"/>
                <path d="M 168,528 L 184,528" fill="none" stroke="black"/>
                <path d="M 200,528 L 216,528" fill="none" stroke="black"/>
                <path d="M 232,528 L 248,528" fill="none" stroke="black"/>
                <g class="text">
                  <text x="120" y="52">[0,</text>
                  <text x="148" y="52">6)</text>
                  <text x="296" y="52">level</text>
                  <text x="328" y="52">3</text>
                  <text x="72" y="84">/</text>
                  <text x="168" y="84">|</text>
                  <text x="56" y="116">[0,</text>
                  <text x="84" y="116">4)</text>
                  <text x="152" y="116">[4,</text>
                  <text x="180" y="116">6)</text>
                  <text x="296" y="116">level</text>
                  <text x="328" y="116">2</text>
                  <text x="40" y="148">/</text>
                  <text x="96" y="148">\</text>
                  <text x="168" y="148">|</text>
                  <text x="32" y="180">[0,2)</text>
                  <text x="96" y="180">[2,4)</text>
                  <text x="160" y="180">[4,6)</text>
                  <text x="296" y="180">level</text>
                  <text x="328" y="180">1</text>
                  <text x="24" y="212">/</text>
                  <text x="40" y="212">\</text>
                  <text x="88" y="212">/</text>
                  <text x="104" y="212">\</text>
                  <text x="152" y="212">/</text>
                  <text x="168" y="212">\</text>
                  <text x="16" y="244">0</text>
                  <text x="48" y="244">1</text>
                  <text x="80" y="244">2</text>
                  <text x="112" y="244">3</text>
                  <text x="144" y="244">4</text>
                  <text x="176" y="244">5</text>
                  <text x="296" y="244">level</text>
                  <text x="328" y="244">0</text>
                  <text x="120" y="324">[0,</text>
                  <text x="148" y="324">8)</text>
                  <text x="296" y="324">level</text>
                  <text x="328" y="324">3</text>
                  <text x="72" y="356">/</text>
                  <text x="192" y="356">\</text>
                  <text x="56" y="388">[0,</text>
                  <text x="84" y="388">4)</text>
                  <text x="184" y="388">[4,</text>
                  <text x="212" y="388">8)</text>
                  <text x="296" y="388">level</text>
                  <text x="328" y="388">2</text>
                  <text x="40" y="420">/</text>
                  <text x="96" y="420">\</text>
                  <text x="168" y="420">/</text>
                  <text x="224" y="420">\</text>
                  <text x="32" y="452">[0,2)</text>
                  <text x="96" y="452">[2,4)</text>
                  <text x="160" y="452">[4,6)</text>
                  <text x="224" y="452">[6,8)</text>
                  <text x="296" y="452">level</text>
                  <text x="328" y="452">1</text>
                  <text x="24" y="484">/</text>
                  <text x="40" y="484">\</text>
                  <text x="88" y="484">/</text>
                  <text x="104" y="484">\</text>
                  <text x="152" y="484">/</text>
                  <text x="168" y="484">\</text>
                  <text x="216" y="484">/</text>
                  <text x="232" y="484">\</text>
                  <text x="16" y="516">0</text>
                  <text x="48" y="516">1</text>
                  <text x="80" y="516">2</text>
                  <text x="112" y="516">3</text>
                  <text x="144" y="516">4</text>
                  <text x="176" y="516">5</text>
                  <text x="208" y="516">6</text>
                  <text x="240" y="516">7</text>
                  <text x="296" y="516">level</text>
                  <text x="328" y="516">0</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
       +----------------+
       |     [0, 6)     |         level 3
       +----------------+
        /           |
   +========+  +--------+
   | [0, 4) |  | [4, 6) |         level 2
   +========+  +--------+
    /      \        |
+-----+ +-----+ +~~~~~+
|[0,2)| |[2,4)| |[4,6)|           level 1
+-----+ +-----+ +~~~~~+
  / \     / \     / \
+-+ +-+ +-+ +-+ +-+ +-+
|0| |1| |2| |3| |4| |5|           level 0
+-+ +-+ +-+ +-+ +-+ +-+


       +----------------+
       |     [0, 8)     |         level 3
       +----------------+
        /              \
   +========+      +--------+
   | [0, 4) |      | [4, 8) |     level 2
   +========+      +--------+
    /      \        /      \
+-----+ +-----+ +~~~~~+ +=====+
|[0,2)| |[2,4)| |[4,6)| |[6,8)|   level 1
+-----+ +-----+ +~~~~~+ +=====+
  / \     / \     / \     / \
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
|0| |1| |2| |3| |4| |5| |6| |7|   level 0
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
]]></artwork>
          </artset>
        </figure>
        <t>Note that the truncated inclusion proof may include nodes from lower levels, if the corresponding level was skipped on the right edge. <xref target="fig-truncate-consistency-proof-2"/> depicts a subtree consistency proof between the subtree <tt>[0, 6)</tt> and the Merkle Tree of size 7. As above, the starting node is <tt>[4, 6)</tt> at level 1. The inclusion proof portion includes leaf 6 at level 0. This is because leaf 6 is taking the place of its skipped parent at level 1. (A skipped node can be thought of as a duplicate of its singular child.)</t>
        <figure anchor="fig-truncate-consistency-proof-2">
          <name>The interaction between inclusion proof truncation and skipped levels</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="544" width="320" viewBox="0 0 320 544" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                <path d="M 8,432 L 8,464" fill="none" stroke="black"/>
                <path d="M 8,496 L 8,528" fill="none" stroke="black"/>
                <path d="M 24,224 L 24,256" fill="none" stroke="black"/>
                <path d="M 24,496 L 24,528" fill="none" stroke="black"/>
                <path d="M 32,96 L 32,128" fill="none" stroke="black"/>
                <path d="M 32,368 L 32,400" fill="none" stroke="black"/>
                <path d="M 40,224 L 40,256" fill="none" stroke="black"/>
                <path d="M 40,496 L 40,528" fill="none" stroke="black"/>
                <path d="M 56,160 L 56,192" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 56,432 L 56,464" fill="none" stroke="black"/>
                <path d="M 56,496 L 56,528" fill="none" stroke="black"/>
                <path d="M 64,32 L 64,64" fill="none" stroke="black"/>
                <path d="M 64,304 L 64,336" fill="none" stroke="black"/>
                <path d="M 72,160 L 72,192" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                <path d="M 72,432 L 72,464" fill="none" stroke="black"/>
                <path d="M 72,496 L 72,528" fill="none" stroke="black"/>
                <path d="M 88,224 L 88,256" fill="none" stroke="black"/>
                <path d="M 88,496 L 88,528" fill="none" stroke="black"/>
                <path d="M 104,96 L 104,128" fill="none" stroke="black"/>
                <path d="M 104,224 L 104,256" fill="none" stroke="black"/>
                <path d="M 104,368 L 104,400" fill="none" stroke="black"/>
                <path d="M 104,496 L 104,528" fill="none" stroke="black"/>
                <path d="M 120,160 L 120,192" fill="none" stroke="black"/>
                <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                <path d="M 120,432 L 120,464" fill="none" stroke="black"/>
                <path d="M 120,496 L 120,528" fill="none" stroke="black"/>
                <path d="M 128,96 L 128,128" fill="none" stroke="black"/>
                <path d="M 136,160 L 136,192" fill="none" stroke="black"/>
                <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                <path d="M 136,432 L 136,464" fill="none" stroke="black"/>
                <path d="M 136,496 L 136,528" fill="none" stroke="black"/>
                <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                <path d="M 152,496 L 152,528" fill="none" stroke="black"/>
                <path d="M 160,368 L 160,400" fill="none" stroke="black"/>
                <path d="M 168,224 L 168,256" fill="none" stroke="black"/>
                <path d="M 168,496 L 168,528" fill="none" stroke="black"/>
                <path d="M 184,160 L 184,192" fill="none" stroke="black"/>
                <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                <path d="M 184,432 L 184,464" fill="none" stroke="black"/>
                <path d="M 184,496 L 184,528" fill="none" stroke="black"/>
                <path d="M 200,32 L 200,64" fill="none" stroke="black"/>
                <path d="M 200,96 L 200,128" fill="none" stroke="black"/>
                <path d="M 200,304 L 200,336" fill="none" stroke="black"/>
                <path d="M 200,432 L 200,464" fill="none" stroke="black"/>
                <path d="M 200,496 L 200,528" fill="none" stroke="black"/>
                <path d="M 208,480 L 208,488" fill="none" stroke="black"/>
                <path d="M 216,432 L 216,464" fill="none" stroke="black"/>
                <path d="M 216,496 L 216,528" fill="none" stroke="black"/>
                <path d="M 232,368 L 232,400" fill="none" stroke="black"/>
                <path d="M 64,32 L 200,32" fill="none" stroke="black"/>
                <path d="M 64,64 L 200,64" fill="none" stroke="black"/>
                <path d="M 32,94 L 104,94" fill="none" stroke="black"/>
                <path d="M 32,98 L 104,98" fill="none" stroke="black"/>
                <path d="M 128,96 L 200,96" fill="none" stroke="black"/>
                <path d="M 32,126 L 104,126" fill="none" stroke="black"/>
                <path d="M 32,130 L 104,130" fill="none" stroke="black"/>
                <path d="M 128,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 8,160 L 56,160" fill="none" stroke="black"/>
                <path d="M 72,160 L 120,160" fill="none" stroke="black"/>
                <path d="M 136,160 Q 138,156.8 140,160 Q 142,163.2 144,160 Q 146,156.8 148,160 Q 150,163.2 152,160 Q 154,156.8 156,160 Q 158,163.2 160,160 Q 162,156.8 164,160 Q 166,163.2 168,160 Q 170,156.8 172,160 Q 174,163.2 176,160 Q 178,156.8 180,160 Q 182,163.2 184,160 " fill="none" stroke="black"/>
                <path d="M 8,192 L 56,192" fill="none" stroke="black"/>
                <path d="M 72,192 L 120,192" fill="none" stroke="black"/>
                <path d="M 136,192 Q 138,188.8 140,192 Q 142,195.2 144,192 Q 146,188.8 148,192 Q 150,195.2 152,192 Q 154,188.8 156,192 Q 158,195.2 160,192 Q 162,188.8 164,192 Q 166,195.2 168,192 Q 170,188.8 172,192 Q 174,195.2 176,192 Q 178,188.8 180,192 Q 182,195.2 184,192 " fill="none" stroke="black"/>
                <path d="M 8,224 L 24,224" fill="none" stroke="black"/>
                <path d="M 40,224 L 56,224" fill="none" stroke="black"/>
                <path d="M 72,224 L 88,224" fill="none" stroke="black"/>
                <path d="M 104,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 136,224 L 152,224" fill="none" stroke="black"/>
                <path d="M 168,224 L 184,224" fill="none" stroke="black"/>
                <path d="M 8,256 L 24,256" fill="none" stroke="black"/>
                <path d="M 40,256 L 56,256" fill="none" stroke="black"/>
                <path d="M 72,256 L 88,256" fill="none" stroke="black"/>
                <path d="M 104,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,256 L 152,256" fill="none" stroke="black"/>
                <path d="M 168,256 L 184,256" fill="none" stroke="black"/>
                <path d="M 64,304 L 200,304" fill="none" stroke="black"/>
                <path d="M 64,336 L 200,336" fill="none" stroke="black"/>
                <path d="M 32,366 L 104,366" fill="none" stroke="black"/>
                <path d="M 32,370 L 104,370" fill="none" stroke="black"/>
                <path d="M 160,368 L 232,368" fill="none" stroke="black"/>
                <path d="M 32,398 L 104,398" fill="none" stroke="black"/>
                <path d="M 32,402 L 104,402" fill="none" stroke="black"/>
                <path d="M 160,400 L 232,400" fill="none" stroke="black"/>
                <path d="M 8,432 L 56,432" fill="none" stroke="black"/>
                <path d="M 72,432 L 120,432" fill="none" stroke="black"/>
                <path d="M 136,432 Q 138,428.8 140,432 Q 142,435.2 144,432 Q 146,428.8 148,432 Q 150,435.2 152,432 Q 154,428.8 156,432 Q 158,435.2 160,432 Q 162,428.8 164,432 Q 166,435.2 168,432 Q 170,428.8 172,432 Q 174,435.2 176,432 Q 178,428.8 180,432 Q 182,435.2 184,432 " fill="none" stroke="black"/>
                <path d="M 200,430 L 216,430" fill="none" stroke="black"/>
                <path d="M 200,434 L 216,434" fill="none" stroke="black"/>
                <path d="M 8,464 L 56,464" fill="none" stroke="black"/>
                <path d="M 72,464 L 120,464" fill="none" stroke="black"/>
                <path d="M 136,464 Q 138,460.8 140,464 Q 142,467.2 144,464 Q 146,460.8 148,464 Q 150,467.2 152,464 Q 154,460.8 156,464 Q 158,467.2 160,464 Q 162,460.8 164,464 Q 166,467.2 168,464 Q 170,460.8 172,464 Q 174,467.2 176,464 Q 178,460.8 180,464 Q 182,467.2 184,464 " fill="none" stroke="black"/>
                <path d="M 200,462 L 216,462" fill="none" stroke="black"/>
                <path d="M 200,466 L 216,466" fill="none" stroke="black"/>
                <path d="M 8,496 L 24,496" fill="none" stroke="black"/>
                <path d="M 40,496 L 56,496" fill="none" stroke="black"/>
                <path d="M 72,496 L 88,496" fill="none" stroke="black"/>
                <path d="M 104,496 L 120,496" fill="none" stroke="black"/>
                <path d="M 136,496 L 152,496" fill="none" stroke="black"/>
                <path d="M 168,496 L 184,496" fill="none" stroke="black"/>
                <path d="M 200,496 L 216,496" fill="none" stroke="black"/>
                <path d="M 8,528 L 24,528" fill="none" stroke="black"/>
                <path d="M 40,528 L 56,528" fill="none" stroke="black"/>
                <path d="M 72,528 L 88,528" fill="none" stroke="black"/>
                <path d="M 104,528 L 120,528" fill="none" stroke="black"/>
                <path d="M 136,528 L 152,528" fill="none" stroke="black"/>
                <path d="M 168,528 L 184,528" fill="none" stroke="black"/>
                <path d="M 200,528 L 216,528" fill="none" stroke="black"/>
                <g class="text">
                  <text x="120" y="52">[0,</text>
                  <text x="148" y="52">6)</text>
                  <text x="280" y="52">level</text>
                  <text x="312" y="52">3</text>
                  <text x="72" y="84">/</text>
                  <text x="168" y="84">|</text>
                  <text x="56" y="116">[0,</text>
                  <text x="84" y="116">4)</text>
                  <text x="152" y="116">[4,</text>
                  <text x="180" y="116">6)</text>
                  <text x="280" y="116">level</text>
                  <text x="312" y="116">2</text>
                  <text x="40" y="148">/</text>
                  <text x="96" y="148">\</text>
                  <text x="168" y="148">|</text>
                  <text x="32" y="180">[0,2)</text>
                  <text x="96" y="180">[2,4)</text>
                  <text x="160" y="180">[4,6)</text>
                  <text x="280" y="180">level</text>
                  <text x="312" y="180">1</text>
                  <text x="24" y="212">/</text>
                  <text x="40" y="212">\</text>
                  <text x="88" y="212">/</text>
                  <text x="104" y="212">\</text>
                  <text x="152" y="212">/</text>
                  <text x="168" y="212">\</text>
                  <text x="16" y="244">0</text>
                  <text x="48" y="244">1</text>
                  <text x="80" y="244">2</text>
                  <text x="112" y="244">3</text>
                  <text x="144" y="244">4</text>
                  <text x="176" y="244">5</text>
                  <text x="280" y="244">level</text>
                  <text x="312" y="244">0</text>
                  <text x="120" y="324">[0,</text>
                  <text x="148" y="324">7)</text>
                  <text x="280" y="324">level</text>
                  <text x="312" y="324">3</text>
                  <text x="72" y="356">/</text>
                  <text x="192" y="356">\</text>
                  <text x="56" y="388">[0,</text>
                  <text x="84" y="388">4)</text>
                  <text x="184" y="388">[4,</text>
                  <text x="212" y="388">7)</text>
                  <text x="280" y="388">level</text>
                  <text x="312" y="388">2</text>
                  <text x="40" y="420">/</text>
                  <text x="96" y="420">\</text>
                  <text x="168" y="420">/</text>
                  <text x="208" y="420">|</text>
                  <text x="32" y="452">[0,2)</text>
                  <text x="96" y="452">[2,4)</text>
                  <text x="160" y="452">[4,6)</text>
                  <text x="208" y="452">6</text>
                  <text x="280" y="452">level</text>
                  <text x="312" y="452">1</text>
                  <text x="24" y="484">/</text>
                  <text x="40" y="484">\</text>
                  <text x="88" y="484">/</text>
                  <text x="104" y="484">\</text>
                  <text x="152" y="484">/</text>
                  <text x="168" y="484">\</text>
                  <text x="16" y="516">0</text>
                  <text x="48" y="516">1</text>
                  <text x="80" y="516">2</text>
                  <text x="112" y="516">3</text>
                  <text x="144" y="516">4</text>
                  <text x="176" y="516">5</text>
                  <text x="208" y="516">6</text>
                  <text x="280" y="516">level</text>
                  <text x="312" y="516">0</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
       +----------------+
       |     [0, 6)     |       level 3
       +----------------+
        /           |
   +========+  +--------+
   | [0, 4) |  | [4, 6) |       level 2
   +========+  +--------+
    /      \        |
+-----+ +-----+ +~~~~~+
|[0,2)| |[2,4)| |[4,6)|         level 1
+-----+ +-----+ +~~~~~+
  / \     / \     / \
+-+ +-+ +-+ +-+ +-+ +-+
|0| |1| |2| |3| |4| |5|         level 0
+-+ +-+ +-+ +-+ +-+ +-+


       +----------------+
       |     [0, 7)     |       level 3
       +----------------+
        /              \
   +========+      +--------+
   | [0, 4) |      | [4, 7) |   level 2
   +========+      +--------+
    /      \        /    |
+-----+ +-----+ +~~~~~+ +=+
|[0,2)| |[2,4)| |[4,6)| |6|     level 1
+-----+ +-----+ +~~~~~+ +=+
  / \     / \     / \    |
+-+ +-+ +-+ +-+ +-+ +-+ +-+
|0| |1| |2| |3| |4| |5| |6|     level 0
+-+ +-+ +-+ +-+ +-+ +-+ +-+
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="consistency-proof-verification-explain">
        <name>Consistency Proof Verification</name>
        <t>The procedure in <xref target="verifying-a-subtree-consistency-proof"/> is structured similarly to inclusion proof evaluation (<xref target="inclusion-proof-evaluation-explain"/>). It iteratively builds two hashes, <tt>fr</tt> and <tt>sr</tt>, which are expected to equal <tt>node_hash</tt> and <tt>root_hash</tt>, respectively. Everything hashed into <tt>fr</tt> is also hashed into <tt>sr</tt>, so success demonstrates that <tt>root_hash</tt> contains <tt>node_hash</tt>.</t>
        <t>Step 2 initializes <tt>fn</tt> (first number), <tt>sn</tt> (second number), and <tt>tn</tt> (third number) to follow, respectively, the paths to <tt>start</tt>, <tt>end - 1</tt> (the last element of the subtree), and <tt>n - 1</tt> (the last element of the tree).</t>
        <t>Steps 3 and 4 then skip to the starting node, described in <xref target="consistency-proof-structure"/>. The starting node may be:</t>
        <ul spacing="normal">
          <li>
            <t>The entire subtree <tt>[start, end)</tt> if <tt>[start, end)</tt> is directly contained in the tree. This will occur if <tt>end</tt> is <tt>n</tt> (step 3), or if <tt>[start, end)</tt> is full (exiting step 4 because <tt>fn</tt> is <tt>sn</tt>).</t>
          </li>
          <li>
            <t>Otherwise, the highest full subtree along the right edge of <tt>[start, end)</tt>. This corresponds to the process exiting step 4 because <tt>LSB(sn)</tt> is not set.</t>
          </li>
        </ul>
        <t>Steps 5 and 6 initialize the hashes <tt>fr</tt> and <tt>sr</tt>:</t>
        <ul spacing="normal">
          <li>
            <t>In the first case above, <tt>fn</tt> will equal <tt>sn</tt> after truncation. Step 5 will then initialize the hashes to <tt>node_hash</tt> because consistency proof does not need to include the starting node.</t>
          </li>
          <li>
            <t>In the second case above, <tt>fn</tt> is less than <tt>sn</tt>. Step 6 will then initialize the hashes to the first value in the consistency proof.</t>
          </li>
        </ul>
        <t>Step 7 incorporates the remainder of the consistency proof into <tt>fr</tt> and <tt>sr</tt>:</t>
        <ul spacing="normal">
          <li>
            <t>All hashes are incorporated into <tt>sr</tt>, with hashing on the left or right determined the same as in inclusion proof evaluation.</t>
          </li>
          <li>
            <t>A subset of the hashes are incorporated into <tt>fr</tt>. It skips any hash on the right because those contain elements greater than <tt>end - 1</tt>. It also stops incorporating when <tt>fn</tt> and <tt>sn</tt> have converged.</t>
          </li>
        </ul>
        <t>This reconstructs the hashes of the subtree and full tree, which are then compared to expected values in step 8.</t>
        <t>In the case when <tt>fn</tt> is <tt>sn</tt> in step 5, the condition in step 7.2.1 is always false, and <tt>fr</tt> is always equal to <tt>node_hash</tt> in step 8. In this case, steps 6 through 8 are equivalent to verifying an inclusion proof for the truncated subtree <tt>[fn, sn + 1)</tt> and truncated tree <tt>tn + 1</tt>.</t>
      </section>
    </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, Matt Mueller, 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 numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-07">
        <name>Since draft-davidben-tls-merkle-tree-certs-07</name>
        <ul spacing="normal">
          <li>
            <t>Clarify landmark zero</t>
          </li>
          <li>
            <t>Clarify signature verification process</t>
          </li>
          <li>
            <t>Improve subtree consistency proof verification algorithm</t>
          </li>
          <li>
            <t>Add an appendix that explains the Merkle Tree proof procedures</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-08">
        <name>Since draft-davidben-tls-merkle-tree-certs-08</name>
        <ul spacing="normal">
          <li>
            <t>Improvements to malleability discussion</t>
          </li>
          <li>
            <t>Improvements to subtree definition</t>
          </li>
          <li>
            <t>Improvements to <tt>trust_anchors</tt> integration</t>
          </li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
XmvoM4y1WDZw0OOn74vk2+TT9N3WT8BY3m3D36PRCH8shts//TIerI5vlzic
9jFf5Wnrsx+A8SfjF6c/3IdZ18ek6QfHSvzFvpG7YMXoBE34Dw/I8en7AOGf
1jFomn6VAE6MI5ccXAkvdWGilIOVjLcw5FxizzHsHH8txhgPLeMgXiVzdPYv
uNKBD5TGx4f88vp4bQ2T3GlooiLmfYzaFuYgSTwYe6rO8nR2jenfWNmSE7Mb
zZX7KOmXmGo0y0IwWNXdgqS1+1yD/en7jtj8MMAf2EPjrc8mfg5DoChveZpP
fGKzpAbFg444o2UDEXjDZfz4mzo2oMMpgwdAaCDEJ8i7iPPmutTY5TrNpxKr
RSagjYGPze14hJhVOttA6BI4/TrwbQmZ4Pc0GzgMy3LSjYRYeR8Uh9Y7xCbP
4bhIvvtWUxjiGWUxg5XzmQG58ABe3cSNCXf/iHOwDQkWQY5/H0qONlxTJGy1
BS9A/93uIHm8Lljy7vEg2X6wPt43qn9iBGiSh39O+B3WE8PvxIeX/Oua6sFf
q4oALz1c/zn5+d3DweP1n1vfex/9Jr39dWL+W/t5F97cg/8ewn+Pfm59L3J6
W+dec1oA/JHtseZwyxt+L+5x/+zX5tOfedidddU3Vzzr4ePG/VqfMq5LUGtg
zO0tAtf21gAG/7n/WRPd4H6wELJ/rf38GMZ8Av9tb+Ff2/jXTu/TgTITopNq
MafXpVYBcFg1oAQFklI4tStTXEc15Xsq42KFy27MD1PoxK8B5zcQTUSFErs4
GQB5rcf7kcfyILrxLJukS5Su0hmmnF5cElO8jxgilTKYbN5/vD6IqRZubuQv
TOfAwXAyFPw2Ci9X8OczQh4MXsufd1sOvQOc+xvGD29B8MeFWnSa18yUf43+
uFl+dqt+vN7eTf+d/fIZ4820TY69d16m+Ppb+aO/+0nMWz/TrnY9SXAk0/2+
imZ81lwxSWn93kdzHO2Vicy/OsvXfj6kSVuDHSJJO4Nd+jeg6MkqmvW5cwXc
YOW/3TRP/vs2+u+v+p/9a+1nIoXw3w789wD+C5lNcivN/KzZumhqB9nyVqJu
KoiU9Ji0lAbr9QxCWoTE67Oo6u5nUtUhZoVgEUXUI1vUkctqYb4BWQsoXsPo
U6oN/baUcPc/HSXsneXulHD38yhh/74+hxL2kKe+390ivowW/k2zfTY17CJR
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
IrGJOgIA

-->

</rfc>
