<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" category="std" docName="draft-ietf-sidrops-signed-tal-13" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" symRefs="true" sortRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 2.47.0 -->
  <front>
    <title abbrev="RPKI signed object for TAL">RPKI Signed Object for Trust Anchor Key
    </title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-sidrops-signed-tal-13"/>
    <author initials="C." surname="Martinez" fullname="Carlos Martinez">
      <organization>LACNIC
      </organization>
      <address>
        <postal>
          <street>
          </street>
          <city>
          </city>
          <code>
          </code>
          <country>
          </country>
          <region>
          </region>
        </postal>
        <phone>
</phone>
        <email>carlos@lacnic.net
</email>
        <uri>https://www.lacnic.net/
</uri>
      </address>
    </author>
    <author initials="G." surname="Michaelson" fullname="George G. Michaelson">
      <organization abbrev="APNIC">Asia Pacific Network Information Centre
      </organization>
      <address>
        <postal>
          <street>6 Cordelia St
          </street>
          <city>South Brisbane
          </city>
          <code>4101
          </code>
          <country>Australia
          </country>
          <region>QLD
          </region>
        </postal>
        <phone>
</phone>
        <email>ggm@apnic.net
</email>
        <uri>
</uri>
      </address>
    </author>
    <author initials="T." surname="Harrison" fullname="Tom Harrison">
      <organization abbrev="APNIC">Asia Pacific Network Information Centre
      </organization>
      <address>
        <postal>
          <street>6 Cordelia St
          </street>
          <city>South Brisbane
          </city>
          <code>4101
          </code>
          <country>Australia
          </country>
          <region>QLD
          </region>
        </postal>
        <phone>
</phone>
        <email>tomh@apnic.net
</email>
        <uri>
</uri>
      </address>
    </author>
    <author initials="T." surname="Bruijnzeels" fullname="Tim Bruijnzeels">
      <organization>NLnet Labs
      </organization>
      <address>
        <postal>
          <street>
          </street>
          <city>
          </city>
          <code>
          </code>
          <country>
          </country>
          <region>
          </region>
        </postal>
        <phone>
</phone>
        <email>tim@nlnetlabs.nl
</email>
        <uri>https://www.nlnetlabs.nl/
</uri>
      </address>
    </author>
    <author initials="R." surname="Austein" fullname="Rob Austein">
      <organization>Dragon Research Labs
      </organization>
      <address>
        <postal>
          <street>
          </street>
          <city>
          </city>
          <code>
          </code>
          <country>
          </country>
          <region>
          </region>
        </postal>
        <phone>
</phone>
        <email>sra@hactrn.net
</email>
        <uri>
</uri>
      </address>
    </author>
    <date year="2023" month="March" day="12"/>
    <area>Internet
</area>
    <workgroup>
</workgroup>
    <abstract>
      <t>

    A Trust Anchor Locator (TAL) is used by Relying Parties (RPs) in
    the Resource Public Key Infrastructure (RPKI) to locate and
    validate a Trust Anchor (TA) Certification Authority (CA)
    certificate used in RPKI validation.  This document defines an
    RPKI signed object for a Trust Anchor Key (TAK), that can be used
    by a TA to signal the location(s) of the accompanying CA
    certificate for the current key to RPs, as well as the successor
    key and the location(s) of its CA certificate.  This object helps
    to support planned key rolls without impacting RPKI validation.

      </t>
    </abstract>
  </front>
  <middle>
    <section anchor="requirements-notation" numbered="true" toc="default">
      <name>Requirements Notation</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" format="default"/>
        <xref target="RFC8174" format="default"/> when,
and only when, they appear in all capitals, as shown here.
</t>
    </section>
    <section anchor="overview" numbered="true" toc="default">
      <name>Overview</name>
      <t>A TAL <xref target="RFC8630" format="default"/> is used by an RP in the RPKI to
locate and validate TA CA certificates used in RPKI validation.
However, until now there has been no in-band way of notifying RPs of
updates to a TAL.  In-band notification means that TAs can be
more confident of RPs being aware of key roll operations.  </t>

      <t>This document defines a new RPKI signed object that can be used to
document the location(s) of the TA CA certificate for the current TA
key, as well as the value of the successor key and the location(s) of
its TA CA certificate. This allows RPs to be notified automatically of
such changes, and enables TAs to stage a successor key so that
planned key rolls can be performed without risking the
invalidation of the RPKI tree under the TA. We call this object the
Trust Anchor Key (TAK) object.  </t>

      <t>When RPs are first bootstrapped, they use a TAL to discover
      the key and location(s) of the CA certificate for a TA. The RP
      can then retrieve and validate the CA certificate, and
      subsequently validate the manifest <xref target="RFC6486"
      format="default"/> and CRL published by that TA (section 5 of
      <xref target="RFC6487" format="default"/>). However, before
      processing any other objects it will first validate the TAK
      object, if present.  If the TAK object lists only the current
      key, then the RP continues processing as per normal.  If the TAK
      object includes a successor key, the RP starts an acceptance
      timer, and then continues processing as per normal.  If, during
      the following validation runs up until the expiry of the
      acceptance timer, the RP has not observed any changes to the
      keys and certificate URLs listed in the TAK object, then the RP
      will fetch the successor key, update its local state with that
      key and its associated certification location(s), and continue
      processing using that key.</t>

      <t>The primary motivation for this work is being able to migrate
      from a Hardware Security Module (HSM) produced by one vendor to
      one produced by another, where the first vendor does not support
      exporting keys for use by the second.  There may be other
      scenarios in which key rollover is useful, though.</t>

    </section>
    <section anchor="tak-object-definition" numbered="true" toc="default">
      <name>TAK Object Definition</name>
      <t>The TAK object makes use of the template for RPKI digitally signed objects
  <xref target="RFC6488" format="default"/>,
  which defines a Cryptographic Message Syntax (CMS)
  <xref target="RFC5652" format="default"/> wrapper for the content as well as a generic validation procedure for RPKI signed objects. Therefore, to
complete the specification of the TAK object (see Section 4 of
<xref target="RFC6488" format="default"/>), this document
defines:
</t>
      <ul spacing="normal">
        <li>The OID (in <xref target="content_type" format="default"/>) that identifies the signed object as being a TAK. (This OID
appears within the eContentType in the encapContentInfo object, as well as the content-type
signed attribute in the signerInfo object.)
  </li>
        <li>The ASN.1 syntax for the TAK eContent, in <xref target="e_content" format="default"/>.
  </li>
        <li>The additional steps required to validate a TAK, in 
  <xref target="validation" format="default"/>.
  </li>
      </ul>
      <section anchor="content_type" numbered="true" toc="default">
        <name>The TAK Object Content Type</name>
        <t>This document requests an OID for the TAK object as follows:
</t>
        <artwork align="left" type="ascii-art" name="" alt=""><![CDATA[
   id-ct-signedTAL OBJECT IDENTIFIER ::=
      { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9)
        smime(16) ct(1) 50 }
  ]]></artwork>
        <t>This OID MUST appear both within the eContentType in the
encapContentInfo object, as well as
the content-type signed attribute in the signerInfo object (see
<xref target="RFC6488" format="default"/>).
</t>
      </section>
      <section anchor="e_content" numbered="true" toc="default">
        <name>The TAK Object eContent</name>
        <t>The content of a TAK object is ASN.1 encoded using the Distinguished Encoding Rules (DER)
<xref target="X.690" format="default"/>, and is defined per the module in <xref target="asn1-module" format="default"/>.
</t>
        <section anchor="takey" numbered="true" toc="default">
          <name>TAKey</name>
          <t>This structure defines a TA key, similarly to <xref target="RFC8630" format="default"/>. It contains a sequence of zero or more comments, one or more certificate URIs, and a
SubjectPublicKeyInfo.
</t>

          <section anchor="comments" numbered="true" toc="default">
            <name>comments</name>
            <t>This field is equivalent to the comment section defined in section 2.2 of
  <xref target="RFC8630" format="default"/>. Each comment is
  human-readable informational UTF-8 text, conforming to the
  restrictions defined in Section 2 of <xref target="RFC5198"
  format="default" />.  The leading "#" character is omitted.</t>
          </section>

          <section anchor="certificateuris" numbered="true" toc="default">
            <name>certificateURIs</name>
            <t>This field is equivalent to the URI section defined in section 2.2 of
  <xref target="RFC8630" format="default"/>. It MUST
contain at least one CertificateURI element. Each CertificateURI element contains the IA5String
representation of either an rsync URI
<xref target="RFC5781" format="default"/>, or an HTTPS URI
<xref target="RFC7230" format="default"/>.
</t>
          </section>

          <section anchor="subjectpublickeyinfo" numbered="true" toc="default">
            <name>subjectPublicKeyInfo</name>
            <t>This field contains a SubjectPublicKeyInfo (section 4.1.2.7 of
<xref target="RFC5280" format="default"/>) in DER format
<xref target="X.690" format="default"/>.
</t>
          </section>

        </section>
        <section anchor="tak" numbered="true" toc="default">
          <name>TAK</name>
          <section anchor="version" numbered="true" toc="default">
            <name>version</name>
            <t>The version number of the TAK object MUST be 0.
</t>
          </section>
          <section anchor="current" numbered="true" toc="default">
            <name>current</name>
            <t>This field contains the TA key of the repository in
which the TAK object is published.</t>
          </section>
          <section anchor="predecessor" numbered="true" toc="default">
            <name>predecessor</name>
            <t>This field contains the TA key that was in use
            for this TA immediately prior to the current TA key, if
            applicable.</t>
          </section>
          <section anchor="successor" numbered="true" toc="default">
            <name>successor</name>
            <t>This field contains the TA key to be used in place of
            the current key, after expiry of the relevant acceptance timer.</t>
          </section>
        </section>
      </section>
      <section anchor="validation" numbered="true" toc="default">
        <name>TAK Object Validation</name>
        <t>To determine whether a TAK object is valid, the RP MUST perform the
following checks in
addition to those specified in
<xref target="RFC6488" format="default"/>:
</t>
        <ul spacing="normal">
          <li>The eContentType OID matches the OID described in
        <xref target="content_type" format="default"/>.
    </li>
          <li>The TAK object appears as the product of a TA CA
          certificate (i.e. the TA CA certificate is itself the issuer
          of the EE certificate of the TAK object).
    </li>
          <li>The TA CA has published only one TAK object in its repository for this key, and this
        object appears on the manifest as the only entry using the ".tak" extension (see
        <xref target="RFC6481" format="default"/>).
        </li>
          <li>The EE certificate of this TAK object describes its Internet Number Resources (INRs) using
        the "inherit" attribute.
        </li>
          <li>The decoded TAK content conforms to the format defined in
        <xref target="e_content" format="default"/>.
        </li>
          <li>The SubjectPublicKeyInfo value of the current TA key in the
        TAK object matches that of the TA CA certificate used to issue
        the EE certificate of the TAK object.</li>
        </ul>
        <t>If any of these checks does not succeed, the RP MUST ignore the TAK
object, and proceed as though it were not listed on the manifest.</t>
        <t>The RP is not required to compare its current set of
        certificateURIs for the current key with those listed in the TAK
        object.  The RP MAY alert the user that these sets of certificateURIs do
        not match, with a view to the user manually updating the set
        of certificateURIs in their configuration.  The RP MUST NOT
        automatically update its configuration to use these
        certificateURIs in the event of inconsistency, though, because
        migration of users to new certificateURIs should
        happen by way of the successor key process.</t>
      </section>
    </section>
    <section anchor="mnt_obj" numbered="true" toc="default">
      <name>TAK Object Generation and Publication</name>
      <t>A TA MAY choose to use TAK objects to communicate its
      current, predecessor, and
successor keys. If a
TA chooses to use TAK objects, then it SHOULD generate and publish TAK objects under
each of its keys. 
</t>
      <t>A non-normative guideline for naming this object is that the
filename chosen for the TAK
object in the publication repository be a value derived from the public key part of the entity's
key pair, using the algorithm described for CRLs in section 2.2 of
<xref target="RFC6481" format="default"/> for generation
of filenames.  The filename extension of ".tak" MUST be used to denote the object as a TAK.
</t>
      <t>In order to generate a TAK object, the TA MUST perform the following actions:
</t>
      <ul spacing="normal">
        <li>The TA MUST generate a key pair for a "one-time-use" EE
  certificate to use for the TAK.
  </li>
        <li>The TA MUST generate a one-time-use EE certificate for the TAK.
  </li>
        <li>This EE certificate MUST have an SIA extension access description field with an
accessMethod OID value of id-ad-signedObject, where the associated accessLocation
references the publication point of the TAK as an object URL.
</li>
        <li>As described in
<xref target="RFC6487" format="default"/>, an
<xref target="RFC3779" format="default"/> extension is required in the EE certificate used
for this object.  However, because the resource set is irrelevant to this object type, this
certificate MUST describe its Internet Number Resources (INRs) using the "inherit" attribute,
rather than explicit description of a resource set.
</li>
        <li>This EE certificate MUST have a "notBefore" time that matches or predates the moment that
the TAK will be published.
</li>
        <li>This EE certificate MUST have a "notAfter" time that reflects the intended duration for which
this TAK will be published.  If the EE certificate for a TAK object is expired, it MUST no longer
be published, but it MAY be replaced by a newly generated TAK object with equivalent
content and an updated "notAfter" time.
</li>
        <li>The current TA key for the TAK MUST match that of the TA CA
certificate under which the TAK was issued.</li>

      </ul>
    </section>
    <section anchor="rp_use" numbered="true" toc="default">
      <name>Relying Party Use</name>
      <t>Relying Parties MUST keep a record of the current key for each
configured TA, as well as the URI(s) where the CA certificate for this
key may be retrieved. This record is typically bootstrapped by the use of a pre-configured (and unsigned) TAL file
<xref target="RFC8630" format="default"/>.</t>
      <t>When performing top-down validation, RPs MUST first validate and
process the TAK object for its current known key, by performing the following steps:
</t>
      <ul spacing="normal">
        <li>A CA certificate is retrieved and validated from the known URIs as described in
sections 3 and 4 of
<xref target="RFC8630" format="default"/>.
</li>
        <li>The manifest and CRL for this certificate are then validated as described
in
<xref target="RFC6487" format="default"/> and
<xref target="RFC6486" format="default"/>.
</li>
        <li>The TAK object, if present, is validated as described in
<xref target="validation" format="default"/>.
</li>
      </ul>

      <t>If the TAK object includes a successor key, then the RP must
      verify the successor key by doing the following:</t>
        <ul>
        <li>performing top-down validation using the
        successor key, in order to validate the TAK object for the
        successor TA;</li>
        <li>ensuring that a valid TAK object exists for the successor
        TA;</li>
        <li>ensuring that the successor TAK object's current key matches the
        initial TAK object's successor key; and</li>
        <li>ensuring that the successor TAK object's predecessor key matches
        the initial TAK object's current key.</li>
        </ul>
     
        <t>
      If any of these steps fails, then the successor key has failed
      verification.</t>

      <t>If the successor key passes verification, and the RP has not
      seen that successor key on the previous successful validation
      run for this TA, then the RP:</t>

      <ul>
      <li>sets an acceptance timer of 30 days for this
      successor key for this TA;</li>
      <li>cancels the existing acceptance timer for this TA (if
        applicable); and</li>
        <li>continues standard top-down validation as
        described in <xref target="RFC6487" format="default"/> using the
        current key.</li></ul>

      <t>If the successor key passes verification, and the RP has seen
      that successor key on the previous successful validation run for
      this TA:</t>
      <ul>
        <li>if the relevant acceptance timer has not
        expired, the RP continues standard top-down validation using
        the current key;</li>
          <li>otherwise, the RP updates its current known
        key details for this TA to be those of the successor key, and then begins
        top-down validation again using the successor key.</li>
        </ul>

      <t>If the successor key does not pass verification, or if the
      TAK object does not include a successor key, the RP
      cancels the existing acceptance timer for this TA (if
      applicable).</t>

      <t>An RP MUST NOT use a successor key for top-down validation
      outside of the process described above, except for the purpose
      of testing that the new key is working correctly.  This allows a
      TA to publish a successor key for a period of time, allowing RPs
      to test it, while still being able to rely on RPs using the
      current key for their production RPKI operations.</t>

      <t>A successor key may have the same SubjectPublicKeyInfo value
      as the current key: this will be the case where a TA is updating
      the certificateURIs for that key.</t>

      <section anchor="rp_manual" numbered="true" toc="default">
      <name>Manual update of TA key details</name>

      <t>A Relying Party may opt not to support the automatic
        transition of TA key data, as defined in the previous section.
        An alternative approach is for the Relying Party to alert the
        user when a new successor key is seen, and also when the
        relevant acceptance timer has expired. The user can then
        manually transition to the new TA key data.  This process
        ensures that the benefits of the acceptance timer period are
        still realised, as compared with TA key update based on a TAL
        distributed out-of-band by a TA.</t>

      </section>

    </section>
    <section anchor="mnt_keys" numbered="true" toc="default">
      <name>Maintaining Multiple TA Keys</name>
      <t>Although an RP that can process TAK objects will only ever use one
key for validation (either the current key, or the successor key, once the relevant
acceptance timer has expired), an RP that cannot process TAK objects will continue to
use the key details per its TAL (or equivalent manual configuration) indefinitely.  As
a result, even when a TA is using a TAK object in order to migrate
clients to a new key, the TA may
have to maintain the previous key for a period of time alongside the new key
in order to ensure continuity of service for older clients.</t>
      
      <t>For each TA key that a TA is maintaining,
      the signed material for these keys MUST be published under
      different directories in the context of the 'id-ad-caRepository'
      and 'id-ad-rpkiManifest' Subject Information Access descriptions
      contained on the CA certificates <xref target="RFC6487"
      format="default"/>. Publishing objects under the same directory
      is potentially confusing for RPs, and could lead to object
      invalidity in the event of file name collisions.</t>

      <t> Also, the CA certificates for each maintained key, and the
      contents published by each key, MUST be equivalent (except for
      the TAK object). In other words, for the purposes of RPKI
      validation, it MUST NOT make a difference which of the keys is
      used as a starting point. </t>

      <t>This means that the IP and AS resources contained on all
      current CA certificates for the maintained
TA keys MUST be the same. Furthermore, for any delegation of IP and AS
resources to a child, the TA MUST have an equivalent CA certificate published under each of its keys. Any updates in delegations
MUST be reflected under each of its keys. A TA SHOULD NOT publish any other objects besides a CRL,
a Manifest, a single TAK object, and any number of CA certificates for
delegation to child CAs.
</t>

      <t>If a TA uses a single remote publication server for its keys, per
<xref target="RFC8181" format="default"/>, then it MUST include all &lt;publish/&gt; and &lt;withdraw/&gt; PDUs for the products of
each of its keys in a single query, in order to ensure that they will reflect the same content at
all times.
</t>
      <t>If a TA uses multiple publication servers, then it is by definition inevitable that the content of
different keys will be out of sync at times. In such cases, the TA
SHOULD ensure that the
duration of these moments are limited to the shortest possible time.
Furthermore, the following
should be observed:
</t>
      <ul spacing="normal">
        <li>In cases where a CA certificate is revoked completely, or replaced by a certificate with a
reduced set of resources, these changes will not take effect fully
until all the relevant repository publication points have been updated. Given that TA key operations are normally
performed infrequently, this is unlikely to be a problem: if the revocation or shrinking
of an issued CA certificate is staged for days/weeks, then experiencing a delay of
several minutes for the repository publication points to be updated is fairly insignificant.
</li>
        <li>In cases where a CA certificate is replaced by a certificate with
an extended set of resources, the
TA MUST inform the receiving CA only after all of its repository publication points have been
updated. This ensures that the receiving CA will not issue any products that could be invalid
if an RP uses a TA key just before the CA certificate was due to be updated.
</li>
      </ul>
      <t>Finally, note that the publication locations of CA certificates for
delegations to child CAs under each key will be different, and
therefore the Authority Information Access 'id-ad-caIssuers' values
(section 4.8.7 of <xref target="RFC6487" format="default"/>) on certificates issued by
the child CAs may not be as expected when performing top-down
validation, depending on the TA key that is used. However, these values
are not critical to top-down validation, so RPs performing such
validation MUST NOT reject a certificate simply because this value
is not as expected.</t>
    </section>
    <section anchor="perf_roll" numbered="true" toc="default">
      <name>Performing TA Key Rolls</name>
      <t>In this section we will describe how present-day RPKI TAs that use only one key pair, and
that do not use TAK objects, can use a TAK object to perform a planned
key roll.
</t>
      <section anchor="phase-1-add-a-tak-for-key-a" numbered="true" toc="default">
        <name>Phase 1: Add a TAK for Key 'A'</name>

        <t>Before adding a successor key, a TA may want to confirm
        that it can maintain a TAK object for its current key only. We
        will refer to this key as key 'A' throughout this section.
        </t>
      </section>

      <section anchor="add_key" numbered="true" toc="default">
        <name>Phase 2: Add a Key 'B'</name>
        <t>The TA can now generate a new key pair for key 'B'. This key MUST now be used to create a
new CA certificate for this key, and to issue equivalent CA certificates for delegations
to child CAs, as described in
<xref target="mnt_keys" format="default"/>.
</t>
        <t>At this point, the TA can also construct a new TAL file
<xref target="RFC8630" format="default"/> for
key 'B', and test locally that the validation outcome for the new key is equivalent
to that of the other current key(s).
</t>

        <t>When the TA is certain that both keys are equivalent, and
        wants to initiate the migration from 'A' to 'B', it
        issues a new TAK object under key 'A', with key 'A' as the
        current key for that object, key 'B' as the successor key, and
        no predecessor key.  It also issues a TAK object under key
        'B', with key 'B' as the current key for that object, key 'A'
        as the predecessor key, and no successor key.</t>
        <t>Once this has happened, RP clients will start seeing the
        new key and setting acceptance timers accordingly.</t>
      </section>

      <section anchor="activate_key" numbered="true" toc="default">
        <name>Phase 3: Update TAL to point to 'B'</name>
        <t>At about the time that the TA expects clients to start
        setting key 'B' as the current key, the TA must release a new TAL file for key
        'B'.  It SHOULD use a different set of URIs in the TAL compared to the TAK
file, so that the TA can learn the proportion of RPs that can
successfully validate and use the updated TAK objects.</t>
        <t>To support RPs that do not take account of TAK objects, the TA
should continue operating key 'A' for a period of time after the
expected migration of clients to 'B'.  The length of that period of time is a
local policy matter for that TA: it might operate the key until no
clients are attempting to validate using it, for example.</t>
      </section>

      <section anchor="remove_key" numbered="true" toc="default">
        <name>Phase 4: Remove Key 'A'</name>
        <t>The TA SHOULD now remove all content from the repository
        used by key 'A', and destroy the private key for key 'A'.  RPs attempting to
        rely on a TAL for key 'A' from this point will not be able to
        perform RPKI validation for the TA, and will have to update
        their local state manually, by way of a new TAL file.</t>
      </section>
    </section>

    <section anchor="using-tak-as-tal" numbered="true" toc="default">
      <name>Using TAK objects to distribute TAL data</name>
      <t>Relying Parties must be configured with RPKI Trust Anchor data in
    order to function correctly.  This Trust Anchor data is typically
    distributed in the Trust Anchor Locator (TAL) format defined in
    RFC 8630.  A TAK object can also serve as a format for
    distribution of this data, though, because the TAKey data stored
    in the TAK object contains the same data that would appear in a
    TAL for the associated Trust Anchor.</t>
    
      <t>Relying Parties may support conversion of TAK objects into TAL
    files.  Relying Parties that support conversion MUST validate the
    TAK object using the process from section 3.3.  One exception to
    the standard validation process in this context is that a Relying
    Party MAY treat a TAK object as valid, even though it is
    associated with a Trust Anchor that the Relying Party is not
    currently configured to trust.  If the Relying Party is relying on
    this exception when converting a given TAK object, the Relying
    Party MUST communicate that fact to the user.</t>
    
      <t>When converting a TAK object, a Relying Party MUST default to
    producing a TAL file based on the 'current' TAKey in the TAK
    object, though it MAY optionally support producing TAL files based
    on the 'predecessor' and 'successor' TAKeys.</t>

      <t>When converting a TAK object, a Relying Party MUST include in
      the TAL file any comments from the corresponding TAKey.</t>
    
      <t>If TAK object validation fails, then the Relying Party MUST NOT
    produce a TAL file based on the TAK object.</t>

      <t>Users should be aware that TAK objects distributed out-of-band
    have similar security properties to TAL files (i.e. there is no
    authentication). In particular, TAK objects that are not signed by
    TAs with which the Relying Party is currently configured should
    only be used if the source that distributes them is one the user
    trusts to distribute TAL files.</t>

      <t>If a Relying Party is not transitioning to new Trust Anchor data
    using the automatic process described in section 5 or the
    partially-manual process described in section 5.1, then the user
    will have to rely on an out-of-band mechanism for validating and
    updating the Trust Anchor data for the Relying Party.  Users in
    this situation should take similar care when updating a trust
    anchor using a TAK object file as when using a TAL file to update
    TA data.</t>

    </section>

    <section anchor="deployment-considerations" numbered="true" toc="default">
      <name>Deployment Considerations</name>

      <section anchor="relying-party-support" numbered="true" toc="default">
        <name>Relying Party Support</name>

        <t>Publishing TAK objects while RPs do not support this standard
        will result in those RPs rejecting these objects. It is not
        expected that this will result in the invalidation of any other
        object under a Trust Anchor.</t>

        <t>Some RPs may purposefully not support this mechanism: for
        example, they may be implemented or configured such that they
        are unable to update local current key data.  TAs should take
        this into consideration when planning key rollover.  However,
        these RPs would ideally still notify their operators of planned
        key rollovers, so that the operator could update the relevant
        configuration manually.</t>
      
      </section>

      <section anchor="alternate-transition-models" numbered="true" toc="default">
        <name>Alternate Transition Models</name>

          <t>Alternate models of TAL update exist and are
          complementary to this mechanism.  For example, TAs can
          liaise directly with RP software developers to include
          updated and reissued TAL files in new code releases, and use
          existing code update mechanisms in the RP community to
          distribute the changes.</t>

          <t>Additionally, these non-TA channels for distributing TAL
          data may themselves rely on monitoring for TAK objects and
          then updating the TAL data in their distributions or
          packages accordingly.  In this way, TAK objects may be
          useful even for RPs that don't implement in-band support for
          the protocol.</t>

          <t>Non-TA channels for distributing TAL data should ensure
          so far as is possible that their update mechanisms take
          account of any changes that a user has made to their local
          TA key configuration.  For example, if a new key is
          published for a TA, but the non-TA channel's mechanism is
          able to detect that a user had removed the TA's previous key
          from their local TA key configuration such that the user no
          longer relies on it, then the mechanism should not by
          default add the new key to the user's TA key
          configuration.</t>

      </section>

    </section>

    <section anchor="operational-considerations" numbered="true" toc="default">
      <name>Operational Considerations</name>

      <section anchor="acceptance-timers" numbered="true" toc="default">
        <name>Acceptance Timers</name>

        <t>Acceptance timers are used in TAK objects in order to permit RPs
        to test that the new key is working correctly.  This in turn means
        that the TA will be able to gain confidence in the correct
        functioning of the new key before RPs are relying on that in their
        production RPKI operations.  If a successor key is not working
        correctly, a TA may remove that key from the current TAK
        object.</t>

        <t>A TA that removes a successor key from a TAK object SHOULD NOT add
        the same successor key back into the TAK object for that TA.  This
        is because there may be an RP that has fetched the TAK object
        while the successor key was listed in it, and has started an
        acceptance timer accordingly, but has not fetched the TAK object
        during the period when the successor key was not listed in it.  If
        the unchanged successor key is added back in to the TA, such an RP
        will transition to using new the TA key more quickly than other
        RPs, which may in turn make debugging and similar more
        complicated.  A simple way of addressing this problem in a
        situation where the TA doesn't want to reissue the
        SubjectPublicKeyInfo content for the successor key that was
        withdrawn is to update the URL set for the successor key, since
        RPs must take that URL set into account for the purposes of
        initiating and cancelling acceptance timers.</t>

      </section>

    </section>

    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>

      <section anchor="previous-keys" numbered="true" toc="default">
        <name>Previous Keys</name>
        <t>A TA needs to consider the length of time for which it will
        maintain previously-current keys and their associated
        repositories.  An RP that is seeded with old TAL data will run
        for 30 days using the previous key before migrating to the next
        key, due to the acceptance timer requirements, and this 30-day
        delay applies to each new key that has been issued since the old
        TAL data was initially published.  It may be better in these
        instances to have the old publication URLs simply fail to
        resolve, so that the RP reports an error to its operator and the
        operator seeds it with up-to-date TAL data immediately.</t>

        <t>Once a TA has decided not to maintain a previously-current
        key and its associated repository, the TA SHOULD destroy that
        key.  The TA SHOULD also reuse the TA CA certificate URLs from
        the previous TAL data for the next TAL that it generates.
        These measures will help to mitigate the risk of an adversary
        gaining access to the key and its associated publication
        points in order to send invalid/incorrect data to RPs seeded
        with the TAL data for that key.</t>

      </section>

      <section anchor="ta-compromise" numbered="true" toc="default">
          <name>TA Compromise</name>

	  <t>TAK objects do not offer protection against compromise of the
	  current TA key or the successor TA key.  TA key compromise in
	  general is out of scope for this document.</t>
      </section>

    </section>

    <section anchor="iana-considerations" numbered="true" toc="default">
      <name>IANA Considerations</name>

      <section anchor="content-type" numbered="true" toc="default">
        <name>Content Type</name>
        <t>IANA is asked to register an object identifier for one
        content type in
  the "SMI Security for S/MIME CMS Content Type (1.2.840.113549.1.9.16.1)"
 registry as follows:</t>
        <artwork align="center" type="ascii-art" name="" alt=""><![CDATA[
   Decimal | Description                    | References
   --------+--------------------------------+---------------
   50      | id-ct-signedTAL                | [section 3.1]
  ]]></artwork>
        <ul spacing="normal">
          <li>Description: id-ct-signedTAL</li>
          <li>OID: 1.2.840.113549.1.9.16.1.50</li>
          <li>Specification: [section 3.1]</li>
        </ul>
      </section>

      <section anchor="signed-object" numbered="true" toc="default">
        <name>Signed Object</name>
        <t>IANA is asked to add the following to the "RPKI Signed Objects" registry:
</t>
        <artwork align="center" type="ascii-art" name="" alt=""><![CDATA[
   Name             | OID                        | Reference
   -----------------+----------------------------+---------------
   Trust Anchor Key | 1.2.840.113549.1.9.16.1.50 | [section 3.1]
  ]]></artwork>

        <t>IANA is also asked to add the following note to the "RPKI
        Signed Objects" registry:</t>

        <blockquote>

            Objects of the types listed in this registry, as well as
            RPKI resource certificates and CRLs, are expected to be
            validated using the RPKI.

        </blockquote>

      </section>

      <section anchor="file-extension" numbered="true" toc="default">
        <name>File Extension</name>
        <t>IANA is asked to add an item for the Signed TAL file extension to the "RPKI Repository Name
Scheme" created by [RFC6481] as follows:
</t>
        <artwork align="center" type="ascii-art" name="" alt=""><![CDATA[
   Filename Extension  | RPKI Object              | Reference
   --------------------+--------------------------+----------------
    .tak               | Trust Anchor Key         | [this document]
  ]]></artwork>
      </section>

      <section anchor="module-identifier" numbered="true" toc="default">
        <name>Module Identifier</name>
        <t>IANA is asked to register an object identifier for one module identifier in
  the "SMI Security for S/MIME Module Identifier (1.2.840.113549.1.9.16.0)"
 registry as follows:</t>
        <artwork align="center" type="ascii-art" name="" alt=""><![CDATA[
   Decimal | Description                    | References
   --------+--------------------------------+---------------
   74      | RPKISignedTrustAnchorList-2021 | [this document]
  ]]></artwork>
        <ul spacing="normal">
          <li>Description: RPKISignedTrustAnchorList-2021</li>
          <li>OID: 1.2.840.113549.1.9.16.0.74</li>
          <li>Specification: [this document]</li>
        </ul>
      </section>

      <section anchor="media-type" numbered="true" toc="default">
        
        <name>Registration of Media Type application/rpki-signed-tal</name>

        <t>IANA is asked to register the media type "application/rpki-signed-tal" in the "Media Types" registry as follows:</t>

        <dl>
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>rpki-signed-tal</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>binary</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>Carries an RPKI Signed TAL.  This media type contains no active content.  See the Security Considerations section of RFC XXXX for further information.</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t>RFC XXXX</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>RPKI operators</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <dl>
              <dt>Content:</dt>
              <dd>
                <t>This media type is for a signed object, as defined in RFC 6488, which contains trust anchor key material as defined in RFC XXXX.</t>
              </dd>
              <dt>Magic number(s):</dt>
              <dd>
                <t>N/A</t>
              </dd>
              <dt>File extension(s):</dt>
              <dd>
                <t>.tak</t>
              </dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </dd>
        </dl>

        <t>Person &amp; email address to contact for further information:
           iesg@ietf.org</t>
        
        <dl>
          <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>sidrops WG</t>
          </dd>
          <dt>Change controller:</dt>
          <dd>
            <t>IESG</t>
          </dd>
        </dl>
      </section>

    </section>

    <section anchor="impl-status" numbered="true" toc="default">
      <name>Implementation Status</name>
      <t>NOTE: Please remove this section and the reference to RFC 7942 prior to publication as an RFC.</t>
      <t>This section records the status of known implementations of the protocol defined by this specification at the time of posting of this Internet-Draft, and is based on a proposal described in <xref target="RFC7942" format="default"/>.  The description of implementations in this section is intended to assist the IETF in its decision processes in progressing drafts to RFCs.  Please note that the listing of any individual implementation here does not imply endorsement by the IETF.  Furthermore, no effort has been spent to verify the information presented here that was supplied by IETF contributors.  This is not intended as, and must not be construed to be, a catalog of available implementations or their features.  Readers are advised to note that other implementations may exist.</t>
      <t>According to RFC 7942, "this will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.  It is up to the individual working groups to use this information as they see fit".</t>
      <section anchor="apnic" numbered="true" toc="default">
        <name>APNIC</name>
        <ul spacing="normal">
          <li>Responsible Organization: Asia-Pacific Network Information Centre</li>
          <li>Location: https://github.com/APNIC-net/rpki-signed-tal-demo</li>
          <li>Description: A proof-of-concept for relying party TAK usage.</li>
          <li>Level of Maturity: This is a proof-of-concept implementation.</li>
          <li>Coverage: This implementation includes all of the features
described in version 13 of this specification, except for writing TAL
files based on TAK data.  The repository
includes a link to various test TALs that can be used for testing TAK
scenarios, too.</li>
          <li>Contact Information: Tom Harrison, tomh@apnic.net</li>
        </ul>
      </section>

      <section anchor="implementation-job" numbered="true" toc="default">
        <name>rpki-client</name>
        <ul spacing="normal">
          <li>Responsible Organization: Job Snijders</li>
          <li>Location: https://marc.info/?l=openbsd-tech&amp;m=166635746808783&amp;w=2</li>
          <li>Description: A relying party implementation which can validate TAKs.</li>
          <li>Level of Maturity: Mature. Trust Anchor operators are encouraged to
      use rpki-client as part of smoke testing to help ensure high
      levels of standards compliance when introducing changes, and use
      rpki-client in a continuous monitoring fashion to help maintain
      high levels of operational excellence.</li>
         <li>Coverage: This implementation includes all features except TAK acceptance
      timers.</li>
         <li>Contact information: Job Snijders, job@fastly.com</li>
        </ul>
      </section>

    </section>
    <section anchor="revision-history" numbered="true" toc="default">
      <name>Revision History</name>
      <t>03 - Last draft under Tim's authorship.
</t>
      <t>04 - First draft with George's authorship. No substantive revisions.
</t>
      <t>05 - First draft with Tom's authorship. No substantive revisions.
</t>
      <t>06 - Rob Kisteleki's critique.
</t>
      <t>07 - Switch to two-key model.
</t>
      <t>08 - Keepalive.
</t>
      <t>09 - Acceptance timers, predecessor keys, no long-lived CRL/MFT.
</t>
      <t>10 - Using TAK objects for distribution of TAL data.
</t>
      <t>11 - Manual update guidance, additional security considerations, identifier updates.
</t>
      <t>12 - TAK object comments. 
</t>
      <t>13 - Removal of compromise text, extra RP support text, key destruction text, media type registration, signed object registry note.
</t>
      
    </section>
    <section anchor="acknowledgments" numbered="true" toc="default">
      <name>Acknowledgments</name>
      <t>

      The authors wish to thank Martin Hoffmann for a thorough review of the
      document, Russ Housley for multiple reviews of the ASN.1 definitions and
      for providing a new module for the TAK object, Job Snijders for the
      extensive suggestions around TAK object structure/distribution and
      rpki-client implementation work, and Ties de Kock for text/suggestions
      around TAK/TAL distribution and general security considerations.

      </t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
	<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"?>
	<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3779.xml"?>
	<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5198.xml"?>
	<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5280.xml"?>
	<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5781.xml"?>
	<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6481.xml"?>
	<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6486.xml"?>
	<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6487.xml"?>
	<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6488.xml"?>
	<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7230.xml"?>
	<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"?>
	<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8181.xml"?>
	<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8630.xml"?>
	<reference anchor='X.690'>
	<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 Recommendation X.690 (2002) | ISO/IEC 8825-1:2002
	    </organization>
	    </author>
	    <date year="2002"/>
	</front>
	</reference>
      </references>
      <references>
        <name>Informative References</name>
	<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5652.xml"?>
	<?rfc include="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7942.xml"?>
      </references>
    </references>
    <section anchor="asn1-module" numbered="true" toc="default">
      <name>ASN.1 Module</name>
      <t>This appendix includes the ASN.1 module for the TAK object.</t>
      <sourcecode name="" type="asn.1" markers="true">


RPKISignedTrustAnchorList-2021
    { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
      pkcs9(9) smime(16) mod(0) 74 }

DEFINITIONS EXPLICIT TAGS ::=
BEGIN

IMPORTS

CONTENT-TYPE
    FROM CryptographicMessageSyntax-2009 -- in [RFC5911]
    { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
      pkcs-9(9) smime(16) modules(0) id-mod-cms-2004-02(41) }

SubjectPublicKeyInfo
    FROM PKIX1Explicit-2009 -- in [RFC5912]
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-pkix1-explicit-02(51) } ;

ct-signedTAL CONTENT-TYPE ::=
    { TYPE TAK IDENTIFIED BY
      id-ct-signedTAL }

id-ct-signedTAL OBJECT IDENTIFIER ::= { iso(1) member-body(2)
    us(840) rsadsi(113549) pkcs(1) pkcs9(9) smime(16) ct(1) 50 }

CertificateURI ::= IA5String

TAKey ::= SEQUENCE {
    comments  SEQUENCE SIZE (0..MAX) OF UTF8String,
    certificateURIs  SEQUENCE SIZE (1..MAX) OF CertificateURI,
    subjectPublicKeyInfo  SubjectPublicKeyInfo
}

TAK ::= SEQUENCE {
    version     INTEGER DEFAULT 0,
    current     TAKey,
    predecessor [0] TAKey OPTIONAL,
    successor   [1] TAKey OPTIONAL
}

END

    </sourcecode>
    </section>
  </back>
</rfc>
