<?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.39 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-plants-merkle-tree-certs-05" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title>Merkle Tree Certificates</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-plants-merkle-tree-certs-05"/>
    <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="July" day="06"/>
    <area>Security</area>
    <workgroup>PKI, Logs, And Tree Signatures</workgroup>
    <abstract>
      <?line 196?>

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

<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="7.5" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>), two SCTs and a leaf certificate signature adds 7,260 bytes of authentication overhead with ML-DSA-44 and 9,927 bytes with ML-DSA-65.</t>
      <t>This increased overhead additionally impacts CT logs themselves. Most of a log's costs scale with the total storage size of the log. Each log entry contains both a public key, and a signature from the CA. With larger public keys and signatures, the size of each log entry will grow.</t>
      <t>Additionally, as PKIs transition to shorter-lived certificates <xref target="CABF-153"/> <xref target="CABF-SC081"/>, the number of entries in the log will grow.</t>
      <t>This document introduces Merkle Tree Certificates (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>To bound growth, long-expired entries can be pruned from logs and mirrors without interrupting existing clients. This allows log sizes to scale by retention policies, not the lifetime of the log, even as certificate lifetimes decrease.</t>
        </li>
        <li>
          <t>After a processing delay, authenticating parties can obtain a second "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 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>
when, and only when, they appear in all capitals, as shown here.</t>
      <t>This document additionally uses the TLS presentation language defined in <xref section="3" sectionFormat="of" target="RFC8446"/>, as well as the notation defined in <xref section="2.1.1" sectionFormat="of" target="RFC9162"/>. It extends the numeric types defined in <xref section="3.3" sectionFormat="of" target="RFC8446"/> 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><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 an infrequent subset of tree sizes that can be used to predistribute trusted subtrees to relying parties for landmark-relative certificates.</t>
          </dd>
          <dt>Landmark subtree:</dt>
          <dd>
            <t>A subtree determined by a landmark. Landmark subtrees are common points of reference between relying parties and landmark-relative certificates.</t>
          </dd>
          <dt>Standalone certificate:</dt>
          <dd>
            <t>A certificate containing an inclusion proof to some subtree, and several cosignatures over that subtree.</t>
          </dd>
          <dt>Landmark-relative certificate:</dt>
          <dd>
            <t>An optimized certificate containing an inclusion proof to a landmark subtree, and no signatures.</t>
          </dd>
          <dt>Directly-signed certificate:</dt>
          <dd>
            <t>A certificate issued using the existing, non-MTC construction, where the TBSCertificate is passed directly to the private key's signing operation.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>In Certificate Transparency, a CA first certifies information by signing it, then submits the resulting certificate (or precertificate) to logs for logging. Merkle Tree Certificates invert this process: the CA certifies information by logging it, then submits the log to cosigners to verify log operation. A certificate is assembled from the result and proves the information is in the CA's log.</t>
      <figure anchor="fig-issuance-overview">
        <name>A diagram of the MTC issuance architecture, detailed below</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="528" width="544" viewBox="0 0 544 528" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,272" fill="none" stroke="black"/>
              <path d="M 8,352 L 8,480" fill="none" stroke="black"/>
              <path d="M 24,480 L 24,512" fill="none" stroke="black"/>
              <path d="M 72,80 L 72,112" fill="none" stroke="black"/>
              <path d="M 128,280 L 128,320" fill="none" stroke="black"/>
              <path d="M 256,32 L 256,272" fill="none" stroke="black"/>
              <path d="M 256,352 L 256,480" fill="none" stroke="black"/>
              <path d="M 272,384 L 272,512" fill="none" stroke="black"/>
              <path d="M 296,32 L 296,272" fill="none" stroke="black"/>
              <path d="M 296,352 L 296,464" fill="none" stroke="black"/>
              <path d="M 536,32 L 536,272" fill="none" stroke="black"/>
              <path d="M 536,352 L 536,464" fill="none" stroke="black"/>
              <path d="M 8,32 L 24,32" fill="none" stroke="black"/>
              <path d="M 232,32 L 256,32" fill="none" stroke="black"/>
              <path d="M 296,32 L 312,32" fill="none" stroke="black"/>
              <path d="M 504,32 L 536,32" fill="none" stroke="black"/>
              <path d="M 224,64 L 312,64" fill="none" stroke="black"/>
              <path d="M 72,160 L 96,160" fill="none" stroke="black"/>
              <path d="M 224,176 L 312,176" fill="none" stroke="black"/>
              <path d="M 40,224 L 104,224" fill="none" stroke="black"/>
              <path d="M 8,272 L 256,272" fill="none" stroke="black"/>
              <path d="M 296,272 L 536,272" fill="none" stroke="black"/>
              <path d="M 8,352 L 24,352" fill="none" stroke="black"/>
              <path d="M 240,352 L 256,352" fill="none" stroke="black"/>
              <path d="M 296,352 L 312,352" fill="none" stroke="black"/>
              <path d="M 400,352 L 536,352" fill="none" stroke="black"/>
              <path d="M 72,384 L 96,384" fill="none" stroke="black"/>
              <path d="M 256,384 L 272,384" fill="none" stroke="black"/>
              <path d="M 240,432 L 312,432" fill="none" stroke="black"/>
              <path d="M 40,448 L 104,448" fill="none" stroke="black"/>
              <path d="M 296,464 L 536,464" fill="none" stroke="black"/>
              <path d="M 8,480 L 256,480" fill="none" stroke="black"/>
              <path d="M 24,512 L 272,512" fill="none" stroke="black"/>
              <path d="M 72,384 L 104,448" fill="none" stroke="black"/>
              <path d="M 72,160 L 104,224" fill="none" stroke="black"/>
              <path d="M 156,280 L 176,320" fill="none" stroke="black"/>
              <path d="M 40,224 L 72,160" fill="none" stroke="black"/>
              <path d="M 80,320 L 100,280" fill="none" stroke="black"/>
              <path d="M 40,448 L 72,384" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="320,176 308,170.4 308,181.6" fill="black" transform="rotate(0,312,176)"/>
              <polygon class="arrowhead" points="248,432 236,426.4 236,437.6" fill="black" transform="rotate(180,240,432)"/>
              <polygon class="arrowhead" points="232,64 220,58.4 220,69.6" fill="black" transform="rotate(180,224,64)"/>
              <polygon class="arrowhead" points="184,320 172,314.4 172,325.6" fill="black" transform="rotate(63.43494882292201,176,320)"/>
              <polygon class="arrowhead" points="136,320 124,314.4 124,325.6" fill="black" transform="rotate(90,128,320)"/>
              <polygon class="arrowhead" points="88,320 76,314.4 76,325.6" fill="black" transform="rotate(116.56505117707799,80,320)"/>
              <polygon class="arrowhead" points="80,112 68,106.4 68,117.6" fill="black" transform="rotate(90,72,112)"/>
              <circle cx="48" cy="240" r="6" class="closeddot" fill="black"/>
              <circle cx="48" cy="464" r="6" class="closeddot" fill="black"/>
              <circle cx="64" cy="240" r="6" class="closeddot" fill="black"/>
              <circle cx="64" cy="464" r="6" class="closeddot" fill="black"/>
              <circle cx="80" cy="240" r="6" class="closeddot" fill="black"/>
              <circle cx="80" cy="464" r="6" class="closeddot" fill="black"/>
              <circle cx="96" cy="240" r="6" class="closeddot" fill="black"/>
              <circle cx="96" cy="464" r="6" class="closeddot" fill="black"/>
              <circle cx="384" cy="208" r="6" class="closeddot" fill="black"/>
              <g class="text">
                <text x="88" y="36">Certification</text>
                <text x="184" y="36">Authority</text>
                <text x="388" y="36">Authenticating</text>
                <text x="472" y="36">Party</text>
                <text x="36" y="68">2.</text>
                <text x="84" y="68">Validate</text>
                <text x="152" y="68">request</text>
                <text x="340" y="68">1.</text>
                <text x="384" y="68">Request</text>
                <text x="464" y="68">certificate</text>
                <text x="388" y="84">issuance</text>
                <text x="36" y="148">3.</text>
                <text x="64" y="148">Add</text>
                <text x="92" y="148">to</text>
                <text x="140" y="148">issuance</text>
                <text x="192" y="148">log</text>
                <text x="104" y="164">[</text>
                <text x="124" y="164">CA</text>
                <text x="164" y="164">cosign</text>
                <text x="200" y="164">]</text>
                <text x="340" y="180">5.</text>
                <text x="388" y="180">Download</text>
                <text x="476" y="180">certificates</text>
                <text x="432" y="212">tbscert</text>
                <text x="352" y="228">=</text>
                <text x="368" y="228">=</text>
                <text x="384" y="228">=</text>
                <text x="440" y="228">inclusion</text>
                <text x="504" y="228">proof</text>
                <text x="144" y="244">tbscert</text>
                <text x="208" y="244">entries</text>
                <text x="344" y="244">[</text>
                <text x="364" y="244">CA</text>
                <text x="384" y="244">]</text>
                <text x="452" y="244">cosignatures</text>
                <text x="312" y="260">[</text>
                <text x="348" y="260">mirror</text>
                <text x="384" y="260">]</text>
                <text x="212" y="308">4.</text>
                <text x="252" y="308">Submit</text>
                <text x="296" y="308">log</text>
                <text x="324" y="308">to</text>
                <text x="376" y="308">cosigners</text>
                <text x="240" y="324">for</text>
                <text x="308" y="324">cosignatures</text>
                <text x="68" y="356">Mirrors,</text>
                <text x="128" y="356">other</text>
                <text x="192" y="356">cosigners</text>
                <text x="356" y="356">Monitors</text>
                <text x="104" y="388">[</text>
                <text x="124" y="388">CA</text>
                <text x="164" y="388">cosign</text>
                <text x="200" y="388">]</text>
                <text x="104" y="404">[</text>
                <text x="140" y="404">mirror</text>
                <text x="196" y="404">cosign</text>
                <text x="232" y="404">]</text>
                <text x="340" y="436">6.</text>
                <text x="384" y="436">Monitor</text>
                <text x="428" y="436">CA</text>
                <text x="480" y="436">operation</text>
                <text x="80" y="500">...quorum</text>
                <text x="132" y="500">of</text>
                <text x="196" y="500">cosigners...</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+-- Certification Authority ---+    +--  Authenticating Party ----+
|                              |    |                             |
|  2. Validate request     <---+----+--  1. Request certificate   |
|       |                      |    |       issuance              |
|       |                      |    |                             |
|       V                      |    |                             |
|                              |    |                             |
|  3. Add to issuance log      |    |                             |
|       +---[ CA cosign ]      |    |                             |
|      / \                 ----+----+->  5. Download certificates |
|     /   \                    |    |                             |
|    /     \                   |    |          *  tbscert         |
|   +-------+                  |    |      = = =  inclusion proof |
|    * * * *  tbscert entries  |    |     [ CA ]  cosignatures    |
|                              |    | [ mirror ]                  |
+------------------------------+    +-----------------------------+
           /   |   \
          /    |    \    4. Submit log to cosigners
         V     V     V      for cosignatures

+-- Mirrors, other cosigners --+    +-- Monitors -----------------+
|                              |    |                             |
|       +---[ CA cosign ]      +-+  |                             |
|      / \  [ mirror cosign ]  | |  |                             |
|     /   \                    | |  |                             |
|    /     \                 <-+-+--+--  6. Monitor CA operation  |
|   +-------+                  | |  |                             |
|    * * * *                   | |  +-----------------------------+
+-+----------------------------+ |
  |  ...quorum of cosigners...   |
  +------------------------------+
]]></artwork>
        </artset>
      </figure>
      <t>Merkle Tree Certificates are issued as follows. <xref target="fig-issuance-overview"/> depicts this process.</t>
      <ol spacing="normal" type="1"><li>
          <t>The authenticating party requests a certificate, e.g. over ACME <xref target="RFC8555"/></t>
        </li>
        <li>
          <t>The CA validates each incoming issuance request, e.g. with ACME challenges. From there, the process differs.</t>
        </li>
        <li>
          <t>The CA operates a series of append-only <em>issuance logs</em> (<xref target="issuance-logs"/>). Unlike a CT log, these logs only contain entries added by the CA:  </t>
          <ol spacing="normal" type="a"><li>
              <t>The CA adds a TBSCertificateLogEntry (<xref target="log-entries"/>, abbreviated "tbscert entries" in the diagram) to an issuance log, describing the information it is certifying.</t>
            </li>
            <li>
              <t>The CA signs a <em>checkpoint</em>, which describes the current state of the log. A signed checkpoint certifies that the CA issued <em>every</em> entry in the Merkle Tree (<xref target="certification-authority-cosigners"/>).</t>
            </li>
            <li>
              <t>The CA additionally signs <em>subtrees</em> (<xref target="subtrees"/>) that together contain certificates added since the last checkpoint (<xref target="arbitrary-intervals"/>). This is an optimization to reduce inclusion proof sizes. A signed subtree certifies that the CA has issued <em>every</em> entry in the subtree.</t>
            </li>
          </ol>
        </li>
        <li>
          <t>The CA submits the new log state to <em>cosigners</em>. Cosigners validate the log is append-only and optionally provide additional services, such as mirroring its contents. They cosign the CA's checkpoints and subtrees.</t>
        </li>
        <li>
          <t>The CA now has enough information to construct a certificate and give it to the authenticating party. A certificate contains:  </t>
          <ul spacing="normal">
            <li>
              <t>The TBSCertificate being certified</t>
            </li>
            <li>
              <t>An inclusion proof from the TBSCertificate to some subtree</t>
            </li>
            <li>
              <t>Cosignatures from the CA and cosigners on the subtree</t>
            </li>
          </ul>
        </li>
        <li>
          <t>As in Certificate Transparency, monitors observe the CA's issuance logs to ensure the CA is operated correctly.</t>
        </li>
      </ol>
      <t>A certificate with cosignatures is known as a <em>standalone certificate</em>. Analogous to X.509 trust anchors and trusted CT logs, relying parties are configured with trusted cosigners (<xref target="trusted-cosigners"/>) that allow them to accept Merkle Tree certificates. The inclusion proof proves the TBSCertificate is part of some subtree, and cosignatures from trusted cosigners prove the subtree was certified by the CA and available to monitors. Where CT logs entire certificates, the issuance log's entries are smaller TBSCertificateLogEntry (<xref target="log-entries"/>) structures, which do not scale with public key or signature size.</t>
      <t>This same issuance process also produces a <em>landmark-relative certificate</em>. This is an optional, optimized certificate that avoids all cosignatures, including the CA signature. Landmark-relative certificates are available after a short period of time and usable with up-to-date relying parties.</t>
      <figure anchor="fig-landmark-cert-overview">
        <name>A diagram of landmark-relative certificate construction and usage, detailed below</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="416" width="488" viewBox="0 0 488 416" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,112" fill="none" stroke="black"/>
              <path d="M 8,192 L 8,384" fill="none" stroke="black"/>
              <path d="M 224,96 L 224,184" fill="none" stroke="black"/>
              <path d="M 272,32 L 272,112" fill="none" stroke="black"/>
              <path d="M 272,192 L 272,384" fill="none" stroke="black"/>
              <path d="M 296,48 L 296,112" fill="none" stroke="black"/>
              <path d="M 296,240 L 296,288" fill="none" stroke="black"/>
              <path d="M 296,320 L 296,368" fill="none" stroke="black"/>
              <path d="M 432,80 L 432,224" fill="none" stroke="black"/>
              <path d="M 464,48 L 464,112" fill="none" stroke="black"/>
              <path d="M 480,240 L 480,288" fill="none" stroke="black"/>
              <path d="M 480,320 L 480,368" fill="none" stroke="black"/>
              <path d="M 8,32 L 24,32" fill="none" stroke="black"/>
              <path d="M 232,32 L 272,32" fill="none" stroke="black"/>
              <path d="M 296,48 L 312,48" fill="none" stroke="black"/>
              <path d="M 448,48 L 464,48" fill="none" stroke="black"/>
              <path d="M 264,80 L 432,80" fill="none" stroke="black"/>
              <path d="M 32,96 L 72,96" fill="none" stroke="black"/>
              <path d="M 8,112 L 272,112" fill="none" stroke="black"/>
              <path d="M 296,112 L 464,112" fill="none" stroke="black"/>
              <path d="M 8,192 L 24,192" fill="none" stroke="black"/>
              <path d="M 208,192 L 272,192" fill="none" stroke="black"/>
              <path d="M 296,240 L 312,240" fill="none" stroke="black"/>
              <path d="M 440,240 L 480,240" fill="none" stroke="black"/>
              <path d="M 264,256 L 288,256" fill="none" stroke="black"/>
              <path d="M 296,288 L 480,288" fill="none" stroke="black"/>
              <path d="M 296,320 L 312,320" fill="none" stroke="black"/>
              <path d="M 432,320 L 480,320" fill="none" stroke="black"/>
              <path d="M 176,352 L 288,352" fill="none" stroke="black"/>
              <path d="M 296,368 L 480,368" fill="none" stroke="black"/>
              <path d="M 8,384 L 272,384" fill="none" stroke="black"/>
              <path d="M 52,56 L 72,96" fill="none" stroke="black"/>
              <path d="M 32,96 L 52,56" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="440,224 428,218.4 428,229.6" fill="black" transform="rotate(90,432,224)"/>
              <polygon class="arrowhead" points="296,352 284,346.4 284,357.6" fill="black" transform="rotate(0,288,352)"/>
              <polygon class="arrowhead" points="296,256 284,250.4 284,261.6" fill="black" transform="rotate(0,288,256)"/>
              <polygon class="arrowhead" points="232,184 220,178.4 220,189.6" fill="black" transform="rotate(90,224,184)"/>
              <g class="text">
                <text x="88" y="36">Certification</text>
                <text x="184" y="36">Authority</text>
                <text x="348" y="52">Update</text>
                <text x="408" y="52">Channel</text>
                <text x="92" y="84">1.</text>
                <text x="140" y="84">Allocate</text>
                <text x="216" y="84">landmarks</text>
                <text x="20" y="148">2.</text>
                <text x="52" y="148">Make</text>
                <text x="144" y="148">landmark-relative</text>
                <text x="324" y="148">3.</text>
                <text x="380" y="148">Distribute</text>
                <text x="52" y="164">cert</text>
                <text x="376" y="164">landmarks</text>
                <text x="92" y="196">Authenticating</text>
                <text x="176" y="196">Party</text>
                <text x="88" y="228">landmark-relative</text>
                <text x="180" y="228">cert</text>
                <text x="64" y="244">tbscert</text>
                <text x="364" y="244">Up-to-date</text>
                <text x="420" y="244">RP</text>
                <text x="72" y="260">inclusion</text>
                <text x="136" y="260">proof</text>
                <text x="172" y="260">to</text>
                <text x="220" y="260">landmark</text>
                <text x="340" y="260">landmark</text>
                <text x="404" y="260">hashes</text>
                <text x="336" y="276">trusted</text>
                <text x="408" y="276">cosigners</text>
                <text x="60" y="308">standalone</text>
                <text x="124" y="308">cert</text>
                <text x="64" y="324">tbscert</text>
                <text x="360" y="324">Unupdated</text>
                <text x="412" y="324">RP</text>
                <text x="72" y="340">inclusion</text>
                <text x="136" y="340">proof</text>
                <text x="332" y="340">(stale</text>
                <text x="372" y="340">or</text>
                <text x="396" y="340">no</text>
                <text x="440" y="340">hashes)</text>
                <text x="84" y="356">cosignatures</text>
                <text x="336" y="356">trusted</text>
                <text x="408" y="356">cosigners</text>
                <text x="180" y="404">4.</text>
                <text x="220" y="404">Select</text>
                <text x="296" y="404">certificate</text>
                <text x="356" y="404">by</text>
                <text x="380" y="404">RP</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+-- Certification Authority -----+
|                                |  +-- Update Channel --+
|    /\                          |  |                    |
|   /  \  1. Allocate landmarks -+--+----------------+   |
|  +----+                  |     |  |                |   |
+--------------------------+-----+  +----------------+---+
                           |                         |
 2. Make landmark-relative |           3. Distribute |
    cert                   |              landmarks  |
                           V                         |
+-- Authenticating Party --------+                   |
|                                |                   |
| landmark-relative cert         |                   V
|   tbscert                      |  +-- Up-to-date RP -----+
|   inclusion proof to landmark -+->| landmark hashes      |
|                                |  | trusted cosigners    |
|                                |  +----------------------+
| standalone cert                |
|   tbscert                      |  +-- Unupdated RP ------+
|   inclusion proof              |  | (stale or no hashes) |
|   cosignatures     ------------+->| trusted cosigners    |
|                                |  +----------------------+
+--------------------------------+
                     4. Select certificate by RP
]]></artwork>
        </artset>
      </figure>
      <t>Landmark-relative certificates are constructed and used as follows. <xref target="fig-landmark-cert-overview"/> depicts this process.</t>
      <ol spacing="normal" type="1"><li>
          <t>Periodically, the tree size of the CA's most recent checkpoint is designated as a <em>landmark</em>. This determines <em>landmark subtrees</em>, which are common points of reference between relying parties and landmark-relative certificates.</t>
        </li>
        <li>
          <t>Once some landmark includes the TBSCertificate, the landmark-relative certificate is constructed with:  </t>
          <ul spacing="normal">
            <li>
              <t>The TBSCertificate being certified</t>
            </li>
            <li>
              <t>An inclusion proof from the TBSCertificate to a landmark subtree</t>
            </li>
          </ul>
        </li>
        <li>
          <t>In the background, landmark subtrees are predistributed to relying parties, with cosignatures checked against relying party requirements. This occurs periodically in the background, separate from the application protocol.</t>
        </li>
        <li>
          <t>During the application protocol, such as TLS <xref target="RFC8446"/>, 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="subtree-test-vectors"/> provides 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. Note that, if <tt>start</tt> is zero, this second condition is always true.</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>
        <section anchor="example-subtree-inclusion-proofs">
          <name>Example Subtree Inclusion Proofs</name>
          <t>The inclusion proof for entry 10 of subtree <tt>[8, 13)</tt> contains the hashes <tt>MTH({d[11]})</tt>, <tt>MTH(D[8:10])</tt>, and <tt>MTH({d[12]})</tt>, depicted in  <xref target="fig-subtree-inclusion-proof"/>. <tt>MTH({d[10]})</tt> is not part of the proof because the verifier is assumed to already know its value.</t>
          <figure anchor="fig-subtree-inclusion-proof">
            <name>An example subtree inclusion proof</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="272" width="200" viewBox="0 0 200 272" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                  <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                  <path d="M 24,224 L 24,256" fill="none" stroke="black"/>
                  <path d="M 32,96 L 32,128" fill="none" stroke="black"/>
                  <path d="M 40,224 L 40,256" fill="none" stroke="black"/>
                  <path d="M 56,32 L 56,64" fill="none" stroke="black"/>
                  <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                  <path d="M 64,160 L 64,192" fill="none" stroke="black"/>
                  <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                  <path d="M 80,160 L 80,192" fill="none" stroke="black"/>
                  <path d="M 96,224 L 96,256" fill="none" stroke="black"/>
                  <path d="M 112,96 L 112,128" fill="none" stroke="black"/>
                  <path d="M 112,224 L 112,256" fill="none" stroke="black"/>
                  <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                  <path d="M 144,160 L 144,192" fill="none" stroke="black"/>
                  <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                  <path d="M 168,72 L 168,208" fill="none" stroke="black"/>
                  <path d="M 176,224 L 176,256" fill="none" stroke="black"/>
                  <path d="M 192,32 L 192,64" fill="none" stroke="black"/>
                  <path d="M 56,32 L 192,32" fill="none" stroke="black"/>
                  <path d="M 56,64 L 192,64" fill="none" stroke="black"/>
                  <path d="M 32,96 L 112,96" fill="none" stroke="black"/>
                  <path d="M 32,128 L 112,128" fill="none" stroke="black"/>
                  <path d="M 8,158 L 64,158" fill="none" stroke="black"/>
                  <path d="M 8,162 L 64,162" fill="none" stroke="black"/>
                  <path d="M 80,160 L 144,160" fill="none" stroke="black"/>
                  <path d="M 8,190 L 64,190" fill="none" stroke="black"/>
                  <path d="M 8,194 L 64,194" fill="none" stroke="black"/>
                  <path d="M 80,192 L 144,192" fill="none" stroke="black"/>
                  <path d="M 8,224 L 24,224" fill="none" stroke="black"/>
                  <path d="M 40,224 L 56,224" fill="none" stroke="black"/>
                  <path d="M 72,224 Q 74,220.8 76,224 Q 78,227.2 80,224 Q 82,220.8 84,224 Q 86,227.2 88,224 Q 90,220.8 92,224 Q 94,227.2 96,224 " fill="none" stroke="black"/>
                  <path d="M 112,222 L 136,222" fill="none" stroke="black"/>
                  <path d="M 112,226 L 136,226" fill="none" stroke="black"/>
                  <path d="M 152,222 L 176,222" fill="none" stroke="black"/>
                  <path d="M 152,226 L 176,226" fill="none" stroke="black"/>
                  <path d="M 8,256 L 24,256" fill="none" stroke="black"/>
                  <path d="M 40,256 L 56,256" fill="none" stroke="black"/>
                  <path d="M 72,256 Q 74,252.8 76,256 Q 78,259.2 80,256 Q 82,252.8 84,256 Q 86,259.2 88,256 Q 90,252.8 92,256 Q 94,259.2 96,256 " fill="none" stroke="black"/>
                  <path d="M 112,254 L 136,254" fill="none" stroke="black"/>
                  <path d="M 112,258 L 136,258" fill="none" stroke="black"/>
                  <path d="M 152,254 L 176,254" fill="none" stroke="black"/>
                  <path d="M 152,258 L 176,258" fill="none" stroke="black"/>
                  <g class="text">
                    <text x="112" y="52">[8,</text>
                    <text x="144" y="52">13)</text>
                    <text x="80" y="84">/</text>
                    <text x="56" y="116">[8,</text>
                    <text x="88" y="116">12)</text>
                    <text x="48" y="148">/</text>
                    <text x="104" y="148">\</text>
                    <text x="36" y="180">[8,10)</text>
                    <text x="112" y="180">[10,12)</text>
                    <text x="24" y="212">/</text>
                    <text x="40" y="212">\</text>
                    <text x="96" y="212">/</text>
                    <text x="112" y="212">\</text>
                    <text x="16" y="244">8</text>
                    <text x="48" y="244">9</text>
                    <text x="84" y="244">10</text>
                    <text x="124" y="244">11</text>
                    <text x="164" y="244">12</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
      +----------------+
      |     [8, 13)    |
      +----------------+
         /          |
   +---------+      |
   | [8, 12) |      |
   +---------+      |
     /      \       |
+======+ +-------+  |
|[8,10)| |[10,12)|  |
+======+ +-------+  |
  / \      / \      |
+-+ +-+ +~~+ +==+ +==+
|8| |9| |10| |11| |12|
+-+ +-+ +~~+ +==+ +==+
]]></artwork>
            </artset>
          </figure>
        </section>
        <section anchor="evaluating-a-subtree-inclusion-proof">
          <name>Evaluating a Subtree Inclusion Proof</name>
          <t>Given a subtree inclusion proof, <tt>inclusion_proof</tt>, for entry <tt>index</tt>, with hash <tt>entry_hash</tt>, of a subtree <tt>[start, end)</tt>, the subtree inclusion proof can be <em>evaluated</em> to compute the expected subtree hash:</t>
          <!-- If changing this procedure, remember to update {{inclusion-proof-evaluation-explain}} -->

<ol spacing="normal" type="1"><li>
              <t>Check that <tt>[start, end)</tt> is a valid subtree (<xref target="definition-of-a-subtree"/>), and that <tt>start &lt;= index &lt; end</tt>. If either do not hold, fail proof evaluation.</t>
            </li>
            <li>
              <t>Set <tt>fn</tt> to <tt>index - start</tt> and <tt>sn</tt> to <tt>end - start - 1</tt>.</t>
            </li>
            <li>
              <t>Set <tt>r</tt> to <tt>entry_hash</tt>.</t>
            </li>
            <li>
              <t>For each value <tt>p</tt> in the <tt>inclusion_proof</tt> array:  </t>
              <ol spacing="normal" type="1"><li>
                  <t>If <tt>sn</tt> is 0, then stop the iteration and fail proof evaluation.</t>
                </li>
                <li>
                  <t>If <tt>LSB(fn)</tt> is set, or if <tt>fn</tt> is equal to <tt>sn</tt>, then:      </t>
                  <ol spacing="normal" type="1"><li>
                      <t>Set <tt>r</tt> to <tt>HASH(0x01 || p || r)</tt>.</t>
                    </li>
                    <li>
                      <t>Until <tt>LSB(fn)</tt> is set, right-shift <tt>fn</tt> and <tt>sn</tt> equally.</t>
                    </li>
                  </ol>
                  <t>
Otherwise:      </t>
                  <ol spacing="normal" type="1"><li>
                      <t>Set <tt>r</tt> to <tt>HASH(0x01 || r || p)</tt>.</t>
                    </li>
                  </ol>
                </li>
                <li>
                  <t>Finally, right-shift both <tt>fn</tt> and <tt>sn</tt> one time.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>If <tt>sn</tt> is not zero, fail proof evaluation.</t>
            </li>
            <li>
              <t>Return <tt>r</tt> as the expected subtree hash.</t>
            </li>
          </ol>
          <t>This is the same as the procedure in <xref section="2.1.3.2" sectionFormat="of" target="RFC9162"/>, where <tt>leaf_index</tt> is <tt>index - start</tt>, <tt>tree_size</tt> is <tt>end - start</tt>, and <tt>r</tt> is returned instead of compared with <tt>root_hash</tt>.</t>
          <t><xref target="inclusion-proof-evaluation-explain"/> explains this procedure in more detail.</t>
        </section>
        <section anchor="verifying-a-subtree-inclusion-proof">
          <name>Verifying a Subtree Inclusion Proof</name>
          <t>Given a subtree inclusion proof, <tt>inclusion_proof</tt>, for entry <tt>index</tt>, with hash <tt>entry_hash</tt>, of a subtree <tt>[start, end)</tt> with hash <tt>subtree_hash</tt>, the subtree inclusion proof can be <em>verified</em> to verify the described entry is contained in the subtree:</t>
          <ol spacing="normal" type="1"><li>
              <t>Let <tt>expected_subtree_hash</tt> be the result of evaluating the inclusion proof as described <xref target="evaluating-a-subtree-inclusion-proof"/>. If evaluation fails, fail the proof verification.</t>
            </li>
            <li>
              <t>If <tt>subtree_hash</tt> is equal to <tt>expected_subtree_hash</tt>, the entry is contained in the subtree. Otherwise, fail the proof verification.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="subtree-consistency-proofs">
        <name>Subtree Consistency Proofs</name>
        <t>A subtree <tt>[start, end)</tt> can be efficiently proven to be consistent with the full Merkle Tree. That is, given <tt>MTH(D[start:end])</tt> and <tt>MTH(D_n)</tt>, the proof demonstrates that the input <tt>D[start:end]</tt> to the subtree hash was equal to the corresponding elements of the input <tt>D_n</tt> to the Merkle Tree hash.</t>
        <t>Subtree consistency proofs contain sufficient nodes to reconstruct both the subtree hash, <tt>MTH(D[start:end])</tt>, and the 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"/>, in terms of a helper function that tracks whether the subtree hash is known:</t>
          <sourcecode type="pseudocode"><![CDATA[
SUBTREE_PROOF(start, end, D_n) =
    SUBTREE_SUBPROOF(start, end, D_n, true)
]]></sourcecode>
          <t>If <tt>start = 0</tt> and <tt>end = n</tt>, the subtree is the root:</t>
          <sourcecode type="pseudocode"><![CDATA[
SUBTREE_SUBPROOF(0, n, D_n, true) = {}
SUBTREE_SUBPROOF(0, n, D_n, false) = {MTH(D_n)}
]]></sourcecode>
          <t>Otherwise, <tt>n &gt; 1</tt>. Let <tt>k</tt> be the largest power of two smaller than <tt>n</tt>. The consistency proof is defined recursively as:</t>
          <ul spacing="normal">
            <li>
              <t>If <tt>end &lt;= k</tt>, the subtree is on the left of <tt>k</tt>. The proof proves consistency with the left child and includes the right child:  </t>
              <sourcecode type="pseudocode"><![CDATA[
SUBTREE_SUBPROOF(start, end, D_n, b) =
    SUBTREE_SUBPROOF(start, end, D[0:k], b) : MTH(D[k:n])
]]></sourcecode>
            </li>
            <li>
              <t>If <tt>k &lt;= start</tt>, the subtree is on the right of <tt>k</tt>. The proof proves consistency with the right child and includes the left child.  </t>
              <sourcecode type="pseudocode"><![CDATA[
SUBTREE_SUBPROOF(start, end, D_n, b) =
    SUBTREE_SUBPROOF(start - k, end - k, D[k:n], b) : MTH(D[0:k])
]]></sourcecode>
            </li>
            <li>
              <t>Otherwise, <tt>start &lt; k &lt; end</tt>, which implies <tt>start = 0</tt>. The proof proves consistency with the right child and includes the left child.  </t>
              <sourcecode type="pseudocode"><![CDATA[
SUBTREE_SUBPROOF(0, end, D_n, b) =
    SUBTREE_SUBPROOF(0, end - k, D[k:n], false) : MTH(D[0:k])
]]></sourcecode>
            </li>
          </ul>
          <t>When <tt>start</tt> is zero, this computes a Merkle consistency proof:</t>
          <sourcecode type="pseudocode"><![CDATA[
SUBTREE_PROOF(0, end, D_n) = PROOF(end, D_n)
]]></sourcecode>
          <t>When <tt>end = start + 1</tt>, this computes a Merkle inclusion proof:</t>
          <sourcecode type="pseudocode"><![CDATA[
SUBTREE_PROOF(start, start + 1, D_n) = PATH(start, D_n)
]]></sourcecode>
          <t><xref target="consistency-proof-structure"/> explains the structure of a subtree consistency proof in more detail.</t>
        </section>
        <section anchor="example-subtree-consistency-proofs">
          <name>Example Subtree Consistency Proofs</name>
          <t>The subtree consistency proof for <tt>[4, 8)</tt> and a tree of size 14 contains <tt>MTH(D[0:4])</tt> and <tt>MTH(D[8:14])</tt>, depicted in <xref target="fig-subtree-consistency-example-1"/> 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 do not hold, fail proof verification. These checks imply <tt>0 &lt;= start &lt; end &lt;= n</tt>.</t>
            </li>
            <li>
              <t>Set <tt>fn</tt> to <tt>start</tt>, <tt>sn</tt> to <tt>end - 1</tt>, and <tt>tn</tt> to <tt>n - 1</tt>.</t>
            </li>
            <li>
              <t>If <tt>sn</tt> is <tt>tn</tt>, then:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>Until <tt>fn</tt> is <tt>sn</tt>, right-shift <tt>fn</tt>, <tt>sn</tt>, and <tt>tn</tt> equally.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>Otherwise:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>Until <tt>fn</tt> is <tt>sn</tt> or <tt>LSB(sn)</tt> is not set, right-shift <tt>fn</tt>, <tt>sn</tt>, and <tt>tn</tt> equally.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>If <tt>fn</tt> is <tt>sn</tt>, set <tt>fr</tt> and <tt>sr</tt> to <tt>node_hash</tt>.</t>
            </li>
            <li>
              <t>Otherwise:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>If <tt>proof</tt> is an empty array, stop and fail verification.</t>
                </li>
                <li>
                  <t>Remove the first value of the <tt>proof</tt> array and set <tt>fr</tt> and <tt>sr</tt> to the removed value.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>For each value <tt>c</tt> in the <tt>proof</tt> array:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>If <tt>tn</tt> is <tt>0</tt>, then stop the iteration and fail the proof verification.</t>
                </li>
                <li>
                  <t>If <tt>LSB(sn)</tt> is set, or if <tt>sn</tt> is equal to <tt>tn</tt>, then:
                  </t>
                  <ol spacing="normal" type="1"><li>
                      <t>If <tt>fn &lt; sn</tt>, set <tt>fr</tt> to <tt>HASH(0x01 || c || fr)</tt>.</t>
                    </li>
                    <li>
                      <t>Set <tt>sr</tt> to <tt>HASH(0x01 || c || sr)</tt>.</t>
                    </li>
                    <li>
                      <t>Until <tt>LSB(sn)</tt> is set, right-shift <tt>fn</tt>, <tt>sn</tt>, and <tt>tn</tt> equally.</t>
                    </li>
                  </ol>
                </li>
                <li>
                  <t>Otherwise:
                  </t>
                  <ol spacing="normal" type="1"><li>
                      <t>Set <tt>sr</tt> to <tt>HASH(0x01 || sr || c)</tt>.</t>
                    </li>
                  </ol>
                </li>
                <li>
                  <t>Right-shift <tt>fn</tt>, <tt>sn</tt>, and <tt>tn</tt> once more.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>Compare <tt>tn</tt> to <tt>0</tt>, <tt>fr</tt> to <tt>node_hash</tt>, and <tt>sr</tt> to <tt>root_hash</tt>. If any are not equal, fail the proof verification. If all are equal, accept the proof.</t>
            </li>
          </ol>
          <t><xref target="consistency-proof-verification-explain"/> explains this procedure in more detail.</t>
        </section>
      </section>
      <section anchor="arbitrary-intervals">
        <name>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 subtrees containing the intervals would suffice, the smallest subtree containing <tt>[start, end)</tt> may be much larger than <tt>[start, end)</tt>.</t>
        <t>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>This section defines a procedure for selecting up to two subtrees, given any non-empty interval (<tt>start &lt; end</tt>). Combined, the subtrees contain <tt>[start, end)</tt> with bounded excess elements. The procedure either returns <tt>[start, end)</tt> as a subtree, or two subtrees, <tt>left</tt> and <tt>right</tt>, that satisfy the following properties:</t>
          <ul spacing="normal">
            <li>
              <t>The two subtrees cover adjacent intervals. That is, <tt>left.end = right.start</tt>.</t>
            </li>
            <li>
              <t>The two subtrees together contain the entire interval <tt>[start, end)</tt>. There are no extra entries after <tt>end</tt>, but there may be extra entries before <tt>start</tt>. That is, <tt>left.start &lt;= start</tt> and <tt>end = right.end</tt>.</t>
            </li>
            <li>
              <t>The extra entries before <tt>start</tt> are less than half of <tt>left</tt>. That is, <tt>start - left.start &lt; left.end - start</tt>.</t>
            </li>
          </ul>
          <t>The subtrees are selected as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>If <tt>end - start</tt> is one, return a single subtree, <tt>[start, end)</tt>.</t>
            </li>
            <li>
              <t>Otherwise, run the following to return a pair of subtrees:  </t>
              <ol spacing="normal" type="1"><li>
                  <t>Let <tt>last</tt> be <tt>end - 1</tt>, the last index in <tt>[start, end)</tt>.</t>
                </li>
                <li>
                  <t>Let <tt>split</tt> be the bit index of the most significant bit where <tt>start</tt> and <tt>last</tt> differ. Bits are numbered from the least significant bit, starting at zero. <tt>split</tt> is the height at which <tt>start</tt> and <tt>last</tt>'s paths in the tree diverge.</t>
                </li>
                <li>
                  <t>Let <tt>mid</tt> be <tt>last</tt> with the least significant <tt>split</tt> bits set to zero. <tt>mid</tt> is the leftmost leaf node in the above divergence point's right branch.</t>
                </li>
                <li>
                  <t>Within the least significant <tt>split</tt> bits of <tt>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 list of one or two subtrees that efficiently
    cover [start, end). """
    assert start < end
    if end - start == 1:
        return [(start, end),]
    last = end - 1
    # Find where start and last's tree paths diverge. The two
    # subtrees will be on either side of the split.
    split = (start ^ last).bit_length() - 1
    mask = (1 << split) - 1
    mid = last & ~mask
    # Maximize the left endpoint. This is just before start's
    # path leaves the right edge of its new subtree.
    left_split = (~start & mask).bit_length()
    left_start = start & ~((1 << left_split) - 1)
    return [(left_start, mid), (mid, end)]
]]></sourcecode>
          <t><xref target="fig-subtree-pair-example"/> shows the subtrees which cover <tt>[5, 13)</tt> in a Merkle Tree of 13 elements 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 RECOMMENDED. 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 retry mechanism described <xref section="4.3" 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="5" 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 MAY define further allocations.</t>
        <t>A CA ID determines a PKIX distinguished name (<xref section="4.1.2.4" sectionFormat="of" target="RFC5280"/>) that can be used in the issuer or subject field of an X.509 TBSCertificate. This distinguished name has a single relative distinguished name, which has a single attribute. The attribute has type <tt>id-rdna-trustAnchorID</tt>, defined below:</t>
        <sourcecode type="asn.1"><![CDATA[
id-rdna-trustAnchorID OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) rdna(25) TBD }
]]></sourcecode>
        <t>The attribute's value is a RELATIVE-OID containing the trust anchor ID's ASN.1 representation. For example, the distinguished name for a CA with ID <tt>32473.1</tt> would be represented in syntax of <xref target="RFC4514"/> as:</t>
        <artwork><![CDATA[
1.3.6.1.5.5.7.25.TBD=#0d0481fd5901
]]></artwork>
        <t>For initial experimentation, early implementations of this design will:</t>
        <ol spacing="normal" type="1"><li>
            <t>Use UTF8String to represent the attribute's value rather than RELATIVE-OID. The UTF8String contains trust anchor ID's ASCII representation, e.g. <tt>32473.1</tt>.</t>
          </li>
          <li>
            <t>Use the OID 1.3.6.1.4.1.44363.47.1 instead of <tt>id-rdna-trustAnchorID</tt>.</t>
          </li>
        </ol>
        <t>For example, the distinguished name for a CA with ID <tt>32473.1</tt> would be represented in syntax of <xref target="RFC4514"/> as:</t>
        <artwork><![CDATA[
1.3.6.1.4.1.44363.47.1=#0c0733323437332e31
]]></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 <em>entries</em> (<xref target="log-entries"/>). Each entry is identified by an integer <em>index</em>, assigned consecutively starting from zero. Indices are at most 2<sup>48</sup>-1. 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>Each log additionally maintains a <em>minimum index</em> value, which is the index of the first log entry which is available. See <xref target="log-pruning"/>. This value changes over the lifetime of the log.</t>
        <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 MUST NOT append to any log that is not the current log. Logs before the current log may have historical entries. Logs after the current log MUST be empty. A CA MAY 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 a MerkleTreeCertEntry, defined with the TLS presentation syntax below. A MerkleTreeCertEntry describes certificate information that the CA has validated and certified.</t>
          <sourcecode type="tls-presentation"><![CDATA[
struct {} Empty;

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

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

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

struct {
    MerkleTreeCertEntryExtension extensions<0..2^16-1>;
    MerkleTreeCertEntryType type;
    select (type) {
       case null_entry: Empty;
       case tbs_cert_entry: opaque tbs_cert_entry_data[N];
       /* May be extended with future types. */
    }
} MerkleTreeCertEntry;
]]></sourcecode>
          <t>Field <tt>extensions</tt> is the list of tag-length-value extensions associated with the log entry. The extensions list MUST be appear in ascending order by <tt>extension_type</tt> and MUST NOT 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 MAY 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. A MerkleTreeCertEntry is expected to be decoded in contexts where the total length of the entry is known.</t>
          <t><tt>tbs_cert_entry_data</tt> contains the 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 MAY 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 MUST be marked non-critical. The <tt>IssuerAltName</tt> SEQUENCE MUST contain a single <tt>GeneralName</tt> of type <tt>directoryName</tt>, whose <tt>Name</tt> MUST use the <tt>rdnSequence</tt> CHOICE. Each <tt>RelativeDistinguishedName</tt> MUST contain a single <tt>AttributeTypeAndValue</tt>. The extension is purely cosmetic, and MUST NOT be used in path validation or any other trust decision. The value MUST NOT be assumed unique across issuance logs and MAY 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 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>MerkleTreeCertEntry is an extensible structure. Future documents may define new values for MerkleTreeCertEntryType or MerkleTreeCertEntryExtensionType, with corresponding semantics. See <xref target="certification-authority-cosigners"/> and <xref target="extensibility"/> for additional discussion.</t>
          <t>A MerkleTreeCertEntry's size SHOULD NOT exceed 65535 (2<sup>16</sup>-1) bytes. Doing so may exceed size limits in common log-serving protocols, such as <xref target="TLOG-TILES"/>. 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 may 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 SHOULD define log serving requirements, including the allowed protocols and expected availability, as part of their policies on which CAs to support. See also <xref target="log-availability"/>.</t>
          <t>For example, a log ecosystem could use <xref target="TLOG-TILES"/> to serve logs. <xref target="TLOG-TILES"/> improves on <xref target="RFC6962"/> and <xref target="RFC9162"/> by exposing the log as a collection of cacheable, immutable "tiles". This works well with a variety of common HTTP <xref target="RFC9110"/> serving architectures. It also allows log clients to request arbitrary tree nodes, so log clients can fetch the structures described in <xref target="subtrees"/>.</t>
        </section>
        <section anchor="log-pruning">
          <name>Log Pruning</name>
          <t>Over time, an issuance log's entries will expire and likely be replaced as certificates are renewed. As this happens, the total size of the log grows, even if the unexpired subset remains fixed. To mitigate this, issuance logs MAY be <em>pruned</em>, as described in this section.</t>
          <t>Pruning makes some prefix of the log unavailable, without changing the tree structure. It may be used to reduce the serving cost of long-lived logs, where any entries have long expired. <xref target="log-availability"/> discusses policies on when pruning may be permitted. This section discusses how it is done and the impact on log structure.</t>
          <t>An issuance log is pruned by updating its <em>minimum index</em> parameter (<xref target="issuance-logs"/>). The minimum index is the index of the first log entry that the log publishes. (See <xref target="publishing-logs"/>.) It MUST be less than or equal to the tree size of the log's current checkpoint, and also satisfy any availability policies set by relying parties who trust the CA.</t>
          <t>An entry is said to be <em>available</em> if its index is greater than or equal to the minimum index. A checkpoint is said to be available if its tree size is greater than the minimum index. A subtree <tt>[start, end)</tt> is said to be available if <tt>end</tt> is greater than the minimum index.</t>
          <t>Log protocols MUST serve enough information to allow a log client to efficiently obtain the following:</t>
          <ul spacing="normal">
            <li>
              <t>Signatures over the latest checkpoint by the CA's cosigners (<xref target="certification-authority-cosigners"/>)</t>
            </li>
            <li>
              <t>Any individual available log entry (<xref target="log-entries"/>)</t>
            </li>
            <li>
              <t>The hash value of any available checkpoint</t>
            </li>
            <li>
              <t>An inclusion proof (<xref section="2.1.3" sectionFormat="of" target="RFC9162"/>) for any available entry to any containing checkpoint</t>
            </li>
            <li>
              <t>A consistency proof (<xref section="2.1.4" sectionFormat="of" target="RFC9162"/>) between any two available checkpoints</t>
            </li>
            <li>
              <t>The hash value of any available subtree (<xref target="subtrees"/>)</t>
            </li>
            <li>
              <t>A subtree inclusion proof (<xref target="subtree-inclusion-proofs"/>) for any available entry in any containing subtree</t>
            </li>
            <li>
              <t>A subtree consistency proof (<xref target="subtree-consistency-proofs"/>) between any available subtree to any containing checkpoint</t>
            </li>
          </ul>
          <t>Meeting these requirements requires a log to retain some information about pruned entries. Given a node <tt>[start, end)</tt> in the Merkle Tree, if <tt>end</tt> is less than or equal to the minimum index, the node's children MAY be discarded in favor of the node's hash.</t>
          <t><xref target="fig-prune-tree"/> shows an example pruned tree with 13 elements, where the minimum index is 7. It shows the original tree, followed by the pruned tree. The pruned tree depicts the nodes that MUST be available or computable. Note that entry 6 MAY be discarded, only the hash of entry 6 must be available.</t>
          <figure anchor="fig-prune-tree">
            <name>An example showing the minimum nodes that must be available after pruning</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="672" width="456" viewBox="0 0 456 672" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                  <path d="M 8,288 L 8,320" fill="none" stroke="black"/>
                  <path d="M 24,288 L 24,320" fill="none" stroke="black"/>
                  <path d="M 32,160 L 32,192" fill="none" stroke="black"/>
                  <path d="M 32,496 L 32,528" fill="none" stroke="black"/>
                  <path d="M 40,288 L 40,320" fill="none" stroke="black"/>
                  <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                  <path d="M 56,288 L 56,320" fill="none" stroke="black"/>
                  <path d="M 64,96 L 64,128" fill="none" stroke="black"/>
                  <path d="M 64,432 L 64,464" fill="none" stroke="black"/>
                  <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                  <path d="M 72,288 L 72,320" fill="none" stroke="black"/>
                  <path d="M 88,288 L 88,320" fill="none" stroke="black"/>
                  <path d="M 104,160 L 104,192" fill="none" stroke="black"/>
                  <path d="M 104,288 L 104,320" fill="none" stroke="black"/>
                  <path d="M 104,496 L 104,528" fill="none" stroke="black"/>
                  <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                  <path d="M 120,288 L 120,320" fill="none" stroke="black"/>
                  <path d="M 136,32 L 136,64" fill="none" stroke="black"/>
                  <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                  <path d="M 136,288 L 136,320" fill="none" stroke="black"/>
                  <path d="M 136,368 L 136,400" fill="none" stroke="black"/>
                  <path d="M 136,560 L 136,592" fill="none" stroke="black"/>
                  <path d="M 152,288 L 152,320" fill="none" stroke="black"/>
                  <path d="M 160,160 L 160,192" fill="none" stroke="black"/>
                  <path d="M 160,496 L 160,528" fill="none" stroke="black"/>
                  <path d="M 168,288 L 168,320" fill="none" stroke="black"/>
                  <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                  <path d="M 184,288 L 184,320" fill="none" stroke="black"/>
                  <path d="M 184,560 L 184,592" fill="none" stroke="black"/>
                  <path d="M 200,96 L 200,128" fill="none" stroke="black"/>
                  <path d="M 200,224 L 200,256" fill="none" stroke="black"/>
                  <path d="M 200,288 L 200,320" fill="none" stroke="black"/>
                  <path d="M 200,432 L 200,464" fill="none" stroke="black"/>
                  <path d="M 200,560 L 200,592" fill="none" stroke="black"/>
                  <path d="M 200,624 L 200,656" fill="none" stroke="black"/>
                  <path d="M 216,288 L 216,320" fill="none" stroke="black"/>
                  <path d="M 216,624 L 216,656" fill="none" stroke="black"/>
                  <path d="M 232,160 L 232,192" fill="none" stroke="black"/>
                  <path d="M 232,288 L 232,320" fill="none" stroke="black"/>
                  <path d="M 232,496 L 232,528" fill="none" stroke="black"/>
                  <path d="M 232,624 L 232,656" fill="none" stroke="black"/>
                  <path d="M 248,224 L 248,256" fill="none" stroke="black"/>
                  <path d="M 248,288 L 248,320" fill="none" stroke="black"/>
                  <path d="M 248,560 L 248,592" fill="none" stroke="black"/>
                  <path d="M 248,624 L 248,656" fill="none" stroke="black"/>
                  <path d="M 264,224 L 264,256" fill="none" stroke="black"/>
                  <path d="M 264,288 L 264,320" fill="none" stroke="black"/>
                  <path d="M 264,560 L 264,592" fill="none" stroke="black"/>
                  <path d="M 264,624 L 264,656" fill="none" stroke="black"/>
                  <path d="M 280,288 L 280,320" fill="none" stroke="black"/>
                  <path d="M 280,624 L 280,656" fill="none" stroke="black"/>
                  <path d="M 288,160 L 288,192" fill="none" stroke="black"/>
                  <path d="M 288,496 L 288,528" fill="none" stroke="black"/>
                  <path d="M 296,288 L 296,320" fill="none" stroke="black"/>
                  <path d="M 296,624 L 296,656" fill="none" stroke="black"/>
                  <path d="M 312,96 L 312,128" fill="none" stroke="black"/>
                  <path d="M 312,288 L 312,320" fill="none" stroke="black"/>
                  <path d="M 312,432 L 312,464" fill="none" stroke="black"/>
                  <path d="M 312,624 L 312,656" fill="none" stroke="black"/>
                  <path d="M 320,224 L 320,256" fill="none" stroke="black"/>
                  <path d="M 320,560 L 320,592" fill="none" stroke="black"/>
                  <path d="M 328,288 L 328,320" fill="none" stroke="black"/>
                  <path d="M 328,624 L 328,656" fill="none" stroke="black"/>
                  <path d="M 336,224 L 336,256" fill="none" stroke="black"/>
                  <path d="M 336,560 L 336,592" fill="none" stroke="black"/>
                  <path d="M 352,288 L 352,320" fill="none" stroke="black"/>
                  <path d="M 352,624 L 352,656" fill="none" stroke="black"/>
                  <path d="M 368,160 L 368,192" fill="none" stroke="black"/>
                  <path d="M 368,288 L 368,320" fill="none" stroke="black"/>
                  <path d="M 368,496 L 368,528" fill="none" stroke="black"/>
                  <path d="M 368,624 L 368,656" fill="none" stroke="black"/>
                  <path d="M 376,32 L 376,64" fill="none" stroke="black"/>
                  <path d="M 376,368 L 376,400" fill="none" stroke="black"/>
                  <path d="M 392,288 L 392,320" fill="none" stroke="black"/>
                  <path d="M 392,624 L 392,656" fill="none" stroke="black"/>
                  <path d="M 400,224 L 400,256" fill="none" stroke="black"/>
                  <path d="M 400,560 L 400,592" fill="none" stroke="black"/>
                  <path d="M 408,288 L 408,320" fill="none" stroke="black"/>
                  <path d="M 408,624 L 408,656" fill="none" stroke="black"/>
                  <path d="M 424,136 L 424,272" fill="none" stroke="black"/>
                  <path d="M 424,472 L 424,608" fill="none" stroke="black"/>
                  <path d="M 432,288 L 432,320" fill="none" stroke="black"/>
                  <path d="M 432,624 L 432,656" fill="none" stroke="black"/>
                  <path d="M 448,96 L 448,128" fill="none" stroke="black"/>
                  <path d="M 448,432 L 448,464" fill="none" stroke="black"/>
                  <path d="M 136,32 L 376,32" fill="none" stroke="black"/>
                  <path d="M 136,64 L 376,64" fill="none" stroke="black"/>
                  <path d="M 64,96 L 200,96" fill="none" stroke="black"/>
                  <path d="M 312,96 L 448,96" fill="none" stroke="black"/>
                  <path d="M 64,128 L 200,128" fill="none" stroke="black"/>
                  <path d="M 312,128 L 448,128" fill="none" stroke="black"/>
                  <path d="M 32,160 L 104,160" fill="none" stroke="black"/>
                  <path d="M 160,160 L 232,160" fill="none" stroke="black"/>
                  <path d="M 288,160 L 368,160" fill="none" stroke="black"/>
                  <path d="M 32,192 L 104,192" fill="none" stroke="black"/>
                  <path d="M 160,192 L 232,192" fill="none" stroke="black"/>
                  <path d="M 288,192 L 368,192" fill="none" stroke="black"/>
                  <path d="M 8,224 L 56,224" fill="none" stroke="black"/>
                  <path d="M 72,224 L 120,224" fill="none" stroke="black"/>
                  <path d="M 136,224 L 184,224" fill="none" stroke="black"/>
                  <path d="M 200,224 L 248,224" fill="none" stroke="black"/>
                  <path d="M 264,224 L 320,224" fill="none" stroke="black"/>
                  <path d="M 336,224 L 400,224" fill="none" stroke="black"/>
                  <path d="M 8,256 L 56,256" fill="none" stroke="black"/>
                  <path d="M 72,256 L 120,256" fill="none" stroke="black"/>
                  <path d="M 136,256 L 184,256" fill="none" stroke="black"/>
                  <path d="M 200,256 L 248,256" fill="none" stroke="black"/>
                  <path d="M 264,256 L 320,256" fill="none" stroke="black"/>
                  <path d="M 336,256 L 400,256" fill="none" stroke="black"/>
                  <path d="M 8,286 L 24,286" fill="none" stroke="black"/>
                  <path d="M 8,290 L 24,290" fill="none" stroke="black"/>
                  <path d="M 40,286 L 56,286" fill="none" stroke="black"/>
                  <path d="M 40,290 L 56,290" fill="none" stroke="black"/>
                  <path d="M 72,286 L 88,286" fill="none" stroke="black"/>
                  <path d="M 72,290 L 88,290" fill="none" stroke="black"/>
                  <path d="M 104,286 L 120,286" fill="none" stroke="black"/>
                  <path d="M 104,290 L 120,290" fill="none" stroke="black"/>
                  <path d="M 136,286 L 152,286" fill="none" stroke="black"/>
                  <path d="M 136,290 L 152,290" fill="none" stroke="black"/>
                  <path d="M 168,286 L 184,286" fill="none" stroke="black"/>
                  <path d="M 168,290 L 184,290" fill="none" stroke="black"/>
                  <path d="M 200,286 L 216,286" fill="none" stroke="black"/>
                  <path d="M 200,290 L 216,290" fill="none" stroke="black"/>
                  <path d="M 232,286 L 248,286" fill="none" stroke="black"/>
                  <path d="M 232,290 L 248,290" fill="none" stroke="black"/>
                  <path d="M 264,286 L 280,286" fill="none" stroke="black"/>
                  <path d="M 264,290 L 280,290" fill="none" stroke="black"/>
                  <path d="M 296,286 L 312,286" fill="none" stroke="black"/>
                  <path d="M 296,290 L 312,290" fill="none" stroke="black"/>
                  <path d="M 328,286 L 352,286" fill="none" stroke="black"/>
                  <path d="M 328,290 L 352,290" fill="none" stroke="black"/>
                  <path d="M 368,286 L 392,286" fill="none" stroke="black"/>
                  <path d="M 368,290 L 392,290" fill="none" stroke="black"/>
                  <path d="M 408,286 L 432,286" fill="none" stroke="black"/>
                  <path d="M 408,290 L 432,290" fill="none" stroke="black"/>
                  <path d="M 8,318 L 24,318" fill="none" stroke="black"/>
                  <path d="M 8,322 L 24,322" fill="none" stroke="black"/>
                  <path d="M 40,318 L 56,318" fill="none" stroke="black"/>
                  <path d="M 40,322 L 56,322" fill="none" stroke="black"/>
                  <path d="M 72,318 L 88,318" fill="none" stroke="black"/>
                  <path d="M 72,322 L 88,322" fill="none" stroke="black"/>
                  <path d="M 104,318 L 120,318" fill="none" stroke="black"/>
                  <path d="M 104,322 L 120,322" fill="none" stroke="black"/>
                  <path d="M 136,318 L 152,318" fill="none" stroke="black"/>
                  <path d="M 136,322 L 152,322" fill="none" stroke="black"/>
                  <path d="M 168,318 L 184,318" fill="none" stroke="black"/>
                  <path d="M 168,322 L 184,322" fill="none" stroke="black"/>
                  <path d="M 200,318 L 216,318" fill="none" stroke="black"/>
                  <path d="M 200,322 L 216,322" fill="none" stroke="black"/>
                  <path d="M 232,318 L 248,318" fill="none" stroke="black"/>
                  <path d="M 232,322 L 248,322" fill="none" stroke="black"/>
                  <path d="M 264,318 L 280,318" fill="none" stroke="black"/>
                  <path d="M 264,322 L 280,322" fill="none" stroke="black"/>
                  <path d="M 296,318 L 312,318" fill="none" stroke="black"/>
                  <path d="M 296,322 L 312,322" fill="none" stroke="black"/>
                  <path d="M 328,318 L 352,318" fill="none" stroke="black"/>
                  <path d="M 328,322 L 352,322" fill="none" stroke="black"/>
                  <path d="M 368,318 L 392,318" fill="none" stroke="black"/>
                  <path d="M 368,322 L 392,322" fill="none" stroke="black"/>
                  <path d="M 408,318 L 432,318" fill="none" stroke="black"/>
                  <path d="M 408,322 L 432,322" fill="none" stroke="black"/>
                  <path d="M 136,368 L 376,368" fill="none" stroke="black"/>
                  <path d="M 136,400 L 376,400" fill="none" stroke="black"/>
                  <path d="M 64,432 L 200,432" fill="none" stroke="black"/>
                  <path d="M 312,432 L 448,432" fill="none" stroke="black"/>
                  <path d="M 64,464 L 200,464" fill="none" stroke="black"/>
                  <path d="M 312,464 L 448,464" fill="none" stroke="black"/>
                  <path d="M 32,496 L 104,496" fill="none" stroke="black"/>
                  <path d="M 160,496 L 232,496" fill="none" stroke="black"/>
                  <path d="M 288,496 L 368,496" fill="none" stroke="black"/>
                  <path d="M 32,528 L 104,528" fill="none" stroke="black"/>
                  <path d="M 160,528 L 232,528" fill="none" stroke="black"/>
                  <path d="M 288,528 L 368,528" fill="none" stroke="black"/>
                  <path d="M 136,560 L 184,560" fill="none" stroke="black"/>
                  <path d="M 200,560 L 248,560" fill="none" stroke="black"/>
                  <path d="M 264,560 L 320,560" fill="none" stroke="black"/>
                  <path d="M 336,560 L 400,560" fill="none" stroke="black"/>
                  <path d="M 136,592 L 184,592" fill="none" stroke="black"/>
                  <path d="M 200,592 L 248,592" fill="none" stroke="black"/>
                  <path d="M 264,592 L 320,592" fill="none" stroke="black"/>
                  <path d="M 336,592 L 400,592" fill="none" stroke="black"/>
                  <path d="M 200,624 L 216,624" fill="none" stroke="black"/>
                  <path d="M 232,622 L 248,622" fill="none" stroke="black"/>
                  <path d="M 232,626 L 248,626" fill="none" stroke="black"/>
                  <path d="M 264,622 L 280,622" fill="none" stroke="black"/>
                  <path d="M 264,626 L 280,626" fill="none" stroke="black"/>
                  <path d="M 296,622 L 312,622" fill="none" stroke="black"/>
                  <path d="M 296,626 L 312,626" fill="none" stroke="black"/>
                  <path d="M 328,622 L 352,622" fill="none" stroke="black"/>
                  <path d="M 328,626 L 352,626" fill="none" stroke="black"/>
                  <path d="M 368,622 L 392,622" fill="none" stroke="black"/>
                  <path d="M 368,626 L 392,626" fill="none" stroke="black"/>
                  <path d="M 408,622 L 432,622" fill="none" stroke="black"/>
                  <path d="M 408,626 L 432,626" fill="none" stroke="black"/>
                  <path d="M 200,656 L 216,656" fill="none" stroke="black"/>
                  <path d="M 232,654 L 248,654" fill="none" stroke="black"/>
                  <path d="M 232,658 L 248,658" fill="none" stroke="black"/>
                  <path d="M 264,654 L 280,654" fill="none" stroke="black"/>
                  <path d="M 264,658 L 280,658" fill="none" stroke="black"/>
                  <path d="M 296,654 L 312,654" fill="none" stroke="black"/>
                  <path d="M 296,658 L 312,658" fill="none" stroke="black"/>
                  <path d="M 328,654 L 352,654" fill="none" stroke="black"/>
                  <path d="M 328,658 L 352,658" fill="none" stroke="black"/>
                  <path d="M 368,654 L 392,654" fill="none" stroke="black"/>
                  <path d="M 368,658 L 392,658" fill="none" stroke="black"/>
                  <path d="M 408,654 L 432,654" fill="none" stroke="black"/>
                  <path d="M 408,658 L 432,658" fill="none" stroke="black"/>
                  <g class="text">
                    <text x="248" y="52">[0,</text>
                    <text x="280" y="52">13)</text>
                    <text x="160" y="84">/</text>
                    <text x="352" y="84">\</text>
                    <text x="120" y="116">[0,</text>
                    <text x="148" y="116">8)</text>
                    <text x="368" y="116">[8,</text>
                    <text x="400" y="116">13)</text>
                    <text x="72" y="148">/</text>
                    <text x="192" y="148">\</text>
                    <text x="336" y="148">/</text>
                    <text x="56" y="180">[0,</text>
                    <text x="84" y="180">4)</text>
                    <text x="184" y="180">[4,</text>
                    <text x="212" y="180">8)</text>
                    <text x="312" y="180">[8,</text>
                    <text x="344" y="180">12)</text>
                    <text x="40" y="212">/</text>
                    <text x="96" y="212">\</text>
                    <text x="168" y="212">/</text>
                    <text x="224" y="212">\</text>
                    <text x="304" y="212">/</text>
                    <text x="360" y="212">\</text>
                    <text x="32" y="244">[0,2)</text>
                    <text x="96" y="244">[2,4)</text>
                    <text x="160" y="244">[4,6)</text>
                    <text x="224" y="244">[6,8)</text>
                    <text x="292" y="244">[8,10)</text>
                    <text x="368" y="244">[10,12)</text>
                    <text x="24" y="276">/</text>
                    <text x="40" y="276">\</text>
                    <text x="88" y="276">/</text>
                    <text x="104" y="276">\</text>
                    <text x="152" y="276">/</text>
                    <text x="168" y="276">\</text>
                    <text x="216" y="276">/</text>
                    <text x="232" y="276">\</text>
                    <text x="280" y="276">/</text>
                    <text x="296" y="276">\</text>
                    <text x="352" y="276">/</text>
                    <text x="368" y="276">\</text>
                    <text x="16" y="308">0</text>
                    <text x="48" y="308">1</text>
                    <text x="80" y="308">2</text>
                    <text x="112" y="308">3</text>
                    <text x="144" y="308">4</text>
                    <text x="176" y="308">5</text>
                    <text x="208" y="308">6</text>
                    <text x="240" y="308">7</text>
                    <text x="272" y="308">8</text>
                    <text x="304" y="308">9</text>
                    <text x="340" y="308">10</text>
                    <text x="380" y="308">11</text>
                    <text x="420" y="308">12</text>
                    <text x="248" y="388">[0,</text>
                    <text x="280" y="388">13)</text>
                    <text x="160" y="420">/</text>
                    <text x="352" y="420">\</text>
                    <text x="120" y="452">[0,</text>
                    <text x="148" y="452">8)</text>
                    <text x="368" y="452">[8,</text>
                    <text x="400" y="452">13)</text>
                    <text x="72" y="484">/</text>
                    <text x="192" y="484">\</text>
                    <text x="336" y="484">/</text>
                    <text x="56" y="516">[0,</text>
                    <text x="84" y="516">4)</text>
                    <text x="184" y="516">[4,</text>
                    <text x="212" y="516">8)</text>
                    <text x="312" y="516">[8,</text>
                    <text x="344" y="516">12)</text>
                    <text x="168" y="548">/</text>
                    <text x="224" y="548">\</text>
                    <text x="304" y="548">/</text>
                    <text x="360" y="548">\</text>
                    <text x="160" y="580">[4,6)</text>
                    <text x="224" y="580">[6,8)</text>
                    <text x="292" y="580">[8,10)</text>
                    <text x="368" y="580">[10,12)</text>
                    <text x="216" y="612">/</text>
                    <text x="232" y="612">\</text>
                    <text x="280" y="612">/</text>
                    <text x="296" y="612">\</text>
                    <text x="352" y="612">/</text>
                    <text x="368" y="612">\</text>
                    <text x="208" y="644">6</text>
                    <text x="240" y="644">7</text>
                    <text x="272" y="644">8</text>
                    <text x="304" y="644">9</text>
                    <text x="340" y="644">10</text>
                    <text x="380" y="644">11</text>
                    <text x="420" y="644">12</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
                +-----------------------------+
                |            [0, 13)          |
                +-----------------------------+
                   /                       \
       +----------------+             +----------------+
       |     [0, 8)     |             |     [8, 13)    |
       +----------------+             +----------------+
        /              \                 /          |
   +--------+      +--------+      +---------+      |
   | [0, 4) |      | [4, 8) |      | [8, 12) |      |
   +--------+      +--------+      +---------+      |
    /      \        /      \         /      \       |
+-----+ +-----+ +-----+ +-----+ +------+ +-------+  |
|[0,2)| |[2,4)| |[4,6)| |[6,8)| |[8,10)| |[10,12)|  |
+-----+ +-----+ +-----+ +-----+ +------+ +-------+  |
  / \     / \     / \     / \     / \      / \      |
+=+ +=+ +=+ +=+ +=+ +=+ +=+ +=+ +=+ +=+ +==+ +==+ +==+
|0| |1| |2| |3| |4| |5| |6| |7| |8| |9| |10| |11| |12|
+=+ +=+ +=+ +=+ +=+ +=+ +=+ +=+ +=+ +=+ +==+ +==+ +==+


                +-----------------------------+
                |            [0, 13)          |
                +-----------------------------+
                   /                       \
       +----------------+             +----------------+
       |     [0, 8)     |             |     [8, 13)    |
       +----------------+             +----------------+
        /              \                 /          |
   +--------+      +--------+      +---------+      |
   | [0, 4) |      | [4, 8) |      | [8, 12) |      |
   +--------+      +--------+      +---------+      |
                    /      \         /      \       |
                +-----+ +-----+ +------+ +-------+  |
                |[4,6)| |[6,8)| |[8,10)| |[10,12)|  |
                +-----+ +-----+ +------+ +-------+  |
                          / \     / \      / \      |
                        +-+ +=+ +=+ +=+ +==+ +==+ +==+
                        |6| |7| |8| |9| |10| |11| |12|
                        +-+ +=+ +=+ +=+ +==+ +==+ +==+
]]></artwork>
            </artset>
          </figure>
          <t>Logs MAY retain additional nodes, or expect log clients to compute required nodes from other nodes. For example, in <xref target="fig-prune-tree"/>, the log's serving protocol MAY instead serve <tt>[0, 2)</tt> and <tt>[2, 4)</tt>, with the log client computing <tt>[0, 4)</tt> from those values.</t>
        </section>
      </section>
      <section anchor="cosigners">
        <name>Cosigners</name>
        <t>This section defines a log <em>cosigner</em>. A cosigner follows some append-only view of the log and signs subtrees (<xref target="subtrees"/>) consistent with that view. The signatures generated by a cosigner are known as <em>cosignatures</em>. All subtrees signed by a cosigner MUST be consistent with each other. The cosigner may be external to the log, in which case it might ensure consistency by checking consistency proofs. The cosigner may be operated together with the log, in which case it can trust its log state.</t>
        <t>A cosignature MAY implicitly make additional statements about a subtree, determined by the cosigner's role. This document defines one concrete cosigner role, a CA cosigner (<xref target="certification-authority-cosigners"/>), to authenticate the log and certify entries. Other documents and specific deployments may define other cosigner roles, to perform different functions in a PKI. For example, <xref target="TLOG-WITNESS"/> defines a cosigner that only checks the log is append-only, and <xref target="TLOG-MIRROR"/> defines a cosigner that mirrors a log.</t>
        <t>Each cosigner has a public key and a <em>cosigner ID</em>, which uniquely identifies the cosigner. The cosigner ID is a trust anchor ID <xref target="I-D.ietf-tls-trust-anchor-ids"/>. By identifying the cosigner, the cosigner ID specifies 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 MUST use a distinct cosigner ID and SHOULD use a distinct key.</t>
        <t>Following the principle of key separation <xref target="KeyReuse"/>, cosigner keys SHOULD NOT be used for purposes outside this document. Additional uses MAY be defined but MUST NOT 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, MAY generate cosignatures for multiple logs. In this case, signed subtrees only need to be consistent with others for the same log.</t>
        <section anchor="signature-format">
          <name>Signature Format</name>
          <t>A cosigner computes a <em>subtree signature</em> for a subtree in a log by signing a CosignedMessage, defined below using the TLS presentation language (<xref section="3" sectionFormat="of" target="RFC8446"/>):</t>
          <sourcecode type="tls-presentation"><![CDATA[
opaque HashValue[HASH_SIZE];

struct {
    uint8 label[12] = "subtree/v1\n\0";
    opaque cosigner_name<1..2^8-1>;
    uint64 timestamp;
    opaque log_origin<1..2^8-1>;
    uint64 start;
    uint64 end;
    HashValue subtree_hash;
} CosignedMessage;
]]></sourcecode>
          <t>This signature format is designed to be compatible with the ML-DSA-44 signature construction in <xref target="TLOG-COSIGNATURE"/>, but it supports signature algorithms other than ML-DSA-44 and tree hashes other than SHA-256.</t>
          <t><tt>label</tt> is a fixed prefix for domain separation. Its value MUST 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="3" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>)</t>
            </li>
          </ul>
          <t>This is equivalent to the concatenation of:</t>
          <ul spacing="normal">
            <li>
              <t>The four-byte ASCII string <tt>oid/</tt></t>
            </li>
            <li>
              <t>The trust anchor ID as a full OID, in dotted decimal notation</t>
            </li>
          </ul>
          <t>For example, the trust anchor ID 32473.1 would be encoded as the ASCII string <tt>oid/1.3.6.1.4.1.32473.1</tt>.</t>
          <t><tt>start</tt> and <tt>end</tt> MUST define a valid subtree of the log, and <tt>subtree_hash</tt> MUST be the subtree's hash value in the cosigner's view of the log.</t>
          <t>If <tt>timestamp</tt> is non-zero, it MUST 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 MUST be true:</t>
          <ul spacing="normal">
            <li>
              <t><tt>start</tt> MUST be zero.</t>
            </li>
            <li>
              <t><tt>end</tt> MUST be the size of the largest consistent tree that the cosigner has observed for the log.</t>
            </li>
          </ul>
          <t><tt>timestamp</tt> MAY be zero, in which case no additional constraints are placed on <tt>start</tt> or <tt>end</tt>, 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 MUST ensure that <tt>subtree_hash</tt> is consistent with its view of the log. Different cosigner roles may obtain this assurance differently. For example:</t>
          <ul spacing="normal">
            <li>
              <t>A cosigner may 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 may 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>
          </ul>
          <t>In both cases, the cosigner MUST ensure that, as it updates its view of the log, the old and new views are consistent. For example, <xref target="TLOG-WITNESS"/> defines a cosigner that checks consistency proofs (<xref section="2.1.4" sectionFormat="of" target="RFC9162"/>) between the two views.</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 with 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 MAY generate them, subject to the rules above, as part of other functions in a PKI. This may include 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 MUST deploy a new cosigner, with a new cosigner ID. Signature algorithms MUST fully specify the algorithm parameters, such as hash functions used.</t>
          <t>In this document, any PKIX signature algorithm MAY be used, such as the ML-DSA algorithms defined in <xref target="RFC9881"/>. The signature is generated as in PKIX, except that the input is the structure defined in <xref target="signature-format"/>. In particular, in ML-DSA algorithms, the context string MUST be an empty string, as in <xref section="3" sectionFormat="of" target="RFC9881"/>.</t>
          <t>Other documents or deployments MAY define other signature schemes and formats. Log clients that accept cosignatures from some cosigner are assumed to be configured with all parameters necessary to verify that cosigner's signatures, including the signature algorithm and version of the signature format.</t>
        </section>
      </section>
      <section anchor="certification-authority-cosigners">
        <name>Certification Authority Cosigners</name>
        <t>A <em>CA cosigner</em> is a cosigner (<xref target="cosigners"/>) that certifies the contents of a log. Each CA MUST operate a CA cosigner whose cosigner ID is the same as its CA ID (<xref target="ca-ids"/>). A CA cosigner MUST NOT 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 MAY freely certify <tt>null_entry</tt> without being held responsible for any validation.</t>
          </li>
          <li>
            <t>To certify an entry of type <tt>tbs_cert_entry</tt> is to certify the TBSCertificateLogEntry, as defined in <xref target="log-entries"/>.</t>
          </li>
        </ul>
        <t>Entries are extensible. Future documents MAY define <tt>type</tt> and <tt>extension_type</tt> values and what it means to certify them. A CA MUST NOT sign a subtree if it contains an entry with <tt>type</tt> 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 MAY 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 MUST be distinct from any Merkle Tree CA cosigner keys. In particular, a CA cosigner key MUST NOT 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 Certificate 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 MUST 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 MUST be the public key of the CA cosigner <xref target="certification-authority-cosigners"/>.</t>
          </li>
          <li>
            <t>The <tt>extensions</tt> field MUST contain a critical extension of type id-pe-mtcCertificationAuthority, defined below.</t>
          </li>
          <li>
            <t>The subject key identifier extension (<xref section="4.2.1.2" sectionFormat="of" target="RFC5280"/>), if present, SHOULD be set to the CA ID <xref target="ca-ids"/>. The CA ID is encoded in its binary representation, as defined in <xref section="3" 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"/>) MUST 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"/>) MUST be present and set the <tt>cA</tt> field to TRUE.</t>
          </li>
        </ul>
        <t>The id-pe-mtcCertificationAuthority extension is defined below. This extension indicates that the subject of the certificate is a CA that issues Merkle Tree Certificates. If present, it MUST be marked as critical.</t>
        <sourcecode type="asn.1"><![CDATA[
id-pe-mtcCertificationAuthority OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) pe(1) TBD }

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

-- From draft-ietf-tls-trust-anchor-ids
TrustAnchorID ::= RELATIVE-OID

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

MTCCertificationAuthority ::= SEQUENCE {
    logHash   AlgorithmIdentifier{DIGEST-ALGORITHM, {...}},
    sigAlg    AlgorithmIdentifier{SIGNATURE-ALGORITHM, {...}},
    minSerial INTEGER (0..mtcMaxSerial),
    maxSerial INTEGER (0..mtcMaxSerial)
}
]]></sourcecode>
        <t>For initial experimentation, early implementations of this design will use the OID 1.3.6.1.4.1.44363.47.2 instead of <tt>id-pe-mtcCertificationAuthority</tt>.</t>
        <t>The fields of a MTCCertificationAuthority structure are defined as follows:</t>
        <ul spacing="normal">
          <li>
            <t><tt>logHash</tt> describes the hash algorithm used by all logs operated by this CA. For example, if the hash is SHA-256, it would be <tt>mda-sha256</tt> as defined in <xref section="8" sectionFormat="of" target="RFC5912"/>.</t>
          </li>
          <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 MUST NOT 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 SHOULD be represented in CA certificates with a new extension type.</t>
        <t>A CA certificate using this format SHOULD NOT be self-signed by the Merkle Tree Certificate CA. Doing so would require writing the information in the issuance log. Instead, if used to represent a trust anchor, the certificate should 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 the issuance log (<xref target="issuance-logs"/>)</t>
          </li>
          <li>
            <t>A subject public key whose hash matches the TBSCertificateLogEntry</t>
          </li>
          <li>
            <t>A subtree (<xref target="subtrees"/>) that contains the log entry</t>
          </li>
          <li>
            <t>Zero or more signatures (<xref target="cosigners"/>) over the subtree, which together satisfy relying party requirements (<xref target="trusted-cosigners"/>)</t>
          </li>
        </ul>
        <t>For any given TBSCertificateLogEntry, there are multiple possible certificates that may prove the entry is certified by the CA and publicly logged, varying by choice of subtree and signatures. <xref target="certificate-format"/> defines how the certificate is constructed based on those choices. <xref target="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> MUST 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 MUST be absent in the TBSCertificate. Per <xref target="log-entries"/>, this means <tt>issuer</tt> MUST 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> MUST 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 MUST match the TBSCertificateLogEntry's <tt>subjectPublicKeyAlgorithm</tt>. Its hash MUST match the TBSCertificateLogEntry's <tt>subjectPublicKeyInfoHash</tt>.</t>
        <t>The TBSCertificate's <tt>signature</tt> and the Certificate's <tt>signatureAlgorithm</tt> MUST contain an AlgorithmIdentifier whose <tt>algorithm</tt> is id-alg-mtcProof, defined below, and whose <tt>parameters</tt> is omitted.</t>
        <sourcecode type="asn.1"><![CDATA[
id-alg-mtcProof OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) algorithms(6) TBD }
]]></sourcecode>
        <t>For initial experimentation, early implementations of this design will use the OID 1.3.6.1.4.1.44363.47.0 instead of <tt>id-alg-mtcProof</tt>.</t>
        <t>The <tt>signatureValue</tt> contains an MTCProof structure, defined below using the TLS presentation language (<xref section="3" sectionFormat="of" target="RFC8446"/>):</t>
        <sourcecode type="tls-presentation"><![CDATA[
/* From Section 4.1 of draft-ietf-tls-trust-anchor-ids */
opaque TrustAnchorID<1..2^8-1>;

opaque HashValue[HASH_SIZE];

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

struct {
    MerkleTreeCertEntryExtension extensions<0..2^16-1>;
    uint48 start;
    uint48 end;
    HashValue inclusion_proof<0..2^16-1>;
    MTCSignature signatures<0..2^16-1>;
} MTCProof;
]]></sourcecode>
        <t><tt>extensions</tt> MUST contain the log entry's <tt>extensions</tt> value (<xref target="log-entries"/>).</t>
        <t><tt>start</tt> and <tt>end</tt> MUST contain the corresponding parameters of the chosen subtree. <tt>inclusion_proof</tt> MUST contain a subtree inclusion proof (<xref target="subtree-inclusion-proofs"/>) for the log entry and the subtree. <tt>signatures</tt> contains the chosen subtree signatures. In each signature, <tt>cosigner_id</tt> contains the cosigner ID (<xref target="cosigners"/>) in its binary representation (<xref section="3" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>), and <tt>signature</tt> contains the signature value as described in <xref target="signature-format"/>. The <tt>timestamp</tt> field used when computing the signature MUST be zero.</t>
        <t>Each element of the <tt>signatures</tt> field MUST have a unique <tt>cosigner_id</tt>. Elements MUST 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 MUST reject the input if there are duplicate <tt>cosigner_id</tt> values, or if they are not ordered correctly. This can be done by checking each <tt>cosigner_id</tt> value comes strictly after the previous one in the above order.</t>
        <t>The MTCProof is encoded into the <tt>signatureValue</tt> with no additional ASN.1 wrapping. The most significant bit of the first octet of the signature value SHALL become the first bit of the bit string, and so on through the least significant bit of the last octet of the signature value, which SHALL become the last bit of the bit string.</t>
      </section>
      <section anchor="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 checkpoint cosignatures (<xref target="cosigners"/>) from external cosigners to meet relying party requirements (<xref target="trusted-cosigners"/>).</t>
          </li>
          <li>
            <t>The CA requests subtree cosignatures from the cosigners above.</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 5.</t>
          </li>
        </ol>
        <t>Steps 4 and 5 are analogous to requesting SCTs from CT logs in Certificate Transparency, except that a single run of this job collects signatures for many certificates at once. The CA MAY request signatures from a redundant set of cosigners and select the ones that complete first.</t>
        <t>This document does not place any requirements on how frequently this job runs. More frequent runs results in lower issuance delay, but higher signing overhead. It is RECOMMENDED that CAs run at most one instance of this job at a time, starting the next instance after the previous one completes. A single run collects signatures for all entries since the most recent checkpoint, so there is little benefit to overlapping them. Less frequent runs may also aid relying parties that wish to directly audit signatures, as described in Section 5.2 of <xref target="AuditingRevisited"/>, though this document does not define such a system.</t>
        <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 RECOMMENDED that the CA collect cosignatures for the authenticating party, but the authenticating party MAY collect additional cosignatures and add them to the certificate.</t>
      </section>
      <section anchor="landmark-relative-certificates">
        <name>Landmark-Relative Certificates</name>
        <t>A <em>landmark-relative certificate</em> is a Merkle Tree certificate which contains no signatures and instead assumes the relying party had predistributed information about which subtrees were trusted. Landmark-relative certificates are an optional size optimization. They require a processing delay to construct, and only work in a sufficiently up-to-date relying party. Authenticating parties thus SHOULD 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="RFC8446"/>.</t>
        <section anchor="landmark-tree-sizes">
          <name>Landmark Tree Sizes</name>
          <t>To issue landmark-relative certificates, a CA must additionally maintain a <em>landmark sequence</em>, which is a sequence of <em>landmarks</em>.</t>
          <t>Each landmark specifies a tree size, used as a common point of reference across the ecosystem for optimizing certificates. Landmarks are numbered consecutively from zero. The first landmark, numbered zero, MUST have a tree size of zero. The sequence of tree sizes MUST be append-only and strictly monotonically increasing.</t>
          <t>Landmarks determine <em>landmark subtrees</em>: for each landmark, other than number zero, let <tt>tree_size</tt> be the landmark's tree size and <tt>prev_tree_size</tt> be that of the previous landmark. As described in <xref target="arbitrary-intervals"/>, select the one or two subtrees that cover <tt>[prev_tree_size, tree_size)</tt>. Each of those subtrees is a landmark subtree. Landmark zero has no landmark subtrees.</t>
          <t>As the issuance log grows, CAs continuously allocate new landmarks. This allocation balances minimizing landmark-relative certificate delay with minimizing the size of the relying party's predistributed state. To bound the latter, each CA sets a positive integer <tt>max_active_landmarks</tt> parameter, which is the maximum number of landmarks that may contain unexpired certificates at any time.</t>
          <t>The most recent <tt>max_active_landmarks</tt> landmarks are said to be <em>active</em>. Landmarks MUST be allocated such that, at any given time, only active landmarks contain unexpired certificates. The active landmark subtrees are those determined by the active landmarks. There are at most <tt>2 * max_active_landmarks</tt> active landmark subtrees at any time. Every unexpired entry will be contained in one or more landmark subtree, or between the last landmark subtree and the latest checkpoint. Active landmark subtrees are predistributed to the relying party as trusted subtrees, as described in <xref target="trusted-subtrees"/>.</t>
          <t>It is RECOMMENDED that landmarks be allocated following the procedure described in <xref target="allocating-landmarks"/>. If landmarks are allocated incorrectly (e.g. past landmarks change, or <tt>max_active_landmarks</tt> is inaccurate), there are no security consequences, but some older certificates may fail to validate.</t>
          <t>Relying parties will locally retain up to <tt>2 * max_active_landmarks</tt> hashes (<xref target="trusted-subtrees"/>) per CA, so <tt>max_active_landmarks</tt> should be set to balance the delay between landmarks and the amount of state the relying party must maintain. Using the recommended procedure below, a CA with a maximum certificate lifetime of 7 days, allocating a landmark every hour, will have a <tt>max_active_landmarks</tt> of 169. The client state is then 338 hashes, or 10,816 bytes with SHA-256.</t>
        </section>
        <section anchor="allocating-landmarks">
          <name>Allocating Landmarks</name>
          <t>It is RECOMMENDED that landmarks be allocated using the following procedure:</t>
          <ol spacing="normal" type="1"><li>
              <t>Select some <tt>time_between_landmarks</tt> duration. Define a series of consecutive, non-overlapping time intervals, each of duration <tt>time_between_landmarks</tt>.</t>
            </li>
            <li>
              <t>At most once per time interval, append the latest checkpoint tree size to the landmark sequence if it is greater than the last landmark's tree size.</t>
            </li>
          </ol>
          <t>To ensure that only active landmarks contain unexpired certificates, set <tt>max_active_landmarks</tt> to <tt>ceil(max_cert_lifetime / time_between_landmarks) + 1</tt>, where <tt>max_cert_lifetime</tt> is the CA's maximum certificate lifetime. The <tt>+ 1</tt> accounts for landmarks not allocated at the exact start of their time interval, which can push certificate expiry one interval further than <tt>ceil(max_cert_lifetime / time_between_landmarks)</tt> alone would bound.</t>
        </section>
        <section anchor="publishing-landmarks">
          <name>Publishing Landmarks</name>
          <t>CAs SHOULD publish their active landmarks, so that relying parties can configure trusted subtrees (<xref target="trusted-subtrees"/>). The following format can be used to describe this information. The format is the following sequence of lines. Each line MUST be terminated by a newline character (U+000A):</t>
          <ul spacing="normal">
            <li>
              <t>Two space-separated non-negative decimal integers: <tt>&lt;last_landmark&gt; &lt;num_active_landmarks&gt;</tt>.
This line MUST satisfy the following, otherwise it is invalid:
              </t>
              <ul spacing="normal">
                <li>
                  <t><tt>num_active_landmarks &lt;= max_active_landmarks</tt></t>
                </li>
                <li>
                  <t><tt>num_active_landmarks &lt;= last_landmark</tt></t>
                </li>
              </ul>
            </li>
            <li>
              <t><tt>num_active_landmarks + 1</tt> lines each containing a single non-negative decimal integer, containing a tree size. Numbered from zero to <tt>num_active_landmarks</tt>, line <tt>i</tt> contains the tree size for landmark <tt>last_landmark - i</tt>. The integers MUST be strictly monotonically decreasing and lower or equal to the log's latest tree size.</t>
            </li>
          </ul>
          <t>It is RECOMMENDED that this format be published as an HTTP resource <xref target="RFC9110"/> with content type <tt>text/plain; charset=utf-8</tt>.</t>
        </section>
        <section anchor="constructing-landmark-relative-certificates">
          <name>Constructing Landmark-Relative Certificates</name>
          <t>Given the inputs in <xref target="certificate-inputs"/> and a landmark sequence, a landmark-relative certificate is constructed as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Wait for the first landmark to be allocated that contains the entry.</t>
            </li>
            <li>
              <t>Determine the landmark's subtrees and select the one that contains the entry.</t>
            </li>
            <li>
              <t>Construct a certificate (<xref target="certificate-format"/>) using the selected subtree and no signatures.</t>
            </li>
          </ol>
          <t>Before sending this certificate, the authenticating party SHOULD obtain an application-protocol-specific signal that implies the relying party has been configured with the corresponding landmark. (<xref target="trusted-subtrees"/> defines how relying parties are configured.) The trust anchor ID of the landmark may be used as an efficient identifier in the application protocol. <xref target="use-in-tls"/> discusses how to do this in TLS <xref target="RFC8446"/>.</t>
        </section>
      </section>
      <section anchor="size-estimates">
        <name>Size Estimates</name>
        <t>The inclusion proofs in 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 June 9th, 2025:</t>
        <ul spacing="normal">
          <li>
            <t><xref target="LetsEncrypt"/> reported around 558,000,000 active certificates for a single CA</t>
          </li>
          <li>
            <t><xref target="MerkleTown"/> reported around 2,100,000,000 unexpired certificates in CT logs, across all CAs</t>
          </li>
          <li>
            <t><xref target="MerkleTown"/> reported an issuance rate of around 444,000 certificates per hour, across all CAs</t>
          </li>
        </ul>
        <t>The current issuance rate across the Web PKI may not necessarily be representative of the Web PKI after a transition to short-lived certificates. Assuming a certificate lifetime of 7 days, and that subscribers will update their certificates 75% of the way through their lifetime (see <xref target="certificate-renewal"/>), every certificate will be reissued every 126 hours. This gives issuance rate estimates of around 4,400,000 certificates per hour and 17,000,000 certificates per hour, for the first two values above. Note the larger estimate is across all CAs, while subtrees would only span one CA.</t>
        <t>Using the per-CA short lifetime estimate, if the CA mints a checkpoint every 2 seconds, standalone certificate subtrees will span around 2,500 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 4,400,000 certificates, leading to 23 hashes in the inclusion proof, giving an inclusion proof size of 736 bytes, with no signatures. This is significantly smaller than a single ML-DSA-44 signature, 2,420 bytes, and almost ten times smaller than the three ML-DSA-44 signatures necessary to include post-quantum SCTs.</t>
        <t>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 MUST be configured with:</t>
        <ul spacing="normal">
          <li>
            <t>The CA's ID (<xref target="ca-ids"/>)</t>
          </li>
          <li>
            <t>The CA's log hash algorithm, e.g. SHA-256</t>
          </li>
          <li>
            <t>The CA cosigner, and any other supported cosigners, as pairs of cosigner ID and public key</t>
          </li>
          <li>
            <t>A policy on which combinations of cosigners to accept in a certificate (<xref target="trusted-cosigners"/>)</t>
          </li>
          <li>
            <t>An optional list of trusted subtrees that are known to be consistent with the relying party's cosigner requirements (<xref target="trusted-subtrees"/>)</t>
          </li>
          <li>
            <t>A list of revoked ranges of serial numbers (<xref target="revoked-ranges"/>)</t>
          </li>
        </ul>
        <t>This information may be obtained from a CA certificate structure, defined in <xref target="representing-certification-authorities"/>:</t>
        <ul spacing="normal">
          <li>
            <t>The CA ID is determined from the certificate's subject.</t>
          </li>
          <li>
            <t>The log hash algorithm is determined from the id-pe-mtcCertificationAuthority extension.</t>
          </li>
          <li>
            <t>The CA cosigner is determined from the certificate's subject public key and id-pe-mtcCertificationAuthority 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 MAY 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 MAY 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 a MerkleTreeCertEntry 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> matches 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 MUST be ignored.  </t>
            <t>
Signatures are verified as described in <xref target="signature-format"/>. For each signature verification, the CosignedMessage structure is constructed as follows:  </t>
            <ol spacing="normal" type="1"><li>
                <t>Set the CosignedMessage's <tt>cosigner_name</tt> based on the cosigner ID as described in <xref target="signature-format"/>.</t>
              </li>
              <li>
                <t>Set the CosignedMessage's <tt>timestamp</tt> to zero.</t>
              </li>
              <li>
                <t>Set the CosignedMessage's <tt>log_origin</tt> based on <tt>log_id</tt> as described in <xref target="signature-format"/>.</t>
              </li>
              <li>
                <t>Set the CosignedMessage's <tt>start</tt> and <tt>end</tt> to the MTCProof's <tt>start</tt> and <tt>end</tt>, respectively.</t>
              </li>
              <li>
                <t>Set the CosignedMessage's <tt>subtree_hash</tt> to <tt>expected_subtree_hash</tt>.</t>
              </li>
            </ol>
          </li>
        </ol>
        <t>This procedure only replaces the signature verification portion of X.509 path validation. The relying party MUST 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 MerkleTreeCertEntry 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 MAY implement policies other than those described below, and MAY incorporate cosigners acting in roles not described in this document.</t>
        <t>In picking trusted cosigners, the relying party SHOULD ensure the following security properties:</t>
        <dl>
          <dt>Authenticity:</dt>
          <dd>
            <t>The relying party only accepts entries certified by the CA</t>
          </dd>
          <dt>Transparency:</dt>
          <dd>
            <t>The relying party only accepts entries that are publicly accessible, so that monitors, particularly the subject of the certificate, can notice any unauthorized certificates</t>
          </dd>
        </dl>
        <t>Relying parties SHOULD ensure authenticity by requiring a signature from the 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 SHOULD ensure transparency by requiring a quorum of signatures from additional cosigners. At minimum, these cosigners SHOULD enforce a consistent view of the log. For example, <xref target="TLOG-WITNESS"/> describes a lightweight "witness" cosigner role that checks this with consistency proofs. This is not sufficient to ensure durable logging. <xref target="revoked-ranges"/> discusses mitigations for this. Alternatively, a relying party MAY 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 MAY accept the same set of additional cosigners across CAs.</t>
        <t>In applications that do not enforce transparency requirements, a relying party MAY 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 MAY 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 MAY incorporate a periodically updated, predistributed list of trusted subtrees from the CA's current issuance log. 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 given log are determined by its active landmark subtrees, as described in <xref target="landmark-tree-sizes"/>. Before configuring the subtrees as trusted, the relying party MUST obtain assurance that each subtree is consistent with checkpoints observed by a sufficient set of cosigners (see <xref target="cosigners"/>) to meet its cosigner requirements. It is not necessary that the cosigners have generated signatures over the specific subtrees, only that they are consistent.</t>
        <t>This criteria can be checked given:</t>
        <ul spacing="normal">
          <li>
            <t>Some <em>reference checkpoint</em> that contains the latest landmark</t>
          </li>
          <li>
            <t>For each cosigner, either:
            </t>
            <ul spacing="normal">
              <li>
                <t>A cosignature on the reference checkpoint</t>
              </li>
              <li>
                <t>A cosigned checkpoint containing the referenced checkpoint and a valid Merkle consistency proof (<xref section="2.1.4" sectionFormat="of" target="RFC9162"/>) between the two</t>
              </li>
            </ul>
          </li>
          <li>
            <t>For each subtree, a valid subtree consistency proof (<xref target="subtree-consistency-proofs"/>) between the subtree and the reference checkpoint</t>
          </li>
        </ul>
        <t>[[TODO: The subtree consistency proofs have many nodes in common. It is possible to define a single "bulk consistency proof" that verifies all the hashes at once, but it's a lot more complex.]]</t>
        <t>This document does not prescribe how relying parties obtain this information. A relying party MAY, for example, use an application-specific update service, such as the services described in <xref target="CHROMIUM"/> and <xref target="FIREFOX"/>. If the relying party considers the service sufficiently trusted (e.g. if the service provides the trust anchor list or certificate validation software), it MAY trust the update service to perform these checks.</t>
        <t>The relying party SHOULD incorporate its trusted subtree configuration in application-protocol-specific certificate selection mechanisms, to allow an authenticating party to select a 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="RFC8446"/>.</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. A serial number combines a log number and a log index. A relying party can thus efficiently revoke both ranges of entries of an issuance log, and ranges of issuance logs, even if the contents are not necessarily known. This may be used to mitigate the security consequences of misbehavior by a CA, or other parties in the ecosystem.</t>
        <t>When a relying party is first configured to trust an issuance log, it SHOULD be configured to revoke all entries from zero up to but not including the first available unexpired certificate at the time. This revocation SHOULD be periodically updated as entries expire and logs are pruned (<xref target="log-pruning"/>). In particular, when CAs prune entries, relying parties SHOULD be updated to revoke all newly unavailable entries. This gives assurance that, even if some unavailable entry had not yet expired, the relying party will not trust it. It also allows monitors to start monitoring a log without processing expired entries. If using the format defined in <xref target="representing-certification-authorities"/>, this can be configured with the <tt>minSerial</tt> value.</t>
        <t>A relying party with transparency requirements additionally SHOULD 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 SHOULD remove trust in that CA. To minimize the compatibility impact of this mitigation, index-based revocation can be used to only distrust entries after some index, while leaving existing entries accepted. This is analogous to the <xref target="SCTNotAfter"/> mechanism used in some PKIs.</t>
        <t>The revocation mechanism in this section is complementary to certificate-level revocation mechanisms. 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 Section <xref target="RFC8446" section="4.4.2.2" sectionFormat="bare"/> and Section <xref target="RFC8446" section="4.4.2.3" sectionFormat="bare"/> of <xref target="RFC8446"/>, incorporates both explicit relying-party-provided information in the ClientHello and CertificateRequest messages and implicit deployment-specific assumptions. This section describes a RECOMMENDED integration of Merkle Tree certificates into TLS trust anchor IDs (<xref target="I-D.ietf-tls-trust-anchor-ids"/>), but applications MAY use application-specific criteria in addition to, or instead of, this recommendation.</t>
      <section anchor="standalone-certificates-tls">
        <name>Standalone Certificates</name>
        <t>Authenticating and relying parties SHOULD 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 MAY be incorporated into other trust anchor groups, following the guidance in <xref section="5" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>.</t>
        <t>[[TODO: Ideally we would negotiate cosigners. https://github.com/tlswg/tls-trust-anchor-ids/issues/54 has a sketch of how one might do this, though other designs are possible. Negotiating cosigners allows the ecosystem to manage cosigners efficiently, without needing to collect every possible cosignature and send them all at once. This is wasteful, particularly with post-quantum algorithms.]]</t>
        <t>A standalone certificate MAY also be sent without explicit relying party trust signals, however doing so means the authenticating party implicitly assumes the relying party trusts the issuing CA. This may be viable if, for example, the CA is relatively ubiquitous among supported relying parties.</t>
      </section>
      <section anchor="landmark-relative-certificates-tls">
        <name>Landmark-Relative Certificates</name>
        <t>An authenticating party SHOULD NOT 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.</t>
        <t>TLS implementations SHOULD use the <tt>trust_anchors</tt> extension to determine this. A landmark-relative certificate's trust anchor ID is the concatenation of the following OID components:</t>
        <ul spacing="normal">
          <li>
            <t>The CA ID <xref target="ca-ids"/> of the CA that issued the certificate</t>
          </li>
          <li>
            <t>The constant 1</t>
          </li>
          <li>
            <t>The log number of the log used to construct the certificate</t>
          </li>
          <li>
            <t>The landmark number of the landmark used to construct the certificate</t>
          </li>
        </ul>
        <t>For example, the trust anchor ID for landmark 42 of CA <tt>32473.1</tt> and log number <tt>8</tt> is <tt>32473.1.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 retry mechanism described <xref section="4.3" 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 paries 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 SHOULD 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 series of trust anchor groups (<xref section="5" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>) called <em>landmark groups</em>.</t>
          <t>For each Merkle Tree Certificates CA, each log number <tt>N</tt>, and each landmark number <tt>L</tt>, a landmark group is defined. The group's ID is the concatenation of the following OID components:</t>
          <ul spacing="normal">
            <li>
              <t>The CA ID <xref target="ca-ids"/> of the CA</t>
            </li>
            <li>
              <t>The constant 2</t>
            </li>
            <li>
              <t>The log number <tt>N</tt></t>
            </li>
            <li>
              <t>The landmark number <tt>L</tt></t>
            </li>
          </ul>
          <t>This group contains the following trust anchors:</t>
          <ul spacing="normal">
            <li>
              <t>The CA ID itself (see <xref target="standalone-certificates-tls"/>)</t>
            </li>
            <li>
              <t>Each landmark of log <tt>N</tt> from <tt>L - max_active_landmarks + 1</tt> to <tt>L</tt>, inclusive</t>
            </li>
          </ul>
          <t>Landmark-relative certificates SHOULD be configured with this information, as in <xref section="3.2" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>. A relying party whose latest trusted subtree (<xref target="trusted-subtrees"/>) in log <tt>N</tt> is landmark <tt>L</tt> SHOULD configure the <tt>trust_anchors</tt> extension to advertise the above landmark group. This signals support for both standalone certificates and supported landmarks.</t>
          <t>For example, a relying party which is up-to-date as of landmark 42 of log 8 of CA <tt>32473.1</tt> would send an ID of <tt>32473.1.2.8.42</tt>.</t>
        </section>
        <section anchor="timestamped-landmark-groups">
          <name>Timestamped Landmark Groups</name>
          <t>Landmark groups for an 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.</t>
          <t>When needed, <xref section="5" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/> describes how PKIs requiring further size savings can use trust anchor groups that span multiple CA instances. For example, a single ID may signal support for a group of CAs across one or more CA operators. This section describes how such groups can be applied to landmarks, using a variation of the versioning construction described in <xref section="5.1" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>.</t>
          <t>Trust anchor groups containing landmarks SHOULD define versions predictably based on the time. For example, if the contained CAs allocate landmarks roughly hourly, the trust anchor group might increment the version component every hour. Each given version of the group SHOULD contain the active landmarks as of the corresponding timestamp.</t>
          <t>This predictable cadence allows the CA to construct trust anchor group inclusions (<xref section="7.2" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>) for issued certificates without additional coordination. Conversely, a relying party MAY send a version if its trusted subtrees (<xref target="trusted-subtrees"/>) are up-to-date for all contained CAs, as of the versions timestamp.</t>
          <t>In some cases, the relying party's trusted subtrees 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 sends the group with 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 sends the group with 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 retry mechanism described in <xref section="4.3" 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 MAY 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 SHOULD 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 MAY fetch these URLs to collect additional alternate certificate chains. If the resource is unavailable, the ACME client SHOULD NOT fail the overall transaction. If the resource returns an HTTP 202 (Accepted) response, the ACME client SHOULD retry the request later, according to the Retry-After header, but this process SHOULD be independent of deploying other chains in the ACME order. In particular, if deploying a new service, the ACME client SHOULD NOT block deployment on optional alternates.</t>
        <t>If renewing certificates, the ACME client MAY 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>When downloading the certificate (<xref section="7.4.2" sectionFormat="of" target="RFC8555"/>), ACME clients supporting Merkle Tree certificates SHOULD send "application/pem-certificate-chain-with-properties" in their Accept header (<xref section="12.5.1" sectionFormat="of" target="RFC9110"/>). ACME servers issuing Merkle Tree certificates SHOULD then respond with that content type and include trust anchor ID information as described in <xref section="7" 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.</t>
        <t>When processing an order for a Merkle Tree certificate, the ACME server moves the order to the "valid" state after the corresponding entry is sequenced in the issuance log, cosignatures are collected, and 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 SHOULD additionally carry an "acme-optional-alternate" URL for the landmark-relative certificate. 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 URL.</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"/>, 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>Log pruning (<xref target="log-pruning"/>) allows a long-lived log to serve only the more recent entries, scaling with the size of the retention window, rather than the log's total lifetime.</t>
          <t>Mirrors of the log can also reduce CA bandwidth costs, because monitors can fetch data from mirrors instead of CAs directly. In PKIs that deploy mirrors as part of cosigner policies, relying parties could set few availability requirements on CAs, as described in <xref target="log-availability"/>.</t>
        </section>
        <section anchor="cosigner-costs">
          <name>Cosigner Costs</name>
          <t>The costs of cosigners vary by cosigner role. A consistency-checking cosigner, such as <xref target="TLOG-WITNESS"/>, requires very little state and can be run with low cost.</t>
          <t>A mirroring cosigner, such as <xref target="TLOG-MIRROR"/>, performs 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 log pruning. While a mirror does need to accommodate another party's (the CA's) growth rate, it grows only from new issuances from that one CA. If one CA's issuance rate exceeds the mirror's capacity, that does not impact the mirror's copies of other CAs. Mirrors also do not need to defend against a client uploading a large number of existing certificates all at once. Submissions are 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 SHOULD check the checkpoints of all three. Otherwise, a malicious CA may send different split views to different cosigners. More generally, monitors SHOULD check the checkpoints in the union of all cosigners trusted by all supported relying parties. This is an efficient check because, if the CA is operating correctly, all cosigners will observe the same tree. Thus the monitor only needs to check consistency proofs between the checkpoints, and check the log contents themselves once. Monitors MAY also rely on other parties in the transparency ecosystem to perform this check.</t>
      </section>
      <section anchor="log-availability">
        <name>Log Availability</name>
        <t>CAs and mirrors are expected to serve their log contents over HTTP. It is possible for the contents to be unavailable, either due to temporary service outage or because the log has been pruned (<xref target="log-pruning"/>). If some resources are unavailable, they may not be visible to monitors.</t>
        <t>As in CT, PKIs that deploy Merkle Tree certificates SHOULD establish availability policies. These policies SHOULD 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 SHOULD specify how long an entry must be made available, before a CA or mirror is permitted to prune the entry. It is RECOMMENDED to define this using a <em>retention period</em>, which is some time after the entry has expired. In such a policy, an entry could only be pruned if it, and all preceding entries, have already expired for the retention period. Policies MAY opt to set different retention periods between CAs and mirrors. Permitting limited log retention is analogous to the CT practice of temporal sharding <xref target="CHROME-CT"/>, except that a pruned issuance log remains compatible with older, unupdated relying parties.</t>
        <t>Such policies impact monitors. If the retention period is, e.g. 6 months, this means that monitors are expected to check entries of interest within 6 months. It also means that a new monitor may only be aware of a 6 month history of entries issued for a particular domain.</t>
        <t>If historical data is not available to verify the retention period, such as information in another mirror or a trusted summary of expiration dates of entries, it may not be possible to confirm correct behavior. This is mitigated by the revocation process described in <xref target="revoked-ranges"/>: if a CA were to prune a forward-dated entry and, in the 6 months when the entry was available, no monitor noticed the unusual expiry, an updated relying party would not accept it anyway.</t>
        <t>The log pruning process simply makes some resources unavailable. Availability policies SHOULD constrain log pruning in the same way as general resource availability. That is, if it would be a policy violation for the log to fail to serve a resource, it should also be a policy violation for the log to prune such that the resource is removed, and vice versa.</t>
        <t>PKIs that require mirror cosignatures (<xref target="trusted-cosigners"/>) can impose minimal to no availability requirements on CAs 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 SHOULD set availability expectations on mirrors. This can also be mitigated by using multiple mirrors, either directly enforced in cosigner requirements, or by keeping mirrors up-to-date with each other.</t>
        <t>In PKIs that do not require mirroring cosigners, the CA's serving endpoint is more crucial for monitors. Such PKIs SHOULD 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 SHOULD 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 RECOMMENDED. Authenticating parties additionally SHOULD retain both the new and old certificates in the certificate set until the old certificate expires. As the new subtrees are delivered to relying parties, certificate negotiation will transition relying parties to the new certificate, while retaining the old certificate for relying parties that are not yet updated.</t>
        <t>The above also applies if the authenticating party is performing a routine key rotation alongside the routine renewal. In this case, certificate negotiation would pick the key as part of the certificate selection. This slightly increases the lifetime of the old key but maintains the size optimization continuously.</t>
        <t>If the service is rotating keys in response to a key compromise, this option is not appropriate. Instead, the service SHOULD immediately discard the old key and request a standalone certificate and the revocation of the previous certificate. This will interrupt the size optimization until the new landmark-relative certificate is available and relying parties are updated.</t>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>The Privacy Considerations described in <xref section="9" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/> apply to their use with Merkle Tree Certificates.</t>
      <t>In particular, relying parties that share an update process for trusted subtrees (<xref target="trusted-subtrees"/>) will fetch the same stream of updates. However, updates may reach different users at different times, resulting in some variation across users. This variation may contribute to a fingerprinting attack <xref target="RFC6973"/>. If the Merkle Tree CA trust anchors are sent unconditionally in <tt>trust_anchors</tt>, this variation will be passively observable. If they are sent conditionally, e.g. with the DNS mechanism, the trust anchor list will require active probing.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="authenticity">
        <name>Authenticity</name>
        <t>A key security requirement of any PKI scheme is that relying parties only accept assertions that were certified by a trusted certification authority. Merkle Tree certificates achieve this by ensuring the relying party only accepts authentic subtree hashes:</t>
        <ul spacing="normal">
          <li>
            <t>In 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>Log entries contain public key hashes. It must additionally be computationally infeasible to compute a public key whose hash matches the entry, other than the intended public key. This also requires a collision-resistant hash.</t>
      </section>
      <section anchor="transparency">
        <name>Transparency</name>
        <t>The transparency mechanisms in this document do not prevent a CA from issuing an unauthorized certificate. Rather, they provide comparable security properties as Certificate Transparency <xref target="RFC9162"/> in ensuring that all certificates are either rejected by relying parties, or visible to monitors and, in particular, the subject of the certificate.</t>
        <t>Compared to Certificate Transparency, some of the responsibilities of a log have moved to the CA. All signatures generated by the CA in this system are assertions about some view of the CA's issuance log. However, a CA does not need to function correctly to ensure transparency properties. Relying parties are expected to require a quorum of additional cosigners, which together enforce properties of the log (<xref target="trusted-cosigners"/>) and prevent or detect CA misbehavior:</t>
        <t>A CA might violate the append-only property of its log and present different views to different parties. However, each individual cosigner will only follow a single append-only view of the log history. Provided the cosigners are correctly operated, relying parties and monitors will observe consistent views. 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, e.g. by feigning an outage or pruning the log outside the retention policy (<xref target="log-availability"/>). 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 SHOULD 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 SHOULD 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 MAY 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 SHOULD mitigate this by only accepting a limited range of log numbers in relying parties, transparency cosigners, or both. This limit MAY 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>MerkleTreeCertEntry (<xref target="log-entries"/>) contain several extension points:</t>
        <ul spacing="normal">
          <li>
            <t>New X.509 extensions can be added to TBSCertificateLogEntry.</t>
          </li>
          <li>
            <t>New MerkleTreeCertEntryType values define new formats for the entry contents.</t>
          </li>
          <li>
            <t>New MerkleTreeCertEntryExtensionType 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 MUST 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 MerkleTreeCertEntry that it expects. The unrecognized entry will have a different <tt>type</tt> value, so the proof will never succeed, assuming the underlying hash function remains collision-resistant.</t>
        <t>However, unrecognized entry extensions will be ignored by relying parties, analogously to a non-critical X.509 extension. Entry extensions thus SHOULD 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 SHOULD coordinate with monitors to ensure the transparency ecosystem is able to monitor the new formats.</t>
      </section>
      <section anchor="certificate-malleability">
        <name>Certificate Malleability</name>
        <t>An ASN.1 structure like X.509’s Certificate is an abstract data type that is independent of its serialization. There are multiple encoding rules for ASN.1. Commonly, protocols use DER <xref target="X.690"/>, such as <xref section="4.4.2" sectionFormat="of" target="RFC8446"/>. This aligns with <xref section="4.1.1.3" sectionFormat="of" target="RFC5280"/>, which says X.509 signatures are computed over the DER-encoded TBSCertificate. After signature verification, applications can assume the DER-encoded TBSCertificate is not malleable.</t>
        <t>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 MUST do the following when implementing <xref target="verifying-certificate-signatures"/>:</t>
        <ul spacing="normal">
          <li>
            <t>Reparse the initial identifier (the SEQUENCE tag) and length octets of the TBSCertificate structure with a conforming DER parser and fail verification if invalid.</t>
          </li>
          <li>
            <t>When copying the <tt>version</tt>, <tt>issuer</tt>, <tt>validity</tt>, <tt>subject</tt>, <tt>issuerUniqueID</tt>, <tt>subjectUniqueID</tt>, and <tt>extensions</tt> fields, either copy over the observed BER encodings, or reparse each field with a conforming DER parser and fail verification if invalid.</t>
          </li>
          <li>
            <t>Reparse the <tt>serialNumber</tt> field with a conforming DER parser and fail verification if invalid.</t>
          </li>
          <li>
            <t>Reparse the <tt>signature</tt> field with a conforming DER parser and fail verification if invalid. Equivalently, check for an exact equality with for the expected, DER-encoded value.</t>
          </li>
          <li>
            <t>When hashing <tt>subjectPublicKeyInfo</tt>, either hash the observed BER encoding, or reparse the structure with a conforming DER parser and fail verification if invalid.</t>
          </li>
        </ul>
        <t>These additional checks are redundant in X.509 implementations that use a conforming DER parser.</t>
        <t><xref target="log-entries"/> requires that the TBSCertificateLogEntry in a MerkleTreeCertEntry be DER-encoded, so applying a stricter parser will be compatible with conforming CAs. While these existing non-conforming implementations may be unable to switch to a DER parser due to compatibility concerns, Merkle Tree Certificates 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 MUST 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 resposes. 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 SHOULD 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 SHOULD 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 SHOULD programmatically enforce these policies as part of certification path validation.</t>
        <t>Monitors SHOULD 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> SHOULD look for either a subject alternative name (<xref section="4.2.1.6" sectionFormat="of" target="RFC5280"/>) of <tt>example.com</tt> or a basic constraints (<xref section="4.2.1.9" sectionFormat="of" target="RFC5280"/>) extension with the cA boolean set to true.</t>
        <t>It is not sufficient to constrain the MTC CA with a path length constraint (<xref section="4.2.1.9" sectionFormat="of" target="RFC5280"/>) of zero. Self-issued certificates do not contribute to path length constraints, so such an MTC CA might still issue CA certificates with the same name as itself.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="module-identifier">
        <name>Module Identifier</name>
        <t>IANA is requested to add the following entry in the "SMI Security for PKIX Module Identifier" registry <xref target="RFC7299"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Decimal</th>
              <th align="left">Description</th>
              <th align="left">References</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD</td>
              <td align="left">id-mod-mtc-2025</td>
              <td align="left">[this-RFC]</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="algorithm">
        <name>Algorithm</name>
        <t>IANA is requested to add the following entry to the "SMI Security for PKIX Algorithms" registry <xref target="RFC7299"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Decimal</th>
              <th align="left">Description</th>
              <th align="left">References</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD</td>
              <td align="left">id-alg-mtcProof</td>
              <td align="left">[this-RFC]</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="certificate-extension">
        <name>Certificate Extension</name>
        <t>IANA is requested to add the following entry to the "SMI Security for PKIX Certificate Extension" registry <xref target="RFC7299"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Decimal</th>
              <th align="left">Description</th>
              <th align="left">References</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD</td>
              <td align="left">id-pe-mtcCertificationAuthority</td>
              <td align="left">[this-RFC]</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="relative-distinguished-name-attribute">
        <name>Relative Distinguished Name Attribute</name>
        <t>IANA is requested to add the following entry to the "SMI Security for PKIX Relative Distinguished Name Attribute" registry <xref target="I-D.ietf-lamps-x509-alg-none"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Decimal</th>
              <th align="left">Description</th>
              <th align="left">References</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD</td>
              <td align="left">id-rdna-trustAnchorID</td>
              <td align="left">[this-RFC]</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="link-relation-type">
        <name>Link Relation Type</name>
        <t>IANA is requested to add the following entry to the "Link Relation Types" registry <xref target="RFC8288"/>:</t>
        <dl>
          <dt>Relation Name:</dt>
          <dd>
            <t>acme-optional-alternate</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>Refers to an optional alternate certificate chain, which may not be available immediately. Relying parties that accept the alternate are expected to also accept the original certificate, so it is not an error if the alternate is unavailable.</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>[this-RFC], <xref target="optional-certificates"/></t>
          </dd>
        </dl>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="X.690">
          <front>
            <title>Information technology - ASN.1 encoding Rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)</title>
            <author>
              <organization>ITU-T</organization>
            </author>
            <date year="2021" month="February"/>
          </front>
          <seriesInfo name="ISO/IEC 8824-1:2021" value=""/>
        </reference>
        <reference anchor="RFC5912">
          <front>
            <title>New ASN.1 Modules for the Public Key Infrastructure Using X.509 (PKIX)</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="June" year="2010"/>
            <abstract>
              <t>The Public Key Infrastructure using X.509 (PKIX) certificate format, and many associated formats, are expressed using ASN.1. The current ASN.1 modules conform to the 1988 version of ASN.1. This document updates those ASN.1 modules to conform to the 2002 version of ASN.1. There are no bits-on-the-wire changes to any of the formats; this is simply a change to the syntax. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5912"/>
          <seriesInfo name="DOI" value="10.17487/RFC5912"/>
        </reference>
        <reference anchor="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="April" year="2026"/>
            <abstract>
              <t>   This document defines the TLS Trust Anchors extension, a mechanism
   for relying parties to convey trusted certification authorities.  It
   describes individual certification authorities more succinctly than
   the TLS Certificate Authorities extension.

   Additionally, to support TLS clients with many trusted certification
   authorities, it supports a mode where servers describe their
   available certification paths and the client selects from them.
   Servers may describe this during connection setup, or in DNS for
   lower latency.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-trust-anchor-ids-04"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC9162">
          <front>
            <title>Certificate Transparency Version 2.0</title>
            <author fullname="B. Laurie" initials="B." surname="Laurie"/>
            <author fullname="E. Messeri" initials="E." surname="Messeri"/>
            <author fullname="R. Stradling" initials="R." surname="Stradling"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>This document describes version 2.0 of the Certificate Transparency (CT) protocol for publicly logging the existence of Transport Layer Security (TLS) server certificates as they are issued or observed, in a manner that allows anyone to audit certification authority (CA) activity and notice the issuance of suspect certificates as well as to audit the certificate logs themselves. The intent is that eventually clients would refuse to honor certificates that do not appear in a log, effectively forcing CAs to add all issued certificates to the logs.</t>
              <t>This document obsoletes RFC 6962. It also specifies a new TLS extension that is used to send various CT log artifacts.</t>
              <t>Logs are network services that implement the protocol operations for submissions and queries that are defined in this document.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9162"/>
          <seriesInfo name="DOI" value="10.17487/RFC9162"/>
        </reference>
        <reference anchor="RFC3629">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
            <date month="November" year="2003"/>
            <abstract>
              <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
          <seriesInfo name="DOI" value="10.17487/RFC3629"/>
        </reference>
        <reference anchor="RFC8555">
          <front>
            <title>Automatic Certificate Management Environment (ACME)</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="J. Hoffman-Andrews" initials="J." surname="Hoffman-Andrews"/>
            <author fullname="D. McCarney" initials="D." surname="McCarney"/>
            <author fullname="J. Kasten" initials="J." surname="Kasten"/>
            <date month="March" year="2019"/>
            <abstract>
              <t>Public Key Infrastructure using X.509 (PKIX) certificates are used for a number of purposes, the most significant of which is the authentication of domain names. Thus, certification authorities (CAs) in the Web PKI are trusted to verify that an applicant for a certificate legitimately represents the domain name(s) in the certificate. As of this writing, this verification is done through a collection of ad hoc mechanisms. This document describes a protocol that a CA and an applicant can use to automate the process of verification and certificate issuance. The protocol also provides facilities for other certificate management functions, such as certificate revocation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8555"/>
          <seriesInfo name="DOI" value="10.17487/RFC8555"/>
        </reference>
        <reference anchor="SHS">
          <front>
            <title>Secure hash standard</title>
            <author>
              <organization/>
            </author>
            <date year="2015"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.180-4"/>
          <refcontent>National Institute of Standards and Technology (U.S.)</refcontent>
        </reference>
        <reference anchor="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="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="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="RFC9881">
          <front>
            <title>Internet X.509 Public Key Infrastructure -- Algorithm Identifiers for the Module-Lattice-Based Digital Signature Algorithm (ML-DSA)</title>
            <author fullname="J. Massimo" initials="J." surname="Massimo"/>
            <author fullname="P. Kampanakis" initials="P." surname="Kampanakis"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <author fullname="B. E. Westerbaan" initials="B. E." surname="Westerbaan"/>
            <date month="October" year="2025"/>
            <abstract>
              <t>Digital signatures are used within X.509 certificates and Certificate Revocation Lists (CRLs), and to sign messages. This document specifies the conventions for using FIPS 204, the Module-Lattice-Based Digital Signature Algorithm (ML-DSA) in Internet X.509 certificates and CRLs. The conventions for the associated signatures, subject public keys, and private key are also described.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9881"/>
          <seriesInfo name="DOI" value="10.17487/RFC9881"/>
        </reference>
        <reference anchor="RFC6960">
          <front>
            <title>X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP</title>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="M. Myers" initials="M." surname="Myers"/>
            <author fullname="R. Ankney" initials="R." surname="Ankney"/>
            <author fullname="A. Malpani" initials="A." surname="Malpani"/>
            <author fullname="S. Galperin" initials="S." surname="Galperin"/>
            <author fullname="C. Adams" initials="C." surname="Adams"/>
            <date month="June" year="2013"/>
            <abstract>
              <t>This document specifies a protocol useful in determining the current status of a digital certificate without requiring Certificate Revocation Lists (CRLs). Additional mechanisms addressing PKIX operational requirements are specified in separate documents. This document obsoletes RFCs 2560 and 6277. It also updates RFC 5912.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6960"/>
          <seriesInfo name="DOI" value="10.17487/RFC6960"/>
        </reference>
        <reference anchor="RFC9925">
          <front>
            <title>Unsigned X.509 Certificates</title>
            <author fullname="D. Benjamin" initials="D." surname="Benjamin"/>
            <date month="February" year="2026"/>
            <abstract>
              <t>This document defines a placeholder X.509 signature algorithm that may be used in contexts where the consumer of the certificate is not expected to verify the signature. As part of this, it updates RFC 5280.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9925"/>
          <seriesInfo name="DOI" value="10.17487/RFC9925"/>
        </reference>
        <reference anchor="RFC8288">
          <front>
            <title>Web Linking</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="October" year="2017"/>
            <abstract>
              <t>This specification defines a model for the relationships between resources on the Web ("links") and the type of those relationships ("link relation types").</t>
              <t>It also defines the serialisation of such links in HTTP headers with the Link header field.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8288"/>
          <seriesInfo name="DOI" value="10.17487/RFC8288"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="CHROME-CT" target="https://googlechrome.github.io/CertificateTransparency/ct_policy.html">
          <front>
            <title>Chrome Certificate Transparency Policy</title>
            <author>
              <organization>Google Chrome</organization>
            </author>
            <date year="2022" month="March" day="17"/>
          </front>
        </reference>
        <reference anchor="APPLE-CT" target="https://support.apple.com/en-us/HT205280">
          <front>
            <title>Apple's Certificate Transparency policy</title>
            <author>
              <organization>Apple</organization>
            </author>
            <date year="2021" month="March" day="05"/>
          </front>
        </reference>
        <reference anchor="CHROMIUM" target="https://chromium.googlesource.com/chromium/src/+/main/components/component_updater/README.md">
          <front>
            <title>Component Updater</title>
            <author>
              <organization>Chromium</organization>
            </author>
            <date year="2022" month="March" day="03"/>
          </front>
        </reference>
        <reference anchor="FIREFOX" target="https://wiki.mozilla.org/Firefox/RemoteSettings">
          <front>
            <title>Firefox Remote Settings</title>
            <author>
              <organization>Mozilla</organization>
            </author>
            <date year="2022" month="August" day="20"/>
          </front>
        </reference>
        <reference anchor="LetsEncrypt" target="https://letsencrypt.org/stats/">
          <front>
            <title>Let's Encrypt Stats</title>
            <author>
              <organization>Let's Encrypt</organization>
            </author>
            <date year="2023" month="March" day="07"/>
          </front>
        </reference>
        <reference anchor="MerkleTown" target="https://ct.cloudflare.com/">
          <front>
            <title>Merkle Town</title>
            <author>
              <organization>Cloudflare, Inc.</organization>
            </author>
            <date year="2023" month="March" day="07"/>
          </front>
        </reference>
        <reference anchor="SharedFactors" target="https://bora.uib.no/bora-xmlui/bitstream/handle/11250/3001128/Masters_thesis__for_University_of_Bergen.pdf">
          <front>
            <title>Finding shared RSA factors in the Certificate Transparency logs</title>
            <author initials="H. F." surname="Våge" fullname="Henry Faltin Våge">
              <organization/>
            </author>
            <author>
              <organization>University of Bergen</organization>
            </author>
            <date year="2022" month="May" day="13"/>
          </front>
        </reference>
        <reference anchor="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="TLOG-TILES" target="https://c2sp.org/tlog-tiles">
          <front>
            <title>Tiled Transparency Logs</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2025" month="June"/>
          </front>
        </reference>
        <reference anchor="TLOG-WITNESS" target="https://c2sp.org/tlog-witness">
          <front>
            <title>Transparency Log Witness Protocol</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2025" month="June"/>
          </front>
        </reference>
        <reference anchor="TLOG-MIRROR" target="https://c2sp.org/tlog-mirror">
          <front>
            <title>Transparency Log Mirrors</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2025" month="July"/>
          </front>
        </reference>
        <reference anchor="TLOG-COSIGNATURE" target="https://c2sp.org/tlog-cosignature">
          <front>
            <title>Transparency Log Cosignatures</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2026" month="April"/>
          </front>
        </reference>
        <reference anchor="Accumulated" target="https://words.filippo.io/accumulated/">
          <front>
            <title>Accumulated Test Vectors</title>
            <author initials="F." surname="Valsorda" fullname="Filippo Valsorda">
              <organization/>
            </author>
            <date year="2024" month="October"/>
          </front>
        </reference>
        <reference anchor="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>
        <reference anchor="I-D.ietf-lamps-x509-alg-none">
          <front>
            <title>Unsigned X.509 Certificates</title>
            <author fullname="David Benjamin" initials="D." surname="Benjamin">
              <organization>Google LLC</organization>
            </author>
            <date day="5" month="September" year="2025"/>
            <abstract>
              <t>   This document defines a placeholder X.509 signature algorithm that
   may be used in contexts where the consumer of the certificate is not
   expected to verify the signature.  As part of this, it updates RFC
   5280.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-lamps-x509-alg-none-10"/>
        </reference>
      </references>
    </references>
    <?line 1976?>

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

DEFINITIONS IMPLICIT TAGS ::=
BEGIN

IMPORTS
  SIGNATURE-ALGORITHM, DIGEST-ALGORITHM, AlgorithmIdentifier{},
  FROM AlgorithmInformation-2009 -- in [RFC5912]
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-algorithmInformation-02(58) }
  Extensions{}, ATTRIBUTE
  FROM PKIX-CommonTypes-2009 -- in [RFC5912]
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-pkixCommon-02(57) }
  CertExtensions
  FROM PKIX1Implicit-2009 -- in [RFC5912]
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-pkix1-implicit-02(59) }
  Version, Name, Validity, UniqueIdentifier, PublicKeyAlgorithms
  FROM PKIX1Explicit-2009 -- in [RFC5912]
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-pkix1-explicit-02(51) }
  TrustAnchorID
  FROM TrustAnchorIDs-2025 -- in [I-D.ietf-tls-trust-anchor-ids]
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-trustAnchorIDs-2025(TBD) } ;

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

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

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

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

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

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

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

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

MTCCertificationAuthority ::= SEQUENCE {
    logHash   AlgorithmIdentifier{DIGEST-ALGORITHM, {...}},
    sigAlg    AlgorithmIdentifier{SIGNATURE-ALGORITHM, {...}},
    minSerial INTEGER (0..mtcMaxSerial),
    maxSerial INTEGER (0..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 implementors understand the procedures described in <xref target="subtrees"/>.</t>
      <section anchor="binary-representations">
        <name>Binary Representations</name>
        <t>Within a Merkle Tree whose size is a power of two, the binary representation of 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, towards the root. When <tt>sn</tt> is zero, the procedure has reached the top of the tree. The procedure checks that the two iterations complete together.</t>
        <t>Iterating from level 0 up, <tt>fn</tt> and <tt>sn</tt> will initially be different. While they are different, step 4.2 hashes on the left or right based on the binary representation, as discussed in <xref target="binary-representations"/>.</t>
        <t>Once <tt>fn = sn</tt>, the remainder of the path is on the right edge. At that point, the condition in step 4.2 is always true. It only incorporates proof entries on the left, once per set bit. Unset bits are skipped.</t>
        <t>Inclusion proofs can also be evaluated by considering these two stages separately. The first stage consumes <tt>l1 = BIT_WIDTH(fn XOR sn)</tt> proof entries. The second stage consumes <tt>l2 = POPCOUNT(fn &gt;&gt; l1)</tt> proof entries. A valid inclusion proof must then have <tt>l1 + l2</tt> entries. The first <tt>l1</tt> entries are hashed based on <tt>fn</tt>'s least significant bits, and the remaining <tt>l2</tt> entries are hashed on the left.</t>
      </section>
      <section anchor="consistency-proof-structure">
        <name>Consistency Proof Structure</name>
        <t>A subtree consistency proof for <tt>[start, end)</tt> and the tree of <tt>n</tt> elements is similar to an inclusion proof for element <tt>end - 1</tt>. If one starts from <tt>end - 1</tt>'s hash, incorporating the whole inclusion proof should reconstruct <tt>root_hash</tt> and incorporating a subset of the inclusion proof should reconstruct <tt>node_hash</tt>. Thus <tt>end - 1</tt>'s hash and this inclusion proof can prove consistency. A subtree consistency proof in this document applies two optimizations over this construction:</t>
        <ol spacing="normal" type="1"><li>
            <t>Instead of starting at level 0 with <tt>end - 1</tt>, the proof can start at a higher level. Any ancestor of <tt>end - 1</tt> shared by both the subtree and the overall tree is a valid starting node to reconstruct <tt>node_hash</tt> and <tt>root_hash</tt>. Use the highest level with a commmon ancestor. This truncates the inclusion proof.</t>
          </li>
          <li>
            <t>If this starting node is the entire subtree, omit its hash from the consistency proof. The verifier is assumed to already know <tt>node_hash</tt>.</t>
          </li>
        </ol>
        <t>A Merkle consistency proof, defined in <xref section="2.1.4" sectionFormat="of" target="RFC9162"/>, applies these same optimizations.</t>
        <t><xref target="fig-truncate-consistency-proof"/> depicts a subtree consistency proof between the subtree <tt>[0, 6)</tt> and the Merkle Tree of size 8. The consistency proof begins at level 1, or node <tt>[4, 6)</tt>. The inclusion proof portion is similarly truncated to start at level 1: <tt>[6, 8)</tt> and <tt>[0, 4)</tt>. If the consistency proof began at level 0, the starting node would be leaf 5, and the consistency proof would additionally include leaf 4.</t>
        <figure anchor="fig-truncate-consistency-proof">
          <name>A subtree consistency proof that starts at level 1 instead of level 0</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="544" width="336" viewBox="0 0 336 544" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                <path d="M 8,432 L 8,464" fill="none" stroke="black"/>
                <path d="M 8,496 L 8,528" fill="none" stroke="black"/>
                <path d="M 24,224 L 24,256" fill="none" stroke="black"/>
                <path d="M 24,496 L 24,528" fill="none" stroke="black"/>
                <path d="M 32,96 L 32,128" fill="none" stroke="black"/>
                <path d="M 32,368 L 32,400" fill="none" stroke="black"/>
                <path d="M 40,224 L 40,256" fill="none" stroke="black"/>
                <path d="M 40,496 L 40,528" fill="none" stroke="black"/>
                <path d="M 56,160 L 56,192" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 56,432 L 56,464" fill="none" stroke="black"/>
                <path d="M 56,496 L 56,528" fill="none" stroke="black"/>
                <path d="M 64,32 L 64,64" fill="none" stroke="black"/>
                <path d="M 64,304 L 64,336" fill="none" stroke="black"/>
                <path d="M 72,160 L 72,192" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                <path d="M 72,432 L 72,464" fill="none" stroke="black"/>
                <path d="M 72,496 L 72,528" fill="none" stroke="black"/>
                <path d="M 88,224 L 88,256" fill="none" stroke="black"/>
                <path d="M 88,496 L 88,528" fill="none" stroke="black"/>
                <path d="M 104,96 L 104,128" fill="none" stroke="black"/>
                <path d="M 104,224 L 104,256" fill="none" stroke="black"/>
                <path d="M 104,368 L 104,400" fill="none" stroke="black"/>
                <path d="M 104,496 L 104,528" fill="none" stroke="black"/>
                <path d="M 120,160 L 120,192" fill="none" stroke="black"/>
                <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                <path d="M 120,432 L 120,464" fill="none" stroke="black"/>
                <path d="M 120,496 L 120,528" fill="none" stroke="black"/>
                <path d="M 128,96 L 128,128" fill="none" stroke="black"/>
                <path d="M 136,160 L 136,192" fill="none" stroke="black"/>
                <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                <path d="M 136,432 L 136,464" fill="none" stroke="black"/>
                <path d="M 136,496 L 136,528" fill="none" stroke="black"/>
                <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                <path d="M 152,496 L 152,528" fill="none" stroke="black"/>
                <path d="M 160,368 L 160,400" fill="none" stroke="black"/>
                <path d="M 168,224 L 168,256" fill="none" stroke="black"/>
                <path d="M 168,496 L 168,528" fill="none" stroke="black"/>
                <path d="M 184,160 L 184,192" fill="none" stroke="black"/>
                <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                <path d="M 184,432 L 184,464" fill="none" stroke="black"/>
                <path d="M 184,496 L 184,528" fill="none" stroke="black"/>
                <path d="M 200,32 L 200,64" fill="none" stroke="black"/>
                <path d="M 200,96 L 200,128" fill="none" stroke="black"/>
                <path d="M 200,304 L 200,336" fill="none" stroke="black"/>
                <path d="M 200,432 L 200,464" fill="none" stroke="black"/>
                <path d="M 200,496 L 200,528" fill="none" stroke="black"/>
                <path d="M 216,496 L 216,528" fill="none" stroke="black"/>
                <path d="M 232,368 L 232,400" fill="none" stroke="black"/>
                <path d="M 232,496 L 232,528" fill="none" stroke="black"/>
                <path d="M 248,432 L 248,464" fill="none" stroke="black"/>
                <path d="M 248,496 L 248,528" fill="none" stroke="black"/>
                <path d="M 64,32 L 200,32" fill="none" stroke="black"/>
                <path d="M 64,64 L 200,64" fill="none" stroke="black"/>
                <path d="M 32,94 L 104,94" fill="none" stroke="black"/>
                <path d="M 32,98 L 104,98" fill="none" stroke="black"/>
                <path d="M 128,96 L 200,96" fill="none" stroke="black"/>
                <path d="M 32,126 L 104,126" fill="none" stroke="black"/>
                <path d="M 32,130 L 104,130" fill="none" stroke="black"/>
                <path d="M 128,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 8,160 L 56,160" fill="none" stroke="black"/>
                <path d="M 72,160 L 120,160" fill="none" stroke="black"/>
                <path d="M 136,160 Q 138,156.8 140,160 Q 142,163.2 144,160 Q 146,156.8 148,160 Q 150,163.2 152,160 Q 154,156.8 156,160 Q 158,163.2 160,160 Q 162,156.8 164,160 Q 166,163.2 168,160 Q 170,156.8 172,160 Q 174,163.2 176,160 Q 178,156.8 180,160 Q 182,163.2 184,160 " fill="none" stroke="black"/>
                <path d="M 8,192 L 56,192" fill="none" stroke="black"/>
                <path d="M 72,192 L 120,192" fill="none" stroke="black"/>
                <path d="M 136,192 Q 138,188.8 140,192 Q 142,195.2 144,192 Q 146,188.8 148,192 Q 150,195.2 152,192 Q 154,188.8 156,192 Q 158,195.2 160,192 Q 162,188.8 164,192 Q 166,195.2 168,192 Q 170,188.8 172,192 Q 174,195.2 176,192 Q 178,188.8 180,192 Q 182,195.2 184,192 " fill="none" stroke="black"/>
                <path d="M 8,224 L 24,224" fill="none" stroke="black"/>
                <path d="M 40,224 L 56,224" fill="none" stroke="black"/>
                <path d="M 72,224 L 88,224" fill="none" stroke="black"/>
                <path d="M 104,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 136,224 L 152,224" fill="none" stroke="black"/>
                <path d="M 168,224 L 184,224" fill="none" stroke="black"/>
                <path d="M 8,256 L 24,256" fill="none" stroke="black"/>
                <path d="M 40,256 L 56,256" fill="none" stroke="black"/>
                <path d="M 72,256 L 88,256" fill="none" stroke="black"/>
                <path d="M 104,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,256 L 152,256" fill="none" stroke="black"/>
                <path d="M 168,256 L 184,256" fill="none" stroke="black"/>
                <path d="M 64,304 L 200,304" fill="none" stroke="black"/>
                <path d="M 64,336 L 200,336" fill="none" stroke="black"/>
                <path d="M 32,366 L 104,366" fill="none" stroke="black"/>
                <path d="M 32,370 L 104,370" fill="none" stroke="black"/>
                <path d="M 160,368 L 232,368" fill="none" stroke="black"/>
                <path d="M 32,398 L 104,398" fill="none" stroke="black"/>
                <path d="M 32,402 L 104,402" fill="none" stroke="black"/>
                <path d="M 160,400 L 232,400" fill="none" stroke="black"/>
                <path d="M 8,432 L 56,432" fill="none" stroke="black"/>
                <path d="M 72,432 L 120,432" fill="none" stroke="black"/>
                <path d="M 136,432 Q 138,428.8 140,432 Q 142,435.2 144,432 Q 146,428.8 148,432 Q 150,435.2 152,432 Q 154,428.8 156,432 Q 158,435.2 160,432 Q 162,428.8 164,432 Q 166,435.2 168,432 Q 170,428.8 172,432 Q 174,435.2 176,432 Q 178,428.8 180,432 Q 182,435.2 184,432 " fill="none" stroke="black"/>
                <path d="M 200,430 L 248,430" fill="none" stroke="black"/>
                <path d="M 200,434 L 248,434" fill="none" stroke="black"/>
                <path d="M 8,464 L 56,464" fill="none" stroke="black"/>
                <path d="M 72,464 L 120,464" fill="none" stroke="black"/>
                <path d="M 136,464 Q 138,460.8 140,464 Q 142,467.2 144,464 Q 146,460.8 148,464 Q 150,467.2 152,464 Q 154,460.8 156,464 Q 158,467.2 160,464 Q 162,460.8 164,464 Q 166,467.2 168,464 Q 170,460.8 172,464 Q 174,467.2 176,464 Q 178,460.8 180,464 Q 182,467.2 184,464 " fill="none" stroke="black"/>
                <path d="M 200,462 L 248,462" fill="none" stroke="black"/>
                <path d="M 200,466 L 248,466" fill="none" stroke="black"/>
                <path d="M 8,496 L 24,496" fill="none" stroke="black"/>
                <path d="M 40,496 L 56,496" fill="none" stroke="black"/>
                <path d="M 72,496 L 88,496" fill="none" stroke="black"/>
                <path d="M 104,496 L 120,496" fill="none" stroke="black"/>
                <path d="M 136,496 L 152,496" fill="none" stroke="black"/>
                <path d="M 168,496 L 184,496" fill="none" stroke="black"/>
                <path d="M 200,496 L 216,496" fill="none" stroke="black"/>
                <path d="M 232,496 L 248,496" fill="none" stroke="black"/>
                <path d="M 8,528 L 24,528" fill="none" stroke="black"/>
                <path d="M 40,528 L 56,528" fill="none" stroke="black"/>
                <path d="M 72,528 L 88,528" fill="none" stroke="black"/>
                <path d="M 104,528 L 120,528" fill="none" stroke="black"/>
                <path d="M 136,528 L 152,528" fill="none" stroke="black"/>
                <path d="M 168,528 L 184,528" fill="none" stroke="black"/>
                <path d="M 200,528 L 216,528" fill="none" stroke="black"/>
                <path d="M 232,528 L 248,528" fill="none" stroke="black"/>
                <g class="text">
                  <text x="120" y="52">[0,</text>
                  <text x="148" y="52">6)</text>
                  <text x="296" y="52">level</text>
                  <text x="328" y="52">3</text>
                  <text x="72" y="84">/</text>
                  <text x="168" y="84">|</text>
                  <text x="56" y="116">[0,</text>
                  <text x="84" y="116">4)</text>
                  <text x="152" y="116">[4,</text>
                  <text x="180" y="116">6)</text>
                  <text x="296" y="116">level</text>
                  <text x="328" y="116">2</text>
                  <text x="40" y="148">/</text>
                  <text x="96" y="148">\</text>
                  <text x="168" y="148">|</text>
                  <text x="32" y="180">[0,2)</text>
                  <text x="96" y="180">[2,4)</text>
                  <text x="160" y="180">[4,6)</text>
                  <text x="296" y="180">level</text>
                  <text x="328" y="180">1</text>
                  <text x="24" y="212">/</text>
                  <text x="40" y="212">\</text>
                  <text x="88" y="212">/</text>
                  <text x="104" y="212">\</text>
                  <text x="152" y="212">/</text>
                  <text x="168" y="212">\</text>
                  <text x="16" y="244">0</text>
                  <text x="48" y="244">1</text>
                  <text x="80" y="244">2</text>
                  <text x="112" y="244">3</text>
                  <text x="144" y="244">4</text>
                  <text x="176" y="244">5</text>
                  <text x="296" y="244">level</text>
                  <text x="328" y="244">0</text>
                  <text x="120" y="324">[0,</text>
                  <text x="148" y="324">8)</text>
                  <text x="296" y="324">level</text>
                  <text x="328" y="324">3</text>
                  <text x="72" y="356">/</text>
                  <text x="192" y="356">\</text>
                  <text x="56" y="388">[0,</text>
                  <text x="84" y="388">4)</text>
                  <text x="184" y="388">[4,</text>
                  <text x="212" y="388">8)</text>
                  <text x="296" y="388">level</text>
                  <text x="328" y="388">2</text>
                  <text x="40" y="420">/</text>
                  <text x="96" y="420">\</text>
                  <text x="168" y="420">/</text>
                  <text x="224" y="420">\</text>
                  <text x="32" y="452">[0,2)</text>
                  <text x="96" y="452">[2,4)</text>
                  <text x="160" y="452">[4,6)</text>
                  <text x="224" y="452">[6,8)</text>
                  <text x="296" y="452">level</text>
                  <text x="328" y="452">1</text>
                  <text x="24" y="484">/</text>
                  <text x="40" y="484">\</text>
                  <text x="88" y="484">/</text>
                  <text x="104" y="484">\</text>
                  <text x="152" y="484">/</text>
                  <text x="168" y="484">\</text>
                  <text x="216" y="484">/</text>
                  <text x="232" y="484">\</text>
                  <text x="16" y="516">0</text>
                  <text x="48" y="516">1</text>
                  <text x="80" y="516">2</text>
                  <text x="112" y="516">3</text>
                  <text x="144" y="516">4</text>
                  <text x="176" y="516">5</text>
                  <text x="208" y="516">6</text>
                  <text x="240" y="516">7</text>
                  <text x="296" y="516">level</text>
                  <text x="328" y="516">0</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
       +----------------+
       |     [0, 6)     |         level 3
       +----------------+
        /           |
   +========+  +--------+
   | [0, 4) |  | [4, 6) |         level 2
   +========+  +--------+
    /      \        |
+-----+ +-----+ +~~~~~+
|[0,2)| |[2,4)| |[4,6)|           level 1
+-----+ +-----+ +~~~~~+
  / \     / \     / \
+-+ +-+ +-+ +-+ +-+ +-+
|0| |1| |2| |3| |4| |5|           level 0
+-+ +-+ +-+ +-+ +-+ +-+


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


       +----------------+
       |     [0, 7)     |       level 3
       +----------------+
        /              \
   +========+      +--------+
   | [0, 4) |      | [4, 7) |   level 2
   +========+      +--------+
    /      \        /    |
+-----+ +-----+ +~~~~~+ +=+
|[0,2)| |[2,4)| |[4,6)| |6|     level 1
+-----+ +-----+ +~~~~~+ +=+
  / \     / \     / \    |
+-+ +-+ +-+ +-+ +-+ +-+ +-+
|0| |1| |2| |3| |4| |5| |6|     level 0
+-+ +-+ +-+ +-+ +-+ +-+ +-+
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="consistency-proof-verification-explain">
        <name>Consistency Proof Verification</name>
        <t>The procedure in <xref target="verifying-a-subtree-consistency-proof"/> is structured similarly to inclusion proof evaluation (<xref target="inclusion-proof-evaluation-explain"/>). It iteratively builds two hashes, <tt>fr</tt> and <tt>sr</tt>, which are expected to equal <tt>node_hash</tt> and <tt>root_hash</tt>, respectively. Everything hashed into <tt>fr</tt> is also hashed into <tt>sr</tt>, so success demonstrates that <tt>root_hash</tt> contains <tt>node_hash</tt>.</t>
        <t>Step 2 initializes <tt>fn</tt> (first number), <tt>sn</tt> (second number), and <tt>tn</tt> (third number) to follow, respectively, the paths to <tt>start</tt>, <tt>end - 1</tt> (the last element of the subtree), and <tt>n - 1</tt> (the last element of the tree).</t>
        <t>Steps 3 and 4 then skip to the starting node, described in <xref target="consistency-proof-structure"/>. The starting node may be:</t>
        <ul spacing="normal">
          <li>
            <t>The entire subtree <tt>[start, end)</tt> if 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 are incorporated into <tt>fr</tt>. It skips any hash on the right because those contain elements greater than <tt>end - 1</tt>. It also stops incorporating when <tt>fn</tt> and <tt>sn</tt> have converged.</t>
          </li>
        </ul>
        <t>This reconstructs the hashes of the subtree and 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="subtree-test-vectors">
      <name>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-hashes">
        <name>Subtree Hashes</name>
        <t>For each value of <tt>end</tt> from 1 to 130, and each value of <tt>start</tt> from 0 to <tt>end - 1</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[
94a95384a8c69acea9b50d035a58285b3a777cb7a724005faa5e1f1e1190007f
]]></artwork>
        <t>In Python, this can be expressed as:</t>
        <sourcecode type="python"><![CDATA[
import hashlib
h = hashlib.sha256()
for end in range(1, 131):
    for start in range(end):
        if valid_subtree(start, end):
            subtree_hash = MTH(D[start:end])
            h.update(f'[{start}, {end}) {subtree_hash.hex()}\n'.encode())
assert h.hexdigest() == '94a95384a8c69acea9b50d035a58285b3a777cb7a724005faa5e1f1e1190007f'
]]></sourcecode>
      </section>
      <section anchor="subtree-inclusion-proof-vectors">
        <name>Subtree Inclusion Proofs</name>
        <t>For each value of <tt>end</tt> from 1 to 130, and each value of <tt>start</tt> from 0 to <tt>end - 1</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(1, 131):
    for start in range(end):
        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>
      </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 1 to <tt>n</tt>, and each value of <tt>start</tt> from 0 to <tt>end - 1</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[
c586ebbb73a5621baf2140095d87dde934e3b6503a562a1a5215b8209edd083d
]]></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(1, n + 1):
        for start in range(end):
            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() == 'c586ebbb73a5621baf2140095d87dde934e3b6503a562a1a5215b8209edd083d'
]]></sourcecode>
      </section>
      <section anchor="efficient-covering-subtrees">
        <name>Efficient Covering Subtrees</name>
        <t>For each value of <tt>end</tt> from 1 to 130, and each value of <tt>start</tt> from 0 to <tt>end - 1</tt>:</t>
        <ul spacing="normal">
          <li>
            <t>if <tt>[start, end)</tt> is a valid subtree, add to the rolling hash the ASCII string <tt>[START, END)</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;</t>
          </li>
          <li>
            <t>otherwise, 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>
          </li>
        </ul>
        <t>The final hash value is</t>
        <artwork><![CDATA[
e0aecb912a10c57d753b6ecc64db73217f9bc4ed10fcb4e9062be3b6fbe1ebfd
]]></artwork>
        <t>In Python, this can be expressed as:</t>
        <sourcecode type="python"><![CDATA[
import hashlib
h = hashlib.sha256()
for end in range(1, 131):
    for start in range(end):
        if valid_subtree(start, end):
            h.update(f'[{start}, {end})\n'.encode())
        else:
            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() == 'e0aecb912a10c57d753b6ecc64db73217f9bc4ed10fcb4e9062be3b6fbe1ebfd'
]]></sourcecode>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>This document stands on the shoulders of giants and builds upon decades of work in TLS authentication, X.509, and Certificate Transparency. The authors would like to thank all those who have contributed over the history of these protocols.</t>
      <t>The authors additionally thank Bob Beck, Corey Bonnell, Ryan Dickson, Aaron Gable, Nick Harper, Jacob Hoffman-Andrews, Russ Housley, Dennis Jackson, Ilari Liusvaara, Sanketh Menda, Matt Mueller, Chris Patton, Michael Richardson, Ryan Sleevi, and Emily Stark for many valuable discussions and insights which led to this document, as well as feedback and contributions to the document itself. We wish to thank Mia Celeste in particular, whose implementation of an earlier draft revealed several pitfalls.</t>
      <t>The idea to mint tree heads infrequently was originally described by Richard Barnes in <xref target="STH-Discipline"/>. The size optimization in Merkle Tree Certificates is an application of this idea to the certificate itself.</t>
    </section>
    <section numbered="false" anchor="change-log">
      <name>Change log</name>
      <ul empty="true">
        <li>
          <t><strong>RFC Editor's Note:</strong> Please remove this section prior to publication of a
final version of this document.</t>
        </li>
      </ul>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-00">
        <name>Since draft-davidben-tls-merkle-tree-certs-00</name>
        <ul spacing="normal">
          <li>
            <t>Simplify hashing by removing the internal padding to align with block size. #72</t>
          </li>
          <li>
            <t>Avoid the temptation of floating points. #66</t>
          </li>
          <li>
            <t>Require <tt>lifetime</tt> to be a multiple of <tt>batch_duration</tt>. #65</t>
          </li>
          <li>
            <t>Rename window to validity window. #21</t>
          </li>
          <li>
            <t>Split Assertion into Assertion and AbridgedAssertion. The latter is used in the Merkle Tree and HTTP interface. It replaces <tt>subject_info</tt> by a hash, to save space by not serving large post-quantum public keys. The original Assertion is used everywhere else, including BikeshedCertificate. #6</t>
          </li>
          <li>
            <t>Add proper context to every node in the Merkle Tree. #32</t>
          </li>
          <li>
            <t>Clarify we use a single <tt>CertificateEntry</tt>. #11</t>
          </li>
          <li>
            <t>Clarify we use POSIX time. #1</t>
          </li>
          <li>
            <t>Elaborate on CA public key and signature format. #27</t>
          </li>
          <li>
            <t>Miscellaneous changes.</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-01">
        <name>Since draft-davidben-tls-merkle-tree-certs-01</name>
        <ul spacing="normal">
          <li>
            <t>Minor editorial changes</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-02">
        <name>Since draft-davidben-tls-merkle-tree-certs-02</name>
        <ul spacing="normal">
          <li>
            <t>Replace the negotiation mechanism with TLS Trust Anchor Identifiers.</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-03">
        <name>Since draft-davidben-tls-merkle-tree-certs-03</name>
        <ul spacing="normal">
          <li>
            <t>Switch terminology from "subscriber" to "authenticating party".</t>
          </li>
          <li>
            <t>Use &lt;1..2^24-1&gt; encoding for all certificate types in the CertificateEntry TLS message</t>
          </li>
          <li>
            <t>Clarify discussion and roles in transparency ecosystem</t>
          </li>
          <li>
            <t>Update references</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-04">
        <name>Since draft-davidben-tls-merkle-tree-certs-04</name>
        <t>Substantially reworked the design. The old design was essentially the landmark checkpoint and CA-built logs ideas, but targeting only the optimized and slow issuance path, and with a more bespoke tree structure:</t>
        <t>In both draft-04 and draft-05, a CA looks like today’s CAs except that they run some software to publish what they issue and sign tree heads to certify certificates in bulk.</t>
        <t>In draft-04, the CA software publishes certificates in a bunch of independent Merkle Trees. This is very easy to do as a collection of highly cacheable, immutable static files because each tree is constructed independently, and never appended to after being built. In draft-05, the certificates are published in a single Merkle Tree. The <xref target="TLOG-TILES"/> interface allows such trees to also use highly cacheable, immutable static files.</t>
        <t>In draft-04, there only are hourly tree heads. Clients are provisioned with tree heads ahead of time so we can make small, inclusion-proof-only certificates. In draft-05, the ecosystem must coordinate on defining "landmark" checkpoints. Clients are provisioned with subtrees describing landmark checkpoints ahead of time so we can make small, inclusion-proof-only certificates.</t>
        <t>In draft-04, each tree head is independent. In draft-05, each landmark checkpoint contains all the previous checkpoints.</t>
        <t>In draft-04, the independent tree heads were easily prunable. In draft-05, we define how to prune a Merkle Tree.</t>
        <t>In draft-04, there is no fast issuance mode. In draft-05, frequent, non-landmark checkpoints can be combined with inclusion proofs and witness signatures for fast issuance. This is essentially an STH and inclusion proof in CT.</t>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-05">
        <name>Since draft-davidben-tls-merkle-tree-certs-05</name>
        <ul spacing="normal">
          <li>
            <t>Add some discussion on malleability</t>
          </li>
          <li>
            <t>Discuss the monitoring impacts of the responsibility shift from CA with log quorum to CA+log with mirror quorum</t>
          </li>
          <li>
            <t>Sketch out a more concrete initial ACME extension</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-06">
        <name>Since draft-davidben-tls-merkle-tree-certs-06</name>
        <ul spacing="normal">
          <li>
            <t>Fix mistyped reference</t>
          </li>
          <li>
            <t>Removed now unnecessary placeholder text</t>
          </li>
          <li>
            <t>First draft at IANA registration and ASN.1 module</t>
          </li>
          <li>
            <t>Added a prose version of the procedure to select subtrees</t>
          </li>
          <li>
            <t>Rename 'landmarks checkpoint' to 'landmarks'</t>
          </li>
          <li>
            <t>Clarify and fix an off-by-one error in recommended landmark allocation scheme</t>
          </li>
          <li>
            <t>Add some diagrams to the Overview section</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-07">
        <name>Since draft-davidben-tls-merkle-tree-certs-07</name>
        <ul spacing="normal">
          <li>
            <t>Clarify landmark zero</t>
          </li>
          <li>
            <t>Clarify signature verification process</t>
          </li>
          <li>
            <t>Improve subtree consistency proof verification algorithm</t>
          </li>
          <li>
            <t>Add an appendix that explains the Merkle Tree proof procedures</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-08">
        <name>Since draft-davidben-tls-merkle-tree-certs-08</name>
        <ul spacing="normal">
          <li>
            <t>Improvements to malleability discussion</t>
          </li>
          <li>
            <t>Improvements to subtree definition</t>
          </li>
          <li>
            <t>Improvements to <tt>trust_anchors</tt> integration</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-09">
        <name>Since draft-davidben-tls-merkle-tree-certs-09</name>
        <ul spacing="normal">
          <li>
            <t>Editorial fixes</t>
          </li>
          <li>
            <t>Set a more accurate intended status</t>
          </li>
          <li>
            <t>Fixes to ASN.1 module</t>
          </li>
          <li>
            <t>Make log entry more friendly to single-pass verification</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-10">
        <name>Since draft-davidben-tls-merkle-tree-certs-10</name>
        <ul spacing="normal">
          <li>
            <t>Adopted by working group</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-plants-merkle-tree-certs-00">
        <name>Since draft-ietf-plants-merkle-tree-certs-00</name>
        <ul spacing="normal">
          <li>
            <t>Address editorial comments from WG adoption call</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-plants-merkle-tree-certs-01">
        <name>Since draft-ietf-plants-merkle-tree-certs-01</name>
        <ul spacing="normal">
          <li>
            <t>Renamed full certificate to standalone certificate, signatureless certificate to landmark certificate.</t>
          </li>
          <li>
            <t>Included subject public key algorithm in log entries</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-plants-merkle-tree-certs-02">
        <name>Since draft-ietf-plants-merkle-tree-certs-02</name>
        <ul spacing="normal">
          <li>
            <t>Renamed landmark certificate to landmark-relative certificate</t>
          </li>
          <li>
            <t>Relaxed restrictions on <tt>null_entry</tt></t>
          </li>
          <li>
            <t>Clarify that CRLs and OCSPs apply to MTCs unmodified</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-plants-merkle-tree-certs-03">
        <name>Since draft-ietf-plants-merkle-tree-certs-03</name>
        <ul spacing="normal">
          <li>
            <t>Use a tlog-compatible signature scheme for ease of deployment</t>
          </li>
          <li>
            <t>Define a CA certificate representation</t>
          </li>
          <li>
            <t>Remove the one-to-many relationship between MTC CAs and CA cosigners</t>
          </li>
          <li>
            <t>Discuss domain separation for signatures</t>
          </li>
          <li>
            <t>Recommend a maximum log entry size for tlog compatibility</t>
          </li>
          <li>
            <t>Prescribe landmark OID allocation</t>
          </li>
          <li>
            <t>Update TLS integration now that trust anchor IDs extension has been moved to the base draft</t>
          </li>
          <li>
            <t>A single CA now operates a series of issuance logs, instead of a one-to-one correspondence</t>
          </li>
          <li>
            <t>Group components of a CA into a CA-specific section that enumerates the parts of a CA</t>
          </li>
          <li>
            <t>Canonicalize the order of cosignatures in MTCProofs</t>
          </li>
          <li>
            <t>Remove sketch of tlog subtree signer API in favor of https://github.com/C2SP/C2SP/pull/245 in <xref target="TLOG-WITNESS"/></t>
          </li>
          <li>
            <t>Add an extensions block to log entries</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-plants-merkle-tree-certs-04">
        <name>Since draft-ietf-plants-merkle-tree-certs-04</name>
        <ul spacing="normal">
          <li>
            <t>Fix some mistakes in the single-pass signature verification algorithm</t>
          </li>
          <li>
            <t>Editorial fixes</t>
          </li>
          <li>
            <t>Discuss the implications of subordinate CAs in Security Considerations</t>
          </li>
          <li>
            <t>Added subtree test vector appendix</t>
          </li>
          <li>
            <t>Define a CA's current issuance log and rules around that</t>
          </li>
          <li>
            <t>Switch the ACME construction to a new link relation and change the HTTP status code</t>
          </li>
          <li>
            <t>Add a maxSerial field to the CA format</t>
          </li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+y963rbyJUo+p9PgXF/eyypSeou20p39siS3NZEtrwluZOM
p8cESVBCTAIMAEpW7O7v/D5/z2udpzhPctatqlYVAEp2ujP7Mk7clkigLqtW
rful1+t1qrSaJvvRq6T4ME2iyyJJosOkqNJJOoqrpOyM81EWz+CJcRFPql6a
VJPefBpnVdmb0Tu9Ct7pjeCdsrex2ykXw1lalmmeVXdzeO3k+PJFB4e6you7
/aisxp1sMRsmxX5nDJ/ud0Z5ViZZuSj3o6pYJJ2b/Wi7ExdJvB89ukhGiyKt
7h51bvPiw1WRL+bw6Zs/nHSj0/yq7EYH2ZjXfJFeZXG1KJLyUecmyRYwcBQ9
9IUo4rU++iPMkmZX0Q/4In4+i9MpfM4b/hfcfD8vrvCbuBhdwzfXVTUv99fX
8UH8KL1J+uaxdfxgfVjkt2WyzkPgm1dpdb0YwrsalrdX6zVw4sNTPIRKTeS/
1OfB+mlef339ASfWv65m00edTryornM4kqgHc0ZRmsFpPDrqR8+T7C/xLM0e
0ceMCI+O4pt0HHwF242z9G9xBQcPj/yQ51eATqenh/x1woAc45vDJPuXK/q+
P8pnndqcZ4+fF2kSTJnc5Jn/TTDjwXwOE55ko743Y1zezWZJVaSjf4nxiYYp
n/eP+9EfAcpJMYxjf97ncVn7Kpj4cJovxhM4/MSbeBiX/zKyXzVMe9qPfoyn
SVbF3oyniw+J/8XD5pve8DvLJ31Bk5Z5MfZnfZFO0/k8D74MDzXJZ3elNysi
179M+GVAwk4ny4sZPH9D9+9P/b1nG/v0vJCZRyfZhJ+A46yS0XWWT/Oru6gX
HVy87m9GSTbKx3gDzxfTBBZ8MU9GTIrwhXwSwYGko+jYeyxaeX58vtqNDuMs
z+DZae37Q/g+iuHqH6VlBZ8v0vI6GdceO4LHeHtEmqIXybBYxMVdtLWxtUmf
23sSCXyAwF2+7V3SB2UC2FmmsEPzwMnF2frJ8WH09OnWTm9zn4aBr76JXuRF
VF0nsutZPoYFwBfnLw53n21u7Xc6qYETQ/Lw5fnZq+Pe4aUHzcPrIp959Bpo
W5yVczj8bHQXvcmn6eiO34iLqwToiCEjfAFHNIAiImooPdL6qHo/p8GIYCgQ
wZa2ehvbvc0nNfj0GD5CCnituPuDN29Oa1uh6/u4bN/LvH0v5QKwr6j69oKv
J1lvUa6/vNza2N16uuEvdxOXC4yqZbm0kI4B+cnbVz7E89k8z+CeRW/nOGLR
uCACa7qY9RnKZb4oRrww8816WYzWv0Wuka2PzJil+/H9godfPz8+OHp13J+N
G2C+sd22iUOZBvfx4uT8+MXZn7xtvEiLZJJ/jM6TWQ6AvkgqvBVl42Zu0w9p
f5b/LZ1OY+Jq8vI6v+y9q9f3tLe10ba+VzwcLu80qUq4h8XdvPKWCJ8DOsg3
0UUVV83Lm8L7CT9FqyvxyXV/NdsErVYM9abCNbEwdJnfZt6SjIwEnzcfe9X3
ie+XLcMR9i7xMVzJxTX8On4Rj6q8KIMjzIh0lfREdH5xEE34MSD1RFtarxJQ
3GZYDvMi7i/SYT/L6efex9l0ka4P06oEkSGerV8DDZ0m65ubW7sb69sbG/DD
0/VXMfLH8j3MWabl+/dAuN6/zYBwFSWIbu/zyfvnCcyT9efjSQ1LdnubTVjM
bOllkgHxfRFPAcOANf2///dVogHmJiHOQJMg0P6Q3J0nizLxOY+RJQ143oDo
B+BI8F14I+JX4IZnVfKx6l0kAK54SDIFbA9gCxwCWQi8mxZEJoQtCUcMgZnM
izSr+mk8KggxtzY2n63vbj7zQCC/Nm0e7jAwq3x+nRTRm7iq8sz7+vI6n4Fw
cgFPzeb4JWLL5csecLhRCmvL/O3DV5H7KvrnyIIDNlym46TgvTRupV24nZVX
6xXi1vq/zXZe//XufPTk9Kg8q37c3TseXT8/uXxW7Iz8a7D5pJV28c7O0xHg
NAiYcZGBAoKk+OD5i97m7ra3o+fxdJpXEXwc/X//1/8DgAAW0DuFJY59Babx
psZDwFIg0HIwu4DS+P8hjYlT9Uoab4rjkahsxltvvb4H689J1C+QuwPt9TYN
eL4J/7e7uTjceLrpI6hsiL652d5HvCtAMAAMvRiBtAISAqLqOfw0wosPolo6
xgMkuSauYsbg6A1IIfm4BSmDjW/trm/sqI2XI5q7l5qp4ROeupdPeoVM3buR
qXswdQ+2GMNXMHVvzlN/HYi2dnsbOwKii8PL13l1MKmSwoPRy/w2qvJoDBej
WJRVFMOQ0S1IL/kCfsnuInVSUVIUQA0bwTCOx0UaZyjxDIEars/zEphGOap6
GUAhxnk10r5CXI/2urTKVrxlteiARiY5ZwEwAnCdJzcpEKlk7G3lTZHe4Cph
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
5DaeUojXNzY2xUjeEkWkY+m1WjS2eRS1mHw/Ih9pLj+MrnRrtlnjfEc1ZF/F
MKQ2RtF7BJNo02klsTkqsFyl/1n8Asn3ClNOiMAhxXRLxgIqcU8mI3I5IXIV
2wWQmYFIpC/yMwWImV4hlnOGsRiIUEE2+aFu1VRdwO7Mv/9dPyVBnurZp3r0
FFkTGQtRH4yzZcE7xkBkT7QrpZIWdIppEa4BH1BKHmhAZmPCEDxIwu3Lg4g0
yv5o2WDJTMJPyg0ypgBsr3NSxR0oabuUc2ntQi58Cpc7xdwkJmvuJR2EU4s+
yhrjqoLNceiFNdGFAU9l83mp5+yJ9bFCDl7ULid1etgaJC3VVzxCHHf5Gw4I
LZZJZdOVbCnLhsUMruxrbuFY0LR3w+U7YBAbM4ifR/K5zZBzZSI0FCpFLjiw
2eVY8VYvDPeSRA74uBjT7qZpaZIxYKj5ogJcHBy9z6Lvo0/jdxs/wfV4twn/
7ff7+GPW2/zp50F3eQqQvc0hybpJ49pnL0HEjQavLl+uwKyrA7JweSSKdqff
aCVNKiqQB+SMmX0gnz+tYhoH/Soh5ZjZIiULJODdBq5Tqmo02MAkGMmGwUQY
/DUbYIaGjIP2jGiG4TNzLi/iUjfw8R6/vDrgNDeTyIjh7kzYyd4nV6ZhwR6t
HejvBnSlKUYzQXsxXic8yC4F0C8UEsdTtnjXL5uGKNpEmTMvuXcozicqbRGT
XqdA+KQQBtWZYFEbHn2diyWHBAIFMEyc6VqM9QFCia638V1JpY/7DLY1JFZr
NnvSsaeBgvGAQjINf8CKdYz3SEqmiY8lVVCZhvOlzMAN54D41JBK5edjUdqb
TflXMccYNkocapyOXJEMSS0NB2X25ZMmTDRGw1dVOuGSs6CiRTa6xuywMUow
FLvP4BZknTHGdj3I+csmrOUtb+zPcLNS1O/e5/Gy0m4oU4N8GfQuh9+PaC9A
iY65gIYSblhxMuRPCmwAEmH4bamnhiN+t9ONnsqiBu+edqPN7dXBvjK5RUpx
JT30c8TvsH3G/06c9NG/d4z96VujmsNLe6ufo8/v9rpPVz/XvndBOOv09reR
+tv5vANv7sLfPfj75HPte9GP67aujtW+4Y9sjzX2e95we7GPu2e/VZ9+5mG3
Vo2dZ8mzDj523G/NUyo24TNA62l3c4PAtbnRhcE/tz+rwpfsDxpC+j+dz09h
zGfwd3MD/7OJ/9lqfVobEQJ0MtaDy9vclHCxWIUGgOeIs8LzUWFnTdriXU08
EB8inE9XNHsjf+jJ5fojXXF4jbRwzEUxRNkmWtyM2lyEBvQJQ7LH+YLiFvGp
2/jmLsJ6leSHKefIgG8Scgrp++D9+YIwJIWK8ufdhsVID03+jvF9xPX+2PCn
Rku0mvKX4I+d5bNd9dPV+m7ar9nXzxhupm6db72mMsW338sf87ubRL31mXa1
426xpXL292XX/IvmCqlA7fc2MmHJpUyk/jWzfOvmQzKy0d0iKrLV3aF/PSIc
LSMzXzqXR8CX/ttMpuTv98HfX8xf/Z/OZ6Je8HcL/m7DX58/RPeSuS+arYkM
NlAiZ1BtJmxIFk9M9klcmiIirDiZxBqnRVMCk6tbwEYZKlnkGRTuJZC9LWUs
bSG6O19NQ2NKArtJ0AWLRV9Qwc1oKJRj7OveNlgLxWB/KmYlj2dugsclZ9VG
yRirKpBbVamanFOG8i1V8HPiOAny03jux00sUXRXlqu3q78t4d/5n47wt87y
cMK/82WEv31fX0L4v5IafyXp/7tm+2Li/3UU2YqIX8ME4KetLpzk3znz17CE
JvH/gXRaJNyvYg3wn+2v5Q/tsnIjNb6HTewgm2i0Abg0eStGA0FVVgHWB0UP
jFwC5RsiZzYflFVk33hb5vXKWmROtMmazgKrI/S0PbuhuhmbcAdoRfk4CC0M
gd6bKu5UsyDHLXVt0Da2HVrHbOWWGY3K01tDhtW/ZdVokSOI+AYglz9bN/fa
bGwvLZT5GAfXoK3ZsSVySzmGpIGA/udus20KU5EFZPhUHaDy3qfxO/r9p59X
yRKxQFjN2IhfsVE/rk9aN6Vgqhx+Q2hUsys04FNToJhb5OYGIbU9bCM8ePNK
ZILZx+Ymb0Lg8XR/c4NAQeKHeWaLn9FaYiAFBa4Fqhhk3t7AtxEtUPYykWsS
u41lapJRjNVQ8RPKfUtB4OIEt8VMil6Iqw2DAMloRCWF6qLC/4rWCMPBHmKN
aHz2HjGfyKUwkPutEf7TTRQ2OGlLW7PQKBEiKlJZwnI8PL4mcRuqu+pMrR6u
gf3kPX0C+NlwXW0JRTQgwjfv8We86VruD6tQeUbZ4LYJrV5LeBfJeI1F39l8
IVHPwD6SkcrIpun3O53v/qnXi04mEZk3mUiYMIoxZXugB5xqU1C96DGXMw7A
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
Gdq/idMuVaTbKpsLHj16JAeEsoGpc4YSWiAeRGGrTHqdebwGVx+HpO+kDa2S
fejjdBLpbJzvv482962mINzhnV5o9yf6mij/9/LuJn30DaaMjIVq83Bcd7VE
QkQowYTTEEsjVMjbdm+m0SzWG2MJijogG4c0nj0TAPoRViFRgP9Bc6324Qq9
x34y1fXKql3dLC4/4KOb2JmdXlTfpSgb0Jb+OfoFn5QlvYo/UrV3F7gHG+am
orY8/F/Q9ytyA63jcSlv427xBt54waBUgQFjwwBbsO2GCcRnsFpKgGv9hff1
z7R4f1/qaQlPNM/+ssJ7dEPRRvkNe6Lhhe9GK/au/2RC4rQKggLC8spXzDAZ
Bwfvdo0TveYymMAX3gV3wVz9upzpBCSUBRqrZ6jSbaEIz+14yylCHhQUsX1Y
miFGEFlr3zgQxgkVpL1NHlMRZRr0bZbSXR/mH3vjIiYaMLqOixgWp6odUh03
rEDJQizZHaJxnpTZ48oWrIMHZ/vRdVXNy/319SvA8cWwD9RnfUbSCVCLWZln
6/TyOjc3X3/G3offsHjGf1VN+m2rJt0XvPVrVk160Fy/RtWkxn/rwRy/StWk
B831K1VNcgaZ4K/+z69WNelhszVZhjRZbrILsZ2Ea6pqO/corIZMjuWWViBp
Qvld1PKQbPo21cnJQ+SszpCkk/2Bnj45otZdcS8dl+TsZBaxyNK/LjAxg+su
SjMrLCHf51dHMGpKmXNFgtOhkDwq7uZVflXEcxhDyjdIJk6X/di2rU3YqKgf
Xbw86G3t7kWfPv3TxcuL74/OTvqbG/29ja2n669PLi77L07eXPQ3n270doC1
AU8/Pz48e/Xq+PXR8RGyJNXHXjkPRAb2lsIpoaCcFlLZoIzQ4ePSr0zJfFKu
FhWmVKXYR7jiNkgN776/OPm3YwGMa3Pnd2JqaGzXtfxYKmtgXSfs7mXkVNs3
zDW4p8blXvPYWuV+irSW1m/cXljO2rRveGizNrM+7sumyxjWmkxJuzqcOy1c
gzBK5LC9xrpe5XtTRAQTtnAf2GzIlD2ne0Pt1WgZqpCsa+5zb7OAT5+KRIq0
Y9Zn846pr5GzYWbSs0qXtbajxK7yMd2Db9ou4x3KJ3xtCnRzyfXqdI5RV2lp
IGnOOo7W6F5SMq1cP7iHRpzlO0tBDLqxFn4IV+ekd9RPk2rSq6Zlj77v8fd8
v2HR1D8hlmY9YlA9OXps+0flw79gRXp77wFbzk6OVrEtJmM/9RuTq8yKFFf4
j0zwCa+Q69PCqyH80Cs0ik+OTBaJdfSZRZUB2YIxmGBZT/kckJROXIosR4PX
Yu3C+QafcHhCzZWN1ej1zwO3BFFI9f2Bdxu7Tt47I0u4pw0zm3Y+K5swfXTq
L8DeAHi1HenDW4YTmiASBIixupoGIgEuNPYIqN2Ynr4xiDKYAK3mQHmeJrjF
IANuTJklaE9Hn6tGT64and6k44VqXyBtRGNriAPdBl6cJRj8k5YzL0HbJHru
9LcpyfN+VP57z+cHYBrzcmWr4ZCCy4XNLuZ4WGaRuw9Z4qp293rHjk1nBPVw
kUlcTPGmuT5QJsKMmoWGdaDYqoyI6hrF0ArD89M4gtxqfIPnXSZeN1Y3KcyH
sQvoY15Q6hT1iEAmX3L4irru0auDP8uqgLMWZAKQC4zP90UYAWirrjFx9OYP
J3/Cml5IkRdpeQ0Ly7BQxIo+/83+Vn/HJPrubj3dsE39dEycoBTpXgV1mlsw
6QKiNaUiD5aa+y1YTDeb+iqY/IrR3rKV+oOGMXrPx5V0ZJG+H+ZXegobz0aD
dNwrxlnMqHJAmEJ00Ebhoe9N6lCXWX+z0/hCdPb8X48PLwG2x68vT16cHJ9H
+/vfR5/YWFTmSHUs+R738uIKLhs3ZFgBXWucj1f2VlmozJIKny4xExfY1sou
myDsBS3hk2j+If248mQ1wpWsbMEHl8+PIkkX9nb6WKpCMXc6Pz49uDz58biH
Ny8ImgioFbx4cPG6vxmwComNMrEO+GLDoaFaT0yHzLd4y7e3dp5s9zcHEpEx
VCxc2mncwQxkFOcmMzu7myhVUhIybgvLkuwBGu7C/570t3b7sOPvv9kYb+w8
3ZyMd59tbPLucXkUNQg0D0s8FOnMrL1Ll/rO2R35XtjOAyyykR2NnUlv4Vq+
vXzx9KIqrONH96apQ7mIq2sTJaKBzfinxnLRGQ1gPzw5CcAuVNuCsW/XZ+io
gQ9e1Z2d7b3t/s4TOD1VX6UF1cPwlX/8kfpLhkMdbTzZ3t7e2t7Zhn+3km05
WpDtTgz7PQWJQOhZYz9rTxruSmttewFRUorrDGoNGQA7xdb6OIX8EnjLUJuD
28kmffadbRItr9iZs7e7u70brWx9BwLy7zf3vlvHf3ubKL6QsOnJECJe4o8g
X9os6iZZUnfEGlKDbSSdmSu34slnoWp5yapLoFzKFzQ06osb8oGDhGpSjQDn
hUZYk5xVUFtNQxqjVv7bqfK5wj1oAoHrpgK3RrdF1kUN18TXvFbvgNqPaExb
tCU458ydLzne1pB7m17b3lFaNyedKbuRTlQ3B3PAfLI7T83JhgvAbZDfwNW7
aNQbL69d7wjFOi1gcE59p+KgbnI3lCZbG0MZuNOour83NpdgQgRICBJBOlvM
2D+5xiRNYST7jZTrksNucUzeusNd03vVdBLBA5sXC2Q2LA+lhmJyW4uSgwcJ
d9JJQp1ZVXP0TkfazTMh2XtGvWcQ2/gDU3kk6OlOFmQOBI+xlZNpg1tiC++y
5H5awHIn8UgkBHxJd693rXl5bwa5mebkRTdK+/AqH28XA4dKbic3HlPDaN3Y
l/qgM30NetyYDpKmsA+l8I8dSMjfIXeBpLgyi+flda78r1dhN2jViZ5ab3tt
Bf0bgkaVNXI0UQMWiZeRA3dEwPoe0OGXVrJgM70gOZU0i05UR3IjIKpwprsa
EKg10MrSVkOruvEY3k0YhCxMquqYKYt3UFEYk+w3o1V12SGo2i76FhPuNQSA
YzPNGiEeXH8SJazrFv6Pu8XmunihX729uIxen10K2aKjh4nxEQNERL/Q/EPs
y3i/gi9JQyB8hfkAxbDBitm3vMhBP+F7tBYM+sHALbM+0AjSbMRdBLlRvHpD
zjZ2nbMx4VKig4kGIrFCMxjjO7eixyBn7Gak77b5TDoEGe1DKgWbQljfEE89
5r0IRRKimWk8NkQOUQOVBOp87URyGxOALQk9O4ZIHBwvFx00DaO4jddwUje7
Dyg2BR/Hpj2oo98kxaCaqdfQkXTVTz9Hx3gQv+t0EoBz9AkEgv/Y3AMxIPq5
aV3HRq+7BLUEXjLDkPB/3/NOK3xf0ev4Uj6PgWSor2AP8Xcb/T6v4/e/6yxf
iF05jZYtptP3dFgrG2j+G5bvERLy0SZ6QmV/zcN+6baUouutueU9goLbu/Rw
XMFPVmU2+IPdDtRO9s0R6a/9ne0bMPofEyzfvf7Jvrq+Fr2yMXcJRTkSmk5Y
a8d1wIVZW6fnf24G0e9EgyFdeeD27wKZJLKhiq967NHuMRNVRgEQPPJRGlf6
nlgO3Texe+ZpGtEQDtccIS5HCRdpo+ZxlIrmoxgbSSz5s9GM1IXHDm9XQJUn
wyH6ppYND4hGSHc2XiU+y8ed/sXhsvbS9g1ZiWLznYTXGQAgKSSyynq/mqlh
Hf5pY3bI60GdI7L/ASuwMC9EaXIxszURLXumGnBt9AizeUztThYAMIVxzCKd
tDgrJTyEOGxeoTmPjt/G/ZiRSAKA/Qwa0DWoeG35cw5Twz8rJMkkH3UHTqNI
K8szxabI5PTiqlnE0fE5cIM/9feebWB2SgabIAxC27xv7QEuEJB0odjHf12k
gNEUmtMNT6FpEzinmam0kUfW2kRMomVqpz6xKK5bDlOyFkWVWuWlN4ebFZgO
WOi+MTml2nTbc21+Sfq25qPm5ZC16OL4f7w9fn14LPQKxiVC6P95t/FTdPyn
N6cnhyeXmM5Kjxwdvzh4e3oZ3Wx2xeJEBriGP6/RVMbDI1dDv0jtz4/yDT9n
THjLxpJn3pB4/Yfk7sA0r4zsT8778unN2+ew/N4fjv/cbYp/CP58qo+KLVob
5z0BgkCiZHR2eHl8GV1cnp+8/kHD5C05UUGBNeDc/Ck6eSXglC8dsp+9uTw5
e31w6s0WDPFu6+EjKNKoj3RbHallgOWnT0Qk7O8///wAaNk/ZuKOsgrSvSiX
3UhSVMyl9GKr16KBICRSQ4M8lGnHYMEffRirL9VHHFaumBsTZcMkymQWY1fB
0rpNvaKhQedu3lHQ2NezWvs2a/JQyDItQWerSLzEFt7Y3Tm2Tg/TltwOzARI
hP/rBeyoh6X6WSM+aIM9cqhRXOApBC9FoEwnUxsthapmuUgr+go/hBXPpzGJ
0YvSRGqhVst1vkQtJncAWpjZhk5mPXsQvrkf9a8ngbmfQo6F/Qpzti8bEUKa
MWH+yAg9udgckkFzQgs4mFZINQaO1tGbqo8FW4oGXOR0yg8jJSemPU4LapN7
R593xaE54KdoJBN3NijG2YWozIPo8OXZyeGxmGkG5+JFONLnrMaor+bAGHpR
zDzIxj+i1DUIpCk87/kCu6GjV3+WwO67vpSk3CQU5CiKBXmwOQEoZ/MxGf5A
DKBoDikSR4KeHsqUiuO4kCgeFXkZKrU0PaIVWVnMM4HNie6dfo9vSStRHygd
iszgltq74kf4Job8s8HlQ3JHAciaxyaqgSgXlqVzi90szmmEeU41Ql93UNUw
tnEfhkk0dACRcJ/a4rssZBgTXNNq+JRokEVpI3Meh4EurWEebMrkupdlgw2o
aU4YvVno4ibfSethqCNDm0at/jDXq1+CAJwX3QZYmL5F0o2tXoekyxaE7Efi
3TSBB+wnFV8mmr8I/TletE37a/7K05OlELvPUizHMQaNB8ThiO3R7CWdwvdi
+3DmVd/80Sj9w6mQ3eri5dnb0yO62ZgcB+fQ5kRgpaMfHeW09pwAJe/QUNSr
XTfQQ/sMBohIuhu5irHTEuWMlLCLy9OzH3qXJ6fHF2SbbWZOVgWz9bqsgEvA
kAY6Dse4mdM8L6veX4GyVIuZ19OcC3TgDRSXrPFm4ybEWkSYVV7jwtnfc+m5
u+N0Rk5wkOERm2CvKbVQl37sILPOgIAi3xl7cUiozuZDA5LQ6m6woCrirMQy
Adnojri8nwJv4YEckYghpYPBLKPFFLRooP/XOVGvZVORr3ZE2ZD2aAxs4skE
9+BbqYB9ky2OUY75C+d1kVI8n08Fb0tnR3Tfo6paBi5cEnokBwRQnSly5Y6S
Fo8ekBnF4fOn5JwpbvztlOQrQLd725CWo2oHOFpiM4R2UoWTfUiSuVXg5wXo
hgZR/CEwP2dKZX3oBOB9uVBCQfB1cwgFSAVpYcruMDabwyGdD7DFnQWFghj1
XNwaBvSlbtuUFoDrU8wroZLQ7C44PChVoBxjFtXGY6upHo9QLDgYstsA1bkr
q2QGdwXdrCjg+FeWZqDD4KjN4FtQWbnmcp4td5/gtYCt5qWBBpn1Syo6NFXx
sCMQohK8cQC92WzBUuijCg6+fCSK9G2OsSu3yXTKBBeL+4DEAcom9/lAsvTy
8vKNnX8TuZc5obgYXad4f9nKfFIxzEQhx1WNpikHjuV0nGhqcXUnyJNBOWdE
gfTz6IqYJJU4ciz7qcn2Jq6SDsXYrd+w/6rTOSOeTC6FwOH0WPmLMBsHwInx
e2QzST+gZMhe8imI5iRLeGSJ3X0Z9qgm55HEyaJnoewq248JhjVnJG3jEwz1
S/njRcZTU80MTIvjNvLAQNOPZO4AvgFc6oru0zU1k/fkRpQZsYsI+uyS8Vpd
/6lUujnASGADNOcDJp9gZ1mgizCZXucis35BZsQYG6xqTkkCnJIK4OiDeCnY
0mIkgo2gyyhnS9s0z6560xQDIQ0xorRpEKvNoRA5xOfkZMb9xpuoOhz6dzrB
Itpmp7SuOcZRVc6EZDPw7QjX1JyNQoLRAWVc5HAt4xEGdzFxsnsGQSFwYhLL
W0hFMHIV4vzkqwoctkCOQJSvOJq4FjxJzMZ740FOXesNIRrMHBmv5Qqzybnl
0TJRfxWPzSiELg0cSZtuBmIdjgpFHjv/lHNYSvUyJAEmh59K76gjc8eEuA5g
KgJ2AIqiaFU2Yh7D/Y1YWsapMb6uWRxdw8vEopTA6gr08cqE94T78SBbd7mq
KewMZgIHinCSxoHb+1a2TUL1AR4weKdzmishkU+ReYvUV/X8ZEKThVMxkQ2L
W+RDW+bAhqeQOenCyY/O9490UJ+9l51g5e+HBstjkD27AkwUrIOKQ/BaPImE
wJDiZmuKKZSbJmqFNEet0VHgyt4OXdkT0ffdiHLZ2H+sQvP8mRrq/wVT7YRT
DZPqNpG6HuieadpE+YAtq8J8jj2ucn5FSy8q1dU66OpULgNCmoVAkFG8yRoh
sbSJtgeK+saWwh4U2sTEWZWJJ0SaX0q5B1wfghoRIR/UNyYeIssTam59+iZI
nyoThJc6C2Mlut6Fbqev3s1m8QEnwHtkErqFyyOvigvxOE3iGz9z3zVj5cxW
Wn2PCzFKPmvsMqdkbwRQEv1U0mpXebFqfOgJZ6jb/Fiv/VFXaIcLHlHzmPIx
bmLTZN5sQfK+rZ/THn1eiKWFLbMuH5YRca8GoS5HB2l7kXl0xgnNKvbp/7C0
09ZZfrO00/Z9/f1pp22//xZppw+a67/STl3aaWPS52+Wdvp1s/0WRdD/69L/
n3bpW7aw5NKHbzz0Ivp/Hnbpf5259O7aL33bO/UscO8atr12z6X/ytl0rrkT
lJZUHtSykBJVasKExHyK9QGzzk+NnUaETeV3EOMXGRPRdBnazExfbhFcxzIz
RXyyB5I+CAzFtmGIlgC7SnUPnQwSfcoJKKxFUu3RLVuJZAvvkWmPa2wMokfy
IrkqK923gSlThj5f9gdJwq9R+VqrIOKwa0Yz5Hhok3ctEQ4sq+vkg5s0udXW
Kyoh7Wdd+6pQQ0dWOEkcRqq1OoX3ilt4mkQUuxi0ANogblkwv4KLxlR0W9+F
8xf8142AGy6EgqLoYE0LSHnBlQnEqICpiuem45ZUeIyKTCsxySdZaQtXifaF
uSioKUleU9CWtXlKSdoZu4KIGgcaZkfTLVtw0GLCNjNMHETHmgIU4xz2IByl
FeU3fEj01VC5/KyMqVqSNivSahlm1VgRLp/aLEXrAxIEQ7sehpPBTVQ7xTe6
nDP15Vn+qIwq14mHhSax3yqQZxxsbX2nhKqcoDNCZWia39WcqnzPvcWWNC0c
DCqsymtknNclJ/O8+cNJQBnE4/DHk8vXxxcXOnffTUCXgVMruN6+jvd2164r
bgka8NXJ+fnZ+ZLxZmlRoMcvlqgFiu+wj3BqlfZ6UxcESwh0wlVbcQ3zbIDF
f0e6f/TcTnJnOIAZt+v95udZkdarIhIcylu3qlhK0brRiPGzGCsx1VDbURku
Um6ddJLkYlACBlhMq3Q+DZC8lBgj66qSfDv8zkXlxBJXhS5NtUFcsTjrgqcw
aARdYrbuJmn58BWtACgzHmmZoNGbyP2nT39I7s4TGAXZkp0DXdHav26cCWh9
mi8KbhUClICKpXnVD4DkOjBSUIcxB5io1UXlInJM5ykX82wPiA1AYcK4fNvj
bxEz2KLuvhnn6LTpuT3eG2IgJ+fwSdxvwecG8BqfcG+GL2mKykEX9uTZx3gi
HiCkzl3DjFw1ErzmpjFlAz8i2uOKf1H8EV9gqnBs4faCIOMofGLMNUQK1ozh
zi51TbJUnT1SeD/gPFWOpL4vIi6MX2HNhKskCEKGgzbIVksvmcbZ1QJe0TZX
a9p9urOzB6R7vzkrRLIIMDyGgsfe2Ro1P4VZEYs0q55yxB82eou+jx7JhtZv
Nv89+/eNR15+hwHNe4zn+24TUyWe2kwJHGtvh5yVQAdmc+9NgMx7NrO1vEaW
SO8TINP8u92IATY1RsCUkgC8vzPhp2lZvxE26dpLfgOIocRrL9Kr097RxUFv
Z0cN4IVq04UijnF4dnHyw+uDy7fnx0gE8IKmtoBc2UQzSxNzhzZUNxO56Uwv
ncR7SKoiYZQ9HZK0ryHPqvF6UlAm3V5FoTgvTgXySUnYklPCB+6UB77BM8YQ
KKz0F628/XZjY+NgNfye8uEwMkie2MDYt4GHGqYYrz10rtNsI81sDeCQSIRR
K8AxahWqMJwKLwSm0RKrtHZ0k2tgUpUphsAmJG/u9WjVnPNuAJGn43WdHD4w
lbQflCtfv5331QQR9OS+KpKAYGTh1qVP8kXRtviWBXM0xWQBgvzZyREJueOc
Eikx1nNGmpvQi3pOfjiWpN+77HsVoojPLwepKiTg1WomvwIhp8iJYV8mpxGZ
7ijq/g98vOZvTAyk1KHIQvEjULSwYi720zEkSxoVZT0phFx5c1CmsCthae/3
bUwRVRgsYFzz9CiVS/IyqkvsMTlG2pBJYMHxPB9dhyVeVKTpM1ztj/kUU302
ubzBP70BwvMnUyFtc3Pj2frJ8fHxxeVRf2tjC97Z2IU/W8+Qyx+o/Gt25rTt
1XOaum0Xi4QD8uXgzBdctHlNH6I5Ce1mx2KeVLbXMmXXNMS7/yg/c/CaiEvu
hPSSRSiS4/H0tizXsgrTbEw451gXCYPJXTv13JayR9SCt63wioAh8ZW1NnPY
xKopWbywG7NLlj4mvkxxYaI9O53nUn3WSgYKx8kcQEjugYSAKiowtx/z0T8t
a8IOqqshikdHVrkKJGnU0KzLXPqBF0R5rT6GFFZRh31T/E8p2Car31CbUT6/
824uVROh6IPHThMz8n6g64w4VCCzZqNgz8I4aOvzu/6y5Wi/2TJctEcoyoqN
lWxYFDWVC5ZkpN6vdhVT2W4Og0ZELu9BAyIWQJk4kb9sOnMeIZ9yEjGFNMMD
pfBgs/2vVaxFp65bXx4cHkDE9DbnVZmMSDUNm76UtYRjmq4xRF9EHFSfOa6a
w7vXEH5rTsyX0xgmnqFIXRMWspzm0Y3WAFhuBLOYnjVuNOq5qsUEls2v7YHC
Ndz0TTvS28DZqWNCo07NmYK1Mh6NE5gIPSIubrNOdYKTpzKhHDpLJURKZYgx
Bp9O5yJUfcqwNyWVMrJUmmPidMSHuSOG22guREFGjpW2P2jXyKeDSFslDB2D
+u2MnjJ1pekMl424pNgKHVgu7dU47wfQy6TPtNRrDCKDnG69yrqAiyDytF1Y
0KxrEx1NV8AF0mPqGODF+vK5NdnESMqYURoWh8jrsOOcs7KuCg7fCyuVUNoF
2pNc0LmzpzRTBRPgqwxmjlCgLYUi/JVxJ2SFLp+S0wPVUSmjWUOlH/x4hnFk
mBvsSrTWdCtqF1oqTU6/SEYETi9HlwQnKOEDuSIBLqSx7OqbbE1TIqqiiZPV
pLrtQ3+IJYgUBJQWSAMhszQ7vpOIcLMXvRKTO+Hl9pSEncw5goq3aJKj1MIm
IIn8hC+7kZ3e62VNaAsSUfGnTzelwKAaO9UeBq70iLN3KU+EGg6KqEeJ6SYK
1Mag3m+oOslUqgMJfbW1Go5J+etGDbEROKbZJ3/elUU2WFVkg51OaONGBVtZ
tlXpw4CLRCVQvZlkqfAWuI6K84gRteVejL7hCyUbItaeh8Yk3lnj1iS9WhSm
4AJyA4crfm1OaRgs/fkaDLBhQkITvuA+TG64SbgLDCvLC+Eqf9kBFba1njG2
ZHjeCuWVkHVL/ZOwisBErPCcZGlq44ifJ3CDcN5mYE23psCYBah6sbJ+UDPZ
2l6J2WnmxqUn2RqJ/JuC2ilbx2ZscN3elOqeUVklkXj0BE1CD4e4E21oEAgY
Rmnll/pie7hX6sb0rwiTccTma1JDAQ9gQTR86Y0tNnm0HbCdSSWTTkwJ1oRL
HWD3M8Ri0pTqXkqJu3xcupoAJMb2KX8FMb5RJsJ+nXduU/yra0GZsM21jz21
b4Tl2YBr4ZDj+0JEUz6RXiAmUcsj3U6PUlwkUliBHTuewLky1GZJnHmFse2C
gJAkaALIMwcNyjhmY0/DGzYjWZUR4cuT5b18rqovTWC96PSSEbwXTA4ES8SN
QEbO4U62f99ygroldK28SuCt5TDCgrZeSDS61lQlM5fC2ZC4qSjxwFWKqZWP
kYTOmFrftBwQymVhoS266srEPyHnsEnktRAh1Jb5yaoQTG+ukqosM8qvMsw9
dKmVbFpzq2krC8Ws1IX5mtBfGLd3l1Q9A1ghzk2Jo37BLEpk4Pqv4sx2pUpJ
QnD1E9hcJsvipidBpfQbKQBMxX5AQj48Py1XRX7gRGmE0FlGBmZdXOECqM6i
xPvL4RwrZ4cXb1YNiialjLH3bG/DBIJ4cfokzSnphhIzjSRP5yjIeEp1jWAN
MH50LsMfxVWsUrR8GzOL8+RnYuUwoObRBUKJfHac+aSlexYQpKi8s0n5wheu
fYEODAdr4yvGK4DXFg9jBAzOLcF5Dh/sylMePByw7jTQ52vFXq+GoyqAasDb
M0Yt3iUWjCD0hTHoUEQOs75WknSQ1niK1YF3lGVN7ovDR+qlDtqO3OCYO+CQ
ueNwdXwutS/P9oMmcedcdRZY1pGjMUYIASywUqvzLklTz4H2vgFc7yDs1PHF
kSDs0Xc1vYIOHey30KSn1H4AXb4FVQRbq0VqK2gb8d9dBcWfwqsK0DSfUjFt
UUYHngdBx02q68moqVwlD1ONRJXrMEwzHffmSW9WjTycseJyWKTKzGkICuGp
K/izpKBKUItmlcxTtqCKhCgME9PG0B2KArMq46uOOs1IYh6mGSoaYenokLV/
kXPMql5SPIgTom0ZI6uJyiXBDHQgnNksH0uRW49mWExsIK91gG0HALP444rA
jU2HvriSFpEItgEMj6eJmj71hrSnNoxLQDrtiVgy/7OHzE+nhXOODgzuweFd
nr89luaH9+CXX0AmKIhG91s9gMWInSpQKTQ05jZdLaBkCi2VSImUthnO/OI+
yskmFX1QmzEFffxi+Ev39p9UFn+e4LNcE78D4FuywuM/XR6/vjg5e61WdvHn
15cHf4peXR42v0QP2T0dRc//fN8h0xuH5yeXJ4cHpyeXfyb86MDier3oBfLe
cRFPql7rPexcet0GcKm6vDyNY3zYW/+xt9PbZHlshp0YFzMswyElV9ho54pz
+w1jOrCDV/HHC37q5PXl8Q9yZpsY3/JkZ2fjyfaTjWe7u5t7m7udTiuImgra
Acvi4myNVeGOTn44vrjsHZz+cAZwevmqG33q9/u20lt6BS9FLe/aoI+212dp
FuxpZaPf15tdlQdrm689aCqq/TqdBmzFqtYi/lthEf9liGa6ZetSb+2H5Ex+
y+q+ybmFZZ/I+OnMUqaZGNq/yNxiQ3xNWyIUivyI8okbKC1NYA2RHxvVMJiN
4155HcMXg1ZO9tQS6mebW6bKG6OMrvLWZHJTO1jRAnusig1KISmLRKLSWlxx
kOFLJ/H8+JC5gKayiHf/SuU7RRHdj6JhFQL1NyDAvYLKpIvWoHUGVBYqlZpq
I+NPBNn8AmW6fhsyYU+eaxHeDCPxZHPifb7LhBk6Vj4tUjGJh+LiA4S6mnW5
+rvUChH4m5mo80p+ebQmhcpOKZ0+MMfaBAjnrkUnBL8qhcSduBd0zXAGLF6k
8mK4PaDgavr5aJZvghfT0mzDj3wtk+nEGNMayrCHKkxgCZF8kegWJQFbItaz
e4TBYniaRLzotrsqHlaC8uKaujUZprw2hCDOQKyUpY9qOtqzZ1u7XK3FE2ta
tD2sySH1ejnysk0s0ip/TT0sfdFXOW2bIBN6/MhOFRrqEwDXfFGVrlxY/WCC
Ino2bs9FCpFbxzSUbKnnVat6YJQlv42TXW5DRRGTjk8kQKlzbN0nqg7bH13L
TWteiJfTHyTUiJ9EFemzgIPX/g2d0RiabIJ4xGsTei1sdQlrxZdeDibzxFQV
0UVD7vwU/xWsBwZ4CoTYKzBBQgDaTdiN3WZcrbgSDfy1cdRWIvMuO2c1xHfK
oG1t5s6sbYtiqCDuKXUduEIf4g0ogbgPysvJU+6fYkBs0phMwH+zv9y/KXW9
wmtFE5ccxcWZWTwljYzGuHE8zTO/q531WS9vfmdXQXEpAJAJlpjCvbTfVjdj
UFopu685JYecCWGQ8vGaP/hwMyEps/oFNkHrlyEJ8NR12wet1dzkSWGXtfsD
MowuyCuVZ3/l0ry2pYQuLOFXT3SCZvsdZ16Z3bEA+4CFeBZ7rn8fD4lfCGla
ctGa1uccz0tG6UdvyPDkkUXh1uyasPV9tR0rCI3+u81ozUfNcuNrEhsHrSwA
43N6fB+9mk4tPEBVx1edm2A6UQ9bq0gFy6mhyWAFw8xllO++i3YoO5qWNJBE
Rl8O9qrCilJ6G9+xhjRMXKsusvh4bZj2dmwbplbgNUq1HmMxUS7joGRt2VCR
lrZLnG0JcJvmdQVUeWhikV89mi632rJvQ68G9nzbnlC1XX3LadakcJvCywo0
1FUItSbUTd+gAzcwnHbF10cvugAJejOXGmq+ZUkP9p9lSXJqIL6vuiz+o7T/
jVD711AxR+/OkStTew5RUP8ZhFYp+sekPK2vsWlLRc6Th2u5pQt7pEh+kmfz
0ilKX5JN5RvObEZMOvZSoSz8wv44l4c2WuzX6l6DqVQ7T8PkKvikIbnKxkS8
p5iIeicctT4lntR3QRgguVh1Fq9zdayIjfRBP8n5G/Xue60ZJH4GkGbKKj7K
2K2RLmQuKmYQ7Lxemv3ra455u3Txi3ZqB8ewZYq3SD9vNuOIG/sZyDUK2Wq9
V1zkU6iuLPPlfHlqk0nScZzAZ3sWefh065JJk+WDSI6KAma26LpSu9IN/hx+
oor0/2ISafDAA75it9LAT2rde6DtR8emM52ZgMJKWVHyT2HF9beRJjacsLca
Gj0vAIQVdT6qTIIex77YoTl5BIuJBo/B28/1WyZGj7JceVI90DT5mI7yqyKe
X3MpfCpNaYk2XJXShLoVyV+MWiKRmxOlWo4XHCgSgEcMgiRU8/N3Nq7arIFu
56ji3L3UtexDPUpXdyAUbxgdTxxjVsjuB5zPNagD8N6k+YJrJAgtoJhqnlv4
l92tpySZlgAhcyOLmJ9axK2KbwGIcyx/z6VOUUakUAGUd7CWZGrRjIucUgOj
egwlb+ni5cHpKUBhlEtHJ35HDYI/2gBWVA9z1oK5KyFRGfJItqxhGt+zBGOo
qK2E3mxcCKujF04L9o1hB9Fas4a8ptvusWKtNX5J6TKUQ8XeKZVYlQP1LSmV
rr1as0i4UsDUshHQMS2lJvzYU6CHyV0utNpg4Eq5qnhJX2/cU/8Fn6UWvJlP
nwtwCIzTxUWPk2l8Z+JB8RVODlMDmlgnQQnAw2UWLtw/lZH1zaIEjoyik8ec
ahD9JR/6ZslYl0Kl0h9cidsLU2Zsx3dpE8m49InZpg0a4HBWPgU7rM2+AY0H
4fnAwJR+ZwsbULvCDDD1mILPkWvYatw9ErkBnUsXIqbbz+MnaN6x0bpi8zM2
O5NXQ81TVbISEikfNJW58kDJ/ALC/c52AAJm1cLGmwDgbXTHvi3Fxr0boJbh
BY+HfJ2UdFtpx2WiwIHPEqrQ/aXWx35nt2llJuctDGTXF0cSW/qdPXHJmebA
XoyyOTt7cBYzS/9CtKbduJnZJh16gVBIw88ROZwWYnuQauObNsZ5m5M7wQIL
AGlegmyEb+xiohT9zvn8uxy9D+DPr5AluerxONfF4aUACtRM7gibeda5S5Wb
46dS2PoaxSKzWh5eSFlaGVoOZ1Ro1jNQYjSj6UIsocOmtH14kDFVQQdCh/SX
uYc6VwpJsebLPHN3StKziGgt6WeBWblEiz0cBAKMxtEJLYoqO9tdwq6BCL1C
cch8TZ+hJ3Ax5UNH72fhSCDRWA7ivE6vTL4G5UnB0V+Dumv6BZ0fH569enX8
+uj4yIQwlgRnYwViwYLjPj3g08FwmX7b2BtBkmFCin2jRVQx0Co5F86ebtuJ
6hxAl0neTI+oLQHLbVjBN62qKWZFZiCIcnwqV5KZy4Jn/egUq/z6sEUnAbdF
SMe1cucEqNu0vPYcpTEIvhqb6oZIo1vscqzap08H+AqMfA6gKVO4Y0zFRcBp
xB+x2XMsbSQJbA/onqKscKMgK5pkV6+7ivWwIuzVJfb54htbyHySF+qOoDiA
ThIJ/Ce0ywQ3EmPMVik6IFjk1CvN1Di23UGKJNSXgjy8hmpWrZhtiWydx1u9
VRUFs8yC71Hbt9z/S8b0svF1oiWaVcdEZGfWzq9M4yRWnhoHimmgVpcul/pY
vkzIzPKwxZAxhHH+FcsOPte8jsfLJEiuHcDzWIHjlkpSM3vtuz02OomEgUT5
3OT9UGEF+G1mO9FcooJlPOVxTbD0BDzWGyiMHVumRGLZUOXzF/NelffGHMmv
ttqnmObgrPnqL1T3G8mLDBpeNUrJEX5yRVWwqIX5MkDwuinHVMommhSFnrkc
LkfbGlaVZy3IOkdnIYwGwgDaMbwGHEJH3CB4E9BMyc4yNkGaLi2yZsatCzgb
DADIWe6/3/+Hl48Kb3rR9aqWgkVv2Aa3FrT14wizzadIQOyz5Zoxdbi3bUpt
7Ho/dNmAIg13qEUOS5XUlp0ywEe2gx+JxrYzEIJEkJCIoBfXaYAi2dTkcCGV
P0MLOAcbsVxBZhmubcM9QOTNrnuLi3xoi4zXxsONoEFhH3EGGl1okyQWYzmA
bQP+ZNIUkFrXxyUrtm4jVn/QJyL3eW3fpb+5DajyTeKV4p0Ai48GVDgC1zcw
Pj3z4mPdm4MMaSgkvA9fiCsX+SMyhBmBGvkELKJFOfKlNmR5bYrR4J2/jG5k
f1wdSAImLSgvEzcAoWgIL4cfXEMKE5uA8tbAisFGZT0qRFoPoUyGhDvNFrD5
KQUB5kRUMGzJ3gSxLsmXpNPHUxyr5Jg5Rt+l91SIKOls6h22nrgiNx6tfFyG
TIFLh2IqHXAE4/mMqwqzxhNJXy0T0nKs55Gy9xH4s/jj+5ii9N7bnQ2cGUJR
hEpF4Lqu4fYlF+1hzNqubVOoHFD3DiySwAYzLVi2LGjq3Xuvww09u6ZJg72X
cm5jprtS26RSIS4sUPPFpXHURMu3YbrdeS859IyplgpibL0OazgTDSVmT6MH
DLaitagZFO1zKsBGx5TA6tZuEgnZA+1FR8n9pMijcFQSVjV/I2td+JRzuIct
b4BiLANRgMmmWIUnBmEKGws09t2moANjU/C6nbXIpu6QPSyZBNU5jREopHhy
47FJlBlIQih9NHUjU1NSUVxWqFzRXMOxlIoRHCvSfOyUGhWPRgsMQ17VUVgo
W5r8SmKEzKxKlqS5PMsUK1N41xBv6iROKcLBJH8CxMLWg4QxuI0p1cPhGzGn
sIh2FJUygytNp4L5DAU3fc7b9uriJCV7SCgrnQvTTIOTCuKCg/EMqCDnM1am
2LCPUSQWGUlI2/0wbXYGKt2YuybK8RuHP9JRiV81dFDT8mk6Sbh61yR6Eo1j
7BnqUEVzK04uhz1SWQ+Ar0gfLdCA8Tb3nknJKC4nzjtjopxF29tPBeSEQJsb
3aebe9xalRfsijyiYHngFmVp5pdeFWfecpfGQozNtBcsARD+kX/tvZyZ3tt4
YapJHpkKfRhMw5FxSqrrUsUez5ZABfCMyCGcDj3yMmLrnGTrPbD2lhG1vfOH
64pI10zTlBRlSoyHkrRkcjf1KPMIqBbJ+iTd63JsX8OXunRlWjAJb+0oSacr
+DVl1lukXY+awbUafRttDkyzo0HtRZWR8Lhcei/E04rDYX0SvKRSzsJujRrF
WhwTI0LyEVsLktHLdScNjstU6QMtY1Fee9MTkO7EsMbP2wR1OpQvhsggYnVT
sjpQ5mpo8etuFsqTosNKf0HZRHi0YkqLq5oJDHdmS7PU2GELoRXtx95PiaEP
SmupZA8/+9a8bmrb+pddq0SYa1+KpE559zaikCQf1xrAFH4FblfA5jEoT0rA
ciolagjzeJSYzHJq5pD1suSKRWdTWFSk13I/GnyH98kezu+j70A0rWH+7+HS
Ryyuu/WZQGlvX6Jc3aZcp58gQtxxHwZYw4IX9dGj775v5oPLX/EWjjVWm5+k
+0IQZhKnOrpZS/0yIHX9Nxy5iV4bPdjqy0QgmlYBBIAAN0iDkAtHCvVNjgbe
5qJelA4YnczJWRRp0ZVhE6Irc7QzGdzDpnAc3in0WdPRVpOkyyQZJrb9J5sp
pIdvkZTAl0c2E4Ob+Uqj9YyLOnJxkuRjtT6fAiR+R/gMZPf7RTXpPR0IMTi0
RZ0VOWizNnLXvIe4lqTuf43ldNWHzcpmEGcbulX/GAPCG8usbzMxXTgtaa7n
MkgCyBYycmPPCIwPTvKveXXaB9zuO0A+1E3nhBOeRdXaiaUSq64jZyqnivGc
3bGhf7zRGC1UXUqcAgottx3SrFPeKxVCaTH7oqyVKII/drWNfNuns8s0cgAv
7yFkKVKqU2borzaWeLbBHYIHun8xXxrbHVWXDTChMQ4aLim33Tgq6Qrj3LCi
ZssomUKj4xK4s0mKqgXOlew9tZbh+zMmohIID5GUmCJkhQ6p/gfOHmOtTZdS
4vFvLiojkXWpMyPJyBqaCjbWYKDLHfUmIDmIQ1fZF1AzTD0OavOp9FJ0CpOC
p0KEpTO0I2+oLWDg/qhUgpISAcyaGe5U4czQgT8mQy4HeUAS+b+C0Bk9q667
0dbG1i4x7U+fTpOqPM5Gxd284sIiGGwG+FGQNWp392kXWDz+NQKPB3dpcsCM
7PCARpRg1Pw2axhwq7vJw9GQLUYm9HZfSudssTKjUxNEsWUTZP4xUcIxT7qz
s0PTeZOg3sBaXDAFF6CU3s/+kMrkLbClS4WSrymul9rO6jZY8sbinnmJPb1S
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
eX4cyNRo87z61+Mfmq3fca2eE0WVUvXsbz98CG/vp+ywGIF5m/5F+o4NZfrz
ydm/Ez41dfZp7VNf/4R/tf7GfdXZ04fSRjnuX8zcf4tRf3tre9f95kdSCX3X
i7+4VkH5plVsv3AWJF7QMQu+1fp3Hn4+Pafhs+ekZfjWbeChkr/qVLS+4efN
SuPPF0zTF87bZUHTFtmRoS55yzy+Vsa3Q3ZiLEvEHl/QsTxYiAz4Vef1Vm+M
59mzb06ddK77H8j1RRvE2ZDFLSf/i2d89TTPx1XOPKAHoHA8Pmyb3Gdl9U7G
6zpDQN6fOZPNhuLzSTL+wfaDB5gM/z2a0kdrj7J8dFH0mUQ2n/ZVM7q+mKmi
72GGarEx9ftek8aAd3dDKiu9ZbcRklj62Sa/D1tmI6ndUpiXpAxazDocvumj
wBGWnSH8ejeusoKr+0ySxsu4YgXNlWwKGn9Yvx7K/smEWe31+fPamtsPzioY
vSNdxTdf1h1ra3/729/yutocJGh1fXgtyz66LszWBxvBFTruz+bn7rbJ4dz1
+xtOBY/X9zYYp1cVC/ftNdp3yi+3vrthPI300+W78sP6/oZojfUt/n6iQ9bd
/t3IXPcPj747fnF8evzyxUl2/PzVs+Mnx6fZ6cH3J9mjR9+uPT76/viF26XP
X718fXriGjo5/v7Fwemb10f9g2ffv3x9fPr0eS87PP7+6OTU/sYrjqBAP37u
uee/e/3yufk0oHBdr7YeZm4unV7+kWyUh4Ptv6Dnv2CSvnya/ETlbX3c2l7f
fUDTlgUdULuBZQenp6+PH785PdIhkmzrM3gN5/MfbXj0MXcPg9rnQSFU5Qdm
xzI4Ri5hufhHHMigX2rvaDAPeTB/4Fh2D4Kvl/1Boti9TOLTfmf2Mh/cDAZP
NPijD//Igy8+mMEPePCnVhnpWKJf1mxLymBWMlr/nkNcNPsssiv7p7W1jhCh
E13B//sRDQqyIbG8ftz6S3b0g0g92TCZE4kHb56dZu8HPRadADq0GW7YWdy8
7K7md/y+Y7EtF9JVbaURd78pW8XqqzePXff7/3r0p95aWx/jPx9btvrnz+3v
VXRZlr18cnp0mp04GffiezsnivTw0zn4S1Ai6THLXr4iNXPwLHpb0sSP27dv
wYDs7ZLeN0tqpPTHWLh9/nyL2fJ/9MVrTmOm15GXj//l6Mlpdnx49OL0+Lvj
o9fYfh9lmr78xNizgkbaz4tXUDU9T+ao61udh361qGrTM9PdZED4+NXB64Pn
J9nB6yOC2brey8hbLN3fafzUk/XtXT/0fJH0y+tk05/TP706ashGMxmH2eM/
tRv0Mv6VF6rfaSYuC/quTIM7FCt6ePTD6dGLE7eVTc9O/vTi9OAH8ti0P9Q+
Q6smAk88cTvu+MnBs+PTP2Wnr98crcFW9ulU2/+2t9MfSH4H1bdZXgRcaRTg
bqTWb665Nz9Xiors+MXp0fcy1wNC+u/v7Gzt39/feri7O9gb7K6tdQ6tTVFM
Z+cs9FqlbdPU/bi5ueklaHnuHso6nm21ne3jF2WVjGl9a3PTDnZDvtgYfOOL
NN1HLw7pEkI3ExsvOtEomwAfKPZSsY2LxEL2GYbQjUTWojYCRAQk8YHFjRib
5hQKEDYSj/1VgiYtoirxadzqQCzkMUoo1xWS8CRbbFSMOXAc054EfniOnz3m
97+O37+29keul5lHo2DKchQjQdbB5eyKMpPBk9frHo7QWBf55G4tzJmEgWbY
EbyjC8nuou9wrIz+xS+ZFhMiTSunY5/uXeTO3kKaI21RqksnBHQV6oMRNjab
M2usPsdfcB9z8yhbhac8XQi1zJG90pRpyZFnVc3GArqtiVGJEl4npVMBmJs+
TWjfNVb3KXvy82c35xfs511okKsxlYQToXl88Igvvnn9/lw17NepN+Vr/eQT
q+ytXuauVeEXdAwRAL5/cxPZN7Gq/vOa/frXyeN47BPeuLOhb3M/76AHn8Kb
t29uRt/856Qnf177Wh7q+Hvtk3v/9san7NOP270d/L3T28Pfe70H7m/pw+DG
huidf5Z3N/52T9M3O/9b+7TlXjlw/227/+67/3bcf7vuvz33377vxtaNDZGQ
+fgo+6pzD2WLcjEtvr1zUGmwp33z3PnMoKHOY3e2g5yIs63hYGvrTGUJHyJ3
rNz1QY4IfZdWdW/jzKA/VnzxQeOLfOJIt5pvYqueOVlzREhkniBfY70oDBUD
u85wKJ1iKwVv4cOw4YuE+LsWZUeBcYREtvQke+7mViGhAhLiBb2JjrXWzeLG
gcjNcfiplBr6Lr3xGTiIuLLjsX6kAoqeYOHlDETGhAnlydmPTkjPFz2KO2+c
9fy3ffu0WI+PT3/64/Hh6dN1ylHvZ3jE/T3ARHJZAQwTRLBM45ekBM3Fi1m/
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
+j0E5S/dMkFQHvm6Fk+0modmmvw2liTcdL+liPs9r4D/5MY2C+7uLxjAs6Pv
Tn+SUeDfkNY/vj7+/qn/Pf/wRWMMzVJwRBumf5uW1V707d9qKrxnmde/GvtU
PHKk0u/YfanX2GYAh2o16fabXnP2NOmbwFqkmelQNEks4AapWmzlxWj4cOC2
/9bImQ37u+5EFKPR3s7YHZvtwf7k4XC0U4wHW5PRcKd4uLW3PaRDMxkWg2I4
+Y2l6t/FEl1xzY3ljD5QTOsiboLW8id5Af4N6xMLq7/mH2hAKoxZjmj/6vUu
MRz1L7yJOqnvcsv+40fzOvrMvzAdRqe4/KV7QcVldjAiMOyUolNwvq99fKRM
cd/ega+Zc4QtVBqpYz6pgbHcxBLgTst5mSurg0/cAtnnKB+zB5SLf1bZ6bOT
jKo2USBQ/ZcoE8lH19ZDOTVlwtgPyOWeasFxovwpU2JW78R1OYO3feaDAFLp
YxyqgbshOcv4Ws54XYSCflr3V14SwUT5HY9nw+xxMXrXczpmXly7n6uqmE6d
QLt2x+mwHL2raTwH+dwN/nsuQf/C/TZ7ms8viYHiX/KRa+LpbDK5yKv+QTWe
F1dOnrxe1rX77bKeFk6eHBZV5ebdfZebO57m8zJ7Vi7r93k+z3vZietLsXib
PXdbx/34PF8ssufLgrK4XM/ezt3Dr9zv6Nnn5ehtXkyz1/T3fIz20NmTaVG8
L3nSjy4o9/TEbUuuc3WBmmkUDCIft6TiQFoy5L+mfVtLYGRaiGowWwUpPFcF
pS7W2aQoxlTJglkKdUnQnKgUv8OkPlP2R8qbrN+GxX1e5m5rTKmUieR1SZ3I
nmSRJs5y8tNXTpXPp4QGH8/zCaXlvS9y6m1dACqfXZYLt9P9upfjIkexPqpy
xfmGRT6moM5kzkVyqSilG5DGh9yPITrutJfMcfY4n1ccDPr48eT0af/QTWB5
CatIQ+QgIjMIcfpyZ9XrEnwfeSh8zHuXAuPSZVx4zMkxda6eoBAw0Q+3H/F/
zu7de/3dk+xoTAXS7tYZ4Rsf3buXvaL0GUQwZ2BGASXYSOq8ljPkpVyC0z1M
uWuN1ZjS4mtH0+K+lAqFVemP8/fleFhUqBBgaYpoPHV/a6u9233XCBVnmITc
zuE1d1axgMx4TetMJ5l90YYHZTiduT1JK7GZfbW/TU0evJ+VkpNTXFyGrTSZ
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
ko1OVE79wXLbml3Ka/8HCzN/fEq+AgA=

-->

</rfc>
