<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" ipr="trust200902" category="std" docName="draft-ietf-sidrops-signed-tal-16" number="9691" consensus="true" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" symRefs="true" sortRefs="true" prepTime="2024-12-18T15:50:28" indexInclude="true" scripts="Common,Latin" tocDepth="3">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-sidrops-signed-tal-16" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9691" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="A Profile for RPKI TAKs">A Profile for Resource Public Key Infrastructure (RPKI) Trust Anchor Keys (TAKs)</title>
    <seriesInfo name="RFC" value="9691" stream="IETF"/>
    <author initials="C." surname="Martinez" fullname="Carlos Martinez">
      <organization showOnFrontPage="true">LACNIC</organization>
      <address>
        <postal>
          <street>Rambla Mexico 6125</street>
          <city>Montevideo</city>
          <code>11400</code>
          <country>Uruguay</country>
        </postal>
        <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" showOnFrontPage="true">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>
        <email>ggm@apnic.net</email>
      </address>
    </author>
    <author initials="T." surname="Harrison" fullname="Tom Harrison">
      <organization abbrev="APNIC" showOnFrontPage="true">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>
        <email>tomh@apnic.net</email>
      </address>
    </author>
    <author initials="T." surname="Bruijnzeels" fullname="Tim Bruijnzeels">
      <organization showOnFrontPage="true">RIPE NCC</organization>
      <address>
        <postal>
          <postalLine>Stationsplein 11</postalLine>
          <postalLine>Amsterdam</postalLine>
          <postalLine>The Netherlands</postalLine>
        </postal>
        <email>tim@ripe.net</email>
        <uri>https://www.ripe.net/</uri>
      </address>
    </author>
    <author initials="R." surname="Austein" fullname="Rob Austein">
      <organization showOnFrontPage="true">Dragon Research Labs</organization>
      <address>
        <email>sra@hactrn.net</email>
      </address>
    </author>
    <date month="12" year="2024"/>
    <area>OPS</area>
    <workgroup>sidrops</workgroup>
    <keyword>security</keyword>
    <keyword>cryptography</keyword>
    <keyword>X.509</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">
    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).  A TAK object can be used by a TA to signal to RPs the
    location(s) of the accompanying CA certificate for the current public key,
    as well as the successor public key and the location(s) of its CA
    certificate. This object helps to support planned key rollovers without
    impacting RPKI validation.
      </t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by
            the Internet Engineering Steering Group (IESG).  Further
            information on Internet Standards is available in Section 2 of 
            RFC 7841.
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc9691" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2024 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Revised BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Revised BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-overview">Overview</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.1.2">
              <li pn="section-toc.1-1.1.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.1.1"><xref derivedContent="1.1" format="counter" sectionFormat="of" target="section-1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-requirements-notation">Requirements Notation</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-tak-object-definition">TAK Object Definition</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.2.2">
              <li pn="section-toc.1-1.2.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.2.1.1"><xref derivedContent="2.1" format="counter" sectionFormat="of" target="section-2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-the-tak-object-content-type">The TAK Object Content Type</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.2">
                <t indent="0" pn="section-toc.1-1.2.2.2.1"><xref derivedContent="2.2" format="counter" sectionFormat="of" target="section-2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-the-tak-object-econtent">The TAK Object eContent</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.2.2.2.2">
                  <li pn="section-toc.1-1.2.2.2.2.1">
                    <t indent="0" pn="section-toc.1-1.2.2.2.2.1.1"><xref derivedContent="2.2.1" format="counter" sectionFormat="of" target="section-2.2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-takey">TAKey</xref></t>
                  </li>
                  <li pn="section-toc.1-1.2.2.2.2.2">
                    <t indent="0" pn="section-toc.1-1.2.2.2.2.2.1"><xref derivedContent="2.2.2" format="counter" sectionFormat="of" target="section-2.2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-tak">TAK</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.2.2.3">
                <t indent="0" pn="section-toc.1-1.2.2.3.1"><xref derivedContent="2.3" format="counter" sectionFormat="of" target="section-2.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-tak-object-validation">TAK Object Validation</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-tak-object-generation-and-p">TAK Object Generation and Publication</xref></t>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-relying-party-use">Relying Party Use</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2">
              <li pn="section-toc.1-1.4.2.1">
                <t indent="0" pn="section-toc.1-1.4.2.1.1"><xref derivedContent="4.1" format="counter" sectionFormat="of" target="section-4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-manual-update-of-ta-public-">Manual Update of TA Public Key Details</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-maintaining-multiple-ta-key">Maintaining Multiple TA Key Pairs</xref></t>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-performing-ta-key-rolls">Performing TA Key Rolls</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.6.2">
              <li pn="section-toc.1-1.6.2.1">
                <t indent="0" pn="section-toc.1-1.6.2.1.1"><xref derivedContent="6.1" format="counter" sectionFormat="of" target="section-6.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-phase-1-add-a-tak-for-key-p">Phase 1: Add a TAK for Key Pair 'A'</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.2">
                <t indent="0" pn="section-toc.1-1.6.2.2.1"><xref derivedContent="6.2" format="counter" sectionFormat="of" target="section-6.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-phase-2-add-a-key-pair-b">Phase 2: Add a Key Pair 'B'</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.3">
                <t indent="0" pn="section-toc.1-1.6.2.3.1"><xref derivedContent="6.3" format="counter" sectionFormat="of" target="section-6.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-phase-3-update-tal-to-point">Phase 3: Update TAL to point to 'B'</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.4">
                <t indent="0" pn="section-toc.1-1.6.2.4.1"><xref derivedContent="6.4" format="counter" sectionFormat="of" target="section-6.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-phase-4-remove-key-pair-a">Phase 4: Remove Key Pair 'A'</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-using-tak-objects-to-distri">Using TAK Objects to Distribute TAL Data</xref></t>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" format="counter" sectionFormat="of" target="section-8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-deployment-considerations">Deployment Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.8.2">
              <li pn="section-toc.1-1.8.2.1">
                <t indent="0" pn="section-toc.1-1.8.2.1.1"><xref derivedContent="8.1" format="counter" sectionFormat="of" target="section-8.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-relying-party-support">Relying Party Support</xref></t>
              </li>
              <li pn="section-toc.1-1.8.2.2">
                <t indent="0" pn="section-toc.1-1.8.2.2.1"><xref derivedContent="8.2" format="counter" sectionFormat="of" target="section-8.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-alternate-transition-models">Alternate Transition Models</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="9" format="counter" sectionFormat="of" target="section-9"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-operational-considerations">Operational Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.9.2">
              <li pn="section-toc.1-1.9.2.1">
                <t indent="0" pn="section-toc.1-1.9.2.1.1"><xref derivedContent="9.1" format="counter" sectionFormat="of" target="section-9.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-acceptance-timers">Acceptance Timers</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="10" format="counter" sectionFormat="of" target="section-10"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.10.2">
              <li pn="section-toc.1-1.10.2.1">
                <t indent="0" pn="section-toc.1-1.10.2.1.1"><xref derivedContent="10.1" format="counter" sectionFormat="of" target="section-10.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-previous-keys">Previous Keys</xref></t>
              </li>
              <li pn="section-toc.1-1.10.2.2">
                <t indent="0" pn="section-toc.1-1.10.2.2.1"><xref derivedContent="10.2" format="counter" sectionFormat="of" target="section-10.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ta-compromise">TA Compromise</xref></t>
              </li>
              <li pn="section-toc.1-1.10.2.3">
                <t indent="0" pn="section-toc.1-1.10.2.3.1"><xref derivedContent="10.3" format="counter" sectionFormat="of" target="section-10.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-alternate-transition-models-2">Alternate Transition Models</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.11">
            <t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="11" format="counter" sectionFormat="of" target="section-11"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.11.2">
              <li pn="section-toc.1-1.11.2.1">
                <t indent="0" pn="section-toc.1-1.11.2.1.1"><xref derivedContent="11.1" format="counter" sectionFormat="of" target="section-11.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-content-type">Content Type</xref></t>
              </li>
              <li pn="section-toc.1-1.11.2.2">
                <t indent="0" pn="section-toc.1-1.11.2.2.1"><xref derivedContent="11.2" format="counter" sectionFormat="of" target="section-11.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-signed-object">Signed Object</xref></t>
              </li>
              <li pn="section-toc.1-1.11.2.3">
                <t indent="0" pn="section-toc.1-1.11.2.3.1"><xref derivedContent="11.3" format="counter" sectionFormat="of" target="section-11.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-file-extension">File Extension</xref></t>
              </li>
              <li pn="section-toc.1-1.11.2.4">
                <t indent="0" pn="section-toc.1-1.11.2.4.1"><xref derivedContent="11.4" format="counter" sectionFormat="of" target="section-11.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-module-identifier">Module Identifier</xref></t>
              </li>
              <li pn="section-toc.1-1.11.2.5">
                <t indent="0" pn="section-toc.1-1.11.2.5.1"><xref derivedContent="11.5" format="counter" sectionFormat="of" target="section-11.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-registration-of-media-type-">Registration of Media Type application/rpki-signed-tal</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.12">
            <t indent="0" pn="section-toc.1-1.12.1"><xref derivedContent="12" format="counter" sectionFormat="of" target="section-12"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.12.2">
              <li pn="section-toc.1-1.12.2.1">
                <t indent="0" pn="section-toc.1-1.12.2.1.1"><xref derivedContent="12.1" format="counter" sectionFormat="of" target="section-12.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.12.2.2">
                <t indent="0" pn="section-toc.1-1.12.2.2.1"><xref derivedContent="12.2" format="counter" sectionFormat="of" target="section-12.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.13">
            <t indent="0" pn="section-toc.1-1.13.1"><xref derivedContent="Appendix A" format="default" sectionFormat="of" target="section-appendix.a"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-asn1-module">ASN.1 Module</xref></t>
          </li>
          <li pn="section-toc.1-1.14">
            <t indent="0" pn="section-toc.1-1.14.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgments">Acknowledgments</xref></t>
          </li>
          <li pn="section-toc.1-1.15">
            <t indent="0" pn="section-toc.1-1.15.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.c"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="overview" numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-overview">Overview</name>
      <t indent="0" pn="section-1-1">
      A Trust Anchor Locator (TAL) <xref target="RFC8630" format="default" sectionFormat="of" derivedContent="RFC8630"/> is used by Relying Parties (RPs) in the
      Resource Public Key Infrastructure (RPKI) to locate and validate
      Trust Anchor (TA) Certification Authority (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
      notifications mean that TA operators can be more confident of
      RPs being aware of key rollover operations.

      </t>
      <t indent="0" pn="section-1-2">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
public key, as well as the value of the successor public 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 public key so that
planned key rollovers 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 indent="0" pn="section-1-3">When RPs are first bootstrapped, they use a TAL to discover the
      public 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="RFC9286" format="default" sectionFormat="of" derivedContent="RFC9286"/> and Certificate
      Revocation List (CRL) published by that TA (<xref target="RFC6487" sectionFormat="of" section="5" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6487#section-5" derivedContent="RFC6487"/>). However, before processing any other
      objects, it will first validate the TAK object if it is present.  If the
      TAK object lists only the current public key, then the RP continues
      processing as it would in the absence of a TAK object.  If the TAK
      object includes a successor public key, the RP starts a 30-day
      acceptance timer for that key and then continues standard top-down
      validation with the current public key. During the following validation
      runs up until the expiry of the acceptance timer, the RP verifies that
      the public keys and the certificate URLs listed in the TAK object remain
      unchanged.  If they remain unchanged as at that time, then the RP will
      fetch the successor public key, update its local state with that public
      key and its associated certificate location(s), and continue
      processing using that public key.</t>
      <t indent="0" pn="section-1-4">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 private keys for use by the second.  There may be other
      scenarios in which key rollover is useful, though.</t>
      <section anchor="requirements-notation" numbered="true" toc="include" removeInRFC="false" pn="section-1.1">
        <name slugifiedName="name-requirements-notation">Requirements Notation</name>
        <t indent="0" pn="section-1.1-1">The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
       "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>",
       "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
       "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document
       are to be interpreted as described in BCP 14 <xref target="RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> when, and only when, they
       appear in all capitals, as shown here.</t>
      </section>
    </section>
    <section anchor="tak-object-definition" numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-tak-object-definition">TAK Object Definition</name>
      <t indent="0" pn="section-2-1">The TAK object makes use of the template for RPKI digitally signed
      objects <xref target="RFC6488" format="default" sectionFormat="of" derivedContent="RFC6488"/>, which defines a
      Cryptographic Message Syntax (CMS) <xref target="RFC5652" format="default" sectionFormat="of" derivedContent="RFC5652"/> 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 <xref target="RFC6488" sectionFormat="of" section="4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6488#section-4" derivedContent="RFC6488"/>), this document defines the following:
</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-2-2">
        <li pn="section-2-2.1">the OID (<xref target="content_type" format="default" sectionFormat="of" derivedContent="Section 2.1"/>) 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 pn="section-2-2.2">the ASN.1 syntax for the TAK eContent (<xref target="e_content" format="default" sectionFormat="of" derivedContent="Section 2.2"/>)
  </li>
        <li pn="section-2-2.3">the additional steps required to validate a TAK (<xref target="validation" format="default" sectionFormat="of" derivedContent="Section 2.3"/>)
  </li>
      </ul>
      <section anchor="content_type" numbered="true" toc="include" removeInRFC="false" pn="section-2.1">
        <name slugifiedName="name-the-tak-object-content-type">The TAK Object Content Type</name>
        <t indent="0" pn="section-2.1-1">This document specifies an OID for the TAK object as follows:
</t>
        <sourcecode type="asn.1" markers="false" pn="section-2.1-2">
   id-ct-signedTAL OBJECT IDENTIFIER ::=
      { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9)
        smime(16) ct(1) 50 }
</sourcecode>
        <t indent="0" pn="section-2.1-3">This OID <bcp14>MUST</bcp14> appear in both the eContentType in the encapContentInfo
object and the content-type signed attribute in the signerInfo
object (see <xref target="RFC6488" format="default" sectionFormat="of" derivedContent="RFC6488"/>).</t>
      </section>
      <section anchor="e_content" numbered="true" toc="include" removeInRFC="false" pn="section-2.2">
        <name slugifiedName="name-the-tak-object-econtent">The TAK Object eContent</name>
        <t indent="0" pn="section-2.2-1">The content of a TAK object is ASN.1 encoded using the Distinguished Encoding Rules (DER)
<xref target="X.690" format="default" sectionFormat="of" derivedContent="X.690"/> and is defined per the module in <xref target="asn1-module" format="default" sectionFormat="of" derivedContent="Appendix A"/>.
</t>
        <section anchor="takey" numbered="true" toc="include" removeInRFC="false" pn="section-2.2.1">
          <name slugifiedName="name-takey">TAKey</name>
          <t indent="0" pn="section-2.2.1-1">This structure defines a TA public key similar to that from <xref target="RFC8630" format="default" sectionFormat="of" derivedContent="RFC8630"/>. It contains a sequence of zero or more comments, one or more certificate URIs, and a
SubjectPublicKeyInfo.
</t>
          <dl spacing="normal" indent="3" newline="false" pn="section-2.2.1-2">
            <dt pn="section-2.2.1-2.1">comments:</dt>
            <dd pn="section-2.2.1-2.2">This field is semantically equivalent to the comment section defined in
  <xref target="RFC8630" sectionFormat="of" section="2.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8630#section-2.2" derivedContent="RFC8630"/>. Each comment is
  human-readable informational UTF-8 text <xref target="RFC3629" format="default" sectionFormat="of" derivedContent="RFC3629"/>, conforming to the
  restrictions defined in <xref target="RFC5198" sectionFormat="of" section="2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc5198#section-2" derivedContent="RFC5198"/>.  The leading "#" character that is used to
  denote a comment in <xref target="RFC8630" format="default" sectionFormat="of" derivedContent="RFC8630"/> is
  omitted here.</dd>
            <dt pn="section-2.2.1-2.3">certificateURIs:</dt>
            <dd pn="section-2.2.1-2.4">This field is semantically equivalent to the URI section defined in
  <xref target="RFC8630" sectionFormat="of" section="2.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8630#section-2.2" derivedContent="RFC8630"/>. It <bcp14>MUST</bcp14>
contain at least one CertificateURI element. Each CertificateURI element contains the IA5String
representation of either an rsync URI
<xref target="RFC5781" format="default" sectionFormat="of" derivedContent="RFC5781"/> or an HTTPS URI
<xref target="RFC9110" format="default" sectionFormat="of" derivedContent="RFC9110"/>.</dd>
            <dt pn="section-2.2.1-2.5">subjectPublicKeyInfo:</dt>
            <dd pn="section-2.2.1-2.6">This field contains a SubjectPublicKeyInfo (<xref target="RFC5280" sectionFormat="of" section="4.1.2.7" format="default" derivedLink="https://rfc-editor.org/rfc/rfc5280#section-4.1.2.7" derivedContent="RFC5280"/>) in the DER format
<xref target="X.690" format="default" sectionFormat="of" derivedContent="X.690"/>.</dd>
          </dl>
        </section>
        <section anchor="tak" numbered="true" toc="include" removeInRFC="false" pn="section-2.2.2">
          <name slugifiedName="name-tak">TAK</name>
          <dl spacing="normal" indent="3" newline="false" pn="section-2.2.2-1">
            <dt pn="section-2.2.2-1.1">version:</dt>
            <dd pn="section-2.2.2-1.2">The version number of the TAK object <bcp14>MUST</bcp14> be 0.</dd>
            <dt pn="section-2.2.2-1.3">current:</dt>
            <dd pn="section-2.2.2-1.4">This field contains the TA public key of the repository in
which the TAK object is published.</dd>
            <dt pn="section-2.2.2-1.5">predecessor:</dt>
            <dd pn="section-2.2.2-1.6">This field contains the TA public key that was in use
            for this TA immediately prior to the current TA public key, if
            applicable.</dd>
            <dt pn="section-2.2.2-1.7">successor:</dt>
            <dd pn="section-2.2.2-1.8">This field contains the TA public key to be used in place of
            the current public key, if applicable, after expiry of the relevant acceptance
            timer.</dd>
          </dl>
        </section>
      </section>
      <section anchor="validation" numbered="true" toc="include" removeInRFC="false" pn="section-2.3">
        <name slugifiedName="name-tak-object-validation">TAK Object Validation</name>
        <t indent="0" pn="section-2.3-1">To determine whether a TAK object is valid, the RP <bcp14>MUST</bcp14> perform the
following checks in
addition to those specified in
<xref target="RFC6488" format="default" sectionFormat="of" derivedContent="RFC6488"/>:
</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-2.3-2">
          <li pn="section-2.3-2.1">The eContentType OID matches the OID described in
        <xref target="content_type" format="default" sectionFormat="of" derivedContent="Section 2.1"/>.
    </li>
          <li pn="section-2.3-2.2">The TAK object appears as the product of a TA CA
          certificate (i.e., the TA CA certificate itself is the issuer
          of the End-Entity (EE) certificate of the TAK object).
    </li>
          <li pn="section-2.3-2.3">The TA CA has published only one TAK object in its
          repository for this public key, and this
        object appears on the manifest as the only entry using the ".tak" extension (see
        <xref target="RFC6481" format="default" sectionFormat="of" derivedContent="RFC6481"/>).
        </li>
          <li pn="section-2.3-2.4">The EE certificate of this TAK object describes its Internet Number Resources (INRs) using
        the "inherit" attribute.
        </li>
          <li pn="section-2.3-2.5">The decoded TAK content conforms to the format defined in
        <xref target="e_content" format="default" sectionFormat="of" derivedContent="Section 2.2"/>.
        </li>
          <li pn="section-2.3-2.6">The SubjectPublicKeyInfo value of the current TA public 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 indent="0" pn="section-2.3-3">If any of these checks do not succeed, the RP <bcp14>MUST</bcp14> ignore the TAK
object and proceed as though it were not listed on the manifest.</t>
        <t indent="0" pn="section-2.3-4">The RP is not required to compare its current set of
        certificateURIs for the current public key with those listed in the TAK
        object.

   The RP <bcp14>MAY</bcp14> alert the user that these sets of certificateURIs
   do not match.  If this happens, the user may opt to manually update the set
   of certificateURIs in their configuration.  


   However, the RP <bcp14>MUST NOT</bcp14> automatically update its configuration to
   use these certificateURIs in the event of inconsistency.  This is
   because the migration of users to new certificateURIs should
   happen by way of the successor public key process.</t>
      </section>
    </section>
    <section anchor="mnt_obj" numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-tak-object-generation-and-p">TAK Object Generation and Publication</name>
      <t indent="0" pn="section-3-1">A non-normative guideline for naming this object is that the filename be a
value derived from the public key part of the entity's key pair, using the
algorithm described for CRLs in <xref target="RFC6481" sectionFormat="of" section="2.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6481#section-2.2" derivedContent="RFC6481"/>.</t>
      <t indent="0" pn="section-3-2">The filename extension of ".tak" <bcp14>MUST</bcp14> be used to denote
    the object as a TAK.
</t>
      <t indent="0" pn="section-3-3">In order to generate a TAK object, the TA <bcp14>MUST</bcp14> perform the following actions:
</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3-4">
        <li pn="section-3-4.1">The TA <bcp14>MUST</bcp14> generate a one-time-use EE certificate for the TAK.</li>
        <li pn="section-3-4.2">This EE certificate <bcp14>MUST</bcp14> have a unique key pair.</li>
        <li pn="section-3-4.3">This EE certificate <bcp14>MUST</bcp14> have a Subject Information Access
        (SIA) <xref target="RFC6487" format="default" sectionFormat="of" derivedContent="RFC6487"/> 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 pn="section-3-4.4">As described in <xref target="RFC6487" format="default" sectionFormat="of" derivedContent="RFC6487"/>, the EE
certificate used for this object must contain either the IP Address Delegation
extension or the Autonomous System Identifier Delegation extension <xref target="RFC3779" format="default" sectionFormat="of" derivedContent="RFC3779"/>, or both. However, because the resource
set is irrelevant to this object type, this certificate <bcp14>MUST</bcp14>
describe its INRs using the "inherit" attribute rather than explicitly
describing a resource set.
</li>
        <li pn="section-3-4.5">This EE certificate <bcp14>MUST</bcp14> have a "notBefore" time that matches or predates the moment that
the TAK will be published.
</li>
        <li pn="section-3-4.6">This EE certificate <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> no longer
be published, but it <bcp14>MAY</bcp14> be replaced by a newly generated TAK object with equivalent
content and an updated "notAfter" time.
</li>
        <li pn="section-3-4.7">The current TA public key for the TAK <bcp14>MUST</bcp14> match that of the TA CA
certificate under which the TAK was issued.</li>
      </ul>
      <t indent="0" pn="section-3-5">In distribution contexts that support media types, the
      "application/rpki-signed-tal" media type can be used for TAK
      objects.</t>
    </section>
    <section anchor="rp_use" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-relying-party-use">Relying Party Use</name>
      <t indent="0" pn="section-4-1">RPs <bcp14>MUST</bcp14> keep a record of the current public key for each
configured TA, as well as the URI(s) where the CA certificate for this
public 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" sectionFormat="of" derivedContent="RFC8630"/>.</t>
      <t indent="0" pn="section-4-2">When performing top-down validation, RPs <bcp14>MUST</bcp14> first validate and
process the TAK object for its current known public key by performing the following steps:
</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4-3">
        <li pn="section-4-3.1">A CA certificate is retrieved and validated from the known URIs as described in
Sections <xref target="RFC8630" section="3" sectionFormat="bare" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8630#section-3" derivedContent="RFC8630"/> and <xref target="RFC8630" section="4" sectionFormat="bare" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8630#section-4" derivedContent="RFC8630"/> of
<xref target="RFC8630" format="default" sectionFormat="of" derivedContent="RFC8630"/>.
</li>
        <li pn="section-4-3.2">The manifest and CRL for this certificate are then validated as described
in
<xref target="RFC6487" format="default" sectionFormat="of" derivedContent="RFC6487"/> and
<xref target="RFC9286" format="default" sectionFormat="of" derivedContent="RFC9286"/>.
</li>
        <li pn="section-4-3.3">If the TAK object is present, it is validated as described in
<xref target="validation" format="default" sectionFormat="of" derivedContent="Section 2.3"/>.
</li>
      </ul>
      <t indent="0" pn="section-4-4">If the TAK object includes a successor public key, then the RP must
      verify the successor public key by:</t>
      <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-4-5">
        <li pn="section-4-5.1">performing top-down validation using the
        successor public key in order to validate the TAK object for the
        successor TA,</li>
        <li pn="section-4-5.2">ensuring that a valid TAK object exists for the successor
        TA,</li>
        <li pn="section-4-5.3">ensuring that the successor TAK object's current public key matches the
        initial TAK object's successor public key, and</li>
        <li pn="section-4-5.4">ensuring that the successor TAK object's predecessor
        public key matches
        the initial TAK object's current public key.</li>
      </ul>
      <t indent="0" pn="section-4-6">
      If any of these steps fails, then the successor public key has failed
      verification.</t>
      <t indent="0" pn="section-4-7">If the successor public key passes verification and the RP has not
      seen that successor public key on the previous successful validation
      run for this TA, then the RP:</t>
      <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-4-8">
        <li pn="section-4-8.1">sets an acceptance timer of 30 days for this
      successor public key for this TA,</li>
        <li pn="section-4-8.2">cancels the existing acceptance timer for this TA (if
        applicable), and</li>
        <li pn="section-4-8.3">continues standard top-down validation as
        described in <xref target="RFC6487" format="default" sectionFormat="of" derivedContent="RFC6487"/> using the
        current public key.</li>
      </ul>
      <t indent="0" pn="section-4-9">If the successor public key passes verification and the RP has seen that
successor public key on the previous successful validation run for this TA,
the RP continues standard top-down validation using the current public key if
the relevant acceptance timer has not expired. Otherwise, the RP updates its
current known public key details for this TA to be those of the successor
public key and begins top-down validation again using the successor public
key.</t>
      <t indent="0" pn="section-4-10">If the successor public key does not pass verification or if the
      TAK object does not include a successor public key, the RP
      cancels the existing acceptance timer for this TA (if
      applicable).</t>
      <t indent="0" pn="section-4-11">An RP <bcp14>MUST NOT</bcp14> use a successor public key for top-down validation
      outside of the process described above, except for the purpose
      of testing that the new public key is working correctly.  This allows a
      TA to publish a successor public key for a period of time, allowing RPs
      to test it while still being able to rely on RPs using the
      current public key for their production RPKI operations.</t>
      <t indent="0" pn="section-4-12">A successor public key may have the same SubjectPublicKeyInfo value
      as the current public key; this will be the case where a TA is updating
      the certificateURIs for that public key.</t>
      <section anchor="rp_manual" numbered="true" toc="include" removeInRFC="false" pn="section-4.1">
        <name slugifiedName="name-manual-update-of-ta-public-">Manual Update of TA Public Key Details</name>
        <t indent="0" pn="section-4.1-1">An RP may opt to not support the automatic
        transition of TA public key data, as defined in <xref target="rp_use" format="default" sectionFormat="of" derivedContent="Section 4"/>.
        An alternative approach is for the RP to alert the
        user when a new successor public key is seen and when the
        relevant acceptance timer has expired. The user can then
        manually transition to the new TA public key data.  This process
        ensures that the benefits of the acceptance timer period are
        still realised, as compared with TA public key update based on a TAL
        distributed out of band by a TA.</t>
      </section>
    </section>
    <section anchor="mnt_keys" numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-maintaining-multiple-ta-key">Maintaining Multiple TA Key Pairs</name>
      <t indent="0" pn="section-5-1">
An RP that can process TAK objects will only ever use one public key for
validation: either the current public key, or the successor public key once the
relevant acceptance timer has expired.  By contrast, an RP that cannot process
TAK objects will continue to use the public 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 public key, the TA may
have to maintain the previous key pair for a period of time alongside the new
key pair in order to ensure continuity of service for older clients.</t>
      <t indent="0" pn="section-5-2">For each TA key pair that a TA maintains, the signed material for
      these key pairs <bcp14>MUST</bcp14> be published under different directories in the
      context of the 'id-ad-caRepository' and 'id-ad-rpkiManifest'
      SIA descriptions contained on the CA
      certificates <xref target="RFC6487" format="default" sectionFormat="of" derivedContent="RFC6487"/>.
      Publishing objects under the same directory is potentially
      confusing for RPs and could lead to object invalidity in the
      event of filename collisions.</t>
      <t indent="0" pn="section-5-3"> Also, the CA certificates for each maintained key pair and the
      content published for each key pair <bcp14>MUST</bcp14> be equivalent (except for
      the TAK object). In other words, for the purposes of RPKI
      validation, it <bcp14>MUST NOT</bcp14> make a difference which of the public keys is
      used as a starting point. </t>
      <t indent="0" pn="section-5-4">This means that the IP and Autonomous System (AS) resources contained on all
      current CA certificates for the maintained
TA key pairs <bcp14>MUST</bcp14> be the same. Furthermore, for any delegation of IP and AS
resources to a child CA, the TA <bcp14>MUST</bcp14> have an equivalent CA certificate
published under each of its key pairs. Any updates in delegations
<bcp14>MUST</bcp14> be reflected under each of its key pairs. A TA <bcp14>SHOULD NOT</bcp14> 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 indent="0" pn="section-5-5">If a TA uses a single remote publication server (per <xref target="RFC8181" format="default" sectionFormat="of" derivedContent="RFC8181"/>) for its key pairs, then it
      <bcp14>MUST</bcp14> include all &lt;publish/&gt; and &lt;withdraw/&gt;
      Protocol Data Units (PDUs) for the products of each of its key pairs in
      a single query in order to reduce the risk of RPs seeing inconsistent
      data in the TA's RPKI repositories.</t>
      <t indent="0" pn="section-5-6">If a TA uses multiple publication servers, then the content for
different key pairs will be out of sync at times. The TA
<bcp14>SHOULD</bcp14> ensure that the
duration of these moments is limited to the shortest possible time.
Furthermore, the following
should be observed:
</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5-7">
        <li pn="section-5-7.1">In cases where a CA certificate is revoked 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 private 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
relatively insignificant.
</li>
        <li pn="section-5-7.2">In cases where a CA certificate is replaced by a certificate with
an extended set of resources, the
TA <bcp14>MUST</bcp14> 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 public key just before the CA certificate was due to be updated.
</li>
      </ul>
      <t indent="0" pn="section-5-8">Finally, note that the publication locations of CA certificates for
      delegations to child CAs under each key pair will be different;
      therefore, the Authority Information Access 'id-ad-caIssuers' values
      (<xref target="RFC6487" sectionFormat="of" section="4.8.7" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6487#section-4.8.7" derivedContent="RFC6487"/>) on
      certificates issued by the child CAs may not be as expected when
      performing top-down validation, depending on the TA public key that is
      used. However, these values are not critical to top-down validation, so
      RPs performing such validation <bcp14>MUST NOT</bcp14> reject a
      certificate simply because this value is not as expected.</t>
    </section>
    <section anchor="perf_roll" numbered="true" toc="include" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-performing-ta-key-rolls">Performing TA Key Rolls</name>
      <t indent="0" pn="section-6-1">This section describes how present-day RPKI TAs that use only one key pair and do not use TAK objects can use a TAK object to perform a planned
key rollover.
</t>
      <section anchor="phase-1-add-a-tak-for-key-a" numbered="true" toc="include" removeInRFC="false" pn="section-6.1">
        <name slugifiedName="name-phase-1-add-a-tak-for-key-p">Phase 1: Add a TAK for Key Pair 'A'</name>
        <t indent="0" pn="section-6.1-1">Before adding a successor public key, a TA may want to confirm
        that it can maintain a TAK object for its current key pair only. We
        will refer to this key pair as key pair 'A' throughout this section.
        </t>
      </section>
      <section anchor="add_key" numbered="true" toc="include" removeInRFC="false" pn="section-6.2">
        <name slugifiedName="name-phase-2-add-a-key-pair-b">Phase 2: Add a Key Pair 'B'</name>
        <t indent="0" pn="section-6.2-1">The TA can now generate a new key pair called 'B'. The
        private key of this key pair <bcp14>MUST</bcp14> now be used to create a
new CA certificate for the associated public key and issue equivalent CA certificates for delegations
to child CAs as described in
<xref target="mnt_keys" format="default" sectionFormat="of" derivedContent="Section 5"/>.
</t>
        <t indent="0" pn="section-6.2-2">At this point, the TA can also construct a new TAL file
<xref target="RFC8630" format="default" sectionFormat="of" derivedContent="RFC8630"/> for
the public key of key pair 'B' and locally test that the validation
outcome for the new public key is equivalent
to that of the other current public key(s).
</t>
        <t indent="0" pn="section-6.2-3">When the TA is certain that the content for both public
        keys is equivalent and
        wants to initiate the migration from 'A' to 'B', it
        issues a new TAK object under key pair 'A', with the public
        key from that key pair as the
        current public key for that object, the public key from key
        pair 'B' as the successor public key, and
        no predecessor public key.  It also issues a TAK object under key
        pair 'B', with the public key from that key pair as the
        current public key for that object, the public key from key pair 'A'
        as the predecessor public key, and no successor public key.</t>
        <t indent="0" pn="section-6.2-4">Once this has happened, RP clients will start seeing the
        new public key and setting acceptance timers accordingly.</t>
      </section>
      <section anchor="activate_key" numbered="true" toc="include" removeInRFC="false" pn="section-6.3">
        <name slugifiedName="name-phase-3-update-tal-to-point">Phase 3: Update TAL to point to 'B'</name>
        <t indent="0" pn="section-6.3-1">At about the time that the TA expects clients to start
        setting the public key from key pair 'B' as the current public
        key, the TA must release a new TAL file for that public key.  It <bcp14>SHOULD</bcp14> 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 indent="0" pn="section-6.3-2">To support RPs that do not take account of TAK objects, the TA
should continue operating key pair 'A' for a period of time after the
expected migration of clients to the public key from 'B'.  The length of that period of time is a
local policy matter for that TA: for example, it might operate the key pair until no
clients are attempting to validate using the associated public key.</t>
      </section>
      <section anchor="remove_key" numbered="true" toc="include" removeInRFC="false" pn="section-6.4">
        <name slugifiedName="name-phase-4-remove-key-pair-a">Phase 4: Remove Key Pair 'A'</name>
        <t indent="0" pn="section-6.4-1">The TA <bcp14>SHOULD</bcp14> now remove all content from the repository
        used by key pair 'A' and destroy the private key for that key
        pair.  
RPs attempting to rely on a TAL for the public key from key pair '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="include" removeInRFC="false" pn="section-7">
      <name slugifiedName="name-using-tak-objects-to-distri">Using TAK Objects to Distribute TAL Data</name>
      <t indent="0" pn="section-7-1">RPs must be configured with RPKI TA data in
    order to function correctly.  This TA data is typically
    distributed in the TAL format defined in
    <xref target="RFC8630" format="default" sectionFormat="of" derivedContent="RFC8630"/>.

    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 TA.</t>
      <t indent="0" pn="section-7-2">RPs may support conversion of TAK objects into TAL
    files.  RPs that support conversion <bcp14>MUST</bcp14> validate the
    TAK object using the process from <xref target="validation" format="default" sectionFormat="of" derivedContent="Section 2.3"/>.  One exception to
    the standard validation process in this context is that an RP <bcp14>MAY</bcp14> treat a TAK object as valid, even though it is
    associated with a TA that the RP is not
    currently configured to trust.  If the RP is relying on
    this exception when converting a given TAK object, the RP
    <bcp14>MUST</bcp14> communicate that fact to the user.</t>
      <t indent="0" pn="section-7-3">When converting a TAK object, an RP <bcp14>MUST</bcp14> default to
    producing a TAL file based on the 'current' TAKey in the TAK
    object, though it <bcp14>MAY</bcp14> optionally support producing TAL files based
    on the 'predecessor' and 'successor' TAKeys.</t>
      <t indent="0" pn="section-7-4">If the TAKey that is being converted has comments, an RP
      <bcp14>MUST</bcp14> include those comments in the TAL file.</t>
      <t indent="0" pn="section-7-5">If TAK object validation fails, then the RP <bcp14>MUST NOT</bcp14>
    produce a TAL file based on the TAK object.</t>
      <t indent="0" pn="section-7-6">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 RP is currently configured should
    only be used if the source that distributes them is one the user
    trusts to distribute TAL files.</t>
      <t indent="0" pn="section-7-7">If an RP is not transitioning to new TA data
    using the automatic process described in <xref target="rp_use" format="default" sectionFormat="of" derivedContent="Section 4"/> or the
    partially manual process described in <xref target="rp_manual" format="default" sectionFormat="of" derivedContent="Section 4.1"/>, then the user
    will have to rely on an out-of-band mechanism for validating and
    updating the TA data for the RP.  Users in
    this situation should take similar care when updating a 
TA using a TAK object file as when using a TAL file to update
    TA data.</t>
    </section>
    <section anchor="deployment-considerations" numbered="true" toc="include" removeInRFC="false" pn="section-8">
      <name slugifiedName="name-deployment-considerations">Deployment Considerations</name>
      <section anchor="relying-party-support" numbered="true" toc="include" removeInRFC="false" pn="section-8.1">
        <name slugifiedName="name-relying-party-support">Relying Party Support</name>
        <t indent="0" pn="section-8.1-1">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 TA.</t>
        <t indent="0" pn="section-8.1-2">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 public key data.  TA operators
        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="include" removeInRFC="false" pn="section-8.2">
        <name slugifiedName="name-alternate-transition-models">Alternate Transition Models</name>
        <t indent="0" pn="section-8.2-1">Alternate models for 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 indent="0" pn="section-8.2-2">
Additionally, these non-TA channels for distributing TAL data may themselves
monitor for TAK objects and then update 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 indent="0" pn="section-8.2-3">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 public key configuration.  For example, if a new public 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
          public key
          from their local TA public key configuration such that the user no
          longer relies on it, then the mechanism should not add the new public key to the user's TA public key
          configuration by default.</t>
      </section>
    </section>
    <section anchor="operational-considerations" numbered="true" toc="include" removeInRFC="false" pn="section-9">
      <name slugifiedName="name-operational-considerations">Operational Considerations</name>
      <section anchor="acceptance-timers" numbered="true" toc="include" removeInRFC="false" pn="section-9.1">
        <name slugifiedName="name-acceptance-timers">Acceptance Timers</name>
        <t indent="0" pn="section-9.1-1">Acceptance timers are used in TAK objects in order to permit RPs to
        test that the new public key is working correctly.  In turn, this
        means that the TA operator will be able to gain confidence in the
        correct functioning of the new public key before RPs are relying on
        that public key in their production RPKI operations. If a successor
        public key is not working correctly, a TA may remove that public key
        from the current TAK object.</t>
        <t indent="0" pn="section-9.1-2">A TA that removes a successor public key from a TAK object
        <bcp14>SHOULD NOT</bcp14> add the same successor public 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 public 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 public key
        was not listed in it.  If the unchanged successor public key is added
        back into the TA, such an RP will transition to using the new TA
        public key more quickly than other RPs, which may make debugging and
        similar processes more complicated. A simple way of addressing this
        problem in a situation where the TA operator doesn't want to reissue
        the SubjectPublicKeyInfo content for the successor public key that was
        withdrawn is to update the URL set for the successor public key.
        Since RPs must take that URL set into account for the purposes of
        initiating and cancelling acceptance timers, an RP that observes a
        change to that URL set will cancel any existing acceptance timer it
        has and initiate a new acceptance timer in its place.</t>
      </section>
    </section>
    <section anchor="security-considerations" numbered="true" toc="include" removeInRFC="false" pn="section-10">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <section anchor="previous-keys" numbered="true" toc="include" removeInRFC="false" pn="section-10.1">
        <name slugifiedName="name-previous-keys">Previous Keys</name>
        <t indent="0" pn="section-10.1-1">A TA needs to consider the length of time for which it will
        maintain previously current key pairs and their associated
        repositories.  An RP that is seeded with old TAL data will run
        for 30 days using the previous public key before migrating to
        the next public key due to the acceptance timer requirements,
        and this 30-day delay applies to each new key pair that has
        been issued since the old TAL data was initially published.
        In these instances, it may be better for the TA to send error
        responses when receiving requests for the old publication
        URLs so that the RP reports an error to its operator and the
        operator seeds it with up-to-date TAL data immediately.</t>
        <t indent="0" pn="section-10.1-2">Once a TA has decided not to maintain a previously current
        key pair and its associated repository, the TA <bcp14>SHOULD</bcp14> destroy
        the associated private key.  The TA <bcp14>SHOULD</bcp14> 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 private key and its
        associated publication points in order to send
        invalid or incorrect data to RPs seeded with the TAL data for
        the corresponding public key.</t>
      </section>
      <section anchor="ta-compromise" numbered="true" toc="include" removeInRFC="false" pn="section-10.2">
        <name slugifiedName="name-ta-compromise">TA Compromise</name>
        <t indent="0" pn="section-10.2-1">TAK objects do not offer protection against compromise of
          the current TA private key or the successor TA private key.
          TA private key
          compromise in general is out of scope for this document.</t>
        <t indent="0" pn="section-10.2-2"> While it is possible for a malicious actor to use TAK objects to cause RPs
to transition from the current TA public key to a successor TA public key,
such action is predicated on the malicious actor having compromised the
current TA private key in the first place.  Since a malicious actor who has
compromised the current TA private key has complete control over the TA
anyway, TAK objects do not alter the security considerations relevant to this
scenario.</t>
      </section>
      <section anchor="sec-alternate-transition-models" numbered="true" toc="include" removeInRFC="false" pn="section-10.3">
        <name slugifiedName="name-alternate-transition-models-2">Alternate Transition Models</name>
        <t indent="0" pn="section-10.3-1"><xref target="alternate-transition-models" format="default" sectionFormat="of" derivedContent="Section 8.2"/> describes
        other ways in which a TA may transition from one key pair to
        another.  Transition by way of an in-band process reliant on
        TAK objects is not mandatory for TAs or RPs, though the fact
        that the TAK objects are verifiable by way of the
        currently trusted TA public key is a benefit compared with existing
        out-of-band mechanisms for TA public key distribution.</t>
        <t indent="0" pn="section-10.3-2">There will be a period of time where both the current
        public key
        and the successor public key are available for use, and RPs that are
        initialised at different points of the transition process or
        from different out-of-band sources may be using either the
        current public key or the successor public key. TAs are required to ensure, so far as is possible, that RPKI
   validation outcomes are the same regardless of which of the two
   keys is used.</t>
      </section>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="include" removeInRFC="false" pn="section-11">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <section anchor="content-type" numbered="true" toc="include" removeInRFC="false" pn="section-11.1">
        <name slugifiedName="name-content-type">Content Type</name>
        <t indent="0" pn="section-11.1-1">IANA has registered an OID 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>
        <table anchor="tab-1" align="center" pn="table-1">
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Decimal</th>
              <th align="left" colspan="1" rowspan="1">Description</th>
              <th align="left" colspan="1" rowspan="1">References</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">50</td>
              <td align="left" colspan="1" rowspan="1">id-ct-signedTAL</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="content_type" format="default" sectionFormat="of" derivedContent="Section 2.1"/></td>
            </tr>
          </tbody>
        </table>
        <dl spacing="normal" indent="3" newline="false" pn="section-11.1-3">
          <dt pn="section-11.1-3.1">Description:</dt>
          <dd pn="section-11.1-3.2">id-ct-signedTAL</dd>
          <dt pn="section-11.1-3.3">OID:</dt>
          <dd pn="section-11.1-3.4">1.2.840.113549.1.9.16.1.50</dd>
          <dt pn="section-11.1-3.5">Specification:</dt>
          <dd pn="section-11.1-3.6">
            <xref target="content_type" format="default" sectionFormat="of" derivedContent="Section 2.1"/></dd>
        </dl>
      </section>
      <section anchor="signed-object" numbered="true" toc="include" removeInRFC="false" pn="section-11.2">
        <name slugifiedName="name-signed-object">Signed Object</name>
        <t indent="0" pn="section-11.2-1">IANA has added the following to the "RPKI Signed Objects" registry:
</t>
        <table anchor="tab-2" align="center" pn="table-2">
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Name</th>
              <th align="left" colspan="1" rowspan="1">OID</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">Trust Anchor Key</td>
              <td align="left" colspan="1" rowspan="1">1.2.840.113549.1.9.16.1.50</td>
              <td align="left" colspan="1" rowspan="1">
                <xref target="content_type" format="default" sectionFormat="of" derivedContent="Section 2.1"/></td>
            </tr>
          </tbody>
        </table>
        <t indent="0" pn="section-11.2-3">IANA has also added the following note to the "RPKI
        Signed Objects" registry:</t>
        <blockquote pn="section-11.2-4">

            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="include" removeInRFC="false" pn="section-11.3">
        <name slugifiedName="name-file-extension">File Extension</name>
        <t indent="0" pn="section-11.3-1">IANA has added the following item for the Signed TAL file extension to the "RPKI Repository Name
Schemes" registry created by <xref target="RFC6481" format="default" sectionFormat="of" derivedContent="RFC6481"/>:
</t>
        <table anchor="tab-3" align="center" pn="table-3">
          <name/>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Filename Extension</th>
              <th align="left" colspan="1" rowspan="1">RPKI Object</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">.tak</td>
              <td align="left" colspan="1" rowspan="1">Trust Anchor Key</td>
              <td align="left" colspan="1" rowspan="1">RFC 9691</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="module-identifier" numbered="true" toc="include" removeInRFC="false" pn="section-11.4">
        <name slugifiedName="name-module-identifier">Module Identifier</name>
        <t indent="0" pn="section-11.4-1">IANA has registered an OID 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>
        <table anchor="tab-4" align="center" pn="table-4">
          <name/>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Decimal</th>
              <th align="left" colspan="1" rowspan="1">Description</th>
              <th align="left" colspan="1" rowspan="1">References</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">74</td>
              <td align="left" colspan="1" rowspan="1">RPKISignedTrustAnchorList-2021</td>
              <td align="left" colspan="1" rowspan="1">RFC 9691</td>
            </tr>
          </tbody>
        </table>
        <dl spacing="normal" indent="3" newline="false" pn="section-11.4-3">
          <dt pn="section-11.4-3.1">Description:</dt>
          <dd pn="section-11.4-3.2">RPKISignedTrustAnchorList-2021</dd>
          <dt pn="section-11.4-3.3">OID:</dt>
          <dd pn="section-11.4-3.4">1.2.840.113549.1.9.16.0.74</dd>
          <dt pn="section-11.4-3.5">Specification:</dt>
          <dd pn="section-11.4-3.6">RFC 9691</dd>
        </dl>
      </section>
      <section anchor="media-type" numbered="true" toc="include" removeInRFC="false" pn="section-11.5">
        <name slugifiedName="name-registration-of-media-type-">Registration of Media Type application/rpki-signed-tal</name>
        <t indent="0" pn="section-11.5-1">IANA has registered the media type "application/rpki-signed-tal" in the "Media Types" registry as follows:</t>
        <dl indent="3" newline="false" spacing="normal" pn="section-11.5-2">
          <dt pn="section-11.5-2.1">Type name:</dt>
          <dd pn="section-11.5-2.2">application</dd>
          <dt pn="section-11.5-2.3">Subtype name:</dt>
          <dd pn="section-11.5-2.4">rpki-signed-tal</dd>
          <dt pn="section-11.5-2.5">Required parameters:</dt>
          <dd pn="section-11.5-2.6">N/A</dd>
          <dt pn="section-11.5-2.7">Optional parameters:</dt>
          <dd pn="section-11.5-2.8">N/A</dd>
          <dt pn="section-11.5-2.9">Encoding considerations:</dt>
          <dd pn="section-11.5-2.10">binary</dd>
          <dt pn="section-11.5-2.11">Security considerations:</dt>
          <dd pn="section-11.5-2.12">Carries an RPKI Signed TAL.  This media type contains no active content.  See the Security Considerations section of RFC 9691 for further information.</dd>
          <dt pn="section-11.5-2.13">Interoperability considerations:</dt>
          <dd pn="section-11.5-2.14">N/A</dd>
          <dt pn="section-11.5-2.15">Published specification:</dt>
          <dd pn="section-11.5-2.16">RFC 9691</dd>
          <dt pn="section-11.5-2.17">Applications that use this media type:</dt>
          <dd pn="section-11.5-2.18">RPKI operators</dd>
          <dt pn="section-11.5-2.19">Fragment identifier considerations:</dt>
          <dd pn="section-11.5-2.20">N/A</dd>
          <dt pn="section-11.5-2.21">Additional information:</dt>
          <dd pn="section-11.5-2.22">
            <t indent="0" pn="section-11.5-2.22.1"><br/></t>
            <dl spacing="compact" indent="3" newline="false" pn="section-11.5-2.22.2">
              <dt pn="section-11.5-2.22.2.1">Content:</dt>
              <dd pn="section-11.5-2.22.2.2">This media type is for a signed object, as defined in RFC 6488, which contains trust anchor key material as defined in RFC 9691.</dd>
              <dt pn="section-11.5-2.22.2.3">Magic number(s):</dt>
              <dd pn="section-11.5-2.22.2.4">N/A</dd>
              <dt pn="section-11.5-2.22.2.5">File extension(s):</dt>
              <dd pn="section-11.5-2.22.2.6">.tak</dd>
              <dt pn="section-11.5-2.22.2.7">Macintosh file type code(s):</dt>
              <dd pn="section-11.5-2.22.2.8">N/A</dd>
            </dl>
          </dd>
          <dt pn="section-11.5-2.23">Person &amp; email address to contact for further information:</dt>
          <dd pn="section-11.5-2.24">iesg@ietf.org</dd>
          <dt pn="section-11.5-2.25">Intended usage:</dt>
          <dd pn="section-11.5-2.26">COMMON</dd>
          <dt pn="section-11.5-2.27">Restrictions on usage:</dt>
          <dd pn="section-11.5-2.28">N/A</dd>
          <dt pn="section-11.5-2.29">Author:</dt>
          <dd pn="section-11.5-2.30">sidrops WG</dd>
          <dt pn="section-11.5-2.31">Change controller:</dt>
          <dd pn="section-11.5-2.32">IESG</dd>
        </dl>
      </section>
    </section>
  </middle>
  <back>
    <references pn="section-12">
      <name slugifiedName="name-references">References</name>
      <references pn="section-12.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="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 indent="0">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="RFC3629" target="https://www.rfc-editor.org/info/rfc3629" quoteTitle="true" derivedAnchor="RFC3629">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
            <date month="November" year="2003"/>
            <abstract>
              <t indent="0">ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
          <seriesInfo name="DOI" value="10.17487/RFC3629"/>
        </reference>
        <reference anchor="RFC3779" target="https://www.rfc-editor.org/info/rfc3779" quoteTitle="true" derivedAnchor="RFC3779">
          <front>
            <title>X.509 Extensions for IP Addresses and AS Identifiers</title>
            <author fullname="C. Lynn" initials="C." surname="Lynn"/>
            <author fullname="S. Kent" initials="S." surname="Kent"/>
            <author fullname="K. Seo" initials="K." surname="Seo"/>
            <date month="June" year="2004"/>
            <abstract>
              <t indent="0">This document defines two X.509 v3 certificate extensions. The first binds a list of IP address blocks, or prefixes, to the subject of a certificate. The second binds a list of autonomous system identifiers to the subject of a certificate. These extensions may be used to convey the authorization of the subject to use the IP addresses and autonomous system identifiers contained in the extensions. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3779"/>
          <seriesInfo name="DOI" value="10.17487/RFC3779"/>
        </reference>
        <reference anchor="RFC5198" target="https://www.rfc-editor.org/info/rfc5198" quoteTitle="true" derivedAnchor="RFC5198">
          <front>
            <title>Unicode Format for Network Interchange</title>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="M. Padlipsky" initials="M." surname="Padlipsky"/>
            <date month="March" year="2008"/>
            <abstract>
              <t indent="0">The Internet today is in need of a standardized form for the transmission of internationalized "text" information, paralleling the specifications for the use of ASCII that date from the early days of the ARPANET. This document specifies that format, using UTF-8 with normalization and specific line-ending sequences. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5198"/>
          <seriesInfo name="DOI" value="10.17487/RFC5198"/>
        </reference>
        <reference anchor="RFC5280" target="https://www.rfc-editor.org/info/rfc5280" quoteTitle="true" derivedAnchor="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 indent="0">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="RFC5781" target="https://www.rfc-editor.org/info/rfc5781" quoteTitle="true" derivedAnchor="RFC5781">
          <front>
            <title>The rsync URI Scheme</title>
            <author fullname="S. Weiler" initials="S." surname="Weiler"/>
            <author fullname="D. Ward" initials="D." surname="Ward"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="February" year="2010"/>
            <abstract>
              <t indent="0">This document specifies the rsync Uniform Resource Identifier (URI) scheme. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5781"/>
          <seriesInfo name="DOI" value="10.17487/RFC5781"/>
        </reference>
        <reference anchor="RFC6481" target="https://www.rfc-editor.org/info/rfc6481" quoteTitle="true" derivedAnchor="RFC6481">
          <front>
            <title>A Profile for Resource Certificate Repository Structure</title>
            <author fullname="G. Huston" initials="G." surname="Huston"/>
            <author fullname="R. Loomans" initials="R." surname="Loomans"/>
            <author fullname="G. Michaelson" initials="G." surname="Michaelson"/>
            <date month="February" year="2012"/>
            <abstract>
              <t indent="0">This document defines a profile for the structure of the Resource Public Key Infrastructure (RPKI) distributed repository. Each individual repository publication point is a directory that contains files that correspond to X.509/PKIX Resource Certificates, Certificate Revocation Lists and signed objects. This profile defines the object (file) naming scheme, the contents of repository publication points (directories), and a suggested internal structure of a local repository cache that is intended to facilitate synchronization across a distributed collection of repository publication points and to facilitate certification path construction. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6481"/>
          <seriesInfo name="DOI" value="10.17487/RFC6481"/>
        </reference>
        <reference anchor="RFC6487" target="https://www.rfc-editor.org/info/rfc6487" quoteTitle="true" derivedAnchor="RFC6487">
          <front>
            <title>A Profile for X.509 PKIX Resource Certificates</title>
            <author fullname="G. Huston" initials="G." surname="Huston"/>
            <author fullname="G. Michaelson" initials="G." surname="Michaelson"/>
            <author fullname="R. Loomans" initials="R." surname="Loomans"/>
            <date month="February" year="2012"/>
            <abstract>
              <t indent="0">This document defines a standard profile for X.509 certificates for the purpose of supporting validation of assertions of "right-of-use" of Internet Number Resources (INRs). The certificates issued under this profile are used to convey the issuer's authorization of the subject to be regarded as the current holder of a "right-of-use" of the INRs that are described in the certificate. This document contains the normative specification of Certificate and Certificate Revocation List (CRL) syntax in the Resource Public Key Infrastructure (RPKI). This document also specifies profiles for the format of certificate requests and specifies the Relying Party RPKI certificate path validation procedure. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6487"/>
          <seriesInfo name="DOI" value="10.17487/RFC6487"/>
        </reference>
        <reference anchor="RFC6488" target="https://www.rfc-editor.org/info/rfc6488" quoteTitle="true" derivedAnchor="RFC6488">
          <front>
            <title>Signed Object Template for the Resource Public Key Infrastructure (RPKI)</title>
            <author fullname="M. Lepinski" initials="M." surname="Lepinski"/>
            <author fullname="A. Chi" initials="A." surname="Chi"/>
            <author fullname="S. Kent" initials="S." surname="Kent"/>
            <date month="February" year="2012"/>
            <abstract>
              <t indent="0">This document defines a generic profile for signed objects used in the Resource Public Key Infrastructure (RPKI). These RPKI signed objects make use of Cryptographic Message Syntax (CMS) as a standard encapsulation format. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6488"/>
          <seriesInfo name="DOI" value="10.17487/RFC6488"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="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 indent="0">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="RFC8181" target="https://www.rfc-editor.org/info/rfc8181" quoteTitle="true" derivedAnchor="RFC8181">
          <front>
            <title>A Publication Protocol for the Resource Public Key Infrastructure (RPKI)</title>
            <author fullname="S. Weiler" initials="S." surname="Weiler"/>
            <author fullname="A. Sonalker" initials="A." surname="Sonalker"/>
            <author fullname="R. Austein" initials="R." surname="Austein"/>
            <date month="July" year="2017"/>
            <abstract>
              <t indent="0">This document defines a protocol for publishing Resource Public Key Infrastructure (RPKI) objects. Even though the RPKI will have many participants issuing certificates and creating other objects, it is operationally useful to consolidate the publication of those objects. Even in cases where a certificate issuer runs its own publication repository, it can be useful to run the certificate engine itself on a different machine from the publication repository. This document defines a protocol which addresses these needs.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8181"/>
          <seriesInfo name="DOI" value="10.17487/RFC8181"/>
        </reference>
        <reference anchor="RFC8630" target="https://www.rfc-editor.org/info/rfc8630" quoteTitle="true" derivedAnchor="RFC8630">
          <front>
            <title>Resource Public Key Infrastructure (RPKI) Trust Anchor Locator</title>
            <author fullname="G. Huston" initials="G." surname="Huston"/>
            <author fullname="S. Weiler" initials="S." surname="Weiler"/>
            <author fullname="G. Michaelson" initials="G." surname="Michaelson"/>
            <author fullname="S. Kent" initials="S." surname="Kent"/>
            <author fullname="T. Bruijnzeels" initials="T." surname="Bruijnzeels"/>
            <date month="August" year="2019"/>
            <abstract>
              <t indent="0">This document defines a Trust Anchor Locator (TAL) for the Resource Public Key Infrastructure (RPKI). The TAL allows Relying Parties in the RPKI to download the current Trust Anchor (TA) Certification Authority (CA) certificate from one or more locations and verify that the key of this self-signed certificate matches the key on the TAL. Thus, Relying Parties can be configured with TA keys but can allow these TAs to change the content of their CA certificate. In particular, it allows TAs to change the set of IP Address Delegations and/or Autonomous System Identifier Delegations included in the extension(s) (RFC 3779) of their certificate.</t>
              <t indent="0">This document obsoletes the previous definition of the TAL as provided in RFC 7730 by adding support for Uniform Resource Identifiers (URIs) (RFC 3986) that use HTTP over TLS (HTTPS) (RFC 7230) as the scheme.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8630"/>
          <seriesInfo name="DOI" value="10.17487/RFC8630"/>
        </reference>
        <reference anchor="RFC9110" target="https://www.rfc-editor.org/info/rfc9110" quoteTitle="true" derivedAnchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t indent="0">The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t indent="0">This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC9286" target="https://www.rfc-editor.org/info/rfc9286" quoteTitle="true" derivedAnchor="RFC9286">
          <front>
            <title>Manifests for the Resource Public Key Infrastructure (RPKI)</title>
            <author fullname="R. Austein" initials="R." surname="Austein"/>
            <author fullname="G. Huston" initials="G." surname="Huston"/>
            <author fullname="S. Kent" initials="S." surname="Kent"/>
            <author fullname="M. Lepinski" initials="M." surname="Lepinski"/>
            <date month="June" year="2022"/>
            <abstract>
              <t indent="0">This document defines a "manifest" for use in the Resource Public Key Infrastructure (RPKI). A manifest is a signed object (file) that contains a listing of all the signed objects (files) in the repository publication point (directory) associated with an authority responsible for publishing in the repository. For each certificate, Certificate Revocation List (CRL), or other type of signed objects issued by the authority that are published at this repository publication point, the manifest contains both the name of the file containing the object and a hash of the file content. Manifests are intended to enable a relying party (RP) to detect certain forms of attacks against a repository. Specifically, if an RP checks a manifest's contents against the signed objects retrieved from a repository publication point, then the RP can detect replay attacks, and unauthorized in-flight modification or deletion of signed objects. This document obsoletes RFC 6486.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9286"/>
          <seriesInfo name="DOI" value="10.17487/RFC9286"/>
        </reference>
        <reference anchor="X.690" target="https://www.itu.int/rec/T-REC-X.690-202102-I/en" quoteTitle="true" derivedAnchor="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 showOnFrontPage="true">ITU-T</organization>
            </author>
            <date month="February" year="2021"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.690"/>
          <seriesInfo name="ISO/IEC" value="8825-1:2021"/>
        </reference>
      </references>
      <references pn="section-12.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="RFC5652" target="https://www.rfc-editor.org/info/rfc5652" quoteTitle="true" derivedAnchor="RFC5652">
          <front>
            <title>Cryptographic Message Syntax (CMS)</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="September" year="2009"/>
            <abstract>
              <t indent="0">This document describes the Cryptographic Message Syntax (CMS). This syntax is used to digitally sign, digest, authenticate, or encrypt arbitrary message content. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="70"/>
          <seriesInfo name="RFC" value="5652"/>
          <seriesInfo name="DOI" value="10.17487/RFC5652"/>
        </reference>
        <reference anchor="RFC5911" target="https://www.rfc-editor.org/info/rfc5911" quoteTitle="true" derivedAnchor="RFC5911">
          <front>
            <title>New ASN.1 Modules for Cryptographic Message Syntax (CMS) and S/MIME</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="June" year="2010"/>
            <abstract>
              <t indent="0">The Cryptographic Message Syntax (CMS) format, and many associated formats, are expressed using ASN.1. The current ASN.1 modules conform to the 1988 version of ASN.1. This document updates those ASN.1 modules to conform to the 2002 version of ASN.1. There are no bits-on-the-wire changes to any of the formats; this is simply a change to the syntax. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5911"/>
          <seriesInfo name="DOI" value="10.17487/RFC5911"/>
        </reference>
        <reference anchor="RFC5912" target="https://www.rfc-editor.org/info/rfc5912" quoteTitle="true" derivedAnchor="RFC5912">
          <front>
            <title>New ASN.1 Modules for the Public Key Infrastructure Using X.509 (PKIX)</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="June" year="2010"/>
            <abstract>
              <t indent="0">The Public Key Infrastructure using X.509 (PKIX) certificate format, and many associated formats, are expressed using ASN.1. The current ASN.1 modules conform to the 1988 version of ASN.1. This document updates those ASN.1 modules to conform to the 2002 version of ASN.1. There are no bits-on-the-wire changes to any of the formats; this is simply a change to the syntax. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5912"/>
          <seriesInfo name="DOI" value="10.17487/RFC5912"/>
        </reference>
      </references>
    </references>
    <section anchor="asn1-module" numbered="true" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-asn1-module">ASN.1 Module</name>
      <t indent="0" pn="section-appendix.a-1">This appendix includes the ASN.1 module for the TAK object.</t>
      <sourcecode name="" type="asn.1" markers="true" pn="section-appendix.a-2">
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>
    <section anchor="acknowledgments" numbered="false" toc="include" removeInRFC="false" pn="section-appendix.b">
      <name slugifiedName="name-acknowledgments">Acknowledgments</name>
      <t indent="0" pn="section-appendix.b-1">  
      The authors wish to thank <contact fullname="Martin Hoffmann"/> for a
      thorough review of the document, <contact fullname="Russ Housley"/> for
      multiple reviews of the ASN.1 definitions and for providing a new module
      for the TAK object, <contact fullname="Job Snijders"/> for the extensive
      suggestions around TAK object structure/distribution and rpki-client
      implementation work, and <contact fullname="Ties de Kock"/> for
      text/suggestions around TAK/TAL distribution and general security
      considerations.
      </t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.c">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author initials="C." surname="Martinez" fullname="Carlos Martinez">
        <organization showOnFrontPage="true">LACNIC</organization>
        <address>
          <postal>
            <street>Rambla Mexico 6125</street>
            <city>Montevideo</city>
            <code>11400</code>
            <country>Uruguay</country>
          </postal>
          <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" showOnFrontPage="true">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>
          <email>ggm@apnic.net</email>
        </address>
      </author>
      <author initials="T." surname="Harrison" fullname="Tom Harrison">
        <organization abbrev="APNIC" showOnFrontPage="true">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>
          <email>tomh@apnic.net</email>
        </address>
      </author>
      <author initials="T." surname="Bruijnzeels" fullname="Tim Bruijnzeels">
        <organization showOnFrontPage="true">RIPE NCC</organization>
        <address>
          <postal>
            <postalLine>Stationsplein 11</postalLine>
            <postalLine>Amsterdam</postalLine>
            <postalLine>The Netherlands</postalLine>
          </postal>
          <email>tim@ripe.net</email>
          <uri>https://www.ripe.net/</uri>
        </address>
      </author>
      <author initials="R." surname="Austein" fullname="Rob Austein">
        <organization showOnFrontPage="true">Dragon Research Labs</organization>
        <address>
          <email>sra@hactrn.net</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
