<?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-07" 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-07"/>
    <author initials="D." surname="Benjamin" fullname="David Benjamin">
      <organization>Google LLC</organization>
      <address>
        <email>davidben@google.com</email>
      </address>
    </author>
    <author initials="D." surname="O'Brien" fullname="Devon O'Brien">
      <organization>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="October" day="07"/>
    <area>Security</area>
    <workgroup>PKI, Logs, And Tree Signatures</workgroup>
    <abstract>
      <?line 215?>

<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 219?>

<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="9.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. The landmark subtree is assumed to be known to the relying party, rather than authenticated by cosignatures.</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 does not need subtree cosignatures, including any from the CA. 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 by adding to the registry defined in <xref target="mtc-ca-identifier-child-components"/>.</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) 3 }
]]></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.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 by adding to the registries defined in <xref target="mtc-log-entry-types"/> and <xref target="mtc-log-entry-extension-types"/>, respectively. 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>
          <ul empty="true">
            <li>
              <t><strong>RFC Editor's Note:</strong> <xref target="MTC-TLOG"/> and other non-normative C2SP references cite this document and are themselves versioned. Ideally, the final RFC would reference C2SP versions that reference the final RFC. After the final RFC number is allocated, the authors can help coordinate the document clustering across those references, including tagging the appropriate versions of the C2SP documents.</t>
            </li>
          </ul>
        </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 CosignedSubtree, 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;
} CosignedSubtree;
]]></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>OID components in a trust anchor ID can be arbitrarily large. Implementations <bcp14>MAY</bcp14> set an upper bound on supported OID components, based on the guidance in <xref section="8" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>. Such implementations <bcp14>MUST</bcp14> fail signature generation or verification if an OID component is out of range.</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 CosignedSubtree 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) 38 }

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>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) 67 }
]]></sourcecode>
        <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>;

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

struct {
    MTCLogEntryExtension extensions<0..2^16-1>;
    uint48 start;
    uint48 end;
    opaque inclusion_proof<0..2^16-1>;
    Cosignature 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. Each hash in the proof is concatenated in order. <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>CAs, or other parties, <bcp14>MAY</bcp14> include GREASE <xref target="RFC8701"/> cosignatures in an MTCProof by allocating an unused cosigner ID and inserting it into the <tt>signatures</tt> field. The <tt>cosigner_id</tt> is the unused cosigner ID and the <tt>signature</tt> is an arbitrary byte string. A cosigner ID allocated for GREASE <bcp14>MUST NOT</bcp14> be later repurposed for a real cosigner.</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 authenticates its subtree by assuming the relying party had predistributed information about which subtrees were trusted. This allows the certificate to omit subtree cosignatures.</t>
        <t>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 + 1</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. No cosignatures are required to authenticate the subtree, though the certificate <bcp14>MAY</bcp14> include cosignatures for other purposes, such as GREASE <xref target="RFC8701"/> cosignatures as described in <xref target="certificate-format"/>.</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. Note that, while a general RELATIVE-OID can be arbitrarily long, <xref section="4" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/> limits trust anchor IDs to 32 bytes.</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 CosignedSubtree structure is constructed as follows:  </t>
            <ol spacing="normal" type="1"><li>
                <t>Set the CosignedSubtree's <tt>cosigner_name</tt> based on the cosigner ID as described in <xref target="signature-format"/>.</t>
              </li>
              <li>
                <t>Set the CosignedSubtree's <tt>timestamp</tt> to zero.</t>
              </li>
              <li>
                <t>Set the CosignedSubtree's <tt>log_origin</tt> based on <tt>log_id</tt> as described in <xref target="signature-format"/>.</t>
              </li>
              <li>
                <t>Set the CosignedSubtree'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 CosignedSubtree'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>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>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="10" 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="additions-to-existing-registries">
        <name>Additions to Existing Registries</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">67</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">38</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">3</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>
      <section anchor="new-registries">
        <name>New Registries</name>
        <t>IANA is requested to add a new top-level registry, "Merkle Tree Certificates", to the "Protocol Registries" page at <eref target="https://www.iana.org/protocols">https://www.iana.org/protocols</eref></t>
        <t>The rest of this section defines the subregistries requested within the new "Merkle Tree Certificates" registry.</t>
        <section anchor="mtc-log-entry-types">
          <name>MTC Log Entry Types</name>
          <t>IANA is requested to add a new registry, "MTC Log Entry Types" with the
following registration policies from <xref target="RFC8126"/>:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Range</th>
                <th align="left">Registration Policy</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0x0000 - 0xEFFF</td>
                <td align="left">Specification Required</td>
              </tr>
              <tr>
                <td align="left">0xF000 - 0xFFFF</td>
                <td align="left">Private Use</td>
              </tr>
            </tbody>
          </table>
          <t>The registry initially consists of:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Value</th>
                <th align="left">Name</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0x0000</td>
                <td align="left">null_entry</td>
                <td align="left">[this-RFC]</td>
              </tr>
              <tr>
                <td align="left">0x0001</td>
                <td align="left">tbs_cert_entry</td>
                <td align="left">[this-RFC]</td>
              </tr>
              <tr>
                <td align="left">0x0002 - 0xEFFF</td>
                <td align="left">Unassigned</td>
                <td align="left"> </td>
              </tr>
              <tr>
                <td align="left">0xF000 - 0xFFFF</td>
                <td align="left">Reserved for Private Use</td>
                <td align="left">[this-RFC]</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="mtc-log-entry-extension-types">
          <name>MTC Log Entry Extension Types</name>
          <t>IANA is requested to add a new registry, "MTC Log Entry Extension Types" with the
following registration policies from <xref target="RFC8126"/>:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Range</th>
                <th align="left">Registration Policy</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0x0000 - 0xEFFF</td>
                <td align="left">Specification Required</td>
              </tr>
              <tr>
                <td align="left">0xF000 - 0xFFFF</td>
                <td align="left">Private Use</td>
              </tr>
            </tbody>
          </table>
          <t>The registry initially consists of:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Value</th>
                <th align="left">Name</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0x0000 - 0xEFFF</td>
                <td align="left">Unassigned</td>
                <td align="left"> </td>
              </tr>
              <tr>
                <td align="left">0xF000 - 0xFFFF</td>
                <td align="left">Reserved for Private Use</td>
                <td align="left">[this-RFC]</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="mtc-ca-identifier-child-components">
          <name>MTC CA Identifier Child Components</name>
          <t>IANA is requested to add a new registry, "MTC CA Identifier Child Components", whose registration policy is Specification Required <xref target="RFC8126"/>. Values shall be any non-negative integer. The registry initially consists of:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Value</th>
                <th align="left">Name</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0</td>
                <td align="left">logs</td>
                <td align="left">[this-RFC]</td>
              </tr>
              <tr>
                <td align="left">1</td>
                <td align="left">landmarks</td>
                <td align="left">[this-RFC]</td>
              </tr>
              <tr>
                <td align="left">2</td>
                <td align="left">landmarkGroups</td>
                <td align="left">[this-RFC]</td>
              </tr>
            </tbody>
          </table>
        </section>
      </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="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="30" 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-06"/>
        </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="RFC8701">
          <front>
            <title>Applying Generate Random Extensions And Sustain Extensibility (GREASE) to TLS Extensibility</title>
            <author fullname="D. Benjamin" initials="D." surname="Benjamin"/>
            <date month="January" year="2020"/>
            <abstract>
              <t>This document describes GREASE (Generate Random Extensions And Sustain Extensibility), a mechanism to prevent extensibility failures in the TLS ecosystem. It reserves a set of TLS protocol values that may be advertised to ensure peers correctly handle unknown values.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8701"/>
          <seriesInfo name="DOI" value="10.17487/RFC8701"/>
        </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>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </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>
      </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@v0.1.0">
          <front>
            <title>Merkle Tree Certificates With Tiled Transparency Logs</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2026" month="October"/>
          </front>
        </reference>
        <reference anchor="TLOG-TILES" target="https://c2sp.org/tlog-tiles@v1.0.0">
          <front>
            <title>Tiled Transparency Logs</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2026" month="October"/>
          </front>
        </reference>
        <reference anchor="TLOG-WITNESS" target="https://c2sp.org/tlog-witness@v1.1.0">
          <front>
            <title>Transparency Log Witness Protocol</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2026" month="October"/>
          </front>
        </reference>
        <reference anchor="TLOG-MIRROR" target="https://c2sp.org/tlog-mirror@v0.1.0">
          <front>
            <title>Transparency Log Mirrors</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2026" month="October"/>
          </front>
        </reference>
        <reference anchor="TLOG-COSIGNATURE" target="https://c2sp.org/tlog-cosignature@v1.1.0">
          <front>
            <title>Transparency Log Cosignatures</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2026" month="October"/>
          </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 2069?>

<section anchor="asn1-module">
      <name>ASN.1 Module</name>
      <t>This ASN.1 module uses the conventions established by <xref target="RFC5912"/>.</t>
      <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) 67 }

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) 3 }

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) 38 }

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, Matthew McPherrin, 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>
      <t>The transparency log architecture and APIs are based on designs developed by the Go and Sigsum projects.</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 numbered="false" anchor="since-draft-ietf-plants-merkle-tree-certs-06">
        <name>Since draft-ietf-plants-merkle-tree-certs-06</name>
        <ul spacing="normal">
          <li>
            <t>OIDs have been allocated.</t>
          </li>
          <li>
            <t>Set up registries for extensible parameters.</t>
          </li>
          <li>
            <t>Allow GREASE cosignatures in MTCProof.</t>
          </li>
          <li>
            <t>Use versioned URLs for (non-normative) C2SP references.</t>
          </li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
NUThNe7aDKKANLgpZE9CH+Bnd51BA16kXAypGyrURN0m1AnV3Anrblb5BiBb
TMoHQNqyxTpZwQpwBKtAhTFt4wMw0LQqnrCQds9MIu9bCxm4sIBcP3QFvLmr
rnPkBXgJTUHE0M4gIXb0aAckK9q/STwpVaDmKtt0Hj16JAdEApjPeht6dJOI
SG9qGPVxHPoUe80WlWfCps/TS10dEb8Z7FuNxqtjyCN2oxXLKeg5IvymxOKA
PvoGU+AmQrR5XK6/XiIdIoxgumloJTF7ECblbbtLG+meGfs1YpYNp8Cj5/tP
P8IqJIb1P2iu1T5WXMSuc9X1yqpd3SwuP+CjA6z3SC+q71KUmWhL/xz9ik/K
kl7FH6n/iws7hQ1zX3PbMOavGLkgwhut49tS3sbd4gW88UKZqZoNiiaALNiI
yyQWMVgtIcC1/moqSeKS/H2ppyW41jz76wrv0Q3FRSc7+mjD6w7na2+6CefU
GhNi4vIagswtWWUZvtsxASA1d9clfOHdbheIaBHCjeqkIRQEGusQUQRKEoXl
DUqjPkXlFOEOl0UsNc5KxCYbWWvfOL8mCRVevU2+pVYKNOjbLKWLPso/9iZF
zD6d67iIYXGqijFVxMQ61GxDITMJCfDZt5UVi+HB2X50XVXzcn99/QowfDHq
A+lZn5FoAqRiVubZOr28Tm3eyvWn7Dn7B5Yh+l/15/6x9efuCzz8PevPPWiu
36P+XON/64FIv0v9uQfN9TvVn3P2o+Cv/ud3qz/3sNmaDFmaLDeZsdhkw9YQ
7YkYhz0RKCiipSFYmlC2KrVFJg3WJm5q//ZsnmdI0sniQ08fP6dWnnEvnZTk
qGcWscjSvy0wqYgr2EpzS+qKxq+OYdSU8oCLBKdDCXlc3M2r/KqI5zCGFMKR
3L0ux2DYNndh48J+dP7yoLe5sxt9+vRP5y/Pv39+etwfbPR3Nzb31l8fn1/0
Xxy/Oe8P9jZ628DagKOfHR2evnp19Pr50XNkSQVGE+bGJG7cOyIAe0vhBHfQ
TAup1FJG6JJzyaSmcQ5pVosKE0SBA47uKm6L2PDu+/PjfzsSwLi2t35nxoZG
t13Lj8VmhBXysNunEVJtH1HbdAa74Pgd/ur9eyhLQFrBYvdXe9amidNDm7ea
9XGfVl0QttZ0UtrX4txp4RqGUhKS7T3a9frfmHJMmOKJ+8Dmg6b5Cd0bardK
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
0/NB+YFuhrxRf3rLrtH7whu38XrD6pxm4nEEVwhLFTfdcMQ8c/6th63S0P87
dn/csftDj4bTTIIgnxxd5oTmML1yGjrZM+57Ppa39pB4ILkN6gcDSVXNuxSd
lV7yE8dhlZepAOMVt7CjFdkFi0UUz32hSMsrbt8Km3bHVslb8EDZZsyab+oz
grdcNjyzVXnmx9l0cV1W9s516FTy4UdSFNnszCqZ+PT4oyvW0hZa3GBI9R8L
1h19YTW2MfIC7z7Z3EIt2f/8z/9My6K3KeZW4mKWiT1Iki9ut6Zrm+vBmznq
OoaaFhKGtba97pTo0dreOkfXF9ncPf2ApqaYrGu768ZZSH9df8w/r+2vi0a3
tsHPV/S7Naf5rSdOsHh+/OLkzcn5yds3Z8nJ63evTo5OzpPzwx/PkqdPf3jw
7PjHkzfu8L5+9/b0/Mw1dHby45vD8/enx93DVz++PT05f/m6kzw/+fH47Nx+
4nW6cIq/fO2491+cvn1tvg05M25UG08StyGO//8iq/h3jPw3LNL9l8kvVNo0
xo2ttd0DWrYk0O3STSw5PD8/PXn2/vxYp0gaRpeDzkHX/9WmR1/z8DCpfZ4U
Hc8wMTuXzROk+Ofzf8WJbHZzHR1N5glP5ieOQeuAJHWI3iH6rJNIXJk/mZ3E
ByYFW0Q0+ePP/8qTzz6bybshfE3+q6NgzfEv7lIH3+YXtCaxekn888vG35Pj
n4UeyFImjlgcvn91nnza7DBRQehe0vCDNefmZd3rz/gdYYImxtZlbVXjyPx2
NRKcd++fueF3//34r50HTWOMf740HIKvX5v71XjpJHl7dH58npy52//mR7sm
Grvol3Pz74G8Vg9g8vYdEeDDV1FvlSZ+2Vq9BZM0Zrd022ypoV9f4mv/9esK
q+V/tOMHjpdUbWhvn/3346Pz5OT58Zvzkxcnx6c4fl9kme5/XexFQSPNl8WT
7pLe39snNlemYVgNPMwMzIy2Mh98/e7w9PD1WXJ4ekx5I27wMvEG68w/afo0
krUt98E2TTydV0blWZUZzflf3x0np8evDs9Pfjruvj15Hq/E8+TZX5stUDL5
VYx+/6TVuM7o2e0DWgt3Le4e5/HP58dvztyZNuM7++ub88OfSc5vfrd5uVZY
Fbx45I7gydHhq5Pzvybnp++PaVEdj9E04a3/uXMg2YtcJjbkTUSxXDVkmN4D
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
Wt1evdUd02rDGtI2xesYr5TMeE9aWXnZ7nyvZQ1l1Jtt77Ut6J3vtaxupdWV
l/rO96J1/0aHYPUKfPkCvuJbeCempRBfG5Lx6uShzU58h1vtt9kIW6ZgWvm2
SXwb0t0d4rabiZf9uiqbeCW8gSIZsuxHXzJCmAQlIc5N4pbU/lcJSy+zSQYD
Qnd+MzUqf0/hHiFwURbRZyeUbXw+2Ag/iuVuMZ1wgf3TO9HT8o39sN5kvd/d
yvOjVYdwR0f80EHlobj1+mj2x+Gn0ujm0tEsebF9NHHr9dGYNjN63vw9Xjqa
5S/WHxo3PLRsNA3Przaapo6+bTS1E7jamd2qvSHfVr9obr4+jq2D+nt7B9X3
lgxrxY7rh769t/oot8fxT0Mny8/3Cg0sH2W9t+W3T49u5bPlJ221BpofHrc8
fNcoW95bfZRtHf+2UdZo4p0H8f4nr978cvqu741q761I55d0XKew7b2ttqeV
tlan/y0NLB9lvbflFHjcQNrvPHmrNdD8cI0qt5281d5bfZRtHd9vlFRUeUi4
IhPK5kG2woMvT7Xkzg8PEZz/UEUvDzoDDD4PD8WoOAS37PT+izxVeGyPgIeq
acN0xGaTm+nsIwli56/OknRBHt+5j+n+ube78YR1ZFMZNTl361giD3ooUFAp
itCVAokxyT9mUlus+Cjh3FOkJ0x91sR8lg8Qo6JI3YmbkhMsb0NwpFo71ESi
nUSIG9zHs+kgeZYNP3acUDtzCvizaVFkk0knOb1Ni+R5PvxY0nwO05mb/I/s
63njPk1eprNrgvL+7+nQNfFyOh5fpUX3sBjNspvSvb4oS/fpopxkt53keVYU
bt3ds9zciZOI8+RVvig/peks7SSv07kb+k3yevjuMps56bmTnLnhZfPL5LVT
j+SJ5PUiI4Q89xct1NtFUbpNmF+6wV/OXPvv3DPU/Ot8eJlmk+SU/p2N0CXm
czbJsk95Jzm+IivUmdPJPvImnbo5nM1n6QhmbZK3ryhDBgEQZFMSGDSON4W1
syQjYSmmqkkmpnFzuDo2wnWcZSOq/s0FonQT0ZyY1P2ZzOdOrh/3kr9Q5Gh5
GY7D6zx1h2lCBd0FUs9brBjAs2K0g3cqydLZhKB4RrN0TIiIn7KURltmgClK
rvO5uxv+pOSjLKUer/JC3RJZOqK8mTGKycO0TZAImoLj/gz5h4NbXfLkWTor
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

-->

</rfc>
