<?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-01" 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-01"/>
    <author initials="D." surname="Benjamin" fullname="David Benjamin">
      <organization>Google LLC</organization>
      <address>
        <email>davidben@google.com</email>
      </address>
    </author>
    <author initials="D." surname="O'Brien" fullname="Devon O'Brien">
      <organization>Google LLC</organization>
      <address>
        <email>asymmetric@google.com</email>
      </address>
    </author>
    <author initials="B." surname="Beck" fullname="Bob Beck">
      <organization>Google LLC</organization>
      <address>
        <email>bbe@google.com</email>
      </address>
    </author>
    <date year="2023" month="October" day="23"/>
    <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 for all supported relying parties, because relying parties do not communicate which CAs are trusted. The certificate must then meet all relying party requirements simultaneously. This constraint 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>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 negotiation 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 TrustStoreInclusion'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 TrustStoreInclusion 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 be able to issue certificate paths, each with an associated CertificatePropertyList by defining a new media type in <xref target="media-type"/>. 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 have a TrustStoreInclusion:</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 have a TrustStoreInclusion:</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 have no TrustStoreInclusions 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, newly issued by A1, would have two TrustStoreInclusions. 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, newly issued by B1, would have a TrustStoreInclusion:</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, newly issued by C1, would have a TrustStoreInclusion:</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 TrustStoreInclusion. 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 TrustStoreInclusion, the version 0 TrustStoreInclusion has a <tt>status</tt> of <tt>latest_version_at_issuance</tt>.</t>
        </li>
        <li>
          <t>A1_new matches via its version 1 TrustStoreInclusion.</t>
        </li>
        <li>
          <t>B1_old does not match. Although its version 0 TrustStoreInclusion 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 TrustStoreInclusion has a <tt>status</tt> of <tt>previous_version</tt> and does not apply. It has no version 1 TrustStoreInclusion.</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 TrustStoreInclusion.</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 safely distrust the old root in new relying parties. 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.</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>
  </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>
    <?line 837?>

<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>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+19a3fcxpXgd/4KDH3OSkq6WyT1sEwn8VAkbXMiiVqSTiaT
45XQ3UU2QjTQAdCk27Lm9+z8jvlje5/1QoGi42R39pzxmYnNBlB169at+763
xuPxVld0pdnPti9enWcXzbrtsuMfVo1p26Ku2u2tWd6Zq7rZ7GdtN9/amtez
Kl/C+/Mmv+zG8/ymmE9NNe7Kdtzh12MDX493drfa9XRZ0CjdZgUfnBxffJ1l
n2V52dYwXVHNzcrA/1Td9ijbNvOiq5siL/GPk4OX8K+6gf86u/h6e6taL6em
2d+aAyz7WzOAy1Ttut3PYEazdbOfPdnKG5PDqOdmtm6KbrO9dVs311dNvV7h
0pq8ald102Wv8o1pMvfWjanWMGSWffrVLON1bP8RRi6qq+wb/AR/X+ZFCb8D
Cv65MN3lpG6u8Oe8mS3g50XXrdr9x4/xLfypuDETfe0x/vB42tS3rXkM3z/G
766KbrGewpeK3Mchcu3WZFkJCGk7bxL9ZMKDTIo6/fHjO7dvsuiW5fbWVr7u
FjXgPRvDXFlWVIDy7aNJ9tJUf8mXRbVNPzM9bB/hWNEjWGJeFT/mHcwJr3xT
11elyV69OuTHhjGnUPzzFT2fzOrlVm/O0wcvm8JEU5qbugqf3G/GvN0sl6Zr
itnwnC9xnbPrYMKX9dT78X5zTacmmKSqmyV8ckNk9/b0/ORf97Oj05PJ7s5k
d3fni8cnx8fH5xdHk72d3ReTF3uff7777AmAlv3r8y929mlg+EcP7Ul1ycMB
HjozW1R1WV9tsnF2cP5mspuZalbPkVbP1qWBRZ2vzKy4LGb8QX2ZvczbYpYd
B69lD18enz0aZYd5VVfwbtl7fgjPs7yaZ0dF28Hv66JdmHnvtSN4bVshprOb
7e3s7Okvlrr0H8AnsImL78YX+ltrYGfbAhbpvXZyfgpIOtzPXrzYezbe3acx
twrFBCIWXj789uz09fH47PT04pw/FpwdLpp6abKzuu6yc+A5hh/mzZWBk6QH
aYZvFevlhLeurdfNjDbQPnncNrPHv8ZjXT2uTAdHr8sft23JL5h3DUzwrrUT
6Pr3nox3Xoyf7GzFKBjz+g9leFzD69N/O3n16iCxiNf1j0VZ5tlJNSvXc8D9
4UF2aJqONxeIEDYmua7b4rqYLPlr4kCHB491kHfeCO3PAlrAQZiPihJYDywg
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

-->

</rfc>
