<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-davidben-tls-merkle-tree-certs-05" category="exp" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title>Merkle Tree Certificates</title>
    <seriesInfo name="Internet-Draft" value="draft-davidben-tls-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>Google LLC</organization>
      <address>
        <email>asymmetric@google.com</email>
      </address>
    </author>
    <author initials="B. E." surname="Westerbaan" fullname="Bas Westerbaan">
      <organization>Cloudflare</organization>
      <address>
        <email>bas@cloudflare.com</email>
      </address>
    </author>
    <author initials="L." surname="Valenta" fullname="Luke Valenta">
      <organization>Cloudflare</organization>
      <address>
        <email>lvalenta@cloudflare.com</email>
      </address>
    </author>
    <author initials="F." surname="Valsorda" fullname="Filippo Valsorda">
      <organization>Geomys</organization>
      <address>
        <email>ietf@filippo.io</email>
      </address>
    </author>
    <date year="2025" month="June" day="20"/>
    <area>Security</area>
    <abstract>
      <?line 182?>

<t>This document describes Merkle Tree certificates, a new form of X.509 certificates which integrate public logging of the certificate, in the style of Certificate Transparency. The integrated design reduces logging overhead in the face of both shorter-lived certificates and large post-quantum signature algorithms, while still achieving comparable security properties to traditional X.509 and Certificate Transparency. Merkle Tree certificates additionally admit an optional signatureless optimization, which decreases the message size by avoiding signatures altogether, at the cost of only applying to up-to-date relying parties and older certificates.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://davidben.github.io/merkle-tree-certs/draft-davidben-tls-merkle-tree-certs.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-davidben-tls-merkle-tree-certs/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/davidben/merkle-tree-certs"/>.</t>
    </note>
  </front>
  <middle>
    <?line 186?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Authors' Note: This is an early draft of a proposal with many parts. We expect most details will change as the proposal evolves. This document has a concrete specification of these details, but this is only intended as a starting point, and to help convey the overall idea. The name of the draft says "tls" to keep continuity with earlier iterations of this work, but the protocol itself is not TLS-specific.</t>
      <t>In Public Key Infrastructures (PKIs) that use Certificate Transparency (CT) <xref target="RFC6962"/> for a public logging requirement, an authenticating party must present Signed Certificate Timestamps (SCTs) alongside certificates. CT policies often require two or more SCTs per certificate <xref target="APPLE-CT"/> <xref target="CHROME-CT"/>, each of which carries a signature. These signatures are in addition to those in the certificate chain itself.</t>
      <t>Current signature schemes can use as few as 32 bytes per key and 64 bytes per signature <xref target="RFC8032"/>, but post-quantum replacements are much larger. For example, ML-DSA-44 <xref target="FIPS204"/> uses 1,312 bytes per public key and 2,420 bytes per signature. ML-DSA-65 uses 1,952 bytes per public key and 3,309 bytes per signature. Even with a directly-trusted intermediate (<xref section="7.5" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>), two SCTs and a leaf certificate signature adds 7,260 bytes of authentication overhead with ML-DSA-44 and 9,927 bytes with ML-DSA-65.</t>
      <t>This increased overhead additionally impacts CT logs themselves. Most of a log's costs scale with the total size of the log. Each log entry contains both a public key, and a signature from the CA. With larger public keys and signatures, the size of each log entry will grow.</t>
      <t>Additionally, as PKIs transition to shorter-lived certificates <xref target="CABF-153"/> <xref target="CABF-SC081"/>, the number of entries in the log will grow.</t>
      <t>This document introduces Merkle Tree certificates, a new form of X.509 certificate that integrates logging with certificate issuance. Each CA maintains a log of everything it issues, signing views of the log to assert it has issued the contents. The CA signature is combined with cosignatures from other parties who verify correct operation and optionally mirror the log. These signatures, together with an inclusion proof for an individual entry, constitute a certificate.</t>
      <t>This achieves the following:</t>
      <ul spacing="normal">
        <li>
          <t>Log entries do not scale with public key and signature sizes. Entries replace public keys with hashes and do not contain signatures, while preserving non-repudiability (<xref target="non-repudiation"/>).</t>
        </li>
        <li>
          <t>To bound growth, long-expired entries can be pruned from logs and mirrors without interrupting existing clients. This allows log sizes to scale by retention policies, not the lifetime of the log, even as certificate lifetimes decrease.</t>
        </li>
        <li>
          <t>After a processing delay, authenticating parties can obtain a second "signatureless" certificate for the same log entry. This second certificate is an optional size optimization that avoids the need for any signatures, assuming an up-to-date client that has some predistributed log information.</t>
        </li>
      </ul>
      <t><xref target="overview"/> gives an overview of the system. <xref target="subtrees"/> describes a Merkle Tree primitive used by this system. <xref target="issuance-logs"/> describes the log structure. Finally, <xref target="certificates"/> and <xref target="relying-parties"/> describes how to construct and consume a Merkle Tree certificate.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>
when, and only when, they appear in all capitals, as shown here.</t>
      <t>This document additionally uses the TLS presentation language defined in <xref section="3" sectionFormat="of" target="RFC8446"/>.</t>
      <t><tt>U+</tt> followed by four hexadecimal characters denotes a Unicode codepoint, to be encoded in UTF-8 <xref target="RFC3629"/>. <tt>0x</tt> followed by two hexadecimal characters denotes a byte value in the 0-255 range.</t>
      <t><tt>[start, end)</tt>, where <tt>start &lt;= end</tt>, denotes the half-open interval containing integers <tt>x</tt> such that <tt>start &lt;= x &lt; end</tt>.</t>
      <section anchor="terminology-and-roles">
        <name>Terminology and Roles</name>
        <t>This document discusses the following roles:</t>
        <dl>
          <dt>Authenticating party:</dt>
          <dd>
            <t>The party that authenticates itself in the protocol. In TLS, this is the side sending the Certificate and CertificateVerify message.</t>
          </dd>
          <dt>Certification authority (CA):</dt>
          <dd>
            <t>The service that issues certificates to the authenticating party, after performing some validation process on the certificate contents.</t>
          </dd>
          <dt>Relying party:</dt>
          <dd>
            <t>The party whom the authenticating party presents its identity to. In TLS, this is the side receiving the Certificate and CertificateVerify message.</t>
          </dd>
          <dt>Monitor:</dt>
          <dd>
            <t>Parties who watch logs for certificates of interest, analogous to the role in <xref section="8.2" sectionFormat="of" target="RFC9162"/>.</t>
          </dd>
          <dt>Issuance log:</dt>
          <dd>
            <t>A log, maintained by the CA, of everything issued by that CA.</t>
          </dd>
          <dt>Cosigner:</dt>
          <dd>
            <t>A service that signs views of an issuance log, to assert correct operation and other properties about the entries.</t>
          </dd>
        </dl>
        <t>Additionally, there are several terms used throughout this document to describe this proposal. This section provides an overview. They will be further defined and discussed in detail throughout the document.</t>
        <dl>
          <dt>Checkpoint:</dt>
          <dd>
            <t>A description of the complete state of the log at some time.</t>
          </dd>
          <dt>Entry:</dt>
          <dd>
            <t>An individual element of the log, describing information which the CA has validated and certified.</t>
          </dd>
          <dt>Subtree:</dt>
          <dd>
            <t>A smaller Merkle Tree over a portion of the log, defined by an interior node of some snapshot of the log. Subtrees can be efficiently shown to be consistent with the whole log.</t>
          </dd>
          <dt>Inclusion proof:</dt>
          <dd>
            <t>A sequence of hashes that efficiently proves some entry is contained in some checkpoint or subtree.</t>
          </dd>
          <dt>Consistency proof:</dt>
          <dd>
            <t>A sequence of hashes that efficiently proves a checkpoint or subtree is contained within another checkpoint.</t>
          </dd>
          <dt>Cosignature:</dt>
          <dd>
            <t>A signature from either the CA or other cosigner, over some checkpoint or subtree.</t>
          </dd>
          <dt>Landmark checkpoint:</dt>
          <dd>
            <t>One of an infrequent subset of checkpoints that can be used to predistribute trusted subtrees to relying parties for signatureless certificates.</t>
          </dd>
          <dt>Landmark subtree:</dt>
          <dd>
            <t>A subtree determined by a landmark checkpoint. Landmark subtrees are common points of reference between relying parties and signatureless certificates.</t>
          </dd>
          <dt>Full certificate:</dt>
          <dd>
            <t>A certificate containing an inclusion proof to some subtree, and several cosignatures over that subtree.</t>
          </dd>
          <dt>Signatureless certificate:</dt>
          <dd>
            <t>An optimized certificate containing an inclusion proof to a landmark subtree, and no signatures.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>Merkle Tree certificate issuance begins as in a typical CA: The CA receives an issuance request, e.g. over ACME <xref target="RFC8555"/>, and validates it, e.g. with ACME challenges. From there, the issuance process differs.</t>
      <ol spacing="normal" type="1"><li>
          <t>The CA operates an <em>issuance log</em> (<xref target="issuance-logs"/>), which is an append-only Merkle Tree (<xref section="2.1" sectionFormat="of" target="RFC9162"/>). Unlike a CT log, this log only contains entries added by the CA.</t>
        </li>
        <li>
          <t>The CA adds a TBSCertificateLogEntry (<xref target="log-entries"/>) to its log, describing the information it is certifying.</t>
        </li>
        <li>
          <t>The CA signs a <em>checkpoint</em>, which describes the current state of the log. A signed checkpoint certifies that the CA issued <em>every</em> entry in the Merkle Tree (<xref target="certification-authority-cosigners"/>).</t>
        </li>
        <li>
          <t>The CA additionally signs <em>subtrees</em> (<xref target="subtrees"/>) that together contain certificates added since the last checkpoint (<xref target="arbitrary-intervals"/>). This is an optimization to reduce inclusion proof sizes. A signed subtree certifies that the CA has issued <em>every</em> entry in the subtree.</t>
        </li>
      </ol>
      <t>These signatures prove to relying parties that the CA has issued the certificate.</t>
      <t>A relying party may require additional proof of the proper operation of the issuance log by third parties, like CT logs provide additional transparency. Instead of presenting certificates to transparency logs, CAs present their 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>
      <t>A signature from either the CA or a cosigner is known as a <em>cosignature</em>. A combination of cosignatures from sufficient trusted parties proves both that the CA has issued the certificate, and that the issuance satisfies any additional relying party transparency requirements.</t>
      <t>A <em>full certificate</em> 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>Sufficient cosignatures to meet the relying party's requirements</t>
        </li>
      </ul>
      <t>This same issuance process also produces a <em>signatureless certificate</em>. This is an optional optimized certificate that avoids any cosignatures:</t>
      <ol spacing="normal" type="1"><li>
          <t>Periodically, the CA's most recent checkpoint is designated as a <em>landmark checkpoint</em>. This determines <em>landmark subtrees</em>, which are common points of reference between relying parties and signatureless certificates.</t>
        </li>
        <li>
          <t>Once some landmark checkpoint includes the TBSCertificate, the signatureless certificate is constructed with:  </t>
          <ul spacing="normal">
            <li>
              <t>The TBSCertificate being certified</t>
            </li>
            <li>
              <t>An inclusion proof from the TBSCertificate to a landmark subtree</t>
            </li>
          </ul>
        </li>
        <li>
          <t>In the background, landmark subtrees are predistributed to relying parties, with cosignatures checked against relying party requirements. This occurs periodically in the background, separate from the application protocol.</t>
        </li>
        <li>
          <t>During the application protocol, such as TLS <xref target="RFC8446"/>, if the relying party already supports the landmark subtree, the authenticating party can present the signatureless certificate. Otherwise, it presents a full certificate.</t>
        </li>
      </ol>
    </section>
    <section anchor="subtrees">
      <name>Subtrees</name>
      <t>This section extends the Merkle Tree definition in <xref section="2.1" sectionFormat="of" target="RFC9162"/> by defining a <em>subtree</em> of a Merkle Tree. A subtree is an interior node of a Merkle Tree, which can be efficiently shown consistent with the original Merkle Tree and any Merkle Tree with additional elements appended. This specification uses subtrees to reduce the size of inclusion proofs.</t>
      <section anchor="definition-of-a-subtree">
        <name>Definition of a Subtree</name>
        <t>Given an ordered list of <tt>n</tt> inputs, <tt>D_n = {d[0], d[1], ..., d[n-1]}</tt>, <xref section="2.1.1" sectionFormat="of" target="RFC9612"/> defines the Merkle Tree via the Merkle Tree Hash <tt>MTH(D_n)</tt>.</t>
        <t>A <em>subtree</em> of this Merkle Tree is defined by two integers, <tt>start</tt> and <tt>end</tt>, such that:</t>
        <ul spacing="normal">
          <li>
            <t><tt>0 &lt;= start &lt; end &lt;= n</tt></t>
          </li>
          <li>
            <t>If <tt>k</tt> is the largest power of 2 that is greater than or equal to <tt>end - start</tt>, <tt>start</tt> must be a multiple of <tt>k</tt></t>
          </li>
        </ul>
        <t>Note that, if <tt>start</tt> is zero, the second condition is always true.</t>
        <t>A subtree is itself a Merkle Tree, defined by <tt>MTH(D[start:end])</tt>. In the context of a single Merkle Tree, the subtree defined by <tt>start</tt> and <tt>end</tt> is denoted by half-open interval <tt>[start, end)</tt>. It contains the entries whose indices are in that half-open interval.</t>
        <t>The <em>size</em> of the subtree is <tt>end - start</tt>. If the subtree's size is a power of 2, it is said to be <em>full</em>, otherwise it is said to be <em>partial</em>.</t>
        <t>If a subtree is full, then it is directly contained in the tree of hash operations in <tt>MTH(D_n)</tt> for <tt>n &gt;= end</tt>.</t>
        <t>If a subtree is partial, it is directly contained in <tt>MTH(D_n)</tt> only if <tt>n = end</tt>.</t>
      </section>
      <section anchor="subtree-inclusion-proofs">
        <name>Subtree Inclusion Proofs</name>
        <t>Subtrees are Merkle Trees, so entries can be proven to be contained in the subtree. A subtree inclusion proof for entry <tt>index</tt> of the subtree <tt>[start, end)</tt>. is a Merkle inclusion proof, as defined in <xref section="2.1.3.1" sectionFormat="of" target="RFC9162"/>, where <tt>m</tt> is <tt>index - start</tt> and the tree inputs are <tt>D[start:end]</tt>. A subtree inclusion proof can be verified with the procedure in <xref section="2.1.3.2" sectionFormat="of" target="RFC9162"/>, where <tt>leaf_index</tt> is <tt>index - start</tt> and <tt>tree_size</tt> is <tt>end - start</tt>.</t>
      </section>
      <section anchor="subtree-consistency-proofs">
        <name>Subtree Consistency Proofs</name>
        <t>A subtree <tt>[start, end)</tt> can be efficiently proven to be consistent with the full Merkle Tree. That is, given <tt>MTH(D[start:end])</tt> and <tt>MTH(D_n)</tt>, the proof demonstrates that the input <tt>D[start:end]</tt> to the subtree hash was equal to the corresponding elements of the input <tt>D_n</tt> to the Merkle Tree hash.</t>
        <section anchor="generating-a-subtree-consistency-proof">
          <name>Generating a Subtree Consistency Proof</name>
          <t>The subtree consistency proof, <tt>SUBTREE_PROOF(start, end, D_n)</tt> is defined similarly to <xref section="2.1.4.1" sectionFormat="of" target="RFC9162"/>, in terms of a helper function that tracks whether the subtree hash is known:</t>
          <artwork><![CDATA[
SUBTREE_PROOF(start, end, D_n) =
    SUBTREE_SUBPROOF(start, end, D_n, true)
]]></artwork>
          <t>If <tt>start = 0</tt> and <tt>end = n</tt>, the subtree is the root:</t>
          <artwork><![CDATA[
SUBTREE_SUBPROOF(0, n, D_n, true) = {}
SUBTREE_SUBPROOF(0, n, D_n, false) = {MTH(D_n)}
]]></artwork>
          <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>
              <artwork><![CDATA[
SUBTREE_SUBPROOF(start, end, D_n, b) =
    SUBTREE_SUBPROOF(start, end, D[0:k], b) : MTH(D[k:n])
]]></artwork>
            </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>
              <artwork><![CDATA[
SUBTREE_SUBPROOF(start, end, D_n, b) =
    SUBTREE_SUBPROOF(start - k, end - k, D[k:n], b) : MTH(D[0:k])
]]></artwork>
            </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>
              <artwork><![CDATA[
SUBTREE_SUBPROOF(0, end, D_n, b) =
    SUBTREE_SUBPROOF(0, end - k, D[k:n], false) : MTH(D[0:k])
]]></artwork>
            </li>
          </ul>
          <t>When <tt>start</tt> is zero, this computes a Merkle consistency proof:</t>
          <artwork><![CDATA[
SUBTREE_PROOF(0, end, D_n) = PROOF(end, D_n)
]]></artwork>
          <t>When <tt>end = start + 1</tt>, this computes a Merkle inclusion proof:</t>
          <artwork><![CDATA[
SUBTREE_PROOF(start, start + 1, D_n) = PATH(start, D_n)
]]></artwork>
        </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 subtree <tt>[start, end)</tt> of tree <tt>n</tt>, a consistency proof <tt>proof</tt>, a subtree hash <tt>node_hash</tt> and a root hash <tt>root_hash</tt>:</t>
          <ol spacing="normal" type="1"><li>
              <t>If <tt>end</tt> is <tt>n</tt>, run the following:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>Set <tt>fn</tt> to <tt>start</tt> and <tt>sn</tt> to <tt>end - 1</tt>.</t>
                </li>
                <li>
                  <t>Set <tt>r</tt> to <tt>node_hash</tt>.</t>
                </li>
                <li>
                  <t>Right-shift <tt>fn</tt> and <tt>sn</tt> equally until <tt>LSB(fn)</tt> is set or <tt>sn</tt> is zero.</t>
                </li>
                <li>
                  <t>For each value <tt>p</tt> in the <tt>proof</tt> array:
                  </t>
                  <ol spacing="normal" type="1"><li>
                      <t>If <tt>sn</tt> is 0, then stop iteration and fail the proof verification.</t>
                    </li>
                    <li>
                      <t>Set <tt>r</tt> to <tt>HASH(0x01, || p || r)</tt>.</t>
                    </li>
                    <li>
                      <t>If <tt>LSB(sn)</tt> is not set, the right-shift <tt>sn</tt> until either <tt>LSB(sn)</tt> is set or <tt>sn</tt> is zero.</t>
                    </li>
                    <li>
                      <t>Right-shift <tt>sn</tt> once more.</t>
                    </li>
                  </ol>
                </li>
                <li>
                  <t>Check <tt>sn</tt> is 0 and <tt>r</tt> is <tt>root_hash</tt>. If either is not equal, fail the proof verification. If all are equal, accept the proof.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>Otherwise, run the following:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>If <tt>proof</tt> is an empty array, stop and fail verification.</t>
                </li>
                <li>
                  <t>If <tt>end - start</tt> is an exact power of 2, prepend <tt>node_hash</tt> to the <tt>proof</tt> array.</t>
                </li>
                <li>
                  <t>Set <tt>fn</tt> to <tt>start</tt>, <tt>sn</tt> to <tt>end - 1</tt>, and <tt>tn</tt> to <tt>n - 1</tt>.</t>
                </li>
                <li>
                  <t>Right-shift <tt>fn</tt>, <tt>sn</tt>, and <tt>tn</tt> equally until <tt>LSB(sn)</tt> is not set or <tt>fn = sn</tt>.</t>
                </li>
                <li>
                  <t>Set both <tt>fr</tt> and <tt>sr</tt> to the first value in the <tt>proof</tt> array.</t>
                </li>
                <li>
                  <t>For each subsequent value <tt>c</tt> in the <tt>proof</tt> array:
                  </t>
                  <ol spacing="normal" type="1"><li>
                      <t>If <tt>tn</tt> is 0, then stop the iteration and fail the proof verification.</t>
                    </li>
                    <li>
                      <t>If <tt>LSB(sn)</tt> is set, or if <tt>sn</tt> is equal to <tt>tn</tt>, then:
                      </t>
                      <ol spacing="normal" type="1"><li>
                          <t>If <tt>fn &lt; sn</tt>, set <tt>fr</tt> to <tt>HASH(0x01 || c || fr)</tt>.</t>
                        </li>
                        <li>
                          <t>Set <tt>sr</tt> to <tt>HASH(0x01 || c || sr)</tt>.</t>
                        </li>
                        <li>
                          <t>If <tt>LSB(sn)</tt> is not set, then right-shift each of <tt>fn</tt>, <tt>sn</tt>, and <tt>tn</tt> equally until either <tt>LSB(sn)</tt> is set or <tt>sn</tt> is 0.</t>
                        </li>
                      </ol>
                    </li>
                    <li>
                      <t>Otherwise:
                      </t>
                      <ol spacing="normal" type="1"><li>
                          <t>Set <tt>sr</tt> to <tt>HASH(0x01 || sr || c)</tt>.</t>
                        </li>
                      </ol>
                    </li>
                    <li>
                      <t>Finally, right-shift each of <tt>fn</tt>, <tt>sn</tt>, and <tt>tn</tt> one time.</t>
                    </li>
                  </ol>
                </li>
                <li>
                  <t>Check <tt>tn</tt> is 0, <tt>fr</tt> is <tt>node_hash</tt>, and <tt>sr</tt> is <tt>root_hash</tt>. If any are not equal, fail the proof verification. If all are equal, accept the proof.</t>
                </li>
              </ol>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="arbitrary-intervals">
        <name>Arbitrary Intervals</name>
        <t>Not all <tt>[start, end)</tt> intervals of a Merkle tree are valid subtrees. This section describes how, for any <tt>start &lt; end</tt>, to determine up to two subtrees that efficiently cover the interval. The subtrees are determined by the following Python procedure:</t>
        <sourcecode type="py"><![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 < 2:
        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 & ~((1 << left_split) - 1)
    return [(left, mid), (mid, end)]
]]></sourcecode>
        <t>[[TODO: Write this up in prose too.]]</t>
        <t>When the procedure returns a single subtree, the subtree is <tt>[start, end)</tt>. When it returns two subtrees, <tt>left</tt> and <tt>right</tt>, the subtrees satisfy the following properties:</t>
        <ol spacing="normal" type="1"><li>
            <t><tt>left.end = right.start</tt>. That is, the two subtrees cover adjacent intervals.</t>
          </li>
          <li>
            <t><tt>left.start &lt;= start</tt> and <tt>end = right.end</tt>. That is, the two subtrees together cover the entire target interval, possibly with some extra entries before <tt>start</tt> left, but not after <tt>end</tt>.</t>
          </li>
          <li>
            <t><tt>left.end - left.start &lt; 2 * (end - start)</tt> and <tt>right.end - right.start &lt;= end - start</tt>. That is, the two subtrees efficiently cover the interval.</t>
          </li>
          <li>
            <t><tt>left</tt> is full, while <tt>right</tt> may be partial.</t>
          </li>
        </ol>
        <t><xref target="fig-subtree-example"/> shows the subtrees which cover <tt>[5, 13)</tt> in a Merkle Tree of 13 elements. The two subtrees selected are <tt>[4, 8)</tt> and <tt>[8, 13)</tt>. Note that the subtrees cover a slightly larger interval than <tt>[5, 13)</tt>.</t>
        <!-- Ideally we'd use the Unicode box-drawing characters for the text form, but aasvg doesn't support them: https://github.com/martinthomson/aasvg/issues/9 -->

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

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

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

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

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

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


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

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

struct {
    uint64 start;
    uint64 end;
    HashValue inclusion_proof<0..2^16-1>;
    MTCSignature signatures<0..2^16-1>;
} MTCProof;
]]></artwork>
        <t><tt>start</tt> and <tt>end</tt> MUST contain the corresponding parameters of the chosen subtree. <tt>inclusion_proof</tt> MUST contain a subtree inclusion proof (<xref target="subtree-inclusion-proofs"/>) for the log entry and the subtree. <tt>signatures</tt> contains the chosen subtree signatures. In each signature, <tt>cosigner_id</tt> contains the cosigner ID (<xref target="cosigners"/>) in its binary representation (<xref section="3" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>), and <tt>signature</tt> contains the signature value as described in <xref target="signature-format"/>.</t>
        <t>The MTCProof is encoded into the <tt>signatureValue</tt> with no additional ASN.1 wrapping. The most significant bit of the first octet of the signature value SHALL become the first bit of the bit string, and so on through the least significant bit of the last octet of the signature value, which SHALL become the last bit of the bit string.</t>
      </section>
      <section anchor="full-certificates">
        <name>Full Certificates</name>
        <t>A <em>full certificate</em> is a Merkle Tree certificate which contains sufficient signatures to allow a relying party to trust the choice of subtree, without any predistributed information beyond the cosigner(s) parameters. Full certificates can be issued without significant processing delay.</t>
        <t>When issuing a certificate, the CA first adds the TBSCertificateLogEntry to its issuance log. It then schedules a job to construct a checkpoint and collect cosignatures. The job proceeds as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>The CA signs the checkpoint with its key(s) (<xref target="certification-authority-cosigners"/>).</t>
          </li>
          <li>
            <t>Using the procedure in <xref target="arbitrary-intervals"/>, the CA determines the two subtrees that cover the entries added between this checkpoint and the most recent checkpoint.</t>
          </li>
          <li>
            <t>The CA signs each subtree with its key(s) (<xref target="cosigners"/>).</t>
          </li>
          <li>
            <t>The CA requests sufficient checkpoint cosignatures (<xref target="cosigners"/>) from external cosigners to meet relying party requirements (<xref target="trusted-cosigners"/>).</t>
          </li>
          <li>
            <t>The CA requests subtree cosignatures (<xref target="requesting-subtree-signatures"/>) from the cosigners above.</t>
          </li>
          <li>
            <t>For each certificate in the interval, the CA constructs certificates (<xref target="certificate-format"/>) using the covering subtree.</t>
          </li>
        </ol>
        <t>Steps 4 and 5 are analogous to requesting SCTs from CT logs in Certificate Transparency, except that a single run of this job collects signatures for many certificates at once. The CA MAY request signatures from a redundant set of cosigners and select the ones that complete first.</t>
        <t>This document does not prescribe the specific cosigner roles, or a particular protocol for requesting cosignatures. Protocols for cosigners MAY vary depending on the needs for that cosigner. A consistency-only cosigner, such as <xref target="TLOG-WITNESS"/>, might only require a checkpoint signature and consistency proof, while a mirroring cosigner, such as <xref target="TLOG-MIRROR"/> might require the full log contents.</t>
        <t>A cosigner MAY expose a private interface for the CA, to reduce denial-of-service risk, or a cosigner MAY expose a public interface for other parties to request additional cosignatures. The latter may be useful if a relying party requires a cosigner that the CA does not communicate with. In this case, an authenticating party MAY request cosignatures and add them to the certificate. However, it is RECOMMENDED that the CA collect cosignatures for the authenticating party. This simplifies deployment, as relying party policies change over time.</t>
        <t>This document does not place any requirements on how frequently this job runs. More frequent runs results in lower issuance delay, but higher signing overhead. It is RECOMMENDED that CAs run at most one instance of this job at a time, starting the next instance after the previous one completes. A single run collects signatures for all entries since the most recent checkpoint, so there is little benefit to overlapping them. Less frequent runs may also aid relying parties that wish to directly audit signatures, as described in Section 5.2 of <xref target="AuditingRevisited"/>, though this document does not define such a system.</t>
      </section>
      <section anchor="signatureless-certificates">
        <name>Signatureless Certificates</name>
        <t>A <em>signatureless certificate</em> is a Merkle Tree certificate which contains no signatures and instead assumes the relying party had predistributed information about which subtrees were trusted. Signatureless certificates are an optional size optimization. They require a processing delay to construct, and only work in a sufficiently up-to-date relying party. Authenticating parties thus SHOULD deploy a corresponding full certificate alongside any signatureless certificate, and use some application-protocol-specific mechanism to select between the two. <xref target="use-in-tls"/> discusses such a mechanism for TLS <xref target="RFC8446"/>.</t>
        <section anchor="landmark-checkpoints">
          <name>Landmark Checkpoints</name>
          <t>A signatureless certificate is constructed based on a <em>landmark checkpoint sequence</em>, which is a sequence of <em>landmark checkpoints</em>. Landmark checkpoints are agreed-upon tree sizes across the ecosystem for optimizing certificates. Landmark checkpoints SHOULD be allocated by the CA, but they can also be allocated by some other coordinating party. It is possible, but NOT RECOMMENDED, for multiple landmark checkpoint sequences to exist per CA. Landmark checkpoints are allocated to balance minimizing the delay in obtaining a signatureless certificate with minimizing the size of the relying party's predistributed state.</t>
          <t>A landmark checkpoint sequence has the following fixed parameters:</t>
          <ul spacing="normal">
            <li>
              <t><tt>base_id</tt>: An OID arc for trust anchor IDs of individual landmark checkpoints</t>
            </li>
            <li>
              <t><tt>max_checkpoints</tt>: A positive integer, describing the maximum number of landmark checkpoints that may contain unexpired certificates at any time</t>
            </li>
            <li>
              <t><tt>checkpoint_url</tt>: Some URL to fetch the current list of landmark checkpoints</t>
            </li>
          </ul>
          <t>Landmark checkpoints are numbered consecutively from zero. Each landmark checkpoint has a trust anchor ID, determined by appending the checkpoint number to <tt>base_id</tt>. For example, the trust anchor ID for landmark checkpoint 42 of a sequence with <tt>base_id</tt> of <tt>32473.1</tt> would be <tt>32473.1.42</tt>.</t>
          <t>Each landmark checkpoint specifies a tree size. The first landmark checkpoint, numbered zero, is always a tree size of zero. The sequence of tree sizes MUST be append-only and monotonically increasing.</t>
          <t>Landmark checkpoints determine <em>landmark subtrees</em>: for each landmark checkpoint, other than number zero, let <tt>tree_size</tt> be the checkpoint's tree size and <tt>prev_tree_size</tt> be that of the previous landmark checkpoint. As described in <xref target="arbitrary-intervals"/>, select the one or two subtrees that cover <tt>[prev_tree_size, tree_size)</tt>. Each of those subtrees is a landmark subtree.</t>
          <t>The most recent <tt>max_checkpoints</tt> landmark checkpoints are said to be <em>active</em>. Landmark checkpoints MUST be allocated such that, at any given time, only active landmark checkpoints contain unexpired certificates. The active landmark subtrees are those determined by the active landmark checkpoints. There are at most <tt>2 * max_checkpoints</tt> active landmark subtrees at any time. Every unexpired entry will be contained in one or more landmark subtree. Active landmark subtrees are predistributed to the relying party as trusted subtrees, as described in <xref target="trusted-subtrees"/>.</t>
          <t>If landmark checkpoints are allocated incorrectly (e.g. past checkpoints change, or <tt>max_checkpoints</tt> is inaccurate), there are no security consequences, but some older certificates may fail to validate.</t>
          <t>It is RECOMMENDED that checkpoints be allocated by picking some <tt>time_between_checkpoints</tt> interval, and then appending the latest checkpoint to the sequence, once per interval. If the latest checkpoint is already a landmark checkpoint, the interval is skipped. <tt>max_checkpoints</tt> can then be set to <tt>ceil(max_cert_lifetime / time_between_checkpoints)</tt>, where <tt>max_cert_lifetime</tt> is the CA's maximum certificate lifetime. Allocations do not need to be precise, as long as <tt>max_checkpoints</tt> is accurate.</t>
          <t>Relying parties will locally retain up to <tt>2 * max_checkpoints</tt> hashes (<xref target="trusted-subtrees"/>) per CA, so <tt>max_checkpoints</tt> should be set to balance the delay between landmark checkpoints and the amount of state the relying party must maintain. Using the recommended procedure above, a CA with a maximum certificate lifetime of 7 days, allocating a landmark checkpoint every hour, will have a <tt>max_checkpoints</tt> of 168. The client state is then 336 hashes, or 10,752 bytes with SHA-256.</t>
          <t><tt>checkpoint_url</tt> MUST serve a resource with <tt>Content-Type: text/plain; charset=utf-8</tt> and the following lines. Each line MUST be terminated by a newline character (U+000A):</t>
          <ul spacing="normal">
            <li>
              <t>Two space-separated non-negative decimal integers: <tt>&lt;last_checkpoint&gt; &lt;num_active_checkpoints&gt;</tt>.
This line MUST satisfy the following, otherwise it is invalid:
              </t>
              <ul spacing="normal">
                <li>
                  <t><tt>num_active_checkpoints &lt;= max_checkpoints</tt></t>
                </li>
                <li>
                  <t><tt>num_active_checkpoints &lt;= last_checkpoint</tt></t>
                </li>
              </ul>
            </li>
            <li>
              <t><tt>num_active_checkpoints + 1</tt> lines each containing a single non-negative decimal integer, containing a tree size. Numbered from zero to <tt>num_active_checkpoints</tt>, line <tt>i</tt> contains the tree size for checkpoint <tt>last_checkpoint - i</tt>. The integers MUST be monotonically decreasing and lower or equal to the log's latest tree size.</t>
            </li>
          </ul>
        </section>
        <section anchor="constructing-signatureless-certificates">
          <name>Constructing Signatureless Certificates</name>
          <t>Given a TBSCertificateLogEntry in the issuance log and a landmark checkpoint sequence, a signatureless certificate is constructed as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Wait for the first landmark checkpoint to be allocated that contains the entry.</t>
            </li>
            <li>
              <t>Determine the landmark checkpoint's landmark subtrees and select the one that contains the entry.</t>
            </li>
            <li>
              <t>Construct a certificate (<xref target="certificate-format"/>) using the selected subtree and no signatures.</t>
            </li>
          </ol>
          <t>Before sending this certificate, the authenticating party SHOULD obtain some application-protocol-specific signal that implies the relying party has been configured with the corresponding landmark checkpoint. (<xref target="trusted-subtrees"/> defines how relying parties are configured.) The trust anchor ID of the landmark checkpoint may be used as an efficient identifier in the application protocol. <xref target="use-in-tls"/> discusses how to do this in TLS <xref target="RFC8446"/>.</t>
        </section>
      </section>
      <section anchor="size-estimates">
        <name>Size Estimates</name>
        <t>The inclusion proofs in full and signatureless certificates scale logarithmically with the size of the subtree. These sizes can be estimated with the CA's issuance rate. The byte counts below assume the issuance log's hash function is SHA-256.</t>
        <t>Some organizations have published statistics which can be used to estimate this rate for the Web PKI. As of June 9th, 2025:</t>
        <ul spacing="normal">
          <li>
            <t><xref target="LetsEncrypt"/> reported around 558,000,000 active certificates for a single CA</t>
          </li>
          <li>
            <t><xref target="MerkleTown"/> reported around 2,100,000,000 unexpired certificates in CT logs, across all CAs</t>
          </li>
          <li>
            <t><xref target="MerkleTown"/> reported an issuance rate of around 444,000 certificates per hour, across all CAs</t>
          </li>
        </ul>
        <t>The current issuance rate across the Web PKI may not necessarily be representative of the Web PKI after a transition to short-lived certificates. Assuming a certificate lifetime of 7 days, and that subscribers will update their certificates 75% of the way through their lifetime (see <xref target="certificate-renewal"/>), every certificate will be reissued every 126 hours. This gives issuance rate estimates of around 4,400,000 certificates per hour and 17,000,000 certificates per hour, for the first two values above. Note the larger estimate is across all CAs, while subtrees would only span one CA.</t>
        <t>Using the per-CA short lifetime estimate, if the CA mints a checkpoint every 2 seconds, full certificate subtrees will span around 2,500 certificates, leading to 12 hashes in the inclusion proof, or 384 bytes. Full certificates additionally must carry a sufficient set of signatures to meet relying party requirements.</t>
        <t>If a new landmark checkpoint is allocated every hour, signatureless certificate sutrees will span around 4,400,000 certificates, leading to 23 hashes in the inclusion proof, giving an inclusion proof size of 736 bytes, with no signatures. This is significantly smaller than a single ML-DSA-44 signature, 2,420 bytes, and almost ten times smaller than the three ML-DSA-44 signatures necessary to include post-quantum SCTs.</t>
        <t>The proof sizes grow logarithmically, so 32 hashes, or 1024 bytes, is sufficient for subtrees of up to 2^32 (4,294,967,296) certificates.</t>
      </section>
    </section>
    <section anchor="relying-parties">
      <name>Relying Parties</name>
      <t>This section discusses how relying parties verify Merkle Tree Certificates.</t>
      <section anchor="trust-anchors">
        <name>Trust Anchors</name>
        <t>In order to accept certificates from a Merkle Tree CA, a relying party MUST be configured with:</t>
        <ul spacing="normal">
          <li>
            <t>The log ID (<xref target="log-ids"/>)</t>
          </li>
          <li>
            <t>A set of supported cosigners, as pairs of cosigner ID and public key</t>
          </li>
          <li>
            <t>A policy on which combinations of cosigners to accept in a certificate (<xref target="trusted-cosigners"/>)</t>
          </li>
          <li>
            <t>An optional list of trusted subtrees that are known to be consistent with the relying party's cosigner requirements (<xref target="trusted-subtrees"/>)</t>
          </li>
          <li>
            <t>A list of revoked ranges of indices (<xref target="revocation-by-index"/>)</t>
          </li>
        </ul>
        <t>[[TODO: Define some representation for this. In a trust anchor, there's a lot of room for flexibility in what the client stores. In principle, we could even encode some of this information in an X.509 intermediate certificate, if an application wishes to use this with a delegation model with intermediates, though the security story becomes more complex. Decide how/whether to do that.]]</t>
      </section>
      <section anchor="verifying-certificate-signatures">
        <name>Verifying Certificate Signatures</name>
        <t>When verifying the signature on an X.509 certificate (Step (a)(1) of <xref section="6.1.3" sectionFormat="of" target="RFC5280"/>) whose issuer is a Merkle Tree CA, the relying party performs the following procedure:</t>
        <ol spacing="normal" type="1"><li>
            <t>Let <tt>index</tt> be the certificate's serial number. Check that <tt>start &lt;= index &lt; end</tt>, and that <tt>[start, end)</tt> describes a subtree per <xref target="definition-of-a-subtree"/>. If either check fails, abort this process and fail verification.</t>
          </li>
          <li>
            <t>If <tt>index</tt> is contained in one of the relying party's revoked ranges (<xref target="revocation-by-index"/>), abort this process and fail verification.</t>
          </li>
          <li>
            <t>Construct a TBSCertificateLogEntry as follows:
            </t>
            <ol spacing="normal" type="1"><li>
                <t>Copy the <tt>version</tt>, <tt>issuer</tt>, <tt>validity</tt>, <tt>subject</tt>, <tt>issuerUniqueID</tt>, <tt>subjectUniqueID</tt>, and <tt>extensions</tt> fields from the TBSCertificate.</t>
              </li>
              <li>
                <t>Set <tt>subjectPublicKeyInfoHash</tt> to the hash of the DER encoding of <tt>subjectPublicKeyInfo</tt>.</t>
              </li>
            </ol>
          </li>
          <li>
            <t>Construct a MerkleTreeCertEntry of type <tt>tbs_cert_entry</tt> with contents the TBSCertificateLogEntry.</t>
          </li>
          <li>
            <t>Evaluate <tt>inclusion_proof</tt> against the MerkleTreeCertEntry to compute the expected subtree hash</t>
          </li>
          <li>
            <t>If the subtree is a trusted subtree (<xref target="trusted-subtrees"/>), check that the hash matches. Return success if it matches and failure if it does not.</t>
          </li>
          <li>
            <t>Otherwise, check that <tt>signatures</tt> contain a sufficient set of valid signatures from cosigners to satisfy the relying party's cosigner requirements (<xref target="trusted-cosigners"/>). Unrecognized cosigners MUST be ignored. Signatures are verified as described in <xref target="signature-format"/>.</t>
          </li>
        </ol>
        <t>This procedure only replaces the signature verification portion of X.509 path validation. The relying party MUST continue to perform other checks, such as checking expiry.</t>
      </section>
      <section anchor="trusted-cosigners">
        <name>Trusted Cosigners</name>
        <t>A relying party's cosigner policy determines the sets of cosigners that must sign a view of the issuance log before it is trusted.</t>
        <t>This document does not prescribe a particular policy, but gives general guidance. Relying parties MAY implement policies other than those described below, and MAY incorporate cosigners acting in roles not described in this document.</t>
        <t>In picking trusted cosigners, relying party SHOULD ensure the following security properties:</t>
        <dl>
          <dt>Authenticity:</dt>
          <dd>
            <t>The relying party only accepts entries certified by the CA</t>
          </dd>
          <dt>Transparency:</dt>
          <dd>
            <t>The relying party only accepts entries that are publicly accessible, so that monitors, particularly the subject of the certificate, can notice any unauthorized certificates</t>
          </dd>
        </dl>
        <t>Relying parties SHOULD ensure authenticity by requiring a signature from the most recent CA cosigner key. If the CA is transitioning from an old to new key, the relying party SHOULD accept both until certificates that predate the new key expire. This is analogous to the signature in a traditional X.509 certificate.</t>
        <t>While a CA signature is sufficient to prove a subtree came from the CA, this is not enough to ensure the certificate is visible to monitors. A misbehaving CA might not operate the log correctly, either presenting inconsistent versions of the log to relying parties and monitors, or refuse to publish some entries.</t>
        <t>To mitigate this, relying parties SHOULD ensure transparency by requiring a quorum of signatures from additional cosigners. At minimum, these cosigners SHOULD enforce a consistent view of the log. For example, <xref target="TLOG-WITNESS"/> describes a lightweight "witness" cosigner role that checks this with consistency proofs. This is not sufficient to ensure durable logging. <xref target="revocation-by-index"/> discusses mitigations for this. Alternatively, a relying party MAY require cosigners that serve a copy of the log, in addition to enforcing a consistent view. For example, <xref target="TLOG-MIRROR"/> describes a "mirror" cosigner role.</t>
        <t>Relying parties MAY accept the same set of additional cosigners across issuance logs.</t>
        <t>Cosigner roles are extensible without changes to certificate verification itself. Future specifications and individual deployments MAY define other cosigner roles to incorporate into relying party policies.</t>
        <t><xref target="choosing-cosigners"/> discusses additional deployment considerations in cosigner selection.</t>
      </section>
      <section anchor="trusted-subtrees">
        <name>Trusted Subtrees</name>
        <t>As an optional optimization, a relying party MAY incorporate a periodically updated, predistributed list of active landmark subtrees, determined as described in <xref target="landmark-checkpoints"/>. The relying party configures these as trusted subtrees, allowing it to accept signatureless certificates (<xref target="signatureless-certificates"/>) constructed against those subtrees.</t>
        <t>Before configuring the subtrees as trusted, the relying party MUST obtain assurance that each subtree is consistent with checkpoints observed by a sufficient set of cosigners (see <xref target="cosigners"/>) to meet its cosigner requirements. It is not necessary that the cosigners have generated signatures over the specific subtrees, only that they are consistent.</t>
        <t>This criteria can be checked given:</t>
        <ul spacing="normal">
          <li>
            <t>Some <em>reference checkpoint</em> that contains the latest landmark checkpoint</t>
          </li>
          <li>
            <t>For each cosigner, either:
            </t>
            <ul spacing="normal">
              <li>
                <t>A cosignature on the reference checkpoint</t>
              </li>
              <li>
                <t>A cosigned checkpoint containing the referenced checkpoint and a valid Merkle consistency proof (<xref section="2.1.4" sectionFormat="of" target="RFC9162"/>) between the two</t>
              </li>
            </ul>
          </li>
          <li>
            <t>For each subtree, a valid subtree consistency proof (<xref target="subtree-consistency-proofs"/>) between the subtree and the reference checkpoint</t>
          </li>
        </ul>
        <t>[[TODO: The subtree consistency proofs have many nodes in common. It is possible to define a single "bulk consistency proof" that verifies all the hashes at once, but it's a lot more complex.]]</t>
        <t>This document does not prescribe how relying parties obtain this information. A relying party MAY, for example, use an application-specific update service, such as the services described in <xref target="CHROMIUM"/> and <xref target="FIREFOX"/>. If the relying party considers the service sufficiently trusted (e.g. if the service provides the trust anchor list or certificate validation software), it MAY trust the update service to perform these checks.</t>
        <t>The relying party SHOULD incorporate its trusted subtree configuration in application-protocol-specific certificate selection mechanisms, to allow an authenticating party to select a signatureless certificate. The trust anchor IDs of the landmark checkpoints may be used as efficient identifiers in the application protocol. <xref target="use-in-tls"/> discusses how to do this in TLS <xref target="RFC8446"/>.</t>
      </section>
      <section anchor="revocation-by-index">
        <name>Revocation by Index</name>
        <t>For each supported Merkle Tree CA, the relying party maintains a list of revoked ranges of indices. This allows a relying party to efficiently revoke entries of an issuance log, even if the contents are not necessarily known. This may be used to mitigate the security consequences of misbehavior by a CA, or other parties in the ecosystem.</t>
        <t>When a relying party is first configured to trust a CA, it SHOULD be configured to revoke all entries from zero up to but not including the first available unexpired certificate at the time. This revocation SHOULD be periodically updated as entries expire and logs are pruned (<xref target="log-pruning"/>). In particular, when CAs prune entries, relying parties SHOULD be updated to revoke all newly unavailable entries. This gives assurance that, even if some unavailable entry had not yet expired, the relying party will not trust it. It also allows monitors to start monitoring a log without processing expired entries.</t>
        <t>A misbehaving CA might correctly construct a globally consistent log, but refuse to make some entries or intermediate nodes available. Consistency proofs between checkpoints and subtrees would pass, but monitors cannot observe the entries themselves. Relying parties whose cosigner policies (<xref target="trusted-cosigners"/>) do not require durable logging (e.g. via <xref target="TLOG-MIRROR"/>) are particularly vulnerable to this. In this case, the indices of the missing entries will still be known, so relying parties can use this mechanism to revoke the unknown entries, possibly as an initial, targeted mitigation before a complete CA removal.</t>
        <t>When a CA is found to be untrustworthy, relying parties SHOULD remove trust in that CA. To minimize the compatibility impact of this mitigation, index-based revocation can be used to only distrust entries after some index, while leaving existing entries accepted. This is analogous to the <xref target="SCTNotAfter"/> mechanism used in some PKIs.</t>
      </section>
    </section>
    <section anchor="use-in-tls">
      <name>Use in TLS</name>
      <t>TLS implementations that authenticate with or accept Merkle Tree certificates SHOULD support trust anchor IDs (<xref target="I-D.ietf-tls-trust-anchor-ids"/>) for certificate selection.</t>
      <t>A full certificate has a trust anchor ID of the corresponding log ID (<xref target="log-ids"/>). The authenticating party can obtain this information either by parsing the certificate's issuer field or via out-of-band information as described in <xref section="3.2" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>.</t>
      <t>[[TODO: Ideally we would negotiate cosigners. https://github.com/tlswg/tls-trust-anchor-ids/issues/54 has a sketch of how one might do this, though other designs are possible. Negotiating cosigners allows the ecosystem to manage cosigners efficiently, without needing to collect every possible cosignature and send them all at once. This is wasteful, particularly with post-quantum algorithms.]]</t>
      <t>A full certificate MAY be used without signals about what the relying party trusts. As with other choices of default certificates, an authenticating party that does so assumes that the relying party trusts the issuing CA, e.g. because the CA is relatively ubiquitous among the relying parties that it supports.</t>
      <t>A signatureless certificate has a trust anchor ID of the corresponding landmark checkpoint, as described in <xref target="landmark-checkpoints"/>. This can be configured in the authenticating party via out-of-band information, as described in <xref section="3.2" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>. A relying party that has been configured with trusted subtrees (<xref target="trusted-subtrees"/>) derived from a set of landmark checkpoints SHOULD be configured to support those checkpoints' trust anchor IDs. TLS certificate selection will then correctly determine whether the signatureless certificate is compatible with the relying party.</t>
      <t>[[TODO: We can do slightly better. If the relying party supports checkpoint 42, it can be assumed to also support checkpoint 41, 40, 39, etc. https://github.com/tlswg/tls-trust-anchor-ids/issues/62 discusses how to fit this into the trust anchor IDs framework. This allows the client to summarize its state with one ID per CA.]]</t>
      <t>Authenticating parties SHOULD preferentially use signatureless certificates over full certificates, when both are supported by the relying party. A signatureless certificate asserts the same information as its full counterpart, but is expected to be smaller. A signatureless certificate SHOULD NOT be used without a signal that the relying party trusts the corresponding landmark subtree. Even if the relying party is assumed to trust the issuing CA, the relying party may not have sufficiently up-to-date trusted subtrees predistributed.</t>
    </section>
    <section anchor="acme-extensions">
      <name>ACME Extensions</name>
      <t>[[TODO: This section hasn't been written yet. Instead, what follows is an informal discussion. #13 ]]</t>
      <t><xref section="6" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/> defines how to get trust anchor ID metadata for a certificate.</t>
      <t>Beyond that, the full certificate is, from the ACME perspective, the same as a regular X.509 certificate and does not require any new extensions. The main challenge is how to send the signatureless certificate afterwards.</t>
      <t>As full and signatureless certificates are two proofs for the same issuance event, it is natural to use the same order object, so the ACME server does not need to correlate the two.</t>
      <t>We could reuse the alternate certificate chains mechanism in <xref section="7.4.2" sectionFormat="of" target="RFC8555"/> and download both certificates as alternates of each other. However, the full certificate is available immediately and the signatureless certificate will not be available for an hour.</t>
      <t>One possibility is to say ACME servers can update the contents of the certificate URL and hand you back a "better" version of the same set of certificates. This could be signaled with a Retry-After header to tell the client the resource may be updated again later. Or we could extend the order object with a second certificate URL and keep that one in the "processing" state until later.</t>
    </section>
    <section anchor="deployment-considerations">
      <name>Deployment Considerations</name>
      <section anchor="operational-costs">
        <name>Operational Costs</name>
        <t>While Merkle Tree certificates expects CAs to operate logs, the costs of these logs are expected to be much lower than a CT log from <xref target="RFC6962"/> or <xref target="RFC9162"/>:</t>
        <t><xref target="publishing-logs"/> does not constrain the API to the one defined in <xref target="RFC6962"/> or <xref target="RFC9162"/>. If the PKI uses a tile-based protocol, such as <xref target="TLOG-TILES"/>, the issuance log benefits from the improved caching properties of such designs.</t>
        <t>Unlike a CT log, an issuance log does not have public submission APIs. Log entries are only added by the CA directly. The costs are thus expected to scale with the CA's own operations.</t>
        <t>A CA only needs to produce a digital signature for every checkpoint, rather than for every certificate. The lower signature rate requirements could allow more secure and/or economical key storage choices.</t>
        <t>Individual entries are kept small and do not scale with public key or signature sizes. This mitigates growth from post-quantum algorithms. Public keys in entries are replaced with fixed-sized hashes. There are no signatures in entries themselves, and only signatures on the very latest checkpoint are retained. Every new checkpoint completely subsumes the old checkpoint, so there is no need to retain older signatures. Likewise, a subtree is only signed if contained in another signed checkpoint.</t>
        <t>Log pruning (<xref target="log-pruning"/>) allows a long-lived log to serve only the more recent entries, scaling with the size of the retention window, rather than the log's total lifetime.</t>
        <t>Mirrors of the log can also reduce CA bandwidth costs, because monitors can fetch data from mirrors instead of CAs directly. In PKIs that deploy mirrors as part of cosigner policies, relying parties could set few availability requirements on CAs, as described in <xref target="log-availability"/>.</t>
        <t>The costs of cosigners vary by cosigner role. A consistency-checking cosigner, such as <xref target="TLOG-WITNESS"/>, requires very little state and can be run with low cost.</t>
        <t>A mirroring cosigner, such as <xref target="TLOG-MIRROR"/>, performs comparable roles as CT logs, but several of the above cost-saving properties also apply: improved protocols, smaller entries, less frequent signatures, and log pruning. While a mirror does need to accommodate another party's (the CA's) growth rate, it grows only from new issuances from that one CA. If one CA's issuance rate exceeds the mirror's capacity, that does not impact the mirror's copies of other CAs. Mirrors also do not need to defend against a client uploading a large number of existing certificates all at once. Submissions are also naturally batched and serialized.</t>
      </section>
      <section anchor="choosing-cosigners">
        <name>Choosing Cosigners</name>
        <t>In selecting trusted cosigners and cosigner requirements (<xref target="trusted-cosigners"/>), relying parties navigate a number of trade-offs:</t>
        <t>A consistency-checking cosigner, such as <xref target="TLOG-WITNESS"/>, is very cheap to run, but does not guarantee durable logging, while a mirroring cosigner is more expensive and may take longer to cosign structures. Requiring a mirror signature provides stronger guarantees to the relying party, which in turn can reduce the requirements on CAs (see <xref target="log-availability"/>), however it may cause certificate issuance to take longer. That said, mirrors are comparable to CT logs, if not cheaper (see <xref target="operational-costs"/>), so they may be appropriate in PKIs where running CT logs is already viable.</t>
        <t>Relying parties that require larger quorums of trusted cosigners can reduce the trust placed in any individual cosigner. However, these larger quorums result in larger, more expensive full certificates. The cost of this will depend on how frequently the signatureless optimization occurs in a given PKI. Conversely, relying parties that require smaller quorums have smaller full certificates, but place more trust in their cosigners.</t>
        <t>Relying party policies also impact monitor operation. If a relying party accepts any one of three cosigners, monitors SHOULD check the checkpoints of all three. Otherwise, a malicious CA may send different split views to different cosigners. More generally, monitors SHOULD check the checkpoints in the union of all cosigners trusted by all supported relying parties. This is an efficient check because, if the CA is operating correctly, all cosigners will observe the same tree. Thus the monitor only needs to check consistency proofs between the checkpoints, and check the log contents themselves once. Monitors MAY also rely on other parties in the transparency ecosystem to perform this check.</t>
      </section>
      <section anchor="log-availability">
        <name>Log Availability</name>
        <t>CAs and mirrors are expected to serve their log contents over HTTP. It is possible for the contents to be unavailable, either due to temporary service outage or because the log has been pruned (<xref target="log-pruning"/>). If some resources are unavailable, they may not be visible to monitors.</t>
        <t>As in CT, PKIs which deploy Merkle Tree certificates SHOULD establish availability policies, adhered to by trusted CAs and mirrors, and enforced by relying party vendors as a condition of trust. Exact availability policies for these services are out of scope for this document, but this section provides some general guidance.</t>
        <t>Availability policies SHOULD specify how long an entry must be made available, before a CA or mirror is permitted to prune the entry. It is RECOMMENDED to define this using a <em>retention period</em>, which is some time after the entry has expired. In such a policy, an entry could only be pruned if it, and all preceding entries, have already expired for the retention period. Policies MAY opt to set different retention periods between CAs and mirrors. Permitting limited log retention is analogous to the CT practice of temporal sharding <xref target="CHROME-CT"/>, except that a pruned issuance log remains compatible with older, unupdated relying parties.</t>
        <t>Such policies impact monitors. If the retention period is, e.g. 6 months, this means that monitors are expected to check entries of interest within 6 months. It also means that a new monitor may only be aware of a 6 month history of entries issued for a particular domain.</t>
        <t>If historical data is not available to verify the retention period, such as information in another mirror or a trusted summary of expiration dates of entries, it may not be possible to confirm correct behavior. This is mitigated by the revocation process described in <xref target="revocation-by-index"/>: if a CA were to prune a forward-dated entry and, in the 6 months when the entry was available, no monitor noticed the unusual expiry, an updated relying party would not accept it anyway.</t>
        <t>The log pruning process simply makes some resources unavailable, so availability policies SHOULD constrain log pruning in the same way as general resource availability. That is, if it would be a policy violation for the log to fail to serve a resource, it should also be a policy violation for the log to prune such that the resource is removed, and vice versa.</t>
        <t>PKIs that require mirror cosignatures (<xref target="trusted-cosigners"/>) can impose minimal to no availability requirements on CAs, all without compromising transparency goals. If a CA never makes some entry available, mirrors will be unable to update. This will prevent relying parties from accepting the undisclosed entries. However, a CA which is persistently unavailable may not offer sufficient benefit to be used by authenticating parties or trusted by relying parties.</t>
        <t>However, if a mirror's interface becomes unavailable, monitors may be unable to check for unauthorized issuance, if the entries are not available in another mirror. This does compromise transparency goals. As such, availability policies SHOULD set availability expectations on mirrors. This can also be mitigated by using multiple mirrors, either directly enforced in cosigner requirements, or by keeping mirrors up-to-date with each other.</t>
        <t>In PKIs that do not require mirroring cosigners, the CA's serving endpoint is more crucial for monitors. Such PKIs thus SHOULD set availability requirements on CAs.</t>
        <t>In each of these cases, availability failures can be mitigated by revoking the unavailable entries by index, as described in <xref target="revocation-by-index"/>, likely as a first step in a broader distrust.</t>
      </section>
      <section anchor="certificate-renewal">
        <name>Certificate Renewal</name>
        <t>When an authenticating party requests a certificate, the signatureless certificate will not be available until the next landmark checkpoint is ready. From there, the signatureless certificate will not be available until relying parties receive new trusted subtrees.</t>
        <t>To maximize coverage of the signatureless certificate optimization, authenticating parties performing routine renewal SHOULD request a new Merkle Tree certificate some time before the previous Merkle Tree certificate expires. Renewing around 75% into the previous certificate's lifetime is RECOMMENDED. Authenticating parties additionally SHOULD retain both the new and old certificates in the certificate set until the old certificate expires. As the new subtrees are delivered to relying parties, certificate negotiation will transition relying parties to the new certificate, while retaining the old certificate for relying parties that are not yet updated.</t>
        <t>The above also applies if the authenticating party is performing a routine key rotation alongside the routine renewal. In this case, certificate negotiation would pick the key as part of the certificate selection. This slightly increases the lifetime of the old key but maintains the size optimization continuously.</t>
        <t>If the service is rotating keys in response to a key compromise, this option is not appropriate. Instead, the service SHOULD immediately discard the old key and request a full certificate and the revocation of the previous certificate. This will interrupt the size optimization until the new signatureless certificate is available and relying parties are updated.</t>
      </section>
      <section anchor="multiple-ca-keys">
        <name>Multiple CA Keys</name>
        <t>The separation between issuance logs and CA cosigners gives CAs additional flexibility in managing keys. A CA operator wishing to rotate keys, e.g. to guard against compromise of older key material, or upgrade to newer algorithms, could retain the same issuance log and sign its checkpoints and subtrees with both keys in parallel, until relying parties are all updated. Older relying parties would verify the older signatures, while newer relying parties would verify the newer signatures. A cosignature negotiation mechanism in the application protocol (see <xref target="use-in-tls"/>) would avoid using extra bandwidth for the two signatures.</t>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>The Privacy Considerations described in <xref section="9" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/> apply to its use with Merkle Tree Certificates.</t>
      <t>In particular, relying parties that share an update process for trusted subtrees (<xref target="trusted-subtrees"/>) will fetch the same stream of updates. However, updates may reach different users at different times, resulting in some variation across users. This variation may contribute to a fingerprinting attack <xref target="RFC6973"/>. If the Merkle Tree CA trust anchors are sent unconditionally in <tt>trust_anchors</tt>, this variation will be passively observable. If they are sent conditionally, e.g. with the DNS mechanism, the trust anchor list will require active probing.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="authenticity">
        <name>Authenticity</name>
        <t>A key security requirement of any PKI scheme is that relying parties only accept assertions that were certified by a trusted certification authority. Merkle Tree certificates achieve this by ensuring the relying party only accepts authentic subtree hashes:</t>
        <ul spacing="normal">
          <li>
            <t>In full certificates, the relying party's cosigner requirements (<xref target="trusted-cosigners"/>) are expected to include some signature by the CA's cosigner. The CA's cosigner (<xref target="certification-authority-cosigners"/>) is defined to certify the contents of every checkpoint and subtree that it signs.</t>
          </li>
          <li>
            <t>In signatureless certificates, the cosigner requirements are checked ahead of time, when the trusted subtrees are predistributed (<xref target="trusted-subtrees"/>).</t>
          </li>
        </ul>
        <t>Given such a subtree hash, computed over entries that the CA certified, it then must be computationally infeasible to construct an entry not on this list, and some inclusion proof, such that inclusion proof verification succeeds. This requires using a collision-resistant hash in the Merkle Tree construction.</t>
        <t>Log entries contain public key hashes, so it must additionally be computationally infeasible to compute a public key whose hash matches the entry, other than the intended public key. This also requires a collision-resistant hash.</t>
      </section>
      <section anchor="transparency">
        <name>Transparency</name>
        <t>The transparency mechanisms in this document do not prevent a CA from issuing an unauthorized certificate. Rather, they provide comparable security properties as Certificate Transparency <xref target="RFC9162"/> in ensuring that all certificates are either rejected by relying parties, or visible to monitors and, in particular, the subject of the certificate.</t>
        <t>Compared to Certificate Transparency, some of the responsibilities of a log have moved to the CA. All signatures generated by the CA in this system are assertions about some view of the CA's issuance log. However, a CA does not need to function correctly to ensure transparency properties. Relying parties are expected to require a quorum of additional cosigners, which together enforce properties of the log (<xref target="trusted-cosigners"/>) and prevent or detect CA misbehavior:</t>
        <t>A CA might violate the append-only property of its log and present different views to different parties. However, each individual cosigner will only follow a single append-only view of the log history. Provided the cosigners are correctly operated, relying parties and monitors will observe consistent views between each other. Views that were not cosigned at all may not be detected, but they also will not be accepted by relying parties.</t>
        <t>If the CA sends one view to some cosigners and another view to other cosigners, it is possible that multiple views will be accepted by relying parties. However, in that case monitors will observe that cosigners do not match each other. Relying parties can then react by revoking the inconsistent indices (<xref target="revocation-by-index"/>), and likely removing the CA. If the cosigners are mirrors, the underlying entries in both views will also be visible.</t>
        <t>A CA might correctly construct its log, but refuse to serve some unauthorized entry, e.g. by feigning an outage or pruning the log outside the retention policy (<xref target="log-availability"/>). If the relying party requires cosignatures from trusted mirrors, the entry will either be visible to monitors in the mirrors, or have never reached a mirror. In the latter case, the entry will not have been cosigned, so the relying party would not accept it. If the relying party accepts log views without a trusted mirror, the unauthorized entry may not be available. However, the existence of <em>some</em> entry at that index will be visible, so monitors will know the CA is failing to present an entry. Relying parties can then react by revoking the undisclosed entries by index (<xref target="revocation-by-index"/>), and likely removing the CA.</t>
      </section>
      <section anchor="public-key-hashes">
        <name>Public Key Hashes</name>
        <t>Unlike Certificate Transparency, the mechanisms in this document do not provide the subject public keys, only the hashed values. This is intended to reduce log serving costs, particularly with large post-quantum keys. As a result, monitors look for unrecognized hashes instead of unrecognized keys. Any unrecognized hash, even if the preimage is unknown, indicates an unauthorized certificate.</t>
        <t>This optimization complicates studies of weak public keys, e.g. <xref target="SharedFactors"/>. Such studies will have to retrieve the public keys separately, such as by connecting to the TLS servers, or fetching from the CA if it retains the unhashed key. This document does not define a mechanism for doing this, or require that CAs or mirrors retain unhashed keys. The transparency mechanisms in this protocol are primarily intended to allow monitors to observe certificate issuance.</t>
      </section>
      <section anchor="non-repudiation">
        <name>Non-Repudiation</name>
        <t>When a monitor finds an unauthorized certificate issuance in a log or mirror, it must be possible to prove the CA indeed certified the information in the entry. However, only the latest checkpoint signature is retained by the transparency ecosystem, so it may not be possible to reconstruct the exact certificate seen by relying parties.</t>
        <t>However, per <xref target="certification-authority-cosigners"/>, any checkpoint signature is a binding assertion by the CA that it has certified every entry in the checkpoint. Thus, given <em>any</em> signed checkpoint that contains the unauthorized entry, a Merkle inclusion proof (<xref section="2.1.3" sectionFormat="of" target="RFC9162"/>) is sufficient to prove the CA issued the entry. This is analogous to how, in <xref section="3.2.1" sectionFormat="of" target="RFC9162"/>, CAs are held accountable for signed CT precertificates.</t>
        <t>The transparency ecosystem does not retain unhashed public keys, so it also may not be possible to construct a complete certificate from the checkpoint signature and inclusion proof. However, if the log entry's <tt>subjectPublicKeyInfoHash</tt> does not correspond to an authorized key for the subject of the certificate, the entry is still unauthorized. A Merkle Tree CA is held responsible for all log entries it certifies, whether or not the preimage of the hash is known.</t>
      </section>
      <section anchor="new-log-entry-types">
        <name>New Log Entry Types</name>
        <t>MerkleTreeCertEntry (<xref target="log-entries"/>) is extensible and permits protocol extensions to define new formats for the CA to certify. This means older CAs, cosigners, relying parties, and monitors might interact with new entries:</t>
        <t><xref target="log-entries"/> and <xref target="certification-authority-cosigners"/> forbid a CA from logging or signing entries that it does not recognize. A CA cannot faithfully claim to certify information if it does not understand it. This is analogous to how a correctly-operated X.509 can never sign an unrecognized X.509 extension.</t>
        <t>External cosigners may or may not interact with the unrecognized entries. <xref target="TLOG-MIRROR"/> and <xref target="TLOG-WITNESS"/> describe cosigners whose roles do not interpret the contents of log entries. New entry types MAY be added without updating them. If a cosigner role does interpret a log entry, it MUST define how it interacts with unknown ones.</t>
        <t>If a relying party trusts an issuance log, but the issuance log contains an unrecognized entry, the entry will not cause it to accept an unexpected certificate. In <xref target="verifying-certificate-signatures"/>, the relying party constructs the MerkleTreeCertEntry that it expects. The unrecognized entry will have a different <tt>type</tt> value, so the proof will never succeed, assuming the underlying hash function remains collision-resistant.</t>
        <t>If a monitor observes an entry with unknown type, it may not be able to determine if it is of interest. For example, it may be unable to tell whether it covers some relevant DNS name. Until the monitor is updated to reflect the current state of the PKI, the monitor may be unable to detect all misissued certificates.</t>
        <t>This situation is analogous to the addition of a new X.509 extension. When relying parties add support for log entry types or new X.509 extensions, they SHOULD coordinate with monitors to ensure the transparency ecosystem is able to monitor the new formats.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>TODO: Fill this in.</t>
    </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="RFC8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8032"/>
          <seriesInfo name="DOI" value="10.17487/RFC8032"/>
        </reference>
        <reference anchor="FIPS204">
          <front>
            <title>Module-lattice-based digital signature standard</title>
            <author>
              <organization/>
            </author>
            <date month="August" year="2024"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.204"/>
          <refcontent>National Institute of Standards and Technology (U.S.)</refcontent>
        </reference>
        <reference anchor="I-D.ietf-tls-trust-anchor-ids">
          <front>
            <title>TLS Trust Anchor Identifiers</title>
            <author fullname="Bob Beck" initials="R." surname="Beck">
              <organization>Google LLC</organization>
            </author>
            <author fullname="David Benjamin" initials="D." surname="Benjamin">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Devon O'Brien" initials="D." surname="O'Brien">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Kyle Nekritz" initials="K." surname="Nekritz">
              <organization>Meta</organization>
            </author>
            <date day="14" month="May" year="2025"/>
            <abstract>
              <t>   This document defines the TLS Trust Anchors extension, a mechanism
   for relying parties to convey trusted certification authorities.  It
   describes individual certification authorities more succinctly than
   the TLS Certificate Authorities extension.

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-trust-anchor-ids-01"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC3629">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
            <date month="November" year="2003"/>
            <abstract>
              <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
          <seriesInfo name="DOI" value="10.17487/RFC3629"/>
        </reference>
        <reference anchor="RFC9162">
          <front>
            <title>Certificate Transparency Version 2.0</title>
            <author fullname="B. Laurie" initials="B." surname="Laurie"/>
            <author fullname="E. Messeri" initials="E." surname="Messeri"/>
            <author fullname="R. Stradling" initials="R." surname="Stradling"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>This document describes version 2.0 of the Certificate Transparency (CT) protocol for publicly logging the existence of Transport Layer Security (TLS) server certificates as they are issued or observed, in a manner that allows anyone to audit certification authority (CA) activity and notice the issuance of suspect certificates as well as to audit the certificate logs themselves. The intent is that eventually clients would refuse to honor certificates that do not appear in a log, effectively forcing CAs to add all issued certificates to the logs.</t>
              <t>This document obsoletes RFC 6962. It also specifies a new TLS extension that is used to send various CT log artifacts.</t>
              <t>Logs are network services that implement the protocol operations for submissions and queries that are defined in this document.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9162"/>
          <seriesInfo name="DOI" value="10.17487/RFC9162"/>
        </reference>
        <reference anchor="RFC8555">
          <front>
            <title>Automatic Certificate Management Environment (ACME)</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="J. Hoffman-Andrews" initials="J." surname="Hoffman-Andrews"/>
            <author fullname="D. McCarney" initials="D." surname="McCarney"/>
            <author fullname="J. Kasten" initials="J." surname="Kasten"/>
            <date month="March" year="2019"/>
            <abstract>
              <t>Public Key Infrastructure using X.509 (PKIX) certificates are used for a number of purposes, the most significant of which is the authentication of domain names. Thus, certification authorities (CAs) in the Web PKI are trusted to verify that an applicant for a certificate legitimately represents the domain name(s) in the certificate. As of this writing, this verification is done through a collection of ad hoc mechanisms. This document describes a protocol that a CA and an applicant can use to automate the process of verification and certificate issuance. The protocol also provides facilities for other certificate management functions, such as certificate revocation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8555"/>
          <seriesInfo name="DOI" value="10.17487/RFC8555"/>
        </reference>
        <reference anchor="RFC9612">
          <front>
            <title>Bidirectional Forwarding Detection (BFD) Reverse Path for MPLS Label Switched Paths (LSPs)</title>
            <author fullname="G. Mirsky" initials="G." surname="Mirsky"/>
            <author fullname="J. Tantsura" initials="J." surname="Tantsura"/>
            <author fullname="I. Varlashkin" initials="I." surname="Varlashkin"/>
            <author fullname="M. Chen" initials="M." surname="Chen"/>
            <date month="July" year="2024"/>
            <abstract>
              <t>Bidirectional Forwarding Detection (BFD) is expected to be able to monitor a wide variety of encapsulations of paths between systems. When a BFD session monitors an explicitly routed unidirectional path, there may be a need to direct the egress BFD peer to use a specific path for the reverse direction of the BFD session. This document describes an extension to the MPLS Label Switched Path (LSP) echo request that allows a BFD system to request that the remote BFD peer transmit BFD control packets over the specified LSP.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9612"/>
          <seriesInfo name="DOI" value="10.17487/RFC9612"/>
        </reference>
        <reference anchor="SHS">
          <front>
            <title>Secure hash standard</title>
            <author>
              <organization/>
            </author>
            <date year="2015"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.180-4"/>
          <refcontent>National Institute of Standards and Technology (U.S.)</refcontent>
        </reference>
        <reference anchor="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="I-D.draft-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="11" month="June" 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-07"/>
        </reference>
        <reference anchor="FIPS186-5">
          <front>
            <title>Digital Signature Standard (DSS)</title>
            <author>
              <organization/>
            </author>
            <date month="February" year="2023"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.186-5"/>
          <refcontent>National Institute of Standards and Technology (U.S.)</refcontent>
        </reference>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="CHROME-CT" target="https://googlechrome.github.io/CertificateTransparency/ct_policy.html">
          <front>
            <title>Chrome Certificate Transparency Policy</title>
            <author>
              <organization>Google Chrome</organization>
            </author>
            <date year="2022" month="March" day="17"/>
          </front>
        </reference>
        <reference anchor="APPLE-CT" target="https://support.apple.com/en-us/HT205280">
          <front>
            <title>Apple's Certificate Transparency policy</title>
            <author>
              <organization>Apple</organization>
            </author>
            <date year="2021" month="March" day="05"/>
          </front>
        </reference>
        <reference anchor="CHROMIUM" target="https://chromium.googlesource.com/chromium/src/+/main/components/component_updater/README.md">
          <front>
            <title>Component Updater</title>
            <author>
              <organization>Chromium</organization>
            </author>
            <date year="2022" month="March" day="03"/>
          </front>
        </reference>
        <reference anchor="FIREFOX" target="https://wiki.mozilla.org/Firefox/RemoteSettings">
          <front>
            <title>Firefox Remote Settings</title>
            <author>
              <organization>Mozilla</organization>
            </author>
            <date year="2022" month="August" day="20"/>
          </front>
        </reference>
        <reference anchor="LetsEncrypt" target="https://letsencrypt.org/stats/">
          <front>
            <title>Let's Encrypt Stats</title>
            <author>
              <organization>Let's Encrypt</organization>
            </author>
            <date year="2023" month="March" day="07"/>
          </front>
        </reference>
        <reference anchor="MerkleTown" target="https://ct.cloudflare.com/">
          <front>
            <title>Merkle Town</title>
            <author>
              <organization>Cloudflare, Inc.</organization>
            </author>
            <date year="2023" month="March" day="07"/>
          </front>
        </reference>
        <reference anchor="SharedFactors" target="https://bora.uib.no/bora-xmlui/bitstream/handle/11250/3001128/Masters_thesis__for_University_of_Bergen.pdf">
          <front>
            <title>Finding shared RSA factors in the Certificate Transparency logs</title>
            <author initials="H. F." surname="Våge" fullname="Henry Faltin Våge">
              <organization/>
            </author>
            <author>
              <organization>University of Bergen</organization>
            </author>
            <date year="2022" month="May" day="13"/>
          </front>
        </reference>
        <reference anchor="STH-Discipline" target="https://mailarchive.ietf.org/arch/msg/trans/Zm4NqyRc7LDsOtV56EchBIT9r4c/">
          <front>
            <title>STH Discipline &amp; Security Considerations</title>
            <author initials="R." surname="Barnes" fullname="Richard Barnes">
              <organization/>
            </author>
            <date year="2017" month="March" day="03"/>
          </front>
        </reference>
        <reference anchor="CABF-153" target="https://cabforum.org/2015/11/11/ballot-153-short-lived-certificates/">
          <front>
            <title>Ballot 153 – Short-Lived Certificates</title>
            <author>
              <organization>CA/Browser Forum</organization>
            </author>
            <date year="2015" month="November" day="11"/>
          </front>
        </reference>
        <reference anchor="CABF-SC081" target="https://cabforum.org/2025/04/11/ballot-sc081v3-introduce-schedule-of-reducing-validity-and-data-reuse-periods/">
          <front>
            <title>Ballot SC081v3: Introduce Schedule of Reducing Validity and Data Reuse Periods</title>
            <author>
              <organization>CA/Browser Forum</organization>
            </author>
            <date year="2025" month="April" day="11"/>
          </front>
        </reference>
        <reference anchor="SCTNotAfter" target="https://dadrian.io/blog/posts/sct-not-after/">
          <front>
            <title>How to distrust a CA without any certificate errors</title>
            <author initials="D." surname="Adrian" fullname="David Adrian">
              <organization/>
            </author>
            <date year="2025" month="March"/>
          </front>
        </reference>
        <reference anchor="AuditingRevisited" target="https://eprint.iacr.org/2025/556.pdf">
          <front>
            <title>Private SCT Auditing, Revisited</title>
            <author initials="L." surname="Heimberger" fullname="Lena Heimberger">
              <organization/>
            </author>
            <author initials="C." surname="Patton" fullname="Christopher Patton">
              <organization/>
            </author>
            <author initials="B." surname="Westerbaan" fullname="Bas Westerbaan">
              <organization/>
            </author>
            <date year="2025" month="April" day="25"/>
          </front>
        </reference>
        <reference anchor="TLOG-TILES" target="https://c2sp.org/tlog-tiles">
          <front>
            <title>Tiled Transparency Logs</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2025" month="June"/>
          </front>
        </reference>
        <reference anchor="TLOG-WITNESS" target="https://c2sp.org/tlog-witness">
          <front>
            <title>Transparency Log Witness Protocol</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2025" month="June"/>
          </front>
        </reference>
        <reference anchor="TLOG-MIRROR" target="https://github.com/davidben/C2SP/blob/tlog-mirror/tlog-mirror.md">
          <front>
            <title>Transparency Log Mirrors (DRAFT)</title>
            <author initials="D." surname="Benjamin" fullname="David Benjamin">
              <organization/>
            </author>
            <date year="2025" month="June"/>
          </front>
        </reference>
        <reference anchor="TLOG-CHECKPOINT" target="https://c2sp.org/tlog-checkpoint">
          <front>
            <title>Transparency Log Checkpoints</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2024" month="March"/>
          </front>
        </reference>
        <reference anchor="SIGNED-NOTE" target="https://c2sp.org/signed-note">
          <front>
            <title>Note</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2025" month="April"/>
          </front>
        </reference>
        <reference anchor="RFC6962">
          <front>
            <title>Certificate Transparency</title>
            <author fullname="B. Laurie" initials="B." surname="Laurie"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="E. Kasper" initials="E." surname="Kasper"/>
            <date month="June" year="2013"/>
            <abstract>
              <t>This document describes an experimental protocol for publicly logging the existence of Transport Layer Security (TLS) certificates as they are issued or observed, in a manner that allows anyone to audit certificate authority (CA) activity and notice the issuance of suspect certificates as well as to audit the certificate logs themselves. The intent is that eventually clients would refuse to honor certificates that do not appear in a log, effectively forcing CAs to add all issued certificates to the logs.</t>
              <t>Logs are network services that implement the protocol operations for submissions and queries that are defined in this document.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6962"/>
          <seriesInfo name="DOI" value="10.17487/RFC6962"/>
        </reference>
        <reference anchor="RFC4514">
          <front>
            <title>Lightweight Directory Access Protocol (LDAP): String Representation of Distinguished Names</title>
            <author fullname="K. Zeilenga" initials="K." role="editor" surname="Zeilenga"/>
            <date month="June" year="2006"/>
            <abstract>
              <t>The X.500 Directory uses distinguished names (DNs) as primary keys to entries in the directory. This document defines the string representation used in the Lightweight Directory Access Protocol (LDAP) to transfer distinguished names. The string representation is designed to give a clean representation of commonly used distinguished names, while being able to represent any distinguished name. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4514"/>
          <seriesInfo name="DOI" value="10.17487/RFC4514"/>
        </reference>
        <reference anchor="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="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>
      </references>
    </references>
    <?line 1154?>

<section anchor="asn1-module">
      <name>ASN.1 Module</name>
      <t>TODO: Add an ASN.1 module. Leaving a placeholder as a reminder.</t>
    </section>
    <section anchor="extensions-to-tiled-transparency-logs-to-be-removed">
      <name>Extensions to Tiled Transparency Logs (To Be Removed)</name>
      <t>[[TODO: This section is expected to be removed. It is sketched here purely for illustrative purposes, until the features are defined somewhere else, e.g. in the upstream tlog documents.]]</t>
      <section anchor="pruning-a-tiled-transparency-log">
        <name>Pruning a Tiled Transparency Log</name>
        <t>https://github.com/C2SP/C2SP/pull/138 describes how to support pruning in tlogs but, as of writing, is not part of <xref target="TLOG-TILES"/> yet.</t>
        <t><xref target="TLOG-MIRROR"/> is also updated to add a minimum index parameter to each mirror and apply the above changes to its monitoring interface. The first step of the recommended update procedure in <xref target="TLOG-MIRROR"/> is updated to say, "Let <tt>mirror_size</tt> be the tree size of the mirror checkpoint, or the mirror's minimum index if the mirror has not copied the log yet."</t>
        <t>A mirror MAY use the origin log's current minimum index to initialize its starting minimum index, but it is not required to reflect subsequent pruning. A mirror MAY initialize its minimum index to some higher value than the origin, if it does not intend to log some entries. It MAY initialize its minimum index to a lower value, if the pruned resources are available from some other source, e.g., another mirror.</t>
      </section>
      <section anchor="subtree-signed-note-format">
        <name>Subtree Signed Note Format</name>
        <t>A subtree, with signatures, can be represented as a signed note <xref target="SIGNED-NOTE"/>. Trust anchor IDs can be converted into log origins and cosigner names by concatenating the ASCII string <tt>oid/1.3.6.1.4.1.</tt> and the ASCII representation of the trust anchor ID. For example, the checkpoint origin for a log named <tt>32473.1</tt> would be <tt>oid/1.3.6.1.4.1.32473.1</tt>.</t>
        <t>The note body is a sequence of the following lines, each terminated by a newline character (U+000A):</t>
        <ul spacing="normal">
          <li>
            <t>The log origin</t>
          </li>
          <li>
            <t>Two space-separated, non-negative decimal integers, <tt>&lt;start&gt; &lt;end&gt;</tt></t>
          </li>
          <li>
            <t>The subtree hash, as single hash encoded in base64</t>
          </li>
        </ul>
        <t>Each note signature has a key name of the cosigner name. The signature's key ID is computed using the reserved signature type in <xref target="SIGNED-NOTE"/>, and a fixed string, as follows:</t>
        <artwork><![CDATA[
key ID = SHA-256(key name || 0x0A || 0xFF || "mtc-subtree/v1")[:4]
]]></artwork>
        <t>A subtree whose <tt>start</tt> is zero can also be represented as a checkpoint <xref target="TLOG-CHECKPOINT"/>. A corresponding subtree signature can be represented as a note signature using a key ID computed as follows:</t>
        <artwork><![CDATA[
key ID = SHA-256(key name || 0x0A || 0xFF || "mtc-checkpoint/v1")[:4]
]]></artwork>
        <t>The only difference between the two forms is the implicit transformation from the signed note text to the MTCSubtree structure.</t>
      </section>
      <section anchor="requesting-subtree-signatures">
        <name>Requesting Subtree Signatures</name>
        <t>This section defines the <tt>sign-subtree</tt> cosigner HTTP endpoint for clients to obtain subtree signatures from non-CA cosigners, such as mirrors and witnesses. It may be used by the CA when assembling a certificate, or by an authenticating party to add a cosignature to a certificate that the CA did not themselves obtain.</t>
        <t>The cosigner MAY expose this endpoint publicly to general authenticating parties, or privately to the CA. The latter is sufficient if the CA is known to automatically request cosignatures from this cosigner when constructing certificates. If private, authenticating the CA is out of scope for this document.</t>
        <t>Clients call this endpoint as <tt>POST &lt;prefix&gt;/sign-subtree</tt>, where <tt>prefix</tt> is some URL prefix. For a mirror or witness, the URL prefix is the submission prefix. The client's request body MUST be a sequence of:</t>
        <ul spacing="normal">
          <li>
            <t>The requested subtree as a signed note (<xref target="subtree-signed-note-format"/>), with zero or more signatures. The endpoint MAY require signatures from the CA as a DoS mitigation, as described below.</t>
          </li>
          <li>
            <t>A blank line</t>
          </li>
          <li>
            <t>A checkpoint, signed by the requested cosigner. The checkpoint's tree size must be at least <tt>end</tt>.</t>
          </li>
          <li>
            <t>A blank line</t>
          </li>
          <li>
            <t>Zero or more subtree consistency proof (<xref target="subtree-consistency-proofs"/>) lines. Each line MUST encode a single hash in base64 <xref target="RFC4648"/>. The client MUST NOT send more than 63 consistency proof lines.</t>
          </li>
        </ul>
        <t>Each line MUST terminate in a newline character (U+000A).</t>
        <t>The cosigner performs the following steps:</t>
        <ol spacing="normal" type="1"><li>
            <t>Check that the checkpoint contains signatures from itself</t>
          </li>
          <li>
            <t>Check that the subtree consistency proof proves consistency between the subtree hash and the checkpoint</t>
          </li>
          <li>
            <t>If all checks pass, cosign the subtree, as described in <xref target="cosigners"/></t>
          </li>
        </ol>
        <t>On success, the response body MUST be a sequence of one or more note signature lines <xref target="SIGNED-NOTE"/>, each starting with an em dash character (U+2014) and ending with a newline character (U+000A). The signatures MUST be cosignatures from the cosigner key(s) on the subtree.</t>
        <t>Instead of statelessly validating checkpoints by signature, the cosigner MAY statefully check the requested checkpoint against internal witness or mirror state. In this case, if the cosigner needs a newer checkpoint, it responds with a "409 Conflict" with its latest signed checkpoint. In this case, the subtree cosigning SHOULD remember and accept the last few signed checkpoints, to minimize conflicts.</t>
        <t>If operating statefully, the subtree cosigner process only needs read access to the mirror or witness state and can freely operate on stale state without violating any invariants.</t>
        <t>Mirrors MAY choose to check subtree hashes by querying their log state, instead of evaluating proofs.</t>
        <t>Publicly-exposed subtree cosigning endpoints MAY mitigate DoS in a variety of techniques:</t>
        <ul spacing="normal">
          <li>
            <t>Only cosigning recent subtrees, as old subtrees do not need to be co-signed</t>
          </li>
          <li>
            <t>Caching subtree signatures</t>
          </li>
          <li>
            <t>Requiring a CA signature on the subtree; CAs are only expected to sign two subtrees (<xref target="arbitrary-intervals"/>) for each checkpoint</t>
          </li>
          <li>
            <t>Rate-limiting requests</t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>This document stands on the shoulders of giants and builds upon decades of work in TLS authentication, X.509, and Certificate Transparency. The authors would like to thank all those who have contributed over the history of these protocols.</t>
      <t>The authors additionally thank Bob Beck, Ryan Dickson, Nick Harper, Dennis Jackson, Chris Patton, Ryan Sleevi, and Emily Stark for many valuable discussions and insights which led to this document. We wish to thank Mia Celeste in particular, whose implementation of an earlier draft revealed several pitfalls.</t>
      <t>The idea to mint tree heads infrequently was originally described by Richard Barnes in <xref target="STH-Discipline"/>. The size optimization in Merkle Tree Certificates is an application of this idea to the certificate itself.</t>
    </section>
    <section numbered="false" anchor="change-log">
      <name>Change log</name>
      <ul empty="true">
        <li>
          <t><strong>RFC Editor's Note:</strong> Please remove this section prior to publication of a
final version of this document.</t>
        </li>
      </ul>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-00">
        <name>Since draft-davidben-tls-merkle-tree-certs-00</name>
        <ul spacing="normal">
          <li>
            <t>Simplify hashing by removing the internal padding to align with block size. #72</t>
          </li>
          <li>
            <t>Avoid the temptation of floating points. #66</t>
          </li>
          <li>
            <t>Require <tt>lifetime</tt> to be a multiple of <tt>batch_duration</tt>. #65</t>
          </li>
          <li>
            <t>Rename window to validity window. #21</t>
          </li>
          <li>
            <t>Split Assertion into Assertion and AbridgedAssertion. The latter is used in the Merkle Tree and HTTP interface. It replaces <tt>subject_info</tt> by a hash, to save space by not serving large post-quantum public keys. The original Assertion is used everywhere else, including BikeshedCertificate. #6</t>
          </li>
          <li>
            <t>Add proper context to every node in the Merkle tree. #32</t>
          </li>
          <li>
            <t>Clarify we use a single <tt>CertificateEntry</tt>. #11</t>
          </li>
          <li>
            <t>Clarify we use POSIX time. #1</t>
          </li>
          <li>
            <t>Elaborate on CA public key and signature format. #27</t>
          </li>
          <li>
            <t>Miscellaneous changes.</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-01">
        <name>Since draft-davidben-tls-merkle-tree-certs-01</name>
        <ul spacing="normal">
          <li>
            <t>Minor editorial changes</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-02">
        <name>Since draft-davidben-tls-merkle-tree-certs-02</name>
        <ul spacing="normal">
          <li>
            <t>Replace the negotiation mechanism with TLS Trust Anchor Identifiers.</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-03">
        <name>Since draft-davidben-tls-merkle-tree-certs-03</name>
        <ul spacing="normal">
          <li>
            <t>Switch terminology from "subscriber" to "authenticating party".</t>
          </li>
          <li>
            <t>Use &lt;1..2^24-1&gt; encoding for all certificate types in the CertificateEntry TLS message</t>
          </li>
          <li>
            <t>Clarify discussion and roles in transparency ecosystem</t>
          </li>
          <li>
            <t>Update references</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-04">
        <name>Since draft-davidben-tls-merkle-tree-certs-04</name>
        <t>Substantially reworked the design. The old design was essentially the landmark checkpoint and CA-built logs ideas, but targeting only the optimized and slow issuance path, and with a more bespoke tree structure:</t>
        <t>In both draft-04 and draft-05, a CA looks like today’s CAs except that they run some software to publish what they issue and sign tree heads to certify certificates in bulk.</t>
        <t>In draft-04, the CA software publishes certificates in a bunch of independent Merkle trees. This is very easy to do as a collection of highly cacheable, immutable static files because each tree is constructed independently, and never appended to after being built. In draft-05, the certificates are published in a single Merkle tree. The <xref target="TLOG-TILES"/> interface allows such trees to also use highly cacheable, immutable static files.</t>
        <t>In draft-04, there only are hourly tree heads. Clients are provisioned with tree heads ahead of time so we can make small, inclusion-proof-only certificates. In draft-05, the ecosystem must coordinate on defining "landmark" checkpoints. Clients are provisioned with subtrees describing landmark checkpoints ahead of time so we can make small, inclusion-proof-only certificates.</t>
        <t>In draft-04, each tree head is independent. In draft-05, each landmark checkpoint contains all the previous checkpoints.</t>
        <t>In draft-04, the independent tree heads were easily prunable. In draft-05, we define how to prune a Merkle tree.</t>
        <t>In draft-04, there is no fast issuance mode. In draft-05, frequent, non-landmark checkpoints can be combined with inclusion proofs and witness signatures for fast issuance. This is essentially an STH and inclusion proof in CT.</t>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
