<?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-06" category="exp" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.0 -->
  <front>
    <title>Merkle Tree Certificates</title>
    <seriesInfo name="Internet-Draft" value="draft-davidben-tls-merkle-tree-certs-06"/>
    <author initials="D." surname="Benjamin" fullname="David Benjamin">
      <organization>Google LLC</organization>
      <address>
        <email>davidben@google.com</email>
      </address>
    </author>
    <author initials="D." surname="O'Brien" fullname="Devon O'Brien">
      <organization>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="July" day="28"/>
    <area>Security</area>
    <abstract>
      <?line 180?>

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

<section anchor="introduction">
      <name>Introduction</name>
      <t>Authors' Note: This is an early draft of a proposal with many parts. We expect most details will change as the proposal evolves. This document has a concrete specification of these details, but this is only intended as a starting point, and to help convey the overall idea. The name of the draft says "tls" to keep continuity with earlier iterations of this work, but the protocol itself is not TLS-specific.</t>
      <t>In Public Key Infrastructures (PKIs) that use Certificate Transparency (CT) <xref target="RFC6962"/> for a public logging requirement, an authenticating party must present Signed Certificate Timestamps (SCTs) alongside certificates. CT policies often require two or more SCTs per certificate <xref target="APPLE-CT"/> <xref target="CHROME-CT"/>, each of which carries a signature. These signatures are in addition to those in the certificate chain itself.</t>
      <t>Current signature schemes can use as few as 32 bytes per key and 64 bytes per signature <xref target="RFC8032"/>, but post-quantum replacements are much larger. For example, ML-DSA-44 <xref target="FIPS204"/> uses 1,312 bytes per public key and 2,420 bytes per signature. ML-DSA-65 uses 1,952 bytes per public key and 3,309 bytes per signature. Even with a directly-trusted intermediate (<xref section="7.5" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>), two SCTs and a leaf certificate signature adds 7,260 bytes of authentication overhead with ML-DSA-44 and 9,927 bytes with ML-DSA-65.</t>
      <t>This increased overhead additionally impacts CT logs themselves. Most of a log's costs scale with the total storage size of the log. Each log entry contains both a public key, and a signature from the CA. With larger public keys and signatures, the size of each log entry will grow.</t>
      <t>Additionally, as PKIs transition to shorter-lived certificates <xref target="CABF-153"/> <xref target="CABF-SC081"/>, the number of entries in the log will grow.</t>
      <t>This document introduces Merkle Tree certificates, a new form of X.509 certificate that integrates logging with certificate issuance. Each CA maintains a log of everything it issues, signing views of the log to assert it has issued the contents. The CA signature is combined with cosignatures from other parties who verify correct operation and optionally mirror the log. These signatures, together with an inclusion proof for an individual entry, constitute a certificate.</t>
      <t>This achieves the following:</t>
      <ul spacing="normal">
        <li>
          <t>Log entries do not scale with public key and signature sizes. Entries replace public keys with hashes and do not contain signatures, while preserving non-repudiability (<xref target="non-repudiation"/>).</t>
        </li>
        <li>
          <t>To bound growth, long-expired entries can be pruned from logs and mirrors without interrupting existing clients. This allows log sizes to scale by retention policies, not the lifetime of the log, even as certificate lifetimes decrease.</t>
        </li>
        <li>
          <t>After a processing delay, authenticating parties can obtain a second "signatureless" certificate for the same log entry. This second certificate is an optional size optimization that avoids the need for any signatures, assuming an up-to-date client that has some predistributed log information.</t>
        </li>
      </ul>
      <t><xref target="overview"/> gives an overview of the system. <xref target="subtrees"/> describes a Merkle Tree primitive used by this system. <xref target="issuance-logs"/> describes the log structure. Finally, <xref target="certificates"/> and <xref target="relying-parties"/> 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 to whom the authenticating party presents its identity. In TLS, this is the side receiving the Certificate and CertificateVerify message.</t>
          </dd>
          <dt>Monitor:</dt>
          <dd>
            <t>Parties who watch logs for certificates of interest, analogous to the role in <xref section="8.2" sectionFormat="of" target="RFC9162"/>.</t>
          </dd>
          <dt>Issuance log:</dt>
          <dd>
            <t>A log, maintained by the CA, of everything issued by that CA.</t>
          </dd>
          <dt>Cosigner:</dt>
          <dd>
            <t>A service that signs views of an issuance log, to assert correct operation and other properties about the entries.</t>
          </dd>
        </dl>
        <t>Additionally, there are several terms used throughout this document to describe this proposal. This section provides an overview. They will be further defined and discussed in detail throughout the document.</t>
        <dl>
          <dt>Checkpoint:</dt>
          <dd>
            <t>A description of the complete state of the log at some time.</t>
          </dd>
          <dt>Entry:</dt>
          <dd>
            <t>An individual element of the log, describing information which the CA has validated and certified.</t>
          </dd>
          <dt>Subtree:</dt>
          <dd>
            <t>A smaller Merkle Tree over a portion of the log, defined by an interior node of some snapshot of the log. Subtrees can be efficiently shown to be consistent with the whole log.</t>
          </dd>
          <dt>Inclusion proof:</dt>
          <dd>
            <t>A sequence of hashes that efficiently proves some entry is contained in some checkpoint or subtree.</t>
          </dd>
          <dt>Consistency proof:</dt>
          <dd>
            <t>A sequence of hashes that efficiently proves a checkpoint or subtree is contained within another checkpoint.</t>
          </dd>
          <dt>Cosignature:</dt>
          <dd>
            <t>A signature from either the CA or other cosigner, over some checkpoint or subtree.</t>
          </dd>
          <dt>Landmark 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 Merkle Tree over <tt>n</tt> elements, a subtree defined by <tt>[start, end)</tt>, a consistency proof <tt>proof</tt>, a subtree hash <tt>node_hash</tt>, and a root hash <tt>root_hash</tt>:</t>
          <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>Unlike <xref target="RFC6962"/> and <xref target="RFC9162"/>, an issuance log does not have a public submission interface. The log only contains entries which the log operator, i.e. the CA, chose to add. As entries are added, the Merkle Tree is updated to be computed over the new sequence.</t>
      <t>A snapshot of the log is known as a <em>checkpoint</em>. A checkpoint is identified by its <em>tree size</em>, that is the number of elements comitted to the log at the time. Its contents can be described by the Merkle Tree Hash (<xref section="2.1.1" sectionFormat="of" target="RFC9162"/>) of entries zero through <tt>tree_size - 1</tt>.</t>
      <t>Cosigners (<xref target="cosigners"/>) sign assertions about the state of the issuance log. A Merkle Tree CA operates a combination of an issuance log and one or more CA cosigners (<xref target="certification-authority-cosigners"/>) that authenticate the log state and certifies the contents. External cosigners may also be deployed to assert correct log operation or provide other services to relying parties (<xref target="trusted-cosigners"/>).</t>
      <section anchor="log-parameters">
        <name>Log Parameters</name>
        <t>An issuance log has the following parameters:</t>
        <ul spacing="normal">
          <li>
            <t>A log ID, which uniquely identifies the log. See <xref target="log-ids"/>.</t>
          </li>
          <li>
            <t>A collision-resistant cryptographic hash function. SHA-256 <xref target="SHS"/> is RECOMMENDED.</t>
          </li>
          <li>
            <t>A minimum index, which is the index of the first log entry which is available. See <xref target="log-pruning"/>. This value changes over the lifetime of the log.</t>
          </li>
        </ul>
        <t>Throughout this document, the hash algorithm in use is referred to as HASH, and the size of its output in bytes is referred to as HASH_SIZE.</t>
      </section>
      <section anchor="log-ids">
        <name>Log IDs</name>
        <t>Each issuance log is identified by a <em>log ID</em>, which is a trust anchor ID <xref target="I-D.ietf-tls-trust-anchor-ids"/>.</t>
        <t>An issuance log's log ID determines an X.509 distinguished name (<xref section="4.1.2.4" sectionFormat="of" target="RFC5280"/>). The distinguished name has a single relative distinguished name, which has a single attribute. The attribute has type <tt>id-rdna-trustAnchorID</tt>, defined below:</t>
        <artwork><![CDATA[
id-rdna-trustAnchorID OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) rdna(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 follows some append-only view of the log and signs subtrees (<xref target="subtrees"/>) consistent with that view. The signatures generated by a cosigner are known as <em>cosignatures</em>. All subtrees signed by a cosigner MUST be consistent with each other. The cosigner may be external to the log, in which case it might ensure consistency by checking consistency proofs. The cosigner may be operated together with the log, in which case it can trust its log state.</t>
        <t>A cosignature MAY implicitly make additional statements about a subtree, determined by the cosigner's role. This document defines one concrete cosigner role, a CA cosigner (<xref target="certification-authority-cosigners"/>), to authenticate the log and certify entries. Other documents and specific deployments may define other cosigner roles, to perform different functions in a PKI. For example, <xref target="TLOG-WITNESS"/> defines a cosigner that only checks the log is append-only, and <xref target="TLOG-MIRROR"/> defines a cosigner that mirrors a log.</t>
        <t>Each cosigner has a public key and a <em>cosigner ID</em>, which uniquely identifies the cosigner. The cosigner ID is a trust anchor ID <xref target="I-D.ietf-tls-trust-anchor-ids"/>. By identifying the cosigner, the cosigner ID specifies both the public key and the additional statements made by the cosigner's signatures. If a single operator performs multiple cosigner roles in an ecosystem, each role MUST use a distinct cosigner ID and SHOULD use a distinct key.</t>
        <t>A single cosigner, with a single cosigner ID and public key, MAY generate cosignatures for multiple logs. In this case, signed subtrees only need to be consistent with others for the same log.</t>
        <section anchor="signature-format">
          <name>Signature Format</name>
          <t>A cosigner computes a cosignature for a subtree in some log by signing a MTCSubtreeSignatureInput, defined below using the TLS presentation language (<xref section="3" sectionFormat="of" target="RFC8446"/>):</t>
          <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 the cosigner-specific additional statements.</t>
          <t>Cosigners SHOULD publish their current checkpoint, along with the checkpoint signature.</t>
          <t>[[TODO: CT and tlog put timestamps in checkpoint signatures. Do we want them here? In CT and tlog, the timestamps are monotonically increasing as the log progresses, but we also sign subtrees. We can separate subtree and checkpoint signatures, with timestamps only in the latter, but it's unclear if there is any benefit to this.]]</t>
        </section>
        <section anchor="signature-algorithms">
          <name>Signature Algorithms</name>
          <t>The cosigner's public key specifies both the key material and the signature algorithm to use with the key material. In order to change key or signature parameters, a cosigner operator MUST deploy a new cosigner, with a new cosigner ID. Signature algorithms MUST fully specify the algorithm parameters, such as hash functions used. This document defines the following signature algorithms:</t>
          <ul spacing="normal">
            <li>
              <t>ECDSA with P-256 and SHA-256 <xref target="FIPS186-5"/></t>
            </li>
            <li>
              <t>ECDSA with P-384 and SHA-384 <xref target="FIPS186-5"/></t>
            </li>
            <li>
              <t>Ed25519 <xref target="RFC8032"/></t>
            </li>
            <li>
              <t>ML-DSA-44 <xref target="FIPS204"/></t>
            </li>
            <li>
              <t>ML-DSA-65 <xref target="FIPS204"/></t>
            </li>
            <li>
              <t>ML-DSA-87 <xref target="FIPS204"/></t>
            </li>
          </ul>
          <t>Other documents or deployments MAY define other signature schemes and formats. Log clients that accept cosignatures from some cosigner are assumed to be configured with all parameters necessary to verify that cosigner's signatures, including the signature algorithm and version of the signature format.</t>
        </section>
      </section>
      <section anchor="certification-authority-cosigners">
        <name>Certification Authority Cosigners</name>
        <t>A <em>CA cosigner</em> is a cosigner (<xref target="cosigners"/>) that certifies the contents of a log.</t>
        <t>When a CA cosigner signs a subtree, it makes the additional statement that it has certified each entry in the subtree. For example, a domain-validating CA states that it has performed domain validation for each entry, at some time consistent with the entry's validity dates. CAs are held responsible for every entry in every subtree they sign. Proving an entry is included (<xref target="subtree-inclusion-proofs"/>) in a CA-signed subtree is sufficient to prove the CA certified it.</t>
        <t>What it means to certify an entry depends on the entry type:</t>
        <ul spacing="normal">
          <li>
            <t>To certify an entry of type <tt>null_entry</tt> is a no-op. A CA MAY freely certify <tt>null_entry</tt> without being held responsible for any validation.</t>
          </li>
          <li>
            <t>To certify an entry of type <tt>tbs_cert_entry</tt> is to certify the TBSCertificateLogEntry, as defined in <xref target="log-entries"/>.</t>
          </li>
        </ul>
        <t>Entries are extensible. Future documents MAY define <tt>type</tt> values and what it means to certify them. A CA MUST NOT sign a subtree if it contains an entry with <tt>type</tt> that it does not recognize. Doing so would certify that the CA has validated the information in some not-yet-defined entry format. <xref target="new-log-entry-types"/> further discusses security implications of new formats.</t>
        <t>A CA operator MAY operate multiple CA cosigners that all certify the same log in parallel. This may be useful when, e.g., rotating CA keys. In this case, each CA instance MUST have a distinct name. The CA operator's ACME server can return all CA cosignatures together in a single certificate, with the application protocol selecting the cosignatures to use. <xref target="use-in-tls"/> describes how this is done in TLS <xref target="RFC8446"/>.</t>
        <t>If the CA operator additionally operates a traditional X.509 CA, that CA key MUST be distinct from any Merkle Tree CA cosigner keys.</t>
      </section>
      <section anchor="publishing-logs">
        <name>Publishing Logs</name>
        <t><em>[[NOTE: This section is written to avoid depending on a specific serving protocol. The current expectation is that a Web PKI deployment would derive from <xref target="TLOG-TILES"/>, to match the direction of Certificate Transparency and pick up improvements made there.</em></t>
        <t><em>For now, we avoid a normative reference on <xref target="TLOG-TILES"/> and also capture the fact that the certificate construction is independent of the choice of protocol. Similar to how the CT ecosystem is migrating to a tiled interface, were someone to improve on <xref target="TLOG-TILES"/>, a PKI could migrate to that new protocol without impacting certificate verification.</em></t>
        <t><em>That said, this is purely a starting point for describing the design. We expect the scope of this document, and other related documents to adapt as the work evolves across the IETF, C2SP, Certificate Transparency, and other communities.]]</em></t>
        <t>Issuance logs are intended to be publicly accessible in some form, to allow monitors to detect misissued certificates.</t>
        <t>The access method does not affect certificate interoperability, so this document does not prescribe a specific protocol. An individual issuance log MAY be published in any form, provided other parties in the PKI are able to consume it. Relying parties SHOULD define log serving requirements, including the allowed protocols and expected availability, as part of their policies on which CAs to support. See also <xref target="log-availability"/>.</t>
        <t>For example, a log ecosystem could use <xref target="TLOG-TILES"/> to serve logs. <xref target="TLOG-TILES"/> improves on <xref target="RFC6962"/> and <xref target="RFC9162"/> by exposing the log as a collection of cacheable, immutable "tiles". This works well with a variety of common HTTP <xref target="RFC9110"/> serving architectures. It also allows log clients to request arbitrary tree nodes, so log clients can fetch the structures described in <xref target="subtrees"/>.</t>
        <section anchor="log-pruning">
          <name>Log Pruning</name>
          <t>Over time, an issuance log's entries will expire and likely be replaced with certificate renewals. As this happens, the total size of the log grows, even if the unexpired subset remains fixed. To mitigate this, issuance logs MAY be <em>pruned</em>, as described in this section.</t>
          <t>Pruning makes some prefix of the log unavailable, without changing the tree structure. It may be used to reduce the serving cost of long-lived logs, where any entries have long expired. <xref target="log-availability"/> discusses policies on when pruning may be permitted. This section discusses how it is done and the impact on log structure.</t>
          <t>An issuance log is pruned by updating its <em>minimum index</em> parameter (<xref target="log-parameters"/>). The minimum index is the index of the first log entry that the log publishes. (See <xref target="publishing-logs"/>.) It MUST be less than or equal to the tree size of the log's current checkpoint, and also satisfy any availability policies set by relying parties who trust the CA.</t>
          <t>An entry is said to be <em>available</em> if its index is greater than or equal to the minimum index. A checkpoint is said to be available if its tree size is greater than the minimum index. A subtree <tt>[start, end)</tt> is said to be available if <tt>end</tt> is greater than the minimum index.</t>
          <t>Log protocols MUST serve enough information to allow a log client to efficiently obtain the following:</t>
          <ul spacing="normal">
            <li>
              <t>Signatures over the latest checkpoint by the CA's cosigners (<xref target="certification-authority-cosigners"/>)</t>
            </li>
            <li>
              <t>Any individual available log entry (<xref target="log-entries"/>)</t>
            </li>
            <li>
              <t>The hash value of any available checkpoint</t>
            </li>
            <li>
              <t>An inclusion proof (<xref section="2.1.3" sectionFormat="of" target="RFC9162"/>) for any available entry to any containing checkpoint</t>
            </li>
            <li>
              <t>A consistency proof (<xref section="2.1.4" sectionFormat="of" target="RFC9162"/>) between any two available checkpoints</t>
            </li>
            <li>
              <t>The hash value of any available subtree (<xref target="subtrees"/>)</t>
            </li>
            <li>
              <t>A subtree inclusion proof (<xref target="subtree-inclusion-proofs"/>) for any available entry in any containing subtree</t>
            </li>
            <li>
              <t>A subtree consistency proof (<xref target="subtree-consistency-proofs"/>) between any available subtree to any containing checkpoint</t>
            </li>
          </ul>
          <t>Meeting these requirements requires a log to retain some information about pruned entries. Given a node <tt>[start, end)</tt> in the Merkle Tree, if <tt>end</tt> is less than or equal to the minimum index, the node's children MAY be discarded in favor of the node's hash.</t>
          <t><xref target="fig-prune-tree"/> shows an example pruned tree with 13 elements, where the minimum index is 7. It shows the original tree, followed by the pruned tree. The pruned tree depicts the nodes that MUST be available or computable. Note that entry 6 MAY be discarded, only the hash of entry 6 must be available.</t>
          <figure anchor="fig-prune-tree">
            <name>An example showing the minimum nodes that must be available after pruning</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="672" width="456" viewBox="0 0 456 672" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                  <path d="M 8,288 L 8,320" fill="none" stroke="black"/>
                  <path d="M 24,288 L 24,320" fill="none" stroke="black"/>
                  <path d="M 32,160 L 32,192" fill="none" stroke="black"/>
                  <path d="M 32,496 L 32,528" fill="none" stroke="black"/>
                  <path d="M 40,288 L 40,320" fill="none" stroke="black"/>
                  <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                  <path d="M 56,288 L 56,320" fill="none" stroke="black"/>
                  <path d="M 64,96 L 64,128" fill="none" stroke="black"/>
                  <path d="M 64,432 L 64,464" fill="none" stroke="black"/>
                  <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                  <path d="M 72,288 L 72,320" fill="none" stroke="black"/>
                  <path d="M 88,288 L 88,320" fill="none" stroke="black"/>
                  <path d="M 104,160 L 104,192" fill="none" stroke="black"/>
                  <path d="M 104,288 L 104,320" fill="none" stroke="black"/>
                  <path d="M 104,496 L 104,528" fill="none" stroke="black"/>
                  <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                  <path d="M 120,288 L 120,320" fill="none" stroke="black"/>
                  <path d="M 136,32 L 136,64" fill="none" stroke="black"/>
                  <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                  <path d="M 136,288 L 136,320" fill="none" stroke="black"/>
                  <path d="M 136,368 L 136,400" fill="none" stroke="black"/>
                  <path d="M 136,560 L 136,592" fill="none" stroke="black"/>
                  <path d="M 152,288 L 152,320" fill="none" stroke="black"/>
                  <path d="M 160,160 L 160,192" fill="none" stroke="black"/>
                  <path d="M 160,496 L 160,528" fill="none" stroke="black"/>
                  <path d="M 168,288 L 168,320" fill="none" stroke="black"/>
                  <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                  <path d="M 184,288 L 184,320" fill="none" stroke="black"/>
                  <path d="M 184,560 L 184,592" fill="none" stroke="black"/>
                  <path d="M 200,96 L 200,128" fill="none" stroke="black"/>
                  <path d="M 200,224 L 200,256" fill="none" stroke="black"/>
                  <path d="M 200,288 L 200,320" fill="none" stroke="black"/>
                  <path d="M 200,432 L 200,464" fill="none" stroke="black"/>
                  <path d="M 200,560 L 200,592" fill="none" stroke="black"/>
                  <path d="M 200,624 L 200,656" fill="none" stroke="black"/>
                  <path d="M 216,288 L 216,320" fill="none" stroke="black"/>
                  <path d="M 216,624 L 216,656" fill="none" stroke="black"/>
                  <path d="M 232,160 L 232,192" fill="none" stroke="black"/>
                  <path d="M 232,288 L 232,320" fill="none" stroke="black"/>
                  <path d="M 232,496 L 232,528" fill="none" stroke="black"/>
                  <path d="M 232,624 L 232,656" fill="none" stroke="black"/>
                  <path d="M 248,224 L 248,256" fill="none" stroke="black"/>
                  <path d="M 248,288 L 248,320" fill="none" stroke="black"/>
                  <path d="M 248,560 L 248,592" fill="none" stroke="black"/>
                  <path d="M 248,624 L 248,656" fill="none" stroke="black"/>
                  <path d="M 264,224 L 264,256" fill="none" stroke="black"/>
                  <path d="M 264,288 L 264,320" fill="none" stroke="black"/>
                  <path d="M 264,560 L 264,592" fill="none" stroke="black"/>
                  <path d="M 264,624 L 264,656" fill="none" stroke="black"/>
                  <path d="M 280,288 L 280,320" fill="none" stroke="black"/>
                  <path d="M 280,624 L 280,656" fill="none" stroke="black"/>
                  <path d="M 288,160 L 288,192" fill="none" stroke="black"/>
                  <path d="M 288,496 L 288,528" fill="none" stroke="black"/>
                  <path d="M 296,288 L 296,320" fill="none" stroke="black"/>
                  <path d="M 296,624 L 296,656" fill="none" stroke="black"/>
                  <path d="M 312,96 L 312,128" fill="none" stroke="black"/>
                  <path d="M 312,288 L 312,320" fill="none" stroke="black"/>
                  <path d="M 312,432 L 312,464" fill="none" stroke="black"/>
                  <path d="M 312,624 L 312,656" fill="none" stroke="black"/>
                  <path d="M 320,224 L 320,256" fill="none" stroke="black"/>
                  <path d="M 320,560 L 320,592" fill="none" stroke="black"/>
                  <path d="M 328,288 L 328,320" fill="none" stroke="black"/>
                  <path d="M 328,624 L 328,656" fill="none" stroke="black"/>
                  <path d="M 336,224 L 336,256" fill="none" stroke="black"/>
                  <path d="M 336,560 L 336,592" fill="none" stroke="black"/>
                  <path d="M 352,288 L 352,320" fill="none" stroke="black"/>
                  <path d="M 352,624 L 352,656" fill="none" stroke="black"/>
                  <path d="M 368,160 L 368,192" fill="none" stroke="black"/>
                  <path d="M 368,288 L 368,320" fill="none" stroke="black"/>
                  <path d="M 368,496 L 368,528" fill="none" stroke="black"/>
                  <path d="M 368,624 L 368,656" fill="none" stroke="black"/>
                  <path d="M 376,32 L 376,64" fill="none" stroke="black"/>
                  <path d="M 376,368 L 376,400" fill="none" stroke="black"/>
                  <path d="M 392,288 L 392,320" fill="none" stroke="black"/>
                  <path d="M 392,624 L 392,656" fill="none" stroke="black"/>
                  <path d="M 400,224 L 400,256" fill="none" stroke="black"/>
                  <path d="M 400,560 L 400,592" fill="none" stroke="black"/>
                  <path d="M 408,288 L 408,320" fill="none" stroke="black"/>
                  <path d="M 408,624 L 408,656" fill="none" stroke="black"/>
                  <path d="M 424,136 L 424,272" fill="none" stroke="black"/>
                  <path d="M 424,472 L 424,608" fill="none" stroke="black"/>
                  <path d="M 432,288 L 432,320" fill="none" stroke="black"/>
                  <path d="M 432,624 L 432,656" fill="none" stroke="black"/>
                  <path d="M 448,96 L 448,128" fill="none" stroke="black"/>
                  <path d="M 448,432 L 448,464" fill="none" stroke="black"/>
                  <path d="M 136,32 L 376,32" fill="none" stroke="black"/>
                  <path d="M 136,64 L 376,64" fill="none" stroke="black"/>
                  <path d="M 64,96 L 200,96" fill="none" stroke="black"/>
                  <path d="M 312,96 L 448,96" fill="none" stroke="black"/>
                  <path d="M 64,128 L 200,128" fill="none" stroke="black"/>
                  <path d="M 312,128 L 448,128" fill="none" stroke="black"/>
                  <path d="M 32,160 L 104,160" fill="none" stroke="black"/>
                  <path d="M 160,160 L 232,160" fill="none" stroke="black"/>
                  <path d="M 288,160 L 368,160" fill="none" stroke="black"/>
                  <path d="M 32,192 L 104,192" fill="none" stroke="black"/>
                  <path d="M 160,192 L 232,192" fill="none" stroke="black"/>
                  <path d="M 288,192 L 368,192" fill="none" stroke="black"/>
                  <path d="M 8,224 L 56,224" fill="none" stroke="black"/>
                  <path d="M 72,224 L 120,224" fill="none" stroke="black"/>
                  <path d="M 136,224 L 184,224" fill="none" stroke="black"/>
                  <path d="M 200,224 L 248,224" fill="none" stroke="black"/>
                  <path d="M 264,224 L 320,224" fill="none" stroke="black"/>
                  <path d="M 336,224 L 400,224" fill="none" stroke="black"/>
                  <path d="M 8,256 L 56,256" fill="none" stroke="black"/>
                  <path d="M 72,256 L 120,256" fill="none" stroke="black"/>
                  <path d="M 136,256 L 184,256" fill="none" stroke="black"/>
                  <path d="M 200,256 L 248,256" fill="none" stroke="black"/>
                  <path d="M 264,256 L 320,256" fill="none" stroke="black"/>
                  <path d="M 336,256 L 400,256" fill="none" stroke="black"/>
                  <path d="M 8,286 L 24,286" fill="none" stroke="black"/>
                  <path d="M 8,290 L 24,290" fill="none" stroke="black"/>
                  <path d="M 40,286 L 56,286" fill="none" stroke="black"/>
                  <path d="M 40,290 L 56,290" fill="none" stroke="black"/>
                  <path d="M 72,286 L 88,286" fill="none" stroke="black"/>
                  <path d="M 72,290 L 88,290" fill="none" stroke="black"/>
                  <path d="M 104,286 L 120,286" fill="none" stroke="black"/>
                  <path d="M 104,290 L 120,290" fill="none" stroke="black"/>
                  <path d="M 136,286 L 152,286" fill="none" stroke="black"/>
                  <path d="M 136,290 L 152,290" fill="none" stroke="black"/>
                  <path d="M 168,286 L 184,286" fill="none" stroke="black"/>
                  <path d="M 168,290 L 184,290" fill="none" stroke="black"/>
                  <path d="M 200,286 L 216,286" fill="none" stroke="black"/>
                  <path d="M 200,290 L 216,290" fill="none" stroke="black"/>
                  <path d="M 232,286 L 248,286" fill="none" stroke="black"/>
                  <path d="M 232,290 L 248,290" fill="none" stroke="black"/>
                  <path d="M 264,286 L 280,286" fill="none" stroke="black"/>
                  <path d="M 264,290 L 280,290" fill="none" stroke="black"/>
                  <path d="M 296,286 L 312,286" fill="none" stroke="black"/>
                  <path d="M 296,290 L 312,290" fill="none" stroke="black"/>
                  <path d="M 328,286 L 352,286" fill="none" stroke="black"/>
                  <path d="M 328,290 L 352,290" fill="none" stroke="black"/>
                  <path d="M 368,286 L 392,286" fill="none" stroke="black"/>
                  <path d="M 368,290 L 392,290" fill="none" stroke="black"/>
                  <path d="M 408,286 L 432,286" fill="none" stroke="black"/>
                  <path d="M 408,290 L 432,290" fill="none" stroke="black"/>
                  <path d="M 8,318 L 24,318" fill="none" stroke="black"/>
                  <path d="M 8,322 L 24,322" fill="none" stroke="black"/>
                  <path d="M 40,318 L 56,318" fill="none" stroke="black"/>
                  <path d="M 40,322 L 56,322" fill="none" stroke="black"/>
                  <path d="M 72,318 L 88,318" fill="none" stroke="black"/>
                  <path d="M 72,322 L 88,322" fill="none" stroke="black"/>
                  <path d="M 104,318 L 120,318" fill="none" stroke="black"/>
                  <path d="M 104,322 L 120,322" fill="none" stroke="black"/>
                  <path d="M 136,318 L 152,318" fill="none" stroke="black"/>
                  <path d="M 136,322 L 152,322" fill="none" stroke="black"/>
                  <path d="M 168,318 L 184,318" fill="none" stroke="black"/>
                  <path d="M 168,322 L 184,322" fill="none" stroke="black"/>
                  <path d="M 200,318 L 216,318" fill="none" stroke="black"/>
                  <path d="M 200,322 L 216,322" fill="none" stroke="black"/>
                  <path d="M 232,318 L 248,318" fill="none" stroke="black"/>
                  <path d="M 232,322 L 248,322" fill="none" stroke="black"/>
                  <path d="M 264,318 L 280,318" fill="none" stroke="black"/>
                  <path d="M 264,322 L 280,322" fill="none" stroke="black"/>
                  <path d="M 296,318 L 312,318" fill="none" stroke="black"/>
                  <path d="M 296,322 L 312,322" fill="none" stroke="black"/>
                  <path d="M 328,318 L 352,318" fill="none" stroke="black"/>
                  <path d="M 328,322 L 352,322" fill="none" stroke="black"/>
                  <path d="M 368,318 L 392,318" fill="none" stroke="black"/>
                  <path d="M 368,322 L 392,322" fill="none" stroke="black"/>
                  <path d="M 408,318 L 432,318" fill="none" stroke="black"/>
                  <path d="M 408,322 L 432,322" fill="none" stroke="black"/>
                  <path d="M 136,368 L 376,368" fill="none" stroke="black"/>
                  <path d="M 136,400 L 376,400" fill="none" stroke="black"/>
                  <path d="M 64,432 L 200,432" fill="none" stroke="black"/>
                  <path d="M 312,432 L 448,432" fill="none" stroke="black"/>
                  <path d="M 64,464 L 200,464" fill="none" stroke="black"/>
                  <path d="M 312,464 L 448,464" fill="none" stroke="black"/>
                  <path d="M 32,496 L 104,496" fill="none" stroke="black"/>
                  <path d="M 160,496 L 232,496" fill="none" stroke="black"/>
                  <path d="M 288,496 L 368,496" fill="none" stroke="black"/>
                  <path d="M 32,528 L 104,528" fill="none" stroke="black"/>
                  <path d="M 160,528 L 232,528" fill="none" stroke="black"/>
                  <path d="M 288,528 L 368,528" fill="none" stroke="black"/>
                  <path d="M 136,560 L 184,560" fill="none" stroke="black"/>
                  <path d="M 200,560 L 248,560" fill="none" stroke="black"/>
                  <path d="M 264,560 L 320,560" fill="none" stroke="black"/>
                  <path d="M 336,560 L 400,560" fill="none" stroke="black"/>
                  <path d="M 136,592 L 184,592" fill="none" stroke="black"/>
                  <path d="M 200,592 L 248,592" fill="none" stroke="black"/>
                  <path d="M 264,592 L 320,592" fill="none" stroke="black"/>
                  <path d="M 336,592 L 400,592" fill="none" stroke="black"/>
                  <path d="M 200,624 L 216,624" fill="none" stroke="black"/>
                  <path d="M 232,622 L 248,622" fill="none" stroke="black"/>
                  <path d="M 232,626 L 248,626" fill="none" stroke="black"/>
                  <path d="M 264,622 L 280,622" fill="none" stroke="black"/>
                  <path d="M 264,626 L 280,626" fill="none" stroke="black"/>
                  <path d="M 296,622 L 312,622" fill="none" stroke="black"/>
                  <path d="M 296,626 L 312,626" fill="none" stroke="black"/>
                  <path d="M 328,622 L 352,622" fill="none" stroke="black"/>
                  <path d="M 328,626 L 352,626" fill="none" stroke="black"/>
                  <path d="M 368,622 L 392,622" fill="none" stroke="black"/>
                  <path d="M 368,626 L 392,626" fill="none" stroke="black"/>
                  <path d="M 408,622 L 432,622" fill="none" stroke="black"/>
                  <path d="M 408,626 L 432,626" fill="none" stroke="black"/>
                  <path d="M 200,656 L 216,656" fill="none" stroke="black"/>
                  <path d="M 232,654 L 248,654" fill="none" stroke="black"/>
                  <path d="M 232,658 L 248,658" fill="none" stroke="black"/>
                  <path d="M 264,654 L 280,654" fill="none" stroke="black"/>
                  <path d="M 264,658 L 280,658" fill="none" stroke="black"/>
                  <path d="M 296,654 L 312,654" fill="none" stroke="black"/>
                  <path d="M 296,658 L 312,658" fill="none" stroke="black"/>
                  <path d="M 328,654 L 352,654" fill="none" stroke="black"/>
                  <path d="M 328,658 L 352,658" fill="none" stroke="black"/>
                  <path d="M 368,654 L 392,654" fill="none" stroke="black"/>
                  <path d="M 368,658 L 392,658" fill="none" stroke="black"/>
                  <path d="M 408,654 L 432,654" fill="none" stroke="black"/>
                  <path d="M 408,658 L 432,658" fill="none" stroke="black"/>
                  <g class="text">
                    <text x="248" y="52">[0,</text>
                    <text x="280" y="52">13)</text>
                    <text x="160" y="84">/</text>
                    <text x="352" y="84">\</text>
                    <text x="120" y="116">[0,</text>
                    <text x="148" y="116">8)</text>
                    <text x="368" y="116">[8,</text>
                    <text x="400" y="116">13)</text>
                    <text x="72" y="148">/</text>
                    <text x="192" y="148">\</text>
                    <text x="336" y="148">/</text>
                    <text x="56" y="180">[0,</text>
                    <text x="84" y="180">4)</text>
                    <text x="184" y="180">[4,</text>
                    <text x="212" y="180">8)</text>
                    <text x="312" y="180">[8,</text>
                    <text x="344" y="180">12)</text>
                    <text x="40" y="212">/</text>
                    <text x="96" y="212">\</text>
                    <text x="168" y="212">/</text>
                    <text x="224" y="212">\</text>
                    <text x="304" y="212">/</text>
                    <text x="360" y="212">\</text>
                    <text x="32" y="244">[0,2)</text>
                    <text x="96" y="244">[2,4)</text>
                    <text x="160" y="244">[4,6)</text>
                    <text x="224" y="244">[6,8)</text>
                    <text x="292" y="244">[8,10)</text>
                    <text x="368" y="244">[10,12)</text>
                    <text x="24" y="276">/</text>
                    <text x="40" y="276">\</text>
                    <text x="88" y="276">/</text>
                    <text x="104" y="276">\</text>
                    <text x="152" y="276">/</text>
                    <text x="168" y="276">\</text>
                    <text x="216" y="276">/</text>
                    <text x="232" y="276">\</text>
                    <text x="280" y="276">/</text>
                    <text x="296" y="276">\</text>
                    <text x="352" y="276">/</text>
                    <text x="368" y="276">\</text>
                    <text x="16" y="308">0</text>
                    <text x="48" y="308">1</text>
                    <text x="80" y="308">2</text>
                    <text x="112" y="308">3</text>
                    <text x="144" y="308">4</text>
                    <text x="176" y="308">5</text>
                    <text x="208" y="308">6</text>
                    <text x="240" y="308">7</text>
                    <text x="272" y="308">8</text>
                    <text x="304" y="308">9</text>
                    <text x="340" y="308">10</text>
                    <text x="380" y="308">11</text>
                    <text x="420" y="308">12</text>
                    <text x="248" y="388">[0,</text>
                    <text x="280" y="388">13)</text>
                    <text x="160" y="420">/</text>
                    <text x="352" y="420">\</text>
                    <text x="120" y="452">[0,</text>
                    <text x="148" y="452">8)</text>
                    <text x="368" y="452">[8,</text>
                    <text x="400" y="452">13)</text>
                    <text x="72" y="484">/</text>
                    <text x="192" y="484">\</text>
                    <text x="336" y="484">/</text>
                    <text x="56" y="516">[0,</text>
                    <text x="84" y="516">4)</text>
                    <text x="184" y="516">[4,</text>
                    <text x="212" y="516">8)</text>
                    <text x="312" y="516">[8,</text>
                    <text x="344" y="516">12)</text>
                    <text x="168" y="548">/</text>
                    <text x="224" y="548">\</text>
                    <text x="304" y="548">/</text>
                    <text x="360" y="548">\</text>
                    <text x="160" y="580">[4,6)</text>
                    <text x="224" y="580">[6,8)</text>
                    <text x="292" y="580">[8,10)</text>
                    <text x="368" y="580">[10,12)</text>
                    <text x="216" y="612">/</text>
                    <text x="232" y="612">\</text>
                    <text x="280" y="612">/</text>
                    <text x="296" y="612">\</text>
                    <text x="352" y="612">/</text>
                    <text x="368" y="612">\</text>
                    <text x="208" y="644">6</text>
                    <text x="240" y="644">7</text>
                    <text x="272" y="644">8</text>
                    <text x="304" y="644">9</text>
                    <text x="340" y="644">10</text>
                    <text x="380" y="644">11</text>
                    <text x="420" y="644">12</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
                +-----------------------------+
                |            [0, 13)          |
                +-----------------------------+
                   /                       \
       +----------------+             +----------------+
       |     [0, 8)     |             |     [8, 13)    |
       +----------------+             +----------------+
        /              \                 /          |
   +--------+      +--------+      +---------+      |
   | [0, 4) |      | [4, 8) |      | [8, 12) |      |
   +--------+      +--------+      +---------+      |
    /      \        /      \         /      \       |
+-----+ +-----+ +-----+ +-----+ +------+ +-------+  |
|[0,2)| |[2,4)| |[4,6)| |[6,8)| |[8,10)| |[10,12)|  |
+-----+ +-----+ +-----+ +-----+ +------+ +-------+  |
  / \     / \     / \     / \     / \      / \      |
+=+ +=+ +=+ +=+ +=+ +=+ +=+ +=+ +=+ +=+ +==+ +==+ +==+
|0| |1| |2| |3| |4| |5| |6| |7| |8| |9| |10| |11| |12|
+=+ +=+ +=+ +=+ +=+ +=+ +=+ +=+ +=+ +=+ +==+ +==+ +==+


                +-----------------------------+
                |            [0, 13)          |
                +-----------------------------+
                   /                       \
       +----------------+             +----------------+
       |     [0, 8)     |             |     [8, 13)    |
       +----------------+             +----------------+
        /              \                 /          |
   +--------+      +--------+      +---------+      |
   | [0, 4) |      | [4, 8) |      | [8, 12) |      |
   +--------+      +--------+      +---------+      |
                    /      \         /      \       |
                +-----+ +-----+ +------+ +-------+  |
                |[4,6)| |[6,8)| |[8,10)| |[10,12)|  |
                +-----+ +-----+ +------+ +-------+  |
                          / \     / \      / \      |
                        +-+ +=+ +=+ +=+ +==+ +==+ +==+
                        |6| |7| |8| |9| |10| |11| |12|
                        +-+ +=+ +=+ +=+ +==+ +==+ +==+
]]></artwork>
            </artset>
          </figure>
          <t>Logs MAY retain additional nodes, or expect log clients to compute required nodes from other nodes. For example, in <xref target="fig-prune-tree"/>, the log's serving protocol MAY instead serve <tt>[0, 2)</tt> and <tt>[2, 4)</tt>, with the log client computing <tt>[0, 4)</tt> from those values.</t>
        </section>
      </section>
    </section>
    <section anchor="certificates">
      <name>Certificates</name>
      <t>This section defines how to construct Merkle Tree Certificates, which are X.509 Certificates <xref target="RFC5280"/> that assert the information in an issuance log entry. A Merkle Tree Certificate is constructed from the following:</t>
      <ul spacing="normal">
        <li>
          <t>A TBSCertificateLogEntry (<xref target="log-entries"/>) contained in the issuance log (<xref target="issuance-logs"/>)</t>
        </li>
        <li>
          <t>A subject public key whose hash matches the TBSCertificateLogEntry</t>
        </li>
        <li>
          <t>A subtree (<xref target="subtrees"/>) that contains the log entry</t>
        </li>
        <li>
          <t>Zero or more signatures (<xref target="cosigners"/>) over the subtree, which together satisfy relying party requirements (<xref target="trusted-cosigners"/>)</t>
        </li>
      </ul>
      <t>For any given TBSCertificateLogEntry, there are multiple possible certificates that may prove the entry is certified by the CA and publicly logged, varying by choice of subtree and signatures. <xref target="certificate-format"/> defines how the certificate is constructed based on those choices. <xref target="full-certificates"/> and <xref target="signatureless-certificates"/> define two profiles of Merkle Tree Certificates, full certificates and signatureless certificates, and how to select the subtree and signatures for them.</t>
      <section anchor="certificate-format">
        <name>Certificate Format</name>
        <t>The information is encoded in an X.509 Certificate <xref target="RFC5280"/> as follows:</t>
        <t>The TBSCertificate's <tt>version</tt>, <tt>issuer</tt>, <tt>validity</tt>, <tt>subject</tt>, <tt>issuerUniqueID</tt>, <tt>subjectUniqueID</tt>, and <tt>extensions</tt> MUST match the corresponding fields of the TBSCertificateLogEntry. Per <xref target="log-entries"/>, this means <tt>issuer</tt> MUST be the issuance log's log ID as an X.509 distinguished name, as described in <xref target="log-ids"/>.</t>
        <t>The TBSCertificate's <tt>serialNumber</tt> MUST contain the zero-based index of the TBSCertificateLogEntry in the log. <xref section="4.1.2.2" sectionFormat="of" target="RFC5280"/> forbids zero as a serial number, but <xref target="log-entries"/> defines a <tt>null_entry</tt> type for use in entry zero, so the index will be positive. This encoding is intended to avoid implementation errors by having the serial numbers and indices off by one.</t>
        <t>The TBSCertificate's <tt>subjectPublicKeyInfo</tt> contains the specified public key. Its hash MUST match the TBSCertificateLogEntry's <tt>subjectPublicKeyInfoHash</tt>.</t>
        <t>The TBSCertificate's <tt>signature</tt> and the Certificate's <tt>signatureAlgorithm</tt> MUST contain an AlgorithmIdentifier whose <tt>algorithm</tt> is id-alg-mtcProof, defined below, and whose <tt>parameters</tt> is omitted.</t>
        <artwork><![CDATA[
id-alg-mtcProof OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) algorithms(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 subtrees will span around 4,400,000 certificates, leading to 23 hashes in the inclusion proof, giving an inclusion proof size of 736 bytes, with no signatures. This is significantly smaller than a single ML-DSA-44 signature, 2,420 bytes, and almost ten times smaller than the three ML-DSA-44 signatures necessary to include post-quantum SCTs.</t>
        <t>The proof sizes grow logarithmically, so 32 hashes, or 1024 bytes, is sufficient for subtrees of up to 2^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>Check that the TBSCertificate's <tt>signature</tt> field is <tt>id-mtc-proof</tt> with omitted parameters. If either check fails, abort this process and fail verification.</t>
          </li>
          <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>This section describes how to issue Merkle Tree certificates using ACME <xref target="RFC8555"/>.</t>
      <t>When downloading the certificate (<xref section="7.4.2" sectionFormat="of" target="RFC8555"/>), ACME clients supporting Merkle Tree certificates SHOULD send "application/pem-certificate-chain-with-properties" in their Accept header (<xref section="12.5.1" sectionFormat="of" target="RFC9110"/>). ACME servers issuing Merkle Tree certificates SHOULD then respond with that content type and include trust anchor ID information as described in <xref section="6" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>. <xref target="use-in-tls"/> decribes the trust anchor ID assignments for full and signatureless certificates.</t>
      <t>When processing an order for a Merkle Tree certificate, the ACME server moves the order to the "valid" state once the corresponding entry is sequenced in the issuance log. The order's certificate URL then serves the full certificate, constructed as described in <xref target="full-certificates"/>.</t>
      <t>The full certificate response SHOULD additionally carry a alternate URL for the signatureless certificate, as described <xref section="7.4.2" sectionFormat="of" target="RFC8555"/>. Before the signatureless certificate is available, the alternate URL SHOULD return a HTTP 503 (Service Unavailable) response, with a Retry-After header (<xref section="10.2.3" sectionFormat="of" target="RFC9110"/>) estimating when the certificate will become available. Once the next landmark checkpoint is allocated, the ACME server constructs a signatureless certificate, as described in <xref target="signatureless-certificates"/> and serves it from the alternate URL.</t>
      <t>ACME clients supporting Merkle Tree certificates SHOULD support fetching alternate chains. If an alternate chain returns an HTTP 503 with a Retry-After header, as described above, the client SHOULD retry the request at the specified time.</t>
    </section>
    <section anchor="deployment-considerations">
      <name>Deployment Considerations</name>
      <section anchor="operational-costs">
        <name>Operational Costs</name>
        <section anchor="certification-authority-costs">
          <name>Certification Authority Costs</name>
          <t>While Merkle Tree certificates expects CAs to operate logs, the costs of these logs are expected to be much lower than a CT log from <xref target="RFC6962"/> or <xref target="RFC9162"/>:</t>
          <t><xref target="publishing-logs"/> does not constrain the API to the one defined in <xref target="RFC6962"/> or <xref target="RFC9162"/>. If the PKI uses a tile-based protocol, such as <xref target="TLOG-TILES"/>, the issuance log benefits from the improved caching properties of such designs.</t>
          <t>Unlike a CT log, an issuance log does not have public submission APIs. Log entries are only added by the CA directly. The costs are thus expected to scale with the CA's own operations.</t>
          <t>A CA only needs to produce a digital signature for every checkpoint, rather than for every certificate. The lower signature rate requirements could allow more secure and/or economical key storage choices.</t>
          <t>Individual entries are kept small and do not scale with public key or signature sizes. This mitigates growth from post-quantum algorithms. Public keys in entries are replaced with fixed-sized hashes. There are no signatures in entries themselves, and only signatures on the very latest checkpoint are retained. Every new checkpoint completely subsumes the old checkpoint, so there is no need to retain older signatures. Likewise, a subtree is only signed if contained in another signed checkpoint.</t>
          <t>Log pruning (<xref target="log-pruning"/>) allows a long-lived log to serve only the more recent entries, scaling with the size of the retention window, rather than the log's total lifetime.</t>
          <t>Mirrors of the log can also reduce CA bandwidth costs, because monitors can fetch data from mirrors instead of CAs directly. In PKIs that deploy mirrors as part of cosigner policies, relying parties could set few availability requirements on CAs, as described in <xref target="log-availability"/>.</t>
        </section>
        <section anchor="cosigner-costs">
          <name>Cosigner Costs</name>
          <t>The costs of cosigners vary by cosigner role. A consistency-checking cosigner, such as <xref target="TLOG-WITNESS"/>, requires very little state and can be run with low cost.</t>
          <t>A mirroring cosigner, such as <xref target="TLOG-MIRROR"/>, performs comparable roles as CT logs, but several of the cost-saving properties in <xref target="certification-authority-costs"/> also apply: improved protocols, smaller entries, less frequent signatures, and log pruning. While a mirror does need to accommodate another party's (the CA's) growth rate, it grows only from new issuances from that one CA. If one CA's issuance rate exceeds the mirror's capacity, that does not impact the mirror's copies of other CAs. Mirrors also do not need to defend against a client uploading a large number of existing certificates all at once. Submissions are also naturally batched and serialized.</t>
        </section>
        <section anchor="monitor-costs">
          <name>Monitor Costs</name>
          <t>In a CT-based PKI, every log carries a potentially distinct subset of active certificates, so monitors must check the contents of every CT log. At the same time, certificates are commonly synchronized between CT logs. As a result, a monitor will typically download each certificate multiple times, once for every log. In Merkle Tree Certificates, each entry appears in exactly one log. A relying party might require a log to be covered by a quorum of mirrors, but each mirror is cryptographically verified to serve the same contents. Once a monitor has obtained some entry from one mirror, it does not need to download it from the others.</t>
          <t>In addition to downloading each entry only once, the entries themselves are smaller, as discussed in <xref target="certification-authority-costs"/>.</t>
        </section>
      </section>
      <section anchor="choosing-cosigners">
        <name>Choosing Cosigners</name>
        <t>In selecting trusted cosigners and cosigner requirements (<xref target="trusted-cosigners"/>), relying parties navigate a number of trade-offs:</t>
        <t>A consistency-checking cosigner, such as <xref target="TLOG-WITNESS"/>, is very cheap to run, but does not guarantee durable logging, while a mirroring cosigner is more expensive and may take longer to cosign structures. Requiring a mirror signature provides stronger guarantees to the relying party, which in turn can reduce the requirements on CAs (see <xref target="log-availability"/>), however it may cause certificate issuance to take longer. That said, mirrors are comparable to CT logs, if not cheaper (see <xref target="operational-costs"/>), so they may be appropriate in PKIs where running CT logs is already viable.</t>
        <t>Relying parties that require larger quorums of trusted cosigners can reduce the trust placed in any individual cosigner. However, these larger quorums result in larger, more expensive full certificates. The cost of this will depend on how frequently the signatureless optimization occurs in a given PKI. Conversely, relying parties that require smaller quorums have smaller full certificates, but place more trust in their cosigners.</t>
        <t>Relying party policies also impact monitor operation. If a relying party accepts any one of three cosigners, monitors SHOULD check the checkpoints of all three. Otherwise, a malicious CA may send different split views to different cosigners. More generally, monitors SHOULD check the checkpoints in the union of all cosigners trusted by all supported relying parties. This is an efficient check because, if the CA is operating correctly, all cosigners will observe the same tree. Thus the monitor only needs to check consistency proofs between the checkpoints, and check the log contents themselves once. Monitors MAY also rely on other parties in the transparency ecosystem to perform this check.</t>
      </section>
      <section anchor="log-availability">
        <name>Log Availability</name>
        <t>CAs and mirrors are expected to serve their log contents over HTTP. It is possible for the contents to be unavailable, either due to temporary service outage or because the log has been pruned (<xref target="log-pruning"/>). If some resources are unavailable, they may not be visible to monitors.</t>
        <t>As in CT, PKIs which deploy Merkle Tree certificates SHOULD establish availability policies, adhered to by trusted CAs and mirrors, and enforced by relying party vendors as a condition of trust. Exact availability policies for these services are out of scope for this document, but this section provides some general guidance.</t>
        <t>Availability policies SHOULD specify how long an entry must be made available, before a CA or mirror is permitted to prune the entry. It is RECOMMENDED to define this using a <em>retention period</em>, which is some time after the entry has expired. In such a policy, an entry could only be pruned if it, and all preceding entries, have already expired for the retention period. Policies MAY opt to set different retention periods between CAs and mirrors. Permitting limited log retention is analogous to the CT practice of temporal sharding <xref target="CHROME-CT"/>, except that a pruned issuance log remains compatible with older, unupdated relying parties.</t>
        <t>Such policies impact monitors. If the retention period is, e.g. 6 months, this means that monitors are expected to check entries of interest within 6 months. It also means that a new monitor may only be aware of a 6 month history of entries issued for a particular domain.</t>
        <t>If historical data is not available to verify the retention period, such as information in another mirror or a trusted summary of expiration dates of entries, it may not be possible to confirm correct behavior. This is mitigated by the revocation process described in <xref target="revocation-by-index"/>: if a CA were to prune a forward-dated entry and, in the 6 months when the entry was available, no monitor noticed the unusual expiry, an updated relying party would not accept it anyway.</t>
        <t>The log pruning process simply makes some resources unavailable, so availability policies SHOULD constrain log pruning in the same way as general resource availability. That is, if it would be a policy violation for the log to fail to serve a resource, it should also be a policy violation for the log to prune such that the resource is removed, and vice versa.</t>
        <t>PKIs that require mirror cosignatures (<xref target="trusted-cosigners"/>) can impose minimal to no availability requirements on CAs, all without compromising transparency goals. If a CA never makes some entry available, mirrors will be unable to update. This will prevent relying parties from accepting the undisclosed entries. However, a CA which is persistently unavailable may not offer sufficient benefit to be used by authenticating parties or trusted by relying parties.</t>
        <t>However, if a mirror's interface becomes unavailable, monitors may be unable to check for unauthorized issuance, if the entries are not available in another mirror. This does compromise transparency goals. As such, availability policies SHOULD set availability expectations on mirrors. This can also be mitigated by using multiple mirrors, either directly enforced in cosigner requirements, or by keeping mirrors up-to-date with each other.</t>
        <t>In PKIs that do not require mirroring cosigners, the CA's serving endpoint is more crucial for monitors. Such PKIs thus SHOULD set availability requirements on CAs.</t>
        <t>In each of these cases, availability failures can be mitigated by revoking the unavailable entries by index, as described in <xref target="revocation-by-index"/>, likely as a first step in a broader distrust.</t>
      </section>
      <section anchor="certificate-renewal">
        <name>Certificate Renewal</name>
        <t>When an authenticating party requests a certificate, the signatureless certificate will not be available until the next landmark 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 anchor="certificate-malleability">
        <name>Certificate Malleability</name>
        <t>An ASN.1 structure like X.509’s Certificate is an abstract data type that is independent of its serialization. There are multiple encoding rules for ASN.1. Commonly, protocols use DER <xref target="X.690"/>, such as <xref section="4.4.2" sectionFormat="of" target="RFC8446"/>. This aligns with <xref section="4.1.1.3" sectionFormat="of" target="RFC5280"/>, which says X.509 signatures are computed over the DER-encoded TBSCertificate. After signature verification, applications can assume the DER-encoded TBSCertificate is not malleable.</t>
        <t>While the signature verification process in <xref target="verifying-certificate-signatures"/> first transforms the TBSCertificate into a TBSCertificateLogEntry, it preserves this non-malleability. There is a unique valid DER encoding for every abstract TBSCertificate structure, so malleability of the DER-encoded TBSCertificate reduces to malleability of the TBSCertificate value:</t>
        <ul spacing="normal">
          <li>
            <t>The <tt>version</tt>, <tt>issuer</tt>, <tt>validity</tt>, <tt>subject</tt>, <tt>issuerUniqueID</tt>, <tt>subjectUniqueID</tt>, and <tt>extensions</tt> fields are copied from the TBSCertificate to the TBSCertificateLogEntry unmodified, so they are directly authenticated by the inclusion proof.</t>
          </li>
          <li>
            <t><tt>serialNumber</tt> is omitted from TBSCertificateLogEntry, but its value determines the inclusion proof index, which authenticates it.</t>
          </li>
          <li>
            <t>The redundant <tt>signature</tt> field in TBSCertificate is omitted from TBSCertificateLogEntry, but <xref target="verifying-certificate-signatures"/> checks for an exact value, so no other values are possible.</t>
          </li>
          <li>
            <t><tt>subjectPublicKeyInfo</tt> is hashed as <tt>subjectPublicKeyInfoHash</tt> in TBSCertificateLogEntry. Provided the underlying hash function is collision-resistant, no other values are possible for a given log entry.</t>
          </li>
        </ul>
        <t>Some non-conforming X.509 implementations use a BER <xref target="X.690"/> parser instead of DER and then, instead of computing the canonical DER encoding per <xref section="4.1.1.3" sectionFormat="of" target="RFC5280"/>, verify the signature over the particular BER encoding received. Those implementations may still assume the received BER-encoded TBSCertificate is not malleable. However, as BER encoding is not unique, this breaks the above assumptions in Merkle Tree Certificates. To preserve non-malleability, these non-conforming implementations MUST do the following when verifying a Merkle Tree Certificate:</t>
        <ul spacing="normal">
          <li>
            <t>When parsing the outermost TBSCertificate SEQUENCE tag and length, reparse with a conforming DER parser.</t>
          </li>
          <li>
            <t>When copying the <tt>version</tt>, <tt>issuer</tt>, <tt>validity</tt>, <tt>subject</tt>, <tt>issuerUniqueID</tt>, <tt>subjectUniqueID</tt>, and <tt>extensions</tt> fields, either reparse with a conforming DER parser, or copy over the observed BER encodings.</t>
          </li>
          <li>
            <t>Reparse the <tt>serialNumber</tt> field with a conforming DER parser.</t>
          </li>
          <li>
            <t>Reparse the <tt>signature</tt> field with a conforming DER parser. Equivalently, check for an exact match for the expected, DER-encoded value.</t>
          </li>
          <li>
            <t>When hashing <tt>subjectPublicKeyInfo</tt>, either reparse with a conforming DER parser, or hash the observed BER encoding.</t>
          </li>
        </ul>
        <t><xref target="log-entries"/> requires that the TBSCertificateLogEntry in a MerkleTreeCertEntry be DER-encoded, so applying a stricter parser will be compatible with conforming CAs. While these existing non-conforming implementations may be unable to switch to a DER parser due to compatibility concerns, Merkle Tree Certificates is new, so there is no existing deployment of malformed BER-encoded TBSCertificateLogEntry structures.</t>
        <t>The above only ensures the TBSCertificate portion is non-malleable. In Merkle Tree Certificates, similar to ECDSA X.509 signature, the signature value is malleable. Multiple MTCProof structures may prove a single TBSCertificate structure. Additionally, in all X.509-based protocols, a BER-based parser for the outer, unsigned Certificate structure will admit malleability in those portions of the encoding. Applications that derive a unique identifier from the Certificate MUST instead use the TBSCertificate, or some portion of it, for Merkle Tree Certificates.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <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="B." 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="7" month="July" 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-08"/>
        </reference>
        <reference anchor="FIPS186-5">
          <front>
            <title>Digital Signature Standard (DSS)</title>
            <author>
              <organization/>
            </author>
            <date month="February" year="2023"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.186-5"/>
          <refcontent>National Institute of Standards and Technology (U.S.)</refcontent>
        </reference>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="CHROME-CT" target="https://googlechrome.github.io/CertificateTransparency/ct_policy.html">
          <front>
            <title>Chrome Certificate Transparency Policy</title>
            <author>
              <organization>Google Chrome</organization>
            </author>
            <date year="2022" month="March" day="17"/>
          </front>
        </reference>
        <reference anchor="APPLE-CT" target="https://support.apple.com/en-us/HT205280">
          <front>
            <title>Apple's Certificate Transparency policy</title>
            <author>
              <organization>Apple</organization>
            </author>
            <date year="2021" month="March" day="05"/>
          </front>
        </reference>
        <reference anchor="CHROMIUM" target="https://chromium.googlesource.com/chromium/src/+/main/components/component_updater/README.md">
          <front>
            <title>Component Updater</title>
            <author>
              <organization>Chromium</organization>
            </author>
            <date year="2022" month="March" day="03"/>
          </front>
        </reference>
        <reference anchor="FIREFOX" target="https://wiki.mozilla.org/Firefox/RemoteSettings">
          <front>
            <title>Firefox Remote Settings</title>
            <author>
              <organization>Mozilla</organization>
            </author>
            <date year="2022" month="August" day="20"/>
          </front>
        </reference>
        <reference anchor="LetsEncrypt" target="https://letsencrypt.org/stats/">
          <front>
            <title>Let's Encrypt Stats</title>
            <author>
              <organization>Let's Encrypt</organization>
            </author>
            <date year="2023" month="March" day="07"/>
          </front>
        </reference>
        <reference anchor="MerkleTown" target="https://ct.cloudflare.com/">
          <front>
            <title>Merkle Town</title>
            <author>
              <organization>Cloudflare, Inc.</organization>
            </author>
            <date year="2023" month="March" day="07"/>
          </front>
        </reference>
        <reference anchor="SharedFactors" target="https://bora.uib.no/bora-xmlui/bitstream/handle/11250/3001128/Masters_thesis__for_University_of_Bergen.pdf">
          <front>
            <title>Finding shared RSA factors in the Certificate Transparency logs</title>
            <author initials="H. F." surname="Våge" fullname="Henry Faltin Våge">
              <organization/>
            </author>
            <author>
              <organization>University of Bergen</organization>
            </author>
            <date year="2022" month="May" day="13"/>
          </front>
        </reference>
        <reference anchor="STH-Discipline" target="https://mailarchive.ietf.org/arch/msg/trans/Zm4NqyRc7LDsOtV56EchBIT9r4c/">
          <front>
            <title>STH Discipline &amp; Security Considerations</title>
            <author initials="R." surname="Barnes" fullname="Richard Barnes">
              <organization/>
            </author>
            <date year="2017" month="March" day="03"/>
          </front>
        </reference>
        <reference anchor="CABF-153" target="https://cabforum.org/2015/11/11/ballot-153-short-lived-certificates/">
          <front>
            <title>Ballot 153 – Short-Lived Certificates</title>
            <author>
              <organization>CA/Browser Forum</organization>
            </author>
            <date year="2015" month="November" day="11"/>
          </front>
        </reference>
        <reference anchor="CABF-SC081" target="https://cabforum.org/2025/04/11/ballot-sc081v3-introduce-schedule-of-reducing-validity-and-data-reuse-periods/">
          <front>
            <title>Ballot SC081v3: Introduce Schedule of Reducing Validity and Data Reuse Periods</title>
            <author>
              <organization>CA/Browser Forum</organization>
            </author>
            <date year="2025" month="April" day="11"/>
          </front>
        </reference>
        <reference anchor="SCTNotAfter" target="https://dadrian.io/blog/posts/sct-not-after/">
          <front>
            <title>How to distrust a CA without any certificate errors</title>
            <author initials="D." surname="Adrian" fullname="David Adrian">
              <organization/>
            </author>
            <date year="2025" month="March"/>
          </front>
        </reference>
        <reference anchor="AuditingRevisited" target="https://eprint.iacr.org/2025/556.pdf">
          <front>
            <title>Private SCT Auditing, Revisited</title>
            <author initials="L." surname="Heimberger" fullname="Lena Heimberger">
              <organization/>
            </author>
            <author initials="C." surname="Patton" fullname="Christopher Patton">
              <organization/>
            </author>
            <author initials="B." surname="Westerbaan" fullname="Bas Westerbaan">
              <organization/>
            </author>
            <date year="2025" month="April" day="25"/>
          </front>
        </reference>
        <reference anchor="TLOG-TILES" target="https://c2sp.org/tlog-tiles">
          <front>
            <title>Tiled Transparency Logs</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2025" month="June"/>
          </front>
        </reference>
        <reference anchor="TLOG-WITNESS" target="https://c2sp.org/tlog-witness">
          <front>
            <title>Transparency Log Witness Protocol</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2025" month="June"/>
          </front>
        </reference>
        <reference anchor="TLOG-MIRROR" target="https://c2sp.org/tlog-mirror">
          <front>
            <title>Transparency Log Mirrors</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2025" month="July"/>
          </front>
        </reference>
        <reference anchor="TLOG-CHECKPOINT" target="https://c2sp.org/tlog-checkpoint">
          <front>
            <title>Transparency Log Checkpoints</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2024" month="March"/>
          </front>
        </reference>
        <reference anchor="SIGNED-NOTE" target="https://c2sp.org/signed-note">
          <front>
            <title>Note</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2025" month="April"/>
          </front>
        </reference>
        <reference anchor="RFC6962">
          <front>
            <title>Certificate Transparency</title>
            <author fullname="B. Laurie" initials="B." surname="Laurie"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="E. Kasper" initials="E." surname="Kasper"/>
            <date month="June" year="2013"/>
            <abstract>
              <t>This document describes an experimental protocol for publicly logging the existence of Transport Layer Security (TLS) certificates as they are issued or observed, in a manner that allows anyone to audit certificate authority (CA) activity and notice the issuance of suspect certificates as well as to audit the certificate logs themselves. The intent is that eventually clients would refuse to honor certificates that do not appear in a log, effectively forcing CAs to add all issued certificates to the logs.</t>
              <t>Logs are network services that implement the protocol operations for submissions and queries that are defined in this document.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6962"/>
          <seriesInfo name="DOI" value="10.17487/RFC6962"/>
        </reference>
        <reference anchor="RFC4514">
          <front>
            <title>Lightweight Directory Access Protocol (LDAP): String Representation of Distinguished Names</title>
            <author fullname="K. Zeilenga" initials="K." role="editor" surname="Zeilenga"/>
            <date month="June" year="2006"/>
            <abstract>
              <t>The X.500 Directory uses distinguished names (DNs) as primary keys to entries in the directory. This document defines the string representation used in the Lightweight Directory Access Protocol (LDAP) to transfer distinguished names. The string representation is designed to give a clean representation of commonly used distinguished names, while being able to represent any distinguished name. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4514"/>
          <seriesInfo name="DOI" value="10.17487/RFC4514"/>
        </reference>
        <reference anchor="RFC6973">
          <front>
            <title>Privacy Considerations for Internet Protocols</title>
            <author fullname="A. Cooper" initials="A." surname="Cooper"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="J. Peterson" initials="J." surname="Peterson"/>
            <author fullname="J. Morris" initials="J." surname="Morris"/>
            <author fullname="M. Hansen" initials="M." surname="Hansen"/>
            <author fullname="R. Smith" initials="R." surname="Smith"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document offers guidance for developing privacy considerations for inclusion in protocol specifications. It aims to make designers, implementers, and users of Internet protocols aware of privacy-related design choices. It suggests that whether any individual RFC warrants a specific privacy considerations section will depend on the document's content.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6973"/>
          <seriesInfo name="DOI" value="10.17487/RFC6973"/>
        </reference>
      </references>
    </references>
    <?line 1196?>

<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, Aaron Gable, 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 numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-05">
        <name>Since draft-davidben-tls-merkle-tree-certs-05</name>
        <ul spacing="normal">
          <li>
            <t>Add some discussion on malleability</t>
          </li>
          <li>
            <t>Discuss the monitoring impacts of the responsibility shift from CA with log quorum to CA+log with mirror quorum</t>
          </li>
          <li>
            <t>Sketch out a more concrete initial ACME extension</t>
          </li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+y923rc1pUues+nQMvfbot0VfEgUgfGdpqiqIgdnVqk4qxW
u0WwCkUiqgIqAIoUIzvful63+2q/036K9SR7HOcccwIo0k7S62K3E0lkFTDP
c5zHP4bD4VqTN7NsP3mVVZ9mWXJaZVlymFVNPs3HaZPVa5NyXKRzeGJSpdNm
OEmv8sl5VgybWT2c00vDBl4ajuGlerj1cK1ens/zus7LorlZwHvHR6fP17Ct
i7K62U+yz4u1Yjk/z6r9tQl8ur82Los6K+plvZ801TJbu9pPHqylVZbuJ/dO
svGyypube2tXWbGEh5PkIm8ul+fwnQ5lszWMe/DYDEffwGOXTbOo9zc39fER
NzDKy/aLm3eZ5Oiymc/ura2ly+ayhFkkQ+guSfICJnDv2Sh5mhV/Sud5cY8+
5sW79wybjL4qq4u0yP+SNrBW8MjvyvICtuDly0P+Opun+QzWXQbzLxf0/Whc
ztdafb75+mmVZ1GX2VVZhN/crce0vpnPs6bKx/19Ph0djZIfYIWz6jxNw46f
pnXrq6jnw1m5nExnsMtBz+dp/S9j91VHty9HyR/SWVY0adDjy+WnLPzibv3N
rvid1Z0+p07rspqEvT7PZ/liUUZfxmuclfObOug1z5rpv0z5ZTiGa2tFWc3h
+Ss6338cPXyytU/Py928d1xM+QnYzyYbXxblrLy4SYbJwcnr0XaSFeNykhcX
ybvlLIMBnyyyMd9ffKGcJrAh+Tg5Ch5L7j89erc+SA7Toizg2Vnr+0P4PkmL
SfIsrxv4fJnXl9mk9dgzeIynR9c5eZ6dV8u0ukl2tna26XN3URJZHyAKp++H
p/RBncHxrHOYoT5wfPJm8/joMHn8eGd3uL1PzazlugS8SIcv3r15dTQ8PA0W
6vCyKucB/QKClhb1Ava1GN8kb8tZPr7hN9LqIgPyoNSBD/qYGjAUwjRlW9oc
Nx8X1BgRAzN7GO3OcOvBcPtRa+pDnrpcOh4rnLTk4O3bl62pHCwWs+zrun8u
i/651Es4WFUzSrENPM+bQMqW9eaL052tvZ3HW+Fwt3G4W3t9w6WBrOmSH79/
Fa54OV+UBVyh5P0CW6w6B0TLmi/nI17lulxWYx6YfrNZV+PNbzbhfhSbY22z
9j9+XHLzm++ODp69OhrNJx1rvvWgbxKH0g3O4/nxu6Pnb/4YTON5XmXT8nPy
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
iAU4xXnGJf4kG55enIcctp2/AS52V9NipAEA

-->

</rfc>
