<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<?rfc sortrefs="yes"?>
<?rfc subcompact="no"?>
<?rfc symrefs="yes"?>
<?rfc toc="yes"?>
<?rfc tocdepth="3"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" docName="draft-ietf-sidrops-rpki-ccr-05" ipr="trust200902" xml:lang="en" sortRefs="true" submissionType="IETF" consensus="true" version="3">
  <front>
    <title abbrev="RPKI Canonical Cache Representation">
      A Profile for Resource Public Key Infrastructure (RPKI) Canonical Cache Representation (CCR)
    </title>
    <author fullname="Job Snijders" initials="J." surname="Snijders">
      <organization abbrev="BSD">BSD Software Development</organization>
      <address>
        <postal>
          <street/>
          <code/>
          <city>Amsterdam</city>
          <country>Netherlands</country>
        </postal>
        <email>job@bsd.nl</email>
        <uri>https://www.bsd.nl</uri>
      </address>
    </author>
    <author fullname="Bart Bakker" initials="B." surname="Bakker">
      <organization>RIPE NCC</organization>
      <address>
        <postal>
          <country>Netherlands</country>
        </postal>
        <email>bbakker@ripe.net</email>
      </address>
    </author>
    <author fullname="Tim Bruijnzeels" initials="T." surname="Bruijnzeels">
      <organization>RIPE NCC</organization>
      <address>
        <postal>
          <country>Netherlands</country>
        </postal>
        <email>tbruijnzeels@ripe.net</email>
      </address>
    </author>
    <author fullname="Theo Buehler" initials="T." surname="Buehler">
      <organization>OpenBSD</organization>
      <address>
        <postal>
          <country>Switzerland</country>
        </postal>
        <email>tb@openbsd.org</email>
      </address>
    </author>
    <date/>
    <area>ops</area>
    <workgroup>SIDROPS</workgroup>
    <keyword>security</keyword>
    <keyword>cryptography</keyword>
    <keyword>X.509</keyword>
    <abstract>
      <t>
        This document specifies a Canonical Cache Representation (CCR) content type for use with the Resource Public Key Infrastructure (RPKI).
        CCR is a DER-encoded data interchange format which can be used to represent various aspects of the state of a validated RPKI cache at a particular point in time.
        The CCR profile is a compact and versatile format well-suited for applications such as audit trails, analytics pipelines, and validated payload dissemination.
      </t>
    </abstract>
  </front>
  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>
        Resource Public Key Infrastructure (RPKI) operators often wish to analyze Certification Authority (CA) and Relying Party (RP) behavior by inspecting validation outcomes.
        To this end, Canonical Cache Representation (CCR) was developed to capture and archive RPKI validation states in a standardized data representation.
      </t>
      <t>
        CCR offers a compact and versatile format well-suited for applications such as audit trails, analytics pipelines, and validated payload dissemination.
        A validated cache contains all RPKI objects that the RP has verified to be valid according to the rules for validation (see <xref target="RFC6487"/>, <xref target="RFC6488"/>, <xref target="RFC9286"/>).
        CCR is a data interchange format using Distinguished Encoding Rules (DER, <xref target="X.690"/>) which can be used to represent various aspects of the state of a validated cache at a particular point in time in a reproducible manner.
      </t>
      <t>
        This document formally specifies the CCR content type for use with the RPKI and provides test vectors.
      </t>
      <section>
        <name>History</name>
        <t>
          The format was initially designed to support comparative analysis of multiple RP instances using a variety of RPKI transport protocols (<xref target="RFC5781"/>, <xref target="RFC8182"/>, and <xref target="I-D.ietf-sidrops-rpki-erik-protocol"/>).
        </t>
      </section>
      <section anchor="requirements">
        <name>Requirements Language</name>
        <t>
          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&nbsp;14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.
        </t>
      </section>
    </section>
    <section>
      <name>The Canonical Cache Representation content type</name>
      <t>
        The content of a CCR file is an instance of <tt>ContentInfo</tt>.
      </t>
      <t>
        The <tt>contentType</tt> for a CCR is defined as <tt>id-ct-rpkiCanonicalCacheRepresentation</tt>, with Object Identifier (OID) <tt>1.2.840.113549.1.9.16.1.54</tt>.
      </t>
      <t>
        The <tt>content</tt> field contains an instance of <tt>RpkiCanonicalCacheRepresentation</tt>.
      </t>
    </section>
    <section anchor="content">
      <name>The Canonical Cache Representation content</name>
      <t>
        The content of a Canonical Cache Representation is formally defined as follows:
      </t>
      <sourcecode anchor="ASN.1" type="asn.1" originalSrc="CCR-2025.asn">RpkiCanonicalCacheRepresentation-2025
  { iso(1) member-body(2) us(840) rsadsi(113549)
    pkcs(1) pkcs9(9) smime(16) mod(0) id-mod-rpkiCCR-2025(TBD) }

DEFINITIONS EXPLICIT TAGS ::=
BEGIN

IMPORTS
  CONTENT-TYPE, Digest, DigestAlgorithmIdentifier,
    SubjectKeyIdentifier
  FROM CryptographicMessageSyntax-2010 -- in [RFC6268]
    { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
      pkcs-9(9) smime(16) modules(0) id-mod-cms-2009(58) }

  ASID, ROAIPAddressFamily
  FROM RPKI-ROA-2023 -- in [RFC9582]
    { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
      pkcs9(9) smime(16) mod(0) id-mod-rpkiROA-2023(75) }

  CAS, PAS
  FROM RPKI-ASPA-2023 -- in [draft-ietf-sidrops-aspa-profile]
    { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
     pkcs-9(9) smime(16) modules(0) id-mod-rpki-aspa-2023(TBD) }

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

  AccessDescription, KeyIdentifier
  FROM PKIX1Implicit-2009
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-pkix1-implicit-02(59) }
  ;

ContentInfo ::= SEQUENCE {
  contentType      CONTENT-TYPE.&amp;id({ContentSet}),
  content      [0] EXPLICIT
                   CONTENT-TYPE.&amp;Type({ContentSet}{@contentType}) }

ContentSet CONTENT-TYPE ::= {
  ct-rpkiCanonicalCacheRepresentation, ... }

ct-rpkiCanonicalCacheRepresentation CONTENT-TYPE ::=
  { TYPE RpkiCanonicalCacheRepresentation
    IDENTIFIED BY id-ct-rpkiCanonicalCacheRepresentation }

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

RpkiCanonicalCacheRepresentation ::= SEQUENCE {
  version     [0] INTEGER DEFAULT 0,
  hashAlg         DigestAlgorithmIdentifier,
  producedAt      GeneralizedTime,
  mfts        [1] ManifestState OPTIONAL,
  vrps        [2] ROAPayloadState OPTIONAL,
  vaps        [3] ASPAPayloadState OPTIONAL,
  tas         [4] TrustAnchorState OPTIONAL,
  rks         [5] RouterKeyState OPTIONAL,
  ... }
  -- at least one of mfts, vrps, vaps, tas, or rks MUST be present
  ( WITH COMPONENTS { ..., mfts PRESENT } |
    WITH COMPONENTS { ..., vrps PRESENT } |
    WITH COMPONENTS { ..., vaps PRESENT } |
    WITH COMPONENTS { ..., tas PRESENT } |
    WITH COMPONENTS { ..., rks PRESENT } )

ManifestState ::= SEQUENCE {
  mis               SEQUENCE OF ManifestInstance,
  mostRecentUpdate  GeneralizedTime,
  hash              Digest }

ManifestInstance ::= SEQUENCE {
  hash              Digest,
  size              INTEGER (1000..MAX),
  aki               KeyIdentifier,
  manifestNumber    INTEGER (0..MAX),
  thisUpdate        GeneralizedTime,
  locations         SEQUENCE (SIZE(1..MAX)) OF AccessDescription,
  subordinates      SEQUENCE (SIZE(1..MAX)) OF SubjectKeyIdentifier
                      OPTIONAL }

ROAPayloadState ::= SEQUENCE {
  rps               SEQUENCE OF ROAPayloadSet,
  hash              Digest }

ROAPayloadSet ::= SEQUENCE {
  asID              ASID,
  ipAddrBlocks      SEQUENCE (SIZE(1..2)) OF ROAIPAddressFamily }

ASPAPayloadState ::= SEQUENCE {
  aps               SEQUENCE OF ASPAPayloadSet,
  hash              Digest }

ASPAPayloadSet ::= SEQUENCE {
  customerASID      CAS,
  providers         SEQUENCE (SIZE(1..MAX)) OF PAS }

TrustAnchorState ::= SEQUENCE {
  skis              SEQUENCE (SIZE(1..MAX)) OF SubjectKeyIdentifier,
  hash              Digest }

RouterKeyState ::= SEQUENCE {
  rksets            SEQUENCE OF RouterKeySet,
  hash              Digest }

RouterKeySet ::= SEQUENCE {
  asID              ASID,
  routerKeys        SEQUENCE (SIZE(1..MAX)) OF RouterKey }

RouterKey ::= SEQUENCE {
  ski               SubjectKeyIdentifier,
  spki              SubjectPublicKeyInfo }

END
</sourcecode>
      <section>
        <name>version</name>
        <t>
          The <tt>version</tt> field contains the format version for the <tt>RpkiCanonicalCacheRepresentation</tt> structure, in this version of the specification it <bcp14>MUST</bcp14> be 0.
        </t>
      </section>
      <section>
        <name>hashAlg</name>
        <t>
          The <tt>hashAlg</tt> field specifies the algorithm used to construct the message digests.
          This profile uses SHA-256 <xref target="SHS"/>, therefore the OID <bcp14>MUST</bcp14> be <tt>2.16.840.1.101.3.4.2.1</tt> and the parameters field <bcp14>MUST</bcp14> be absent (<xref target="RFC5754" section="2"/>).
        </t>
      </section>
      <section anchor="producedAt">
        <name>producedAt</name>
        <t>
          The <tt>producedAt</tt> field contains a <tt>GeneralizedTime</tt> and indicates the moment in time the CCR was generated.
          For the purposes of this section, CCR generation begins once the RP's fetching and validation operations are completed.
        </t>
      </section>
      <section>
        <name>State aspect fields</name>
        <t>
          Each CCR contains one or more fields representing particular aspects of the cache's state.
          Implementers should note the ellipsis extension marker in the <tt>RpkiCanonicalCacheRepresentation</tt> ASN.1 notation and anticipate future changes as new signed object types are standardized.
        </t>
        <t>
          Each state aspect generally consists of a sequence of details extracted from RPKI Objects of a specific type, along with a digest computed by hashing the aforementioned DER-encoded sequence, and optionally including some metadata.
        </t>
        <section>
          <name>ManifestState</name>
          <t>
            An instance of <tt>ManifestState</tt> represents the set of valid, current Manifests (<xref target="RFC9286"/>) in the cache.
            It contains three fields: <tt>mis</tt>, <tt>mostRecentUpdate</tt>, and <tt>hash</tt>.
          </t>
          <section>
            <name>ManifestInstance</name>
            <t>
              The <tt>mis</tt> field contains a SEQUENCE of <tt>ManifestInstance</tt>.
              There is one <tt>ManifestInstance</tt> for each current manifest.
              A manifest is nominally current until the time specified in <tt>nextUpdate</tt>, or until a manifest is issued with a greater <tt>manifestNumber</tt> (see <xref target="RFC9286" section="4.2.1"/>), or until a new manifest is issued with a new filename per the process described in section 2 of <xref target="RFC9981"/>.
            </t>
            <t>
              A <tt>ManifestInstance</tt> is a structure consisting of the following fields:
            </t>
            <dl>
              <dt><tt>hash</tt></dt>
              <dd>the hash of the represented DER-encoded manifest object</dd>
              <dt><tt>size</tt></dt>
              <dd>the size of the represented DER-encoded manifest object</dd>
              <dt><tt>aki</tt></dt>
              <dd>the manifest issuer's key identifier</dd>
              <dt><tt>manifestNumber</tt></dt>
              <dd>the manifest number contained within the manifest's eContent field</dd>
              <dt><tt>thisUpdate</tt></dt>
              <dd>the thisUpdate contained within the manifest's eContent field</dd>
              <dt><tt>locations</tt></dt>
              <dd>a sequence of <tt>AccessDescription</tt> instances from the manifest's End-Entity certificate's Subject Information Access extension</dd>
              <dt><tt>subordinates</tt></dt>
              <dd>a optional non-empty SEQUENCE of <tt>SubjectKeyIdentifier</tt></dd>
            </dl>
            <t>
              The <tt>subordinates</tt> field represents the keypairs associated with the set of non-revoked, non-expired, validly signed, certification authority (CA) resource certificates subordinate to the manifest issuer.
              Each <tt>SubjectKeyIdentifier</tt> is the 160-bit SHA-1 hash of the value of the DER-encoded ASN.1 bit string of the resource certificate's Subject Public Key, as described in <xref target="RFC6487" section="4.8.2"/>.
              The sequence elements of the <tt>subordinates</tt> field <bcp14>MUST</bcp14> be sorted in ascending order by interpreting each <tt>SubjectKeyIdentifier</tt> value as an unsigned 160-bit integer and <bcp14>MUST</bcp14> be unique with respect to each other.
            </t>
            <t>
              The sequence elements in the <tt>mis</tt> field <bcp14>MUST</bcp14> be sorted in ascending order by <tt>hash</tt> value contained in each instance of <tt>ManifestInstance</tt> and <bcp14>MUST</bcp14> be unique with respect to the other instances of <tt>ManifestInstance</tt>.
            </t>
          </section>
          <section anchor="mostRecentUpdate">
            <name>mostRecentUpdate</name>
            <t>
              The <tt>mostRecentUpdate</tt> is a metadata field which contains the most recent <tt>thisUpdate</tt> amongst all current manifests represented by the <tt>ManifestInstance</tt> structures.
              If the <tt>mis</tt> field contains an empty sequence, the <tt>mostRecentUpdate</tt> <bcp14>MUST</bcp14> be set to the POSIX Epoch ("19700101000000Z").
            </t>
            <t>
              The above and the requirements in <xref target="RFC9286" section="6.3"/> imply that <tt>mostRecentUpdate</tt> <bcp14>MUST</bcp14> precede or be equal to <tt>producedAt</tt> (<xref target="producedAt"/>).
            </t>
          </section>
          <section>
            <name>hash</name>
            <t>
              The <tt>hash</tt> field contains a message digest computed using the <tt>mis</tt> value (encoded in DER format) as input message.
            </t>
          </section>
        </section>
        <section>
          <name>ROAPayloadState</name>
          <t>
            An instance of <tt>ROAPayloadState</tt> contains a field named <tt>rps</tt> which represents the current set of Validated ROA Payloads (<xref target="RFC6811" section="2"/>) encoded as a SEQUENCE of <tt>ROAPayloadSet</tt> instances ordered by ascending <tt>asID</tt>.
          </t>
          <t>
            The <tt>ROAPayloadSet</tt> structure is modeled after the <tt>RouteOriginAttestation</tt> (<xref target="RFC9582" section="4"/>).
            The <tt>asID</tt> value in each instance of <tt>ROAPayloadSet</tt> <bcp14>MUST</bcp14> be unique with respect to other instances of <tt>ROAPayloadSet</tt>.
            The contents of the <tt>ipAddrBlocks</tt> field <bcp14>MUST</bcp14> appear in canonical form and ordered as defined in <xref target="RFC9582" section="4.3.3"/>.
          </t>
          <t>
            The <tt>hash</tt> field contains a message digest computed using the <tt>rps</tt> value (encoded in DER format) as input message.
          </t>
        </section>
        <section>
          <name>ASPAPayloadState</name>
          <t>
            An instance of <tt>ASPAPayloadState</tt> contains an <tt>aps</tt> field which represents the current set of deduplicated and merged ASPA payloads (<xref target="I-D.ietf-sidrops-aspa-profile"/>) value encoded as a SEQUENCE of <tt>ASPAPayloadSet</tt> instances ordered by ascending <tt>customerASID</tt>.
            The <tt>customerASID</tt> value in each instance of <tt>ASPAPayloadSet</tt> <bcp14>MUST</bcp14> be unique with respect to other instances of <tt>ASPAPayloadSet</tt>.
          </t>
          <t>
            The <tt>ASPAPayloadSet</tt> structure is modeled after the <tt>ProviderASSet</tt> (<xref target="I-D.ietf-sidrops-aspa-profile" section="3.3"/>).
            The elements of <tt>providers</tt> <bcp14>MUST</bcp14> be ordered in ascending numerical order and <bcp14>MUST</bcp14> be unique (with respect to the other elements of providers).
            A <tt>PAS</tt> value of 0 can only be encoded in the <tt>providers</tt> field as a single item list, i.e., an element for AS 0 MUST NOT appear alongside any other elements.
          </t>
          <t>
            The <tt>hash</tt> field contains a message digest computed using the <tt>aps</tt> value (encoded in DER format) as input message.
          </t>
        </section>
        <section>
          <name>TrustAnchorState</name>
          <t>
            An instance of <tt>TrustAnchorState</tt> represents the set of valid Trust Anchor (TA) Certification Authority (CA) resource certificates used by the relying party when producing the CCR.
          </t>
          <t>
            Each <tt>SubjectKeyIdentifier</tt> is the 160-bit SHA-1 hash of the value of the DER-encoded ASN.1 bit string of the TA's Subject Public Key, as described in <xref target="RFC6487" section="4.8.2"/>.
            The <tt>skis</tt> field contains a sequence of Subject Key Identifiers (SKI) sorted in ascending order by interpreting the SKI value as an unsigned 160-bit integer.
          </t>
          <t>
            The <tt>hash</tt> field contains a message digest computed using the <tt>skis</tt> value (encoded in DER format) as input message.
          </t>
        </section>
        <section>
          <name>RouterKeyState</name>
          <t>
            An instance of <tt>RouterKeyState</tt> contains an <tt>rksets</tt> field which represents the current set of valid BGPsec Router Keys <xref target="RFC8205"/> encoded as a SEQUENCE of <tt>RouterKeySet</tt> instances.
            The <tt>asID</tt> value in each instance of <tt>RouterKeySet</tt> <bcp14>MUST</bcp14> be unique with respect to other instances of <tt>RouterKeySet</tt>.
            Instances of <tt>RouterKeySet</tt> are sorted by ascending value of <tt>asID</tt>.
            Instances of <tt>RouterKey</tt> are sorted by ascending value of <tt>ski</tt> by interpreting the SKI value as an unsigned 160-bit integer.
          </t>
          <t>
            The <tt>hash</tt> field contains a message digest computed using the <tt>rks</tt> value (encoded in DER format) as input message.
          </t>
        </section>
      </section>
    </section>
    <section>
      <name>Use Cases</name>
      <t>
        This section describes a number of applications for the CCR format across different contexts.
      </t>
      <section>
        <name>Constructing Consistent Views on Distributed Data</name>
        <t>
          This section describes a use case for CCRs in the context of distributed systems.
        </t>
        <t>
          Assuming CAs issue Manifests in accordance with <xref target="RFC9286" section="5"/>, a <tt>ManifestInstance</tt> can be considered a state-based Conflict-free Replicated Data Type (<xref target="CRDT"/>), meaning that <tt>ManifestInstance</tt> sets contain sufficient information to form a monotonic semilattice.
        </t>
        <t>
          The implication is that <tt>ManifestState</tt> instances from multiple CCRs produced by multiple different RPs at different times can safely be merged in order to construct an internally consistent view of the RPKI distributed database.
        </t>
        <t>
          The reconciled merge result can be useful, for example, as a backend for Erik Synchronization relays (<xref target="I-D.ietf-sidrops-rpki-erik-protocol"/>) which execute separate validation processes for different Trust Anchors and varying maximum certificate chain depths.
        </t>
      </section>
      <section>
        <name>Data Collection</name>
        <t>
          Operators have an interest in determining how the global RPKI is viewed from the perspectives of several different locations around the Internet.
          As CCR allows for point-in-time capture and later reconstruction and analysis, it found use in multi-perspective collector methods such as described <xref target="I-D.snijders-rpkispool-format">RPKISPOOL</xref>.
        </t>
        <t>
          An example of a large-scale CCR-based RPKI data archival project is <xref target="RPKIViews"/>.
        </t>
      </section>
    </section>
    <section>
      <name>Operational Considerations</name>
      <t>
        This section covers operational considerations.
      </t>
      <section>
        <name>CCR file integrity</name>
        <t>
          The integrity of a CCR file can be checked by confirming whether the hash value embedded inside each state aspect matches the computed hash value of the respective state aspect payload structure.
          Readers <bcp14>MUST</bcp14> verify the integrity of CCR files and stop further processing on failure.
        </t>
      </section>
      <section>
        <name>Timing analysis</name>
        <t>
          The <tt>producedAt</tt> timestamp is not necessarily the current time used by the RP for the purposes of validating the RPKI content.
          In practice, most RPs interleave fetching and validation operations, with validation occurring with respect to whatever the time happens to be at that point (i.e., wall clock time).
          This means that it is possible for a CCR to include information that would have been excluded if validated at the time indicated by the <tt>producedAt</tt> timestamp.
        </t>
        <t>
          If the CCR is produced right after all relevant repository content was received and validated by an RP, then comparing the ManifestState <tt>mostRecentUpdate</tt> timestamp (<xref target="mostRecentUpdate"/>) value with the CCR <tt>producedAt</tt> timestamp (<xref target="producedAt"/>) might help offer insight into the timing and propagation delays of the RPKI ecosystem.
        </t>
      </section>
      <section>
        <name>Storage efficiency</name>
        <t>
          CCRs compress very well due to its data layout characteristics: the content contains repetitive sequences, does not contain high entropy data such as public keys, and is consistently ordered.
          Readers and writers of CCR data are <bcp14>RECOMMENDED</bcp14> to support data compression using Gzip (<xref target="RFC1952"/>) in context of durable storage.
        </t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>
        The CCR format utilizes a structure that can store information about the state of a given RPKI cache at a particular moment in time.
        The fields defined in this specification are of a descriptive nature and provide information that is useful to facilitate the analysis of RPKI data.
        As such, these fields do not in themselves create additional security risks, since the fields are not used to induce any particular behavior by the recipient application.
      </t>
      <t>
        Readers <bcp14>MUST</bcp14> check contextual bounds on all fields appropriately and stop further processing on failure.
        E.g., the <tt>maxLength</tt> element in a <tt>ROAIPAddress</tt> cannot contain an integer smaller than the length of the accompanying prefix, the <tt>manifestNumber</tt> field is cannot be longer than 20 octets, etc.
      </t>
      <t>
        The CCR format contains no executable code, and it does not define any extensible areas that could be used to store such code.
      </t>
      <t>
        CCRs are not signed objects.
        RPKI information is normally public and does not call for confidentiality protection.
        Ascertaining the provenance (and thus authenticity) of any given CCR is out-of-scope for this document.
      </t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <section>
        <name>SMI Security for S/MIME CMS Content Type (1.2.840.113549.1.9.16.1)</name>
        <t>
          IANA has allocated the following in the "SMI Security for S/MIME CMS Content Type (1.2.840.113549.1.9.16.1)" registry:
        </t>
        <table anchor="cms-content-type" align="center">
          <name/>
          <thead>
            <tr>
              <th rowspan="1" colspan="1">Decimal</th>
              <th rowspan="1" colspan="1">Description</th>
              <th rowspan="1" colspan="1">References</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>54</td>
              <td>id-ct-rpkiCanonicalCacheRepresentation</td>
              <td>draft-ietf-sidrops-rpki-ccr</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section>
        <name>RPKI Repository Name Schemes</name>
        <t>
          IANA is requested to add the Canonical Cache Representation file extension to the "RPKI Repository Name Schemes" registry <xref target="RFC6481"/> as follows:
        </t>
        <table anchor="rpki-repository-name-schemes" align="center">
          <name/>
          <thead>
            <tr>
              <th rowspan="1" colspan="1">Filename Extension</th>
              <th rowspan="1" colspan="1">RPKI Object</th>
              <th rowspan="1" colspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>.ccr</td>
              <td>Canonical Cache Representation</td>
              <td>draft-ietf-sidrops-rpki-ccr</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section>
        <name>SMI Security for S/MIME Module Identifier (1.2.840.113549.1.9.16.0)</name>
        <t>
          IANA is requested to allocate the following in the "SMI Security for S/MIME Module Identifier (1.2.840.113549.1.9.16.0)" registry:
        </t>
        <table anchor="smi-security-identifier" align="center">
          <name/>
          <thead>
            <tr>
              <th rowspan="1" colspan="1">Decimal</th>
              <th rowspan="1" colspan="1">Description</th>
              <th rowspan="1" colspan="1">References</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>TBD</td>
              <td>id-mod-rpkiCCR-2025</td>
              <td>draft-ietf-sidrops-rpki-ccr</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section>
        <name>Media Types</name>
        <t>
          IANA is requested to register the media types "application/rpki-ccr" and "application/rpki-ccr+gzip" in the "Media Types" registry as follows:
        </t>
        <section>
          <name>Canonical Cache Representation Media Type</name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>application</dd>
            <dt>Subtype name:</dt>
            <dd>rpki-ccr</dd>
            <dt>Required parameters:</dt>
            <dd>N/A</dd>
            <dt>Optional parameters:</dt>
            <dd>N/A</dd>
            <dt>Encoding considerations:</dt>
            <dd>binary</dd>
            <dt>Security considerations:</dt>
            <dd>This media type contains no active content.</dd>
            <dt>Interoperability considerations:</dt>
            <dd>N/A</dd>
            <dt>Published specification:</dt>
            <dd>draft-ietf-sidrops-rpki-ccr</dd>
            <dt>Applications that use this media type:</dt>
            <dd>RPKI operators</dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>N/A</dd>
            <dt>Additional information:</dt>
            <dd>
              <dl spacing="compact">
                <dt><br/></dt>
                <dd/>
                <dt>Content:</dt>
                <dd>This media type is a RPKI Canonical Cache Representation object, as defined in draft-ietf-sidrops-rpki-ccr.</dd>
                <dt>Magic number(s):</dt>
                <dd>N/A</dd>
                <dt>File extension(s):</dt>
                <dd>.ccr</dd>
                <dt>Macintosh file type code(s):</dt>
                <dd>N/A</dd>
              </dl>
            </dd>
            <dt>Person &amp; email address to contact for further information:</dt>
            <dd>Job Snijders (job@bsd.nl)</dd>
            <dt>Intended usage:</dt>
            <dd>COMMON</dd>
            <dt>Restrictions on usage:</dt>
            <dd>N/A</dd>
            <dt>Author:</dt>
            <dd>Job Snijders (job@bsd.nl)</dd>
            <dt>Change controller:</dt>
            <dd>IETF</dd>
          </dl>
          <dl spacing="compact">
            <dt><br/></dt>
            <dd/>
            <dt>Type name:</dt>
            <dd>application</dd>
            <dt>Subtype name:</dt>
            <dd>rpki-ccr+gzip</dd>
            <dt>Content:</dt>
            <dd>This media type is a Gzip compressed RPKI Canonical Cache Representation object, as defined in draft-ietf-sidrops-rpki-ccr.</dd>
            <dt>Magic number(s):</dt>
            <dd>N/A</dd>
            <dt>File extension(s):</dt>
            <dd>.ccr.gz</dd>
            <dt>References:</dt>
            <dd>RFC1952, RFC6713</dd>
            <dt>Encoding considerations:</dt>
            <dd>gzip is a binary encoding</dd>
          </dl>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC5754" target="https://www.rfc-editor.org/info/rfc5754" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5754.xml">
          <front>
            <title>Using SHA2 Algorithms with Cryptographic Message Syntax</title>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="January" year="2010"/>
            <abstract>
              <t>This document describes the conventions for using the Secure Hash Algorithm (SHA) message digest algorithms (SHA-224, SHA-256, SHA-384, SHA-512) with the Cryptographic Message Syntax (CMS). It also describes the conventions for using these algorithms with the CMS and the Digital Signature Algorithm (DSA), Rivest Shamir Adleman (RSA), and Elliptic Curve DSA (ECDSA) signature algorithms. Further, it provides SMIMECapabilities attribute values for each algorithm. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5754"/>
          <seriesInfo name="DOI" value="10.17487/RFC5754"/>
        </reference>
        <reference anchor="RFC6481" target="https://www.rfc-editor.org/info/rfc6481" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6481.xml">
          <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>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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6487.xml">
          <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>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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6488.xml">
          <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>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="RFC6811" target="https://www.rfc-editor.org/info/rfc6811" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6811.xml">
          <front>
            <title>BGP Prefix Origin Validation</title>
            <author fullname="P. Mohapatra" initials="P." surname="Mohapatra"/>
            <author fullname="J. Scudder" initials="J." surname="Scudder"/>
            <author fullname="D. Ward" initials="D." surname="Ward"/>
            <author fullname="R. Bush" initials="R." surname="Bush"/>
            <author fullname="R. Austein" initials="R." surname="Austein"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>To help reduce well-known threats against BGP including prefix mis- announcing and monkey-in-the-middle attacks, one of the security requirements is the ability to validate the origination Autonomous System (AS) of BGP routes. More specifically, one needs to validate that the AS number claiming to originate an address prefix (as derived from the AS_PATH attribute of the BGP route) is in fact authorized by the prefix holder to do so. This document describes a simple validation mechanism to partially satisfy this requirement. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6811"/>
          <seriesInfo name="DOI" value="10.17487/RFC6811"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC9286" target="https://www.rfc-editor.org/info/rfc9286" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9286.xml">
          <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>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="RFC9582" target="https://www.rfc-editor.org/info/rfc9582" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9582.xml">
          <front>
            <title>A Profile for Route Origin Authorizations (ROAs)</title>
            <author fullname="J. Snijders" initials="J." surname="Snijders"/>
            <author fullname="B. Maddison" initials="B." surname="Maddison"/>
            <author fullname="M. Lepinski" initials="M." surname="Lepinski"/>
            <author fullname="D. Kong" initials="D." surname="Kong"/>
            <author fullname="S. Kent" initials="S." surname="Kent"/>
            <date month="May" year="2024"/>
            <abstract>
              <t>This document defines a standard profile for Route Origin Authorizations (ROAs). A ROA is a digitally signed object that provides a means of verifying that an IP address block holder has authorized an Autonomous System (AS) to originate routes to one or more prefixes within the address block. This document obsoletes RFC 6482.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9582"/>
          <seriesInfo name="DOI" value="10.17487/RFC9582"/>
        </reference>
        <!-- not yet published
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9981.xml"/> -->

        <reference anchor="RFC9981" target="https://www.rfc-editor.org/info/rfc9981">
          <front>
            <title>Resource Public Key Infrastructure (RPKI) Manifest Number Handling</title>
            <author fullname="Tom Harrison" initials="T." surname="Harrison"/>
            <author fullname="George Michaelson" initials="G." surname="Michaelson"/>
            <author fullname="Job Snijders" initials="J." surname="Snijders"/>
            <date month="May" year="2026"/>
          </front>
        </reference>
        <reference anchor="I-D.ietf-sidrops-aspa-profile" target="https://datatracker.ietf.org/doc/html/draft-ietf-sidrops-aspa-profile-26" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-sidrops-aspa-profile.xml">
          <front>
            <title>A Profile for Autonomous System Provider Authorization</title>
            <author fullname="Job Snijders" initials="J." surname="Snijders">
              <organization>BSD Software Development</organization>
            </author>
            <author fullname="Alexander Azimov" initials="A." surname="Azimov">
              <organization>Yandex</organization>
            </author>
            <author fullname="Eugene Uskov" initials="E." surname="Uskov">
              <organization>JetLend</organization>
            </author>
            <author fullname="Randy Bush" initials="R." surname="Bush">
              <organization>Internet Initiative Japan</organization>
            </author>
            <author fullname="Russ Housley" initials="R." surname="Housley">
              <organization>Vigil Security, LLC</organization>
            </author>
            <author fullname="Ben Maddison" initials="B." surname="Maddison">
              <organization>Workonline</organization>
            </author>
            <date day="19" month="April" year="2026"/>
            <abstract>
              <t>This document defines a Cryptographic Message Syntax (CMS) protected content type for Autonomous System Provider Authorization (ASPA) objects for use with the Resource Public Key Infrastructure (RPKI). An ASPA is a digitally signed object through which the issuer (the holder of an Autonomous System identifier), can authorize one or more other Autonomous Systems (ASes) as its transit providers. When validated, an ASPA's eContent can be used for detection and mitigation of route leaks.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-sidrops-aspa-profile-26"/>
        </reference>
        <reference anchor="SHS" target="https://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf">
          <front>
            <title>Secure Hash Standard</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date month="March" year="2012"/>
          </front>
        </reference>
        <reference anchor="X.690" target="https://www.itu.int/rec/T-REC-X.690-202102-I/en">
          <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>
        <name>Informative References</name>
        <reference anchor="I-D.snijders-rpkispool-format" target="https://datatracker.ietf.org/doc/html/draft-snijders-rpkispool-format-00" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.snijders-rpkispool-format.xml">
          <front>
            <title>The RPKISPOOL Format for Materializing Resource Public Key Infrastructure (RPKI) Data</title>
            <author fullname="Job Snijders" initials="J." surname="Snijders">
              <organization>BSD Software Development</organization>
            </author>
            <author fullname="Fedor Vompe" initials="F." surname="Vompe">
              <organization>Deutsche Telekom</organization>
            </author>
            <date day="2" month="March" year="2026"/>
            <abstract>
              <t>This document describes a format and data storage approach for materialization of RPKI data in order to support a range of use cases such as auditing Certification Authorities and analytical research. The rpkispool format can be used for high-latency replication of raw RPKI data and associated validation outcomes as efficiently compressed durable objects. The method uses widely available standardized tooling and is designed to support long-term preservation of RPKI data in a cost-effective way.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-snijders-rpkispool-format-00"/>
        </reference>
        <reference anchor="I-D.ietf-sidrops-rpki-erik-protocol" target="https://datatracker.ietf.org/doc/html/draft-ietf-sidrops-rpki-erik-protocol-04" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-sidrops-rpki-erik-protocol.xml">
          <front>
            <title>The Erik Synchronization Protocol for use with the Resource Public Key Infrastructure (RPKI)</title>
            <author fullname="Job Snijders" initials="J." surname="Snijders">
              <organization>BSD Software Development</organization>
            </author>
            <author fullname="Tim Bruijnzeels" initials="T." surname="Bruijnzeels">
              <organization>RIPE NCC</organization>
            </author>
            <author fullname="Tom Harrison" initials="T." surname="Harrison">
              <organization>APNIC</organization>
            </author>
            <author fullname="Wataru Ohgai" initials="W." surname="Ohgai">
              <organization>JPNIC</organization>
            </author>
            <date day="17" month="March" year="2026"/>
            <abstract>
              <t>This document specifies the Erik Synchronization Protocol for use with the Resource Public Key Infrastructure (RPKI). Erik Synchronization can be characterized as a data replication system using Merkle trees, a content-addressable naming scheme, concurrency control using monotonically increasing sequence numbers, and HTTP transport. Relying Parties can combine information retrieved via Erik Synchronization with other RPKI transport protocols. The protocol's design is intended to be efficient, fast, easy to implement, and robust in the face of partitions or faults in the network.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-sidrops-rpki-erik-protocol-04"/>
        </reference>
        <reference anchor="RFC1952" target="https://www.rfc-editor.org/info/rfc1952" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1952.xml">
          <front>
            <title>GZIP file format specification version 4.3</title>
            <author fullname="P. Deutsch" initials="P." surname="Deutsch"/>
            <date month="May" year="1996"/>
            <abstract>
              <t>This specification defines a lossless compressed data format that is compatible with the widely used GZIP utility. This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1952"/>
          <seriesInfo name="DOI" value="10.17487/RFC1952"/>
        </reference>
        <reference anchor="RFC5781" target="https://www.rfc-editor.org/info/rfc5781" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5781.xml">
          <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>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="RFC8182" target="https://www.rfc-editor.org/info/rfc8182" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8182.xml">
          <front>
            <title>The RPKI Repository Delta Protocol (RRDP)</title>
            <author fullname="T. Bruijnzeels" initials="T." surname="Bruijnzeels"/>
            <author fullname="O. Muravskiy" initials="O." surname="Muravskiy"/>
            <author fullname="B. Weber" initials="B." surname="Weber"/>
            <author fullname="R. Austein" initials="R." surname="Austein"/>
            <date month="July" year="2017"/>
            <abstract>
              <t>In the Resource Public Key Infrastructure (RPKI), Certificate Authorities (CAs) publish certificates, including end-entity certificates, Certificate Revocation Lists (CRLs), and RPKI signed objects to repositories. Relying Parties retrieve the published information from those repositories. This document specifies a new RPKI Repository Delta Protocol (RRDP) for this purpose. RRDP was specifically designed for scaling. It relies on an Update Notification File which lists the current Snapshot and Delta Files that can be retrieved using HTTPS (HTTP over Transport Layer Security (TLS)), and it enables the use of Content Distribution Networks (CDNs) or other caching infrastructures for the retrieval of these files.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8182"/>
          <seriesInfo name="DOI" value="10.17487/RFC8182"/>
        </reference>
        <reference anchor="RFC8205" target="https://www.rfc-editor.org/info/rfc8205" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8205.xml">
          <front>
            <title>BGPsec Protocol Specification</title>
            <author fullname="M. Lepinski" initials="M." role="editor" surname="Lepinski"/>
            <author fullname="K. Sriram" initials="K." role="editor" surname="Sriram"/>
            <date month="September" year="2017"/>
            <abstract>
              <t>This document describes BGPsec, an extension to the Border Gateway Protocol (BGP) that provides security for the path of Autonomous Systems (ASes) through which a BGP UPDATE message passes. BGPsec is implemented via an optional non-transitive BGP path attribute that carries digital signatures produced by each AS that propagates the UPDATE message. The digital signatures provide confidence that every AS on the path of ASes listed in the UPDATE message has explicitly authorized the advertisement of the route.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8205"/>
          <seriesInfo name="DOI" value="10.17487/RFC8205"/>
        </reference>
        <reference anchor="rpki-client" target="https://www.rpki-client.org/">
          <front>
            <title>rpki-client</title>
            <author fullname="Claudio Jeker"/>
            <author fullname="Kristaps Dzonsons"/>
            <author fullname="Theo Buehler"/>
            <author fullname="Job Snijders"/>
            <date month="December" year="2025"/>
          </front>
        </reference>
        <reference anchor="rpkitouch" target="https://www.github.com/job/rpkitouch">
          <front>
            <title>rpki-client</title>
            <author fullname="Job Snijders"/>
            <date month="December" year="2025"/>
          </front>
        </reference>
        <reference anchor="rpki-commons" target="https://github.com/RIPE-NCC/rpki-commons">
          <front>
            <title>rpki-commons</title>
            <author fullname="RIPE NCC"/>
            <date month="April" year="2026"/>
          </front>
        </reference>
        <reference anchor="RPKIViews" target="https://www.rpkiviews.org/">
          <front>
            <title>The RPKIViews Project</title>
            <author fullname="Job Snijders"/>
            <date month="April" year="2026"/>
          </front>
        </reference>
        <!-- https://inria.hal.science/inria-00609399v2/bibtex -->
        <reference anchor="CRDT" target="https://inria.hal.science/inria-00609399">
          <front>
            <title>Conflict-free Replicated Data Types</title>
            <author fullname="Marc Shapiro"/>
            <author fullname="Nuno Preguiça"/>
            <author fullname="Carlos Baquero"/>
            <author fullname="Marek Zawirski"/>
            <date month="July" year="2011"/>
          </front>
          <seriesInfo name="INRIA" value="RR-7687"/>
        </reference>
      </references>
    </references>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>
        The authors wish to thank
        <contact fullname="Russ Housley"/>,
        <contact fullname="Luuk Hendriks"/>,
        <contact fullname="Fedor Vompe"/>,
        and
        <contact fullname="Tom Harrison"/>
        for their generous feedback on this specification.
      </t>
    </section>
    <section title="Example CCR">
      <t>
        The below is a Base64-encoded example CCR object.
        For a more elaborate example based on the global RPKI, see the URL in <xref target="implementation"/>.
      </t>
      <sourcecode anchor="tv-base64" type="txt" originalSrc="testvector.b64">MIIF9AYLKoZIhvcNAQkQATagggXjMIIF3zALBglghkgBZQMEAgEYDzIwMjYwNTE1MDAwM
DEwWqGCAtUwggLRMIICmjCBmAQgKF60zgHHRNmQSUXcsAcAPB2cB7kvToWUF60GADJuG5
ECAgPpBBSi3wQv6LAAYxHolIUawRQRMHtgQwICEyEYDzIwMjYwNTE1MDAwMDA5WjBFMEM
GCCsGAQUFBzALhjdyc3luYzovL2V4YW1wbGUubmV0L2NhNC9Ra3NiUVpNQzdZV3NOclJF
dDRsNGRXQVExc0UubWZ0MIGYBCA8fzi045g3wS16tiKY4MxriwOP0eQx7JM3IKzL/1D/j
wICB/gEFPrL0CykfjvZZm/L2COzfe3QvO4AAgICAxgPMjAyNjA1MTUwMDAwMDdaMEUwQw
YIKwYBBQUHMAuGN3JzeW5jOi8vZXhhbXBsZS5uZXQvY2EyL3owbnpWUzdTT0JfOXk2dGF
wSGs3LVl1S2ttOC5tZnQwgZgEIL3nuZvothSocx8JXZLAtiF9FpVXBx1btwfKgDJ5Pv16
AgIPmwQU5zFepRXXwgU4aBJJ0+MNZ3cWJYUCAgUIGA8yMDI2MDUxNTAwMDAwOFowRTBDB
ggrBgEFBQcwC4Y3cnN5bmM6Ly9leGFtcGxlLm5ldC9jYTMvc2JoRnp6NHdUcXNGbzJOVl
JNOG1XZnNQQktRLm1mdDCBxgQg48JkKNPGfzSWjkALB4rFbaktXGSFaAV5qj0gj7zCCFY
CAgbBBBQl+Mz878BG2NzQD8DkROCqe3kPlgICAQEYDzIwMjYwNTE1MDAwMDA2WjBFMEMG
CCsGAQUFBzALhjdyc3luYzovL2V4YW1wbGUubmV0L2NhMS9PYVZVT0lEU2FMelViZWl6N
lZQb2dYeHNLNW8ubWZ0MCwEFKLfBC/osABjEeiUhRrBFBEwe2BDBBTnMV6lFdfCBThoEk
nT4w1ndxYlhRgPMjAyNjA1MTUwMDAwMDlaBCBjjUCOSmIWv8DNHb9zxwi1k6YgLC4hpk4
aph0pqidsEqKBoTCBnjB6MBUCAQAwEDAOBAIAATAIMAYDBADAAAIwLQIDAQAAMCYwEQQC
AAEwCzAJAwQAxjNkAgEcMBEEAgACMAswCQMHACABDQgAADAYAgMBAA4wETAPBAIAAjAJM
AcDBQA//wAAMBgCAwEADzARMA8EAgACMAkwBwMFAD//AAAEIJgOVAZ7JE7OekW9qMlKUN
jkGdzgod7Fcobph5AfXVkCo1MwUTAtMAwCAwD7/zAFAgMA+/AwEQIDAQAAMAoCAwEABAI
DAQAIMAoCAwEADjADAgEABCAnN98QySyKCzUlPnxJJT5iGrRQCLLbvCDdt4esCyUUU6RS
MFAwLAQUJfjM/O/ARtjc0A/A5ETgqnt5D5YEFPrL0CykfjvZZm/L2COzfe3QvO4ABCAO5
kLEyVH4bH17eMAESlf9gYYe1a99AfW+q44/jdcDEaWCAZcwggGTMIIBbTCB7gIDAP5jMI
HmMHEEFIjF3ilaMnbWnpu3RpvUbvly3jKsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgA
E64mxtNmdKd1bxIjgWrGJutr11LDeA56L8cc1NLL/WW9RZ+rbi+G4rFSvfrEjxzRPt6tc
NWpgEINq7tOR7J5dAjBxBBS+FudOEPS98/jCYYsCSpRX37+J+jBZMBMGByqGSM49AgEGC
CqGSM49AwEHA0IABCo6kzaMUiyt1JyzDY9gHTf+bJOUiE52FiuXvyXmypSTxRcZgazl1k
Moo0UARRbrOxrSyyGQWIKeCv7vKNvw+IowegIDAQAPMHMwcQQURgK2IbAXaB5h7h9KXvw
dAsO0bywwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAThe3r51EOGOYfRBWZeVQ+d0l5f
LOUxyxyjpaSuMF/o2hfqBhqERKAKbrvGQErhnGG8JlEVYvGofxyBP8+C+X3jBCCfSt7Zy
MVIWZ18hjoqeDkmVGKSbWfe4VJZrVgJs5v/FA==
</sourcecode>
      <t>
        It decodes as follows:
      </t>
      <sourcecode anchor="tv-decode" type="txt" originalSrc="testvector.decode.fold">=============== NOTE: '\' line wrapping per RFC 8792 ================

File:                   example.ccr
Hash identifier:        8mdCrklrbLHKzDVr5fFbsGK4fyJsArmsGeLShZhRyio=
CCR produced at:        Fri 15 May 2026 00:00:10 +0000
Manifest state hash:    Y41AjkpiFr/AzR2/c8cItZOmICwuIaZOGqYdKaonbBI=
Manifest last update:   Fri 15 May 2026 00:00:09 +0000
Manifest instances:
                        hash:48JkKNPGfzSWjkALB4rFbaktXGSFaAV5qj0gj7z\
CCFY= size:1729 aki:25F8CCFCEFC046D8DCD00FC0E444E0AA7B790F96 seqnum:\
0101 thisupdate:1778803206 sia:rsync://example.net/ca1/OaVUOIDSaLzUb\
eiz6VPogXxsK5o.mft subordinates:A2DF042FE8B0006311E894851AC11411307B\
6043,E7315EA515D7C20538681249D3E30D6777162585
                        hash:KF60zgHHRNmQSUXcsAcAPB2cB7kvToWUF60GADJ\
uG5E= size:1001 aki:A2DF042FE8B0006311E894851AC11411307B6043 seqnum:\
1321 thisupdate:1778803209 sia:rsync://example.net/ca4/QksbQZMC7YWsN\
rREt4l4dWAQ1sE.mft
                        hash:vee5m+i2FKhzHwldksC2IX0WlVcHHVu3B8qAMnk\
+/Xo= size:3995 aki:E7315EA515D7C20538681249D3E30D6777162585 seqnum:\
0508 thisupdate:1778803208 sia:rsync://example.net/ca3/sbhFzz4wTqsFo\
2NVRM8mWfsPBKQ.mft
                        hash:PH84tOOYN8EterYimODMa4sDj9HkMeyTNyCsy/9\
Q/48= size:2040 aki:FACBD02CA47E3BD9666FCBD823B37DEDD0BCEE00 seqnum:\
0203 thisupdate:1778803207 sia:rsync://example.net/ca2/z0nzVS7SOB_9y\
6tapHk7-YuKkm8.mft
ROA payload state hash: mA5UBnskTs56Rb2oyUpQ2OQZ3OCh3sVyhumHkB9dWQI=
ROA payload entries:
                        192.0.2.0/24 AS 0
                        198.51.100.0/24-28 AS 65536
                        2001:d08::/48 AS 65536
                        3fff::/32 AS 65550
                        3fff::/32 AS 65551
ASPA payload state hash:JzffEMksigs1JT58SSU+Yhq0UAiy27wg3beHrAslFFM=
ASPA payload entries:
                        customer: 64511 providers: 64496
                        customer: 65536 providers: 65540, 65544
                        customer: 65550 providers: 0
Trust anchor state hash:DuZCxMlR+Gx9e3jABEpX/YGGHtWvfQH1vquOP43XAxE=
Trust anchor keyids:    25F8CCFCEFC046D8DCD00FC0E444E0AA7B790F96, FA\
CBD02CA47E3BD9666FCBD823B37DEDD0BCEE00
Router key state hash:  n0re2cjFSFmdfIY6Kng5JlRikm1n3uFSWa1YCbOb/xQ=
Router keys:
                        asid:65123 ski:88C5DE295A3276D69E9BB7469BD46\
EF972DE32AC pubkey:MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE64mxtNmdKd1bx\
IjgWrGJutr11LDeA56L8cc1NLL/WW9RZ+rbi+G4rFSvfrEjxzRPt6tcNWpgEINq7tOR7\
J5dAg==
                        asid:65123 ski:BE16E74E10F4BDF3F8C2618B024A9\
457DFBF89FA pubkey:MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKjqTNoxSLK3Un\
LMNj2AdN/5sk5SITnYWK5e/JebKlJPFFxmBrOXWQyijRQBFFus7GtLLIZBYgp4K/u8o2\
/D4ig==
                        asid:65551 ski:4602B621B017681E61EE1F4A5EFC1\
D02C3B46F2C pubkey:MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE4Xt6+dRDhjmH0\
QVmXlUPndJeXyzlMcsco6WkrjBf6NoX6gYahESgCm67xkBK4ZxhvCZRFWLxqH8cgT/Pg\
vl94w==
Validation:             N/A
</sourcecode>
    </section>
    <section removeInRFC="true" anchor="implementation">
      <name>Implementation status</name>
      <t>
        This section records the status of known implementations of the protocol defined by this specification at the time of posting of this Internet-Draft, and is based on a proposal described in RFC 7942.
        The description of implementations in this section is intended to assist the IETF in its decision processes in progressing drafts to RFCs.
        Please note that the listing of any individual implementation here does not imply endorsement by the IETF.
        Furthermore, no effort has been spent to verify the information presented here that was supplied by IETF contributors.
        This is not intended as, and must not be construed to be, a catalog of available implementations or their features.
        Readers are advised to note that other implementations may exist.
      </t>
      <t>
        According to RFC 7942, "this will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.
        It is up to the individual working groups to use this information as they see fit".
      </t>
      <ul>
        <li>
          Example .ccr files were created by Job Snijders.
          A current example CCR (regenerated every few minutes) is available here:
<![CDATA[
https://console.rpki-client.org/rpki.ccr
]]>
        </li>
        <li>
          A CCR serializer and deserializer implementation based on <xref target="rpki-client"/> was provided by Job Snijders and Theo Buehler.
        </li>
        <li>
          Another CCR serializer, deserializer, and CRDT effector implementation based on <xref target="rpkitouch"/> was provided by Job Snijders.
        </li>
        <li>
          A CCR encoding and decoding implementation in Java library <xref target="rpki-commons"/> was provided by RIPE NCC.
        </li>
      </ul>
    </section>
  </back>
</rfc>
