<?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.39 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-davidben-tls-merkle-tree-certs-01" category="exp" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.0 -->
  <front>
    <title>Merkle Tree Certificates for TLS</title>
    <seriesInfo name="Internet-Draft" value="draft-davidben-tls-merkle-tree-certs-01"/>
    <author initials="D." surname="Benjamin" fullname="David Benjamin">
      <organization>Google LLC</organization>
      <address>
        <email>davidben@google.com</email>
      </address>
    </author>
    <author initials="D." surname="O'Brien" fullname="Devon O'Brien">
      <organization>Google LLC</organization>
      <address>
        <email>asymmetric@google.com</email>
      </address>
    </author>
    <author initials="B. E." surname="Westerbaan" fullname="Bas Westerbaan">
      <organization>Cloudflare</organization>
      <address>
        <email>bas@cloudflare.com</email>
      </address>
    </author>
    <date year="2023" month="September" day="08"/>
    <area>Security</area>
    <workgroup>Transport Layer Security</workgroup>
    <abstract>
      <?line 203?>

<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>
    <?line 207?>

<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>
      </ul>
      <t>To support the reduced scope, this document also describes a certificate negotiation mechanism. Subscribers send these more efficient certificates when available, and otherwise fall back to other mechanisms.</t>
      <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 anchor="time">
        <name>Time</name>
        <t>All time computations in this document are represented by POSIX timestamps, defined in this document to be integers containing a number of seconds since the Epoch, defined in Section 4.16 of <xref target="POSIX"/>. That is, the number of seconds after 1970-01-01 00:00:00 UTC, excluding leap seconds. A UTC time is converted to a POSIX timestamp as described in <xref target="POSIX"/>.</t>
        <t>Durations of time are integers, representing a number of seconds not including leap seconds. They can be added to POSIX timestamps to produce other POSIX timestamps.</t>
        <t>The current time is a POSIX timestamp determined by converting the current UTC time to seconds since the Epoch. One POSIX timestamp is said to be before (respectively, after) another POSIX timestamp if it is less than (respectively, greater than) the other value.</t>
      </section>
      <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>Abridged assertion:</dt>
          <dd>
            <t>A partially-hashed Assertion to save space. For example, in TLS, an abridged assertion replaces the subject public key by a hash.</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>Validity window:</dt>
          <dd>
            <t>A range of consecutive batch tree heads. A relying party maintains a copy of the CA's latest validity window. At any time, it will accept only assertions contained in tree heads contained in the current validity window.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="overview">
      <name>Overview</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 validity 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 abridged assertions, recreates the Merkle Tree, and validates the window signature. It mirrors them for monitors to observe. See <xref target="transparency-service"/>.</li>
        <li>The relying party fetches the latest validity window from the transparency service. This validity window will contain the new tree head.</li>
        <li>In an application protocol such as TLS, the relying party communicates its currently saved validity window to the subscriber.</li>
        <li>If the relying party’s validity 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 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^16-1>;
} Claim;

struct {
    SubjectType subject_type;
    opaque subject_info<0..2^16-1>;
    Claim claims<0..2^16-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^16-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. #35 ]]</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>. Values <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 "<tt>*.</tt>" 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>An opaque byte string that identifies the CA. This value should be short and is limited to at most 32 bytes.</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, represented as a POSIX timestamp (see <xref target="time"/>).</t>
          </dd>
          <dt><tt>batch_duration</tt>:</dt>
          <dd>
            <t>A number of seconds which determines how frequently the CA issues certificates. See details below.</t>
          </dd>
          <dt><tt>lifetime</tt>:</dt>
          <dd>
            <t>A number of seconds which determines the lifetime of certificates issued by this CA. MUST be a multiple of <tt>batch_duration</tt>.</t>
          </dd>
          <dt><tt>validity_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>lifetime / batch_duration</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. #36 ]]</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>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>validity_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 not before 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 abridged 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 validity 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 the smallest positive integer such that <tt>n &lt;= 2^(l-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(level, index) = hash(HashEmptyInput)
    HashNode(left, right, level, index) = hash(HashNodeInput)
    HashAssertion(assertion, index) = hash(HashAssertionInput)
]]></artwork>
          <t><tt>HashEmpyInput</tt>, <tt>HashNodeInput</tt> and <tt>HashAssertionInput</tt> are computed by encoding the structures defined below:</t>
          <artwork><![CDATA[
struct {
    uint8 distinguisher = 0;
    opaque issuer_id<1..32>;
    uint32 batch_number;
    uint64 index;
    uint8 level;
} HashEmptyInput;

struct {
    uint8 distinguisher = 1;
    opaque issuer_id<1..32>;
    uint32 batch_number;
    uint64 index;
    uint8 level;
    opaque left[hash.length];
    opaque right[hash.length];
} HashNodeInput;

struct {
    SubjectType subject_type;
    opaque subject_info_hash[hash.length];
    Claim claims<0..2^16-1>;
} AbridgedAssertion;

struct {
    uint8 distinguisher = 2;
    opaque issuer_id<1..32>;
    uint32 batch_number;
    uint64 index;
    AbridgedAssertion abridged_assertion;
} HashAssertionInput;
]]></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>HashAssertionInput.abridged_assertion.subject_info_hash</tt> is set to <tt>hash(assertion.subject_info)</tt> from the function input <tt>assertion</tt>, and the remaining fields of <tt>HashAssertionInput.abridged_assertion</tt> are taken unmodified from <tt>assertion</tt>. The remaining fields, such as <tt>index</tt>, 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>j</tt> between <tt>0</tt> and <tt>n-1</tt>, inclusive,
set element <tt>j</tt> to the output of <tt>HashAssertion(assertion[j], j)</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 <tt>j</tt>, append <tt>HashEmpty(i-1, j)</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(0, 0)</tt>.</t>
          <t>If <tt>n</tt> is one, the tree contains a single level, level 0, and has a tree head of <tt>HashAssertion(assertion, 0)</tt>.</t>
        </section>
        <section anchor="signing">
          <name>Signing a ValidityWindow</name>
          <t>Batches are grouped into consecutive ranges of <tt>validity_window_size</tt> batches, called validity windows. As <tt>validity_window_size</tt> is computed to cover the full certificate lifetime, a validity window that ends at the latest batch number covers all certificates that may still be valid from a CA.</t>
          <t>Validity Windows are serialized into the following structure:</t>
          <artwork><![CDATA[
opaque TreeHead[hash.length];

struct {
    uint32 batch_number;
    TreeHead tree_heads[validity_window_size*hash.length];
} ValidityWindow;
]]></artwork>
          <t><tt>batch_number</tt> is the batch number of the highest batch in the validity window.</t>
          <t><tt>tree_heads</tt> value contains the last <tt>validity_window_size</tt> tree heads. (Recall the TLS presentation language brackets the total length of a vector in bytes; not the number of elements.) <tt>tree_heads</tt> starts 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; validity_window_size - 1</tt>, any tree heads with numbers below zero are filled with <tt>HashEmpty(0, 0)</tt>.</t>
          <t>After the CA builds the Merkle Tree for a batch, it constructs the ValidityWindow 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[32] = "Merkle Tree Crts ValidityWindow\0";
    opaque issuer_id<1..32>;
    ValidityWindow window;
} LabeledValidityWindow;
]]></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 validity window signature. It then updates the latest batch to point to <tt>batch_number</tt>. A CA which generates such a signature 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>
          <t>A CA MUST NOT generate signatures over inputs that are parseable as LabeledValidityWindow, except via the above process. If a LabeledValidityWindow structure that was not produced in this way has a valid signature by CA's <tt>public_key</tt>, this indicates misuse of the private key by the CA, even if the preimages to the <tt>tree_heads</tt> values, or intermediate nodes, or <tt>subject_info_hash</tt> values are not known.</t>
        </section>
        <section anchor="proofs">
          <name>Certificate Format</name>
          <t>[[TODO: BikeshedCertificate is a placeholder name until someone comes up with a better one. #15 ]]</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^16-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<0..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 / validity_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 validity 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 validity 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 validity 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, index)</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 validity 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>validity_window_size - 1</tt> additional TrustAnchor values: for each <tt>i</tt> from 1 to <tt>validity_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 validity 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 abridged assertions certified by the CA and present them to monitors</li>
        <li>Validate all tree heads and validity windows produced by the CA</li>
        <li>Provide the latest valid validity 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 tree hashes sent to relying parties MUST be reflected in the mirrored CA state.</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 validity 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 signature on their behalf, rather than sending it 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 time for batch <tt>new_latest_batch</tt> is after the current time (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 abridged 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 ValidityWindow 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 validity window and skip the intervening batches? The intervening batches are guaranteed to have been expired #37 ]]</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 validity 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 validity 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 time for batch <tt>new_latest_batch</tt> is after the current time (see <xref target="parameters"/>), abort this procedure with an error.</li>
          <li>Fetch the validity 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 validity 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 validity windows contain overlapping batch numbers, verify that the tree hashes match. If not, abort this procedure with an error.</li>
          <li>Update the saved validity 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 validity window state, the relying party runs the procedure described in <xref target="single-update-multiple-mirrors"/>, and uses the saved validity 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 abridged 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 validity 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 validity 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. #12 ]]</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 validity 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}/validity-window/latest</tt> returns the ValidityWindow structure and signature (see <xref target="signing"/>) for the latest batch number.</li>
        <li>
          <tt>GET {prefix}/validity-window/{number}</tt> returns the ValidityWindow 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 validity 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 abridged assertion list additionally implement the following interface:</t>
      <ul spacing="normal">
        <li>
          <tt>GET {prefix}/batch/{number}/assertions</tt> returns the abridged 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. #2 ]]</t>
      <t>[[TODO: If we have the validity window endpoint, do we still need to separate "info" and "assertions"? #12]]</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. #13 ]]</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^16-1>;
    /* TODO: Should there be an extension list? #38 */
} 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. #39 ]]</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. #15]]</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 another one. #18]]</t>
        <t>When negotiated, the Certificate message MUST contain a single CertificateEntry structure.
CertificateEntry 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;

        /* From RFC 7250 */
        case RawPublicKey:
            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. #7 ]]</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. #18 ]]</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 validity 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 validity 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 validity 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.  A CA MUST NOT generate signatures with its private key, except as defined in <xref target="signing"/>, or an extension of this protocol. Any valid signature of a CA's <tt>public_key</tt> that does not meet these requirements indicates misuse of the private key by the CA.</t>
        <t>To reduce the risk of attacks if this guidance is not followed, the LabeledValidityWindow 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 validity 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. #41]]</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>
          <t>Unlike Certificate Transparency, the transparency service will not provide the preimages for <tt>subject_info_hash</tt>, only the hashed values. This is intended to reduce serving costs, particularly with large post-quantum keys. As a result, monitors look for unrecognized hashes instead of unrecognized keys. Any unrecognized hash, even if the preimage is unknown, indicates an unauthorized certificate.</t>
          <t>This optimization complicates studies of weak public keys, e.g. <xref target="SharedFactors"/>. Such studies will have to retrieve the public keys separately, such as by connecting to the TLS servers, or fetching from the CA if it retains the unabridged assertion. This document does not define a mechanism for doing this.</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 validity 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 validity 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. #42]]</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="DOI" value="10.6028/nist.fips.180-4"/>
          <refcontent>National Institute of Standards and Technology</refcontent>
        </reference>
        <reference anchor="RFC1034">
          <front>
            <title>Domain names - concepts and facilities</title>
            <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
            <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"/>
            <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="POSIX">
          <front>
            <title>IEEE Standard for Information Technology--Portable Operating System Interface (POSIX(TM)) Base Specifications, Issue 7</title>
            <author>
              <organization/>
            </author>
            <date month="January" year="2018"/>
          </front>
          <seriesInfo name="DOI" value="10.1109/ieeestd.2018.8277153"/>
          <seriesInfo name="ISBN" value="[&quot;9781504445429&quot;]"/>
          <refcontent>IEEE</refcontent>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8032"/>
          <seriesInfo name="DOI" value="10.17487/RFC8032"/>
        </reference>
        <reference anchor="RFC8555">
          <front>
            <title>Automatic Certificate Management Environment (ACME)</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="J. Hoffman-Andrews" initials="J." surname="Hoffman-Andrews"/>
            <author fullname="D. McCarney" initials="D." surname="McCarney"/>
            <author fullname="J. Kasten" initials="J." surname="Kasten"/>
            <date month="March" year="2019"/>
            <abstract>
              <t>Public Key Infrastructure using X.509 (PKIX) certificates are used for a number of purposes, the most significant of which is the authentication of domain names. Thus, certification authorities (CAs) in the Web PKI are trusted to verify that an applicant for a certificate legitimately represents the domain name(s) in the certificate. As of this writing, this verification is done through a collection of ad hoc mechanisms. This document describes a protocol that a CA and an applicant can use to automate the process of verification and certificate issuance. The protocol also provides facilities for other certificate management functions, such as certificate revocation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8555"/>
          <seriesInfo name="DOI" value="10.17487/RFC8555"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC5890">
          <front>
            <title>Internationalized Domain Names for Applications (IDNA): Definitions and Document Framework</title>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <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="10" month="August" 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-15"/>
        </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"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <author fullname="J. Jonsson" initials="J." surname="Jonsson"/>
            <author fullname="A. Rusch" initials="A." surname="Rusch"/>
            <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"/>
            <author fullname="H. Tschofenig" initials="H." role="editor" surname="Tschofenig"/>
            <author fullname="J. Gilmore" initials="J." surname="Gilmore"/>
            <author fullname="S. Weiler" initials="S." surname="Weiler"/>
            <author fullname="T. Kivinen" initials="T." surname="Kivinen"/>
            <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"/>
            <author fullname="D. Gillmor" initials="D." surname="Gillmor"/>
            <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"/>
            <author fullname="A. Popov" initials="A." surname="Popov"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="E. Stephan" initials="E." surname="Stephan"/>
            <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"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <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"/>
          <refcontent>IEEE</refcontent>
        </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="SharedFactors" target="https://bora.uib.no/bora-xmlui/bitstream/handle/11250/3001128/Masters_thesis__for_University_of_Bergen.pdf">
          <front>
            <title>Finding shared RSA factors in the Certificate Transparency logs</title>
            <author initials="H. F." surname="Våge" fullname="Henry Faltin Våge">
              <organization/>
            </author>
            <author>
              <organization>University of Bergen</organization>
            </author>
            <date year="2022" month="May" day="13"/>
          </front>
        </reference>
        <reference anchor="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="RFC6962">
          <front>
            <title>Certificate Transparency</title>
            <author fullname="B. Laurie" initials="B." surname="Laurie"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="E. Kasper" initials="E." surname="Kasper"/>
            <date month="June" year="2013"/>
            <abstract>
              <t>This document describes an experimental protocol for publicly logging the existence of Transport Layer Security (TLS) certificates as they are issued or observed, in a manner that allows anyone to audit certificate authority (CA) activity and notice the issuance of suspect certificates as well as to audit the certificate logs themselves. The intent is that eventually clients would refuse to honor certificates that do not appear in a log, effectively forcing CAs to add all issued certificates to the logs.</t>
              <t>Logs are network services that implement the protocol operations for submissions and queries that are defined in this document.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6962"/>
          <seriesInfo name="DOI" value="10.17487/RFC6962"/>
        </reference>
        <reference anchor="RFC6066">
          <front>
            <title>Transport Layer Security (TLS) Extensions: Extension Definitions</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <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"/>
            <author fullname="M. Myers" initials="M." surname="Myers"/>
            <author fullname="R. Ankney" initials="R." surname="Ankney"/>
            <author fullname="A. Malpani" initials="A." surname="Malpani"/>
            <author fullname="S. Galperin" initials="S." surname="Galperin"/>
            <author fullname="C. Adams" initials="C." surname="Adams"/>
            <date month="June" year="2013"/>
            <abstract>
              <t>This document specifies a protocol useful in determining the current status of a digital certificate without requiring Certificate Revocation Lists (CRLs). Additional mechanisms addressing PKIX operational requirements are specified in separate documents. This document obsoletes RFCs 2560 and 6277. It also updates RFC 5912.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6960"/>
          <seriesInfo name="DOI" value="10.17487/RFC6960"/>
        </reference>
        <reference anchor="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="10" month="August" 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-02"/>
        </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"/>
            <author fullname="V. Vasiliev" initials="V." surname="Vasiliev"/>
            <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="6" month="April" year="2023"/>
            <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-16"/>
        </reference>
        <reference anchor="RFC6973">
          <front>
            <title>Privacy Considerations for Internet Protocols</title>
            <author fullname="A. Cooper" initials="A." surname="Cooper"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="J. Peterson" initials="J." surname="Peterson"/>
            <author fullname="J. Morris" initials="J." surname="Morris"/>
            <author fullname="M. Hansen" initials="M." surname="Hansen"/>
            <author fullname="R. Smith" initials="R." surname="Smith"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document offers guidance for developing privacy considerations for inclusion in protocol specifications. It aims to make designers, implementers, and users of Internet protocols aware of privacy-related design choices. It suggests that whether any individual RFC warrants a specific privacy considerations section will depend on the document's content.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6973"/>
          <seriesInfo name="DOI" value="10.17487/RFC6973"/>
        </reference>
      </references>
    </references>
    <?line 1221?>

<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. We wish to thank Mia Celeste in particular, whose implementation of an earlier draft revealed several pitfalls.</t>
    </section>
    <section numbered="false" anchor="change-log">
      <name>Change log</name>
      <ul empty="true">
        <li>
          <t><strong>RFC Editor's Note:</strong> Please remove this section prior to publication of a
final version of this document.</t>
        </li>
      </ul>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-00">
        <name>Since draft-davidben-tls-merkle-tree-certs-00</name>
        <ul spacing="normal">
          <li>Simpify hashing by removing the internal padding to align with block size. #72</li>
          <li>Avoid the temptation of floating points. #66</li>
          <li>Require <tt>lifetime</tt> to be a multiple of <tt>batch_duration</tt>. #65</li>
          <li>Rename window to validity window. #21</li>
          <li>Split Assertion into Assertion and AbridgedAssertion. The latter is used in the Merkle Tree and HTTP interface. It replaces <tt>subject_info</tt> by a hash, to save space by not serving large post-quantum public keys. The original Assertion is used everywhere else, including BikeshedCertificate. #6</li>
          <li>Add proper context to every node in the Merkle tree. #32</li>
          <li>Clarify we use a single <tt>CertificateEntry</tt>. #11</li>
          <li>Clarify we use POSIX time. #1</li>
          <li>Miscellaneous changes.</li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA82923Icx5Uo+o6vqAEfRErdTQC807Y8EEiatHnBBiBLMxqb
Xd2dDZTYXdWuqgYIQZzYz/sP9h+c/QPn6bz59XzF+ZKzrpkrs6pBSPZEjMMR
Irqq8rJy5bpfhsPhVlu0C/c0e+PqDwuXndTOZQeubot5Mc1b12Tzqs5OXh9v
zappmS/hzVmdz9vhLD8vZhNXDttFM1zSx8MWPh5O4eNmuLO71awny6Jpiqps
L1fw3avnJy+2cMzTqr58mrmPq61yvZy4+unWDH59ujWtysaVzbp5mrX12m2d
P83ubeW1y59m28duuq6L9nJ766KqP5zW1XoFv57UedmsqrrNXueXrs7CW+eu
XMOQWfb5V7OM17f9HYxclKfZH/AT/H2ZFwv4HXb4r4Vr56OqPsWf83p6Bj+f
te2qeXr3Lr6FPxXnbqSv3cUf7k7q6qJxd+H7u/jdadGerSfwpcLubgdu+NoC
wd6aCfT1EQ8wKqruh3dvciqjs3a52N7aytftWQVgz4YwXZYVJUB8+9ko+8aV
P+bLotymn/m0t5/hkMkj2GFeFj/lLRwuvPKHqjoF3Hn9+oAfOwacLuZfT+n5
aFottzpzvvvim7pwyZTuvCrjJzebMW8ul0vX1sV085zfjJ6Psu8Awq6e5Hk8
8Td503mUzHywqNazORy4i2ae5M2/Tv0jnras6iV8dk54ePzy+Gn27N2r0e7O
6OHO3uO7b18dn4xevDo8Hu0+3hneh1eOXhzs7ty7/1T+ubt37ymsPft+9PDJ
zlOaTO7q9qtyzmMDmFo3PSurRXV6mQ2z/eO3o93MldNqhph8tF442PPxyk35
PuMH1TyDfRbT7Hn0Wnb7m+dHdwbZQV5WJby76Dw/gOdZXs6yZ0XTwu/rojlz
s85rz+A1hg1d6+yFm9TrvL7M9nb2dul3j3+ZABiIw8m3wxP6oXFw6k0BO9QX
Xh2/u/vq+UH2+PHe/eHuUxoGHh2+O371vYfp7u7OE3jr+fPjk2ejvZ3dx6PH
e48e7T64t7VVKLT4JA5eHr1783x4cBLB9OCsrpYR6cuYZMBxltPL7LBaFNNL
/iKvTx1cUL2fjGpTGsDcUTOUHenutH2/osHoOhpAwcb2hjv3hruPOlAaMpQE
7XmtCIP9w8PXna3sr1YL90WzeS+rzXtp1iskkqMcx0A0vgvEZN3cfXmyt/Ng
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
rrfoBdCnp26xyEtHVWs43n209f8Da7bD8OVKAQA=

-->

</rfc>
