<?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.17 (Ruby 3.3.1) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-davidben-tls-trust-expr-04" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.21.0 -->
  <front>
    <title>TLS Trust Expressions</title>
    <seriesInfo name="Internet-Draft" value="draft-davidben-tls-trust-expr-04"/>
    <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="June" day="28"/>
    <area>Security</area>
    <workgroup>Transport Layer Security</workgroup>
    <abstract>
      <?line 121?>

<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 125?>

<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 identifier and define a list of trust store versions. A trust store version contains a set of trust anchors, and is identified by an identifier (from the manifest) and a version number.</t>
      <t>A trust store manifest is a JSON object <xref target="RFC8259"/> containing:</t>
      <dl>
        <dt><tt>id</tt>:</dt>
        <dd>
          <t>A string containing a a trust store identifier in text form, as described in <xref target="trust-store-ids"/>.</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>trust_anchor</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="trust-store-ids">
        <name>Trust Store Identifiers</name>
        <t>To simplify allocation, trust store identifiers use object identifiers (OIDs) <xref target="X680"/> based on Private Enterprise Numbers (PENs) <xref target="RFC9371"/>. An organization may define a trust store by allocating some OID under its PEN. For example, an organization with PEN 32473 might allocate a trust store identified by the OID <tt>1.3.6.1.4.1.32473.1</tt>.</t>
        <t>For compactness, this document uses relative object identifiers (see Section 33 of <xref target="X680"/>), relative to the OID prefix <tt>1.3.6.1.4.1</tt>. In the text form, these are written in dotted decimal notation, such as <tt>32473.1</tt>. In a binary protocol, such as TLS, this is encoded as the contents octets of the relative object identifier's DER encoding, as described in Section 8.20 of <xref target="X690"/>. For example, the binary encoding of <tt>32473.1</tt> would be the four-octet sequence <tt>{0x81, 0xfd, 0x59, 0x01}</tt>.</t>
      </section>
      <section anchor="expiration">
        <name>Trust Store Entry Expiration</name>
        <t>The <tt>max_age</tt> and <tt>max_lifetime</tt> fields define an expiration time for trust store entries in versions other than the latest version. For a trust store entry in version V, the expiration time is the sum of:</t>
        <ul spacing="normal">
          <li>
            <t>The <tt>timestamp</tt> of the subsequent version, i.e. version V+1</t>
          </li>
          <li>
            <t>The <tt>max_age</tt> of the manifest</t>
          </li>
          <li>
            <t>The <tt>max_lifetime</tt> of the trust store entry</t>
          </li>
        </ul>
        <t>Expiration times for entries in the latest version are not defined. They are determined once the root store appends a new version.</t>
        <t>Trust store entries are not removed from their containing version after they expire. Rather, the expiration time is the point at which all unexpired certificates have incorporated information about subsequent trust store versions, per <xref target="computing-trust-store-inclusions"/>. This ensures the negotiation procedures in <xref target="evaluating-trust-expressions"/> and <xref target="constructing-trust-expressions"/> interoperate.</t>
      </section>
      <section anchor="labels">
        <name>Labels</name>
        <t>Trust store entries reference labels, which are 24-bit integers that identify subsets of a trust store version. These integers are defined relative to the trust store manifest and are not globally unique. Root programs allocate labels when defining versions of a trust store.</t>
        <t>Labels are used in trust expressions (<xref target="trust-expressions"/>) to exclude trust anchor entries from the expression. A label may identify an individual trust anchor if it is the only one with that label, or multiple trust anchors if they share the label.</t>
        <t>The root program's label allocation scheme determines which sets may be efficiently represented. In particular, when trust anchors are removed in a later version of a trust store, trust expressions must express the removed set with labels as described in <xref target="constructing-trust-expressions"/>. Root programs SHOULD allocate individual labels for each trust anchor, and shared labels for trust anchors that will likely be removed together. For example, the root program may allocate shared labels for trust anchors with the same operator, or trust anchors that use some signature algorithm if it expects some relying parties to exclude by algorithm.</t>
        <t>When allocating labels, root programs MAY repurpose a previously allocated label value after all previous entries referencing it have expired (<xref target="expiration"/>).</t>
      </section>
    </section>
    <section anchor="certificate-properties">
      <name>Certificate Properties</name>
      <t>In order to evaluate references to trust stores, e.g. in <xref target="trust-expressions"/>, subscribers require information about which trust stores contain each candidate certification path's trust anchor. This document introduces an extensible CertificatePropertyList structure to carry this information.</t>
      <t>CertificatePropertyLists are constructed by CAs and sent to subscribers, alongside the certification path itself. They contain a list of properties the subscriber may use when presenting the certificate, e.g. as an input to certificate negotiation (<xref target="subscriber-behavior"/>).</t>
      <t>A CertificatePropertyList is defined using the TLS presentation language (<xref section="3" sectionFormat="of" target="RFC8446"/>) below:</t>
      <artwork><![CDATA[
enum { trust_stores(0), (2^16-1) } CertificatePropertyType;

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

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

struct {
    opaque id<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 version 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>id</tt>, then by <tt>trust_store</tt>'s <tt>id</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>id</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>trust_anchor</tt> field, 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>id</tt>, encoded in binary form as described in <xref target="trust-store-ids"/>, 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 in TLS 1.3 or later.</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 ID 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 MAY choose to disable path building <xref target="RFC4158"/> and validate the peer's certificate list as pre-built certification path. Doing so avoids the unpredictable behavior of path-building, and helps ensure CAs and subscribers do not inadvertently provision incorrect paths.</t>
      </section>
      <section anchor="evaluating-trust-expressions">
        <name>Evaluating Trust Expressions</name>
        <t>Given a certification path and a TrustExpressionList from the relying party, the subscriber runs the following procedure to determine if the relying party is claiming support for the path's trust anchor. If so, the TrustExpressionList is said to match the certification path:</t>
        <ol spacing="normal" type="1"><li>
            <t>If the certification path does not have an associated <tt>trust_store</tt> certificate property (<xref target="trust-store-inclusion"/>), containing a TrustStoreInclusionList, terminate this procedure and return false. The certification path does not match the TrustExpressionList.</t>
          </li>
          <li>
            <t>If the certification path has expired, terminate this procedure and return false. Expired certification paths are expected to be rejected by the relying party and may also have stale TrustStoreInclusionLists.</t>
          </li>
          <li>
            <t>Otherwise, for each TrustExpression in the relying party's TrustExpressionList:  </t>
            <ol spacing="normal" type="1"><li>
                <t>Find the TrustExpression's corresponding TrustStoreInclusion in the TrustStoreInclusionList, if any. The corresponding TrustStoreInclusion is the one where both of the following are true:      </t>
                <ul spacing="normal">
                  <li>
                    <t>The <tt>id</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>
                </ul>
                <t>
The invariants in <xref target="trust-store-inclusion"/> imply that at most one TrustStoreInclusion will satisfy this. Implementations may evaluate this efficiently by performing a binary search over the TrustStoreInclusionList.</t>
              </li>
              <li>
                <t>If there was no corresponding TrustStoreInclusion, continue to the next TrustExpression.</t>
              </li>
              <li>
                <t>Otherwise, check for common values between the TrustStoreInclusion's <tt>labels</tt> field and the TrustExpression's <tt>excluded_labels</tt> field. If there are no common values, terminate this procedure and return true. The certification path matches the TrustExpressionList. Otherwise, continue to the next TrustExpression.</t>
              </li>
            </ol>
          </li>
          <li>
            <t>If no match was found in the TrustExpressionList, return false. The certification path does not match the TrustExpressionList.</t>
          </li>
        </ol>
        <t>When a TrustStoreInclusion's <tt>status</tt> is <tt>latest_version_at_issuance</tt>, the above procedure 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 candidate certification paths, with corresponding CertificatePropertyList (<xref target="certificate-properties"/>) structures. As a server (respectively, client) responding to a ClientHello (respectively, CertificateRequest), the subscriber selects the best candidate path, incorporating the matching algorithm described in <xref target="evaluating-trust-expressions"/>, and other criteria defined in TLS.</t>
        <t>If the subscriber selected a certification path which matched via trust expressions, it MUST include an empty <tt>trust_expressions</tt> extension in the first CertificateEntry.</t>
        <t>This document does not prescribe a precise selection procedure and configuration, but the following is an example implementation strategy:</t>
        <t>The TLS implementation allows the application to configure a list of candidate credentials, each with certification path, private key, and optional CertificatePropertyList, in preference order. This order may reflect a preference to, e.g., minimize message size, or more performant private keys. When selecting a credential, the TLS implementation iterates over each candidate in preference order and checks:</t>
        <ol spacing="normal" type="1"><li>
            <t>Either the matching algorithm described in <xref target="evaluating-trust-expressions"/> returns true, or some other TLS extension, such as the <tt>certificate_authorities</tt> extension, indicates the relying party supports the trust anchor.</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>
        </ol>
        <t>The TLS implementation selects the first credential which satisfies all of its selection criteria. If no credentials match, the TLS implementation may return a <tt>handshake_failure</tt> alert, or consider a configured fallback set of credentials, which skip the first check above. These fallback credentials may be a separate credential list, or appended to the same list with an option to control the matching criteria.</t>
        <t>Fallback credentials allow the subscriber to retain support for relying parties that do not implement trust expressions. As they are be selected without trust anchor negotiation, the subscriber must find a sufficiently ubiquitous trust anchor, if one exists. However, unlike existing PKIs that do not use trust expressions, only relying parties without trust expressions need to be considered in this ubiquity determination. Updated relying parties may continue to evolve without restricting fallback credential selection.</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>trust_anchor</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>trust_anchor</tt> references a trust anchor that is not in the desired subset, add the entry to <tt>exclude_entries</tt>.</t>
              </li>
            </ol>
          </li>
          <li>
            <t>Compute a set of labels, <tt>excluded_labels</tt> such that:  </t>
            <ol spacing="normal" type="a"><li>
                <t>No label appears in any entry in <tt>include_entries</tt>.</t>
              </li>
              <li>
                <t>For each entry in <tt>exclude_entries</tt>, there is some label in common between <tt>excluded_labels</tt> and the labels in the entry.</t>
              </li>
            </ol>
            <t>
How to compute this set depends on the root program's label allocation scheme (<xref target="labels"/>). If the root program allocates a label for each trust anchor, this set is always computable, though more efficient sets may be possible depending on the allocation scheme.</t>
          </li>
          <li>
            <t>Output a TrustExpression such that <tt>trust_store</tt> is the referenced trust store version, and <tt>excluded_labels</tt> is the computed <tt>excluded_labels</tt> value.</t>
          </li>
        </ol>
        <t>This procedure uses <tt>excluded_labels</tt> for two kinds of exclusions:</t>
        <t>First, if the trust store version includes undesired trust anchors, the trust expression should exclude them. This may occur if, for example, the trust store is used by all versions of the relying party's software, but some trust anchors are gated by software version.</t>
        <t>Second, trust expressions exclude unexpired entries from previous versions. This is because the matching criteria described in <xref target="evaluating-trust-expressions"/> predictively applies TrustStoreInclusion values with <tt>status</tt> of <tt>latest_version_at_issuance</tt> to all future versions of a trust store. This allows relying parties to interoperate with subscribers with stale information. Unexpired entries are those for which such an unexpired certification path may still exist. Where this prediction is incorrect, trust expressions MUST mitigate this by excluding the past entries.</t>
      </section>
    </section>
    <section anchor="issuing-certificates">
      <name>Issuing Certificates</name>
      <t>Subscribers SHOULD use an automated issuance process where the CA transparently provisions multiple certification paths, without changes to subscriber configuration. As relying party requirements evolve, the CA adjusts its output to ensure its subscribers continue to interoperate with all supported relying parties. This results in a more flexible and agile PKI that can better respond to security incidents and changes in requirements. (See <xref target="use-cases"/> for details.)</t>
      <t>Subscribers MAY additionally combine the outputs from multiple CAs. This may be used, for example, to maintain backup certificates as described in <xref target="backup-certificates"/>.</t>
      <section anchor="acme-extension">
        <name>ACME Extension</name>
        <t>This section extends ACME <xref target="RFC8555"/> to be able to issue certificate paths, each with an associated CertificatePropertyList by defining a new media type in <xref target="media-type"/>.</t>
        <t>When an ACME server processes an order object, it MAY issue multiple certification paths, each with an associated TrustStoreInclusionList, computed as in <xref target="computing-trust-store-inclusions"/>. These paths MAY share an end-entity certificate but end at different trust anchors, or they MAY be completely distinct. The ACME server encodes each certification path using the application/pem-certificate-chain-with-properties format, defined in <xref target="media-type"/>).  Note this format is required to form a complete certification path. The CA MUST return a result that may be verified by relying parties without path building <xref target="RFC4158"/>.</t>
        <t>The ACME server provides additional results to the client with the link relation header fields described in <xref section="7.4.2" sectionFormat="of" target="RFC8555"/>. When fetching certificates, the ACME client includes application/pem-certificate-chain-with-properties in its Accept header to indicate it supports the new format. Unlike the original mechanism described in <xref target="RFC8555"/>, these certification paths do not require heuristics to be used. Instead, the ACME client uses the associated TrustStoreInclusionLists to select a path as described in <xref target="subscriber-behavior"/>.</t>
        <t>When the ACME client wishes to renew any of the certification paths issued in this order, it repeats this process to renew each path concurrently. Thus this extension is suitable when the CA is willing to issue and renew all paths together. It may not be appropriate if the paths have significantly different processing times or lifetimes. Future enhancements to ACME may be defined to address these cases, e.g. by allowing the ACME client to make independent orders.</t>
      </section>
    </section>
    <section anchor="example">
      <name>Example</name>
      <t>Suppose A1, A2, B1, B2, C1, and C2 are X.509 root certificates, such that A1 and A2 share an operator, B1 and B2 share an operator, and C1 and C2 share an operator.</t>
      <t>On January 1st, 2023, the root program includes A1, A2, B1, and B2. It allocates labels 0 through 3 for each individual CA and then 100 and 101 for the two CA operators. The CAs issue 90 day certificates and are permitted to use manifests stale by 10 days. The root store manifest may then be:</t>
      <artwork><![CDATA[
{
  "id": "32473.1",
  "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.id</tt> is "32473.1"</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.id</tt> is "32473.1"</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[
{
  "id": "32473.1",
  "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.id</tt> is "32473.1"</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.id</tt> is "32473.1"</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.id</tt> is "32473.1"</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.id</tt> is "32473.1"</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> contains 4, 102, 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 a root program, along with user-specified additions and removals. Applying the above guidance with a typical browser's desired anonymity set, the trust expression would reflect only the common trust anchors and not the user-specified modifications. The user-specified modifications may reveal identifying information about the user, while the common trust anchors would reveal at most, e.g., which version of which browser is used, or even less information if multiple browsers share a root program or the trust anchors were unchanged across multiple versions of the browser.</t>
      <t>This guidance limits the benefits of trust anchor agility in two ways:</t>
      <ul spacing="normal">
        <li>
          <t>If a subscriber relies on a user-specified addition, the procedure in <xref target="subscriber-behavior"/> will fallback to preexisting behavior, such as selecting a default certificate. The subscriber then relies on the default certificate matching the relying party.</t>
        </li>
        <li>
          <t>If a subscriber has a certificate issued by a CA distrusted by the user, the procedure in <xref target="subscriber-behavior"/> may select a distrusted certificate. In that case, the connection will fail, even if the subscriber has another certificate available.</t>
        </li>
      </ul>
      <t>Both of these cases match the preexisting behavior in PKIs that do not use trust expressions.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="relying-party-policies-and-agility">
        <name>Relying Party Policies and Agility</name>
        <t>The certificate negotiation mechanism described in this document facilitates which certification path is served to relying parties, but has no impact on the relying party's trust preferences themselves.</t>
        <t>As a result, this allows for a more flexible and agile PKI, which can better mitigate security risks to users. <xref target="use-cases"/> discusses some scenarios which benefit from the multi-certificate deployment this document enables. In general, robust certificate negotiation helps subscribers navigate differences in relying party requirements. This means security improvements for one set of relying parties can be deployed without needing to risk incompatibility or breakage for others.</t>
        <t>For example, agility reduces pressures on relying parties to sacrifice user security for compatibility. Suppose a subscriber currently uses some CA, but a relying party deems trusting that CA to pose an unacceptable security risk to its users. In a single-certificate deployment, those subscribers may be unwilling to adopt a CA trusted by the relying party, as switching CAs risks compatibility problems elsewhere. The relying party then faces compatibility pressure add this CA, sacrificing user security. However, in a multi-certificate deployment, the subscriber can use its existing CA <em>in addition to</em> another CA trusted by relying party B. This allows the ecosystem to improve interoperability, while still meeting relying party B's user-security goals.</t>
      </section>
      <section anchor="incorrect-selection-metadata">
        <name>Incorrect Selection Metadata</name>
        <t>If either the subscriber's TrustStoreInclusionList or the relying party's TrustExpressionList are incorrect, the matching algorithm described in <xref target="subscriber-behavior"/> may incorrectly identify an untrusted certification path. This mechanism will not result in that path being trusted, but does present the possibility of a denial of service. These structures are provisioned by the CA and root program, respectively, who are already expected to provide accurate information.</t>
      </section>
      <section anchor="serving-multiple-certificates">
        <name>Serving Multiple Certificates</name>
        <t>In a multi-certificate deployment, subscribers have a collection of certificates available to satisfy relying parties with potentially different security policies. It is possible that some of these policies will only be satisifed by certificates from less trustworthy CAs, such as if the relying party is out of date but still important for the subscriber to support. If a certificate asserts the correct information about the subscriber (TLS key, DNS names, etc.), the subscriber can safely present it, even if the CA is otherwise untrustworthy. In particular, doing so does not allow the CA decrypt or intercept the connection.</t>
        <t>However, the subscriber presenting a certificate is not an endorsement of the CA. The subscriber's role is to present a certificate which will convince the relying party of the correct subscriber information. Subscribers do not vet CAs for trustworthiness, only the correctness of their specific, configured certificates and the CA's ability to meet the subscriber's requirements, such as availability, compatibility, and performance. It is the responsibility of the relying party, and its corresponding root program, to determine the set of trusted CAs. Trusting a CA means trusting <em>all</em> certificates issued by that CA, so it is not enough to observe subscribers serving correct certificates. An untrustworthy CA may sign one correct certificate, but also sign incorrect certificates, possibly in the future, that can attack the relying party. Root program management is a complex, security-critical process, the full considerations of which are outside the scope of this document.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="tls-extensiontype-updates">
        <name>TLS ExtensionType Updates</name>
        <t>IANA is requested to create the following entry in the TLS ExtensionType Values registry, defined by <xref target="RFC8446"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Extension Name</th>
              <th align="left">TLS 1.3</th>
              <th align="left">DTLS-Only</th>
              <th align="left">Recommended</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD</td>
              <td align="left">trust_expressions</td>
              <td align="left">CH, CR, CT</td>
              <td align="left">N</td>
              <td align="left">Y</td>
              <td align="left">[this-RFC]</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="media-type-updates">
        <name>Media Type Updates</name>
        <t>IANA is requested to create the following entry in the "Media Types" registry, defined in <xref target="RFC6838"/>:</t>
        <dl>
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>pem-certificate-chain-with-properties</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>7bit</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>Carries a cryptographic certificate and its associated certificate chain and additional properties. This media type carries no active content.</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t>[this-RFC, <xref target="media-type"/>]</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>ACME clients and servers, HTTP servers, other applications that need to be configured with a certificate chain</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <dl spacing="compact">
              <dt>Deprecated alias names for this type:</dt>
              <dd>n/a</dd>
              <dt>Magic number(s):</dt>
              <dd>n/a</dd>
              <dt>File extension(s):</dt>
              <dd>.pem</dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>n/a</dd>
            </dl>
          </dd>
          <dt>Person &amp; email address to contact for further information:</dt>
          <dd>
            <t>See Authors' Addresses section.</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>n/a</t>
          </dd>
          <dt>Author:</dt>
          <dd>
            <t>See Authors' Addresses section.</t>
          </dd>
          <dt>Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
        </dl>
      </section>
      <section anchor="certificatepropertytype-registry">
        <name>CertificatePropertyType Registry</name>
        <t>[[TODO: Establish a CertificatePropertyType registry.]]</t>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="POSIX">
          <front>
            <title>IEEE Standard for Information Technology--Portable Operating System Interface (POSIX(TM)) Base Specifications, Issue 7</title>
            <author>
              <organization/>
            </author>
            <date month="January" year="2018"/>
          </front>
          <seriesInfo name="DOI" value="10.1109/ieeestd.2018.8277153"/>
          <seriesInfo name="ISBN" value="[&quot;9781504445429&quot;]"/>
          <refcontent>IEEE</refcontent>
        </reference>
        <reference anchor="X680">
          <front>
            <title>Information technology - Abstract Syntax Notation One (ASN.1): Specification of basic notation</title>
            <author>
              <organization>ITU-T</organization>
            </author>
            <date year="2021"/>
          </front>
          <seriesInfo name="ISO/IEC" value="8824-1:2021"/>
        </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="2021"/>
          </front>
          <seriesInfo name="ISO/IEC" value="8825-1:2021"/>
        </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="RFC9371">
          <front>
            <title>Registration Procedures for Private Enterprise Numbers (PENs)</title>
            <author fullname="A. Baber" initials="A." surname="Baber"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="March" year="2023"/>
            <abstract>
              <t>This document describes how Private Enterprise Numbers (PENs) are registered by IANA. It shows how to request a new PEN and how to modify a current PEN. It also gives a brief overview of PEN uses.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9371"/>
          <seriesInfo name="DOI" value="10.17487/RFC9371"/>
        </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="RFC7468">
          <front>
            <title>Textual Encodings of PKIX, PKCS, and CMS Structures</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="S. Leonard" initials="S." surname="Leonard"/>
            <date month="April" year="2015"/>
            <abstract>
              <t>This document describes and discusses the textual encodings of the Public-Key Infrastructure X.509 (PKIX), Public-Key Cryptography Standards (PKCS), and Cryptographic Message Syntax (CMS). The textual encodings are well-known, are implemented by several applications and libraries, and are widely deployed. This document articulates the de facto rules by which existing implementations operate and defines them so that future implementations can interoperate.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7468"/>
          <seriesInfo name="DOI" value="10.17487/RFC7468"/>
        </reference>
        <reference anchor="RFC5234">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
            <author fullname="P. Overell" initials="P." surname="Overell"/>
            <date month="January" year="2008"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="RFC6973">
          <front>
            <title>Privacy Considerations for Internet Protocols</title>
            <author fullname="A. Cooper" initials="A." surname="Cooper"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="J. Peterson" initials="J." surname="Peterson"/>
            <author fullname="J. Morris" initials="J." surname="Morris"/>
            <author fullname="M. Hansen" initials="M." surname="Hansen"/>
            <author fullname="R. Smith" initials="R." surname="Smith"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document offers guidance for developing privacy considerations for inclusion in protocol specifications. It aims to make designers, implementers, and users of Internet protocols aware of privacy-related design choices. It suggests that whether any individual RFC warrants a specific privacy considerations section will depend on the document's content.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6973"/>
          <seriesInfo name="DOI" value="10.17487/RFC6973"/>
        </reference>
        <reference anchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="CHROME-ROOTS" target="https://chromium.googlesource.com/chromium/src/+/main/net/data/ssl/chrome_root_store">
          <front>
            <title>Chrome Root Store</title>
            <author>
              <organization>Chromium</organization>
            </author>
            <date year="2023" month="August" day="30"/>
          </front>
        </reference>
        <reference anchor="MOZILLA-ROOTS" target="https://wiki.mozilla.org/CA/Included_Certificates">
          <front>
            <title>Mozilla Included CA Certificate List</title>
            <author>
              <organization>Mozilla</organization>
            </author>
            <date year="2023" month="August" day="30"/>
          </front>
        </reference>
        <reference anchor="Dilithium" target="https://pq-crystals.org/dilithium/data/dilithium-specification-round3-20210208.pdf">
          <front>
            <title>CRYSTALS-Dilithium Algorithm Specifications and Supporting Documentation</title>
            <author initials="S." surname="Bai" fullname="Shi Bai">
              <organization/>
            </author>
            <author initials="L." surname="Ducas" fullname="Léo Ducas">
              <organization/>
            </author>
            <author initials="E." surname="Kiltz" fullname="Eike Kiltz">
              <organization/>
            </author>
            <author initials="T." surname="Lepoint" fullname="Tancrède Lepoint">
              <organization/>
            </author>
            <author initials="V." surname="Lyubashevsky" fullname="Vadim Lyubashevsky">
              <organization/>
            </author>
            <author initials="P." surname="Schwabe" fullname="Peter Schwabe">
              <organization/>
            </author>
            <author initials="G." surname="Seiler" fullname="Gregor Seiler">
              <organization/>
            </author>
            <author initials="D." surname="Stehlé" fullname="Damien Stehlé">
              <organization/>
            </author>
            <date year="2021" month="February" day="08"/>
          </front>
        </reference>
        <reference anchor="CCADB" target="https://www.ccadb.org/">
          <front>
            <title>Common CA Database</title>
            <author>
              <organization>Mozilla</organization>
            </author>
            <author>
              <organization>Microsoft</organization>
            </author>
            <author>
              <organization>Google</organization>
            </author>
            <author>
              <organization>Apple</organization>
            </author>
            <author>
              <organization>Cisco</organization>
            </author>
            <date year="2023" month="October" day="09"/>
          </front>
        </reference>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC6066">
          <front>
            <title>Transport Layer Security (TLS) Extensions: Extension Definitions</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <date month="January" year="2011"/>
            <abstract>
              <t>This document provides specifications for existing TLS extensions. It is a companion document for RFC 5246, "The Transport Layer Security (TLS) Protocol Version 1.2". The extensions specified are server_name, max_fragment_length, client_certificate_url, trusted_ca_keys, truncated_hmac, and status_request. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6066"/>
          <seriesInfo name="DOI" value="10.17487/RFC6066"/>
        </reference>
        <reference anchor="I-D.ietf-tls-cert-abridge">
          <front>
            <title>Abridged Compression for WebPKI Certificates</title>
            <author fullname="Dennis Jackson" initials="D." surname="Jackson">
              <organization>Mozilla</organization>
            </author>
            <date day="16" month="March" year="2024"/>
            <abstract>
              <t>   This draft defines a new TLS Certificate Compression scheme which
   uses a shared dictionary of root and intermediate WebPKI
   certificates.  The scheme smooths the transition to post-quantum
   certificates by eliminating the root and intermediate certificates
   from the TLS certificate chain without impacting trust negotiation.
   It also delivers better compression than alternative proposals whilst
   ensuring fair treatment for both CAs and website operators.  It may
   also be useful in other applications which store certificate chains,
   e.g.  Certificate Transparency logs.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-cert-abridge-01"/>
        </reference>
      </references>
    </references>
    <?line 871?>

<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 = {
    trust_anchor: text,
    labels: [+ uint],
    max_lifetime: uint,
    * text => any,
}

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

trust-store-manifest = {
    id: 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>
