<?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.35 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-mcmillion-server-monitoring-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title>Server Monitoring of Merkle Tree Certificates</title>
    <seriesInfo name="Internet-Draft" value="draft-mcmillion-server-monitoring-00"/>
    <author fullname="Brendan McMillion">
      <organization/>
      <address>
        <email>brendanmcmillion@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="April" day="24"/>
    <abstract>
      <?line 23?>

<t>This document describes a system for site operators to monitor for mis-issued
Merkle Tree Certificates affecting their websites. This monitoring is highly
efficient, requiring site operators to do an amount of work that is only
logarithmic proportional to the total number of certificates issued. It does
this while preserving the security and transparency guarantees of Merkle Tree
Certificates.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/Bren2010/draft-server-monitoring"/>.</t>
    </note>
  </front>
  <middle>
    <?line 32?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>In the original Certificate Transparency <xref target="RFC6962"/> ecosystem, it was
originally intended that site operators would monitor for mis-issued
certificates by downloading the entire contents of all trusted transparency logs
and filtering out certificates that were irrelevant to them. However, as
transparency logs grew dramatically in size, that quickly became prohibitively
expensive for both site operators and for the transparency logs themselves.</t>
      <t>In place of this, a small number of trusted third-party auditors gained
popularity. These auditors would download the entire contents of all trusted
transparency logs once, index this data, and allow site operators to query this
index at their leisure. This made monitoring more efficient, but introduced a
security gap in CT: it made it possible for these third-party auditors, which
were not considered a part of the formal WebPKI and were not audited for correct
behavior, to misbehave in a way that could prevent site operators from reliably
learning about mis-issued certificates.</t>
      <t>This document describes a method of monitoring for mis-issued Merkle Tree
Certificates that only requires site operators to do an amount of work that
scales logarithmically relative to the total number of certificates issued. This
ensures that monitoring remains efficient regardless of future growth in the
number of CAs and in the number of issued certificates. Importantly, it does
this in a way that doesn't introduce new trusted parties, doesn't require
excessive coordination between site operators and browsers, and overall
maintains the originally intended security model of Merkle Tree Certificates.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="overview">
      <name>Overview</name>
      <t>In Merkle Tree Certificates, each Certificate Authority (CA) operates a
transparency log that contains all certificates issued by that CA. This
transparency log is cosigned by any of a number of trusted cosigners, who are
chosen and vetted by the root programs that the CA participates in.</t>
      <t>For a site operator that only cares about one (or a small number of) websites,
transparency logs are typically considered too expensive to monitor directly.
This is because, for a site operator to know that they haven't missed any
certificates they might care about, they would need to download every single
certificate from every trusted transparency log, which is typically multiple
terabytes of data.</t>
      <t>A verifiable index is a cryptographic data structure designed to allow
verifiable searches, resulting in a "proof of inclusion" or "proof of
non-inclusion" for stored data. These proofs allow users to verify that the
search results provided by a server are both complete and authentic. This means
that a verifiable index operator can download the contents of a transparency log
once and integrate all of the certificates that it contains into their index.
This index can then be efficiently queried by a large number of site operators,
without the verifiable index operator needing to be trusted by the site
operators to provide correct results.</t>
      <t>Assuming that the index was constructed correctly, site operators that search
for their domain in the verifiable index and successfully validate a proof of
inclusion are guaranteed to have received all of the certificates that exist for
their domain, even if they only downloaded a small amount of data. Verifying
that an index was constructed correctly can be done by any third-party auditor
by downloading the same contents of the CA transparency log, recomputing what
the root hash of the verifiable index should be, and checking that this matches
what the verifiable index operator has published.</t>
      <section anchor="trusting-a-verifiable-index">
        <name>Trusting a Verifiable Index</name>
        <t>To be able to query a verifiable index and trust the results, site operators
need some reliable way to learn the “correct” root hash of the verifiable index.
To avoid the security risk and operational overhead of introducing a distinct
set of cosigners specifically for verifiable indexes, this document bootstraps
trust from the existing cosigners that the CA already uses.</t>
        <t>The way this works is that, at the CA's discretion, they add an <tt>accumulated</tt>
log entry to their transparency log. This log entry contains the root hashes and
contact information of several verifiable indexes, as submitted to the CA by the
operator of each verifiable index. Since these root hashes are stored in log
entries in the CA's transparency log, they end up cosigned by the same cosigners
that browsers rely on to authenticate certificate issuance.</t>
        <t><strong>Finding accumulated log entries.</strong> For site operators to be able to rely on
the root hashes stored in these accumulated log entries, they need to be able to
find them efficiently without relying on a trusted party. To solve this, all log
entries in a CA's transparency log contain a counter. This counter stores the
number of <tt>accumulated</tt> log entries that have been sequenced in the log so far,
meaning that it increases by one each time a new <tt>accumulated</tt> log entry is
added, and all subsequent log entries have that same counter until the next
<tt>accumulated</tt> log entry is added.</t>
        <t>This allows a site operator, knowing only the root hash of a CA's transparency
log, to do a binary search for the most recent <tt>accumulated</tt> log entry that's
been added to the log. Doing a binary search through all log entries is highly
efficient and ensures, since binary search is deterministic, that all users see
the same most recent <tt>accumulated</tt> log entry. This prevents a CA from giving
different results to different users, such as showing one user incorrect or
outdated verifiable index root hashes. It also prevents a CA from claiming that
no such log entries exist, to try to trick a user into falling back to a less
secure system.</t>
        <t><strong>Authenticating transparency log root hashes.</strong> As mentioned above, finding the
correct <tt>accumulated</tt> log entry is possible assuming that site operators have an
authentic root hash for a transparency log. Ideally, site operators would be
able to receive and verify cosignatures on a root hash in the same way (meaning,
with the same cosigner public keys and with the same policy for what constitutes
an acceptable set of cosigners) as a browser. However, it's usually
prohibitively difficult for a site operator to use a browser's code directly, or
to follow a browser's development closely enough to reliably duplicate their
certificate verification logic. Instead, this document relies on the fact that
when a site operator serves a Merkle Tree Certificate, if browsers successfully
connect and accept that certificate, then it must be the case that the root hash
in that certificate is cosigned correctly according to the browser's policy.
This is an indirect, but very simple and low maintenance way for the site
operator to know that a root hash is trustworthy.</t>
      </section>
    </section>
    <section anchor="protocol">
      <name>Protocol</name>
      <section anchor="accumulated-log-entry">
        <name>Accumulated Log Entry</name>
        <t>This section defines the format of the <tt>accumulated</tt> log entries.</t>
        <t>Define a codepoint for the accumulated log entry type.</t>
        <t>Describe a log entry format that contains a list of the following, for each
verifiable index:</t>
        <ul spacing="normal">
          <li>
            <t>URL</t>
          </li>
          <li>
            <t>Root hash</t>
          </li>
          <li>
            <t>A list of the following, for each CA monitored by the index:
            </t>
            <ul spacing="normal">
              <li>
                <t>CA trust anchor id</t>
              </li>
              <li>
                <t>The range of indexes in the CA's transparency log that have been indexed.
(This is used by auditors when verifying the verifiable index root hash.)</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="certificate-authority-interaction">
        <name>Certificate Authority Interaction</name>
        <t>This section defines the request-response protocol where a site operator
requests the most recent <tt>accumulated</tt> log entry from a CA or a mirror.</t>
        <t>Request parameters:</t>
        <ol spacing="normal" type="1"><li>
            <t>The greatest tree size that the requester has previously received from this
endpoint, if any.</t>
          </li>
          <li>
            <t>Optional: an additional tree size to prove consistency with. This is used to
request an additional consistency proof with the tree head in a site
operator's certificate.</t>
          </li>
        </ol>
        <t>Response parameters:</t>
        <ol spacing="normal" type="1"><li>
            <t>The most recent tree head, signed by the CA.</t>
          </li>
          <li>
            <t>A consistency proof between request parameter 1 and the most recent tree
head.</t>
          </li>
          <li>
            <t>If request parameter 2 was provided: a consistency proof between request
parameter 2 and the most recent tree head.</t>
          </li>
          <li>
            <t>The log entries corresponding to the algorithm in <xref section="4" sectionFormat="of" target="KEYTRANS"/>.</t>
          </li>
          <li>
            <t>The log entries, other than those already provided in response parameter 4,
corresponding to a binary search for the first log entry whose counter equals
the greatest value observed in response parameter 4.</t>
          </li>
          <li>
            <t>An inclusion proof for all log entries provided in response parameters 4 and
5.</t>
          </li>
        </ol>
        <t>Requester verifies that:</t>
        <ol spacing="normal" type="1"><li>
            <t>The expected number of log entries was provided and all have monotonic
counters.</t>
          </li>
          <li>
            <t>The terminal log entry of the binary search in response parameter 5 has
<tt>accumulated</tt> type.</t>
          </li>
          <li>
            <t>The consistency and inclusion proofs in response parameters 2, 3, and 6
evaluate as expected.</t>
          </li>
        </ol>
        <t>Requester retains the presented tree head and the greatest log entry counter
observed.</t>
      </section>
      <section anchor="verifiable-index-interaction">
        <name>Verifiable Index Interaction</name>
        <t>This section defines the request-response protocol where a site operator
searches for certificates related to its domain in a verifiable index.</t>
        <t>Request parameters:</t>
        <ol spacing="normal" type="1"><li>
            <t>Domain to search for.</t>
          </li>
        </ol>
        <t>Response parameters:</t>
        <ol spacing="normal" type="1"><li>
            <t>List of certificates</t>
          </li>
          <li>
            <t>Inclusion proof</t>
          </li>
        </ol>
        <t>Requester verifies that:</t>
        <ol spacing="normal" type="1"><li>
            <t>Evaluating the inclusion proof produces the expected root hash.</t>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>At a high level, each step of the monitoring process is secured as follows: Site
operators know that a CA transparency log root hash is authentic because they
can observe it being accepted by browsers. With an authentic transparency log
root hash, site operators are able to deterministically (through binary search)
find the most recent <tt>accumulated</tt> log entry. In the most recent <tt>accumulated</tt>
log entry, site operators are able to learn the root hashes and contact
information for various verifiable indexes. With the root hash of a verifiable
index, site operators are able to query the verifiable index and verify that the
result they get back is a complete and authentic list of all certificates for
their domain.</t>
      <t>Any third-party auditor is able to crawl a transparency log and confirm that
each verifiable index is constructed correctly, that the <tt>accumulated</tt> log
entries contain the expected root hash for each verifiable index, and that the
counter in each log entry containing the number of sequenced <tt>accumulated</tt> log
entries is always correct.</t>
      <t>If a site operator attempts a binary search for the most recent <tt>accumulated</tt>
log entry and finds that none exist, or that no new <tt>accumulated</tt> log entry has
been created since the site operator's last query, the binary search process
authenticates that result. That is to say, it's not possible for a CA to claim
that an <tt>accumulated</tt> log entry does not exist to avoid providing it,
potentially triggering the site operator to fallback to a less secure system.</t>
    </section>
    <section anchor="comparison-to-alternatives">
      <name>Comparison to Alternatives</name>
      <t><strong>Instead of having a log entry counter, why not have site operators scan the
tail of the transparency log looking for the first <tt>accumulated</tt> log entry?</strong>
This is an amount of work that would scale linearly with the number of issued
certificates and could easily become prohibitively expensive for site operators.
Having a trusted party directly tell the site operator the index of the most
recent <tt>accumulated</tt> log entry solves the efficiency problem but reintroduces
the security gap discussed in the introduction. Specifically, this trusted party
could incorrectly claim that no <tt>accumulated</tt> log entry exists, or that no new
<tt>accumulated</tt> log entries have been created since the site operator's last
request, to interfere with a site operator's monitoring.</t>
      <t><strong>Instead of having a log entry counter, why not enforce that every X log
entries is an <tt>accumulated</tt> log entry?</strong> The primary issue with this approach is
communicating the parameter X to servers. This parameter would very likely vary
by CA. However, unlike browsers, servers don't necessarily trust the CA and
likely wouldn't have a trustworthy channel capable of pushing down such
information. In practice, the parameter X would need to be communicated to the
server through ACME and would be otherwise unauthenticated. This allows
a CA to trivially downgrade server monitoring by claiming X is unset or
unrealistically large.</t>
      <t>A second point worth mentioning is that this approach requires committing, at
the time when a CA is first created, to X. If this parameter is too small, the
CA will need to sequence an excessive number of these log entries. If the
parameter is too large, the CA would either need to accept large delays in
monitoring or frequently sequence a large number of <tt>null</tt> log entries, to get
to the next Xth log entry, such that it can sequence an <tt>accumulated</tt> log entry.</t>
      <t>Having a log entry counter prevents trivial downgrade attacks and adjusts
smoothly to changes in issuance frequency.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="KEYTRANS">
          <front>
            <title>Key Transparency Protocol</title>
            <author fullname="Brendan McMillion" initials="B." surname="McMillion">
         </author>
            <author fullname="Felix Linker" initials="F." surname="Linker">
         </author>
            <date day="16" month="April" year="2026"/>
            <abstract>
              <t>   While there are several established protocols for end-to-end
   encryption, relatively little attention has been given to securely
   distributing the end-user public keys for such encryption.  As a
   result, these protocols are often still vulnerable to eavesdropping
   by active attackers.  Key Transparency is a protocol for distributing
   sensitive cryptographic information, such as public keys, in a way
   that reliably either prevents interference or detects that it
   occurred in a timely manner.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-keytrans-protocol-04"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <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>
      </references>
    </references>
    <?line 304?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA7Vb7Y7byJX9X09R6fzwByQh9nhmk0aSWaVtYxrxx6zbs/Fg
scCUyJJUaYpUWGTLWsNAHmQX2GfZR8mT7Ln3VpFFkWrPLLBBMLYksurW/Tz3
3PJ8PleNawp7qS9ubH1na/26Kl1T1a7c6GqtX9v6trD6fW2tvrJ149YuM431
F4r+2FT18VK7cl0plVdZaXZYKK/Nupnvsp0rCleVc8/rznfduvPf/Eb5drVz
3uP35rjHS9cv3r9UZbtb2fpS5Vj6UmVV6W3pW3+pm7q16u5Sf6WUaZtthWf0
XGn8b90WhWz7p9qWuSn16+y1bMy/251xxaVeyY+dUP+8oe8XWbVTqqzqnWnc
HbZUdJT+02KxUGo+n2uz8k1tskap91vnNY7a7mzZ6Nz6rHYr67XR/ugbu9N4
X3vXWF3tbW1wYK+bSofD86849xxHb22uzmlXm/XaZg3ZoNlaV+uDXdGifqFZ
gF6XGp+2brMtjsqu8baDWDNd27+1jn8ei5JXGloyu6rFAWDhQ1XfYhfT0FJV
iYWKamNq12x3LtP7utpXEKwqTUFvQxz80eCDGItWyFLJ5WQLfQ3tVNarhuQ9
bB2Oua8t+UI4lfY2a7HNEeLksLAp/d7ATNlRb1qDj43FckMXVKmSgm12Ls8L
q9Sv9XXZ1FXeZiStUtcl7wItbRwJn7yKtZLdPn369t3Lq29+983Tz5+1zSox
5Ey7Rh+MV3GB4ghHb+BGNhd1naj2ULVFfs7QAxWtjlDNoSwqk0ddwGquthou
jx0aPjZ2JL+HLCfagXm8Ip2tXdFYCdS2GVqBBTxYLOnq2hb2DuoM5tst9HfV
wSIkZxrHGy2tN7U9UBBTGGTh3Djsf9iZLAvXym7x7cpmCDzykK1bOQoZcsKP
e8Qs/s4aWFXN9lRPLDl+Y08abU4CelvcsXlhwn1hMkvqID+aUZjtSDG983Uq
2ro6n2Mtcqg2d7zXxrgS2t9X+7Yglz5S/MAJ+yfEatEcP8MWEwqrygy6cfCM
jyymRv4yMz4oXqwOE0H4t9bWR35YyXvQq0R6YZ1vaxsD3eQ2jfZdBcmSQF/B
8C64PZRgVBdUG7Mnu129vyRH5nXw575Czl0VNloAqphS3IwiNtsq9qCyakgZ
3uX4hD00PSsm4XVgEP0Xu/r+z9d85O4dXsyKsbMKboj8ubJbc+cquB4lRef5
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

-->

</rfc>
