<?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.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-plants-merkle-tree-certs-06" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title>Merkle Tree Certificates</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-plants-merkle-tree-certs-06"/>
    <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>Apple Inc.</organization>
      <address>
        <email>asymmetric@apple.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="2026" month="September" day="21"/>
    <area>Security</area>
    <workgroup>PKI, Logs, And Tree Signatures</workgroup>
    <abstract>
      <?line 218?>

<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 existing X.509 constructions and Certificate Transparency. Merkle Tree certificates additionally admit an optional size optimization that avoids 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://ietf-plants-wg.github.io/merkle-tree-certs/draft-ietf-plants-merkle-tree-certs.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-plants-merkle-tree-certs/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        PKI, Logs, And Tree Signatures Working Group mailing list (<eref target="mailto:plants@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/plants"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/plants/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-plants-wg/merkle-tree-certs"/>.</t>
    </note>
  </front>
  <middle>
    <?line 222?>

<section anchor="introduction">
      <name>Introduction</name>
      <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="8.5" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>), two SCTs and a leaf certificate signature add 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 rate at which entries are added to the log will increase.</t>
      <t>This document introduces Merkle Tree Certificates (MTCs), a new form of X.509 certificate that integrates logging with certificate issuance. Each CA maintains logs of everything it issues, signing views of its logs 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 logs. 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>Long-expired entries can be revoked from relying parties in bulk (see <xref target="revoked-ranges"/>). This allows logging and monitoring infrastructure 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 "landmark-relative" 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 "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" 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>
      <?line -18?>

<t>This document additionally uses the TLS presentation language defined in <xref section="3" sectionFormat="of" target="RFC9846"/>, as well as the notation defined in <xref section="2.1.1" sectionFormat="of" target="RFC9162"/>. It extends the numeric types defined in <xref section="3.3" sectionFormat="of" target="RFC9846"/> with a big-endian, 48-bit integer:</t>
      <sourcecode type="tls-presentation"><![CDATA[
uint8 uint48[6];
]]></sourcecode>
      <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>The <em>decimal representation</em> of a non-negative integer is its base-ten representation, written with the ASCII digits <tt>0</tt> through <tt>9</tt> (U+0030 through U+0039). Zero is written as the single digit <tt>0</tt>, and no other value is written with a leading <tt>0</tt>.</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, containing certification statements issued by that CA. A CA operates some number of issuance logs, which together contain all statements 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 a sequence of tree sizes, infrequently chosen and used to calculate landmark subtrees for predistribution to relying parties.</t>
          </dd>
          <dt>Landmark subtree:</dt>
          <dd>
            <t>One of the two (possibly empty) subtrees determined by an interval between two landmarks. Predistributed and used as the basis for landmark-relative certificates.</t>
          </dd>
          <dt>Standalone certificate:</dt>
          <dd>
            <t>A certificate containing an inclusion proof to some subtree, and several cosignatures over that subtree.</t>
          </dd>
          <dt>Landmark-relative certificate:</dt>
          <dd>
            <t>An optimized certificate containing an inclusion proof to a landmark subtree, and no signatures.</t>
          </dd>
          <dt>Directly-signed certificate:</dt>
          <dd>
            <t>A certificate issued using the existing, non-MTC construction, where the TBSCertificate is passed directly to the private key's signing operation.</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 invert 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 MTC 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 232,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="88" y="36">Certification</text>
                <text x="184" 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="388" y="84">issuance</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[
+-- Certification Authority ---+    +--  Authenticating Party ----+
|                              |    |                             |
|  2. Validate request     <---+----+--  1. Request certificate   |
|       |                      |    |       issuance              |
|       |                      |    |                             |
|       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 diverges from CT-based PKIs.</t>
        </li>
        <li>
          <t>The CA operates a series of append-only <em>issuance logs</em> (<xref target="issuance-logs"/>). Unlike a CT log, these logs only contain entries added by the CA:  </t>
          <ol spacing="normal" type="a"><li>
              <t>The CA adds a TBSCertificateLogEntry (<xref target="log-entries"/>, abbreviated "tbscert entries" in the diagram) to an issuance 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 CA's issuance logs to ensure the CA is operated correctly.</t>
        </li>
      </ol>
      <t>A certificate with cosignatures is known as a <em>standalone 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>landmark-relative certificate</em>. This is an optional, optimized certificate that avoids all cosignatures, including the CA signature. Landmark-relative certificates are available after a short period of time and usable with up-to-date relying parties.</t>
      <figure anchor="fig-landmark-cert-overview">
        <name>A diagram of landmark-relative 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 232,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="88" y="36">Certification</text>
                <text x="184" 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="20" y="148">2.</text>
                <text x="52" y="148">Make</text>
                <text x="144" y="148">landmark-relative</text>
                <text x="324" y="148">3.</text>
                <text x="380" y="148">Distribute</text>
                <text x="52" y="164">cert</text>
                <text x="376" y="164">landmarks</text>
                <text x="92" y="196">Authenticating</text>
                <text x="176" y="196">Party</text>
                <text x="88" y="228">landmark-relative</text>
                <text x="180" 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="60" y="308">standalone</text>
                <text x="124" 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[
+-- Certification Authority -----+
|                                |  +-- Update Channel --+
|    /\                          |  |                    |
|   /  \  1. Allocate landmarks -+--+----------------+   |
|  +----+                  |     |  |                |   |
+--------------------------+-----+  +----------------+---+
                           |                         |
 2. Make landmark-relative |           3. Distribute |
    cert                   |              landmarks  |
                           V                         |
+-- Authenticating Party --------+                   |
|                                |                   |
| landmark-relative cert         |                   V
|   tbscert                      |  +-- Up-to-date RP -----+
|   inclusion proof to landmark -+->| landmark hashes      |
|                                |  | trusted cosigners    |
|                                |  +----------------------+
| standalone cert                |
|   tbscert                      |  +-- Unupdated RP ------+
|   inclusion proof              |  | (stale or no hashes) |
|   cosignatures     ------------+->| trusted cosigners    |
|                                |  +----------------------+
+--------------------------------+
                     4. Select certificate by RP
]]></artwork>
        </artset>
      </figure>
      <t>Landmark-relative certificates are constructed and used as follows. <xref target="fig-landmark-cert-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 landmark-relative certificates.</t>
        </li>
        <li>
          <t>Once some landmark includes the TBSCertificate, the landmark-relative 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="RFC9846"/>, if the relying party already supports the landmark subtree, the authenticating party can present the landmark-relative certificate. Otherwise, it presents a standalone certificate. The authenticating party may also select between several landmark-relative 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 itself a Merkle Tree, built over an interval of entries from the original tree. <xref target="definition-of-a-subtree"/> defines a subtree formally, including the constraints on those intervals.</t>
      <t>As with Merkle Trees, a subtree inclusion proof, defined in <xref target="subtree-inclusion-proofs"/>, can prove an entry is contained in some subtree. Subtrees, and thus their inclusion proofs, are smaller than those of the original tree, so this document uses subtree inclusion proofs as a certificate size optimization.</t>
      <t>Not all intervals can form subtrees. Subtrees are limited to intervals that can be efficiently proven consistent with the original tree, using subtree consistency proofs defined in <xref target="subtree-consistency-proofs"/>. However, every interval of a Merkle Tree can be efficiently covered by two subtrees. <xref target="arbitrary-intervals"/> describes how to determine these subtrees.</t>
      <t><xref target="accumulated-subtree-test-vectors"/> and <xref target="large-subtree-test-vectors"/> provide test vectors for the algorithms defined in this section.</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>The second condition ensures that <tt>MTH(D[start:end])</tt>, built over <tt>D[start:end]</tt> as an independent list, is sufficiently aligned with the original Merkle Tree to support subtree consistency proofs. See <xref target="subtrees-explain"/> for more details.</t>
        <t>In implementations using fixed-width integers, <tt>BIT_CEIL(end - start)</tt> above may exceed <tt>end</tt> and potentially overflow. For example, if <tt>start</tt> is zero and <tt>end</tt> is 2<sup>63</sup>+1, <tt>BIT_CEIL(end - start)</tt> is 2<sup>64</sup>. The following is an example C++ implementation that handles this condition.</t>
        <sourcecode type="c++"><![CDATA[
bool is_valid_subtree(uint64_t start, uint64_t end) {
  if (start > end) {
    return false;
  }
  uint64_t size = end - start;
  if (size > (uint64_t{1} << 63)) {
    return start == 0;  // bit_ceil below will overflow.
  }
  return (start & (std::bit_ceil(size) - 1)) == 0;
}
]]></sourcecode>
        <t>For all <tt>x</tt>, <tt>[0, x)</tt> is a valid subtree (0 is a multiple of everything), and <tt>[x, x)</tt> is a valid subtree (<tt>BIT_CEIL(0)</tt> is 1).</t>
        <t>The <em>size</em> of the subtree is <tt>end - start</tt>.</t>
        <t>In the context of a single Merkle Tree, this document denotes subtree <tt>MTH(D[start:end])</tt> by half-open interval <tt>[start, end)</tt>. It contains the entries whose indices are in that half-open interval.</t>
        <t>As a Merkle Tree grows, its subtrees remain unchanged. That is, if <tt>end &lt;= m &lt;= n</tt>, the subtree <tt>[start, end)</tt> of <tt>MTH(D[0:m])</tt> and the subtree <tt>[start, end)</tt> of <tt>MTH(D_n)</tt> are both valid and identical.</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</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 can be viewed as subtrees of a Merkle Tree of size 13, depicted in <xref target="fig-subtree-containment-example"/>. Nodes in common with <tt>[4, 8)</tt> and <tt>[8, 13)</tt> are marked with doubled and wavy lines, respectively.</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 some cases, not every node of a subtree will appear in the larger Merkle Tree. <xref target="fig-subtree-containment-example-2"/> depicts a Merkle Tree of size 14. Nodes in common with <tt>[4, 8)</tt> and <tt>[8, 13)</tt> are marked as above. While all nodes of <tt>[4, 8)</tt> appear in the tree, non-leaf nodes on <tt>[8, 13)</tt>'s right edge do not. However, there is still sufficient overlap to construct subtree consistency proofs (<xref target="subtree-consistency-proofs"/>).</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,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 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,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 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,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 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,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"/>
                <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>
        <t><xref target="subtrees-explain"/> discusses subtrees in more detail.</t>
      </section>
      <section anchor="subtree-inclusion-proofs">
        <name>Subtree Inclusion Proofs</name>
        <t>Subtrees are Merkle Trees, so entries can be proven to be contained in the subtree. A subtree inclusion proof for entry <tt>index</tt> of the subtree <tt>[start, end)</tt> is a Merkle inclusion proof, as defined in <xref section="2.1.3.1" sectionFormat="of" target="RFC9162"/>, where <tt>m</tt> is <tt>index - start</tt> and the tree inputs are <tt>D[start:end]</tt>.</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>
        <t>A subtree inclusion proof for a subtree of size <tt>n</tt> contains at most ceil(log2(n)) hashes, or <tt>BIT_WIDTH(n - 1)</tt> hashes.</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 does 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 original tree hash, <tt>MTH(D_n)</tt>, in such a way that every input to the subtree hash was also incorporated into the original 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"/>.</t>
          <t>If <tt>start = end</tt>, the consistency proof is empty:</t>
          <sourcecode type="pseudocode"><![CDATA[
SUBTREE_PROOF(start, start, D_n) = {}
]]></sourcecode>
          <t>Otherwise, <tt>start &lt; end</tt> and <tt>SUBTREE_PROOF</tt> is defined by a helper function:</t>
          <sourcecode type="pseudocode"><![CDATA[
SUBTREE_PROOF(start, end, D_n) =
    SUBTREE_SUBPROOF(start, end, D_n, true)
]]></sourcecode>
          <t>The boolean parameter tracks whether the first hash in the proof will be omitted by the base case. The first hash is omitted when it's equal to the original subtree hash <tt>MTH(D[start:end])</tt>, since the verifier will already know that hash. That happens when the original subtree's root is a node in the Merkle Tree constructed from <tt>D_n</tt>, or equivalently, when the original subtree is full or has <tt>end = n</tt>.</t>
          <t>If <tt>start = 0</tt> and <tt>end = n</tt>, the subtree is the root (base case):</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"/> with doubled lines. The verifier is assumed to know the subtree hash, so there is no need to include <tt>MTH(D[4:8])</tt>, depicted with wavy lines, in the consistency proof.</t>
          <figure anchor="fig-subtree-consistency-example-1">
            <name>An example subtree consistency proof that begins at the root of the subtree</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"/> with doubled lines. Not every node in <tt>[8, 13)</tt> is also in the overall tree, so the proof must include sufficient nodes to reconstruct both hashes. However, there is enough overlap for the proof to be possible.</t>
          <figure anchor="fig-subtree-consistency-example-2">
            <name>An example subtree consistency proof that decomposes the subtree</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 does not hold, fail proof verification. These checks imply <tt>0 &lt;= start &lt;= end &lt;= n</tt>.</t>
            </li>
            <li>
              <t>If <tt>start</tt> equals <tt>end</tt>, check the following conditions:
              </t>
              <ul spacing="normal">
                <li>
                  <t><tt>proof</tt> is an empty array.</t>
                </li>
                <li>
                  <t><tt>node_hash</tt> is equal to <tt>HASH()</tt>, the hash of the empty string.</t>
                </li>
              </ul>
              <t>
If either condition does not hold, stop and fail the proof verification. If both hold, stop and accept the proof.</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>Efficiently Covering Arbitrary Intervals</name>
        <t>This document uses subtrees to sign over arbitrary intervals, <tt>[start, end)</tt>, of a Merkle Tree. However, not all intervals are valid subtrees. While a protocol could build a smaller Merkle Tree, <tt>MTH(D[start:end])</tt>, and compute inclusion proofs of any element, this smaller Merkle Tree cannot, in general, be efficiently proven consistent with the overall Merkle Tree.</t>
        <t>Enlarging the interval to a valid subtree would mitigate this. However, the smallest subtree containing <tt>[start, end)</tt> may be much larger than <tt>[start, end)</tt>. For example, <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.</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,32 Q 138,28.8 140,32 Q 142,35.2 144,32 Q 146,28.8 148,32 Q 150,35.2 152,32 Q 154,28.8 156,32 Q 158,35.2 160,32 Q 162,28.8 164,32 Q 166,35.2 168,32 Q 170,28.8 172,32 Q 174,35.2 176,32 Q 178,28.8 180,32 Q 182,35.2 184,32 Q 186,28.8 188,32 Q 190,35.2 192,32 Q 194,28.8 196,32 Q 198,35.2 200,32 Q 202,28.8 204,32 Q 206,35.2 208,32 Q 210,28.8 212,32 Q 214,35.2 216,32 Q 218,28.8 220,32 Q 222,35.2 224,32 Q 226,28.8 228,32 Q 230,35.2 232,32 Q 234,28.8 236,32 Q 238,35.2 240,32 Q 242,28.8 244,32 Q 246,35.2 248,32 Q 250,28.8 252,32 Q 254,35.2 256,32 Q 258,28.8 260,32 Q 262,35.2 264,32 Q 266,28.8 268,32 Q 270,35.2 272,32 Q 274,28.8 276,32 Q 278,35.2 280,32 Q 282,28.8 284,32 Q 286,35.2 288,32 Q 290,28.8 292,32 Q 294,35.2 296,32 " fill="none" stroke="black"/>
                <path d="M 136,64 Q 138,60.8 140,64 Q 142,67.2 144,64 Q 146,60.8 148,64 Q 150,67.2 152,64 Q 154,60.8 156,64 Q 158,67.2 160,64 Q 162,60.8 164,64 Q 166,67.2 168,64 Q 170,60.8 172,64 Q 174,67.2 176,64 Q 178,60.8 180,64 Q 182,67.2 184,64 Q 186,60.8 188,64 Q 190,67.2 192,64 Q 194,60.8 196,64 Q 198,67.2 200,64 Q 202,60.8 204,64 Q 206,67.2 208,64 Q 210,60.8 212,64 Q 214,67.2 216,64 Q 218,60.8 220,64 Q 222,67.2 224,64 Q 226,60.8 228,64 Q 230,67.2 232,64 Q 234,60.8 236,64 Q 238,67.2 240,64 Q 242,60.8 244,64 Q 246,67.2 248,64 Q 250,60.8 252,64 Q 254,67.2 256,64 Q 258,60.8 260,64 Q 262,67.2 264,64 Q 266,60.8 268,64 Q 270,67.2 272,64 Q 274,60.8 276,64 Q 278,67.2 280,64 Q 282,60.8 284,64 Q 286,67.2 288,64 Q 290,60.8 292,64 Q 294,67.2 296,64 " 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">5</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| |5| |6| |7| |8|
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +=+ +=+
]]></artwork>
          </artset>
        </figure>
        <t>While one subtree can be inefficient, two subtrees are sufficient to efficiently cover any interval, as described below.</t>
        <section anchor="selecting-two-subtrees">
          <name>Selecting Two Subtrees</name>
          <t>Given any interval, <tt>[start, end)</tt>, this section defines a procedure for selecting two subtrees, <tt>left</tt> and <tt>right</tt>, such that:</t>
          <ul spacing="normal">
            <li>
              <t><tt>left</tt> and <tt>right</tt> are valid subtrees, so it is possible to compute subtree consistency proofs.</t>
            </li>
            <li>
              <t>The disjoint union of <tt>left</tt>, followed by <tt>right</tt>, contains <tt>[start, end)</tt>. That is, <tt>left.start &lt;= start &lt;= left.end = right.start &lt;= end &lt;= right.end</tt>.</t>
            </li>
            <li>
              <t>While <tt>left</tt> may contain extra elements before <tt>start</tt>, <tt>right</tt> does not contain any extra elements. That is, <tt>end = right.end</tt>.</t>
            </li>
            <li>
              <t>Each subtree's size is at most <tt>BIT_CEIL(end - start)</tt>.</t>
            </li>
          </ul>
          <t>The pair of subtree hashes for <tt>left</tt> and <tt>right</tt> can support inclusion proofs for any element of <tt>[start, end)</tt>. The largest such inclusion proof is no bigger than the largest inclusion proof in <tt>MTH(D[start:end])</tt>. Unlike <tt>MTH(D[start:end])</tt>, these subtree hashes can be shown consistent with the overall Merkle Tree using subtree consistency proofs.</t>
          <t>The subtrees are selected as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>If <tt>end - start</tt> is less than or equal to 1, return the subtrees <tt>[start, end)</tt> and <tt>[end, end)</tt>.</t>
            </li>
            <li>
              <t>Otherwise:  </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>start</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>Intuitively, this procedure considers the tree <tt>MTH(D[0:end])</tt> and finds the lowest common ancestor of the elements in <tt>[start, end)</tt>. It splits the interval by that ancestor's left and right children and returns the lowest common ancestor of each half.</t>
          <t>The following Python code implements this procedure:</t>
          <sourcecode type="python"><![CDATA[
def find_subtrees(start, end):
    """ Returns a pair of subtrees that efficiently cover
    [start, end). """
    assert start <= end
    if end - start <= 1:
        return (start, end), (end, 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 in wavy lines. 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,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,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 Q 186,156.8 188,160 Q 190,163.2 192,160 Q 194,156.8 196,160 Q 198,163.2 200,160 Q 202,156.8 204,160 Q 206,163.2 208,160 Q 210,156.8 212,160 Q 214,163.2 216,160 Q 218,156.8 220,160 Q 222,163.2 224,160 Q 226,156.8 228,160 Q 230,163.2 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 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 Q 186,188.8 188,192 Q 190,195.2 192,192 Q 194,188.8 196,192 Q 198,195.2 200,192 Q 202,188.8 204,192 Q 206,195.2 208,192 Q 210,188.8 212,192 Q 214,195.2 216,192 Q 218,188.8 220,192 Q 222,195.2 224,192 Q 226,188.8 228,192 Q 230,195.2 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,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>
        </section>
      </section>
    </section>
    <section anchor="certification-authorities">
      <name>Certification Authorities</name>
      <t>A CA consists of the following components:</t>
      <ul spacing="normal">
        <li>
          <t>A CA ID (<xref target="ca-ids"/>), which uniquely identifies the CA.</t>
        </li>
        <li>
          <t>A collision-resistant cryptographic hash function, used by the CA's issuance logs. SHA-256 <xref target="SHS"/> is <bcp14>RECOMMENDED</bcp14>. Throughout this document, this hash function is referred to as HASH, and the size of its output in bytes is referred to as HASH_SIZE.</t>
        </li>
        <li>
          <t>A series of issuance logs (<xref target="issuance-logs"/>), which contain all statements the CA has certified. One issuance log is designated as the current log.</t>
        </li>
        <li>
          <t>A CA cosigner (<xref target="certification-authority-cosigners"/>), which signs subtrees of issuance logs to certify their contents.</t>
        </li>
        <li>
          <t>Optionally, a landmark sequence per log (<xref target="landmark-tree-sizes"/>), to support optimized landmark-relative certificates.</t>
        </li>
      </ul>
      <t><xref target="representing-certification-authorities"/> defines an X.509 certificate representation of a CA.</t>
      <section anchor="ca-ids">
        <name>Certification Authority Identifiers</name>
        <t>Each Merkle Tree Certificate CA has a <em>CA ID</em> to identify it. This CA ID is a trust anchor ID <xref target="I-D.ietf-tls-trust-anchor-ids"/>.</t>
        <t>Once allocated, the ID's entire object identifier (OID) arc is reserved by this protocol. Given a CA ID whose OID representation is <tt>caID</tt>, this document allocates the following OIDs:</t>
        <ul spacing="normal">
          <li>
            <t>For each positive integer <tt>N</tt>, the OID <tt>{caID logs(0) N}</tt> represents the issuance log <tt>N</tt> (<xref target="issuance-logs"/>).</t>
          </li>
          <li>
            <t>For each positive integer <tt>N</tt> and <tt>L</tt>, the OID <tt>{caID landmarks(1) N L}</tt> represents landmark <tt>L</tt> (<xref target="landmark-tree-sizes"/>) of issuance log <tt>N</tt>. These OIDs may be used as trust anchor IDs, as described in <xref target="landmark-relative-certificates-tls"/>. These OIDs are used when it is necessary to identify an individual landmark, e.g. as in the recovery mechanism described in <xref section="5.6" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>.</t>
          </li>
          <li>
            <t>For each positive integer <tt>N</tt> and <tt>L</tt>, the OID <tt>{caID landmarkGroups(2) N L}</tt> represents a trust anchor group (<xref section="6" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>) containing landmark <tt>L</tt> of log <tt>N</tt> and earlier landmarks of that log, as defined in <xref target="single-log-landmark-groups"/>. These OIDs may be used to advertise a series of landmarks at once.</t>
          </li>
        </ul>
        <t>Future extensions to this protocol <bcp14>MAY</bcp14> define further allocations.</t>
        <t>A CA ID determines a PKIX distinguished name (<xref section="4.1.2.4" sectionFormat="of" target="RFC5280"/>) that can be used in the issuer or subject field of an X.509 TBSCertificate. This 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 CA with ID <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 use the OID 1.3.6.1.4.1.44363.47.3 instead of <tt>id-rdna-trustAnchorID</tt>. Cloudflare has kindly donated the 1.3.6.1.4.1.44363.47 OID arc for use in this document. For example, the distinguished name for an experimental CA with ID <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.3=#0d0481fd5901
]]></artwork>
      </section>
      <section anchor="issuance-logs">
        <name>Issuance Logs</name>
        <t>A CA operates a series of issuance logs, each identified by a positive integer <em>log number</em>. Log numbers are numbered consecutively from 1 to at most 65535 (2<sup>16</sup>-1).</t>
        <t>Each issuance log has a <em>log ID</em>, which is a trust anchor ID constructed by concatenating the following OID components:</t>
        <ul spacing="normal">
          <li>
            <t>The CA ID (<xref target="ca-ids"/>)</t>
          </li>
          <li>
            <t>The constant 0</t>
          </li>
          <li>
            <t>The log number of the log</t>
          </li>
        </ul>
        <t>A log ID specifies both the CA and the log number in a single ID.</t>
        <t>Each issuance log describes an append-only sequence of at most 2<sup>48</sup>-1 <em>entries</em> (<xref target="log-entries"/>). Each entry is identified by an integer <em>index</em>, assigned consecutively 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 committed 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>At any point in time, one of the CA's issuance logs is its <em>current</em> log. Initially, this is log 1. A CA <bcp14>MUST NOT</bcp14> append to any log that is not the current log. Logs before the current log may have historical entries. Logs after the current log <bcp14>MUST</bcp14> be empty. A CA <bcp14>MAY</bcp14> increment its current log number as part of recovering from certain operational failures. See <xref target="log-failures"/> for further discussion.</t>
        <section anchor="log-entries">
          <name>Log Entries</name>
          <t>Each entry in the log is an MTCLogEntry, defined with the TLS presentation syntax below. An MTCLogEntry describes certificate information that the CA has validated and certified.</t>
          <sourcecode type="tls-presentation"><![CDATA[
struct {} Empty;

enum { (2^16-1) } MTCLogEntryExtensionType;

struct {
    MTCLogEntryExtensionType extension_type;
    opaque extension_data<0..2^16-1>;
} MTCLogEntryExtension;

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

struct {
    MTCLogEntryExtension extensions<0..2^16-1>;
    MTCLogEntryType type;
    select (type) {
       case null_entry: Empty;
       case tbs_cert_entry: opaque tbs_cert_entry_data[N];
       /* May be extended with future types. */
    }
} MTCLogEntry;
]]></sourcecode>
          <t>The <tt>extensions</tt> field is a list of tag-length-value extensions associated with the log entry. Extensions <bcp14>MUST</bcp14> appear in the list in ascending order by <tt>extension_type</tt>, and the list <bcp14>MUST NOT</bcp14> contain two extensions with the same <tt>extension_type</tt>.</t>
          <t>When <tt>type</tt> is <tt>null_entry</tt>, the entry does not represent any information. Entries at any index in the log <bcp14>MAY</bcp14> have type <tt>null_entry</tt>.</t>
          <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. An MTCLogEntry 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 contents octets (i.e. excluding the initial identifier and length octets) of the DER <xref target="X.690"/> encoding of a TBSCertificateLogEntry, defined below. Equivalently, <tt>tbs_cert_entry_data</tt> contains the DER encodings of each field of the TBSCertificateLogEntry, concatenated. This construction allows a single-pass implementation in <xref target="verifying-certificate-signatures"/>.</t>
          <sourcecode type="asn.1"><![CDATA[
TBSCertificateLogEntry ::= SEQUENCE {
    version               [0] EXPLICIT Version DEFAULT v1,
    issuer                    Name,
    validity                  Validity,
    subject                   Name,
    subjectPublicKeyAlgorithm AlgorithmIdentifier{PUBLIC-KEY,
                                  {PublicKeyAlgorithms}},
    subjectPublicKeyInfoHash  OCTET STRING,
    issuerUniqueID        [1] IMPLICIT UniqueIdentifier OPTIONAL,
    subjectUniqueID       [2] IMPLICIT UniqueIdentifier OPTIONAL,
    extensions            [3] EXPLICIT Extensions{{CertExtensions}}
                                           OPTIONAL
}
]]></sourcecode>
          <t>The fields of a TBSCertificateLogEntry are defined as follows:</t>
          <ul spacing="normal">
            <li>
              <t><tt>version</tt>, <tt>validity</tt>, <tt>subject</tt>, <tt>issuerUniqueID</tt>, <tt>subjectUniqueID</tt>, and <tt>extensions</tt> have the same semantics as the corresponding TBSCertificate fields, defined in <xref section="4.1.2" sectionFormat="of" target="RFC5280"/>.</t>
            </li>
            <li>
              <t><tt>issuer</tt> is the CA ID as a PKIX distinguished name, as described in <xref target="ca-ids"/>.  </t>
              <ul spacing="normal">
                <li>
                  <t>The <tt>issuer</tt> field is not human-readable. A TBSCertificateLogEntry <bcp14>MAY</bcp14> carry a human-readable label for the CA, suitable for display in user interfaces, in an issuer alternative name extension (<xref section="4.2.1.7" sectionFormat="of" target="RFC5280"/>). If present, the extension <bcp14>MUST</bcp14> be marked non-critical. The <tt>IssuerAltName</tt> SEQUENCE <bcp14>MUST</bcp14> contain a single <tt>GeneralName</tt> of type <tt>directoryName</tt>, whose <tt>Name</tt> <bcp14>MUST</bcp14> use the <tt>rdnSequence</tt> CHOICE. Each <tt>RelativeDistinguishedName</tt> <bcp14>MUST</bcp14> contain a single <tt>AttributeTypeAndValue</tt>. The extension is purely cosmetic, and <bcp14>MUST NOT</bcp14> be used in path validation or any other trust decision. The value <bcp14>MUST NOT</bcp14> be assumed unique across issuance logs and <bcp14>MAY</bcp14> change across entries in the same issuance log.</t>
                </li>
              </ul>
            </li>
            <li>
              <t><tt>subjectPublicKeyAlgorithm</tt> describes the algorithm of the subject's public key. It is constructed identically to the <tt>algorithm</tt> field of a SubjectPublicKeyInfo (<xref section="4.1.2.7" sectionFormat="of" target="RFC5280"/>).</t>
            </li>
            <li>
              <t><tt>subjectPublicKeyInfoHash</tt> contains the hash of the subject's public key, encoded as a SubjectPublicKeyInfo. The hash uses the CA's hash function (<xref target="certification-authorities"/>) and is computed over the SubjectPublicKeyInfo's DER <xref target="X.690"/> encoding.</t>
            </li>
          </ul>
          <t>Note the subject's public key algorithm is incorporated into both <tt>subjectPublicKeyAlgorithm</tt> and <tt>subjectPublicKeyInfoHash</tt>.</t>
          <t>MTCLogEntry is an extensible structure. Future documents <bcp14>MAY</bcp14> define new values for MTCLogEntryType or MTCLogEntryExtensionType, with corresponding semantics. See <xref target="certification-authority-cosigners"/> and <xref target="extensibility"/> for additional discussion.</t>
          <t>An MTCLogEntry's size <bcp14>MUST NOT</bcp14> exceed 65535 (2<sup>16</sup>-1) bytes. TBSCertificateLogEntry does not include signatures and hashes public keys, so post-quantum algorithms do not contribute to this size.</t>
        </section>
        <section anchor="publishing-logs">
          <name>Publishing Logs</name>
          <t>This protocol aims to enable monitors to detect misissued certificates by observing the issuance log. See <xref target="transparency"/>.</t>
          <t>This document does not prescribe a particular method of observing the issuance log. The access protocols do not affect certificate interoperability, and different applications could have different needs. For example, a PKI that authenticates public services might publicly serve issuance logs, while a PKI that authenticates a single organization's intranet services might keep the log private to the organization. Relying parties <bcp14>SHOULD</bcp14> 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>If a serving protocol supports serving only a portion of the log, relying party policies <bcp14>SHOULD</bcp14> include requirements on which portions to serve.</t>
          <t>For example, <xref target="MTC-TLOG"/> defines a profile for Merkle Tree Certificates that uses <xref target="TLOG-TILES"/>.</t>
        </section>
      </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 <bcp14>MUST</bcp14> 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 <bcp14>MAY</bcp14> 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 <bcp14>MAY</bcp14> 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 the public key, signature algorithm, and any additional statements made by the cosigner's signatures. If a single operator performs multiple cosigner roles in an ecosystem, each role <bcp14>MUST</bcp14> use a distinct cosigner ID and <bcp14>SHOULD</bcp14> use a distinct key.</t>
        <t>Following the principle of key separation <xref target="KeyReuse"/>, cosigner keys <bcp14>SHOULD NOT</bcp14> be used for purposes outside this document. Additional uses <bcp14>MAY</bcp14> be defined but <bcp14>MUST NOT</bcp14> overlap with the signature format defined in <xref target="signature-format"/>. See <xref target="signature-domain-separation"/> for additional discussion.</t>
        <t>A single cosigner, with a single cosigner ID and public key, <bcp14>MAY</bcp14> 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 <em>subtree signature</em> for a subtree in a log by signing a CosignedMessage, defined below using the TLS presentation language (<xref section="3" sectionFormat="of" target="RFC9846"/>):</t>
          <sourcecode type="tls-presentation"><![CDATA[
opaque HashValue[HASH_SIZE];

struct {
    uint8 label[12] = "subtree/v1\n\0";
    opaque cosigner_name<1..2^8-1>;
    uint64 timestamp;
    opaque log_origin<1..2^8-1>;
    uint64 start;
    uint64 end;
    HashValue subtree_hash;
} CosignedMessage;
]]></sourcecode>
          <t>This signature format is designed to be compatible with the ML-DSA-44 signature construction in <xref target="TLOG-COSIGNATURE"/>, but it supports signature algorithms other than ML-DSA-44 and tree hashes other than SHA-256.</t>
          <t><tt>label</tt> is a fixed prefix for domain separation. Its value <bcp14>MUST</bcp14> be the string <tt>subtree/v1</tt>, followed by a newline (U+000A), followed by a zero byte (U+0000).</t>
          <t><tt>cosigner_name</tt> and <tt>log_origin</tt> are computed from the cosigner ID and the issuance log's ID (<xref target="ca-ids"/>), respectively. They contain the concatenation of:</t>
          <ul spacing="normal">
            <li>
              <t>The 16-byte ASCII string <tt>oid/1.3.6.1.4.1.</tt></t>
            </li>
            <li>
              <t>The trust anchor ID's ASCII representation (<xref section="4" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>)</t>
            </li>
          </ul>
          <t>This is equivalent to the concatenation of:</t>
          <ul spacing="normal">
            <li>
              <t>The four-byte ASCII string <tt>oid/</tt></t>
            </li>
            <li>
              <t>The trust anchor ID as a full OID, in dotted decimal notation</t>
            </li>
          </ul>
          <t>For example, the trust anchor ID 32473.1 would be encoded as the ASCII string <tt>oid/1.3.6.1.4.1.32473.1</tt>.</t>
          <t><tt>start</tt> and <tt>end</tt> <bcp14>MUST</bcp14> define a valid subtree of the log, and <tt>subtree_hash</tt> <bcp14>MUST</bcp14> be the subtree's hash value in the cosigner's view of the log. See <xref target="definition-of-a-subtree"/>.</t>
          <t>If <tt>timestamp</tt> is non-zero, it <bcp14>MUST</bcp14> be the time that the signature was produced. This time is represented as seconds since the Epoch, as defined in Section 4.19 of Volume 1 of <xref target="POSIX"/>. Additionally, if <tt>timestamp</tt> is non-zero, the following <bcp14>MUST</bcp14> be true:</t>
          <ul spacing="normal">
            <li>
              <t><tt>start</tt> <bcp14>MUST</bcp14> be zero.</t>
            </li>
            <li>
              <t><tt>end</tt> <bcp14>MUST</bcp14> be the size of the largest consistent tree that the cosigner has observed for the log.</t>
            </li>
          </ul>
          <t><tt>timestamp</tt> <bcp14>MAY</bcp14> be zero, in which case no additional constraints are placed on <tt>start</tt> or <tt>end</tt> (beyond being a valid subtree), and no statement is made about the signing time or largest observed tree.</t>
        </section>
        <section anchor="signature-semantics">
          <name>Signature Semantics</name>
          <t>Before signing a subtree of some log, the cosigner <bcp14>MUST</bcp14> ensure that <tt>subtree_hash</tt> is consistent with its view of the log. Different cosigner roles will obtain this assurance differently. For example:</t>
          <ul spacing="normal">
            <li>
              <t>A cosigner <bcp14>MAY</bcp14> maintain a full copy of the log, e.g. if it's the log operator. The cosigner can then compute <tt>subtree_hash</tt> from this copy.</t>
            </li>
            <li>
              <t>A cosigner <bcp14>MAY</bcp14> maintain the hash of the largest consistent tree observed by the log. The cosigner can then check <tt>subtree_hash</tt> with a subtree consistency proof (<xref target="subtree-consistency-proofs"/>).</t>
            </li>
            <li>
              <t>A cosigner <bcp14>MAY</bcp14> maintain any other representation of the log which allows it to verify the consistency of the log.</t>
            </li>
          </ul>
          <t>In all cases, the cosigner <bcp14>MUST</bcp14> ensure that, as it updates its view of the log, the old and new views are consistent.</t>
          <t>When a cosigner signs a subtree, it is held separately responsible <em>both</em> for the subtree being consistent with its other signatures, <em>and</em> for the cosigner-specific additional statements. That is, if a cosigner signs an inconsistent subtree, it is held responsible for its additional statements on all entries in the inconsistent subtree, even if some other signed subtree exists that asserts different entries.</t>
          <t>Subtree signatures can be used to sign timestamped log checkpoints by using a non-zero <tt>timestamp</tt>. A signature with a non-zero <tt>timestamp</tt> asserts the complete state of the cosigner's view of the log at a given time. These signatures are not directly used in Merkle Tree Certificates (<xref target="certificate-format"/>), but cosigners <bcp14>MAY</bcp14> generate them, subject to the rules above, as part of other functions in a PKI, such as log serving or integrating an issuance log into a transparency ecosystem. For example, <xref target="TLOG-TILES"/> and <xref target="TLOG-WITNESS"/> use such signatures.</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 <bcp14>MUST</bcp14> deploy a new cosigner, with a new cosigner ID. Signature algorithms <bcp14>MUST</bcp14> fully specify the algorithm parameters, such as hash functions used. Signatures are computed over the CosignedMessage described in <xref target="signature-format"/>.</t>
          <t>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. Each CA <bcp14>MUST</bcp14> operate a CA cosigner whose cosigner ID is the same as its CA ID (<xref target="ca-ids"/>). A CA cosigner <bcp14>MUST NOT</bcp14> sign checkpoints or subtrees for logs not part of this CA instance.</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 <bcp14>MAY</bcp14> 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 <bcp14>MAY</bcp14> define <tt>type</tt> and <tt>extension_type</tt> values and the semantics of the data that they contain. A CA <bcp14>MUST NOT</bcp14> sign a subtree if it contains an entry with <tt>type</tt> or <tt>extension_type</tt> that it does not recognize. Doing so would certify that the CA has validated the information in some not-yet-defined format. <xref target="extensibility"/> further discusses security implications of such extensions.</t>
        <t>If the CA issues certificate revocation lists (CRLs) <xref target="RFC5280"/> or Online Certificate Status Protocol (OCSP) responses <xref target="RFC6960"/>, the CA's cosigner key <bcp14>MAY</bcp14> be used to directly sign TBSCertList or OCSP ResponseData structures, respectively, but only for this CA instance. Such uses remain subject to other X.509 constraints, such as the key usage extension, which are out of scope for this document. See <xref target="signature-domain-separation"/> for a discussion of domain separation.</t>
        <t>If the CA operator additionally operates a directly-signing X.509 CA, that CA key <bcp14>MUST</bcp14> be distinct from any Merkle Tree CA cosigner keys. In particular, a CA cosigner key <bcp14>MUST NOT</bcp14> be used to directly sign TBSCertificate structures. A CA cosigner key issues certificates by signing subtrees.</t>
      </section>
      <section anchor="representing-certification-authorities">
        <name>Representing Certification Authorities</name>
        <t>This section defines the X.509 Certificate <xref target="RFC5280"/> representation of a Merkle Tree CA. It identifies the CA cosigner (<xref target="certification-authority-cosigners"/>) and associated issuance logs. This information is encoded as follows:</t>
        <ul spacing="normal">
          <li>
            <t>The <tt>subject</tt> field <bcp14>MUST</bcp14> be the CA ID as a PKIX distinguished name, as described in <xref target="ca-ids"/>.</t>
          </li>
          <li>
            <t>The <tt>subjectPublicKeyInfo</tt> field <bcp14>MUST</bcp14> be the public key of the CA cosigner <xref target="certification-authority-cosigners"/>.</t>
          </li>
          <li>
            <t>The <tt>extensions</tt> field <bcp14>MUST</bcp14> contain a critical Merkle Tree CA extension. This is defined below.</t>
          </li>
          <li>
            <t>The subject key identifier extension (<xref section="4.2.1.2" sectionFormat="of" target="RFC5280"/>), if present, <bcp14>SHOULD</bcp14> be set to the CA ID <xref target="ca-ids"/>. The CA ID is encoded in its binary representation, as defined in <xref section="4" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>.</t>
          </li>
        </ul>
        <t>Other fields and extensions in <xref target="RFC5280"/> apply unmodified. In particular:</t>
        <ul spacing="normal">
          <li>
            <t>The key usage extension (<xref section="4.2.1.3" sectionFormat="of" target="RFC5280"/>) <bcp14>MUST</bcp14> be present and assert at least the <tt>keyCertSign</tt> bit.</t>
          </li>
          <li>
            <t>The basic constraints extension (<xref section="4.2.1.9" sectionFormat="of" target="RFC5280"/>) <bcp14>MUST</bcp14> be present and set the <tt>cA</tt> field to TRUE.</t>
          </li>
        </ul>
        <t>The Merkle Tree CA extension defines the remaining parameters specific to this protocol. It indicates that the subject of the certificate is a CA that issues Merkle Tree Certificates. If present, it <bcp14>MUST</bcp14> be marked as critical. The extension type identifies the Merkle Tree construction, and the contents define additional parameters of the CA cosigner.</t>
        <t>This document defines one extension type, id-pe-mtcCertificationAuthority-SHA256, which indicates hashing with SHA-256 <xref target="SHS"/>. Other documents <bcp14>MAY</bcp14> define corresponding extensions for other hash functions or new versions of the tree construction.</t>
        <sourcecode type="asn.1"><![CDATA[
id-pe-mtcCertificationAuthority-SHA256 OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) pe(1) TBD }

ext-mtcCertificationAuthority-SHA256 EXTENSION ::= {
    SYNTAX MTCCertificationAuthority
    IDENTIFIED BY id-pe-mtcCertificationAuthority-SHA256
    CRITICALITY TRUE
}

-- This is 2^48, the minimum possible serial number in this protocol.
mtcMinSerial INTEGER ::= 281474976710656

-- This is 2^64-1, the maximum possible serial number in this protocol.
mtcMaxSerial INTEGER ::= 18446744073709551615

MTCCertificationAuthority ::= SEQUENCE {
    sigAlg    AlgorithmIdentifier{SIGNATURE-ALGORITHM, {...}},
    minSerial INTEGER (mtcMinSerial..mtcMaxSerial),
    maxSerial INTEGER (mtcMinSerial..mtcMaxSerial)
}
]]></sourcecode>
        <t>For initial experimentation, early implementations of this design will use the OID 1.3.6.1.4.1.44363.47.4 instead of <tt>id-pe-mtcCertificationAuthority-SHA256</tt>. Cloudflare has kindly donated the 1.3.6.1.4.1.44363.47 OID arc for use in this document.</t>
        <t>The fields of an MTCCertificationAuthority structure are defined as follows:</t>
        <ul spacing="normal">
          <li>
            <t><tt>sigAlg</tt> is the CA cosigner's signature algorithm (<xref target="signature-algorithms"/>).</t>
          </li>
          <li>
            <t><tt>minSerial</tt> and <tt>maxSerial</tt> describe the minimum and maximum allowed serial numbers from this CA, respectively. See <xref target="revoked-ranges"/> for discussion on setting these values.</t>
          </li>
        </ul>
        <t>If this extension is present, the key described in <tt>subjectPublicKeyInfo</tt> is a CA cosigner key and subject to the usage restrictions described in <xref target="certification-authority-cosigners"/>. In particular, it <bcp14>MUST NOT</bcp14> be used to directly sign TBSCertificate structures.</t>
        <t>This extension indicates the subtree signature format defined in <xref target="signature-format"/>. If a later version of the protocol defines a new format, this <bcp14>SHOULD</bcp14> be represented in CA certificates with a new extension type.</t>
        <t>A CA certificate using this format <bcp14>SHOULD NOT</bcp14> be self-signed by the CA. Doing so would require writing the information in the issuance log. Instead, if used to represent a trust anchor, the certificate <bcp14>SHOULD</bcp14> be an unsigned certificate <xref target="RFC9925"/>.</t>
      </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.</t>
      <section anchor="certificate-inputs">
        <name>Certificate Inputs</name>
        <t>A Merkle Tree Certificate is constructed from the following inputs:</t>
        <ul spacing="normal">
          <li>
            <t>A TBSCertificateLogEntry (<xref target="log-entries"/>) contained in one of the CA's issuance logs (<xref target="issuance-logs"/>)</t>
          </li>
          <li>
            <t>A subject public key whose hash matches the TBSCertificateLogEntry</t>
          </li>
          <li>
            <t>The <tt>log_number</tt> and the zero-based entry <tt>index</tt> of that log entry within the issuance log, used to construct the certificate's <tt>serialNumber</tt> (<xref target="certificate-format"/>).</t>
          </li>
          <li>
            <t>An <tt>MTCProof</tt> (<xref target="certificate-format"/>) proving the entry's inclusion in a subtree, along with zero or more signatures (<xref target="cosigners"/>) over that subtree, which together satisfy relying party requirements (<xref target="trusted-cosigners"/>)</t>
          </li>
        </ul>
        <t>By varying the choice of subtree and signatures, there can be multiple ways to prove the entry is in the log, and thus certified by the CA. <xref target="certificate-format"/> defines how a certificate is constructed based on those choices. <xref target="standalone-certificates"/> and <xref target="landmark-relative-certificates"/> define two profiles of Merkle Tree Certificates, standalone certificates and landmark-relative certificates, and how to select the subtree and signatures for them.</t>
      </section>
      <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> <bcp14>MUST</bcp14> be equal to the corresponding fields of the TBSCertificateLogEntry. If any of <tt>issuerUniqueID</tt>, <tt>subjectUniqueID</tt>, or <tt>extensions</tt> is absent in the TBSCertificateLogEntry, the corresponding field <bcp14>MUST</bcp14> be absent in the TBSCertificate. Per <xref target="log-entries"/>, this means <tt>issuer</tt> <bcp14>MUST</bcp14> be the issuance log's CA ID as a PKIX distinguished name, as described in <xref target="ca-ids"/>.</t>
        <t>The TBSCertificate's <tt>serialNumber</tt> is constructed from the zero-based index of the TBSCertificateLogEntry in the log and the log's number (<xref target="issuance-logs"/>). The <tt>serialNumber</tt> <bcp14>MUST</bcp14> be equal to <tt>(log_number &lt;&lt; 48) | index</tt>. All serial numbers constructed in this way will be positive and at most 2<sup>64</sup>-1.</t>
        <t>The TBSCertificate's <tt>subjectPublicKeyInfo</tt> contains the specified public key. Its <tt>algorithm</tt> field <bcp14>MUST</bcp14> match the TBSCertificateLogEntry's <tt>subjectPublicKeyAlgorithm</tt>. Its hash <bcp14>MUST</bcp14> match the TBSCertificateLogEntry's <tt>subjectPublicKeyInfoHash</tt>.</t>
        <t>The TBSCertificate's <tt>signature</tt> and the Certificate's <tt>signatureAlgorithm</tt> <bcp14>MUST</bcp14> 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>. Cloudflare has kindly donated the 1.3.6.1.4.1.44363.47 OID arc for use in this document.</t>
        <t>The <tt>signatureValue</tt> contains an MTCProof structure, defined below using the TLS presentation language (<xref section="3" sectionFormat="of" target="RFC9846"/>):</t>
        <sourcecode type="tls-presentation"><![CDATA[
/* From Section 4 of draft-ietf-tls-trust-anchor-ids */
opaque TrustAnchorID<1..2^8-1>;

opaque HashValue[HASH_SIZE];

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

struct {
    MTCLogEntryExtension extensions<0..2^16-1>;
    uint48 start;
    uint48 end;
    HashValue inclusion_proof<0..2^16-1>;
    SubtreeSignature signatures<0..2^24-1>;
} MTCProof;
]]></sourcecode>
        <t><tt>extensions</tt> <bcp14>MUST</bcp14> contain the log entry's <tt>extensions</tt> value (<xref target="log-entries"/>).</t>
        <t><tt>start</tt> and <tt>end</tt> <bcp14>MUST</bcp14> contain the corresponding parameters of the chosen subtree. <tt>inclusion_proof</tt> <bcp14>MUST</bcp14> 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="4" 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"/>. The <tt>timestamp</tt> field used when computing the signature <bcp14>MUST</bcp14> be zero.</t>
        <t>Each element of the <tt>signatures</tt> field <bcp14>MUST</bcp14> have a unique <tt>cosigner_id</tt>. Elements <bcp14>MUST</bcp14> be ordered by <tt>cosigner_id</tt> (excluding length prefix) as follows:</t>
        <ul spacing="normal">
          <li>
            <t>Shorter byte strings are ordered before longer byte strings</t>
          </li>
          <li>
            <t>Byte strings of the same length are ordered lexicographically</t>
          </li>
        </ul>
        <t>An MTCProof parser <bcp14>MUST</bcp14> reject the input if there are duplicate <tt>cosigner_id</tt> values, or if they are not ordered correctly. This can be done by checking each <tt>cosigner_id</tt> value comes strictly after the previous one in the above order.</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 <bcp14>SHALL</bcp14> 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 <bcp14>SHALL</bcp14> become the last bit of the bit string.</t>
      </section>
      <section anchor="standalone-certificates">
        <name>Standalone Certificates</name>
        <t>A <em>standalone 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. Standalone 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 subtree cosignatures from external cosigners to meet relying party requirements (<xref target="trusted-cosigners"/>). Depending on the protocol for requesting subtree cosignatures (e.g. <xref target="TLOG-WITNESS"/> and <xref target="TLOG-MIRROR"/>), this step may require first requesting a checkpoint cosignature (<xref target="cosigners"/>) from each cosigner.</t>
          </li>
          <li>
            <t>For each log entry in the interval, the CA constructs a certificate (<xref target="certificate-format"/>) from the inputs in <xref target="certificate-inputs"/>, using the covering subtree and the subtree cosignatures collected in steps 3 and 4.</t>
          </li>
        </ol>
        <t>Step 4 is 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 <bcp14>MAY</bcp14> request signatures from a redundant set of cosigners and select the ones that complete first.</t>
        <t>This document does not place any requirements on how frequently this job runs. More frequent runs result in lower issuance delay, but higher signing overhead. It is <bcp14>RECOMMENDED</bcp14> 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>
        <t>This document does not prescribe the specific cosigner roles, or a particular protocol for requesting cosignatures. Protocols for cosigners can vary depending on the needs of that cosigner. Some example protocols are described in <xref target="TLOG-WITNESS"/> and <xref target="TLOG-MIRROR"/>. It is <bcp14>RECOMMENDED</bcp14> that the CA collect cosignatures for the authenticating party, but the authenticating party <bcp14>MAY</bcp14> collect additional cosignatures and add them to the certificate.</t>
      </section>
      <section anchor="landmark-relative-certificates">
        <name>Landmark-Relative Certificates</name>
        <t>A <em>landmark-relative 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. Landmark-relative 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 <bcp14>SHOULD</bcp14> deploy a corresponding standalone certificate alongside any landmark-relative 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="RFC9846"/>.</t>
        <section anchor="landmark-tree-sizes">
          <name>Landmark Tree Sizes</name>
          <t>A CA that issues landmark-relative certificates <bcp14>MUST</bcp14> additionally maintain a <em>landmark sequence</em>. A landmark sequence is a sequence of <em>landmarks</em>, defined below. Landmarks are used as a common point of reference across the ecosystem for optimizing certificates.</t>
          <t>Each landmark consists of:</t>
          <ul spacing="normal">
            <li>
              <t>A landmark number, used as an identifier for the landmark</t>
            </li>
            <li>
              <t>A tree size, which is the size of the tree at the time the landmark was allocated</t>
            </li>
            <li>
              <t>An expiration time, represented as seconds since the Epoch (Section 4.19 of Volume 1 of <xref target="POSIX"/>)</t>
            </li>
          </ul>
          <t>The landmark sequence is append-only, with landmarks numbered consecutively from zero. Landmark zero <bcp14>MUST</bcp14> have a tree size of zero and an expiration of zero seconds since the Epoch. For each subsequent landmark, the tree size <bcp14>MUST</bcp14> be greater than that of the previous landmark, and the expiry <bcp14>MUST</bcp14> be greater or equal to that of the previous landmark.</t>
          <t>Each landmark has two <em>landmark subtrees</em>. The landmark subtrees for landmark number <tt>L</tt> as determined follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>If <tt>L</tt> is zero, the landmark subtrees are <tt>[0, 0)</tt> and <tt>[0, 0)</tt>.</t>
            </li>
            <li>
              <t>Otherwise, let <tt>tree_size</tt> be landmark <tt>L</tt>'s tree size and <tt>prev_tree_size</tt> be that of landmark <tt>L - 1</tt>.</t>
            </li>
            <li>
              <t>The landmark subtrees are the two subtrees that cover <tt>[prev_tree_size, tree_size)</tt>, as described in <xref target="arbitrary-intervals"/>.</t>
            </li>
          </ol>
          <t>A landmark's expiration time <bcp14>MUST</bcp14> be greater or equal to the <tt>notAfter</tt> time of every TBSCertificateLogEntry whose index is less than the tree size. When allocating a landmark, CAs <bcp14>SHOULD</bcp14> set the expiration time to the current time plus the CA's maximum certificate lifetime.</t>
          <t>A landmark that is not yet expired is said to be <em>active</em>. Landmark zero is never active. At any time, a log's <em>active landmark subtrees</em> are the landmark subtrees of each currently active landmark. Active landmark subtrees are predistributed to the relying party as trusted subtrees, as described in <xref target="trusted-subtrees"/>.</t>
          <t>The above conditions imply that every unexpired entry in the log is either contained in some landmark subtree or was allocated sometime after the latest landmark.</t>
          <t>As the issuance log grows, CAs continuously allocate new landmarks. More frequent allocation reduces landmark-relative certificate delay, while less frequent allocation reduces the size of the relying party's predistributed state. As described in <xref target="trusted-subtrees"/>, relying parties maintain some upper bound on active landmarks per CA. CAs <bcp14>SHOULD</bcp14> allocate landmarks such that the number of active landmarks, across all their logs, is within the bound for supported relying parties. <xref target="allocating-landmarks"/> gives a <bcp14>RECOMMENDED</bcp14> procedure for allocating landmarks.</t>
          <t>Mistakes in landmark sequence allocation only impact availability, not security. That is, they will not cause the relying party to accept certificates for entries the CA did not certify. However, they might cause a relying party to reject some of the CA's otherwise valid landmark-relative certificates.</t>
        </section>
        <section anchor="allocating-landmarks">
          <name>Allocating Landmarks</name>
          <t>It is <bcp14>RECOMMENDED</bcp14> that landmarks be allocated using the following procedure:</t>
          <ol spacing="normal" type="1"><li>
              <t>Let <tt>max_cert_lifetime</tt> by some upper bound on the CA's certificate lifetime.</t>
            </li>
            <li>
              <t>Select some <tt>time_between_landmarks</tt> duration.</t>
            </li>
            <li>
              <t>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, run the following:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>If the current log's tree size is equal to the its landmark's tree size, do nothing.</t>
                </li>
                <li>
                  <t>Otherwise, append a landmark to the current log whose tree size is the current tree size and whose expiry is the current time plus <tt>max_cert_lifetime</tt>.</t>
                </li>
              </ol>
            </li>
          </ol>
          <t>This procedure ensures there are at most <tt>ceil(max_cert_lifetime / time_between_landmarks) + 1</tt> active landmarks across all of the CA's logs. For example, if <tt>max_cert_lifetime</tt> is 7 days and <tt>time_between_landmarks</tt> is one hour, there will be at most 169 active landmarks, or 338 active landmark subtrees. The relying party state is then 10,816 bytes with SHA-256.</t>
        </section>
        <section anchor="publishing-landmarks">
          <name>Publishing Landmarks</name>
          <t>The following format can be used to represent a CA's active landmarks. The format <bcp14>MUST</bcp14> contain the following sequence of lines. Each line <bcp14>MUST</bcp14> be terminated by a newline character (U+000A):</t>
          <ul spacing="normal">
            <li>
              <t>A header line consisting of a decimal integer, <tt>latest_landmark</tt>, with the landmark number of the CA's most recent landmark at the time of publishing. This value <bcp14>MUST</bcp14> be at most 2<sup>48</sup>-1.</t>
            </li>
            <li>
              <t>A sequence of <tt>num_active_landmarks + 1</tt> lines, where <tt>num_active_landmarks</tt> is the number of active landmarks at the time of publishing. Decoders <bcp14>MUST</bcp14> reject documents where there are greater than <tt>latest_landmark</tt> such lines. Numbered consecutively from zero, line <tt>i</tt> in this sequence consists of:  </t>
              <ul spacing="normal">
                <li>
                  <t>The tree size for landmark <tt>latest_landmark - i</tt> as a decimal integer. This value <bcp14>MUST</bcp14> be at most 2<sup>48</sup>-1.</t>
                </li>
                <li>
                  <t>A single space character (U+0020).</t>
                </li>
                <li>
                  <t>The expiration time for landmark <tt>latest_landmark - i</tt> as a decimal integer containing seconds since the Epoch (Section 4.19 of Volume 1 of <xref target="POSIX"/>).</t>
                </li>
              </ul>
            </li>
          </ul>
          <t>Tree sizes <bcp14>MUST</bcp14> be strictly monotonically decreasing, and expiration times <bcp14>MUST</bcp14> be monotonically decreasing. There <bcp14>MUST</bcp14> be at least one expiration time before the current time.</t>
          <t>Decoders <bcp14>MUST</bcp14> reject documents that do not strictly conform to the above requirements, including extraneous whitespace and the lack of an expired landmark. A decoder <bcp14>MAY</bcp14> process only a prefix of this document, provided there is at least one expired landmark to denote the end of the active landmarks.</t>
        </section>
        <section anchor="constructing-landmark-relative-certificates">
          <name>Constructing Landmark-Relative Certificates</name>
          <t>Given the inputs in <xref target="certificate-inputs"/> and the corresponding log's landmark sequence, a landmark-relative certificate is constructed as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Let <tt>idx</tt> be the entry index.</t>
            </li>
            <li>
              <t>Let <tt>L</tt> be the lowest numbered landmark whose tree size is strictly greater than <tt>idx</tt>. If no such landmark has been allocated yet, wait for one to be allocated. If the entry has already expired and historical landmark information is unavoidable, abort the procedure.</t>
            </li>
            <li>
              <t>Determine the <tt>L</tt>'s subtrees (<xref target="landmark-tree-sizes"/>) and select the unique one whose <tt>[start, end)</tt> interval contains <tt>idx</tt>.</t>
            </li>
            <li>
              <t>Construct a certificate (<xref target="certificate-format"/>) using the selected subtree and no signatures.</t>
            </li>
          </ol>
          <t>The procedure above is not specific to the CA. Any party holding a standalone certificate (<xref target="standalone-certificates"/>) can construct the corresponding landmark-relative certificate by recovering the certificate inputs from it and obtaining the landmark sequence and inclusion proof hashes from the issuance log.</t>
        </section>
      </section>
      <section anchor="size-estimates">
        <name>Size Estimates</name>
        <t>The inclusion proofs in standalone and landmark-relative 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 September 18th, 2026:</t>
        <ul spacing="normal">
          <li>
            <t><xref target="LetsEncrypt"/> reported around 682,000,000 active certificates for a single CA</t>
          </li>
          <li>
            <t><xref target="CloudflareRadar"/> reported around 2,900,000,000 unexpired certificates in CT logs, across all CAs</t>
          </li>
          <li>
            <t><xref target="CloudflareRadar"/> reported an issuance rate of around 591,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 5,400,000 certificates per hour and 23,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, standalone certificate subtrees will span around 3,000 certificates, leading to 12 hashes in the inclusion proof, or 384 bytes. Standalone certificates additionally must carry a sufficient set of signatures to meet relying party requirements.</t>
        <t>If a new landmark is allocated every hour, landmark-relative certificate subtrees will span around 5,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>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="relying-party-configuration">
        <name>Relying Party Configuration</name>
        <t>In order to accept certificates from a Merkle Tree CA, a relying party <bcp14>MUST</bcp14> be configured with:</t>
        <ul spacing="normal">
          <li>
            <t>The CA's ID (<xref target="ca-ids"/>)</t>
          </li>
          <li>
            <t>The CA's log hash algorithm, e.g. SHA-256</t>
          </li>
          <li>
            <t>The CA cosigner, and any other supported cosigners, as pairs of cosigner ID and public key</t>
          </li>
          <li>
            <t>A policy on which combinations of cosigners to accept in a certificate (<xref target="trusted-cosigners"/>)</t>
          </li>
          <li>
            <t>An optional list of trusted subtrees that are known to be consistent with the relying party's cosigner requirements (<xref target="trusted-subtrees"/>)</t>
          </li>
          <li>
            <t>A list of revoked ranges of serial numbers (<xref target="revoked-ranges"/>)</t>
          </li>
        </ul>
        <t>This information may be obtained from a CA certificate structure, defined in <xref target="representing-certification-authorities"/>:</t>
        <ul spacing="normal">
          <li>
            <t>The CA ID is determined from the certificate's subject.</t>
          </li>
          <li>
            <t>The log hash algorithm is determined from the type of the Merkle Tree CA extension.</t>
          </li>
          <li>
            <t>The CA cosigner is determined from the certificate's subject public key and Merkle Tree CA extension. The CA's cosigner ID is the same as its CA ID. The relying party incorporates this cosigner into its cosigner policy based on the guidance in <xref target="trusted-cosigners"/>.</t>
          </li>
          <li>
            <t>No trusted subtrees are directly represented by the CA certificate structure, but the relying party <bcp14>MAY</bcp14> incorporate trusted subtrees from out-of-band information.</t>
          </li>
          <li>
            <t>The revoked serial number ranges include the half-open ranges <tt>[0, minSerial)</tt> and <tt>[maxSerial+1, 2^64)</tt>, but the relying party <bcp14>MAY</bcp14> incorporate additional ranges from out-of-band information.</t>
          </li>
        </ul>
      </section>
      <section anchor="verifying-certificate-signatures">
        <name>Verifying Certificate Signatures</name>
        <t>When verifying the signature of 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 this 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"/>. If decoding fails, including if <tt>signatureValue</tt> is not a multiple of 8 bits or has extra data after the MTCProof, abort this process and fail verification.</t>
          </li>
          <li>
            <t>Let <tt>serial</tt> be the certificate's serial number. If <tt>serial</tt> is negative or greater than 2<sup>64</sup>-1, abort this process and fail verification.</t>
          </li>
          <li>
            <t>If <tt>serial</tt> is contained in one of the relying party's revoked ranges (<xref target="revoked-ranges"/>), abort this process and fail verification.</t>
          </li>
          <li>
            <t>Let <tt>index</tt> be the least significant 48 bits of <tt>serial</tt> and let <tt>log_number</tt> be <tt>serial &gt;&gt; 48</tt>. If <tt>log_number</tt> is zero, abort this process and fail verification.</t>
          </li>
          <li>
            <t>Let <tt>log_id</tt> be the log ID constructed from the CA ID in <tt>issuer</tt> and the <tt>log_number</tt> (<xref target="issuance-logs"/>).</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>subjectPublicKeyAlgorithm</tt> to the <tt>algorithm</tt> field of the <tt>subjectPublicKeyInfo</tt>.</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 an MTCLogEntry as follows:
            </t>
            <ol spacing="normal" type="1"><li>
                <t>Set <tt>type</tt> to <tt>tbs_cert_entry</tt>.</t>
              </li>
              <li>
                <t>Set <tt>extensions</tt> to the MTCProof's <tt>extensions</tt> value.</t>
              </li>
              <li>
                <t>Set <tt>tbs_cert_entry_data</tt> to the TBSCertificateLogEntry, encoded as described in <xref target="log-entries"/>.</t>
              </li>
            </ol>
          </li>
          <li>
            <t>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>log_number</tt>, <tt>start</tt>, and <tt>end</tt> match a trusted subtree (<xref target="trusted-subtrees"/>) for the CA, 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 <bcp14>MUST</bcp14> be ignored.  </t>
            <t>
Signatures are verified as described in <xref target="signature-format"/>. For each signature verification, the CosignedMessage structure is constructed as follows:  </t>
            <ol spacing="normal" type="1"><li>
                <t>Set the CosignedMessage's <tt>cosigner_name</tt> based on the cosigner ID as described in <xref target="signature-format"/>.</t>
              </li>
              <li>
                <t>Set the CosignedMessage's <tt>timestamp</tt> to zero.</t>
              </li>
              <li>
                <t>Set the CosignedMessage's <tt>log_origin</tt> based on <tt>log_id</tt> as described in <xref target="signature-format"/>.</t>
              </li>
              <li>
                <t>Set the CosignedMessage's <tt>start</tt> and <tt>end</tt> to the MTCProof's <tt>start</tt> and <tt>end</tt>, respectively.</t>
              </li>
              <li>
                <t>Set the CosignedMessage's <tt>subtree_hash</tt> to <tt>expected_subtree_hash</tt>.</t>
              </li>
            </ol>
          </li>
        </ol>
        <t>This procedure only replaces the signature verification portion of X.509 path validation. The relying party <bcp14>MUST</bcp14> continue to perform other checks, such as checking expiry.</t>
        <t>In this procedure, <tt>entry_hash</tt> can equivalently be computed in a single pass from the DER-encoded TBSCertificate, without storing the full TBSCertificateLogEntry or MTCLogEntry in memory:</t>
        <ol spacing="normal" type="1"><li>
            <t>Initialize a hash instance.</t>
          </li>
          <li>
            <t>Write the octet 0x00 to the hash. This is the domain separator for leaf nodes.</t>
          </li>
          <li>
            <t>Write the <tt>extensions</tt> field from the MTCProof to the hash.</t>
          </li>
          <li>
            <t>Write the big-endian, two-byte <tt>tbs_cert_entry</tt> value to the hash.</t>
          </li>
          <li>
            <t>Write the TBSCertificate's <tt>version</tt>, <tt>issuer</tt>, <tt>validity</tt>, and <tt>subject</tt> fields to the hash.</t>
          </li>
          <li>
            <t>Write the <tt>subjectPublicKeyInfo</tt>'s <tt>algorithm</tt> field to the hash.</t>
          </li>
          <li>
            <t>Write the octet 0x04 to the hash. This is an OCTET STRING identifier.</t>
          </li>
          <li>
            <t>Write the octet L to the hash, where L is the hash length. (This assumes L is at most 127.)</t>
          </li>
          <li>
            <t>Write H to the hash, where H is the hash of the entire <tt>subjectPublicKeyInfo</tt> field.</t>
          </li>
          <li>
            <t>Write the remainder of the TBSCertificate contents octets to the hash, starting just after the <tt>subjectPublicKeyInfo</tt> field.</t>
          </li>
          <li>
            <t>Finalize the hash and set <tt>entry_hash</tt> to the result.</t>
          </li>
        </ol>
        <t>This is possible because the structure in <xref target="log-entries"/> omits the TBSCertificateLogEntry's identifier and length octets.</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 <bcp14>MAY</bcp14> implement policies other than those described below, and <bcp14>MAY</bcp14> incorporate cosigners acting in roles not described in this document.</t>
        <t>In picking trusted cosigners, the relying party <bcp14>SHOULD</bcp14> 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 <bcp14>SHOULD</bcp14> ensure authenticity by requiring a signature from the CA cosigner key. This is analogous to the signature in a directly-signed X.509 certificate. If the relying party obtains CA information from a CA certificate, the CA cosigner key is determined as in <xref target="relying-party-configuration"/>.</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 refusing to publish some entries.</t>
        <t>To mitigate this, relying parties <bcp14>SHOULD</bcp14> ensure transparency by requiring a quorum of signatures from additional cosigners. At minimum, these cosigners <bcp14>SHOULD</bcp14> 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="revoked-ranges"/> discusses mitigations for this. Alternatively, a relying party <bcp14>MAY</bcp14> require that cosigners 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 <bcp14>MAY</bcp14> accept the same set of additional cosigners across CAs.</t>
        <t>In applications that do not enforce transparency requirements, a relying party <bcp14>MAY</bcp14> implement a policy that only checks for a signature from the CA cosigner. This fits the pattern of many existing X.509 applications, where CA information is determined directly from a CA certificate, with no additional out-of-band information. Unrecognized cosignatures are ignored, so such applications can interoperate with certificates issued for transparency-enforcing applications that require additional cosigners.</t>
        <t>Cosigner roles are extensible without changes to certificate verification itself. Future specifications and individual deployments <bcp14>MAY</bcp14> define other cosigner roles to incorporate in 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 <bcp14>MAY</bcp14> incorporate a periodically updated, predistributed list of trusted subtrees from the CA. This allows the relying party to accept landmark-relative certificates (<xref target="landmark-relative-certificates"/>) constructed against those subtrees.</t>
        <t>Each trusted subtree contains:</t>
        <ul spacing="normal">
          <li>
            <t>The log number of the containing log</t>
          </li>
          <li>
            <t>The <tt>start</tt> and <tt>end</tt> values that define the subtree</t>
          </li>
          <li>
            <t>The hash of the subtree</t>
          </li>
        </ul>
        <t>Trusted subtrees for a CA are determined by its active landmark subtrees, as described in <xref target="landmark-tree-sizes"/>. Before configuring the subtrees as trusted, the relying party <bcp14>MUST</bcp14> 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 criterion can be checked given:</t>
        <ul spacing="normal">
          <li>
            <t>Some <em>reference checkpoint</em> whose tree size is greater or equal to that of 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>If a relying party is unable to validate some active landmark, it <bcp14>MAY</bcp14> discard that landmark, along with all landmarks in the log newer than it, while still using the older active landmarks that it was able to validate. For example, suppose the active landmarks have tree sizes 200, 300, 400, and 500, and the relying party was unable to validate any reference checkpoint of size 500 or higher. If the relying party is able to validate a reference checkpoint of size 350, it <bcp14>MAY</bcp14> incorporate subtrees from the first two landmarks.</t>
        <t>To bound local state, the relying party <bcp14>SHOULD</bcp14> define some upper bound on the number of active landmarks accepted per CA. If the CA exceeds this bound, the relying party <bcp14>SHOULD</bcp14> similarly discard the newest active landmarks to meet its limit.</t>
        <t>This document does not prescribe how relying parties obtain trusted subtrees. A relying party <bcp14>MAY</bcp14>, 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 <bcp14>MAY</bcp14> trust the update service to perform these checks.</t>
        <t>The relying party <bcp14>SHOULD</bcp14> incorporate its trusted subtree configuration in application-protocol-specific certificate selection mechanisms, to allow an authenticating party to select a landmark-relative 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="RFC9846"/>.</t>
      </section>
      <section anchor="revoked-ranges">
        <name>Revoked Ranges</name>
        <t>For each supported Merkle Tree CA, the relying party maintains a list of revoked ranges of serial numbers. This can be used to revoke both ranges of entries in an issuance log and ranges of issuance logs, even if the contents are not known.</t>
        <t>When a relying party is first configured to trust an issuance log, it <bcp14>SHOULD</bcp14> be configured to revoke all serial numbers before the first available unexpired certificate at the time. This revocation <bcp14>SHOULD</bcp14> be periodically updated as entries expire. If using the format defined in <xref target="representing-certification-authorities"/>, this can be configured with the <tt>minSerial</tt> value.</t>
        <t>This revocation allows the rest of a PKI to disregard old entries, even if they are not known to be expired. In particular:</t>
        <ul spacing="normal">
          <li>
            <t>A relying party could permit a CA to skip serving old entries (see <xref target="publishing-logs"/>) if long-expired and revoked.</t>
          </li>
          <li>
            <t>Newly-established monitors can skip processing long-expired and revoked entries.</t>
          </li>
        </ul>
        <t>A relying party with transparency requirements additionally <bcp14>SHOULD</bcp14> revoke all log numbers above some threshold to bound monitoring overhead. If using the format defined in <xref target="representing-certification-authorities"/>, this can be configured with the <tt>maxSerial</tt> value. See <xref target="limiting-issuance-logs"/>.</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 complete CA removal.</t>
        <t>When a CA is found to be untrustworthy, relying parties <bcp14>SHOULD</bcp14> 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>
        <t>The revocation mechanism in this section is complementary to certificate-level revocation mechanisms. Because log entries are uniquely identified by their serial number and issuer, existing revocation mechanisms like CRLs <xref target="RFC5280"/> and OCSP <xref target="RFC6960"/> apply unchanged.</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 any 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 directly-signing X.509 CA</t>
        </li>
        <li>
          <t>Whether the authenticating party should send a standalone or landmark-relative 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 <xref section="4.5.1.2" sectionFormat="of" target="RFC9846"/>, incorporates both explicit relying-party-provided information in the ClientHello and CertificateRequest messages and implicit deployment-specific assumptions. This section describes a <bcp14>RECOMMENDED</bcp14> integration of Merkle Tree certificates into TLS trust anchor IDs (<xref target="I-D.ietf-tls-trust-anchor-ids"/>), but applications <bcp14>MAY</bcp14> use application-specific criteria in addition to, or instead of, this recommendation.</t>
      <t>Relying parties <bcp14>SHOULD NOT</bcp14> include Merkle Tree CAs in the <tt>certificate_authorities</tt> extension (<xref section="4.3.4" sectionFormat="of" target="RFC9846"/>). Doing so might inadvertently signal an unsupported landmark-relative certificate because they have the same <tt>issuer</tt> field as standalone certificates.</t>
      <section anchor="standalone-certificates-tls">
        <name>Standalone Certificates</name>
        <t>Authenticating and relying parties <bcp14>SHOULD</bcp14> use the <tt>trust_anchors</tt> extension to determine whether a standalone certificate would be acceptable. A standalone certificate has a trust anchor ID of the corresponding CA ID (<xref target="ca-ids"/>). This trust anchor ID is additionally contained in the trust anchor groups defined in <xref target="single-log-landmark-groups"/>.</t>
        <t>CA IDs <bcp14>MAY</bcp14> be incorporated into other trust anchor groups, following the guidance in <xref section="6" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>.</t>
        <t>[[TODO: Ideally we would negotiate cosigners. https://github.com/tlswg/tls-trust-anchor-ids/issues/54 has a sketch of how one might do this, though other designs are possible. Negotiating cosigners allows the ecosystem to manage cosigners efficiently, without needing to collect every possible cosignature and send them all at once. This is wasteful, particularly with post-quantum algorithms.]]</t>
        <t>A standalone certificate <bcp14>MAY</bcp14> 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>
      </section>
      <section anchor="landmark-relative-certificates-tls">
        <name>Landmark-Relative Certificates</name>
        <t>An authenticating party <bcp14>SHOULD NOT</bcp14> send a landmark-relative 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. This can be represented with the <tt>trust_anchor_negotiation</tt> property in a CertificatePropertyList (see <xref section="7.3" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>), or other local configuration.</t>
        <t>TLS implementations <bcp14>SHOULD</bcp14> use the <tt>trust_anchors</tt> extension to determine this. A landmark-relative certificate issued by a CA with ID <tt>caID</tt>, log number <tt>N</tt>, and constructed from landmark <tt>L</tt> has a trust anchor ID of <tt>{caID landmarks(1) N L}</tt>.</t>
        <t>For example, the trust anchor ID for landmark 42 of CA <tt>32473.100</tt> and log number <tt>8</tt> is <tt>32473.100.1.8.42</tt>.</t>
        <t>These trust anchor IDs are used when it is necessary to identify an individual landmark, e.g. as in the recovery mechanism described in <xref section="5.6" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>. To more efficiently express a relying party's complete landmark state, these IDs are contained in trust anchor groups defined in <xref target="single-log-landmark-groups"/>, which allow relying parties to express their landmark state with a single ID.</t>
        <t>If both a landmark-relative and a standalone certificate are usable, an authenticating party <bcp14>SHOULD</bcp14> preferentially use the landmark-relative certificate. A landmark-relative certificate asserts the same information as its standalone counterpart, but is expected to be smaller.</t>
        <section anchor="single-log-landmark-groups">
          <name>Single-Log Landmark Groups</name>
          <t>Relying parties support many landmarks per log at a time. To compactly represent this, each log ID implicitly defines a series of trust anchor groups (<xref section="6" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>) called <em>landmark groups</em>.</t>
          <t>For each Merkle Tree Certificates CA with ID <tt>caID</tt>, each log number <tt>N</tt>, and each landmark number <tt>L</tt>, the ID <tt>{caID landmarkGroups(2) N L}</tt> defines a landmark group. It contains the following trust anchor IDs:</t>
          <ul spacing="normal">
            <li>
              <t><tt>caID</tt> itself (see <xref target="standalone-certificates-tls"/>). This selects all standalone certificates.</t>
            </li>
            <li>
              <t><tt>{caID landmarks(1) N M}</tt> for all <tt>M</tt> from 0 to <tt>L</tt>, inclusive. This selects landmark-relative certificates from active landmarks up to <tt>L</tt>.</t>
            </li>
          </ul>
          <t>To support these groups in the authenticating party, CAs <bcp14>SHOULD</bcp14> configure certificates to match the following trust anchor groups (Sections <xref target="I-D.ietf-tls-trust-anchor-ids" section="5.3" sectionFormat="bare"/> and <xref target="I-D.ietf-tls-trust-anchor-ids" section="7.2" sectionFormat="bare"/> of <xref target="I-D.ietf-tls-trust-anchor-ids"/>):</t>
          <ul spacing="normal">
            <li>
              <t>A standalone certificate <bcp14>SHOULD</bcp14> include a trust anchor ID pattern of <tt>caID.2.{0-}.{0-}</tt>.</t>
            </li>
            <li>
              <t>A landmark-relative log number <tt>N</tt> and landmark <tt>L</tt> <bcp14>SHOULD</bcp14> include a trust anchor ID pattern of <tt>caID.2.N.{L-}</tt>.</t>
            </li>
          </ul>
          <t>For example, suppose a CA with ID <tt>32473.100</tt> issues a certificate in landmark 42 of log 8:</t>
          <ul spacing="normal">
            <li>
              <t>The standalone certificate has a trust anchor ID of <tt>32473.100</tt> and is contained in groups <tt>32473.100.2.{0-}.{0-}</tt>.</t>
            </li>
            <li>
              <t>The landmark-relative certificate has a trust anchor ID of <tt>32473.100.1.8.42</tt> and is contained in groups <tt>32473.100.2.8.{42-}</tt>.</t>
            </li>
          </ul>
          <t>A relying party whose latest trusted subtree (<xref target="trusted-subtrees"/>) in log <tt>N</tt> is landmark <tt>L</tt> <bcp14>SHOULD</bcp14> configure the <tt>trust_anchors</tt> extension to advertise the above landmark group. This signals support for both standalone certificates and supported landmarks. For example, a relying party which is up-to-date as of landmark 42 of log 8 of CA <tt>32473.100</tt> would send an ID of <tt>32473.100.2.8.42</tt>. This would signal the following certificates:</t>
          <ul spacing="normal">
            <li>
              <t>Any standalone certificate from <tt>32473.100</tt>, no matter the log or landmark number.</t>
            </li>
            <li>
              <t>Any landmark-relative certificate from <tt>32473.100</tt> from landmarks 23 through 42, inclusive, of log 8.</t>
            </li>
          </ul>
          <t>If this landmark information becomes too stale, such a relying party <bcp14>SHOULD</bcp14> switch to advertising just the CA ID. In the above example, this would be <tt>32473.100</tt>.</t>
        </section>
        <section anchor="timestamped-landmark-groups">
          <name>Timestamped Landmark Groups</name>
          <t>Landmark groups for a single CA, described above, allow relying parties to advertise one ID per supported CA. Depending on the number of trust anchors, this can be sufficient to efficiently represent relying party state. When needed, <xref section="6" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/> describes how PKIs can use trust anchor groups that span multiple CAs. This section defines a variation of the versioning construction described in <xref section="6.1" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>, as applied to landmarks.</t>
          <t>Trust anchor groups containing Merkle Tree CAs can represent landmarks with an OID component based on a predictable clock. Concretely, the family of groups is parameterized by:</t>
          <ul spacing="normal">
            <li>
              <t>A base OID arc <tt>base</tt></t>
            </li>
            <li>
              <t>A timestamp <tt>start_time</tt></t>
            </li>
            <li>
              <t>A time duration <tt>tick_duration</tt></t>
            </li>
          </ul>
          <t>Given non-negative integers <tt>V</tt> and <tt>T</tt>, the group <tt>base.V</tt> contains standalone certificates issued by some CA in version <tt>V</tt> of the group. The group <tt>base.V.T</tt> contains:</t>
          <ul spacing="normal">
            <li>
              <t>Standalone certificates issued by some CA in version <tt>V</tt> of the group.</t>
            </li>
            <li>
              <t>Landmark-relative certificates issued one of the above CAs, provided the landmark was active at time <tt>start_time + T * tick_duration</tt>.</t>
            </li>
          </ul>
          <t><tt>start_time</tt> <bcp14>SHOULD</bcp14> be set to sometime before the group is in use. <tt>tick_duration</tt> <bcp14>SHOULD</bcp14> be set near the expected time between landmarks in the group, e.g. one hour. This predictable cadence allows the CA to describe the trust anchor groups (<xref section="7.2" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>) for issued certificates without additional coordination. Concretely, if a CA was added in <tt>V_min</tt>, was removed in <tt>V_max + 1</tt>, and issues a certificate whose landmark was first active at time <tt>T_min</tt> and last active at time <tt>T_max</tt>:</t>
          <ul spacing="normal">
            <li>
              <t>The standalone certificate is contained in groups <tt>base.{V_min-V_max}</tt> and <tt>base.{V_min-V_max}.{0-}</tt>.</t>
            </li>
            <li>
              <t>The landmark-relative certificate is contained in groups <tt>base.{V_min-V_max}.{T_min-T_max}</tt></t>
            </li>
          </ul>
          <t>If the CA has not been removed in the latest version, <tt>V_max</tt> is infinity, similar to the construction described in <xref section="6.1" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>. <tt>T_min</tt> and <tt>T_max</tt> are measured based on <tt>start_time</tt> and <tt>tick_duration</tt> as described above.</t>
          <t>A relying party sets <tt>V</tt> based on its current trust anchors and <tt>T</tt> based on the age of its landmark information. If its landmarks are too stale, it sends <tt>base.V</tt> without any landmark timestamp.</t>
          <t>In some cases, the relying party's landmark information may only be partially up-to-date. The relying party, or its update service, may be unable to reach one CA in the group, e.g. due to a transient outage. This complicates timestamp-based strategies:</t>
          <ul spacing="normal">
            <li>
              <t>If the relying party uses an older timestamp, it will not signal its up-to-date state for the reachable CAs. This means a single unreachable CA can disrupt service for certificates issued by unrelated CAs.</t>
            </li>
            <li>
              <t>If the relying party uses a newer timestamp, the relying party may signal support for landmarks it does not have. This risks connection failures. If the unreachable CA issued recent landmark-relative certificates, those certificates will fail validation.</t>
            </li>
          </ul>
          <t>The relying party can mitigate this in a number of ways:</t>
          <ul spacing="normal">
            <li>
              <t>If the trust anchor group consists of CAs from the same operator, waiting until all CAs are reachable will be minimally disruptive.</t>
            </li>
            <li>
              <t>The relying party can opt to send the group with an older timestamp, combined with other, smaller groups at newer timestamps to better describe its state.</t>
            </li>
            <li>
              <t>A client relying party can send the newer timestamp and, in the event the unreachable CA did issue recent landmark-relative certificates, rely on the recovery mechanism described in <xref section="5.6" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/> to recover from any signaling failures.</t>
            </li>
          </ul>
        </section>
      </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>
      <section anchor="optional-certificates">
        <name>Optional Certificates</name>
        <t><xref section="7.4.2" sectionFormat="of" target="RFC8555"/> describes how an ACME server uses the "alternate" link relation <xref target="RFC8288"/> to serve multiple certificate chains for an ACME order. An ACME client might fetch all of them and deploy them in the authenticating party. Different relying parties need different chains, so the ACME client might reasonably treat any unavailable alternate as an error.</t>
        <t>This behavior is not ideal for a landmark-relative certificate, which is available asynchronously and is not intended to delay the corresponding standalone certificate. This section defines the "acme-optional-alternate" link relation. When serving a certificate, an ACME server <bcp14>MAY</bcp14> provide one or more link relation header fields of type "acme-optional-alternate". "acme-optional-alternate" identifies an alternate certificate chain, but one that is optional. Relying parties that accept the optional alternate are expected to also accept either the original certificate chain or chains served under the "alternate" link relation. If the certificate chain is not yet available, the "acme-optional-alternate" URL <bcp14>SHOULD</bcp14> serve an HTTP 202 (Accepted) response, with a Retry-After header (<xref section="10.2.3" sectionFormat="of" target="RFC9110"/>) estimating when it will become available.</t>
        <t>An ACME client <bcp14>MAY</bcp14> fetch these URLs to collect additional alternate certificate chains. If the resource is unavailable, the ACME client <bcp14>SHOULD NOT</bcp14> fail the overall transaction. If the resource returns an HTTP 202 (Accepted) response, the ACME client <bcp14>SHOULD</bcp14> retry the request later, according to the Retry-After header, but this process <bcp14>SHOULD</bcp14> be independent of deploying other chains in the ACME order. In particular, if deploying a new service, the ACME client <bcp14>SHOULD NOT</bcp14> block deployment on optional alternates.</t>
        <t>If renewing certificates, the ACME client <bcp14>MAY</bcp14> opt to wait for optional alternates to simplify certificate replacement, but only while the previous certificates remain valid.</t>
      </section>
      <section anchor="using-acme-with-merkle-tree-certificates">
        <name>Using ACME with Merkle Tree Certificates</name>
        <t>Standalone and landmark-relative certificates represent a single issuance event, so they are returned from the same order. When processing an order for a Merkle Tree certificate, the ACME server moves the order to the "valid" state after the standalone certificate is available. The order's certificate URL then serves the standalone certificate, constructed as described in <xref target="standalone-certificates"/>.</t>
        <t>The standalone certificate response <bcp14>SHOULD</bcp14> additionally carry an "acme-optional-alternate" URL for the landmark-relative certificate. The landmark-relative certificate will typically not yet be available, so it initially serves an HTTP 202 response, as described in <xref target="optional-certificates"/>. Once the next landmark is allocated, the ACME server constructs a landmark-relative certificate, as described in <xref target="landmark-relative-certificates"/>, and serves it from the "acme-optional-alternate" URL.</t>
        <t>When downloading either certificate (<xref section="7.4.2" sectionFormat="of" target="RFC8555"/>), ACME clients supporting Merkle Tree certificates <bcp14>SHOULD</bcp14> 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 <bcp14>SHOULD</bcp14> then respond with that content type to include a CertificatePropertyList.</t>
        <t>The CertificatePropertyList <bcp14>SHOULD</bcp14> include trust anchor ID information as described in <xref section="7.5" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>. <xref target="use-in-tls"/> describes the trust anchor ID assignments for standalone and landmark-relative certificates. At minimum, the ACME server <bcp14>SHOULD</bcp14> include:</t>
        <ul spacing="normal">
          <li>
            <t>A <tt>trust_anchor_id</tt> property with the trust anchor IDs described in <xref target="standalone-certificates-tls"/> and <xref target="landmark-relative-certificates-tls"/></t>
          </li>
          <li>
            <t>A <tt>trust_anchor_groups</tt> property with the information described in <xref target="single-log-landmark-groups"/></t>
          </li>
        </ul>
        <t>If the CA participates in other landmark groups, e.g. <xref target="timestamped-landmark-groups"/>, the ACME server <bcp14>SHOULD</bcp14> include the corresponding information in <tt>trust_anchor_groups</tt>.</t>
        <t>The ACME server <bcp14>SHOULD</bcp14> include a <tt>trust_anchor_negotiation</tt> property with the landmark-relative certificate. This indicates the landmark-relative certificate requires a trust anchor ID match to indicate that the relying party recognizes the landmark. The ACME server <bcp14>MAY</bcp14> include or omit <tt>trust_anchor_negotiation</tt> with the standalone certificate, based on the criteria described in Sections <xref target="I-D.ietf-tls-trust-anchor-ids" section="7.3" sectionFormat="bare"/> and <xref target="I-D.ietf-tls-trust-anchor-ids" section="7.5" sectionFormat="bare"/> of <xref target="I-D.ietf-tls-trust-anchor-ids"/>.</t>
      </section>
    </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 expect 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"/> (profiled for Merkle Tree Certificates in <xref target="MTC-TLOG"/>), 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. Costs are thus expected to scale with the CA's own issuance.</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>Explicit revocation of old entries (<xref target="revoked-ranges"/>) 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 a role comparable to 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 partial log serving. 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 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. 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 inexpensive to run, but does not guarantee durable logging. 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, larger quorums result in larger, more expensive standalone certificates. The cost of standalone certificates will depend on how frequently the landmark optimization occurs in a given PKI. Conversely, relying parties that require smaller quorums have smaller standalone 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 <bcp14>SHOULD</bcp14> check the checkpoints of all three. Otherwise, a malicious CA may send different split views to different cosigners. More generally, monitors <bcp14>SHOULD</bcp14> 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 <bcp14>MAY</bcp14> 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 does not serve long-expired entries. If some resources are unavailable, they may not be visible to monitors.</t>
        <t>As in CT, PKIs that deploy Merkle Tree certificates <bcp14>SHOULD</bcp14> establish availability policies. These policies <bcp14>SHOULD</bcp14> be 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 <bcp14>MAY</bcp14> permit CAs and mirrors to stop serving old, long-expired entries. If so, such policies <bcp14>SHOULD</bcp14>, at minimum, require CAs and mirrors to retain entries until they have been revoked in up-to-date relying parties. See <xref target="revoked-ranges"/> for details. This is analogous to the CT practice of temporal sharding <xref target="CHROME-CT"/>, except the issuance log remains compatible with older, unupdated relying parties.</t>
        <t>PKIs that require mirror cosignatures (<xref target="trusted-cosigners"/>) can impose minimal to no availability requirements on CAs without compromising transparency goals. If a CA never makes an entry available, mirrors will be unable to update. This will prevent relying parties from accepting the undisclosed entries. However, a CA that 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 <bcp14>SHOULD</bcp14> 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 <bcp14>SHOULD</bcp14> set availability requirements on CAs.</t>
        <t>In each of these cases, the serial numbers of unavailable entries are known. Availability failures can thus be mitigated by revocation, as described in <xref target="revoked-ranges"/>, 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 landmark-relative certificate will not be available until the next landmark is ready. From there, the landmark-relative certificate will not be available until relying parties receive new trusted subtrees.</t>
        <t>To maximize coverage of landmark-relative certificates, authenticating parties performing routine renewal <bcp14>SHOULD</bcp14> request a new Merkle Tree certificate before the previous Merkle Tree certificate expires. Renewing around 75% of the way through the previous certificate's lifetime is <bcp14>RECOMMENDED</bcp14>. Authenticating parties additionally <bcp14>SHOULD</bcp14> 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 <bcp14>SHOULD</bcp14> immediately discard the old key and request a standalone certificate and the revocation of the previous certificate. This will interrupt the size optimization until the new landmark-relative certificate is available and relying parties are updated.</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 their 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. gated on the recovery flow, 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 standalone 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 landmark-relative certificates, the cosigner requirements are checked ahead of time, when the trusted subtrees are predistributed (<xref target="trusted-subtrees"/>).</t>
          </li>
        </ul>
        <t>Given a subtree hash computed over entries that the CA certified, it must be computationally infeasible to construct an entry not on this list, and an inclusion proof, such that inclusion proof verification succeeds. This requires using a collision-resistant hash in the Merkle Tree construction.</t>
        <t>The subject public key is itself also hashed before incorporating into the log. This hash depends on second-preimage resistance. To authorize the wrong public key for some existing log entry (e.g. one that describes a target's identity), an attacker must find some other public key with the same hash. While an attacker able to compute collisions might find two public keys with the same hash, that hash will not be in any existing log entry. The attacker would need to be authorized to request certification of a new entry with this hash. Such an attacker could only certify colliding pairs of public keys for its own identities.</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. 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 range of inconsistent serials (<xref target="revoked-ranges"/>), 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. The impact depends on the relying party's cosigner policy:</t>
        <ul spacing="normal">
          <li>
            <t>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.</t>
          </li>
          <li>
            <t>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. This is sufficient to determine the serial number, so relying parties can then react by revoking the undisclosed entries (<xref target="revoked-ranges"/>), and likely removing the CA.</t>
          </li>
        </ul>
        <section anchor="log-failures">
          <name>Log Failures</name>
          <t>Merkle Tree Certificates introduce additional state to PKI deployments and thus new kinds of operational failures. CAs are required to only sign subtree hashes that are consistent with a single append-only view of each issuance log. A CA might violate this as a result of operational failures. For example:</t>
          <ul spacing="normal">
            <li>
              <t>A CA loses some state and signs subtree hashes from two inconsistent copies of the log</t>
            </li>
            <li>
              <t>A CA miscalculates some hash and signs a subtree hash that cannot be computed from some underlying sequence of entries</t>
            </li>
          </ul>
          <t>As described in <xref target="transparency"/>, PKIs can use additional cosigners to provide transparency guarantees even in the face of such CA violations. In doing so, individual cosigners may be locked to only one of two views of the log or unable to sign further checkpoints because some hash's preimage is unknown. It may then no longer be possible to add entries to the log that are trusted by existing relying parties.</t>
          <t>Whether by accident or compromise, these violations are ultimately CA failures. However, it is useful for the CA instance to remain functional during and after incident management:</t>
          <ul spacing="normal">
            <li>
              <t>While the incident is diagnosed, authenticating parties may still need new certificates.</t>
            </li>
            <li>
              <t>If relying parties consider the CA operator and the CA instance still trustworthy, repairing the incident without changing the CA requires less overhead.</t>
            </li>
            <li>
              <t>If relying parties consider either the CA operator or the CA instance no longer trustworthy and in need of replacement, the CA may still be needed to serve older, unupdated relying parties.</t>
            </li>
          </ul>
          <t>This is mitigated by a CA instance consisting of a series of issuance logs (<xref target="issuance-logs"/>). After a log failure, the CA <bcp14>SHOULD</bcp14> increment its current issuance log to restore availability. Both the underlying log failure and the use of a new issuance log will be visible to monitors and <bcp14>SHOULD</bcp14> be treated as a PKI incident. Such PKI incidents can be handled by some combination of:</t>
          <ul spacing="normal">
            <li>
              <t>Revoking the diverging log indices (<xref target="revoked-ranges"/>)</t>
            </li>
            <li>
              <t>Reevaluating trusted CAs and, if necessary, removing the old CA instance and switching to a new CA instance</t>
            </li>
          </ul>
          <t>In the latter case, the CA operator <bcp14>MAY</bcp14> continue to operate the removed CA instance if, for example, there remain unupdated relying parties that require it.</t>
        </section>
        <section anchor="limiting-issuance-logs">
          <name>Limiting Issuance Logs</name>
          <t>While multiple issuance logs help mitigate log failures, as described in <xref target="log-failures"/>, they introduce transparency risks. If a CA violates the requirement to only use one issuance log at a time, it might add an entry in some far future log number. To be accepted in transparency-enforcing relying parties, the log state must still be cosigned. However, monitors may not know which log numbers to monitor.</t>
          <t>PKIs with transparency requirements <bcp14>SHOULD</bcp14> mitigate this by only accepting a limited range of log numbers in relying parties, transparency cosigners, or both. This limit <bcp14>MAY</bcp14> be set to a fixed value or a rolling value that is updated whenever the CA switches its current log. Fixed values require committing to a limit of recoverable log failures over the lifetime of a CA.</t>
          <t>Log number limits in relying parties can be implemented by revoking all serial numbers above some threshold. (See <xref target="revoked-ranges"/>.) If using the format described in <xref target="representing-certification-authorities"/>, this can be implemented with the <tt>maxSerial</tt> field.</t>
        </section>
      </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 signed checkpoint may be 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 subtree signature is a binding assertion by the CA that it has certified every entry in the subtree. 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 signed checkpoint 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="extensibility">
        <name>Extensibility</name>
        <t>MTCLogEntry (<xref target="log-entries"/>) contains several extension points:</t>
        <ul spacing="normal">
          <li>
            <t>New X.509 extensions can be added to TBSCertificateLogEntry.</t>
          </li>
          <li>
            <t>New MTCLogEntryType values define new formats for the entry contents.</t>
          </li>
          <li>
            <t>New MTCLogEntryExtensionType values define new entry extension fields.</t>
          </li>
        </ul>
        <t>X.509 extensions apply to Merkle Tree Certificates without any modifications. The two entry-level extension points are new to this protocol. Older CAs, cosigners, relying parties, and monitors may encounter unrecognized entries:</t>
        <t>Different cosigner roles interact with extensions differently. Some roles, e.g. <xref target="TLOG-MIRROR"/> and <xref target="TLOG-WITNESS"/>, do not interpret entry contents. Unrecognized extensions do not impact these roles. Other roles, such as CA cosigners, have semantics that depend on the entry contents. If a cosigner role interprets log entry contents, it <bcp14>MUST</bcp14> define how it interacts with unrecognized types and extensions.</t>
        <t><xref target="certification-authority-cosigners"/> forbids 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 CA can never sign an unrecognized X.509 extension.</t>
        <t>Unrecognized entry types do not impact older relying parties. In <xref target="verifying-certificate-signatures"/>, the relying party constructs the MTCLogEntry 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>However, unrecognized entry extensions will be ignored by relying parties, analogously to a non-critical X.509 extension. Entry extensions thus <bcp14>SHOULD</bcp14> be defined so that this is safe.</t>
        <t>If a monitor observes an entry with unknown type or entry extension, 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 <bcp14>SHOULD</bcp14> 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.5.1" sectionFormat="of" target="RFC9846"/>. 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>When 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 <bcp14>MUST</bcp14> 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 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 an MTCLogEntry 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 are 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 an 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 <bcp14>MUST</bcp14> instead use the TBSCertificate, or some portion of it, for Merkle Tree Certificates.</t>
      </section>
      <section anchor="revocation">
        <name>Revocation</name>
        <t>This document does not define a new certificate-level revocation mechanism. Existing mechanisms like CRLs and OCSP apply unchanged to Merkle Tree certificates. The sequential serial numbers assigned by issuance logs may enable future improvements to revocation, but such work is out of scope for this document.</t>
      </section>
      <section anchor="signature-domain-separation">
        <name>Signature Domain Separation</name>
        <t>The signature format defined in <xref target="signature-format"/> includes a fixed label prefix to ensure domain separation. Provided other uses of the same key use a non-overlapping prefix, signatures in one context cannot be substituted for those in another.</t>
        <t><xref target="certification-authority-cosigners"/> permits a CA cosigner key to be used to sign CRLs and OCSP responses. These signatures do not include a domain separation prefix. Instead, X.509 relies on an undocumented assumption that the TBSCertificate, TBSCertList, and OCSP ResponseData structures do not overlap at the level of individual ASN.1 fields.</t>
        <t>These ASN.1 structures all begin with a SEQUENCE tag, which is encoded in DER as 0x30 or the ASCII digit "0". The domain separation label used in <xref target="signature-format"/>, <tt>subtree/v1\n\0</tt>, does not begin with "0", so their inputs do not overlap. More generally, this label is not a prefix of any DER or BER encoding.</t>
        <t>Domain separation analysis based on the structures themselves is fragile, particularly when individual ASN.1 fields must be analyzed. This document depends on a structure-level analysis for CRLs and OCSP responses due to how these legacy protocols were defined. Future uses of the key <bcp14>SHOULD</bcp14> use a more robust mechanism, namely a fixed label prefix or a context string parameter if the signature scheme supports it.</t>
      </section>
      <section anchor="subordinate-certification-authorities">
        <name>Subordinate Certification Authorities</name>
        <t>Merkle Tree Certificates' transparency properties only apply to certificates directly issued by the CA, not certification paths. The CA might issue a certificate that describes an unconstrained, subordinate, non-MTC CA. Certificates issued by the subordinate CA would not be visible in the MTC CA's issuance log and thus may not be visible to monitors. However, the subordinate CA certificate that enables this bypass will still be visible in the issuance logs.</t>
        <t>Although the scope is larger, this scenario is similar to an unauthorized end-entity certificate and can be handled analogously:</t>
        <t>Relying parties with transparency requirements <bcp14>SHOULD</bcp14> define policy requirements on trusted CAs that prevent these bypasses, with any violation treated as an unauthorized certificate. For example, a relying party might require that all subordinate CAs have name constraints (<xref section="4.2.1.10" sectionFormat="of" target="RFC5280"/>) or forbid subordinate CAs entirely. In addition to holding CAs responsible for meeting these policies, relying parties <bcp14>SHOULD</bcp14> programmatically enforce these policies as part of certification path validation.</t>
        <t>Monitors <bcp14>SHOULD</bcp14> monitor for adherence to applicable policies as part of monitoring for unauthorized certificates. For example, a monitor that looks for entries covering <tt>example.com</tt> <bcp14>SHOULD</bcp14> look for either a subject alternative name (<xref section="4.2.1.6" sectionFormat="of" target="RFC5280"/>) of <tt>example.com</tt> or a basic constraints (<xref section="4.2.1.9" sectionFormat="of" target="RFC5280"/>) extension with the cA boolean set to true.</t>
        <t>It is not sufficient to constrain the MTC CA with a path length constraint (<xref section="4.2.1.9" sectionFormat="of" target="RFC5280"/>) of zero. Self-issued certificates do not contribute to path length constraints, so such an MTC CA might still issue CA certificates with the same name as itself.</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="certificate-extension">
        <name>Certificate Extension</name>
        <t>IANA is requested to add the following entry to the "SMI Security for PKIX Certificate Extension" 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-pe-mtcCertificationAuthority-SHA256</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="RFC9925"/>:</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 anchor="link-relation-type">
        <name>Link Relation Type</name>
        <t>IANA is requested to add the following entry to the "Link Relation Types" registry <xref target="RFC8288"/>:</t>
        <dl>
          <dt>Relation Name:</dt>
          <dd>
            <t>acme-optional-alternate</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>Refers to an optional alternate certificate chain, which may not be available immediately. Relying parties that accept the alternate are expected to also accept the original certificate, so it is not an error if the alternate is unavailable.</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>[this-RFC], <xref target="optional-certificates"/></t>
          </dd>
        </dl>
      </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" target="https://www.itu.int/rec/T-REC-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" value="8825-1:2021"/>
        </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="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="14" month="September" year="2026"/>
            <abstract>
              <t>   This document defines the TLS Trust Anchors extension, a mechanism
   for a TLS client or server to select a certificate to present based
   on the peer's trusted certification authorities.  It describes
   certification authorities more succinctly than the TLS Certificate
   Authorities extension.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-trust-anchor-ids-05"/>
        </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="RFC9846">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="July" year="2026"/>
            <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 obsoletes RFC 8446, which specified TLS 1.3. This document obsoletes RFC 5246 (specifying TLS 1.2) and RFCs 5077, 6961, 7627, and 8422, all of which pertain to TLS 1.2 or earlier, and updates RFCs 5705 and 6066. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9846"/>
          <seriesInfo name="DOI" value="10.17487/RFC9846"/>
        </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="POSIX">
          <front>
            <title>IEEE/Open Group Standard for Information Technology--Portable Operating System Interface (POSIX™) Base Specifications, Issue 8</title>
            <author>
              <organization/>
            </author>
            <date month="June" year="2024"/>
          </front>
          <seriesInfo name="DOI" value="10.1109/ieeestd.2024.10555529"/>
          <seriesInfo name="ISBN" value="[&quot;9798855707939&quot;]"/>
          <refcontent>IEEE</refcontent>
        </reference>
        <reference anchor="RFC6960">
          <front>
            <title>X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP</title>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="M. Myers" initials="M." surname="Myers"/>
            <author fullname="R. Ankney" initials="R." surname="Ankney"/>
            <author fullname="A. Malpani" initials="A." surname="Malpani"/>
            <author fullname="S. Galperin" initials="S." surname="Galperin"/>
            <author fullname="C. Adams" initials="C." surname="Adams"/>
            <date month="June" year="2013"/>
            <abstract>
              <t>This document specifies a protocol useful in determining the current status of a digital certificate without requiring Certificate Revocation Lists (CRLs). Additional mechanisms addressing PKIX operational requirements are specified in separate documents. This document obsoletes RFCs 2560 and 6277. It also updates RFC 5912.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6960"/>
          <seriesInfo name="DOI" value="10.17487/RFC6960"/>
        </reference>
        <reference anchor="RFC9925">
          <front>
            <title>Unsigned X.509 Certificates</title>
            <author fullname="D. Benjamin" initials="D." surname="Benjamin"/>
            <date month="February" year="2026"/>
            <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="RFC" value="9925"/>
          <seriesInfo name="DOI" value="10.17487/RFC9925"/>
        </reference>
        <reference anchor="RFC8288">
          <front>
            <title>Web Linking</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="October" year="2017"/>
            <abstract>
              <t>This specification defines a model for the relationships between resources on the Web ("links") and the type of those relationships ("link relation types").</t>
              <t>It also defines the serialisation of such links in HTTP headers with the Link header field.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8288"/>
          <seriesInfo name="DOI" value="10.17487/RFC8288"/>
        </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>
      </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="2026" month="September" day="18"/>
          </front>
        </reference>
        <reference anchor="CloudflareRadar" target="https://radar.cloudflare.com/certificate-transparency">
          <front>
            <title>Cloudflare Radar Certificate Transparency</title>
            <author>
              <organization>Cloudflare, Inc.</organization>
            </author>
            <date year="2026" month="September" day="18"/>
          </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="KeyReuse" target="https://eprint.iacr.org/2019/519">
          <front>
            <title>Security in the Presence of Key Reuse: Context-Separable Interfaces and their Applications</title>
            <author initials="C." surname="Patton" fullname="Christopher Patton">
              <organization/>
            </author>
            <author initials="T." surname="Shrimpton" fullname="Thomas Shrimpton">
              <organization/>
            </author>
            <date year="2019"/>
          </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="MTC-TLOG" target="https://c2sp.org/mtc-tlog">
          <front>
            <title>Merkle Tree Certificates With Tiled Transparency Logs</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2026" month="July"/>
          </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-COSIGNATURE" target="https://c2sp.org/tlog-cosignature">
          <front>
            <title>Transparency Log Cosignatures</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2026" month="April"/>
          </front>
        </reference>
        <reference anchor="Accumulated" target="https://words.filippo.io/accumulated/">
          <front>
            <title>Accumulated Test Vectors</title>
            <author initials="F." surname="Valsorda" fullname="Filippo Valsorda">
              <organization/>
            </author>
            <date year="2024" month="October"/>
          </front>
        </reference>
        <reference anchor="LargeInclusionProofs" target="https://github.com/ietf-plants-wg/merkle-tree-certs/tree/main/demo/large_inclusion_proofs.txt">
          <front>
            <title>Large Inclusion Proof Test Vectors</title>
            <author>
              <organization>IETF</organization>
            </author>
            <date year="2026" month="August"/>
          </front>
        </reference>
        <reference anchor="LargeConsistencyProofs" target="https://github.com/ietf-plants-wg/merkle-tree-certs/tree/main/demo/large_consistency_proofs.txt">
          <front>
            <title>Large Consistency Proof Test Vectors</title>
            <author>
              <organization>IETF</organization>
            </author>
            <date year="2026" month="August"/>
          </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="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="RFC4514">
          <front>
            <title>Lightweight Directory Access Protocol (LDAP): String Representation of Distinguished Names</title>
            <author fullname="K. Zeilenga" initials="K." role="editor" surname="Zeilenga"/>
            <date month="June" year="2006"/>
            <abstract>
              <t>The X.500 Directory uses distinguished names (DNs) as primary keys to entries in the directory. This document defines the string representation used in the Lightweight Directory Access Protocol (LDAP) to transfer distinguished names. The string representation is designed to give a clean representation of commonly used distinguished names, while being able to represent any distinguished name. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4514"/>
          <seriesInfo name="DOI" value="10.17487/RFC4514"/>
        </reference>
        <reference anchor="RFC6973">
          <front>
            <title>Privacy Considerations for Internet Protocols</title>
            <author fullname="A. Cooper" initials="A." surname="Cooper"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="J. Peterson" initials="J." surname="Peterson"/>
            <author fullname="J. Morris" initials="J." surname="Morris"/>
            <author fullname="M. Hansen" initials="M." surname="Hansen"/>
            <author fullname="R. Smith" initials="R." surname="Smith"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document offers guidance for developing privacy considerations for inclusion in protocol specifications. It aims to make designers, implementers, and users of Internet protocols aware of privacy-related design choices. It suggests that whether any individual RFC warrants a specific privacy considerations section will depend on the document's content.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6973"/>
          <seriesInfo name="DOI" value="10.17487/RFC6973"/>
        </reference>
        <reference anchor="RFC7299">
          <front>
            <title>Object Identifier Registry for the PKIX Working Group</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="July" year="2014"/>
            <abstract>
              <t>When the Public-Key Infrastructure using X.509 (PKIX) Working Group was chartered, an object identifier arc was allocated by IANA for use by that working group. This document describes the object identifiers that were assigned in that arc, returns control of that arc to IANA, and establishes IANA allocation policies for any future assignments within that arc.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7299"/>
          <seriesInfo name="DOI" value="10.17487/RFC7299"/>
        </reference>
      </references>
    </references>
    <?line 2026?>

<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, DIGEST-ALGORITHM, AlgorithmIdentifier{},
  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) }
  Extensions{}, 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) }
  CertExtensions
  FROM PKIX1Implicit-2009 -- in [RFC5912]
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-pkix1-implicit-02(59) }
  Version, Name, Validity, UniqueIdentifier, PublicKeyAlgorithms
  FROM PKIX1Explicit-2009 -- in [RFC5912]
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-pkix1-explicit-02(51) } ;

TBSCertificateLogEntry ::= SEQUENCE {
    version               [0] EXPLICIT Version DEFAULT v1,
    issuer                    Name,
    validity                  Validity,
    subject                   Name,
    subjectPublicKeyAlgorithm AlgorithmIdentifier{PUBLIC-KEY,
                                  {PublicKeyAlgorithms}},
    subjectPublicKeyInfoHash  OCTET STRING,
    issuerUniqueID        [1] IMPLICIT UniqueIdentifier OPTIONAL,
    subjectUniqueID       [2] IMPLICIT UniqueIdentifier OPTIONAL,
    extensions            [3] EXPLICIT Extensions{{CertExtensions}}
                                           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 RELATIVE-OID
    IDENTIFIED BY id-rdna-trustAnchorID
}

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

ext-mtcCertificationAuthority-SHA256 EXTENSION ::= {
    SYNTAX MTCCertificationAuthority
    IDENTIFIED BY id-pe-mtcCertificationAuthority-SHA256
    CRITICALITY TRUE
}

-- This is 2^48, the minimum possible serial number in this protocol.
mtcMinSerial INTEGER ::= 281474976710656

-- This is 2^64-1, the maximum possible serial number in this protocol.
mtcMaxSerial INTEGER ::= 18446744073709551615

MTCCertificationAuthority ::= SEQUENCE {
    sigAlg    AlgorithmIdentifier{SIGNATURE-ALGORITHM, {...}},
    minSerial INTEGER (mtcMinSerial..mtcMaxSerial),
    maxSerial INTEGER (mtcMinSerial..mtcMaxSerial)
}

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 implementers 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 a 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 from 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 left 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="subtrees-explain">
        <name>Subtrees</name>
        <t>Given a list of elements and Merkle Tree over them, it is possible to construct a smaller Merkle Tree over any interval of elements. However, those smaller trees may not have the same structure as the original tree.</t>
        <t><xref target="fig-misaligned-tree"/> shows a Merkle Tree of size 8, and a tree built over elements <tt>[1, 5)</tt>. When <tt>[1, 5)</tt> is considered as an independent, 4-element sequence, it does not align with the portion of the overall tree that covers <tt>[1, 5)</tt>. The two trees do not share any intermediate nodes. This prevents constructing subtree consistency proofs (<xref target="subtree-consistency-proofs"/>).</t>
        <figure anchor="fig-misaligned-tree">
          <name>An example misaligned tree</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="480" width="328" viewBox="0 0 328 480" 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 40,368 L 40,400" fill="none" stroke="black"/>
                <path d="M 40,432 L 40,464" 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 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 88,224 L 88,256" fill="none" stroke="black"/>
                <path d="M 88,368 L 88,400" fill="none" stroke="black"/>
                <path d="M 88,432 L 88,464" 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,432 L 104,464" 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 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,304 L 136,336" fill="none" stroke="black"/>
                <path d="M 136,432 L 136,464" fill="none" stroke="black"/>
                <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                <path d="M 152,368 L 152,400" fill="none" stroke="black"/>
                <path d="M 152,432 L 152,464" 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"/>
                <path d="M 64,304 L 136,304" fill="none" stroke="black"/>
                <path d="M 64,336 L 136,336" fill="none" stroke="black"/>
                <path d="M 40,368 L 88,368" fill="none" stroke="black"/>
                <path d="M 104,368 L 152,368" fill="none" stroke="black"/>
                <path d="M 40,400 L 88,400" fill="none" stroke="black"/>
                <path d="M 104,400 L 152,400" fill="none" stroke="black"/>
                <path d="M 40,432 L 56,432" fill="none" stroke="black"/>
                <path d="M 72,432 L 88,432" fill="none" stroke="black"/>
                <path d="M 104,432 L 120,432" fill="none" stroke="black"/>
                <path d="M 136,432 L 152,432" fill="none" stroke="black"/>
                <path d="M 40,464 L 56,464" fill="none" stroke="black"/>
                <path d="M 72,464 L 88,464" fill="none" stroke="black"/>
                <path d="M 104,464 L 120,464" fill="none" stroke="black"/>
                <path d="M 136,464 L 152,464" 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>
                  <text x="88" y="324">[1,</text>
                  <text x="116" y="324">5)</text>
                  <text x="288" y="324">level</text>
                  <text x="320" y="324">2</text>
                  <text x="72" y="356">/</text>
                  <text x="128" y="356">\</text>
                  <text x="64" y="388">[1,3)</text>
                  <text x="128" y="388">[3,5)</text>
                  <text x="288" y="388">level</text>
                  <text x="320" y="388">1</text>
                  <text x="56" y="420">/</text>
                  <text x="72" y="420">\</text>
                  <text x="120" y="420">/</text>
                  <text x="136" y="420">\</text>
                  <text x="48" y="452">1</text>
                  <text x="80" y="452">2</text>
                  <text x="112" y="452">3</text>
                  <text x="144" y="452">4</text>
                  <text x="288" y="452">level</text>
                  <text x="320" y="452">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
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+


       +--------+
       | [1, 5) |                level 2
       +--------+
        /      \
    +-----+ +-----+
    |[1,3)| |[3,5)|              level 1
    +-----+ +-----+
      / \     / \
    +-+ +-+ +-+ +-+
    |1| |2| |3| |4|              level 0
    +-+ +-+ +-+ +-+
]]></artwork>
          </artset>
        </figure>
        <t>The numerical constraints on <tt>start</tt> and <tt>end</tt> in <xref target="definition-of-a-subtree"/> restrict subtrees to ensure that they are properly aligned with the original tree as to permit subtree consistency proofs. A Merkle Tree built over <tt>[start, end)</tt> has size <tt>end - start</tt>, and is constructed as if <tt>start</tt> were the first element of the sequence at index zero. To be aligned, <tt>start</tt> must be the leftmost leaf of the lowest common ancestor of <tt>start</tt> and <tt>end - 1</tt> in the original tree:</t>
        <ul spacing="normal">
          <li>
            <t>Numerically, this means the least significant <tt>BIT_WIDTH(end - start - 1)</tt> bits of <tt>start</tt> must be zero. Equivalently, <tt>start</tt> must be divisible by <tt>BIT_CEIL(end - start)</tt>.</t>
          </li>
          <li>
            <t>In the tree, this means subtrees are constructed by taking any node in the tree, setting <tt>start</tt> to the leftmost leaf under the node, and <tt>end</tt> to one past any other leaf under the node.</t>
          </li>
        </ul>
        <t>Though most nodes overlap, not every node of the subtree is necessarily in the larger Merkle Tree, as shown in <xref target="fig-subtree-containment-example-2"/>. In general:</t>
        <ul spacing="normal">
          <li>
            <t>Subtrees whose sizes are a power of two are called <em>full subtrees</em>. A full subtree's root node will always be in the original tree.</t>
          </li>
          <li>
            <t>Subtrees whose sizes are not a power of two are called <em>partial subtrees</em>. A partial subtree's root node will be in the original tree of size <tt>n</tt>, if and only if <tt>n = end</tt>. Otherwise, non-leaf nodes along the partial subtree's right edge will not be part of the original tree.</t>
          </li>
        </ul>
        <t>The difference between full and partial subtrees does not impact their usage, but they can help in understanding the proof constructions below.</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 starting 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 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, toward 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 common ancestor. This truncates the inclusion 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> (first root) and <tt>sr</tt> (second root), 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 the subtree root is in the tree. This will occur if <tt>end</tt> is <tt>n</tt> (step 3), or if <tt>[start, end)</tt> is a full subtree (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 the 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 is 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 original 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="test-vectors">
      <name>Test Vectors</name>
      <section anchor="accumulated-subtree-test-vectors">
        <name>Accumulated Subtree Test Vectors</name>
        <t>The following are "accumulated" <xref target="Accumulated"/> test vectors for the various subtree algorithms defined in <xref target="subtrees"/>.</t>
        <t>They are hash values of the outputs of all possible inputs for each algorithm, for trees of sizes up to 130. They can be used to verify that an implementation matches the specification, without having to include a large number of individual test vectors.</t>
        <t>For all the test vectors, a tree <tt>D_n</tt> of size <tt>n</tt> is constructed with leaf values <tt>d[0] = 0x00, d[1] = 0x01, ...</tt>. The hash function used is SHA-256. The hash values are encoded in hexadecimal.</t>
        <section anchor="subtree-hash-vectors">
          <name>Subtree Hashes</name>
          <t>For each value of <tt>end</tt> from 0 to 130, and each value of <tt>start</tt> from 0 to <tt>end</tt>, if <tt>[start, end)</tt> is a valid subtree, add to the rolling hash the ASCII string <tt>[START, END) HASH</tt> followed by a newline (U+000A), where <tt>START</tt> and <tt>END</tt> are the decimal representations of <tt>start</tt> and <tt>end</tt>, respectively, and <tt>HASH</tt> is the hexadecimal encoding of <tt>MTH(D[start:end])</tt>, according to <xref target="subtrees"/>.</t>
          <t>The final hash value is</t>
          <artwork><![CDATA[
b82806ad4265bb151c1119c0f4db437bb4d1a1f887b3a7fba1cd4ebf552e3e81
]]></artwork>
          <t>In Python, this can be expressed as:</t>
          <sourcecode type="python"><![CDATA[
import hashlib
h = hashlib.sha256()
for end in range(0, 131):
    for start in range(end + 1):
        if valid_subtree(start, end):
            subtree_hash = MTH(D[start:end])
            h.update(f'[{start}, {end}) {subtree_hash.hex()}\n'.encode())
assert h.hexdigest() == 'b82806ad4265bb151c1119c0f4db437bb4d1a1f887b3a7fba1cd4ebf552e3e81'
]]></sourcecode>
          <t>This test exercises both an implementation's subtree hash calculation as well as the subtree validity check. In a CA, both of these operations apply. In a relying party, only the subtree validity check applies. A relying party implementation <bcp14>SHOULD</bcp14> implement a Merkle Tree in testing logic so the above will exercise the subtree validity check.</t>
        </section>
        <section anchor="subtree-inclusion-proof-vectors">
          <name>Subtree Inclusion Proofs</name>
          <t>For each value of <tt>end</tt> from 0 to 130, and each value of <tt>start</tt> from 0 to <tt>end</tt>, if <tt>[start, end)</tt> is a valid subtree, for each value of <tt>index</tt> from <tt>start</tt> to <tt>end - 1</tt>, add to the rolling hash the ASCII string <tt>INDEX [START, END)</tt>, then, for each hash in the inclusion proof (<xref target="subtree-inclusion-proofs"/>) for <tt>d[index]</tt> in the subtree <tt>[start, end)</tt>, a space (U+0020) followed by the hexadecimal encoding of that hash, and finally a newline (U+000A), where <tt>INDEX</tt> is the decimal representation of <tt>index</tt>, and <tt>START</tt> and <tt>END</tt> are the decimal representations of <tt>start</tt> and <tt>end</tt>, respectively.</t>
          <t>The final hash value is</t>
          <artwork><![CDATA[
ac2a8f989e44d99e399db448050ff5f19757df53cfb716aa81015d3955d8163f
]]></artwork>
          <t>In Python, this can be expressed as:</t>
          <sourcecode type="python"><![CDATA[
import hashlib
h = hashlib.sha256()
for end in range(0, 131):
    for start in range(end + 1):
        if valid_subtree(start, end):
            for index in range(start, end):
                inclusion_proof = get_inclusion_proof(D, start, end, index)
                line = f'{index} [{start}, {end})'
                for p in inclusion_proof:
                    line += f' {p.hex()}'
                h.update(f'{line}\n'.encode())
assert h.hexdigest() == 'ac2a8f989e44d99e399db448050ff5f19757df53cfb716aa81015d3955d8163f'
]]></sourcecode>
          <t>This test exercises constructing subtree inclusion proofs, as computed by a CA. A relying party instead evaluates untrusted subtree inclusion proofs. This test can be used to exercise this logic as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>If not available, implement a Merkle Tree in testing logic to compute subtree hashes and subtree inclusion proofs. This logic can be validated by the above test and <xref target="subtree-hash-vectors"/>.</t>
            </li>
            <li>
              <t>For each subtree inclusion proof in the above test, evaluate the inclusion proof and assert the resulting hash matches the corresponding subtree hash.</t>
            </li>
            <li>
              <t>For each non-empty subtree inclusion proof in the above test, truncate the proof by both one byte and a full hash. Assert that evaluating each proof fails.</t>
            </li>
            <li>
              <t>For each subtree inclusion proof in the above test, extend the proof by both one byte and an arbitrary full hash. Assert that evaluating each proof fails.</t>
            </li>
          </ol>
        </section>
        <section anchor="subtree-consistency-proof-vectors">
          <name>Subtree Consistency Proofs</name>
          <t>For each value of <tt>n</tt> from 0 to 130, and each value of <tt>end</tt> from 0 to <tt>n</tt>, and each value of <tt>start</tt> from 0 to <tt>end</tt>, if <tt>[start, end)</tt> is a valid subtree, add to the rolling hash the ASCII string <tt>[START, END) N</tt>, then, for each hash in the consistency proof (<xref target="subtree-consistency-proofs"/>) for the subtree <tt>[start, end)</tt> and tree of size <tt>n</tt>, a space (U+0020) followed by the hexadecimal encoding of that hash, and finally a newline (U+000A), where <tt>START</tt> and <tt>END</tt> are the decimal representations of <tt>start</tt> and <tt>end</tt>, respectively, and <tt>N</tt> is the decimal representation of <tt>n</tt>.</t>
          <t>The final hash value is</t>
          <artwork><![CDATA[
10fa99b37bf9bf9ffa26b412fbd98bd75363256d0b75d61bc4538b9c9c5a0a74
]]></artwork>
          <t>In Python, this can be expressed as:</t>
          <sourcecode type="python"><![CDATA[
import hashlib
h = hashlib.sha256()
for n in range(131):
    for end in range(0, n + 1):
        for start in range(end + 1):
            if valid_subtree(start, end):
                consistency_proof = get_consistency_proof(D, n, start, end)
                line = f'[{start}, {end}) {n}'
                for p in consistency_proof:
                    line += f' {p.hex()}'
                h.update(f'{line}\n'.encode())
assert h.hexdigest() == '10fa99b37bf9bf9ffa26b412fbd98bd75363256d0b75d61bc4538b9c9c5a0a74'
]]></sourcecode>
          <t>This test exercises constructing subtree consistency proofs. Other parties will check these proofs (e.g. <xref target="trusted-subtrees"/> and <xref target="TLOG-WITNESS"/>). This test can be used to exercise this logic as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>If not available, implement a Merkle Tree in testing logic to compute subtree hashes and subtree consistency proofs. This logic can be validated by the above test and <xref target="subtree-hash-vectors"/>.</t>
            </li>
            <li>
              <t>For each subtree consistency proof in the above test, check the proof and assert it succeeds.</t>
            </li>
            <li>
              <t>For each non-empty subtree consistency proof in the above test, truncate the proof by both one byte and a full hash. Assert that checking each proof fails.</t>
            </li>
            <li>
              <t>For each subtree consistency proof in the above test, extend the proof by both one byte and an arbitrary full hash. Assert that checking each proof fails.</t>
            </li>
            <li>
              <t>For each subtree consistency proof in the above test, flip a bit in the input subtree hash. Assert that checking each proof fails.</t>
            </li>
            <li>
              <t>For each subtree consistency proof in the above test with a non-empty subtree, flip a bit in the input tree hash. Assert that checking each proof fails.</t>
            </li>
          </ol>
        </section>
        <section anchor="efficient-covering-subtrees">
          <name>Efficient Covering Subtrees</name>
          <t>For each value of <tt>end</tt> from 0 to 130, and each value of <tt>start</tt> from 0 to <tt>end</tt>, add to the rolling hash the ASCII string <tt>[LEFT_START, LEFT_END) [RIGHT_START, RIGHT_END)</tt> followed by a newline (U+000A), where <tt>LEFT_START</tt>, <tt>LEFT_END</tt>, <tt>RIGHT_START</tt>, and <tt>RIGHT_END</tt> are the decimal representations of the start and end of the left and right subtrees, respectively, that efficiently cover (<xref target="arbitrary-intervals"/>) <tt>[start, end)</tt>.</t>
          <t>The final hash value is</t>
          <artwork><![CDATA[
7fd9c8b926e9d2b5cf831560e8ce295a5ef97ad5c5ede4ea0dea28a8c8fc8bb0
]]></artwork>
          <t>In Python, this can be expressed as:</t>
          <sourcecode type="python"><![CDATA[
import hashlib
h = hashlib.sha256()
for end in range(0, 131):
    for start in range(end + 1):
        left_start, left_end, right_start, right_end = get_covering_subtrees(start, end)
        h.update(f'[{left_start}, {left_end}) [{right_start}, {right_end})\n'.encode())
assert h.hexdigest() == '7fd9c8b926e9d2b5cf831560e8ce295a5ef97ad5c5ede4ea0dea28a8c8fc8bb0'
]]></sourcecode>
        </section>
      </section>
      <section anchor="large-subtree-test-vectors">
        <name>Large Subtree Test Vectors</name>
        <t><xref target="accumulated-subtree-test-vectors"/> exhaustively tests subtree algorithms for trees of size up to 130. An implementation may also encounter overflow conditions with very large trees. This is primarily a concern for a relying party, which must act on untrusted tree sizes.</t>
        <t>The largest possible Merkle Tree in this protocol is 2<sup>48</sup>-1. In particular, the MTCProof structure in <xref target="certificate-format"/> cannot express larger values. These sizes will fit comfortably in 64-bit integers, whether signed or unsigned. To exercise more general implementations, this section includes test vectors for trees bounded by 2<sup>48</sup>-1, 2<sup>63</sup>-1, and 2<sup>64</sup>-1.</t>
        <t>Implementations <bcp14>MAY</bcp14> skip tests above 2<sup>48</sup>-1 if they do not support such trees.</t>
        <section anchor="subtree-validity-large-vectors">
          <name>Subtree Validity</name>
          <t>The following are valid subtrees (<xref target="definition-of-a-subtree"/>):</t>
          <ul spacing="normal">
            <li>
              <t>start is 0 and end is 2<sup>47</sup> + 1</t>
            </li>
            <li>
              <t>start is 0 and end is 2<sup>48</sup> - 1</t>
            </li>
            <li>
              <t>start is 0 and end is 2<sup>62</sup> + 1</t>
            </li>
            <li>
              <t>start is 0 and end is 2<sup>63</sup> - 1</t>
            </li>
            <li>
              <t>start is 0 and end is 2<sup>63</sup> + 1</t>
            </li>
            <li>
              <t>start is 0 and end is 2<sup>64</sup> - 1</t>
            </li>
          </ul>
          <t>The following are not valid subtrees:</t>
          <ul spacing="normal">
            <li>
              <t>start is 2<sup>46</sup> and end is 2<sup>47</sup> + 1</t>
            </li>
            <li>
              <t>start is 2<sup>46</sup> and end is 2<sup>48</sup> - 1</t>
            </li>
            <li>
              <t>start is 2<sup>61</sup> and end is 2<sup>62</sup> + 1</t>
            </li>
            <li>
              <t>start is 2<sup>61</sup> and end is 2<sup>63</sup> - 1</t>
            </li>
            <li>
              <t>start is 2<sup>62</sup> and end is 2<sup>63</sup> + 1</t>
            </li>
            <li>
              <t>start is 2<sup>62</sup> and end is 2<sup>64</sup> - 1</t>
            </li>
          </ul>
        </section>
        <section anchor="subtree-inclusion-proof-large-vectors">
          <name>Subtree Inclusion Proofs</name>
          <t><xref target="LargeInclusionProofs"/> contains additional test vectors for subtree inclusion proofs (<xref target="subtree-inclusion-proofs"/>).</t>
        </section>
        <section anchor="subtree-consistency-proof-large-vectors">
          <name>Subtree Consistency Proofs</name>
          <t><xref target="LargeConsistencyProofs"/> contains additional test vectors for subtree consistency proofs (<xref target="subtree-consistency-proofs"/>).</t>
        </section>
        <section anchor="efficient-covering-subtrees-large-vectors">
          <name>Efficient Covering Subtrees</name>
          <t>This section contains sample inputs and outputs for the procedure in <xref target="selecting-two-subtrees"/>.</t>
          <t>Given range <tt>[0x0, 0x800000000000)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0x0, 0x400000000000)</tt></t>
            </li>
            <li>
              <t><tt>[0x400000000000, 0x800000000000)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0x500000000000, 0xd00000000000)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0x400000000000, 0x800000000000)</tt></t>
            </li>
            <li>
              <t><tt>[0x800000000000, 0xd00000000000)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0x7fffffffffff, 0x800000000001)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0x7fffffffffff, 0x800000000000)</tt></t>
            </li>
            <li>
              <t><tt>[0x800000000000, 0x800000000001)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0xfffffffffffe, 0xffffffffffff)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0xfffffffffffe, 0xffffffffffff)</tt></t>
            </li>
            <li>
              <t><tt>[0xffffffffffff, 0xffffffffffff)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0xffffffffffff, 0xffffffffffff)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0xffffffffffff, 0xffffffffffff)</tt></t>
            </li>
            <li>
              <t><tt>[0xffffffffffff, 0xffffffffffff)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0x0, 0x4000000000000000)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0x0, 0x2000000000000000)</tt></t>
            </li>
            <li>
              <t><tt>[0x2000000000000000, 0x4000000000000000)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0x2800000000000000, 0x6800000000000000)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0x2000000000000000, 0x4000000000000000)</tt></t>
            </li>
            <li>
              <t><tt>[0x4000000000000000, 0x6800000000000000)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0x3fffffffffffffff, 0x4000000000000001)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0x3fffffffffffffff, 0x4000000000000000)</tt></t>
            </li>
            <li>
              <t><tt>[0x4000000000000000, 0x4000000000000001)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0x7ffffffffffffffe, 0x7fffffffffffffff)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0x7ffffffffffffffe, 0x7fffffffffffffff)</tt></t>
            </li>
            <li>
              <t><tt>[0x7fffffffffffffff, 0x7fffffffffffffff)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0x7fffffffffffffff, 0x7fffffffffffffff)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0x7fffffffffffffff, 0x7fffffffffffffff)</tt></t>
            </li>
            <li>
              <t><tt>[0x7fffffffffffffff, 0x7fffffffffffffff)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0x0, 0x8000000000000000)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0x0, 0x4000000000000000)</tt></t>
            </li>
            <li>
              <t><tt>[0x4000000000000000, 0x8000000000000000)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0x5000000000000000, 0xd000000000000000)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0x4000000000000000, 0x8000000000000000)</tt></t>
            </li>
            <li>
              <t><tt>[0x8000000000000000, 0xd000000000000000)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0x7fffffffffffffff, 0x8000000000000001)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0x7fffffffffffffff, 0x8000000000000000)</tt></t>
            </li>
            <li>
              <t><tt>[0x8000000000000000, 0x8000000000000001)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0xfffffffffffffffe, 0xffffffffffffffff)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0xfffffffffffffffe, 0xffffffffffffffff)</tt></t>
            </li>
            <li>
              <t><tt>[0xffffffffffffffff, 0xffffffffffffffff)</tt></t>
            </li>
          </ul>
          <t>Given range <tt>[0xffffffffffffffff, 0xffffffffffffffff)</tt>, the subtrees are:</t>
          <ul spacing="normal">
            <li>
              <t><tt>[0xffffffffffffffff, 0xffffffffffffffff)</tt></t>
            </li>
            <li>
              <t><tt>[0xffffffffffffffff, 0xffffffffffffffff)</tt></t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>This document stands on the shoulders of giants and builds upon decades of work in TLS authentication, 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, Corey Bonnell, Ryan Dickson, Aaron Gable, Nick Harper, Jacob Hoffman-Andrews, Russ Housley, Dennis Jackson, Ilari Liusvaara, Sanketh Menda, Matt Mueller, Mike Ounsworth, Chris Patton, Michael Richardson, Ryan Sleevi, Emily Stark, and Rob Stradling for many valuable discussions and insights which led to this document, as well as feedback and contributions to the document itself. 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 numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-09">
        <name>Since draft-davidben-tls-merkle-tree-certs-09</name>
        <ul spacing="normal">
          <li>
            <t>Editorial fixes</t>
          </li>
          <li>
            <t>Set a more accurate intended status</t>
          </li>
          <li>
            <t>Fixes to ASN.1 module</t>
          </li>
          <li>
            <t>Make log entry more friendly to single-pass verification</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-10">
        <name>Since draft-davidben-tls-merkle-tree-certs-10</name>
        <ul spacing="normal">
          <li>
            <t>Adopted by working group</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-plants-merkle-tree-certs-00">
        <name>Since draft-ietf-plants-merkle-tree-certs-00</name>
        <ul spacing="normal">
          <li>
            <t>Address editorial comments from WG adoption call</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-plants-merkle-tree-certs-01">
        <name>Since draft-ietf-plants-merkle-tree-certs-01</name>
        <ul spacing="normal">
          <li>
            <t>Renamed full certificate to standalone certificate, signatureless certificate to landmark certificate.</t>
          </li>
          <li>
            <t>Included subject public key algorithm in log entries</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-plants-merkle-tree-certs-02">
        <name>Since draft-ietf-plants-merkle-tree-certs-02</name>
        <ul spacing="normal">
          <li>
            <t>Renamed landmark certificate to landmark-relative certificate</t>
          </li>
          <li>
            <t>Relaxed restrictions on <tt>null_entry</tt></t>
          </li>
          <li>
            <t>Clarify that CRLs and OCSPs apply to MTCs unmodified</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-plants-merkle-tree-certs-03">
        <name>Since draft-ietf-plants-merkle-tree-certs-03</name>
        <ul spacing="normal">
          <li>
            <t>Use a tlog-compatible signature scheme for ease of deployment</t>
          </li>
          <li>
            <t>Define a CA certificate representation</t>
          </li>
          <li>
            <t>Remove the one-to-many relationship between MTC CAs and CA cosigners</t>
          </li>
          <li>
            <t>Discuss domain separation for signatures</t>
          </li>
          <li>
            <t>Recommend a maximum log entry size for tlog compatibility</t>
          </li>
          <li>
            <t>Prescribe landmark OID allocation</t>
          </li>
          <li>
            <t>Update TLS integration now that trust anchor IDs extension has been moved to the base draft</t>
          </li>
          <li>
            <t>A single CA now operates a series of issuance logs, instead of a one-to-one correspondence</t>
          </li>
          <li>
            <t>Group components of a CA into a CA-specific section that enumerates the parts of a CA</t>
          </li>
          <li>
            <t>Canonicalize the order of cosignatures in MTCProofs</t>
          </li>
          <li>
            <t>Remove sketch of tlog subtree signer API in favor of https://github.com/C2SP/C2SP/pull/245 in <xref target="TLOG-WITNESS"/></t>
          </li>
          <li>
            <t>Add an extensions block to log entries</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-plants-merkle-tree-certs-04">
        <name>Since draft-ietf-plants-merkle-tree-certs-04</name>
        <ul spacing="normal">
          <li>
            <t>Fix some mistakes in the single-pass signature verification algorithm</t>
          </li>
          <li>
            <t>Editorial fixes</t>
          </li>
          <li>
            <t>Discuss the implications of subordinate CAs in Security Considerations</t>
          </li>
          <li>
            <t>Added subtree test vector appendix</t>
          </li>
          <li>
            <t>Define a CA's current issuance log and rules around that</t>
          </li>
          <li>
            <t>Switch the ACME construction to a new link relation and change the HTTP status code</t>
          </li>
          <li>
            <t>Add a maxSerial field to the CA format</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-plants-merkle-tree-certs-05">
        <name>Since draft-ietf-plants-merkle-tree-certs-05</name>
        <ul spacing="normal">
          <li>
            <t>Use 24-bit length prefix for MTCProof subtree signatures.</t>
          </li>
          <li>
            <t>Renamed MerkleTreeCertEntry, etc., structures to MTCLogEntry to be consistent with MTCProof, shorter, and help disambiguate the many English meanings of "entry".</t>
          </li>
          <li>
            <t>Fixed one of the accumulated test vectors to better reflect one of the edge cases in subtree covering.</t>
          </li>
          <li>
            <t>Make empty subtrees valid, so the subtree covering function always returns two subtrees.</t>
          </li>
          <li>
            <t>Add an informative reference to the MTC-TLOG profile (c2sp.org/mtc-tlog) and mention it where tile-based logs are discussed.</t>
          </li>
          <li>
            <t>Clarify that a landmark consists of both a number and a tree size, and that a landmark's subtrees share its landmark number.</t>
          </li>
          <li>
            <t>Give an exact procedure for selecting the landmark and covering subtree when constructing a landmark-relative certificate.</t>
          </li>
          <li>
            <t>Prune the pruning discussion. It's really a property of the log serving protocol and is better described in <xref target="MTC-TLOG"/> and <xref target="TLOG-TILES"/>.</t>
          </li>
          <li>
            <t>Fix the maximum log index to account for also <tt>end</tt> being 48-bit.</t>
          </li>
          <li>
            <t>Discuss a potential overflow in the valid subtree definition.</t>
          </li>
          <li>
            <t>Describe how a party holding a standalone certificate can construct the corresponding landmark-relative certificate itself.</t>
          </li>
          <li>
            <t>Added test vectors for subtree algorithms in larger trees.</t>
          </li>
          <li>
            <t>Align the experimental OID with the final one in the X.509 name construction in using RELATIVE-OID directly.</t>
          </li>
          <li>
            <t>Lifted the tree hash into the MTC CA extension OID, so it can capture new tree constructions more generally.</t>
          </li>
          <li>
            <t>Update for draft-ietf-tls-trust-anchor-ids-05, and spell out certificate configuration explicitly.</t>
          </li>
          <li>
            <t>Define active landmarks around landmark expiry and put the expiry time in the landmark format.</t>
          </li>
          <li>
            <t>Fix an interaction between landmark-relative certs and TLS <tt>certificate_authorities</tt>.</t>
          </li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
/0JZehw+GRftZNqmkg62USyGYWRrDMz9+Z/ZvCQ08dm03+IyV0kkxqZr74/D
ISsB2JER8gVkKshMIiafddwg7E2qSE2Aezs5en3UBvX2qpws3ek78VqkWzx6
VNCkskpCC8gxH1tzo6DZ+6evTgKkHB2et/9+8kuz9fuu1XMC6lJwnIOdx49h
4/0teZ6NgUFOvxG/Y0GZfn5z8u+Ub02V/Hbvt77+hN9aP3GPOnn6ubSRT/qX
pftvMe7vbO3suU9+JZbQd6P4m2sVwHdaxfKOqyBego5V8K1W/+Tpp7Nzmj6b
Tlqmb+0GPizyD12K1h6+blU6fu6wWB0/q9fwKqMljGRKX9u4f/riaGdvv21p
3ykU3nM2bCxzOCFf0009WghZ+EOXeq0eo6VH4fvHO3trLv2dV3r1ws4nRcp4
qEeAsTx53raOL/Pig0zNDYZCdr9y0ZoNVY3FONw5PMRi+Odo9Z7ce5Kk48us
z2C66ayvfNGNxSwVPYcVqkTC1Oc9H41j2J1+lBeqY7dhjFgY3iaeDstlY19j
InRSR6xi9OXwpPf8RuHpHJWvmnGRZFxDb1prPI9KEqAakxwKmn/Yvx5Kemk9
L8O7qJi9Ow9OJhh/IE7Fei9zjnv3/uu//iutisG2qGqkqVnF5l6SfHZDKDe2
N4MldNIv5+dO12QX7sajTceAJxv7mxyZV2QL9/Q9OneK57axt2kMjfTX1Yf8
08bBpvCMjS1+vsZBNtz53Uzc8J8f/3Dy+uTs5M3r0+Tk1duXJ89OzpKzox9P
kydPvr/39PjHk9fulL56++bd2alr6PTkx9dHZz+9O+4fvfzxzbuTsxevesnz
kx+PT8/sJ55tBPb5+UvPvf/DuzevzLch3taNautx4tbSceVfSUJ5vL3zN4z8
dyzS3ZfJL1TaNsatnY29Q1q2JHCAyk0sOTo7e3fy9KezY50ikbE+B6zhfv6r
TY++5uFhUgc8KTqeYWJ2Ltsnl1yw+V9xItv9XEdHk3nMk/mZ/dc9EL5e8rN4
rnuJ+KT9yewl3qkZxJ1o8lqt+l9z8tknM3k3hC/Jf793r8N35i51sIt+Rmvi
56/JIr9u/S05/kXogSxl4ojF0U8vz5KP2z0mKnD7t4kyWHNuXta9+YzfESZo
oqitaqvug/bb1Upw3v701A2//+/Hf+ndaxtj/PO55RB8+dLer8ZaJcmbZ2fH
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
FS/O+OYCAA==

-->

</rfc>
