<?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.11 (Ruby 3.2.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-davidben-tls-trust-expr-03" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.21.0 -->
  <front>
    <title>TLS Trust Expressions</title>
    <seriesInfo name="Internet-Draft" value="draft-davidben-tls-trust-expr-03"/>
    <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="2024" month="May" day="24"/>
    <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 are used as assertions by a certification authority (CA) that associate some TLS key with some DNS name or other identifier. If the peer trusts the CA, 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. This certificate must then simultaneously meet requirements for all relying parties.</t>
      <t>This constraint imposes costs on the ecosystem as PKIs evolve over time. The older the relying party, the more its requirements may have diverged from newer ones, making it increasingly difficult for subscribers to support both. This translates to analogous costs for CAs and relying parties:</t>
      <ul spacing="normal">
        <li>
          <t>For a new CA to be usable by subscribers, it must be trusted by all relying parties. This is particularly challenging for older, unupdatable relying parties. Existing CAs face similar challenges when rotating or deploying new keys.</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 that still support older relying parties.</t>
        </li>
      </ul>
      <t>This document aims to remove this constraint with a multi-certificate deployment model. Subscribers are instead provisioned with multiple certificates and automatically select the correct one to use with each relying party. This allows a single subscriber to use different certificates for different relying parties, including older and newer ones.</t>
      <t>This model requires the endpoints to somehow negotiate which certificate to use. <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. Instead, 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.</t>
      <t>Together, these mechanisms enable subscribers to deploy multiple certificates, which supports a more flexible, robust Public Key Infrastructure (PKI). <xref target="use-cases"/> discusses several deployment use cases that benefit from 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 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 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"/>.</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 representing 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. <xref target="privacy-considerations"/> discusses which trust anchors to advertise. Each trust expression to be sent advertises a subset of some trust store version. To communicate a set of trust anchors that span multiple trust stores, relying parties MAY send multiple trust expressions, each referencing a different trust store.</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"/>.</t>
        <t>When an ACME server processes an order object, 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. 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> excludes 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 compromises the entire PKI. Yet key rotation in PKIs is rare. In 2023, the oldest root in <xref target="CHROME-ROOTS"/> and <xref target="MOZILLA-ROOTS"/> was 25 years old, dating to 1998. Key rotation is challenging in a single-certificate deployment model. As long as any older relying party requires the old root, subscribers cannot switch to the new root, which in turn means relying parties cannot distrust the old root, leaving them vulnerable.</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>This process requires 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 model, 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. This can take years or more. 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>Subscribers in a single-certificate model are limited to CAs in the intersection of their supported relying parties. As newer relying parties remove untrusted CAs over time,the intersection with older relying parties shrinks. Moreover, 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, this is a disruptive and risky process.</t>
        <t>The multi-certificate model removes this constraint. If a subscriber's CA is distrusted, it can continue to use that CA, in addition to a newer one. This removes the risk that some older relying party required that CA and was incompatible with the new one. The mechanisms in this document will select an appropriate certificate for each relying party.</t>
      </section>
      <section anchor="other-root-transitions">
        <name>Other Root Transitions</name>
        <t>The mechanisms in this document can aid PKI transitions beyond key rotation. For example, a CA operator may generate a postquantum root CA and use the mechanism in <xref target="acme-extension"/> to issue from the classical and postquantum roots concurrently. The subscriber will then, transparently and with no configuration change, serve both. As in <xref target="key-rotation"/>, newer relying parties can then remove the classical roots, while older relying parties continue to function.</t>
        <t>This same procedure may also be used to transition between newer, more size-efficient signature algorithms, as they are developed.</t>
        <t>[[TODO: There's one missing piece, which is that some servers may attempt to parse the signature algorithms out of the certificate chain. See https://github.com/davidben/tls-trust-expressions/issues/9 ]]</t>
      </section>
      <section anchor="intermediate-elision">
        <name>Intermediate Elision</name>
        <t>Today, root CAs typically issue shorter-lived intermediate certificates which, in turn, issue end-entity certificates. The long-lived root key is less exposed to attack, while the short-lived intermediate key can be more easily replaced without changes to relying parties.</t>
        <t>This operational improvement comes at a bandwidth cost: the TLS handshake includes an extra certificate, which includes a public key, signature, and 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 alone. Post-quantum signature algorithms will dramatically shift this tradeoff. 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 roots 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 may obtain certificate paths from multiple CAs for redundancy in the face of future CA compromises. If one CA is compromised and removed from newer relying parties, the TLS server software will transparently serve the other one.</t>
        <t>To support this, TLS serving software SHOULD permit users to configure multiple ACME endpoints and select from 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 is analogous to the <tt>certificate_authorities</tt> extension (<xref section="4.2.4" sectionFormat="of" target="RFC8446"/>), but more size-efficient. Like that extension, it presumes the advertised trust anchor list is not sensitive.</t>
      <t>Thus, this mechanism SHOULD NOT be used to advertise trust anchors or distrusts which are unique to an individual user. Rather, trust expressions SHOULD be computed based only on the trust anchors common to the relying party's anonymity set (<xref section="3.3" sectionFormat="of" target="RFC6973"/>). Additionally, multiple trust expressions may evaluate to the same trust anchor list, so relying parties in the same anonymity set SHOULD send the same trust expression. To achieve this, trust expressions SHOULD be assembled by the root program and configured in relying parties alongside trust store updates.</t>
      <t>For example, a web browser may support both a common set of trust anchors configured by the browser vendor, along with user-specified additions and removals. The common trust anchors would reveal, at most, which browser is used, while the user-specified modifications may reveal identifying information about the user. The trust expression SHOULD reflect only the common trust anchors. This limits the benefits of trust anchor agility in two ways:</t>
      <ul spacing="normal">
        <li>
          <t>If a subscriber relies on a user-specified addition, the procedure in <xref target="subscriber-behavior"/> will fallback to preexisting behavior, such as selecting a default certificate. The subscriber then relies on the default certificate matching the relying party.</t>
        </li>
        <li>
          <t>If a subscriber has a certificate issued by a CA distrusted by the user, the procedure in <xref target="subscriber-behavior"/> may select a distrusted certificate. In that case, the connection will fail, even if the subscriber has another certificate available.</t>
        </li>
      </ul>
      <t>Both of these cases match the preexisting behavior in PKIs that do not use trust expressions.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="relying-party-policies-and-agility">
        <name>Relying Party Policies and Agility</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>For example, agility reduces pressures on relying parties to sacrifice user security for compatibility. Suppose a subscriber currently uses some CA, but a relying party deems trusting that CA to pose an unacceptable security risk to its users. In a single-certificate deployment, those subscribers may be unwilling to adopt a CA trusted by the relying party, as switching CAs risks compatibility problems elsewhere. The relying party then faces compatibility pressure add this CA, sacrificing user security. However, in a multi-certificate deployment, the subscriber can use its existing CA <em>in addition to</em> another CA trusted by relying party B. This allows the ecosystem to improve interoperability, while still meeting relying party B's user-security goals.</t>
      </section>
      <section anchor="incorrect-selection-metadata">
        <name>Incorrect Selection Metadata</name>
        <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="serving-multiple-certificates">
        <name>Serving Multiple Certificates</name>
        <t>In a multi-certificate deployment, subscribers have a collection of certificates available to satisfy relying parties with potentially different security policies. It is possible that some of these policies will only be satisifed by certificates from less trustworthy CAs, such as if the relying party is out of date but still important for the subscriber to support. If a certificate asserts the correct information about the subscriber (TLS key, DNS names, etc.), the subscriber can safely present it, even if the CA is otherwise untrustworthy. In particular, doing so does not allow the CA decrypt or intercept the connection.</t>
        <t>However, the subscriber presenting a certificate is not an endorsement of the CA. The subscriber's role is to present a certificate which will convince the relying party of the correct subscriber information. Subscribers do not vet CAs for trustworthiness, only the correctness of their specific, configured certificates and the CA's ability to meet the subscriber's requirements, such as availability, compatibility, and performance. It is the responsibility of the relying party, and its corresponding root program, to determine the set of trusted CAs. Trusting a CA means trusting <em>all</em> certificates issued by that CA, so it is not enough to observe subscribers serving correct certificates. An untrustworthy CA may sign one correct certificate, but still have signed other incorrect certificates that can attack the relying party. Root program management is a complex, security-critical process, the full considerations of which are outside the scope of this document.</t>
      </section>
    </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>IETF</t>
          </dd>
        </dl>
      </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="16" month="March" year="2024"/>
            <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-01"/>
        </reference>
      </references>
    </references>
    <?line 847?>

<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+19a3cbx5Xgd/6KHvqclZQAEEk9LNNJPHw5ZiKJWpLOTCbH
KzWAAtBRoxvpapCGZc3v2fkd88f2PuvVDYrKY3f2nPHJjE10d9WtW7fu+94a
Doc7bdGW5jDbvX55lV03a9tmZz+uGmNtUVd2d2eSt2ZeN5vDzLbTnZ1pPany
Jbw/bfJZO5zmN8V0bKphW9phi18PDXw93HuyY9fjZUGjtJsVfHB+dv1tln2R
5aWtYbqimpqVgf9XtbuDbNdMi7ZuirzEP86PjuFfdQP/dXn97e5OtV6OTXO4
MwVYDncmAJep7NoeZjCj2bk5zJ7s5I3JYdQrM1k3RbvZ3bmtm/fzpl6vcGlN
XtlV3bTZy3xjmsy/dWOqNQyZZZ9+Nct4Hbv/AiMX1Tz7LX6Cvy/zooTfAQX/
XJh2NqqbOf6cN5MF/Lxo25U9fPwY38Kfihsz0tce4w+Px019a81j+P4xfjcv
2sV6DF8qch/HyHVbk2UlIMS2wST6yYgHGRV1/8eP79y+0aJdlrs7O/m6XdSA
92wIc2VZUQHKd09H2bGp/pwvi2qXfmZ62D3FsZJHsMS8Kn7KW5gTXvltXc9L
k718ecKPDWNOofjnOT0fTerlTmfOiwfHTWGSKc1NXcVP7jdjbjfLpWmbYrJ9
zmNc5+R9NOFxPQ5+vN9c47GJJqnqZgmf3BDZvbm4Ov/Xw+z04ny0vzfa39/7
6vH52dnZ1fXp6GBv/8XoxcGXX+4/ewKgZf/6/Ku9QxoY/tFDe17NeDjAQ2sm
i6ou6/kmG2ZHV69H+5mpJvUUafVyXRpY1NXKTIpZMeEP6ll2nNtikp1Fr2UP
j88uHw2yk7yqK3i37Dw/gedZXk2z08K28Pu6sAsz7bx2Cq/tKsR0drODvb0D
/cVRl/4D+AQ2cf398Fp/swZ21hawyOC186sLQNLJYfbixcGz4f4hjblTKCYQ
sfDyyXeXF6/OhpcXF9dX/LHg7GTR1EuTXdZ1m10BzzH8MG/mBk6SHqQJvlWs
lyPeOluvmwltoHvy2DaTx7/EY109rkwLR6/NH1tb8gvmbQMTvLVuAl3/wZPh
3ovhk72dFAVDXv+JDI9reHXxb+cvXx71LOJV/VNRlnl2Xk3K9RRwf3KUnZim
5c0FIoSN6V3XbfG+GC35a+JAJ0ePdZC3wQj2s4AWcBDm06IE1gMLiJF++cer
66OXV0P3ODsqQazAfy9jqrREWFfrFTJhJKbTerJegpSgp71rWv1lOGk2tgXJ
Qkua6hy8J+7PoQ0nGgL7rqZPhrC6/b2DvRej1XQWL3p/uHcA6+4uWmiR+cQV
8Im8UDoXRnG1KPyv8fsvR9npepLb5IuX//kfdfgg/uhslP2+KNufko/Oivcm
fBB/dD3KXppVXYCEjT+7zqtJ85//e2ri5/HXf4CvN+txDkf7xr7fJEP8IZ8W
y54X4jHejLKryeI2H5vk8zemReEaPou//C18aYrSNMmHv21QG4mexR+CqLhq
zaL8z/9IvjwFsWQq/xB5xMnR6XFMp/VyCZwRTtMpkA6srZ873N7ejiaTfDom
ekuPyv7ecO+rrVRDB2ZXTsxu36Ni0tS2nrV9D1nI9D05Wq36H5wUdlLDeofD
YZaPbdvkk3Zn53pR2GwqZyubmllRAc9GJZD0gCxQFgZZni1BuICws8sM2GzW
mHKDZ3OVwxmFz9o6s+vJpKgmbbnJQEG7MRseB1jTxHEVFDqMksJ/NraTpgD1
zmbjDQw8Mw1ILRwc921K3OAGnsK38BfDRlzVjrLzlrRJB731XMPBawngcBqY
1dzk5Rr5ZLsw1vSuGKa1pjSTNoOJUVRaA2CAMMxvUJEbg6SPF7bK2wUNjqMA
TkcZodhU+K5FFK7LthhOAi4NGnBZb2gDlvXUlAOCFd6E5WX5HEic4JiV5scC
J3zz+3OAOG+zSV5lY9PiGVoaAwgRLRXw95d10Rgc0o54y5fFdFqanZ0vQFi0
TT1dT4iR7uBWf/jwT5ffnrx4+vT5x48A6ZSYgUVFF+U+bCXuFozF4K4tYvZf
R8/2vgrWDmvjYZ4dvNj7+BGXjTgFhRw+wA2EtVuLryNzhz3Ot1DEBhSLo0e8
QPiinhQ4qUVhjbC+B5K6BUbOv5y+viICQSuhBhibrEBTAkY1DRDGDHc2Wxn4
nTbX0t8nR4OsaGGUErZxMjGrFn4urJsNoCHww2UrmW8yePF9Vd9WuCIczdMU
7ZKbsODH4RnZwF5chSToELxq6pvCEhoyRG9EVobpAaAVygZ0JkdvAHQwyQHR
nTM5rbMKVBxQWZbrike7XRSTBWDB0u7I+RQ6DWdd4nFADABISLV5Zeq1BWiJ
2EIacwAms4+EwaCtBgwHqCorlqvaGvwJtwP1VUCSgb9AcpslIhXIG87LTV3e
wLbe4NYVS8MbUpdT/DtF64B+ouNSwKARZMt8ky1yGGoKKiGwbzhHoFlllbmF
keBMA+qWORlyQBLAucCApA3YwAczQASsu491yE5kY6A6QV2LNiOZYvhCXuWg
gwO+ZKU4BqG86mweKKq/yL6lIw9godSB78d4boi/wFkJJifSpZ0Zu72j49SD
fYYL/kc/wFLyBvnyAt411RzfRKgIqYNsXa1XqCjhlJ2Bzn5kFZ+WMMsnBkkC
DVk3Gqz6FkmlqVs+LTAyMzZi4rAuOLlIEL/I/gXfy+Mt5CURBLyJq7osJiId
iN5wiF4G5zEyWdRAW8gSbw1MATS/Qi2a+BVQGhyPxg8B8BEt4kM8dPOK6B5I
dLxugIngF9GmI0MCJPhjKOS4headUM2LJa0CwAVyZlYTHAhiZvcRC6DRBODg
0QVVpzX51HMPIAUajgZbxUyESQ9YWo3mEbMdEW14eiZ106iYA2CRldBQJgde
ETMxJisYoL61nl8FfFC+xwOEYryNwUCa8486jKwgM4S2jNCLUPvTqtgljCgZ
MKcNBFdN0mFR38KX87otPNcLEcxgjkBuXRmShtnT0cHoKUp5Lw5VqcAZ3gVf
vw00mHegNLSmwh0ARrxuiZUAc5vBj0hkqGohxmEHUWiF2gvtY4l65cCJDxat
r1GsAZGAoF7jXsNBrgxypIK0CuQX5sd8Cbs8QK4JQB+t5zgwKp/MEdU8TKzC
N009b/IlrDuyLGGxt/W6nLK7wGT7T5+SbEV8glGFO7L/dPD02ZfAblrSu5j8
BkzSHSUyJ3ntMMO6VK9qxrIe6akjvvijhPUGKqaXal42Mn7BuIH9SbXLgagv
oJ0N7QKQP82KwHkSniTUQ9E7sGJ0MSzA/wYAJJqQ6GMoUaRf12AVLJCHsh4Z
rIzVvnQFfLL7T+lACFWWY1UPVO0PZq/HuL436zFwyOz3oA+dV7Mm96TyECTo
IyRroO4hWJLGIh2D+r+2KHlVgw34C55WepG3YmyA0oCGSVK27riNUHs8Qa2+
8ib6Ke52QX/j0TSsoNXN1IIJ8/3VNTpy8d/Z6wv678uz//n9+eXZKf731XdH
L1+6/9A3rr67+P4lPN+R//Jfnly8enX2+pQ/hl+z5KdXR3/c5WO0e/Hm+vzi
9dHLXdheWsKO58eNEQELzMI0QAkt66dTw5uEJJEdn7wBched9mB//yvAoejJ
+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

-->

</rfc>
