<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.1 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-davidben-tls-trust-expr-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.2 -->
  <front>
    <title>TLS Trust Expressions</title>
    <seriesInfo name="Internet-Draft" value="draft-davidben-tls-trust-expr-00"/>
    <author initials="D." surname="Benjamin" fullname="David Benjamin">
      <organization>Google LLC</organization>
      <address>
        <email>davidben@google.com</email>
      </address>
    </author>
    <author initials="D." surname="O'Brien" fullname="Devon O'Brien">
      <organization>Google LLC</organization>
      <address>
        <email>asymmetric@google.com</email>
      </address>
    </author>
    <author initials="B." surname="Beck" fullname="Bob Beck">
      <organization>Google LLC</organization>
      <address>
        <email>bbe@google.com</email>
      </address>
    </author>
    <date year="2023" month="October" day="19"/>
    <area>Security</area>
    <workgroup>Transport Layer Security</workgroup>
    <abstract>
      <?line 113?>

<t>This document defines TLS trust expressions, a mechanism for relying parties to succinctly convey trusted certification authorities to subscribers by referencing named and versioned trust stores. It also defines supporting mechanisms for subscribers to evaluate these trust expressions, and select one of several available certification paths to present. This enables a multi-certificate deployment model, for a more agile and flexible PKI that can better meet security requirements.</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/tls-trust-expressions/draft-davidben-tls-trust-expr.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-davidben-tls-trust-expr/"/>.
      </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/tls-trust-expressions"/>.</t>
    </note>
  </front>
  <middle>
    <?line 117?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>TLS <xref target="RFC8446"/> endpoints typically authenticate using X.509 certificates <xref target="RFC5280"/>. These certificates are issued by a certification authority (CA) and associate the TLS public key with some application identifier, such as a DNS name. If the CA is among those trusted by the peer, it will accept this association. The authenticating party is known as the subscriber and the peer is the relying party.</t>
      <t>Subscribers typically provision a single certificate, which must meet all requirements of all supported relying parties because relying parties do not communicate which CAs are trusted. This imposes significant costs on CAs, subscribers, and relying parties:</t>
      <ul spacing="normal">
        <li>
          <t>It is difficult for newer CAs to enter the ecosystem if they are not trusted by all relying parties, including older ones. Existing CAs face similar challenges when rotating or deploying new keys.</t>
        </li>
        <li>
          <t>Single-certificate deployments on subscribers are fragile, particularly in the face of distrusts or other changes to what a relying party accepts.</t>
        </li>
        <li>
          <t>Certificates must meet the superset of policy requirements, which may differ between relying parties.</t>
        </li>
        <li>
          <t>When a relying party must update its policies to meet new security requirements, it must choose between compromising on user security or imposing a significant burden on subscribers.</t>
        </li>
      </ul>
      <t>Deploying multiple certification paths would avoid these issues. However, relying parties and subscribers must then negotiate which to send in each connection. <xref section="4.2.4" sectionFormat="of" target="RFC8446"/> defines the <tt>certificate_authorities</tt> extension, but it is often impractical. Some trust stores are large, and the X.509 Name structure is inefficient. For example, as of August 2023, the Mozilla CA Certificate Program <xref target="MOZILLA-ROOTS"/> would encode 144 names totaling 14,457 bytes.</t>
      <t>This document defines a TLS extension and supporting mechanisms that allow relying parties and subscribers to succinctly communicate supported trust anchors to subscribers, using pre-shared information provisioned by root programs and CAs, respectively. This enables a multi-certificate deployment model, which supports a more flexible, robust Public Key Infrastructure (PKI). <xref target="use-cases"/> discusses several deployment use cases that are directly improved by this model.</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>Times in this document are represented by POSIX timestamps, which are 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 as per Section 4.16 of <xref target="POSIX"/>. 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>This document discusses four roles:</t>
        <dl>
          <dt>Subscriber:</dt>
          <dd>
            <t>The party whose identity is being validated in the protocol. In TLS, this is the side sending the Certificate and CertificateVerify message.</t>
          </dd>
          <dt>Relying party:</dt>
          <dd>
            <t>The party that authenticates the subscriber. In TLS, this is the side that validates a Certificate and CertificateVerify message.</t>
          </dd>
          <dt>Certification authority (CA):</dt>
          <dd>
            <t>The service that issues certificates to the subscriber.</t>
          </dd>
          <dt>Root program:</dt>
          <dd>
            <t>An entity that manages a set of common trusted CAs for a set of relying parties.</t>
          </dd>
        </dl>
        <t>While the first three roles are common to most X.509 deployments, this document discusses the role of a root program as distinct from the relying party. Trust decisions are often common between related relying parties, such as multiple clients running the same application. The root program is the entity making those common decisions, such as the software vendor for the application or operating system.</t>
        <t>Additionally, there are several terms used throughout this document to describe this proposal:</t>
        <dl>
          <dt>Trust anchor:</dt>
          <dd>
            <t>A pre-distributed public key or certificate that relying parties use to determine whether a certification path is trusted.</t>
          </dd>
          <dt>Trust store:</dt>
          <dd>
            <t>A collection of trust anchors managed by the root program.</t>
          </dd>
          <dt>Certification path:</dt>
          <dd>
            <t>An ordered list of X.509 certificates starting the target certificate. Each certificate is issued by the next certificate, except for the last, which is issued by a trust anchor.</t>
          </dd>
          <dt>Trust store manifest:</dt>
          <dd>
            <t>A structure describing a series of versioned trust stores.</t>
          </dd>
          <dt>Trust expression:</dt>
          <dd>
            <t>A compact description of a relying party's trust store contents, referencing named, versioned trust stores.</t>
          </dd>
          <dt>CertificatePropertyList:</dt>
          <dd>
            <t>A structure associated with a certification path, containing additional information from the CA, for use by the subscriber when presenting the certification path.</t>
          </dd>
          <dt>TrustStoreInclusionList:</dt>
          <dd>
            <t>A property in the CertificatePropertyList which describes the corresponding trust anchor's inclusion in trust stores. This is used by the subscriber when evaluating trust expressions.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>In the TLS handshake, a client (respectively, server) relying party sends trust expressions, which reference named, versioned trust stores to describe a list of trust anchors. The subscriber uses this information to select a certification path to return.</t>
      <t>These structures are intended to be provisioned by root programs and CAs as follows:</t>
      <ul spacing="normal">
        <li>
          <t>Root programs maintain versions of a trust store over time in a trust store manifest, which is published to a well-known location. (See <xref target="trust-store-manifests"/>.)</t>
        </li>
        <li>
          <t>CAs regularly fetch trust store manifests. CAs use these manifests to associate TrustStoreInclusionList structures with issued certification paths. This communicates the trust anchor's inclusion status to subscribers. (See <xref target="trust-store-inclusion"/>.)</t>
        </li>
        <li>
          <t>The CA issues multiple certification paths to subscribers, which together cover all supported relying parties. The provisioning process is expected to be automated. (See <xref target="issuing-certificates"/>).</t>
        </li>
        <li>
          <t>When updating a relying party's list of supported trust anchors, root programs also send a compact description as a TrustExpressionList. (See <xref target="constructing-trust-expressions"/>.)</t>
        </li>
        <li>
          <t>During a TLS handshake, relying parties send their TrustExpressionList to subscribers. (See <xref target="trust-expressions"/>.)</t>
        </li>
        <li>
          <t>Subscribers select certification paths by evaluating the TrustExpressionList with each path's TrustStoreInclusionList. Subscribers are then assured that all supported relying parties will be satisfied by some available path. (See <xref target="subscriber-behavior"/>.)</t>
        </li>
      </ul>
      <t>By providing accurate trust anchor negotiation, this process avoids the need for relying parties to perform path-building <xref target="RFC4158"/>. Certification paths can be pre-constructed to end at one of the relying party's supported anchors.</t>
    </section>
    <section anchor="trust-store-manifests">
      <name>Trust Store Manifests</name>
      <t>This section defines a trust store manifest, which is a structure published by the root program to some well-known location. These manifests are used to compute certificate properties for the subscriber (<xref target="certificate-properties"/>) and trust expressions for the relying party (<xref target="tls-certificate-negotiation"/>).</t>
      <t>Trust store manifests are identified by a short, unique trust store name and define a list of trust store versions. A trust store version contains a set of trust anchors, and is identified by a name (from the manifest) and a version number.</t>
      <t>[[TODO: Trust store names need to be unique, or at least unique among relying parties and subscribers that talk to each other, but also short. How do we allocate them? Registry? Just pick values? OIDs?]]</t>
      <t>A trust store manifest is a JSON object <xref target="RFC8259"/> containing:</t>
      <dl>
        <dt><tt>name</tt>:</dt>
        <dd>
          <t>A string containing a short, unique name that identifies the collection of trust stores</t>
        </dd>
        <dt><tt>max_age</tt>:</dt>
        <dd>
          <t>A non-negative integer containing the number of seconds that this document may be cached.</t>
        </dd>
        <dt><tt>trust_anchors</tt>:</dt>
        <dd>
          <t>A non-empty object describing a set of trust anchors. Each member's name is a short identifier for the trust anchor, used in <tt>entries</tt> below. Each member's value is an object describing the trust anchor, containing:
</t>
          <dl>
            <dt><tt>type</tt>:</dt>
            <dd>
              <t>A string describing the type of trust anchor.</t>
            </dd>
          </dl>
          <t>In this document, the value of <tt>type</tt> is always "x509". In this case, the object additionally contains a member <tt>data</tt> whose value is a string containing a base64-encoded <xref target="RFC4648"/>, DER-encoded <xref target="X690"/> X.509 certificate.</t>
          <t>Future documents may extend this format with other trust anchor types. Recipients MUST ignore trust anchors with unrecognized <tt>type</tt>.</t>
        </dd>
        <dt><tt>versions</tt>:</dt>
        <dd>
          <t>A non-empty array describing versions of the trust store. Each element of the array is a JSON object containing:
</t>
          <dl>
            <dt><tt>timestamp</tt>:</dt>
            <dd>
              <t>An integer, which is the time at which this trust store version was defined, as a POSIX timestamp (see <xref target="time"/>).</t>
            </dd>
            <dt><tt>entries</tt>:</dt>
            <dd>
              <t>A non-empty array describing the contents of this version of the trust store. These are known as trust store entries. Each element is an object containing:
</t>
              <dl>
                <dt><tt>id</tt>:</dt>
                <dd>
                  <t>A string containing the name of some member of the <tt>trust_anchors</tt> object.</t>
                </dd>
                <dt><tt>labels</tt>:</dt>
                <dd>
                  <t>A non-empty array of non-negative, 24-bit integer labels associated with the trust anchor. See <xref target="labels"/> for how this field is interpreted.</t>
                </dd>
                <dt><tt>max_lifetime</tt>:</dt>
                <dd>
                  <t>A non-negative integer containing the maximum lifetime, in seconds, of certification paths that this trust anchor is expected to issue.</t>
                </dd>
              </dl>
            </dd>
          </dl>
        </dd>
      </dl>
      <t>Versions in <tt>versions</tt> are identified by their zero-indexed position in the array. That is, the first entry is version 0, the second is version 1, and so on.</t>
      <t>Recipients MUST ignore JSON object members with unrecognized names in each of the objects defined above. Future documents MAY extend these formats with new names. <xref target="cddl-schema"/> contains a CDDL <xref target="RFC8610"/> describing the above structure.</t>
      <t>When updating a trust store manifest, root programs append a new object to the <tt>versions</tt> array to represent the new trust store version. When the new object references a trust anchor, the root program uses the existing members of <tt>trust_anchors</tt>, or adds new members as required. Updates MUST NOT modify or remove existing entries in the <tt>versions</tt> array.</t>
      <section anchor="expiration">
        <name>Trust Store Entry Expiration</name>
        <t>The <tt>max_age</tt> and <tt>max_lifetime</tt> fields define an expiration time for trust store entries in versions other than the latest version. For a trust store entry in version V, the expiration time is the sum of:</t>
        <ul spacing="normal">
          <li>
            <t>The <tt>timestamp</tt> of the subsequent version, i.e. version V+1</t>
          </li>
          <li>
            <t>The <tt>max_age</tt> of the manifest</t>
          </li>
          <li>
            <t>The <tt>max_lifetime</tt> of the trust store entry</t>
          </li>
        </ul>
        <t>Expiration times for entries in the latest version are not defined. They are determined once the root store appends a new version.</t>
        <t>Trust store entries are not removed from their containing version after they expire. Rather, the expiration time is the point at which all unexpired certificates have incorporated information about subsequent trust store versions, per <xref target="computing-trust-store-inclusions"/>. This ensures the procedures in <xref target="evaluating-trust-expressions"/> and <xref target="constructing-trust-expressions"/> interoperate.</t>
      </section>
      <section anchor="labels">
        <name>Labels</name>
        <t>Trust store entries reference labels, which are 24-bit integers that identify subsets of a trust store version. These integers are defined relative to the trust store manifest and are not globally unique. Root programs allocate labels when defining versions of a trust store.</t>
        <t>Labels are used in trust expressions (<xref target="trust-expressions"/>) to exclude trust anchor entries from the expression. A label may identify an individual trust anchor if it is the only one with that label, or multiple trust anchors if they share the label.</t>
        <t>The root program's label allocation scheme determines which sets may be efficiently represented. In particular, when trust anchors are removed in a later version of a trust store, trust expressions must express the removed set with labels as described in <xref target="constructing-trust-expressions"/>. Root programs SHOULD allocate individual labels for each trust anchor, and shared labels for trust anchors that will likely be removed together. For example, the root program may allocate shared labels for trust anchors with the same operator, or trust anchors that use some signature algorithm if it expects some relying parties to exclude by algorithm.</t>
        <t>When allocating labels, root programs MAY repurpose a previously allocated label value after all previous entries referencing it have expired (<xref target="expiration"/>).</t>
      </section>
    </section>
    <section anchor="certificate-properties">
      <name>Certificate Properties</name>
      <t>In order to evaluate references to trust stores, e.g. in <xref target="trust-expressions"/>, subscribers require information about which trust stores contain each candidate certification path's trust anchor. This document introduces an extensible CertificatePropertyList structure to carry this information.</t>
      <t>CertificatePropertyLists are constructed by CAs and sent to subscribers, alongside the certification path itself. They contain a list of properties the subscriber may use when presenting the certificate, e.g. as an input to certificate negotiation (<xref target="subscriber-behavior"/>).</t>
      <t>A CertificatePropertyList is defined using the TLS presentation language (<xref section="3" sectionFormat="of" target="RFC8446"/>) below:</t>
      <artwork><![CDATA[
enum { trust_stores(0), (2^16-1) } CertificatePropertyType;

struct {
    CertificatePropertyType type;
    opaque data<0..2^16-1>;
} CertificateProperty;

CertificateProperty CertificatePropertyList<0..2^16-1>;
]]></artwork>
      <t>The entries in a CertificatePropertyList MUST be sorted numerically by <tt>type</tt> and MUST NOT contain values with a duplicate <tt>type</tt>. Inputs that do not satisfy these invariants are syntax errors and MUST be rejected by parsers.</t>
      <t>This document defines a single property, <tt>trust_stores</tt>, which describes trust store inclusion. Future documents may define other properties for use with other mechanisms.</t>
      <t>Subscribers MUST ignore unrecognized properties with CertificatePropertyType values. If ignoring a property would cause such subscribers to misinterpret the structure, the document defining the CertificatePropertyType SHOULD include a mechanism for CAs to negotiate the new property with the subscriber in certificate management protocols such as ACME <xref target="RFC8555"/>. For example, <xref target="acme-extension"/> defines a "trustExpressions" ACME order field.</t>
      <section anchor="trust-store-inclusion">
        <name>Trust Store Inclusion</name>
        <t>The <tt>trust_stores</tt> property specifies which trust stores contain the certification path's trust anchor. Its <tt>data</tt> field contains a TrustStoreInclusionList, defined below:</t>
        <artwork><![CDATA[
enum {
    previous_version(0),
    latest_version_at_issuance(1)
} TrustStoreStatus;

struct {
    opaque name<1..2^8-1>;
    uint24 version;
} TrustStore;

struct {
    TrustStore trust_store;
    TrustStoreStatus status;
    uint24 labels<1..2^16-1>;
} TrustStoreInclusion;

TrustStoreInclusion TrustStoreInclusionList<1..2^16-1>;
]]></artwork>
        <t>Each TrustStoreInclusion describes a trust store version which contains this certification path's trust anchor. <tt>trust_store</tt> specifies a version of the trust store, and <tt>labels</tt> specifies the trust anchor's labels within that trust store.</t>
        <t>If <tt>status</tt> is <tt>latest_version_at_issuance</tt>, <tt>trust_store</tt> was the latest trust store of its name at the time the certificate was issued. In this case, the trust expression evaluation algorithm (<xref target="evaluating-trust-expressions"/>) predicts this information additionally applies to all versions greater than <tt>trust_store</tt>'s <tt>version</tt>, up to the expiration of the certification path.</t>
        <t>A TrustStoreInclusionList MUST satisfy the following invariants:</t>
        <ul spacing="normal">
          <li>
            <t>Each TrustStoreInclusion has a unique <tt>trust_store</tt> value.</t>
          </li>
          <li>
            <t>The TrustStoreInclusion structures are sorted, first by length of <tt>trust_store</tt>'s <tt>name</tt>, then by <tt>trust_store</tt>'s <tt>name</tt> lexicographically, then by <tt>trust_store</tt>'s <tt>version</tt>.</t>
          </li>
          <li>
            <t>If <tt>status</tt> is <tt>latest_version_at_issuance</tt> in some TrustStoreInclusion, no <tt>trust_store</tt> with the same <tt>name</tt> but higher <tt>version</tt> appears in the list.</t>
          </li>
        </ul>
      </section>
      <section anchor="computing-trust-store-inclusions">
        <name>Computing Trust Store Inclusions</name>
        <t>Each CA regularly fetches trust store manifests from root programs in which it participates, caching the most recently fetched manifest from each root program. When issuing a certification path to a subscriber, it runs the following procedure on each root program's trust store manifest, to compute a list of TrustStoreInclusions:</t>
        <ol spacing="normal" type="1"><li>
            <t>If the cached manifest was fetched more than <tt>max_age</tt> seconds ago, fetch and cache a new copy.</t>
          </li>
          <li>
            <t>For each trust store version in the cached manifest's <tt>versions</tt>:  </t>
            <ol spacing="normal" type="a"><li>
                <t>Look for a trust store entry whose <tt>id</tt>, when indexed into <tt>trust_anchors</tt>, matches the certification path's trust anchor.</t>
              </li>
              <li>
                <t>If found, output a TrustStoreInclusion structure:      </t>
                <ul spacing="normal">
                  <li>
                    <t>Set <tt>trust_store</tt> to the manifest's <tt>name</tt>, encoded in UTF-8 <xref target="RFC3629"/>, and the version's version number.</t>
                  </li>
                  <li>
                    <t>Set <tt>status</tt> to <tt>latest_version_at_issuance</tt> if the trust store version is currently the latest version. Otherwise, set it to <tt>previous_version</tt>.</t>
                  </li>
                  <li>
                    <t>Set <tt>labels</tt> to the trust store entry's <tt>labels</tt>.</t>
                  </li>
                </ul>
              </li>
            </ol>
          </li>
        </ol>
        <t>If the above procedure outputs a TrustStoreInclusion with <tt>status</tt> of <tt>latest_version_at_issuance</tt>, the certification path's lifetime MUST NOT exceed the corresponding trust store entry's <tt>max_lifetime</tt> field. This ensures the procedures in <xref target="evaluating-trust-expressions"/> and <xref target="constructing-trust-expressions"/> interoperate correctly.</t>
        <t>The CA combines the outputs of this procedure for each known manifest to form the final TrustStoreInclusionList. To aid the CA in collecting manifests, repositories such as <xref target="CCADB"/> can publish a directory of trust store manifests from participating root programs.</t>
      </section>
      <section anchor="media-type">
        <name>Media Type</name>
        <t>A certification path with its associated CertificationPropertyList may be represented in a PEM <xref target="RFC7468"/> structure in a file of type "application/pem-certificate-chain-with-properties". Files of this type MUST use the strict encoding and MUST NOT include explanatory text.  The ABNF <xref target="RFC5234"/> for this format is
as follows, where "stricttextualmsg" and "eol" are as defined in
<xref section="3" sectionFormat="of" target="RFC7468"/>:</t>
        <artwork><![CDATA[
certchainwithproperties = stricttextualmsg eol stricttextualmsg
                          *(eol stricttextualmsg)
]]></artwork>
        <t>The first element MUST be the encoded CertificatePropertyList.
The second element MUST be an end-entity certificate.  Each following
certificate MUST directly certify the one preceding it. The certificate that represents the trust anchor MUST be omitted from the path.</t>
        <t>CertificatePropertyLists are encoded using the "CERTIFICATE PROPERTIES" label. The encoded data is a serialized CertificatePropertyList, defined in <xref target="certificate-properties"/>.</t>
        <t>Certificates are encoded as in <xref section="5.1" sectionFormat="of" target="RFC7468"/>, except DER <xref target="X690"/> MUST be used.</t>
        <t>The following is an example file with a certification path containing an end-entity certificate and an intermediate certificate.</t>
        <artwork><![CDATA[
-----BEGIN CERTIFICATE PROPERTIES-----
TODO fill in an example
-----END CERTIFICATE PROPERTIES-----
-----BEGIN CERTIFICATE-----
TODO fill in an example
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
TODO fill in an example
-----END CERTIFICATE-----
]]></artwork>
        <t>The IANA registration for this media type is described in <xref target="media-type-updates"/>.</t>
      </section>
    </section>
    <section anchor="tls-certificate-negotiation">
      <name>TLS Certificate Negotiation</name>
      <t>This section defines the <tt>trust_expressions</tt> extension, which is sent in the ClientHello, CertificateRequest, and Certificate messages.</t>
      <section anchor="trust-expressions">
        <name>Trust Expressions</name>
        <t>When the <tt>trust_expressions</tt> extension is sent in ClientHello and CertificateRequest, the <tt>extension_data</tt> field is a TrustExpressionList, defined below:</t>
        <artwork><![CDATA[
enum { trust_expressions(TBD), (2^16-1) } ExtensionType;

struct {
    TrustStore trust_store;
    uint24 excluded_labels<0..2^16-1>;
} TrustExpression;

TrustExpression TrustExpressionList<1..2^16-1>;
]]></artwork>
        <t>A TrustExpressionList is an unordered set of TrustExpression objects. When a relying party sends a TrustExpressionList, it indicates support for all trust anchors specified by any TrustExpression contained in the list. A TrustExpression specifies a list of trust anchors in two parts:</t>
        <t>First, <tt>trust_store</tt> specifies a trust store by name and version (see <xref target="trust-store-manifests"/>). Any trust anchors contained in the specified trust store are included.</t>
        <t>Second, <tt>excluded_labels</tt> specifies a set of labels, each of which identify one or more trust anchors in a trust store manifest. Any trust anchors identified by any label in <tt>excluded_labels</tt> are excluded. <xref target="constructing-trust-expressions"/> discusses this set in more detail.</t>
        <t><tt>excluded_labels</tt> MUST be sorted in ascending order and contain no duplicate values to be valid. If invalid, receivers MUST terminate the connection with an <tt>illegal_parameter</tt> alert.</t>
        <t>Together, a TrustExpression indicates that the relying party accepts all trust anchors in the referenced trust store version, except for any that were excluded via <tt>excluded_labels</tt>.</t>
      </section>
      <section anchor="subscriber-acknowledgement">
        <name>Subscriber Acknowledgement</name>
        <t>When the <tt>trust_expressions</tt> extension is sent in a Certificate message, the extension MUST be in the first CertificateEntry and the <tt>extension_data</tt> field MUST be empty. This extension indicates the subscriber selected a certification path using trust expressions.</t>
        <t>In this case, the <tt>certificate_list</tt> flexibility described in <xref section="4.4.2" sectionFormat="of" target="RFC8446"/> no longer applies. The <tt>certificate_list</tt> MUST contain a complete certification path, correctly ordered and with no extraneous certificates. That is, each certificate MUST certify the one immediately preceding it, and the trust anchor MUST certify the final certificate.</t>
        <t>If a relying party receives this extension in the Certificate message, it SHOULD NOT use path building <xref target="RFC4158"/> to validate the result.</t>
      </section>
      <section anchor="evaluating-trust-expressions">
        <name>Evaluating Trust Expressions</name>
        <t>Given a certification path with a <tt>trust_store</tt> certificate property (<xref target="trust-store-inclusion"/>), a subscriber can evaluate a TrustExpressionList to determine whether the certification path matches.</t>
        <t>A TrustExpression is said to match a TrustStoreInclusionList if there is at least one TrustStoreInclusion in the TrustStoreInclusionList such that all of the following are true:</t>
        <ul spacing="normal">
          <li>
            <t>The <tt>name</tt> fields of two structures' <tt>trust_store</tt> fields are equal.</t>
          </li>
          <li>
            <t>Either the <tt>version</tt> fields of the two structures' <tt>trust_store</tt> fields are equal, or the TrustStoreInclusion's <tt>status</tt> is <tt>latest_version_at_issuance</tt> and the <tt>version</tt> field of TrustExpression's <tt>trust_store</tt> is greater than that of the TrustStoreEntry's <tt>trust_store</tt>.</t>
          </li>
          <li>
            <t>There is no value in common between the TrustStoreInclusion's <tt>labels</tt> field and the TrustExpression's <tt>excluded_labels</tt> field.</t>
          </li>
        </ul>
        <t>The invariants in <xref target="trust-store-inclusion"/> imply that at most one TrustStoreInclusion will satisfy the first two properties. Implementations may evaluate this efficiently by performing a binary search over the TrustStoreInclusionList, and then checking the third property.</t>
        <t>A TrustExpressionList is said to match a TrustStoreInclusionList if any TrustExpression in the TrustExpressionList matches the TrustStoreInclusionList.</t>
        <t>When a TrustStoreInclusion's <tt>status</tt> is <tt>latest_version_at_issuance</tt>, the above criteria predicts that trust anchors in the latest version will continue to be present in later versions. This allows relying parties using later trust store versions to continue to interoperate with certification paths that predate the later version. If this prediction is incorrect and the trust anchor has been removed from the later version, <xref target="constructing-trust-expressions"/> requires that the TrustExpression include appropriate <tt>excluded_labels</tt> values to mitigate this.</t>
      </section>
      <section anchor="subscriber-behavior">
        <name>Subscriber Behavior</name>
        <t>Subscribers using this negotiation scheme are configured with a list of certification paths, with corresponding CertificatePropertyList (<xref target="certificate-properties"/>) structures, in some preference order. When responding to a ClientHello (as a server) or CertificateRequest (as a client) containing the <tt>trust_expressions</tt> extension, the subscriber collects all candidate certification paths such that all of the following are true:</t>
        <ul spacing="normal">
          <li>
            <t>The certification path has not expired.</t>
          </li>
          <li>
            <t>The CertificatePropertyList has a <tt>trust_store</tt> property with a TrustStoreInclusionList.</t>
          </li>
          <li>
            <t>The matching algorithm described in <xref target="evaluating-trust-expressions"/> returns true.</t>
          </li>
          <li>
            <t>The certification path is suitable for use based on other TLS criteria. 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.</t>
          </li>
          <li>
            <t>The certification path satisfies any other application-specific constraints which may apply. For example, TLS servers often select certificates based on the <tt>server_name</tt> (<xref section="3" sectionFormat="of" target="RFC6066"/>) extension.</t>
          </li>
        </ul>
        <t>Once all candidate paths are determined, the subscriber picks one to present to the relying party. The subscriber MUST include an empty <tt>trust_expressions</tt> extension in the first CertificateEntry. If multiple candidates match, the subscriber picks its most preferred option. For example, it may try to minimize message size, or prefer options with more performant private keys.</t>
        <t>If no candidates match, or if the peer did not send a <tt>trust_expressions</tt> extension, the subscriber falls back to preexisting behavior outside the scope of this document, without including a <tt>trust_expressions</tt> extension. For example, the subscriber may have a default certificate configured, or select a certificate using the <tt>certificate_authorities</tt> extension.</t>
      </section>
      <section anchor="constructing-trust-expressions">
        <name>Constructing Trust Expressions</name>
        <t>Relying parties send the <tt>trust_expressions</tt> extension to advertise a set of accepted trust anchors. Each trust expression to be sent advertises a subset of some trust store version. Relying parties MAY send multiple trust expressions, each referencing a different trust store, if it wishes to communicate a set of trust anchors that span multiple trust stores.</t>
        <t>For each referenced trust store version, the following procedure constructs a trust expression. This procedure is expected to be run by the root program, as part of defining new trust store versions and provisioning supported trust anchors in relying parties.</t>
        <t>[[TODO: This is written as a procedure, but we expect root programs to fill in the expected exclusions when they define a new trust store version, and then trim the compatibility exclusions as they expire. Also the root programs know their label allocation scheme and are the ones deciding on removals, so they're best situated to pick a set of <tt>excluded_labels</tt>. Perhaps this should get moved to the manifest?]]</t>
        <ol spacing="normal" type="1"><li>
            <t>Let <tt>include_entries</tt> and <tt>exclude_entries</tt> be two empty sets of trust anchor entries.</t>
          </li>
          <li>
            <t>For each trust store entry in the trust store version:  </t>
            <ol spacing="normal" type="a"><li>
                <t>If the trust store entry's <tt>id</tt> references a trust anchor that is in the desired subset, add it to <tt>include_entries</tt>.</t>
              </li>
              <li>
                <t>Otherwise, add it to <tt>exclude_entries</tt>.</t>
              </li>
            </ol>
          </li>
          <li>
            <t>For all trust store entries in trust store versions before the specified version:  </t>
            <ol spacing="normal" type="a"><li>
                <t>If the current time is before the entry's expiration time (<xref target="expiration"/>) and if the entry's <tt>id</tt> references a trust anchor that is not in the desired subset, add the entry to <tt>exclude_entries</tt>.</t>
              </li>
            </ol>
          </li>
          <li>
            <t>Compute a set of labels, <tt>excluded_labels</tt> such that:  </t>
            <ol spacing="normal" type="a"><li>
                <t>No label appears in any entry in <tt>include_entries</tt>.</t>
              </li>
              <li>
                <t>For each entry in <tt>exclude_entries</tt>, there is some label in common between <tt>excluded_labels</tt> and the labels in the entry.</t>
              </li>
            </ol>
            <t>
How to compute this set depends on the root program's label allocation scheme (<xref target="labels"/>). If the root program allocates a label for each trust anchor, this set is always computable, though more efficient sets may be possible depending on the allocation scheme.</t>
          </li>
          <li>
            <t>Output a TrustExpression such that <tt>trust_store</tt> is the referenced trust store version, and <tt>excluded_labels</tt> is the computed <tt>excluded_labels</tt> value.</t>
          </li>
        </ol>
        <t>This procedure uses <tt>excluded_labels</tt> for two kinds of exclusions:</t>
        <t>First, if the trust store version includes undesired trust anchors, the trust expression should exclude them. This may occur if, for example, the trust store is used by all versions of the relying party's software, but some trust anchors are gated by software version.</t>
        <t>Second, trust expressions exclude unexpired entries from previous versions. This is because the matching criteria described in <xref target="evaluating-trust-expressions"/> predictively applies TrustStoreEntry values with <tt>status</tt> of <tt>latest_version_at_issuance</tt> to all future versions of a trust store. This allows relying parties to interoperate with subscribers with stale information. Unexpired entries are those for which such an unexpired certification path may still exist. Where this prediction is incorrect, trust expressions MUST mitigate this by excluding the past entries.</t>
      </section>
    </section>
    <section anchor="issuing-certificates">
      <name>Issuing Certificates</name>
      <t>Subscribers SHOULD use an automated issuance process where the CA transparently provisions multiple certification paths, without changes to subscriber configuration. As relying party requirements evolve, the CA adjusts its output to ensure its subscribers continue to interoperate with all supported relying parties. This results in a more flexible and agile PKI that can better respond to security incidents and changes in requirements. (See <xref target="use-cases"/> for details.)</t>
      <t>Subscribers MAY additionally combine the outputs from multiple CAs. This may be used, for example, to maintain backup certificates as described in <xref target="backup-certificates"/>.</t>
      <section anchor="acme-extension">
        <name>ACME Extension</name>
        <t>This section extends ACME <xref target="RFC8555"/> to issue multiple certification paths, each with a CertificatePropertyList, within a single ACME order. It extends the ACME order object with a configurable boolean field, "trustExpressions".</t>
        <t>First, ACME clients indicate they support certification paths selected by trust expressions by setting "trustExpressions" to "true" in the ACME newOrder request (<xref section="7.4" sectionFormat="of" target="RFC8555"/>). If the server accepts the request, it MUST reflect the field in the resulting order object.</t>
        <t>When an ACME server processes an order object with the "trustExpressions" field set to "true", it MAY issue multiple certification paths, each with an associated TrustStoreInclusionList, computed as in <xref target="computing-trust-store-inclusions"/>. These paths MAY share an end-entity certificate but end at different trust anchors, or they MAY be completely distinct. If the latter, the "trustExpressions" order field allows the ACME server to skip issuing unnecessary end-entity certificates for ACME clients that would be unable to use them. The ACME server encodes each certification path using the application/pem-certificate-chain-with-properties format, defined in <xref target="media-type"/>).  Note this format is required to form a complete certification path. The CA MUST return a result that may be verified by relying parties without path building <xref target="RFC4158"/>.</t>
        <t>The ACME server provides additional results to the client with the link relation header fields described in <xref section="7.4.2" sectionFormat="of" target="RFC8555"/>. When fetching certificates, the ACME client includes application/pem-certificate-chain-with-properties in its Accept header to indicate it supports the new format. Unlike the original mechanism described in <xref target="RFC8555"/>, these certification paths do not require heuristics to be used. Instead, the ACME client uses the associated TrustStoreInclusionLists to select a path as described in <xref target="subscriber-behavior"/>.</t>
        <t>When the ACME client wishes to renew any of the certification paths issued in this order, it repeats this process to renew each path concurrently. Thus this extension is suitable when the CA is willing to issue and renew all paths together. It may not be appropriate if the paths have significantly different processing times or lifetimes. Future enhancements to ACME may be defined to address these cases, e.g. by allowing the ACME client to make independent orders.</t>
      </section>
    </section>
    <section anchor="example">
      <name>Example</name>
      <t>Suppose A1, A2, B1, B2, C1, and C2 are X.509 root certificates, such that A1 and A2 share an operator, B1 and B2 share an operator, and C1 and C2 share an operator.</t>
      <t>On January 1st, 2023, the root program includes A1, A2, B1, and B2. It allocates labels 0 through 3 for each individual CA and then 100 and 101 for the two CA operators. The CAs issue 90 day certificates and are permitted to use manifests stale by 10 days. The root store manifest may then be:</t>
      <artwork><![CDATA[
{
  "name": "example",
  "max_age": 864000,
  "trust_anchors": {
    "A1": {"type": "x509", "data": "..."},
    "A2": {"type": "x509", "data": "..."},
    "B1": {"type": "x509", "data": "..."},
    "B2": {"type": "x509", "data": "..."}
  },
  "versions": [
    {
      "timestamp": 1672531200,
      "entries": [
        {"id": "A1", "labels": [0, 100],
         "max_lifetime": 7776000},
        {"id": "A2", "labels": [1, 100],
         "max_lifetime": 7776000},
        {"id": "B1", "labels": [2, 101],
         "max_lifetime": 7776000},
        {"id": "B2", "labels": [3, 101],
         "max_lifetime": 7776000}
      ]
    }
  ]
}
]]></artwork>
      <t>A certification path, A1_old, issued by A1 would then contain the TrustStoreEntry:</t>
      <ul spacing="normal">
        <li>
          <t><tt>trust_store.name</tt> is "example"</t>
        </li>
        <li>
          <t><tt>trust_store.version</tt> is 0</t>
        </li>
        <li>
          <t><tt>status</tt> is <tt>latest_version_at_issuance</tt></t>
        </li>
        <li>
          <t><tt>labels</tt> is 0, 100</t>
        </li>
      </ul>
      <t>A certification path, B1_old, issued by B1 would then contain the TrustStoreEntry:</t>
      <ul spacing="normal">
        <li>
          <t><tt>trust_store.name</tt> is "example"</t>
        </li>
        <li>
          <t><tt>trust_store.version</tt> is 0</t>
        </li>
        <li>
          <t><tt>status</tt> is <tt>latest_version_at_issuance</tt></t>
        </li>
        <li>
          <t><tt>labels</tt> is 2, 101</t>
        </li>
      </ul>
      <t>A certification path, C1_old, issued by C1 would contain no TrustStoreEntry values that reference "example".</t>
      <t>On February 1st, 2023, the root program added CAs C1 and C2 but removed CAs B1 and B2. It continues the previous label allocation scheme, but now wishes to allocate label 200 for CAs A1 and C1. The manifest may then be:</t>
      <artwork><![CDATA[
{
  "name": "example",
  "max_age": 864000,
  "trust_anchors": {
    "A1": {"type": "x509", "data": "..."},
    "A2": {"type": "x509", "data": "..."},
    "B1": {"type": "x509", "data": "..."},
    "B2": {"type": "x509", "data": "..."},
    "C1": {"type": "x509", "data": "..."},
    "C2": {"type": "x509", "data": "..."}
  },
  "versions": [
    {
      "timestamp": 1672531200,
      "entries": [
        {"id": "A1", "labels": [0, 100],
         "max_lifetime": 7776000},
        {"id": "A2", "labels": [1, 100],
         "max_lifetime": 7776000},
        {"id": "B1", "labels": [2, 101],
         "max_lifetime": 7776000},
        {"id": "B2", "labels": [3, 101],
         "max_lifetime": 7776000}
      ]
    },
    {
      "timestamp": 1675209600,
      "entries": [
        {"id": "A1", "labels": [0, 100, 200],
         "max_lifetime": 7776000},
        {"id": "A2", "labels": [1, 100],
         "max_lifetime": 7776000},
        {"id": "C1", "labels": [4, 102, 200],
         "max_lifetime": 7776000},
        {"id": "C2", "labels": [5, 102],
         "max_lifetime": 7776000}
      ]
    }
  ]
}
]]></artwork>
      <t>A certification path, A1_new, now issued by A1 would contain two TrustStoreEntry values. The first:</t>
      <ul spacing="normal">
        <li>
          <t><tt>trust_store.name</tt> is "example"</t>
        </li>
        <li>
          <t><tt>trust_store.version</tt> is 0</t>
        </li>
        <li>
          <t><tt>status</tt> is <tt>previous_version</tt></t>
        </li>
        <li>
          <t><tt>labels</tt> is 0, 100</t>
        </li>
      </ul>
      <t>And the second:</t>
      <ul spacing="normal">
        <li>
          <t><tt>trust_store.name</tt> is "example"</t>
        </li>
        <li>
          <t><tt>trust_store.version</tt> is 1</t>
        </li>
        <li>
          <t><tt>status</tt> is <tt>latest_version_at_issuance</tt></t>
        </li>
        <li>
          <t><tt>labels</tt> is 0, 100, 200</t>
        </li>
      </ul>
      <t>A certification path, B1_new, now issued by B1 would contain a TrustStoreEntry:</t>
      <ul spacing="normal">
        <li>
          <t><tt>trust_store.name</tt> is "example"</t>
        </li>
        <li>
          <t><tt>trust_store.version</tt> is 0</t>
        </li>
        <li>
          <t><tt>status</tt> is <tt>previous_version</tt></t>
        </li>
        <li>
          <t><tt>labels</tt> contains 2, 101</t>
        </li>
      </ul>
      <t>A certification path, C1_new, now issued by C1 would contain a TrustStoreEntry:</t>
      <ul spacing="normal">
        <li>
          <t><tt>trust_store.name</tt> is "example"</t>
        </li>
        <li>
          <t><tt>trust_store.version</tt> is 1</t>
        </li>
        <li>
          <t><tt>status</tt> is <tt>previous_version</tt></t>
        </li>
        <li>
          <t><tt>labels</tt> contains 2, 101, 200</t>
        </li>
      </ul>
      <t>A relying party which trusts trust anchors A1, A2, B1, and B2 might send a TrustExpression referencing trust store "example", version 0, with empty <tt>excluded_labels</tt>. This would match A1_old, A1_new, B1_old, and B1_new by the corresponding TrustStoreEntry. It would not match C1_old or C1_new.</t>
      <t>A relying party which trusts trust anchors A2, B1, and B2, but not A1, might send a TrustExpression referencing trust store "example", version 0, with <tt>excluded_labels</tt> of 0. This would match B1_old and B1_new, but not A1_old or A1_new because the TrustExpression excludes A1.</t>
      <t>A relying party which trusts trust anchors A1, A2, C1, and C2 might send a TrustExpression referencing trust store "example", version 1, with <tt>excluded_labels</tt> of 101. Although B1 and B2 are not contained in version 1 of the trust store, the relying party must exclude them, per <xref target="constructing-trust-expressions"/>. This TrustExpression matches the above certification paths as follows:</t>
      <ul spacing="normal">
        <li>
          <t>A1_old matches. Although it has no version 1 TrustStoreEntry, the version 0 TrustStoreEntry has a <tt>status</tt> of <tt>latest_version_at_issuance</tt>.</t>
        </li>
        <li>
          <t>A1_new matches via its version 1 TrustStoreEntry.</t>
        </li>
        <li>
          <t>B1_old does not match. Although its version 0 TrustStoreEntry has a <tt>status</tt> of <tt>latest_version_at_issuance</tt> and thus applies, <tt>excluded_labels</tt> exclude it.</t>
        </li>
        <li>
          <t>B1_new does not match. Its version 0 TrustStoreEntry has a <tt>status</tt> of <tt>previous_version</tt> and does not apply. It has no version 1 TrustStoreEntry.</t>
        </li>
        <li>
          <t>C1_old does not match. Although the relying party trusts C1, C1_old was issued before C1 was able to communicate this to the subscriber.</t>
        </li>
        <li>
          <t>C1_new matches via its version 1 TrustStoreEntry.</t>
        </li>
      </ul>
      <t>The relying party could equivalently have sent a TrustExpression referencing trust store "example", version 1, with <tt>excluded_labels</tt> of 2 and 3. This pair of labels excludes the same CAs as 101.</t>
      <t>Of the above examples, B1_old depends on the exclusion to avoid a false positive match. 100 days after February 1st, B1 and B2's trust store entries from version 0 will expire (see <xref target="expiration"/>), and the relying party no longer needs to exclude them. By this point, B1_old will have expired. B1_new may still be valid, but it does not require the exclusion.</t>
    </section>
    <section anchor="use-cases">
      <name>Use Cases</name>
      <section anchor="key-rotation">
        <name>Key Rotation</name>
        <t>In most X.509 deployments a compromise of <em>any</em> root CA's private key would compromise the entire PKI. Despite this, X.509 deployments often do not rotate root keys. The oldest certificate in <xref target="CHROME-ROOTS"/> and <xref target="MOZILLA-ROOTS"/> was issued in 1998, 25 years old as of writing in 2023. A single-certificate deployment model makes rotating root keys challenging due to the need for that certificate to be trusted by a wide range of relying parties. Not all relying parties may be quickly updated with the new root CA, either due to being offline or simply lacking an update mechanism. This means subscribers cannot switch to serving the new root, which in turn means relying parties cannot distrust the old root to complete the transition.</t>
        <t>A multi-certificate deployment model avoids these transition problems. Key rotation may proceed as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>The CA operator generates a new root CA with a separate key, but continues operating the old root CA.</t>
          </li>
          <li>
            <t>Root programs begin trusting the new root CA alongside the old one. They update their root store manifests.</t>
          </li>
          <li>
            <t>When subscribers request certificates, the CA issues certificates from both roots and provisions the subscriber with both certificates.</t>
          </li>
          <li>
            <t>Relying parties send trust expressions that evaluate to either the old or new root, and are served the appropriate option.</t>
          </li>
          <li>
            <t>Once subscribers have been provisioned with new certificates, root programs can distrust the old root without causing relying party validation failures. The CA operator continues to operate the old root CA for as long as it wishes to serve subscribers that, in turn, wish to serve older relying parties.</t>
          </li>
        </ol>
        <t>Moreover, this process can complete with no configuration changes to the subscriber, given an automated, multi-certificate-aware certificate issuance process. The subscriber does not need to know why it received two certificates, only how to select between them for each relying party, as specified in <xref target="subscriber-behavior"/>.</t>
      </section>
      <section anchor="adding-cas">
        <name>Adding CAs</name>
        <t>In the single-certificate X.509 model widely deployed today, subscribers cannot use TLS certificates issued from a new root CA until all supported relying parties have been updated to trust the new root CA. In practice, it can take several years for a new root CA to become trusted in browsers. Some relying parties, such as IoT devices, may never receive trust store updates at all.</t>
        <t>As a result, it is very difficult for subscribers that serve a wide variety of relying parties to use a newly-trusted root CA. When trust stores diverge too far, subscribers often must partition their services into multiple TLS endpoints (i.e. different DNS names) and direct different relying parties to different endpoints. Subscribers sometimes resort to TLS fingerprinting, to detect particular relying parties. But, as this repurposes other TLS fields for unintended purposes, this is unreliable and usually requires writing custom service-specific logic.</t>
        <t>In a multi-certificate deployment model, subscribers can begin serving certificates from new root CAs without interrupting relying parties that depend on existing ones.</t>
        <t>In some contexts, it may be possible to use other fields to select the new CA. For example, post-quantum-capable clients may be detected with the <tt>signature_algorithms</tt> and <tt>signature_algorithms_cert</tt> extensions. However, this assumes all post-quantum CAs are added at the same time. A multi-certificate model avoids this problem and allows for a more gradual deployment of post-quantum CAs.</t>
      </section>
      <section anchor="removing-cas">
        <name>Removing CAs</name>
        <t>To serve certificates that will validate in all supported relying parties, subscribers in a single-certificate model only serve certificates from CAs in the intersection of multiple relying party trust stores. As relying parties remove untrusted CAs over time, this intersection may shrink, reducing the set of CAs available to subscribers that can issue widely-trusted certificates. Two relying parties may each support many CAs, but may have no common CA in common.</t>
        <t>This is exacerbated by relying parties that either have not or cannot take updates, and so cannot trust newer CAs. Moreover, as relying parties do not currently report their trust stores, the subscriber may not even know which CAs are in the intersection. Often, the only option is to try the new certificate and monitor errors. For subscribers that serve many diverse relying parties, switching CAs is a disruptive and risky process.</t>
        <t>In a multi-certificate model, there is no need for subscribers to limit themselves to this intersection. In a multi-certificate model, a subscriber can obtain certificates from multiple CAs, such that each supported relying party is covered by some certificate in the set.</t>
        <t>For example, suppose a subscriber uses certificates from some CA, CA1. However, some relying party no longer trusts CA1. The subscriber can obtain certificates from another CA that is trusted by that relying party, CA2, while continuing to also use CA1. The relying party that no longer trusts CA1 will be served the CA2's certificate, while relying parties that still trust CA1 can be served the original one.</t>
      </section>
      <section anchor="intermediate-elision">
        <name>Intermediate Elision</name>
        <t>In many PKIs today, root CAs issue certificates to intermediate CAs which, in turn, issue end-entity certificates. This gives some operational and security improvements over issuing end-entity certificates directly from a root CA. The root certificate's private key is less exposed to attack and it allows for different issuance and ownership models. While the intermediate CA often inherits all the authority of the root CA, it can be replaced without changes to relying parties. Thus it can be more easily revoked and/or have a shorter lifetime.</t>
        <t>However, this comes at a size cost: the certification path, sent in the TLS handshake, includes an extra certificate. This is an extra public key and signature, as well as extra copies of X.509 metadata. (An average X.509 name in the Chrome Root Store <xref target="CHROME-ROOTS"/> or Mozilla CA Certificate Program <xref target="MOZILLA-ROOTS"/> is around 100 bytes, despite largely being an opaque identifier in modern usage.) Post-quantum signature algorithms shift this tradeoff dramatically. Dilithium3 <xref target="Dilithium"/>, for example, has a total public key and signature size of 5,245 bytes.</t>
        <t><xref target="I-D.ietf-tls-cert-abridge"/> proposes to predistribute known intermediate certificates to relying parties, as a compression scheme. A multi-certificate deployment model provides another way to achieve this effect. To relying parties, a predistributed intermediate certificate is functionally equivalent to a root certificate. PKIs use intermediate certificates because changing root certificates requires updating relying parties, but predistributed intermediates already presume updated relying parties.</t>
        <t>A CA operator could provide subscribers with two certification paths: a longer path ending at a long-lived trust anchor and shorter path the other ending at a short-lived, revocable root. Relying parties would be configured to trust both the long-lived root and the most recent short-lived root. The negotiation mechanism in <xref target="tls-certificate-negotiation"/> would then send the shorter path to up-to-date relying parties, and the longer path to older relying parties.</t>
        <t>This achieves the same effect with a more general-purpose multi-certificate mechanism. It is also more flexible, as the two paths need not be related. For example, root CA public keys are not distributed in each TLS connection, so a post-quantum signature algorithm that optimizes for signature size may be preferable. In this model, both the long-lived and short-lived root may use such an algorithm. In a compression-based model, the same intermediate must optimize both its compressed and uncompressed size, so such an algorithm may not be suitable.</t>
      </section>
      <section anchor="conflicting-relying-party-requirements">
        <name>Conflicting Relying Party Requirements</name>
        <t>A subscriber may need to support relying parties with different requirements. For example, in contexts where online revocation checks are expensive, unreliable, or privacy-sensitive, user security is best served by short-lived certificates. In other contexts, long-lived certificates may be more appropriate for, e.g., systems that are offline for long periods of time or have unreliable clocks.</t>
        <t>A single-certificate deployment model forces subscribers to find a single certificate that meets all requirements. User security then suffers in all contexts, as the PKI may not quite meet anyone's needs. In a multi-certificate deployment model, different contexts may use different trust anchors. A subscriber that supports multiple contexts would provision certificates for each, with certificate negotiation logic directing the right one to each relying party.</t>
      </section>
      <section anchor="backup-certificates">
        <name>Backup Certificates</name>
        <t>A subscriber desiring to offer a robust service to relying parties in the face of a potential future CA compromise or distrust may obtain certification paths from multiple CAs. This provides redundancy in the event that some relying party no longer supports one of the two CAs. As long as the subscriber continues to have at least one trusted certification path, it will continue to be trusted by the relying parties.</t>
        <t>In order to support this, TLS serving software SHOULD permit users to configure multiple ACME endpoints and select from the the union of the certificate paths returned by each ACME server.</t>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>The negotiation mechanism described in this document presumes the relying party's trust anchor list is not sensitive. While an attacker may already query this list by probing which certification paths are accepted by the relying party, this extension introduces a faster and more reliable method.</t>
      <t>Thus, 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 identifying information about the user. In this case, the trust anchor list SHOULD be limited to the common trust anchors. This limits the benefits of trust anchor agility to subscribers that use one of the advertised trust anchors. However, deployments that rely on an unadvertised trust anchor will fall back to the default behavior, as if this extension were not used.</t>
      <t>Likewise, a client that allows user-specified distrusts of common trust anchors will reveal user-specific information if distrusts are reflected in transmitted trust expressions. Trust expressions SHOULD be constructed as if those trust anchors were trusted. This may result in servers selecting a distrusted certificate, despite a trusted one being available.</t>
      <t>Additionally, two relying parties may express the same trust anchor list with different trust expressions. Doing so may also reveal information about an individual user. Relying parties within an anonymity set (<xref section="3.3" sectionFormat="of" target="RFC6973"/>) SHOULD send the same trust expression. To achieve this, the trust expressions SHOULD be assembled by the root program and configured in relying parties alongside trust store updates.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The certificate negotiation mechanism described in this document facilitates which certification path is served to relying parties, but has no impact on the relying party’s trust preferences themselves.</t>
      <t>As a result, this allows for a more flexible and agile PKI, which can better mitigate security risks to users. <xref target="use-cases"/> discusses some scenarios which benefit from the multi-certificate deployment this document enables. In general, robust certificate negotiation helps subscribers navigate differences in relying party requirements. This means security improvements for one set of relying parties can be deployed without needing to risk incompatibility or breakage for others.</t>
      <t>If either the subscriber's TrustStoreInclusionList or the relying party's TrustExpressionList are incorrect, the matching algorithm described in <xref target="subscriber-behavior"/> may incorrectly identify an untrusted certification path. This mechanism will not result in that path being trusted, but does present the possibility of a denial of service. These structures are provisioned by the CA and root program, respectively, who are already expected to provide accurate information.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="tls-extensiontype-updates">
        <name>TLS ExtensionType Updates</name>
        <t>IANA is requested to create the following entry in the TLS ExtensionType Values registry, defined by <xref target="RFC8446"/>:</t>
        <table>
          <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>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD</td>
              <td align="left">trust_expressions</td>
              <td align="left">CH, CR, CT</td>
              <td align="left">N</td>
              <td align="left">Y</td>
              <td align="left">[this-RFC]</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="media-type-updates">
        <name>Media Type Updates</name>
        <t>IANA is requested to create the following entry in the "Media Types" registry, defined in <xref target="RFC6838"/>:</t>
        <dl>
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>pem-certificate-chain-with-properties</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>7bit</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>Carries a cryptographic certificate and its associated certificate chain and additional properties. This media type carries no active content.</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t>[this-RFC, <xref target="media-type"/>]</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>ACME clients and servers, HTTP servers, other applications that need to be configured with a certificate chain</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <dl spacing="compact">
              <dt>Deprecated alias names for this type:</dt>
              <dd>n/a</dd>
              <dt>Magic number(s):</dt>
              <dd>n/a</dd>
              <dt>File extension(s):</dt>
              <dd>.pem</dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>n/a</dd>
            </dl>
          </dd>
          <dt>Person &amp; email address to contact for further information:</dt>
          <dd>
            <t>See Authors' Addresses section.</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>n/a</t>
          </dd>
          <dt>Author:</dt>
          <dd>
            <t>See Authors' Addresses section.</t>
          </dd>
          <dt>Change controller:</dt>
          <dd>
            <t>IESG</t>
          </dd>
        </dl>
      </section>
      <section anchor="acme-order-object-fields-updates">
        <name>ACME Order Object Fields Updates</name>
        <t>IANA is requested to create the following entry in the ACME Order Object Fields registry, defined by <xref target="RFC8555"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field Name</th>
              <th align="left">Field Type</th>
              <th align="left">Configurable</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">trustExpressions</td>
              <td align="left">boolean</td>
              <td align="left">true</td>
              <td align="left">[this-RFC]</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="certificatepropertytype-registry">
        <name>CertificatePropertyType Registry</name>
        <t>[[TODO: Establish a CertificatePropertyType registry.]]</t>
      </section>
    </section>
    <section anchor="cddl-schema">
      <name>CDDL Schema</name>
      <t>The following is a non-normative CDDL <xref target="RFC8610"/> schema which describes a trust store manifest structure (<xref target="trust-store-manifests"/>):</t>
      <artwork><![CDATA[
trust-anchor = {
    type: text,
    * text => any,
}

trust-store-entry = {
    id: text,
    labels: [+ uint],
    max_lifetime: uint,
    * text => any,
}

trust-store-version = {
    timestamp: int,
    entries: [+ trust-store-entry],
    * text => any,
}

trust-store-manifest = {
    name: text,
    max_age: uint,
    trust_anchors: {+ text => trust-anchor},
    versions: [+ trust-store-version],
    * text => any,
}
]]></artwork>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors thank Nick Harper, Sophie Schmieg, and Emily Stark for many valuable discussions and insights which led to this document, as well as review of early iterations.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="X690">
          <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="2002"/>
          </front>
          <seriesInfo name="ISO/IEC" value="8825-1:2002"/>
        </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="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="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="RFC4158">
          <front>
            <title>Internet X.509 Public Key Infrastructure: Certification Path Building</title>
            <author fullname="M. Cooper" initials="M." surname="Cooper"/>
            <author fullname="Y. Dzambasow" initials="Y." surname="Dzambasow"/>
            <author fullname="P. Hesse" initials="P." surname="Hesse"/>
            <author fullname="S. Joseph" initials="S." surname="Joseph"/>
            <author fullname="R. Nicholas" initials="R." surname="Nicholas"/>
            <date month="September" year="2005"/>
            <abstract>
              <t>This document provides guidance and recommendations to developers building X.509 public-key certification paths within their applications. By following the guidance and recommendations defined in this document, an application developer is more likely to develop a robust X.509 certificate-enabled application that can build valid certification paths across a wide range of PKI environments. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4158"/>
          <seriesInfo name="DOI" value="10.17487/RFC4158"/>
        </reference>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <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="RFC3629">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
            <date month="November" year="2003"/>
            <abstract>
              <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
          <seriesInfo name="DOI" value="10.17487/RFC3629"/>
        </reference>
        <reference anchor="RFC7468">
          <front>
            <title>Textual Encodings of PKIX, PKCS, and CMS Structures</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="S. Leonard" initials="S." surname="Leonard"/>
            <date month="April" year="2015"/>
            <abstract>
              <t>This document describes and discusses the textual encodings of the Public-Key Infrastructure X.509 (PKIX), Public-Key Cryptography Standards (PKCS), and Cryptographic Message Syntax (CMS). The textual encodings are well-known, are implemented by several applications and libraries, and are widely deployed. This document articulates the de facto rules by which existing implementations operate and defines them so that future implementations can interoperate.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7468"/>
          <seriesInfo name="DOI" value="10.17487/RFC7468"/>
        </reference>
        <reference anchor="RFC5234">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
            <author fullname="P. Overell" initials="P." surname="Overell"/>
            <date month="January" year="2008"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </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>
        <reference anchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="CHROME-ROOTS" target="https://chromium.googlesource.com/chromium/src/+/main/net/data/ssl/chrome_root_store">
          <front>
            <title>Chrome Root Store</title>
            <author>
              <organization>Chromium</organization>
            </author>
            <date year="2023" month="August" day="30"/>
          </front>
        </reference>
        <reference anchor="MOZILLA-ROOTS" target="https://wiki.mozilla.org/CA/Included_Certificates">
          <front>
            <title>Mozilla Included CA Certificate List</title>
            <author>
              <organization>Mozilla</organization>
            </author>
            <date year="2023" month="August" day="30"/>
          </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="CCADB" target="https://www.ccadb.org/">
          <front>
            <title>Common CA Database</title>
            <author>
              <organization>Mozilla</organization>
            </author>
            <author>
              <organization>Microsoft</organization>
            </author>
            <author>
              <organization>Google</organization>
            </author>
            <author>
              <organization>Apple</organization>
            </author>
            <author>
              <organization>Cisco</organization>
            </author>
            <date year="2023" month="October" day="09"/>
          </front>
        </reference>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </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="I-D.ietf-tls-cert-abridge">
          <front>
            <title>Abridged Compression for WebPKI Certificates</title>
            <author fullname="Dennis Jackson" initials="D." surname="Jackson">
              <organization>Mozilla</organization>
            </author>
            <date day="6" month="September" year="2023"/>
            <abstract>
              <t>   This draft defines a new TLS Certificate Compression scheme which
   uses a shared dictionary of root and intermediate WebPKI
   certificates.  The scheme smooths the transition to post-quantum
   certificates by eliminating the root and intermediate certificates
   from the TLS certificate chain without impacting trust negotiation.
   It also delivers better compression than alternative proposals whilst
   ensuring fair treatment for both CAs and website operators.  It may
   also be useful in other applications which store certificate chains,
   e.g.  Certificate Transparency logs.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-cert-abridge-00"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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
SUJ+bJ2Q0bv6e6THdUSvuheRUTeJeqLXQE/YKmEUhtlx7fboagObIOPSz8oM
6WOUXXF/Fi9BdNQ/7OOckpcD0RFlkfbKQK1c1SvTqVLodrHhfAFqWDMnx1a4
sXS32oIrAiTXwWunsXTR3WAnqbDLlY/cmQmB+YlzLm/fb6V3kUnJKRazzN1Q
imBqAHE9WhAoSaMUq0YLlsqb/VMrspMOb8jD1kBc5d2pqd7JUDFkb7SKeBRf
9tbkYADOuLoVyaPDBILWAO3kpchsbuftA0KCa2YT2RmL0waYMuYaZOeJ28RG
tkfwSX0BuLmBSdsRp13gbLrPga4ovR0zLp9H6dLa1KiRXLIH33IaBt5Zx727
4uMjh0XkO7ZBMd0mIeE1KE+LLTdjXZxF2B/ddXhyT8ocG59dIa+rgS004S6z
pkUGOM3AlUXE9kk0zyhDCbM2NAURiQFYK+mqbfaQrh11KSZHb875vl2uROKe
st7zxHLcQzvsJPNThLEcgfNVYDmYbQofIRSXBSrVwIvpTq2RtkKaaX9+7PTf
15AO1t2IywEpD07ufmu9Sn7JFaNa/wrzriuM/emLwq+wwKKCwYtck6nXwELK
0qZ/t1Z9nAF24aAIPl19fVlfFTNuN5bfQyXpHU8R8KpC9eWqdx5c+h0lkjfr
VRfLj0IjpWxt0QUCWn6NhY4MKdWG0E3lP2CL7aLrFQcJhTI+BZeO++kJR1oN
iq7h+278V+DC3Xo5nuUrwqumXdr0o45Tiq3eOtBWgQqEUo/eIZa8emggiG/r
W+PkUA6sDUmNcrA8kNhcxQwgigRLpxQyZJE20Tbob2GkSrKYQ/WRNQvOU2Xe
Rcn5IP4pv8fberxeLgKDmf4ZRp4t279QcRtQgbv90fY7K6q7uXNIZV7KeWJh
JNwS0xLxUbYRCyMiOc2Xr73uBwmvilZdx2UVfMMi3R8NMka4Hs7B7Zbo0nW5
Z8abjCzlBXCIa+wBOV/PVBGW+kTa1BvQldRN0+PLeM44aYplpuW4USe92zpp
c5Fs1yz5JSYkwpSs1du2AlWtVYfazB7/0DI1yifMYbapll8lD62osTIgJtWp
BCdxKWLKXtquzwjlcB5Nw2UVTivL+/gXg9zd4YAN9ptO5IW/fckeCtQhBvUz
0Z0KupOllW6pPUoBnRqFEw/Fd9SutAKJFIaNZSZxe2tAH7b9l5vwmNEMSFza
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
AAA=

-->

</rfc>
