<?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.7 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-davidben-tls-trust-expr-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.20.0 -->
  <front>
    <title>TLS Trust Expressions</title>
    <seriesInfo name="Internet-Draft" value="draft-davidben-tls-trust-expr-02"/>
    <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="March" day="04"/>
    <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"/>. For example, <xref target="acme-extension"/> defines a "trustExpressions" ACME order field.</t>
      <section anchor="trust-store-inclusion">
        <name>Trust Store Inclusion</name>
        <t>The <tt>trust_stores</tt> property specifies which trust stores contain the certification path's trust anchor. Its <tt>data</tt> field contains a TrustStoreInclusionList, defined below:</t>
        <artwork><![CDATA[
enum {
    previous_version(0),
    latest_version_at_issuance(1)
} TrustStoreStatus;

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

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

TrustStoreInclusion TrustStoreInclusionList<1..2^16-1>;
]]></artwork>
        <t>Each TrustStoreInclusion describes a trust store version which contains this certification path's trust anchor. <tt>trust_store</tt> specifies a version of the trust store, and <tt>labels</tt> specifies the trust anchor's labels within that trust store.</t>
        <t>If <tt>status</tt> is <tt>latest_version_at_issuance</tt>, <tt>trust_store</tt> was the latest trust store of its name at the time the certificate was issued. In this case, the trust expression evaluation algorithm (<xref target="evaluating-trust-expressions"/>) predicts this information additionally applies to all versions greater than <tt>trust_store</tt>'s <tt>version</tt>, up to the expiration of the certification path.</t>
        <t>A TrustStoreInclusionList MUST satisfy the following invariants:</t>
        <ul spacing="normal">
          <li>
            <t>Each TrustStoreInclusion has a unique <tt>trust_store</tt> value.</t>
          </li>
          <li>
            <t>The TrustStoreInclusion structures are sorted, first by length of <tt>trust_store</tt>'s <tt>name</tt>, then by <tt>trust_store</tt>'s <tt>name</tt> lexicographically, then by <tt>trust_store</tt>'s <tt>version</tt>.</t>
          </li>
          <li>
            <t>If <tt>status</tt> is <tt>latest_version_at_issuance</tt> in some TrustStoreInclusion, no <tt>trust_store</tt> with the same <tt>name</tt> but higher <tt>version</tt> appears in the list.</t>
          </li>
        </ul>
      </section>
      <section anchor="computing-trust-store-inclusions">
        <name>Computing Trust Store Inclusions</name>
        <t>Each CA regularly fetches trust store manifests from root programs in which it participates, caching the most recently fetched manifest from each root program. When issuing a certification path to a subscriber, it runs the following procedure on each root program's trust store manifest, to compute a list of TrustStoreInclusions:</t>
        <ol spacing="normal" type="1"><li>
            <t>If the cached manifest was fetched more than <tt>max_age</tt> seconds ago, fetch and cache a new copy.</t>
          </li>
          <li>
            <t>For each trust store version in the cached manifest's <tt>versions</tt>:  </t>
            <ol spacing="normal" type="a"><li>
                <t>Look for a trust store entry whose <tt>id</tt>, when indexed into <tt>trust_anchors</tt>, matches the certification path's trust anchor.</t>
              </li>
              <li>
                <t>If found, output a TrustStoreInclusion structure:      </t>
                <ul spacing="normal">
                  <li>
                    <t>Set <tt>trust_store</tt> to the manifest's <tt>name</tt>, encoded in UTF-8 <xref target="RFC3629"/>, and the version's version number.</t>
                  </li>
                  <li>
                    <t>Set <tt>status</tt> to <tt>latest_version_at_issuance</tt> if the trust store version is currently the latest version. Otherwise, set it to <tt>previous_version</tt>.</t>
                  </li>
                  <li>
                    <t>Set <tt>labels</tt> to the trust store entry's <tt>labels</tt>.</t>
                  </li>
                </ul>
              </li>
            </ol>
          </li>
        </ol>
        <t>If the above procedure outputs a TrustStoreInclusion with <tt>status</tt> of <tt>latest_version_at_issuance</tt>, the certification path's lifetime MUST NOT exceed the corresponding trust store entry's <tt>max_lifetime</tt> field. This ensures the procedures in <xref target="evaluating-trust-expressions"/> and <xref target="constructing-trust-expressions"/> interoperate correctly.</t>
        <t>The CA combines the outputs of this procedure for each known manifest to form the final TrustStoreInclusionList. To aid the CA in collecting manifests, repositories such as <xref target="CCADB"/> can publish a directory of trust store manifests from participating root programs.</t>
      </section>
      <section anchor="media-type">
        <name>Media Type</name>
        <t>A certification path with its associated CertificationPropertyList may be represented in a PEM <xref target="RFC7468"/> structure in a file of type "application/pem-certificate-chain-with-properties". Files of this type MUST use the strict encoding and MUST NOT include explanatory text.  The ABNF <xref target="RFC5234"/> for this format is
as follows, where "stricttextualmsg" and "eol" are as defined in
<xref section="3" sectionFormat="of" target="RFC7468"/>:</t>
        <artwork><![CDATA[
certchainwithproperties = stricttextualmsg eol stricttextualmsg
                          *(eol stricttextualmsg)
]]></artwork>
        <t>The first element MUST be the encoded CertificatePropertyList.
The second element MUST be an end-entity certificate.  Each following
certificate MUST directly certify the one preceding it. The certificate 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"/>. It extends the ACME order object with a configurable boolean field, "trustExpressions".</t>
        <t>First, ACME clients indicate they support certification paths selected by trust expressions by setting "trustExpressions" to "true" in the ACME newOrder request (<xref section="7.4" sectionFormat="of" target="RFC8555"/>). If the server accepts the request, it MUST reflect the field in the resulting order object.</t>
        <t>When an ACME server processes an order object with the "trustExpressions" field set to "true", it MAY issue multiple certification paths, each with an associated TrustStoreInclusionList, computed as in <xref target="computing-trust-store-inclusions"/>. These paths MAY share an end-entity certificate but end at different trust anchors, or they MAY be completely distinct. If the latter, the "trustExpressions" order field allows the ACME server to skip issuing unnecessary end-entity certificates for ACME clients that would be unable to use them. The ACME server encodes each certification path using the application/pem-certificate-chain-with-properties format, defined in <xref target="media-type"/>).  Note this format is required to form a complete certification path. The CA MUST return a result that may be verified by relying parties without path building <xref target="RFC4158"/>.</t>
        <t>The ACME server provides additional results to the client with the link relation header fields described in <xref section="7.4.2" sectionFormat="of" target="RFC8555"/>. When fetching certificates, the ACME client includes application/pem-certificate-chain-with-properties in its Accept header to indicate it supports the new format. Unlike the original mechanism described in <xref target="RFC8555"/>, these certification paths do not require heuristics to be used. Instead, the ACME client uses the associated TrustStoreInclusionLists to select a path as described in <xref target="subscriber-behavior"/>.</t>
        <t>When the ACME client wishes to renew any of the certification paths issued in this order, it repeats this process to renew each path concurrently. Thus this extension is suitable when the CA is willing to issue and renew all paths together. It may not be appropriate if the paths have significantly different processing times or lifetimes. Future enhancements to ACME may be defined to address these cases, e.g. by allowing the ACME client to make independent orders.</t>
      </section>
    </section>
    <section anchor="example">
      <name>Example</name>
      <t>Suppose A1, A2, B1, B2, C1, and C2 are X.509 root certificates, such that A1 and A2 share an operator, B1 and B2 share an operator, and C1 and C2 share an operator.</t>
      <t>On January 1st, 2023, the root program includes A1, A2, B1, and B2. It allocates labels 0 through 3 for each individual CA and then 100 and 101 for the two CA operators. The CAs issue 90 day certificates and are permitted to use manifests stale by 10 days. The root store manifest may then be:</t>
      <artwork><![CDATA[
{
  "name": "example",
  "max_age": 864000,
  "trust_anchors": {
    "A1": {"type": "x509", "data": "..."},
    "A2": {"type": "x509", "data": "..."},
    "B1": {"type": "x509", "data": "..."},
    "B2": {"type": "x509", "data": "..."}
  },
  "versions": [
    {
      "timestamp": 1672531200,
      "entries": [
        {"id": "A1", "labels": [0, 100],
         "max_lifetime": 7776000},
        {"id": "A2", "labels": [1, 100],
         "max_lifetime": 7776000},
        {"id": "B1", "labels": [2, 101],
         "max_lifetime": 7776000},
        {"id": "B2", "labels": [3, 101],
         "max_lifetime": 7776000}
      ]
    }
  ]
}
]]></artwork>
      <t>A certification path, A1_old, issued by A1, would have a TrustStoreInclusion:</t>
      <ul spacing="normal">
        <li>
          <t><tt>trust_store.name</tt> is "example"</t>
        </li>
        <li>
          <t><tt>trust_store.version</tt> is 0</t>
        </li>
        <li>
          <t><tt>status</tt> is <tt>latest_version_at_issuance</tt></t>
        </li>
        <li>
          <t><tt>labels</tt> is 0, 100</t>
        </li>
      </ul>
      <t>A certification path, B1_old, issued by B1, would have a TrustStoreInclusion:</t>
      <ul spacing="normal">
        <li>
          <t><tt>trust_store.name</tt> is "example"</t>
        </li>
        <li>
          <t><tt>trust_store.version</tt> is 0</t>
        </li>
        <li>
          <t><tt>status</tt> is <tt>latest_version_at_issuance</tt></t>
        </li>
        <li>
          <t><tt>labels</tt> is 2, 101</t>
        </li>
      </ul>
      <t>A certification path, C1_old, issued by C1, would have no TrustStoreInclusions that reference "example".</t>
      <t>On February 1st, 2023, the root program added CAs C1 and C2 but removed CAs B1 and B2. It continues the previous label allocation scheme, but now wishes to allocate label 200 for CAs A1 and C1. The manifest may then be:</t>
      <artwork><![CDATA[
{
  "name": "example",
  "max_age": 864000,
  "trust_anchors": {
    "A1": {"type": "x509", "data": "..."},
    "A2": {"type": "x509", "data": "..."},
    "B1": {"type": "x509", "data": "..."},
    "B2": {"type": "x509", "data": "..."},
    "C1": {"type": "x509", "data": "..."},
    "C2": {"type": "x509", "data": "..."}
  },
  "versions": [
    {
      "timestamp": 1672531200,
      "entries": [
        {"id": "A1", "labels": [0, 100],
         "max_lifetime": 7776000},
        {"id": "A2", "labels": [1, 100],
         "max_lifetime": 7776000},
        {"id": "B1", "labels": [2, 101],
         "max_lifetime": 7776000},
        {"id": "B2", "labels": [3, 101],
         "max_lifetime": 7776000}
      ]
    },
    {
      "timestamp": 1675209600,
      "entries": [
        {"id": "A1", "labels": [0, 100, 200],
         "max_lifetime": 7776000},
        {"id": "A2", "labels": [1, 100],
         "max_lifetime": 7776000},
        {"id": "C1", "labels": [4, 102, 200],
         "max_lifetime": 7776000},
        {"id": "C2", "labels": [5, 102],
         "max_lifetime": 7776000}
      ]
    }
  ]
}
]]></artwork>
      <t>A certification path, A1_new, newly issued by A1, would have two TrustStoreInclusions. The first:</t>
      <ul spacing="normal">
        <li>
          <t><tt>trust_store.name</tt> is "example"</t>
        </li>
        <li>
          <t><tt>trust_store.version</tt> is 0</t>
        </li>
        <li>
          <t><tt>status</tt> is <tt>previous_version</tt></t>
        </li>
        <li>
          <t><tt>labels</tt> is 0, 100</t>
        </li>
      </ul>
      <t>And the second:</t>
      <ul spacing="normal">
        <li>
          <t><tt>trust_store.name</tt> is "example"</t>
        </li>
        <li>
          <t><tt>trust_store.version</tt> is 1</t>
        </li>
        <li>
          <t><tt>status</tt> is <tt>latest_version_at_issuance</tt></t>
        </li>
        <li>
          <t><tt>labels</tt> is 0, 100, 200</t>
        </li>
      </ul>
      <t>A certification path, B1_new, newly issued by B1, would have a TrustStoreInclusion:</t>
      <ul spacing="normal">
        <li>
          <t><tt>trust_store.name</tt> is "example"</t>
        </li>
        <li>
          <t><tt>trust_store.version</tt> is 0</t>
        </li>
        <li>
          <t><tt>status</tt> is <tt>previous_version</tt></t>
        </li>
        <li>
          <t><tt>labels</tt> contains 2, 101</t>
        </li>
      </ul>
      <t>A certification path, C1_new, newly issued by C1, would have a TrustStoreInclusion:</t>
      <ul spacing="normal">
        <li>
          <t><tt>trust_store.name</tt> is "example"</t>
        </li>
        <li>
          <t><tt>trust_store.version</tt> is 1</t>
        </li>
        <li>
          <t><tt>status</tt> is <tt>previous_version</tt></t>
        </li>
        <li>
          <t><tt>labels</tt> contains 2, 101, 200</t>
        </li>
      </ul>
      <t>A relying party which trusts trust anchors A1, A2, B1, and B2 might send a TrustExpression referencing trust store "example", version 0, with empty <tt>excluded_labels</tt>. This would match A1_old, A1_new, B1_old, and B1_new by the corresponding TrustStoreInclusion. It would not match C1_old or C1_new.</t>
      <t>A relying party which trusts trust anchors A2, B1, and B2, but not A1, might send a TrustExpression referencing trust store "example", version 0, with <tt>excluded_labels</tt> of 0. This would match B1_old and B1_new, but not A1_old or A1_new because the TrustExpression excludes A1.</t>
      <t>A relying party which trusts trust anchors A1, A2, C1, and C2 might send a TrustExpression referencing trust store "example", version 1, with <tt>excluded_labels</tt> of 101. Although B1 and B2 are not contained in version 1 of the trust store, the relying party must exclude them, per <xref target="constructing-trust-expressions"/>. This TrustExpression matches the above certification paths as follows:</t>
      <ul spacing="normal">
        <li>
          <t>A1_old matches. Although it has no version 1 TrustStoreInclusion, the version 0 TrustStoreInclusion has a <tt>status</tt> of <tt>latest_version_at_issuance</tt>.</t>
        </li>
        <li>
          <t>A1_new matches via its version 1 TrustStoreInclusion.</t>
        </li>
        <li>
          <t>B1_old does not match. Although its version 0 TrustStoreInclusion has a <tt>status</tt> of <tt>latest_version_at_issuance</tt> and thus applies, <tt>excluded_labels</tt> 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>
      <t>The certificate negotiation mechanism described in this document facilitates which certification path is served to relying parties, but has no impact on the relying party's trust preferences themselves.</t>
      <t>As a result, this allows for a more flexible and agile PKI, which can better mitigate security risks to users. <xref target="use-cases"/> discusses some scenarios which benefit from the multi-certificate deployment this document enables. In general, robust certificate negotiation helps subscribers navigate differences in relying party requirements. This means security improvements for one set of relying parties can be deployed without needing to risk incompatibility or breakage for others.</t>
      <t>If either the subscriber's TrustStoreInclusionList or the relying party's TrustExpressionList are incorrect, the matching algorithm described in <xref target="subscriber-behavior"/> may incorrectly identify an untrusted certification path. This mechanism will not result in that path being trusted, but does present the possibility of a denial of service. These structures are provisioned by the CA and root program, respectively, who are already expected to provide accurate information.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="tls-extensiontype-updates">
        <name>TLS ExtensionType Updates</name>
        <t>IANA is requested to create the following entry in the TLS ExtensionType Values registry, defined by <xref target="RFC8446"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Extension Name</th>
              <th align="left">TLS 1.3</th>
              <th align="left">DTLS-Only</th>
              <th align="left">Recommended</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD</td>
              <td align="left">trust_expressions</td>
              <td align="left">CH, CR, CT</td>
              <td align="left">N</td>
              <td align="left">Y</td>
              <td align="left">[this-RFC]</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="media-type-updates">
        <name>Media Type Updates</name>
        <t>IANA is requested to create the following entry in the "Media Types" registry, defined in <xref target="RFC6838"/>:</t>
        <dl>
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>pem-certificate-chain-with-properties</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>7bit</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>Carries a cryptographic certificate and its associated certificate chain and additional properties. This media type carries no active content.</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t>[this-RFC, <xref target="media-type"/>]</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>ACME clients and servers, HTTP servers, other applications that need to be configured with a certificate chain</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <dl spacing="compact">
              <dt>Deprecated alias names for this type:</dt>
              <dd>n/a</dd>
              <dt>Magic number(s):</dt>
              <dd>n/a</dd>
              <dt>File extension(s):</dt>
              <dd>.pem</dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>n/a</dd>
            </dl>
          </dd>
          <dt>Person &amp; email address to contact for further information:</dt>
          <dd>
            <t>See Authors' Addresses section.</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>n/a</t>
          </dd>
          <dt>Author:</dt>
          <dd>
            <t>See Authors' Addresses section.</t>
          </dd>
          <dt>Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
        </dl>
      </section>
      <section anchor="acme-order-object-fields-updates">
        <name>ACME Order Object Fields Updates</name>
        <t>IANA is requested to create the following entry in the ACME Order Object Fields registry, defined by <xref target="RFC8555"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field Name</th>
              <th align="left">Field Type</th>
              <th align="left">Configurable</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">trustExpressions</td>
              <td align="left">boolean</td>
              <td align="left">true</td>
              <td align="left">[this-RFC]</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="certificatepropertytype-registry">
        <name>CertificatePropertyType Registry</name>
        <t>[[TODO: Establish a CertificatePropertyType registry.]]</t>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="POSIX">
          <front>
            <title>IEEE Standard for Information Technology--Portable Operating System Interface (POSIX(TM)) Base Specifications, Issue 7</title>
            <author>
              <organization/>
            </author>
            <date month="January" year="2018"/>
          </front>
          <seriesInfo name="DOI" value="10.1109/ieeestd.2018.8277153"/>
          <seriesInfo name="ISBN" value="[&quot;9781504445429&quot;]"/>
          <refcontent>IEEE</refcontent>
        </reference>
        <reference anchor="X690">
          <front>
            <title>Information technology - ASN.1 encoding Rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)</title>
            <author>
              <organization>ITU-T</organization>
            </author>
            <date year="2002"/>
          </front>
          <seriesInfo name="ISO/IEC" value="8825-1:2002"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC4158">
          <front>
            <title>Internet X.509 Public Key Infrastructure: Certification Path Building</title>
            <author fullname="M. Cooper" initials="M." surname="Cooper"/>
            <author fullname="Y. Dzambasow" initials="Y." surname="Dzambasow"/>
            <author fullname="P. Hesse" initials="P." surname="Hesse"/>
            <author fullname="S. Joseph" initials="S." surname="Joseph"/>
            <author fullname="R. Nicholas" initials="R." surname="Nicholas"/>
            <date month="September" year="2005"/>
            <abstract>
              <t>This document provides guidance and recommendations to developers building X.509 public-key certification paths within their applications. By following the guidance and recommendations defined in this document, an application developer is more likely to develop a robust X.509 certificate-enabled application that can build valid certification paths across a wide range of PKI environments. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4158"/>
          <seriesInfo name="DOI" value="10.17487/RFC4158"/>
        </reference>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="RFC8555">
          <front>
            <title>Automatic Certificate Management Environment (ACME)</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="J. Hoffman-Andrews" initials="J." surname="Hoffman-Andrews"/>
            <author fullname="D. McCarney" initials="D." surname="McCarney"/>
            <author fullname="J. Kasten" initials="J." surname="Kasten"/>
            <date month="March" year="2019"/>
            <abstract>
              <t>Public Key Infrastructure using X.509 (PKIX) certificates are used for a number of purposes, the most significant of which is the authentication of domain names. Thus, certification authorities (CAs) in the Web PKI are trusted to verify that an applicant for a certificate legitimately represents the domain name(s) in the certificate. As of this writing, this verification is done through a collection of ad hoc mechanisms. This document describes a protocol that a CA and an applicant can use to automate the process of verification and certificate issuance. The protocol also provides facilities for other certificate management functions, such as certificate revocation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8555"/>
          <seriesInfo name="DOI" value="10.17487/RFC8555"/>
        </reference>
        <reference anchor="RFC3629">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
            <date month="November" year="2003"/>
            <abstract>
              <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
          <seriesInfo name="DOI" value="10.17487/RFC3629"/>
        </reference>
        <reference anchor="RFC7468">
          <front>
            <title>Textual Encodings of PKIX, PKCS, and CMS Structures</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="S. Leonard" initials="S." surname="Leonard"/>
            <date month="April" year="2015"/>
            <abstract>
              <t>This document describes and discusses the textual encodings of the Public-Key Infrastructure X.509 (PKIX), Public-Key Cryptography Standards (PKCS), and Cryptographic Message Syntax (CMS). The textual encodings are well-known, are implemented by several applications and libraries, and are widely deployed. This document articulates the de facto rules by which existing implementations operate and defines them so that future implementations can interoperate.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7468"/>
          <seriesInfo name="DOI" value="10.17487/RFC7468"/>
        </reference>
        <reference anchor="RFC5234">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
            <author fullname="P. Overell" initials="P." surname="Overell"/>
            <date month="January" year="2008"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="RFC6973">
          <front>
            <title>Privacy Considerations for Internet Protocols</title>
            <author fullname="A. Cooper" initials="A." surname="Cooper"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="J. Peterson" initials="J." surname="Peterson"/>
            <author fullname="J. Morris" initials="J." surname="Morris"/>
            <author fullname="M. Hansen" initials="M." surname="Hansen"/>
            <author fullname="R. Smith" initials="R." surname="Smith"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document offers guidance for developing privacy considerations for inclusion in protocol specifications. It aims to make designers, implementers, and users of Internet protocols aware of privacy-related design choices. It suggests that whether any individual RFC warrants a specific privacy considerations section will depend on the document's content.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6973"/>
          <seriesInfo name="DOI" value="10.17487/RFC6973"/>
        </reference>
        <reference anchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="CHROME-ROOTS" target="https://chromium.googlesource.com/chromium/src/+/main/net/data/ssl/chrome_root_store">
          <front>
            <title>Chrome Root Store</title>
            <author>
              <organization>Chromium</organization>
            </author>
            <date year="2023" month="August" day="30"/>
          </front>
        </reference>
        <reference anchor="MOZILLA-ROOTS" target="https://wiki.mozilla.org/CA/Included_Certificates">
          <front>
            <title>Mozilla Included CA Certificate List</title>
            <author>
              <organization>Mozilla</organization>
            </author>
            <date year="2023" month="August" day="30"/>
          </front>
        </reference>
        <reference anchor="Dilithium" target="https://pq-crystals.org/dilithium/data/dilithium-specification-round3-20210208.pdf">
          <front>
            <title>CRYSTALS-Dilithium Algorithm Specifications and Supporting Documentation</title>
            <author initials="S." surname="Bai" fullname="Shi Bai">
              <organization/>
            </author>
            <author initials="L." surname="Ducas" fullname="Léo Ducas">
              <organization/>
            </author>
            <author initials="E." surname="Kiltz" fullname="Eike Kiltz">
              <organization/>
            </author>
            <author initials="T." surname="Lepoint" fullname="Tancrède Lepoint">
              <organization/>
            </author>
            <author initials="V." surname="Lyubashevsky" fullname="Vadim Lyubashevsky">
              <organization/>
            </author>
            <author initials="P." surname="Schwabe" fullname="Peter Schwabe">
              <organization/>
            </author>
            <author initials="G." surname="Seiler" fullname="Gregor Seiler">
              <organization/>
            </author>
            <author initials="D." surname="Stehlé" fullname="Damien Stehlé">
              <organization/>
            </author>
            <date year="2021" month="February" day="08"/>
          </front>
        </reference>
        <reference anchor="CCADB" target="https://www.ccadb.org/">
          <front>
            <title>Common CA Database</title>
            <author>
              <organization>Mozilla</organization>
            </author>
            <author>
              <organization>Microsoft</organization>
            </author>
            <author>
              <organization>Google</organization>
            </author>
            <author>
              <organization>Apple</organization>
            </author>
            <author>
              <organization>Cisco</organization>
            </author>
            <date year="2023" month="October" day="09"/>
          </front>
        </reference>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC6066">
          <front>
            <title>Transport Layer Security (TLS) Extensions: Extension Definitions</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <date month="January" year="2011"/>
            <abstract>
              <t>This document provides specifications for existing TLS extensions. It is a companion document for RFC 5246, "The Transport Layer Security (TLS) Protocol Version 1.2". The extensions specified are server_name, max_fragment_length, client_certificate_url, trusted_ca_keys, truncated_hmac, and status_request. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6066"/>
          <seriesInfo name="DOI" value="10.17487/RFC6066"/>
        </reference>
        <reference anchor="I-D.ietf-tls-cert-abridge">
          <front>
            <title>Abridged Compression for WebPKI Certificates</title>
            <author fullname="Dennis Jackson" initials="D." surname="Jackson">
              <organization>Mozilla</organization>
            </author>
            <date day="6" month="September" year="2023"/>
            <abstract>
              <t>   This draft defines a new TLS Certificate Compression scheme which
   uses a shared dictionary of root and intermediate WebPKI
   certificates.  The scheme smooths the transition to post-quantum
   certificates by eliminating the root and intermediate certificates
   from the TLS certificate chain without impacting trust negotiation.
   It also delivers better compression than alternative proposals whilst
   ensuring fair treatment for both CAs and website operators.  It may
   also be useful in other applications which store certificate chains,
   e.g.  Certificate Transparency logs.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-cert-abridge-00"/>
        </reference>
      </references>
    </references>
    <?line 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:
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

-->

</rfc>
