<?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.6.25 (Ruby 3.1.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-davidben-tls-merkle-tree-certs-00" category="exp" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.16.0 -->
  <front>
    <title>Merkle Tree Certificates for TLS</title>
    <seriesInfo name="Internet-Draft" value="draft-davidben-tls-merkle-tree-certs-00"/>
    <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." surname="Westerbaan" fullname="Bas Westerbaan">
      <organization>Cloudflare</organization>
      <address>
        <email>bas@cloudflare.com</email>
      </address>
    </author>
    <date year="2023" month="March" day="10"/>
    <area>Security</area>
    <workgroup>Transport Layer Security</workgroup>
    <abstract>
      <t>This document describes Merkle Tree certificates, a new certificate type for use with TLS. A relying party that regularly fetches information from a transparency service can use this certificate type as a size optimization over more conventional mechanisms with post-quantum signatures. Merkle Tree certificates integrate the roles of X.509 and Certificate Transparency, achieving comparable security properties with a smaller message size, at the cost of more limited applicability.</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>
        Discussion of this document takes place on the
        Transport Layer Security Working Group mailing list (<eref target="mailto:tls@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/tls/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/tls/"/>.
      </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>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Authors' Note: This is an early draft of a proposal with many parts. While we have tried to make it as concrete as possible, we anticipate that most details will change as the proposal evolves.</t>
      <t>A typical TLS <xref target="RFC8446"/> handshake uses many signatures to authenticate the server public key. In a certificate chain with an end-entity certificate, an intermediate certificate, and an implicit trust anchor, there are two X.509 signatures <xref target="RFC5280"/>. Intermediate certificates additionally send an extra public key. If the handshake uses Certificate Transparency (CT) <xref target="RFC6962"/>, each Signed Certificate Timestamp (SCT) also carries a signature. CT policies often require two or more SCTs per certificate <xref target="APPLE-CT"/> <xref target="CHROME-CT"/>. If the handshake staples an OCSP response <xref target="RFC6066"/> for revocation, that adds an additional signature.</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, Dilithium3 <xref target="Dilithium"/> uses 1,952 bytes per public key and 3,293 bytes per signature. A TLS Certificate message with, say, four Dilithum3 signatures (two X.509 signatures and two SCTs) and one intermediate CA's Dilithium3 public key would total 15,124 bytes of authentication overhead. Falcon-512 and Falcon-1024 <xref target="Falcon"/> would, respectively, total 3,561 and 6,913 bytes.</t>
      <t>This document introduces Merkle Tree Certificates, an optimization that authenticates a subscriber key using under 1,000 bytes. See <xref target="sizes"/>. To achieve this, it reduces its scope from general authentication:</t>
      <ul spacing="normal">
        <li>Certificates are short-lived. The subscriber is expected to use an automated issuance protocol, such as ACME <xref target="RFC8555"/>.</li>
        <li>Certificates are only usable with relying parties that have contacted a transparency service sufficiently recently. See <xref target="transparency-service"/>.</li>
        <li>Certificates are issued after a significant processing delay of, in the recommended parameters (<xref target="parameters"/>), about an hour. Subscribers that need a certificate issued quickly are expected to use a different mechanism.</li>
        <li>To mitigate the above, this document describes a certificate negotiation mechanism. This allows subscribers to send these more efficient certificates when available, while falling back to other mechanisms otherwise.</li>
      </ul>
      <t>Merkle Tree Certificates are not intended to replace existing Public Key Infrastructure (PKI) mechanisms but, in applications where a significant portion of authentications meet the above requirements, complement them as an optional optimization. In particular, it is expected that, even within applications that implement it, this mechanism will not be usable for all TLS connections.</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>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <section anchor="terminology-and-roles">
        <name>Terminology and Roles</name>
        <t>There are five roles involved in a Merkle Tree certificate deployment:</t>
        <dl>
          <dt>Subscriber:</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>Merkle Tree certification authority (CA):</dt>
          <dd>
            <t>The service that issues Merkle Tree certificates to the subscriber, and publishes logs of all certificates.</t>
          </dd>
          <dt>Relying party:</dt>
          <dd>
            <t>The party authenticating the subscriber. In TLS, this is the side receiving the Certificate and CertificateVerify message.</t>
          </dd>
          <dt>Transparency service:</dt>
          <dd>
            <t>The service that mirrors the issued certificates for others to monitor. It additionally summarizes the CA's activity for relying parties, in order for certificates to be accepted. This is conceptually a single service, but may be multiple services, run by multiple entities in concert. See <xref target="transparency-service"/>. For example, if the relying party is a web browser, the browser vendor might run the transparency service, or it may trust a collection of third-party mirrors.</t>
          </dd>
          <dt>Monitors:</dt>
          <dd>
            <t>Parties who monitor the list of valid certificates, published by the transparency service, for unauthorized certificates.</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>Assertion:</dt>
          <dd>
            <t>A protocol-specific statement that the CA is certifying. For example, in TLS, the assertion is that a TLS signing key can speak on behalf of some DNS name or other identity.</t>
          </dd>
          <dt>Certificate:</dt>
          <dd>
            <t>A structure, generated by the CA, that proves to the relying party that the CA has certified some assertion. A certificate consists of the assertion itself accompanied by an associated proof string.</t>
          </dd>
          <dt>Batch:</dt>
          <dd>
            <t>A collection of assertions certified at the same time. CAs in this proposal only issue certificates in batches at a fixed frequency.</t>
          </dd>
          <dt>Batch tree head:</dt>
          <dd>
            <t>A hash computed over all the assertions in a batch, by building a Merkle Tree. The Merkle Tree construction and this hash are described in more detail in <xref target="building-tree"/>.</t>
          </dd>
          <dt>Inclusion proof:</dt>
          <dd>
            <t>A structure which proves that some assertion is contained in some tree head. See <xref target="proofs"/>.</t>
          </dd>
          <dt>Window:</dt>
          <dd>
            <t>A range of consecutive batch tree heads. A relying party maintains a copy of the CA's latest window. At any time, it will accept only assertions contained in tree heads contained in the current window.</t>
          </dd>
        </dl>
      </section>
      <section anchor="certificate-lifecycle">
        <name>Certificate Lifecycle</name>
        <t>The process of issuing and using a certificate is as follows:</t>
        <ol spacing="normal" type="1"><li>The subscriber requests a certificate from the CA. <xref target="acme-extensions"/> describes ACME <xref target="RFC8555"/> extensions for this.</li>
          <li>The CA collects certificate requests into a batch (see <xref target="parameters"/>) and builds the Merkle Tree and computes the tree head (see <xref target="building-tree"/>). It then signs the window ending at this tree head (see <xref target="signing"/>) and publishes (see <xref target="publishing"/>) the result.</li>
          <li>The CA constructs a certificate using the inclusion proof. It sends this certificate to the subscriber. See <xref target="proofs"/>.</li>
          <li>The transparency service downloads the Merkle Tree, validates the hashes, and mirrors it for monitors to observe. See <xref target="transparency-service"/>.</li>
          <li>The relying party fetches the latest window from the transparency service. This window will contain the new tree head.</li>
          <li>In an application protocol such as TLS, the relying party communicates its window state to the subscriber.</li>
          <li>If the relying party's window contains the subscriber's certificate, the subscriber negotiates this protocol and sends the Merkle Tree certificate. See <xref target="trust-anchor-negotiation"/> for details. If there is no match, the subscriber proceeds as if this protocol were not in use (e.g., by sending a traditional X.509 certificate chain).</li>
        </ol>
        <t><xref target="fig-deployment"/> below shows this process.</t>
        <figure anchor="fig-deployment">
          <name>An overview of a Merkle Tree certificate deployment</name>
          <artwork type="ascii-art"><![CDATA[
     +--------------+  1. issuance request  +-------------------------+
     |              | --------------------> |                         |
     |  Subscriber  |                       | Certification Authority |
     |              | <-------------------- |                         |
     +--------------+   3. inclusion proof  +-------------------------+
            ^  |                                        |
            |  |                                        | 2. sign and
6. accepted |  | 7. inclusion proof                     |  publish tree
 tree heads |  |                                        |
            |  v                                        v
    +-----------------+                      +----------------------+
    |                 |  5. batch tree heads |                      |
    |  Relying Party  | <------------------- | Transparency Service |
    |                 |                      |                      |
    +-----------------+                      +----------------------+
                                                        |
                                                        | 4. mirror tree
                                                        v
                                                  +------------+
                                                  |            |
                                                  |  Monitors  |
                                                  |            |
                                                  +------------+
]]></artwork>
        </figure>
        <t>The remainder of this document discusses this process in detail, followed by concrete instantions of it in TLS <xref target="RFC8446"/> and ACME <xref target="RFC8555"/>.</t>
      </section>
    </section>
    <section anchor="assertions">
      <name>Assertions</name>
      <t>[[TODO: The protocol described in this document is broadly independent of the assertion format. We describe, below, one possible structure, but welcome feedback on how best to structure the encoding. The main aims are simplicity and to improve on handling cross-protocol attacks per <xref target="cross-protocol"/>.]]</t>
      <t>TLS certificates associate some application-specific identifier with a TLS signing key. When TLS is used to authenticate HTTPS <xref target="RFC9110"/> servers, these identifiers specify DNS names or HTTP origins. Other protocols may require other kinds of assertions.</t>
      <t>To represent this, this document defines an Assertion structure:</t>
      <artwork><![CDATA[
enum { tls(0), (2^16-1) } SubjectType;

enum {
    dns(0),
    dns_wildcard(1),
    ipv4(2),
    ipv6(3),
    (2^16-1)
} ClaimType;

struct {
    ClaimType claim_type;
    opaque claim_info<0..2^24-1>;
} Claim;

struct {
    SubjectType subject_type;
    opaque subject_info<0..2^24-1>;
    Claim claims<0..2^24-1>;
} Assertion;
]]></artwork>
      <t>An Assertion is roughly analogous to an X.509 TBSCertificate (<xref section="4.1.2" sectionFormat="of" target="RFC5280"/>). It describes a series of claims about some subject. The <tt>subject_info</tt> field is interpreted according to the <tt>subject_type</tt> value. For TLS, the <tt>subject_type</tt> is <tt>tls</tt>, and the <tt>subject_info</tt> is a TLSSubjectInfo structure. TLSSubjectInfo is defined in full in <xref target="tls-subject-info"/> below, but as an illustrative example, it is reproduced below:</t>
      <artwork><![CDATA[
struct {
    SignatureScheme signature;
    opaque public_key<1..2^24-1>;
} TLSSubjectInfo;
]]></artwork>
      <t>This structure represents the public half of a TLS signing key. The semantics are thus that each claim in <tt>claims</tt> applies to the TLS client or server. This is analogous to X.509's SubjectPublicKeyInfo structure (<xref section="4.1.2.7" sectionFormat="of" target="RFC5280"/>) but additionally incorporates the protocol. Protocols consuming an Assertion MUST check the <tt>subject_type</tt> is a supported value before processing <tt>subject_info</tt>. If unrecognized, the structure MUST be rejected.</t>
      <t>Other protocols aiming to integrate with this structure allocate a SubjectType codepoint and describe how it is interpreted.</t>
      <t>Likewise, a Claim structure describes some claim about the subject. The <tt>claim_info</tt> field is interpreted according to the <tt>claim_type</tt>. Each Claim structure in an Assertion's <tt>claims</tt> field MUST have a unique <tt>claim_type</tt> and all values MUST be sorted in order of increasing <tt>claim_type</tt>. Structures violating this constraint MUST be rejected.</t>
      <t>When a relying party interprets an Assertion certified by the CA, it MUST ignore any Claim values with unrecognized <tt>claim_type</tt>. When a CA interprets an Assertion in a certification request from a subscriber, it MUST reject any Claim values with unrecognized <tt>claim_type</tt>.</t>
      <t>This document defines claim types for DNS names and IP addresses, but others can be defined.</t>
      <t>[[TODO: For now, the claims below just transcribe the X.509 GeneralName structure. Should these be origins instead? For HTTPS, it's a pity to not capture the scheme and port. We do mandate ALPN in <xref target="tls-certificate-type"/>, so cross-protocol attacks are mitigated, but it's unfortunate that subscribers cannot properly separate their HTTPS vs FTPS keys, or their port 443 vs port 444 keys. One option here is to have HTTPS claims instead, and then other protocols can have FTPS claims, etc.]]</t>
      <section anchor="dns-claims">
        <name>DNS Claims</name>
        <t>The <tt>dns</tt> and <tt>dns_wildcard</tt> claims indicate that the subject is authoritative for a set of DNS names. They use the DNSNameList structure, defined below:</t>
        <artwork><![CDATA[
opaque DNSName<1..255>;

struct {
    DNSName dns_names<1..2^16-1>;
} DNSNameList;
]]></artwork>
        <t>DNSName values use the "preferred name syntax" as specified by <xref section="3.5" sectionFormat="of" target="RFC1034"/> and as modified by <xref section="2.1" sectionFormat="of" target="RFC1123"/>. Alphabetic characters MUST additionally be represented in lowercase. IDNA names <xref target="RFC5890"/> are represented as A-labels. For example, possible values include <tt>example.com</tt> or <tt>xn--iv8h.example</tt>. <tt>EXAMPLE.COM</tt> and <tt>&lt;U+1F50F&gt;.example</tt> would not be permitted.</t>
        <t>Names in a <tt>dns</tt> claim represent the exact DNS name specified. Names in a <tt>dns_wildcard</tt> claim represent wildcard DNS names and are processed as if prepended with the string "*." and then following the steps in <xref section="6.3" sectionFormat="of" target="I-D.draft-ietf-uta-rfc6125bis"/>.</t>
      </section>
      <section anchor="ip-claims">
        <name>IP Claims</name>
        <t>The <tt>ipv4</tt> and <tt>ipv6</tt> claims indicate the subject is authoritative for a set of IPv4 and IPv6 addresses, respectively. They use the IPv4AddressList and IPv6AddressList structures, respectively, defined below. IPv4Address and IPv6Address are interpreted in network byte order.</t>
        <artwork><![CDATA[
uint8 IPv4Address[4];
uint8 IPv6Address[16];

struct {
    IPv4Address addresses<4..2^16-1>;
} IPv4AddressList;

struct {
    IPv6Address addresses<16..2^16-1>;
} IPv6AddressList;
]]></artwork>
      </section>
    </section>
    <section anchor="issuing-certificates">
      <name>Issuing Certificates</name>
      <t>This section describes the structure of Merkle Tree certificates, and defines the process of how a Merkle Tree certification authority issues certificates for a subscriber.</t>
      <section anchor="parameters">
        <name>Merkle Tree CA Parameters</name>
        <t>A Merkle Tree certification authority is defined by the following values:</t>
        <dl>
          <dt><tt>hash</tt>:</dt>
          <dd>
            <t>A cryptographic hash function. In this document, the hash function is always SHA-256 <xref target="SHS"/>, but others may be defined.</t>
          </dd>
          <dt><tt>issuer_id</tt>:</dt>
          <dd>
            <t>A short, opaque byte string that identifies the CA.</t>
          </dd>
          <dt><tt>public_key</tt>:</dt>
          <dd>
            <t>The public half of a signing keypair. The corresponding private key, <tt>private_key</tt>, is known only to the CA.</t>
          </dd>
          <dt><tt>start_time</tt>:</dt>
          <dd>
            <t>The issuance time of the first batch of certificates</t>
          </dd>
          <dt><tt>lifetime</tt>:</dt>
          <dd>
            <t>A duration of time which determines the lifetime of certificates issued by this CA.</t>
          </dd>
          <dt><tt>batch_duration</tt>:</dt>
          <dd>
            <t>A duration of time which determines how frequently the CA issues certificates. See details below.</t>
          </dd>
          <dt><tt>window_size</tt>:</dt>
          <dd>
            <t>An integer describing the maximum number of unexpired batches which may exist at a time. This value is determined from <tt>lifetime</tt> and <tt>batch_duration</tt> by <tt>floor(lifetime / batch_duration) + 1</tt>.</t>
          </dd>
        </dl>
        <t>These values are public and known by the relying party and the CA. They may not be changed for the lifetime of the CA. To change these parameters, the entity operating a CA may deploy a second CA and either operate both during a transition, or stop issuing from the previous CA.</t>
        <t>[[TODO: The signing key case is interesting. A CA could actually maintain a single stream of Merkle Trees, but then sign everything with multiple keys to support rotation. The CA -&gt; Subscriber -&gt; RP flow does not depend on the signature, only the CA -&gt; Transparency Service -&gt; RP flow. The document is not currently arranged to capture this, but it probably should be. We probably need to decouple the signing half and the Merkle Tree half slightly.]]</t>
        <t>Certificates are issued in batches. Batches are numbered consecutively, starting from zero. All certificates in a batch have the same issuance time, determined by <tt>start_time + batch_duration * batch_number</tt>. This is known as the batch's issuance time. That is, batch 0 has an issuance time of <tt>start_time</tt>, and issuance times increment by <tt>batch_duration</tt>. A CA can issue no more frequently than <tt>batch_duration</tt>. <tt>batch_duration</tt> determines how long it takes for the CA to return a certificate to the subscriber.</t>
        <t>All certificates in a batch have the same expiration time, computed as <tt>lifetime</tt> past the issuance time. After this time, the certificates in a batch are no longer valid. Merkle Tree certificates uses a short-lived certificates model, such that certificate expiration replaces an external revocation signal like CRLs <xref target="RFC5280"/> or OCSP <xref target="RFC6960"/>. <tt>lifetime</tt> SHOULD be set accordingly. For instance, a deployment with a corresponding maximum OCSP <xref target="RFC6960"/> response lifetime of 14 days SHOULD use a value no higher than 14 days. See <xref target="revocation"/> for details.</t>
        <t>The <tt>window_size</tt> parameter, computed from <tt>lifetime</tt> and <tt>batch_duration</tt>, determines relying party resource requirements, as described in <xref target="relying-parties"/>. A relying party must maintain <tt>window_size</tt> hashes at a time. Parameters SHOULD be tuned to balance relying party resource requirements and issuance delay.</t>
        <t>CAs are RECOMMENDED to use a <tt>batch_duration</tt> of one hour, and a <tt>lifetime</tt> of 14 days. This results in a <tt>window_size</tt> of 336, for a total of 10,752 bytes in SHA-256 hashes.</t>
        <t>To prevent cross-protocol attacks, the key used in a Merkle Tree CA MUST be unique to that Merkle Tree CA. It MUST NOT be used in another Merkle Tree CA, or for another protocol, such as X.509 certificates.</t>
      </section>
      <section anchor="batches">
        <name>Batch State</name>
        <t>Each batch is in one of three states:</t>
        <dl>
          <dt>pending:</dt>
          <dd>
            <t>The current time is before the batch's issuance time</t>
          </dd>
          <dt>ready:</dt>
          <dd>
            <t>The current time is at or after the batch's issuance time, but the batch has not yet been issued</t>
          </dd>
          <dt>issued:</dt>
          <dd>
            <t>Certificates have been issued for this batch</t>
          </dd>
        </dl>
        <t>The CA also maintains a latest batch number, which is the number of the last batch in the "issued" state. As an invariant, all batches before this value MUST also be in the "issued" state.</t>
        <t>For each batch in the "issued" state, the CA maintains the following batch state:</t>
        <ul spacing="normal">
          <li>The list of assertions certified in this batch.</li>
          <li>The tree head, a hash computed over this list, described in <xref target="building-tree"/>.</li>
          <li>A window signature computed as described in <xref target="signing"/>.</li>
        </ul>
        <t>The CA exposes all of this information in an HTTP <xref target="RFC9110"/> interface described in <xref target="publishing"/>.</t>
      </section>
      <section anchor="issuance-queue-and-scheduling">
        <name>Issuance Queue and Scheduling</name>
        <t>The CA additionally maintains an issuance queue, not exposed via the HTTP interface.</t>
        <t>When a subscriber requests a certificate for some assertion, the CA first validates it per its issuance policy. For example, it may perform ACME identifier validation challenges (<xref section="8" sectionFormat="of" target="RFC8555"/>). Once validation is complete and the CA is willing to certify the assertion, the CA appends it to the issuance queue.</t>
        <t>The CA runs a regularly-scheduled issuance job which converts this queue into certificates. This job runs the following procedure:</t>
        <ol spacing="normal" type="1"><li>If no batches are in the "ready" state, do nothing and abort this procedure. Schedule a new job to run sometime after the earliest "pending" batch's issuance time.</li>
          <li>For each batch in the "ready" state other than the latest one, run the procedure in <xref target="certifying-batch"/> with an empty assertion list, in order of increasing batch number. Batches cannot be skipped.</li>
          <li>Empty the issuance queue into an ordered list of assertions. Run the procedure in <xref target="certifying-batch"/> using this list and the remaining batch in the "ready" state. This batch's issuance time will be at or shortly before the current time.</li>
        </ol>
      </section>
      <section anchor="certifying-batch">
        <name>Certifying a Batch of Assertions</name>
        <t>This section describes how to certify a given list of assertions at a given batch number. The batch MUST be in the "ready" state, and all preceding batches MUST be in the "issued" state.</t>
        <section anchor="building-tree">
          <name>Building the Merkle Tree</name>
          <t>First, the CA then builds a Merkle Tree from the list as follows:</t>
          <t>Let <tt>n</tt> be the number of input assertions. If <tt>n &gt; 0</tt>, the CA builds a binary tree with l levels numbered <tt>0</tt> to <tt>l-1</tt>, where <tt>l</tt> is <tt>ceil(log_2(n)) + 1</tt>. Each node in the tree contains a hash value. Hashes in the tree are built from the following functions:</t>
          <artwork><![CDATA[
    HashEmpty() = hash(0x00)
    HashNode(left, right, level, index) = hash(HashNodeInput)
    HashAssertion(assertion) = hash(0x02 || assertion)
]]></artwork>
          <t><tt>0x00</tt> and <tt>0x02</tt> denote byte strings containing a single byte with value zero and two, respectively. <tt>||</tt> denotes concatenation. <tt>HashNodeInput</tt> is computed by encoding the structure defined below:</t>
          <artwork><![CDATA[
struct {
    uint8 distinguisher = 1;
    opaque issuer_id<1..32>;
    uint32 batch_number;
    opaque pad[N];
    opaque left[hash.length];
    opaque right[hash.length];
    uint8 level;
    uint64 index;
} HashNodeInput;
]]></artwork>
          <t><tt>issuer_id</tt> and <tt>batch_number</tt> are set to the CA's <tt>issuer_id</tt> and the current batch number. <tt>pad</tt> is an array of zeros to pad up to the hash function's block size. For SHA-256, the block size is 64 bytes. The remaining fields are set to inputs of the function.</t>
          <t>Tree levels are computed iteratively as follows:</t>
          <ol spacing="normal" type="1"><li>Initialize level 0 with n elements. For <tt>i</tt> between <tt>0</tt> and <tt>n-1</tt>, inclusive,
set element <tt>i</tt> to the output of <tt>HashAssertion(assertion[i])</tt>.</li>
            <li>
              <t>For <tt>i</tt> between <tt>1</tt> and <tt>l-1</tt>, inclusive, compute level <tt>i</tt> from level <tt>i-1</tt> as
follows:  </t>
              <ul spacing="normal">
                <li>If level <tt>i-1</tt> has an odd number of elements, append <tt>HashEmpty()</tt> to the level.</li>
                <li>Initialize level <tt>i</tt> with half as many elements as level <tt>i-1</tt>. For all <tt>j</tt>,
set element <tt>j</tt> to the output of <tt>HashNode(left, right, i, j)</tt> where <tt>left</tt> is
element <tt>2*j</tt> of level <tt>i-1</tt> and <tt>right</tt> is element <tt>2*j+1</tt> of level <tt>i-1</tt>.
<tt>left</tt> and <tt>right</tt> are the left and right children of element <tt>j</tt>.</li>
              </ul>
            </li>
          </ol>
          <t>At the end of this process, level <tt>l-1</tt> will have exactly one root element. This element is called the tree head. <xref target="fig-example-tree"/> shows an example tree for three assertions. The tree head in this example is t20.</t>
          <figure anchor="fig-example-tree">
            <name>An example Merkle Tree for three assertions</name>
            <artwork type="ascii-art"><![CDATA[
    level 2:               t20
                      _____/ \_____
                     /             \
    level 1:       t10             t11
                   / \             / \
                  /   \           /   \
    level 0:   t00     t01     t02    empty
                |       |       |
                a0      a1      a2
]]></artwork>
          </figure>
          <t>If <tt>n</tt> is zero, the CA does not build a tree and the tree head is <tt>HashEmpty()</tt>. This value is constant for a given hash function. The value of <tt>HashEmpty()</tt> for SHA-256 is:</t>
          <artwork><![CDATA[
    6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d
]]></artwork>
          <t>If <tt>n</tt> is one, the tree contains a single level, level 0, and has a tree head of <tt>HashAssertion(assertion)</tt>.</t>
        </section>
        <section anchor="signing">
          <name>Signing a Window</name>
          <t>Batches are grouped into consecutive ranges of <tt>window_size</tt> batches, called windows. As <tt>window_size</tt> is computed to cover the full certificate lifetime, a window that ends at the latest batch number covers all certificates that may still be valid from a CA.</t>
          <t>Windows are serialized into the following structure:</t>
          <artwork><![CDATA[
opaque TreeHead[hash.length];

struct {
    uint32 batch_number;
    TreeHead tree_heads[window_size];
} Window;
]]></artwork>
          <t><tt>batch_number</tt> is the batch number of the highest batch in the window.</t>
          <t><tt>tree_heads</tt> value contains the last <tt>window_size</tt> tree heads, starting from <tt>batch_number</tt>, in decreasing batch number order. That is, <tt>tree_heads[0]</tt> is the tree head for batch <tt>batch_number</tt>, <tt>tree_heads[1]</tt> is the tree head for <tt>batch_number - 1</tt>, and so on. If <tt>batch_number &lt; window_size - 1</tt>, any tree heads with numbers below zero are filled with <tt>HashEmpty()</tt>.</t>
          <t>After the CA builds the Merkle Tree for a batch, it constructs the Window structure whose <tt>batch_number</tt> is the number of the batch being issued. It then computes a signature over the following structure:</t>
          <artwork><![CDATA[
struct {
    uint8 label[31] = "Merkle Tree Certificate Window\0";
    opaque issuer_id<1..32>;
    Window window;
} LabeledWindow;
]]></artwork>
          <t>The <tt>label</tt> field is an ASCII string. The final byte of the string, "\0", is a zero byte, or ASCII NULL character. The <tt>issuer_id</tt> field is the CA's <tt>issuer_id</tt>. Other parties can verify the signature by constructing the same input and verifying with the CA's <tt>public_key</tt>.</t>
          <t>The CA saves this signature as the batch's window signature. It then updates the latest batch to point to <tt>batch_number</tt>. If the CA's private key signs an input that can be interpreted as a LabeledWindow structure, the CA is considered to have certified every assertion contained in every value in the <tt>tree_heads</tt> list, with expiry determined by <tt>batch_number</tt>, the position of the tree head in the list, and the CA's input parameters as described in <xref target="parameters"/>.</t>
        </section>
        <section anchor="proofs">
          <name>Certificate Format</name>
          <t>[[TODO: BikeshedCertificate is a placeholder name until someone comes up with a better one.]]</t>
          <t>For each assertion in the tree, the CA constructs a BikeshedCertificate structure containing the assertion and a proof. A proof is a message that allows the relying party to accept the associated assertion, provided it trusts the CA and recognizes the tree head. The structures are defined below:</t>
          <artwork><![CDATA[
enum { merkle_tree_sha256(0), (2^16-1) } ProofType;

struct {
    ProofType proof_type;
    opaque trust_anchor_data<0..2^8-1>;
} TrustAnchor;

struct {
    TrustAnchor trust_anchor;
    opaque proof_data<0..2^24-1>;
} Proof;

struct {
    Assertion assertion;
    Proof proof;
} BikeshedCertificate;
]]></artwork>
          <t>The <tt>proof_type</tt> identifies a type of proof. It determines the format of the <tt>trust_anchor_data</tt> and <tt>proof_data</tt> values. The mechanism defined in this document is <tt>merkle_tree_sha256</tt>, which uses <tt>trust_anchor_data</tt> and <tt>proof_data</tt> formats of MerkleTreeTrustAnchor and MerkleTreeProofSHA256, respectively:</t>
          <artwork><![CDATA[
struct {
    opaque issuer_id<1..32>;
    uint32 batch_number;
} MerkleTreeTrustAnchor;

opaque HashValueSHA256[32];

struct {
    uint64 index;
    HashValueSHA256 path<32..2^16-1>;
} MerkleTreeProofSHA256;
]]></artwork>
          <t>A trust anchor is a short identifier that identifies a source of certificates. It is analogous to an X.509 trust anchor's subject name. These are used for certificate selection, described in <xref target="trust-anchor-negotiation"/>. In Merkle Tree certificates, each batch is a distinct trust anchor. The <tt>trust_anchor_data</tt> for <tt>merkle_tree_sha256</tt> is a MerkleTreeTrustAnchor structure. The <tt>issuer_id</tt> field is the CA's <tt>issuer_id</tt>. The <tt>batch_number</tt> field is the number of the batch.</t>
          <t>A relying party that trusts a trust anchor must know the batch's tree head. It then trusts any assertion which can be proven to be in the corresponding Merkle Tree, as described in <xref target="verifying"/>.</t>
          <t>The <tt>proof_data</tt> for <tt>merkle_tree_sha256</tt> is a MerkleTreeProofSHA256. After building the tree, the CA constructs a MerkleTreeProofSHA256 for each assertion as follows. For each index <tt>i</tt> in the batch's assertion list:</t>
          <ol spacing="normal" type="1"><li>Set <tt>index</tt> to <tt>i</tt>. This will be a value between <tt>0</tt> and <tt>n-1</tt>, inclusive.</li>
            <li>Set <tt>path</tt> to an array of <tt>l-1</tt> hashes. Set element <tt>j</tt> of this array to element
<tt>k</tt> of level <tt>j</tt>, where <tt>k</tt> is <tt>(i &gt;&gt; j) ^ 1</tt>. <tt>&gt;&gt;</tt> denotes a bitwise
right-shift, and <tt>^</tt> denotes a bitwise exclusive OR (XOR) operation. This
element is the sibling of an ancestor of assertion <tt>i</tt> in the tree. Note the
tree head is never included.</li>
          </ol>
          <t>For example, the <tt>path</tt> value for the third assertion in a batch of three assertions would contain the marked nodes in <xref target="fig-example-proof"/>, from bottom to top.</t>
          <figure anchor="fig-example-proof">
            <name>An example Merkle Tree proof for the third of three assertions</name>
            <artwork type="ascii-art"><![CDATA[
    level 2:               t20
                      _____/ \_____
                     /             \
    level 1:      *t10             t11
                   / \             / \
                  /   \           /   \
    level 0:   t00     t01     t02   *empty
                |       |       |
                a0      a1      a2
]]></artwork>
          </figure>
          <t>If the batch only contained one assertion, <tt>path</tt> will be empty and <tt>index</tt> will be zero.</t>
          <t>For each assertion, the CA assembles a BikeshedCertificate structure and sends it to the subscriber. It SHOULD also send the additional information described in <xref target="trust-anchor-negotiation"/>.</t>
          <t>This certificate can be presented to supporting relying parties as described in <xref target="using"/>. It is valid until the batch expires.</t>
        </section>
      </section>
      <section anchor="sizes">
        <name>Size Estimates</name>
        <t>Merkle Tree proofs scale logarithmically in the batch size. <xref target="rolling-renewal"/> recommends subscribers renew halfway through the previous certificate's lifetime. Batch sizes will thus, on average, be <tt>subscriber_count * 2 / window_size</tt>, where <tt>subscriber_count</tt> is a CA's active subscriber count. The recommended parameters in <xref target="parameters"/> give an average of <tt>subscriber_count / 168</tt>.</t>
        <t>Some organizations have published statistics which can estimate batch sizes for the Web PKI. On March 7th, 2023, <xref target="LetsEncrypt"/> reported around 330,000,000 active subscribers for a single CA. <xref target="MerkleTown"/> reported around 3,800,000,000 unexpired certificates in Certificate Transparency logs, and an issuance rate of around 257,000 per hour. Note the numbers from <xref target="MerkleTown"/> represent, respectively, all Web PKI CAs combined and issuance rates for longer-lived certificates and may not be representative of a Merkle Tree certificate deployment.</t>
        <t>These three estimates correspond to batch sizes of, respectively, around 2,000,000, around 20,000,000, and 257,000. The corresponding <tt>path</tt> lengths will be 20, 24, and 17, given proof sizes of, respectively, 640 bytes, 768 bytes, and 544 bytes.</t>
        <t>For larger batch sizes, 32 hashes, or 1024 bytes, is sufficient for batch sizes up to 2^33 (8,589,934,592) certificates.</t>
      </section>
    </section>
    <section anchor="using">
      <name>Using Certificates</name>
      <t>This section describes how subscribers present and relying parties verify Merkle Tree certificates.</t>
      <section anchor="relying-parties">
        <name>Relying Party State</name>
        <t>For each Merkle Tree CA it trusts, a relying party maintains a copy of the most recent window from the CA. This structure determines which certificates the relying party will accept. It is regularly updated from the transparency service, as described in <xref target="transparency-service"/>.</t>
      </section>
      <section anchor="verifying">
        <name>Certificate Verification</name>
        <t>When a subscriber presents a BikeshedCertificate whose <tt>proof_type</tt> field is <tt>merkle_tree_sha256</tt>, the relying party runs the following procedure to verify it. This procedure's error conditions are described with TLS alerts, defined in <xref section="6.2" sectionFormat="of" target="RFC8446"/>. Non-TLS applications SHOULD map these error conditions to the corresponding application-specific errors. When multiple error conditions apply, the application MAY return any applicable error.</t>
        <ol spacing="normal" type="1"><li>Decode the <tt>trust_anchor_data</tt> and <tt>proof_data</tt> fields as MerkleTreeTrustAnchor and MerkleTreeProofSHA256 structures, respectively. If they cannot be decoded, abort this procedure with a <tt>bad_certificate</tt> error.</li>
          <li>Check if the certificate's <tt>issuer_id</tt> corresponds to a trusted Merkle Tree CA with a saved window. If not, abort this procedure with an <tt>unknown_ca</tt> error.</li>
          <li>Check if the certificate's <tt>batch_number</tt> is contained in the saved window. If not, abort this procedure with a <tt>unknown_ca</tt> error.</li>
          <li>Compute the expiration time of the certificate's <tt>batch_number</tt>, as described in <xref target="parameters"/>. If this value is before the current time, abort this procedure with a <tt>certificate_expired</tt> error.</li>
          <li>Set <tt>hash</tt> to the output of <tt>HashAssertion(assertion)</tt>. Set <tt>remaining</tt> to the certificate's <tt>index</tt> value.</li>
          <li>
            <t>For each element <tt>v</tt> at zero-based index <tt>i</tt> of the certificate's <tt>path</tt> field, in order:  </t>
            <ul spacing="normal">
              <li>If <tt>remaining</tt> is odd, set <tt>hash</tt> to the output of <tt>HashNode(v, hash, i + 1, remaining &gt;&gt; 1)</tt>.
Otherwise, set <tt>hash</tt> to the output of <tt>HashNode(hash, v, i + 1, remaining &gt;&gt; 1)</tt></li>
              <li>Set <tt>remaining</tt> to <tt>remaining &gt;&gt; 1</tt>.</li>
            </ul>
          </li>
          <li>If <tt>remaining</tt> is non-zero, abort this procedure with an error.</li>
          <li>If <tt>hash</tt> is not equal to the corresponding tree head in the saved window, abort this procedure with a <tt>bad_certificate</tt> error.</li>
          <li>Optionally, perform any additional application-specific checks on the assertion and issuer. For example, an HTTPS client might constrain an issuer to a particular DNS subtree.</li>
          <li>If all the preceding checks succeed, the certificate is valid and the application can proceed with using the assertion.</li>
        </ol>
      </section>
      <section anchor="trust-anchor-negotiation">
        <name>Certificate Negotiation</name>
        <t>Merkle Tree certificates can only be presented to up-to-date relying parties, so this document describes a mechanism for subscribers to select certificates. This section describes the general negotiation mechanism. <xref target="tls-trust-anchors-extension"/> describes it as used in TLS.</t>
        <t>Subscribers maintain a certificate set of available BikeshedCertificates. The TrustAnchor value in each BikeshedCertificate is known as the primary TrustAnchor. Each BikeshedCertificate is also associated with the following values:</t>
        <ul spacing="normal">
          <li>A set of additional TrustAnchor values which also match this certificate</li>
          <li>An expiration time, after which the certificate is no longer usable</li>
        </ul>
        <t>These values can be computed from the BikeshedCertificate, given knowledge of the ProofType value and the CA's parameters. However, CAs are RECOMMENDED to send this information to subscribers in a ProofType-independent form. See <xref target="acme-extensions"/> for how this is represented in ACME. This simplifies subscriber deployment and improves ecosystem agility, by allowing subscribers to use certificates without precise knowledge of their parameters.</t>
        <t>For Merkle Tree certificates, the expiration time is computed as described in <xref target="parameters"/>. There are <tt>window_size - 1</tt> additional TrustAnchor values: for each <tt>i</tt> from 1 to <tt>window_size - 1</tt>, make a copy of the primary TrustAnchor with the <tt>batch_number</tt> value replaced with <tt>batch_number + i</tt>.</t>
        <t>Each relying party maintains a set of TrustAnchor values, which describe the certificates it accepts. This set is sent to the subscriber to aid in certificate selection.  The ProofType code point defines how the relying party determines the TrustAnchor values.  For Merkle Tree certificates, the <tt>proof_type</tt> is <tt>merkle_tree_sha256</tt>, the <tt>issuer_id</tt> is the CA's <tt>issuer_id</tt>, and the <tt>batch_number</tt> is the <tt>batch_number</tt> of the relying party's window.</t>
        <t>The subscriber compares this set with its certificate set. A certificate is eligible if all of the following are true:</t>
        <ul spacing="normal">
          <li>The current time is before the certificate's expiration time</li>
          <li>Either the certificate's primary TrustAnchor value or one of the additional TrustAnchor values appears in the relying party's TrustAnchor set.</li>
          <li>Any additional application-specific constraints hold. For example, the TLS <tt>signature_algorithms</tt> (<xref section="4.2.3" sectionFormat="of" target="RFC8446"/>) extension constrains the types of keys which may be used.</li>
        </ul>
        <t>The subscriber SHOULD select the smallest available certificate where the above checks succeed. When two comparably-sized certificates are available, the subscriber SHOULD select the one with the later expiration time, to reduce clock skew risks. If no certificate is available, the subscriber SHOULD fallback to another PKI mechanism, such as X.509.</t>
      </section>
    </section>
    <section anchor="transparency-service">
      <name>Transparency Services</name>
      <t>This section describes the role of the transparency service. The transparency service ensures all certificates accepted by the relying party are consistently and publicly logged. It performs three functions:</t>
      <ul spacing="normal">
        <li>Mirror all assertions certified by the CA and present them to monitors</li>
        <li>Validate all tree heads and windows produced by the CA</li>
        <li>Provide the latest valid window to relying parties</li>
      </ul>
      <t>In doing so, the transparency service MUST satisfy the following requirements:</t>
      <ul spacing="normal">
        <li>The mirrored CA state is append-only. That is, the hashes, signatures, and assertions for a given batch number MUST NOT change.</li>
        <li>All windows sent to relying parties MUST be reflected in the mirrored CA state. That is, each tree hash in a window MUST correspond to a mirrored tree hash, consistent with the corresponding mirrored assertions.</li>
      </ul>
      <t>The transparency service publishes the mirrored CA state using the same interface as <xref target="publishing"/>. The protocol between the relying party and transparency service is out of scope of this document. The relying party MAY use the interface defined here, or an existing application-specific authenticated channel.</t>
      <t>As discussed in <xref target="authenticity"/>, relying parties MUST ensure that any windows obtained were asserted by the CA. This SHOULD be done by having the transparency service forward the CA's signature, with the relying party verifying it. However, if the transparency service already maintains a trusted, authenticated channel to the relying parties (e.g. a software or root store update channel), relying parties MAY rely on the transparency service to validate the CA windows on their behalf, only sending valid windows over this channel.</t>
      <t>Although described as a single service for clarity, the transparency service may be implemented as a combination of services run by multiple entities, depending on security goals. For example deployments, this section first describes a single trusted service, then it describes other possible models where trust is divided between entities.</t>
      <section anchor="single-trusted-service">
        <name>Single Trusted Service</name>
        <t>Some relying parties regularly contact a trusted update service, either for software updates or to update individual components, such as the services described in <xref target="CHROMIUM"/> and <xref target="FIREFOX"/>. Where these services are already trusted for the components such as the trust anchor list or certificate validation software, a single trusted transparency service may be a suitable model.</t>
        <t>The transparency service maintains a mirror of the CA's latest batch number, and batch state. Roughly once every <tt>batch_duration</tt>, it polls the CA's HTTP interface (see <xref target="publishing"/>) and runs the following steps:</t>
        <ol spacing="normal" type="1"><li>Fetch the CA's latest batch number.  If this fetch fails, abort this procedure with an error.</li>
          <li>Let <tt>new_latest_batch</tt> be the result and <tt>old_latest_batch</tt> be the currently mirrored value. If <tt>new_latest_batch</tt> equals <tt>old_latest_batch</tt>, finish this procedure without reporting an error.</li>
          <li>If <tt>new_latest_batch</tt> is less than <tt>old_latest_batch</tt>, abort this procedure with an error.</li>
          <li>If the issuance date for batch <tt>new_latest_batch</tt> is in the future (see <xref target="parameters"/>), abort this procedure with an error.</li>
          <li>
            <t>For all <tt>i</tt> such that <tt>old_latest_batch &lt; i &lt;= new_latest_batch</tt>:  </t>
            <ol spacing="normal" type="1"><li>Fetch the signature, tree head, and assertion list for batch <tt>i</tt>. If this fetch fails, abort this procedure with an error.</li>
              <li>Compute the tree head for the assertion list, as described in <xref target="building-tree"/>. If this value does not match the fetched tree head, abort this procedure with an error.</li>
              <li>Compute the Window structure and verify the signature, as described in <xref target="signing"/>. Set <tt>tree_heads[0]</tt> to the tree head fetched above. Set the other values in <tt>tree_heads</tt> to the previously mirrored values. If signature verification fails, abort this procedure with an error.</li>
              <li>Set the mirrored latest batch number to <tt>i</tt> and save the fetched batch state.</li>
            </ol>
          </li>
        </ol>
        <t>[[TODO: If the mirror gets far behind, if the CA just stops publishing for a while, it may suddenly have to catch up on many batches. Should we allow the mirror to catch up to the latest window and skip the intervening batches? The intervening batches are guaranteed to have been expired]]</t>
      </section>
      <section anchor="single-update-multiple-mirrors">
        <name>Single Update Service with Multiple Mirrors</name>
        <t>If the relying party has a trusted update service, but the update service does not have the resources to mirror the full batch state, the transparency service can be composed of this update service and several, less trusted mirrors. In this model, the mirrors are not trusted to serve authoritative trust anchor information to relying parties, but the update service trusts at least half of them to faithfully and consistently mirror the batch state.</t>
        <t>Each mirror follows the procedure in <xref target="single-trusted-service"/> to maintain and publish a mirror of the CA's batch state.</t>
        <t>The update server maintains the latest window validated to appear in all mirrors. It updates this by polling the mirrors and running the following steps:</t>
        <ol spacing="normal" type="1"><li>For each mirror, fetch the latest batch number.</li>
          <li>Let <tt>new_latest_batch</tt> be the highest batch number that is bounded by the value fetched from at least half of the mirrors. Let <tt>old_latest_batch</tt> be the batch number of the currently stored window.</li>
          <li>If <tt>new_latest_batch</tt> equals <tt>old_latest_batch</tt>, finish this procedure without reporting an error.</li>
          <li>If <tt>new_latest_batch</tt> is less than <tt>old_latest_batch</tt>, abort this procedure with an error.</li>
          <li>If the issuance date for batch <tt>new_latest_batch</tt> is in the future (see <xref target="parameters"/>), abort this procedure with an error.</li>
          <li>Fetch the window with <tt>new_latest_batch</tt> from each mirror that returned an equal or higher latest batch number. If any fetches fail, or if the results do not match across all mirrors, abort this procedure with an error.</li>
          <li>Verify the window signature, as described in <xref target="signing"/>. If the signature is invalid, abort this procedure with an error.</li>
          <li>If the old and new windows contain overlapping batch numbers, verify that the tree hashes match. If not, abort this procedure with an error.</li>
          <li>Update the saved window with the new value.</li>
        </ol>
        <t>Compared to <xref target="single-trusted-service"/>, this model reduces trust in the mirror services, but can delay certificate usability if some of the mirrors consume CA updates too slowly. This can be tuned by adjusting the threshold in step 2.</t>
        <t>In a transparency service using this model, each mirror independently publishes the batch state via <xref target="publishing"/>.</t>
      </section>
      <section anchor="multiple-transparency-services">
        <name>Multiple Transparency Services</name>
        <t>Relying parties without a trusted update service can fetch from mirrors directly. Rather than relying on the update service to fetch the window state, the relying party runs the procedure described in <xref target="single-update-multiple-mirrors"/>, and uses the saved window to verify certificates.</t>
      </section>
      <section anchor="monitors">
        <name>Monitors</name>
        <t>Monitors in this document are analogous to monitors in <xref target="RFC6962"/>. Monitors watch an implementation of the HTTP APIs in <xref target="publishing"/> to verify correct behavior and watch for certificates of interest. This is typically the transparency service. A monitor needs to, at least, inspect every new batch. It may also maintain a copy of the batch state.</t>
        <t>It does so by following the procedure in <xref target="single-trusted-service"/>, fetching from the service being monitored. If the procedure fails for a reason other than the service availability, this should be viewed as misbehavior on the part of the service. If the procedure fails due to service availability and the service remains unavailable for an extended period, this should also be viewed as misbehavior. If the monitor is not maintaining a copy of the batch state, it skips saving the assertions.</t>
        <t><xref target="RFC6962"/> additionally defines the role of auditor, which validates that Signed Certificate Timestamps (SCTs) and Signed Tree Heads (STHs) in Certificate Transparency are correct. There is no analog to SCTs in this document. The signed window structure (<xref target="signing"/>) is analogous to an STH, but consistency is checked simply by ensuring overlapping tree heads match, so this document does not define this as an explicit role. If two inconsistent signed windows are ever observed from a Merkle Tree CA, this should be viewed as misbehavior on the part of the CA.</t>
      </section>
    </section>
    <section anchor="publishing">
      <name>HTTP Interface</name>
      <t>[[TODO: This section hasn't been written yet. For now, this is just an informal sketch. The real text will need to define request/response formats more precisely, with MIME types, etc.]]</t>
      <t>CAs and transparency services publish state over an HTTP <xref target="RFC9110"/> interface described below.</t>
      <t>CAs and any components of the transparency service that maintain window information implement the following interfaces:</t>
      <ul spacing="normal">
        <li>
          <tt>GET {prefix}/latest</tt> returns the latest batch number.</li>
        <li>
          <tt>GET {prefix}/window/latest</tt> returns the Window structure and signature (see <xref target="signing"/>) for the latest batch number.</li>
        <li>
          <tt>GET {prefix}/window/{number}</tt> returns the Window structure and signature (see <xref target="signing"/>) for batch <tt>number</tt>, if it is in the "issued" state, and a 404 error otherwise.</li>
        <li>
          <tt>GET {prefix}/batch/{number}/info</tt> returns the window signature and tree head for batch <tt>number</tt>, if batch <tt>number</tt> is in the "issued" state, and a 404 error otherwise.</li>
      </ul>
      <t>CAs and any components of the transparency service that mirror the full assertion list additionally implement the following interface:</t>
      <ul spacing="normal">
        <li>
          <tt>GET {prefix}/batch/{number}/assertions</tt> returns the assertion list for batch <tt>number</tt>, if <tt>number</tt> is in the issued state, and a 404 error otherwise.</li>
      </ul>
      <t>If the interface is implemented by a distributed service, with multiple servers, updates may propagate to servers at different times, which will cause temporary inconsistency. This inconsistency can impede this system's transparency goals (<xref target="transparency"/>).</t>
      <t>Services implementing this interface SHOULD wait until batch state is fully propagated to all servers before updating the latest batch number. That is, if any server returns a latest batch number of N in either of the first two HTTP endpoints, batch numbers N and below SHOULD be available under the last three batch-number-specific HTTP endpoints in all servers. If this property does not hold at any time, it is considered a service unavailability.</t>
      <t>Individual servers in a service MAY return different latest batch numbers. Individual servers MAY also differ on whether a batch number has a response available or return a 404 error. Provided the above consistency property holds, these two inconsistencies do not constitute service unavailability.</t>
      <t><xref target="ts-and-ca-availability"/> discusses service availability requirements.</t>
      <t>[[TODO: Once a batch has expired, do we allow a CA to stop publishing it? The transparency service can already log it for as long, or as little, as it wishes. We effectively have CT log temporal sharding built into the system.]]</t>
      <t>[[TODO: If we have the window endpoint, do we still need to separate "info" and "assertions"?]]</t>
    </section>
    <section anchor="acme-extensions">
      <name>ACME Extensions</name>
      <t>[[TODO: This section hasn't been written yet. Instead, what follows is an informal sketch and design discussion.]]</t>
      <t>See <xref target="agility"/> for the overall model this should target.</t>
      <t>Define ACME <xref target="RFC8555"/> extensions for requesting these. We probably need to add a new field in the Order object (<xref section="9.7.2" sectionFormat="of" target="RFC8555"/> to request this. Also a new MIME type for the thing being fetched <xref section="7.4.2" sectionFormat="of" target="RFC8555"/>. This format should capture additional metadata per <xref target="trust-anchor-negotiation"/>.</t>
      <t>Otherwise, the long issuance time is already modeled by the allowance for the "processing" state taking a while. The ACME server should use the Retry-After header so the subscriber knows when to query again.</t>
      <t>Also use <xref target="I-D.draft-ietf-acme-ari"/> to move the renewal logic in <xref target="rolling-renewal"/> from the subscriber to the ACME server.</t>
      <t>Per <xref target="agility"/>, a subscriber may need multiple certificates. That should be a service provided by the ACME server. Come up with a scheme to mint multiple orders from a single newOrder request, or request multiple certificates off of a single order. (Note different certificates may have different processing time. It seems an ACME order only transitions from the "processing" state to the "valid" state once, so the former is probably better.)</t>
      <t>We should also define a certificate request format, though it is broadly just reusing the Assertion structure. If the CA wishes to check possession of the private key, it'll need to come with a signature or do some online operation (e.g. if it's a KEM key). This is inherently protocol-specific, because the mechanism needs to coexist with the target protocol. (Signed CSRs implicitly assume the target protocol's signature payloads cannot overlap with that of a CSR.)</t>
    </section>
    <section anchor="tls-protocol">
      <name>Use in TLS</name>
      <section anchor="tls-subject-info">
        <name>TLS Subjects</name>
        <t>This section describes the SubjectType for use with TLS <xref target="RFC8446"/>. The SubjectType value is <tt>tls</tt>, and the <tt>subject_info</tt> field contains a TLSSubjectInfo structure, defined below:</t>
        <artwork><![CDATA[
enum { tls(0), (2^16-1) } SubjectType;

struct {
    SignatureScheme signature;
    opaque public_key<1..2^24-1>;
    /* TODO: Should there be an extension list? */
} TLSSubjectInfo;
]]></artwork>
        <t>A TLSSubjectInfo describes a TLS signing key. The <tt>signature</tt> field is a SignatureScheme <xref section="4.2.3" sectionFormat="of" target="RFC8446"/> value describing the key type and signature algorithm it uses for CertificateVerify.</t>
        <t>The <tt>public_key</tt> field contains the subscriber's public key. The encoding is determined by the <tt>signature</tt> field as follows:</t>
        <dl>
          <dt>RSASSA-PSS algorithms:</dt>
          <dd>
            <t>The public key is an RSAPublicKey structure <xref target="RFC8017"/> encoded in DER <xref target="X.690"/>. BER encodings which are not DER MUST be rejected.</t>
          </dd>
          <dt>ECDSA algorithms:</dt>
          <dd>
            <t>The public key is a UncompressedPointRepresentation structure defined in <xref section="4.2.8.2" sectionFormat="of" target="RFC8446"/>, using the curve specified by the SignatureScheme.</t>
          </dd>
          <dt>EdDSA algorithms:</dt>
          <dd>
            <t>The public key is the byte string encoding defined in <xref target="RFC8032"/></t>
          </dd>
        </dl>
        <t>This document does not define the public key format for other algorithms. In order for a SignatureScheme to be usable with TLSSubjectInfo, this format must be defined in a corresponding document.</t>
        <t>[[TODO: If other schemes get defined before this document is done, add them here. After that, it's on the other schemes to do it.]]</t>
      </section>
      <section anchor="tls-certificate-type">
        <name>The Bikeshed Certificate Type</name>
        <t>[[TODO: Bikeshed is a placeholder name until someone comes up with a better one.]]</t>
        <t>This section defines the <tt>Bikeshed</tt> TLS certificate type, which may be negotiated with the <tt>client_certificate_type</tt>, <tt>server_certificate_type</tt> <xref target="RFC7250"/>, or <tt>cert_type</tt> <xref target="RFC6091"/> extensions. It can only be negotiated with TLS 1.3 or later. Servers MUST NOT negotiate it in TLS 1.2 or below. If the client receives a ServerHello that negotiates it in TLS 1.2 or below, it MUST abort the connection with an <tt>illegal_parameter</tt> alert.</t>
        <t>[[TODO: None of these three extensions is quite right for client certificates because the negotiation isn't symmetric. See discussion in <xref target="cert-type-problems"/>. We may need to define a third one.]]</t>
        <t>When negotiated, the CertificateEntry structure in the Certificate message is updated as follows:</t>
        <artwork><![CDATA[
enum { Bikeshed(TBD), (255) } CertificateType;

struct {
    select (certificate_type) {
        // certificate type defined in this document.
        case Bikeshed:
            BikeshedCertificate certificate;

        case RawPublicKey:
            /* From RFC 7250 ASN.1_subjectPublicKeyInfo */
            opaque ASN1_subjectPublicKeyInfo<1..2^24-1>;

        case X509:
            opaque cert_data<1..2^24-1>;

        /* Additional certificate types based on the
          "TLS Certificate Types" registry */
    };
    Extension extensions<0..2^16-1>;
} CertificateEntry;
]]></artwork>
        <t>The <tt>subject_type</tt> field in the certificate MUST be of type <tt>tls</tt> (<xref target="tls-subject-info"/>). The CertificateVerify message is computed and processed as in <xref target="RFC8446"/>, with the following modifications:</t>
        <ul spacing="normal">
          <li>The signature is computed and verified with the key described in the TLSSubjectInfo. The relying party uses the key decoded from the <tt>public_key</tt> field, and the subscriber uses the corresponding private key.</li>
          <li>The SignatureScheme in the CertificateVerify MUST match the <tt>signature</tt> field in the TLSSubjectInfo.</li>
        </ul>
        <t>The second modification differs from <xref target="RFC8446"/>. Where <xref target="RFC8446"/> allowed an id-rsaEncryption key to sign both <tt>rsa_pss_rsae_sha256</tt> and <tt>rsa_pss_rsae_sha384</tt>, TLSSubjectInfo keys are specific to a single algorithm. Future documents MAY relax this restriction for a new SignatureScheme, provided it was designed to be used concurrently with the value in TLSSubjectInfo. In particular, the underlying signature algorithm MUST match, and there MUST be appropriate domain separation between the two modes. For example, <xref target="I-D.draft-ietf-tls-batch-signing"/> defines new SignatureSchemes, but the same keypair can be safely used with one of the new values and the corresponding base SignatureScheme.</t>
        <t>If this certificate type is used for either the client or server certificate, the ALPN <xref target="RFC7301"/> extension MUST be negotiated. If no application protocol is selected, endpoints MUST close the connection with a <tt>no_application_protocol</tt> alert.</t>
        <t>[[TODO: Suppose we wanted to introduce a second SubjectType for TLS, either to add new fields or capture a new kind of key. That would need to be negotiated. We could use another extension, but defining a new certificate type seems most natural. That suggests this certificate type isn't about negotiating BikeshedCertificate in general, but specifically SubjectType.tls and TLSSubjectInfo. So perhaps the certificate type should be TLSSubjectInfo or BikeshedTLS.]]</t>
      </section>
      <section anchor="tls-trust-anchors-extension">
        <name>The Trust Anchors Extension</name>
        <t>The TLS <tt>trust_anchors</tt> extension which implements certificate negotiation (see <xref target="trust-anchor-negotiation"/>). The extension body is a TrustAnchors structure, defined below:</t>
        <artwork><![CDATA[
enum { trust_anchors(TBD), (2^16-1) } ExtensionType;

struct {
    TrustAnchor trust_anchors<1..2^16-1>;
} TrustAnchors;
]]></artwork>
        <t>This extension carries the relying party's trust anchor set, computed as described in <xref target="trust-anchor-negotiation"/>. When the client is the relying party for a server certificate, the extension is sent in the ClientHello. When the server is the relying party for a client certificate, the extension is sent in the CertificateRequest message. This extension is only defined for use with TLS 1.3 and later. It MUST be ignored when negotiating TLS 1.2.</t>
        <t>When the subscriber receives this extension, selects a certificate from its certificate set, as described in <xref target="trust-anchor-negotiation"/>. If none match, it does not negotiate the Bikeshed type and selects a different certificate type. [[TODO: This last step does not work. See <xref target="cert-type-problems"/>]]</t>
      </section>
      <section anchor="cert-type-problems">
        <name>Certificate Type Negotiation</name>
        <t>[[TODO: We may need a new certificate types extension, either in this document or a separate one. For now, this section just informally describes the problem.]]</t>
        <t>The server certificate type is negotiated as follows:</t>
        <ul spacing="normal">
          <li>The client sends <tt>server_certificate_type</tt> in ClientHello with accepted certificate types.</li>
          <li>The server selects a certificate type to use, It sends it in <tt>server_certificate_type</tt> in EncryptedExtensions.</li>
          <li>The server sends a certificate of the server-selected type in Certificate.</li>
        </ul>
        <t>This model allows the server to select its certificate type based on not just <tt>server_certificate_type</tt>, but also other ClientHello extensions like <tt>certificate_authorities</tt> or <tt>trust_anchors</tt> (<xref target="tls-trust-anchors-extension"/>). In particular, if there is no match in <tt>trust_anchors</tt>, it can fallback to X.509, rather than staying within the realm of BikeshedCertificate.</t>
        <t>However, the client certificate type is negotiated differently:</t>
        <ul spacing="normal">
          <li>The client sends <tt>client_certificate_type</tt> in ClientHello with certificates it can send</li>
          <li>The server selects a certificate type to request. It sends it in <tt>client_certificate_type</tt> in EncryptedExtensions.</li>
          <li>The server requests a client certificate in CertificateRequest</li>
          <li>The client sends a certificate of the server-selected type in Certificate.</li>
        </ul>
        <t>Here, the client (subscriber) does not select the certificate type. The server (relying party) does. Moreover, this selection is made before the client can see the server's <tt>certificate_authorities</tt> or <tt>trust_anchors</tt> value, in CertificateRequest. There is no opportunity for the client to fallback to X.509.</t>
        <t>The <tt>cert_types</tt> extension behaves similarly, but additionally forces the client and server types to match. These extensions were defined when TLS 1.2 was current, but TLS 1.3 aligns the client and server certificate negotiation. Most certificate negotiation extensions, such as <tt>certificate_authorities</tt> or <tt>compress_certificate</tt> <xref target="RFC8879"/> can be offered in either direction, in ClientHello or CertificateRequest. They are then symmetrically accepted in the Certificate message.</t>
        <t>A more corresponding TLS 1.3 negotiation would be to defer the client certificate type negotiation to CertificateRequest, with the server offering the supported certificate types. The client can then make its selection, taking other CertificateRequest extensions into account, and indicate its selection in the Certificate message.</t>
        <t>Two possible design sketches:</t>
        <section anchor="indicate-in-first-certificateentry">
          <name>Indicate in First CertificateEntry</name>
          <t>We can have the subscriber indicate the certificate type in an extension of the first CertificateEntry. One challenge is the extensions come after the certificate, so the relying party must seek to the <tt>extensions</tt> field independent of the certificate type. Thus all certificate types must be updated to use a consistent <tt>opaque cert_data&lt;0..2^24&gt;</tt> syntax, with any type-specific structures embedded inside.</t>
          <t>RawPublicKey and X509 already meet this requirement. OpenPGP and Bikeshed need an extra length prefix.</t>
        </section>
        <section anchor="change-certificate-syntax">
          <name>Change Certificate Syntax</name>
          <t>Alternatively, we can negotiate an extension that changes the syntax to Certificate to:</t>
          <artwork><![CDATA[
struct {
    CertificateType certificate_type;
    opaque certificate_request_context<0..2^8-1>;
    CertificateEntry certificate_list<0..2^24-1>;
} Certificate;
]]></artwork>
          <t>The negotiation can be:</t>
          <ul spacing="normal">
            <li>Client sends its accepted certificate types in ClientHello. Offering this new extension also signatures it is willing to accept the new message format. Unlike the existing extensions, an X.509-only client still sends the extension with just X509 in the list.</li>
            <li>Server, if it implements the new syntax, acknowledges the syntax change with an empty extension in EncryptedExtensions. (It doesn't indicate its selection yet.)</li>
            <li>If both of the above happen, Certificate's syntax has changed. Server indicates its selection with the <tt>certificate_type</tt> field</li>
            <li>Server can also send this extension in CertificateRequest to offer non-X.509 certificate types</li>
            <li>Client likewise indicates its selection with the <tt>certificate_type</tt> field.</li>
          </ul>
          <t>This is a bit cleaner to parse, but the negotiation is more complex.</t>
        </section>
      </section>
    </section>
    <section anchor="deployment-considerations">
      <name>Deployment Considerations</name>
      <section anchor="fallback-mechanisms">
        <name>Fallback Mechanisms</name>
        <t>Subscribers using Merkle Tree certificates SHOULD additionally provision certificates from another PKI mechanism, such as X.509. This ensures the service remains available to relying parties that have not recently fetched window updates, or lack connectivity to the transparency service.</t>
        <t>If the pipeline of updates from the CA to the transparency service to relying parties is interrupted, certificate issuance may halt, or newly issued certificates may no longer be usable. When this happens, the optimization in this document may fail, but fallback mechanisms ensure services remain available.</t>
      </section>
      <section anchor="rolling-renewal">
        <name>Rolling Renewal</name>
        <t>When a subscriber requests a certificate, the CA cannot fulfill the request until the next batch is ready. Once published, the certificate will not be accepted by relying parties until the batch state is mirrored by their respective transparency services, then pushed to relying parties.</t>
        <t>To account for this, subscribers SHOULD request a new Merkle Tree certificate significantly before the previous Merkle Tree certificate expires. Renewing halfway into the previous certificate's lifetime is RECOMMENDED. Subscribers additionally SHOULD retain both the new and old certificates in the certificate set until the old certificate expires. As the new tree hash is delivered to relying parties, certificate negotiation will transition relying parties to the new certificate, while retaining the old certificate for clients that are not yet updated.</t>
      </section>
      <section anchor="new-keys">
        <name>Deploying New Keys</name>
        <t>Merkle Tree certificates' issuance delays make them unsuitable when rapidly deploying a new service and reacting to key compromise.</t>
        <t>When a new service is provisioned with a brand new Merkle Tree certificate, relying parties will not yet have received a window containing this certificate from the transparency service and can therefore not validate this certificate until receiving them. The subscriber SHOULD, in parallel, also provision a certificate using another PKI mechanism (e.g. X.509). Certificate negotiation will then switch over to serving the Merkle Tree certificate as relying parties are updated.</t>
        <t>If the service is performing a routine key rotation, and not in response to a known compromise, the subscriber MAY use the process described in <xref target="rolling-renewal"/>, allowing certificate negotiation to also switch the private key used. 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 available. Instead, the service SHOULD immediately discard the old key and request a more immediate issuance mechanism. As in the initial deployment case, it SHOULD request a Merkle Tree certificate in parallel, which will restore the size optimization over time.</t>
      </section>
      <section anchor="agility">
        <name>Agility and Extensibility</name>
        <t>Beyond negotiating Merkle Tree certificates, certificate negotiation can also handle variations in which CAs a relying party trusts. With a single certificate, the subscriber is limited to the intersection of these sets. Instead, <xref target="trust-anchor-negotiation"/> allows a subscriber to maintain multiple certificates that, together, encompass the relying parties it supports.</t>
        <t>This improves trust agility. If a relying party distrusts a CA, a subscriber can include certificates from both the distrusted CA and a replacement CA. This allows the distrusting relying party to request the replacement CA, while existing relying parties, which may not trust the replacement CA, can continue to use the distrusted CA. Likewise, an entity operating a CA may deploy a second CA to rotate key material. The certificate set can include both the new and old CA to ensure a smooth transition.</t>
        <t>Moreover, <xref target="trust-anchor-negotiation"/> allows subscribers to select certificates without recognizing either the CA or the ProofType. Only the Assertion structure directly impacts the application protocol on the subscriber's side. This allows for a more flexible deployment model where ACME servers, or other certificate management services, assemble the certificate set:</t>
        <t>Instead of each subscriber being individually configured with the CAs to use, the ACME server can provide multiple certificates, covering all supported relying parties. As relying party requirements evolve, CAs rotate keys, or new ProofTypes are designed, the ACME server is updated to incorporate these into certificate sets. As the PKI evolves, subscribers are automatically provisioned appropriately.</t>
      </section>
      <section anchor="ts-and-ca-availability">
        <name>Batch State Availability</name>
        <t>CAs and transparency services serve an HTTP interface defined in <xref target="publishing"/>. This service may be temporarily unavailable, either from service outage or if the service does not meet the consistency condition mid-update. Exact availability requirements for these services are out of scope for this document, but this section provides some general guidance.</t>
        <t>If the CA's interface becomes unavailable, the transparency service will be unavailable to update. This will prevent relying parties from accepting new certificates, so subscribers will need to use fallback mechanisms per <xref target="fallback-mechanisms"/>. This does not compromise transparency goals per <xref target="misbehaving-ca"/>. However, a CA which is persistently unavailable may not offer sufficient benefit to be used by subscribers or trusted by relying parties.</t>
        <t>However, if the transparency service's interface becomes unavailable, monitors will be unable to check for unauthorized certificates. This does compromise transparency goals. Mirrors of the batch state partially mitigate this, but service unavailability may prevent mirrors from replicating a batch that relying parties accept.</t>
      </section>
      <section anchor="trust-anchor-list-size">
        <name>Trust Anchor List Size</name>
        <t><xref target="trust-anchor-negotiation"/> and <xref target="tls-trust-anchors-extension"/> involve the relying party sending a list of TrustAnchor values to aid the subscriber in selecting certificates. A sufficiently large list may be impractical to fit in a ClientHello and require alternate negotiation mechanisms or a different PKI structure. To reduce overhead, <tt>issuer_id</tt> values SHOULD be short, no more than eight bytes long.</t>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>The negotiation mechanism described in <xref target="trust-anchor-negotiation"/> and <xref target="tls-trust-anchors-extension"/> presumes the relying party's trust anchor list is not sensitive. In particular, information sent in a TLS ClientHello is unencrypted without the Encrypted ClientHello extension <xref target="I-D.draft-ietf-tls-esni"/>.</t>
      <t>This mechanism SHOULD NOT be used in contexts where the list reveals information about an individual user. For example, a web browser may support both a common set of trust anchors configured by the browser vendor, and a set of user-specified trust anchors. The common trust anchors would only reveal which browser is used, while the user-specified trust anchors may reveal information about the user. In this case, the trust anchor list SHOULD be limited to the common trust anchors.</t>
      <t>Additionally, even if all users are served the same updates, individual users may fetch from the transparency service at different times, resulting in variation in the trust anchor list. Like other behavior changes triggered by updates, this may, when combined with other sources of user variation, lead to a fingerprinting attack <xref target="RFC6973"/>.</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. This is achieved by the following two properties:</t>
        <ul spacing="normal">
          <li>The relying party MUST NOT accept any window that was not authenticated as coming from the CA.</li>
          <li>For any tree head computed from a list of assertions as in <xref target="building-tree"/>, it is computationally infeasible to construct an assertion not this list, and some inclusion proof, such that the procedure in <xref target="verifying"/> succeeds.</li>
        </ul>
        <t><xref target="transparency-service"/> discusses achieving the first property.</t>
        <t>The second property is achieved by using a collision-resistant hash in the Merkle Tree construction. The <tt>HashEmpty</tt>, <tt>HashNode</tt>, and <tt>HashAssertion</tt> functions use distinct initial bytes when calling the hash function, to achieve domain separation.</t>
      </section>
      <section anchor="cross-protocol">
        <name>Cross-protocol attacks</name>
        <t>Using the same key material in different, incompatible ways risks cross-protocol attacks when the two uses overlap. To avoid this, <xref target="parameters"/> forbids the reuse of Merkle Tree CA private keys in another protocol.</t>
        <t>To reduce the risk of attacks if this guidance is not followed, the LabeledWindow structure defined in <xref target="signing"/> includes a label string, and the CA's <tt>issuer_id</tt>. Extensions of this protocol MAY be defined which reuse the keys, but any that do MUST use a different label string and analyze the security of the two uses concurrently.</t>
        <t>Likewise, key material included in an assertion (<xref target="assertions"/>) MUST NOT be used in another protocol, unless that protocol was designed to be used concurrently with the original purpose. The Assertion structure is designed to facilitate this. Where X.509 uses an optional key usage extension (see <xref section="4.2.1.3" sectionFormat="of" target="RFC5280"/>) and extended key usage extension (see <xref section="4.2.1.12" sectionFormat="of" target="RFC5280"/>) to specify key usage, an Assertion is always defined first by a SubjectType value. Subjects cannot be constructed without first specifying the type, and subjects of different types cannot be accidentally interpreted as each other.</t>
        <t>The TLSSubjectInfo structure additionally protects against cross-protocol attacks in two further ways:</t>
        <ul spacing="normal">
          <li>A TLSSubjectInfo specifies the key type not with a SubjectPublicKeyInfo <xref section="4.1.2.7" sectionFormat="of" target="RFC5280"/> object identifier, but with a SignatureScheme structure. Where <xref target="RFC8446"/> allows an id-rsaEncryption key to sign both <tt>rsa_pss_rsae_sha256</tt> and <tt>rsa_pss_rsae_sha384</tt>, this protocol specifies the full signature algorithm parameters.</li>
          <li>To mitigate cross-protocol attacks at the application protocol <xref target="ALPACA"/>, this document requires connections using it to negotiate the ALPN <xref target="RFC7301"/> extension.</li>
        </ul>
      </section>
      <section anchor="revocation">
        <name>Revocation</name>
        <t>Merkle Tree certificates avoid sending an additional signature for OCSP responses by using a short-lived certificates model. Per <xref target="parameters"/>,  Merkle Tree CA's certificate lifetime MUST be set such that certificate expiration replaces revocation. Existing revocation mechanisms like CRLs and OCSP are themselves short-lived, signed messages, so a low enough certificate lifetime provides equivalent revocation capability.</t>
        <t>Relying parties with additional sources of revocation such as <xref target="CRLite"/> or <xref target="CRLSets"/> SHOULD provide a mechanism to express revoked assertions in such systems, in order to opportunistically revoke assertions in up-to-date relying parties sooner. It is expected that, in most deployments, relying parties can fetch this revocation data and Merkle Tree CA windows from the same service.</t>
        <t>[[TODO: Is it worth defining an API for Merkle Tree CAs to publish a revocation list? That would allow automatically populating CRLite and CRLSets. Maybe that's a separate document.]]</t>
      </section>
      <section anchor="transparency">
        <name>Transparency</name>
        <t>The transparency service does not prevent unauthorized certificates, but it aims to provide comparable security properties to Certificate Transparency <xref target="RFC6962"/>. If a subscriber presents an acceptable Merkle Tree certificate to a relying party, the relying party should have assurance it was published in some form that monitors and, in particular, the subject of the certificate will be able to notice.</t>
        <section anchor="unauthorized-certificates">
          <name>Unauthorized Certificates</name>
          <t>If a Merkle Tree certificate was unauthorized, but seen and mirrored by the transparency service, the relying party may accept it. However, provided the transparency service is operating correctly, this will be detectable. Unlike Certificate Transparency, Merkle Tree certificates achieve this property without a Maximum Merge Delay (MMD). Certificates are fully mirrored by the transparency service before the relying party will accept them. However, this comes at the cost of immediate issuance, as described in <xref target="deployment-considerations"/>.</t>
          <t>If the unauthorized certificate was not seen by the transparency service, the relying party will reject it. In order to accept a certificate, the relying party must have been provisioned with the corresponding tree head. A correctly operating transparency service will never present relying parties with tree heads unless the corresponding certificates have all been mirrored.</t>
        </section>
        <section anchor="misbehaving-ca">
          <name>Misbehaving Certification Authority</name>
          <t>Although CAs in this document publish structures similar to a Certificate Transparency log, they do not need to function correctly to provide transparency.</t>
          <t>A CA could violate the append-only property of its batch state, and present differing views to different parties. Unlike a misbehaving Certificate Transparency log, this would not compromise transparency. Whichever view is presented to the transparency service at the time of updates determines the canonical batch state for both relying parties and monitors. Certificates that are consistent with only the other view will be rejected by relying parties. If the transparency service observes both views, the procedures in <xref target="transparency-service"/> will prevent the new, conflicting view from overwriting the originally saved view. Instead, the update process will fail and further certificates will not be accepted.</t>
          <t>A CA could also sign a window containing an unauthorized certificate and feign an outage when asked to serve the corresponding assertions. However, if the assertion list was never mirrored by the transparency service, the tree head will never be pushed to relying parties, so the relying party will reject the certificate. If the assertion list was mirrored, the unauthorized certificate continues to be available to monitors.</t>
          <t>As a consequence, monitors MUST use the transparency service's view of the batch state when monitoring for unauthorized certificates. If the transparency service is a collection of mirrors, as in <xref target="single-update-multiple-mirrors"/> or <xref target="multiple-transparency-services"/>, monitors MUST monitor each mirror. Monitors MAY optionally monitor the CA directly, but this alone is not sufficient to avoid missing certificates.</t>
        </section>
        <section anchor="misbehaving-transparency-service">
          <name>Misbehaving Transparency Service</name>
          <t>This document divides CA and transparency service responsibilities differently from how <xref target="RFC6962"/> divides CA and Certificate Transparency log. The previous section describes the implications of a failure to meet the log-like responsibilities of a CA, provided the transparency service is operating correctly.</t>
          <t>For the remainder of log-like responsibilities, the relying party trusts its choice of transparency service deployment to ensure the windows it uses are consistent with what monitors observe. Otherwise, a malicious transparency service and CA could collude to cause a relying party to accept an unauthorized certificate not visible to monitors. Where a single trusted service is not available, the <xref target="transparency-service"/> discusses possible deployment structures where the transparency service is a collection of mirrors, all or most of whom must collude instead.</t>
        </section>
      </section>
      <section anchor="security-of-fallback-mechanisms">
        <name>Security of Fallback Mechanisms</name>
        <t>Merkle Tree certificates are intended to be used as an optimization over other PKI mechanisms. More generally, <xref target="trust-anchor-negotiation"/> and <xref target="agility"/> allow relying parties to support many kinds of certificates, to meet different goals. This document discusses the security properties of Merkle Tree certificates, but the overall system's security properties depend on all of a relying party's trust anchors.</t>
        <t>In particular, in relying parties that require a publicly auditable PKI, the supported fallback mechanisms must also provide a transparency property, either with Certificate Transparency <xref target="RFC6962"/> or another mechanism.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA is requested to create the following entry in the TLS ExtensionType registry <xref target="RFC8447"/>. The "Reference" column should be set to this document.</t>
      <table>
        <name>Additions to the TLS ExtensionType Registry</name>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">Extension Name</th>
            <th align="left">TLS 1.3</th>
            <th align="left">DTLS-Only</th>
            <th align="left">Recommended</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">TBD</td>
            <td align="left">
              <tt>trust_anchors</tt></td>
            <td align="left">CH, CR</td>
            <td align="left">N</td>
            <td align="left">TBD</td>
          </tr>
        </tbody>
      </table>
      <t>IANA is requested to create the following entry in the TLS Certificate Types registry <xref target="RFC8447"/>. The "Reference" column should be set to this document.</t>
      <table>
        <name>Additions to the TLS Certificate Types Registry</name>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">Name</th>
            <th align="left">Recommended</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">TBD</td>
            <td align="left">
              <tt>Bikeshed</tt></td>
            <td align="left">TBD</td>
          </tr>
        </tbody>
      </table>
      <t>TODO: Define registries for the enums introduced in this document:</t>
      <ul spacing="normal">
        <li>SubjectType</li>
        <li>ClaimType</li>
        <li>ProofType</li>
      </ul>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="SHS">
          <front>
            <title>Secure Hash Standard</title>
            <author fullname="Quynh H. Dang" initials="Q." surname="Dang">
              <organization/>
            </author>
            <date month="July" year="2015"/>
          </front>
          <seriesInfo name="National Institute of Standards and Technology" value="report"/>
          <seriesInfo name="DOI" value="10.6028/nist.fips.180-4"/>
        </reference>
        <reference anchor="RFC1034">
          <front>
            <title>Domain names - concepts and facilities</title>
            <author fullname="P. Mockapetris" initials="P." surname="Mockapetris">
              <organization/>
            </author>
            <date month="November" year="1987"/>
            <abstract>
              <t>This RFC is the revised basic definition of The Domain Name System.  It obsoletes RFC-882.  This memo describes the domain style names and their used for host address look up and electronic mail forwarding.  It discusses the clients and servers in the domain name system and the protocol used between them.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="13"/>
          <seriesInfo name="RFC" value="1034"/>
          <seriesInfo name="DOI" value="10.17487/RFC1034"/>
        </reference>
        <reference anchor="RFC1123">
          <front>
            <title>Requirements for Internet Hosts - Application and Support</title>
            <author fullname="R. Braden" initials="R." role="editor" surname="Braden">
              <organization/>
            </author>
            <date month="October" year="1989"/>
            <abstract>
              <t>This RFC is an official specification for the Internet community.  It incorporates by reference, amends, corrects, and supplements the primary protocol standards documents relating to hosts.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="3"/>
          <seriesInfo name="RFC" value="1123"/>
          <seriesInfo name="DOI" value="10.17487/RFC1123"/>
        </reference>
        <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="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <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="RFC8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson">
              <organization/>
            </author>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara">
              <organization/>
            </author>
            <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="RFC8555">
          <front>
            <title>Automatic Certificate Management Environment (ACME)</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes">
              <organization/>
            </author>
            <author fullname="J. Hoffman-Andrews" initials="J." surname="Hoffman-Andrews">
              <organization/>
            </author>
            <author fullname="D. McCarney" initials="D." surname="McCarney">
              <organization/>
            </author>
            <author fullname="J. Kasten" initials="J." surname="Kasten">
              <organization/>
            </author>
            <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="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <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="RFC5890">
          <front>
            <title>Internationalized Domain Names for Applications (IDNA): Definitions and Document Framework</title>
            <author fullname="J. Klensin" initials="J." surname="Klensin">
              <organization/>
            </author>
            <date month="August" year="2010"/>
            <abstract>
              <t>This document is one of a collection that, together, describe the protocol and usage context for a revision of Internationalized Domain Names for Applications (IDNA), superseding the earlier version.  It describes the document collection and provides definitions and other material that are common to the set.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5890"/>
          <seriesInfo name="DOI" value="10.17487/RFC5890"/>
        </reference>
        <reference anchor="I-D.draft-ietf-uta-rfc6125bis">
          <front>
            <title>Service Identity in TLS</title>
            <author fullname="Peter Saint-Andre" initials="P." surname="Saint-Andre">
              <organization>independent</organization>
            </author>
            <author fullname="Rich Salz" initials="R." surname="Salz">
              <organization>Akamai Technologies</organization>
            </author>
            <date day="2" month="March" year="2023"/>
            <abstract>
              <t>   Many application technologies enable secure communication between two
   entities by means of Transport Layer Security (TLS) with Internet
   Public Key Infrastructure Using X.509 (PKIX) certificates.  This
   document specifies procedures for representing and verifying the
   identity of application services in such interactions.

   This document obsoletes RFC 6125.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-uta-rfc6125bis-11"/>
        </reference>
        <reference anchor="RFC8017">
          <front>
            <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
            <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty">
              <organization/>
            </author>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski">
              <organization/>
            </author>
            <author fullname="J. Jonsson" initials="J." surname="Jonsson">
              <organization/>
            </author>
            <author fullname="A. Rusch" initials="A." surname="Rusch">
              <organization/>
            </author>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document provides recommendations for the implementation of public-key cryptography based on the RSA algorithm, covering cryptographic primitives, encryption schemes, signature schemes with appendix, and ASN.1 syntax for representing keys and for identifying the schemes.</t>
              <t>This document represents a republication of PKCS #1 v2.2 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series.  By publishing this RFC, change control is transferred to the IETF.</t>
              <t>This document also obsoletes RFC 3447.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8017"/>
          <seriesInfo name="DOI" value="10.17487/RFC8017"/>
        </reference>
        <reference anchor="RFC7250">
          <front>
            <title>Using Raw Public Keys in Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)</title>
            <author fullname="P. Wouters" initials="P." role="editor" surname="Wouters">
              <organization/>
            </author>
            <author fullname="H. Tschofenig" initials="H." role="editor" surname="Tschofenig">
              <organization/>
            </author>
            <author fullname="J. Gilmore" initials="J." surname="Gilmore">
              <organization/>
            </author>
            <author fullname="S. Weiler" initials="S." surname="Weiler">
              <organization/>
            </author>
            <author fullname="T. Kivinen" initials="T." surname="Kivinen">
              <organization/>
            </author>
            <date month="June" year="2014"/>
            <abstract>
              <t>This document specifies a new certificate type and two TLS extensions for exchanging raw public keys in Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS).  The new certificate type allows raw public keys to be used for authentication.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7250"/>
          <seriesInfo name="DOI" value="10.17487/RFC7250"/>
        </reference>
        <reference anchor="RFC6091">
          <front>
            <title>Using OpenPGP Keys for Transport Layer Security (TLS) Authentication</title>
            <author fullname="N. Mavrogiannopoulos" initials="N." surname="Mavrogiannopoulos">
              <organization/>
            </author>
            <author fullname="D. Gillmor" initials="D." surname="Gillmor">
              <organization/>
            </author>
            <date month="February" year="2011"/>
            <abstract>
              <t>This memo defines Transport Layer Security (TLS) extensions and associated semantics that allow clients and servers to negotiate the use of OpenPGP certificates for a TLS session, and specifies how to transport OpenPGP certificates via TLS.  It also defines the registry for non-X.509 certificate types.  This document is not an Internet  Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6091"/>
          <seriesInfo name="DOI" value="10.17487/RFC6091"/>
        </reference>
        <reference anchor="RFC7301">
          <front>
            <title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
            <author fullname="S. Friedl" initials="S." surname="Friedl">
              <organization/>
            </author>
            <author fullname="A. Popov" initials="A." surname="Popov">
              <organization/>
            </author>
            <author fullname="A. Langley" initials="A." surname="Langley">
              <organization/>
            </author>
            <author fullname="E. Stephan" initials="E." surname="Stephan">
              <organization/>
            </author>
            <date month="July" year="2014"/>
            <abstract>
              <t>This document describes a Transport Layer Security (TLS) extension for application-layer protocol negotiation within the TLS handshake. For instances in which multiple application protocols are supported on the same TCP or UDP port, this extension allows the application layer to negotiate which protocol will be used within the TLS connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7301"/>
          <seriesInfo name="DOI" value="10.17487/RFC7301"/>
        </reference>
        <reference anchor="RFC8447">
          <front>
            <title>IANA Registry Updates for TLS and DTLS</title>
            <author fullname="J. Salowey" initials="J." surname="Salowey">
              <organization/>
            </author>
            <author fullname="S. Turner" initials="S." surname="Turner">
              <organization/>
            </author>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document describes a number of changes to TLS and DTLS IANA registries that range from adding notes to the registry all the way to changing the registration policy.  These changes were mostly motivated by WG review of the TLS- and DTLS-related registries undertaken as part of the TLS 1.3 development process.</t>
              <t>This document updates the following RFCs: 3749, 5077, 4680, 5246, 5705, 5878, 6520, and 7301.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8447"/>
          <seriesInfo name="DOI" value="10.17487/RFC8447"/>
        </reference>
      </references>
      <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="Dilithium" target="https://pq-crystals.org/dilithium/data/dilithium-specification-round3-20210208.pdf">
          <front>
            <title>CRYSTALS-Dilithium Algorithm Specifications and Supporting Documentation</title>
            <author initials="S." surname="Bai" fullname="Shi Bai">
              <organization/>
            </author>
            <author initials="L." surname="Ducas" fullname="Léo Ducas">
              <organization/>
            </author>
            <author initials="E." surname="Kiltz" fullname="Eike Kiltz">
              <organization/>
            </author>
            <author initials="T." surname="Lepoint" fullname="Tancrède Lepoint">
              <organization/>
            </author>
            <author initials="V." surname="Lyubashevsky" fullname="Vadim Lyubashevsky">
              <organization/>
            </author>
            <author initials="P." surname="Schwabe" fullname="Peter Schwabe">
              <organization/>
            </author>
            <author initials="G." surname="Seiler" fullname="Gregor Seiler">
              <organization/>
            </author>
            <author initials="D." surname="Stehlé" fullname="Damien Stehlé">
              <organization/>
            </author>
            <date year="2021" month="February" day="08"/>
          </front>
        </reference>
        <reference anchor="Falcon" target="https://falcon-sign.info/falcon.pdf">
          <front>
            <title>Falcon: Fast-Fourier Lattice-based Compact Signatures over NTRU</title>
            <author initials="P." surname="Fouque" fullname="Pierre-Alain Fouque">
              <organization/>
            </author>
            <author initials="J." surname="Hoffstein" fullname="Jeffrey Hoffstein">
              <organization/>
            </author>
            <author initials="P." surname="Kirchner" fullname="Paul Kirchner">
              <organization/>
            </author>
            <author initials="V." surname="Lyubashevsky" fullname="Vadim Lyubashevsky">
              <organization/>
            </author>
            <author initials="T." surname="Pornin" fullname="Thomas Pornin">
              <organization/>
            </author>
            <author initials="T." surname="Prest" fullname="Thomas Prest">
              <organization/>
            </author>
            <author initials="T." surname="Ricosset" fullname="Thomas Ricosset">
              <organization/>
            </author>
            <author initials="G." surname="Seiler" fullname="Gregor Seiler">
              <organization/>
            </author>
            <author initials="W." surname="Whyte" fullname="William Whyte">
              <organization/>
            </author>
            <author initials="Z." surname="Zhang" fullname="Zhenfei Zhang">
              <organization/>
            </author>
            <date year="2020" month="January" day="10"/>
          </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="ALPACA" target="https://www.usenix.org/conference/usenixsecurity21/presentation/brinkmann">
          <front>
            <title>ALPACA: Application Layer Protocol Confusion - Analyzing and Mitigating Cracks in TLS Authentication</title>
            <author initials="M." surname="Brinkmann" fullname="Marcus Brinkmann">
              <organization/>
            </author>
            <author initials="C." surname="Dresen" fullname="Christian Dresen">
              <organization/>
            </author>
            <author initials="R." surname="Merget" fullname="Robert Merget">
              <organization/>
            </author>
            <author initials="D." surname="Poddebniak" fullname="Damian Poddebniak">
              <organization/>
            </author>
            <author initials="J." surname="Müller" fullname="Jens Müller">
              <organization/>
            </author>
            <author initials="J." surname="Somorovsky" fullname="Juraj Somorovsky">
              <organization/>
            </author>
            <author initials="J." surname="Schwenk" fullname="Jörg Schwenk">
              <organization/>
            </author>
            <author initials="S." surname="Schinzel" fullname="Sebastian Schinzel">
              <organization/>
            </author>
            <date year="2021" month="August"/>
          </front>
        </reference>
        <reference anchor="CRLite">
          <front>
            <title>CRLite: A Scalable System for Pushing All TLS Revocations to All Browsers</title>
            <author fullname="James Larisch" initials="J." surname="Larisch">
              <organization/>
            </author>
            <author fullname="David Choffnes" initials="D." surname="Choffnes">
              <organization/>
            </author>
            <author fullname="Dave Levin" initials="D." surname="Levin">
              <organization/>
            </author>
            <author fullname="Bruce M. Maggs" initials="B." surname="Maggs">
              <organization/>
            </author>
            <author fullname="Alan Mislove" initials="A." surname="Mislove">
              <organization/>
            </author>
            <author fullname="Christo Wilson" initials="C." surname="Wilson">
              <organization/>
            </author>
            <date month="May" year="2017"/>
          </front>
          <seriesInfo name="2017 IEEE Symposium on Security and Privacy" value="(SP)"/>
          <seriesInfo name="DOI" value="10.1109/sp.2017.17"/>
        </reference>
        <reference anchor="CRLSets" target="https://www.chromium.org/Home/chromium-security/crlsets/">
          <front>
            <title>CRLSets</title>
            <author>
              <organization>Chromium</organization>
            </author>
            <date year="2022" month="August" day="04"/>
          </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="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">
              <organization/>
            </author>
            <author fullname="S. Santesson" initials="S." surname="Santesson">
              <organization/>
            </author>
            <author fullname="S. Farrell" initials="S." surname="Farrell">
              <organization/>
            </author>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen">
              <organization/>
            </author>
            <author fullname="R. Housley" initials="R." surname="Housley">
              <organization/>
            </author>
            <author fullname="W. Polk" initials="W." surname="Polk">
              <organization/>
            </author>
            <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="RFC6962">
          <front>
            <title>Certificate Transparency</title>
            <author fullname="B. Laurie" initials="B." surname="Laurie">
              <organization/>
            </author>
            <author fullname="A. Langley" initials="A." surname="Langley">
              <organization/>
            </author>
            <author fullname="E. Kasper" initials="E." surname="Kasper">
              <organization/>
            </author>
            <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="RFC6066">
          <front>
            <title>Transport Layer Security (TLS) Extensions: Extension Definitions</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd">
              <organization/>
            </author>
            <date month="January" year="2011"/>
            <abstract>
              <t>This document provides specifications for existing TLS extensions.  It is a companion document for RFC 5246, "The Transport Layer Security (TLS) Protocol Version 1.2".  The extensions specified are server_name, max_fragment_length, client_certificate_url, trusted_ca_keys, truncated_hmac, and status_request.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6066"/>
          <seriesInfo name="DOI" value="10.17487/RFC6066"/>
        </reference>
        <reference anchor="RFC6960">
          <front>
            <title>X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP</title>
            <author fullname="S. Santesson" initials="S." surname="Santesson">
              <organization/>
            </author>
            <author fullname="M. Myers" initials="M." surname="Myers">
              <organization/>
            </author>
            <author fullname="R. Ankney" initials="R." surname="Ankney">
              <organization/>
            </author>
            <author fullname="A. Malpani" initials="A." surname="Malpani">
              <organization/>
            </author>
            <author fullname="S. Galperin" initials="S." surname="Galperin">
              <organization/>
            </author>
            <author fullname="C. Adams" initials="C." surname="Adams">
              <organization/>
            </author>
            <date month="June" year="2013"/>
            <abstract>
              <t>This document specifies a protocol useful in determining the current status of a digital certificate without requiring Certificate Revocation Lists (CRLs). Additional mechanisms addressing PKIX operational requirements are specified in separate documents.  This document obsoletes RFCs 2560 and 6277.  It also updates RFC 5912.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6960"/>
          <seriesInfo name="DOI" value="10.17487/RFC6960"/>
        </reference>
        <reference anchor="I-D.draft-ietf-acme-ari">
          <front>
            <title>Automated Certificate Management Environment (ACME) Renewal Information (ARI) Extension</title>
            <author fullname="Aaron Gable" initials="A." surname="Gable">
              <organization>Internet Security Research Group</organization>
            </author>
            <date day="8" month="February" year="2023"/>
            <abstract>
              <t>   This document specifies how an ACME server may provide suggestions to
   ACME clients as to when they should attempt to renew their
   certificates.  This allows servers to mitigate load spikes, and
   ensures clients do not make false assumptions about appropriate
   certificate renewal periods.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-acme-ari-01"/>
        </reference>
        <reference anchor="I-D.draft-ietf-tls-batch-signing">
          <front>
            <title>Batch Signing for TLS</title>
            <author fullname="David Benjamin" initials="D." surname="Benjamin">
              <organization>Google LLC</organization>
            </author>
            <date day="13" month="January" year="2020"/>
            <abstract>
              <t>   This document describes a mechanism for batch signing in TLS.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-batch-signing-00"/>
        </reference>
        <reference anchor="RFC8879">
          <front>
            <title>TLS Certificate Compression</title>
            <author fullname="A. Ghedini" initials="A." surname="Ghedini">
              <organization/>
            </author>
            <author fullname="V. Vasiliev" initials="V." surname="Vasiliev">
              <organization/>
            </author>
            <date month="December" year="2020"/>
            <abstract>
              <t>In TLS handshakes, certificate chains often take up the majority of the bytes transmitted.</t>
              <t>This document describes how certificate chains can be compressed to reduce the amount of data transmitted and avoid some round trips.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8879"/>
          <seriesInfo name="DOI" value="10.17487/RFC8879"/>
        </reference>
        <reference anchor="I-D.draft-ietf-tls-esni">
          <front>
            <title>TLS Encrypted Client Hello</title>
            <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
              <organization>RTFM, Inc.</organization>
            </author>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="3" month="October" year="2022"/>
            <abstract>
              <t>   This document describes a mechanism in Transport Layer Security (TLS)
   for encrypting a ClientHello message under a server public key.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Source for this draft and an issue tracker can be found at
   https://github.com/tlswg/draft-ietf-tls-esni
   (https://github.com/tlswg/draft-ietf-tls-esni).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-esni-15"/>
        </reference>
        <reference anchor="RFC6973">
          <front>
            <title>Privacy Considerations for Internet Protocols</title>
            <author fullname="A. Cooper" initials="A." surname="Cooper">
              <organization/>
            </author>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
              <organization/>
            </author>
            <author fullname="B. Aboba" initials="B." surname="Aboba">
              <organization/>
            </author>
            <author fullname="J. Peterson" initials="J." surname="Peterson">
              <organization/>
            </author>
            <author fullname="J. Morris" initials="J." surname="Morris">
              <organization/>
            </author>
            <author fullname="M. Hansen" initials="M." surname="Hansen">
              <organization/>
            </author>
            <author fullname="R. Smith" initials="R." surname="Smith">
              <organization/>
            </author>
            <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>
    <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 and X.509. The authors would like to thank all those who have contributed over the history of these protocols.</t>
      <t>The authors additionally thank Bob Beck, Ryan Dickson, Nick Harper, Dennis Jackson, Ryan Sleevi, and Emily Stark for many valuable discussions and insights which led to this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA82963Yb15Ug/J9PUU39sGQDEEFS1zhO05QUMdaFQ9Jxut2O
UAAKRFlAFVJVIEVT6vW9xvcGMy8wv+Zf3mSeZPb1nH1OFSjaSa+ZrKxlEVV1
Lvvss++Xfr+/1eTNInuavM6q94ssOauyLDnMqiaf5ZO0yepkVlbJ2avTrWk5
KdIlvDmt0lnTn6YX+XScFf1mUfeX9HG/gY/7E/i47u/sbNXr8TKv67wsmqsV
fHf0/OzFFo55XlZXT5Psw2qrWC/HWfV0awq/Pt2alEWdFfW6fpo01Trbunia
7G2lVZY+TbZPs8m6ypur7a3Lsnp/XpXrFfx6VqVFvSqrJnmVXmVV4t+6yIo1
DJkkn381SXh92z/AyHlxnvwRP8Hfl2m+gN9hh/+aZ81sUFbn+HNaTebw87xp
VvXT+/fxLfwpv8gG+tp9/OH+uCov6+w+fH8fvzvPm/l6DF8q7O634IavLRDs
jZlAXx/wAIO8bH94/zanMpg3y8X21la6buYlgD3pw3RJkhcA8e1ng+TbrPg5
XebFNv3Mp739DIeMHsEO0yL/JW3gcOGVP5blOeDOq1eH/DhjwOli/vWcng8m
5XKrNefbL76t8iyaMrsoi/DJ7WZM66vlMmuqfLJ5zm8HyQ8A36wap2k47bdp
3XoUzXu4KNfTGRx3Fsw7Tut/nbhHPGlRVkv47IKw8PTl6dPk2dujwXBn8HBn
9/H9N0enZ4MXR8eng+Hjnf4+vHLy4nC4s7f/VP453N17CitP/jJ4+GTnKU0G
/5PLun1UzHh4gFOTTeZFuSjPr5J+cnD6ZjBMsmJSThGVT9aLDDZ9usomfKHx
g3KWwFbzSfI8eC25++3zk3u95DAtygLeXbSeH8LzJC2mybO8buD3dV7Ps2nr
tWfw2raumK528iIbV+u0ukp2d3aH+sihof4PgA1k4uz7/pn+VmeAAnUOuzWv
HZ2+vX/0/DB5/Hh3vz98SkNu5QoRBvjhy5O3r5/3D8/4O4Hb4bwqlwF9S5gu
wKkVk6vkuFzkkyv+Iq3OM7iFegkZnyY0gLmIZig70v1J825Fg9Gd2/KQgNXu
9nf2+sNHWzEM+gwAwW1eK6LAwfHxq9ZWDlarRfZFvXkvq817qdcrpISDFMdA
bL0PFGNd3395trvzYPfxTrjcIS5358Gm5dJCcJnP8gWAJV8vQ5Cf/Nvp2cGr
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
qh18FmpyCDD7/wA1FQTd0zgBAA==

-->

</rfc>
