<?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-01" 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 cache at a particular point in time.
        The CCR profile is a compact and versatile format well-suited for a diverse set of applications such as audit trail keeping, validated payload dissemination, and analytics pipelines.
      </t>
    </abstract>
  </front>
  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>
        This document specifies a Canonical Cache Representation (CCR) content type for use with the Resource Public Key Infrastructure (RPKI).
        A validated cache contains all RPKI objects that the Relying Party (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.
        The CCR profile is a compact and versatile format well-suited for a diverse set of applications such as audit record keeping, validated payload dissemination, and analytics pipelines.
      </t>
      <t>
         The format was primarily designed to support comparative analysis of uniformities and differences among multiple RP instances using different RPKI transport protocols (such as <xref target="RFC5781"/>, <xref target="RFC8182"/>, and <xref target="I-D.ietf-sidrops-rpki-erik-protocol"/>).
      </t>
      <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>EncapsulatedContentInfo</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 eContent is the payload of the CCR encapsulated as an <tt>OCTET STRING</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) }

  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) }
  ;

EncapsulatedContentInfo ::= SEQUENCE {
  eContentType      CONTENT-TYPE.&amp;id({ContentSet}),
  eContent      [0] EXPLICIT OCTET STRING
    (CONTAINING CONTENT-TYPE.&amp;Type({ContentSet}{@eContentType}))
    OPTIONAL }

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      ASID,
  providers         SEQUENCE (SIZE(1..MAX)) OF ASID }

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>.
        </t>
      </section>
      <section>
        <name>producedAt</name>
        <t>
          The <tt>producedAt</tt> field contains a <tt>GeneralizedTime</tt> and indicates the moment in time the CCR was generated.
        </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, 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 nextUpdate or until a manifest is issued with a greater manifestNumber, whichever comes first (see <xref target="RFC9286" section="4.2.1"/>).
            </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>
            <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>
          </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.
          </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"/>) ordered by ascending <tt>customerASID</tt> value encoded as a SEQUENCE of <tt>ASPAPayloadSet</tt> instances.
            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"/>).
          </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>Operational Considerations</name>
      <t>
        Comparing the ManifestState <tt>mostRecentUpdate</tt> timestamp value with the <tt>producedAt</tt> timestamp might help offer insight into the timing and propagation delays of the RPKI supply chain.
      </t>
      <t>
        Given the absence of public keys and fairly repetitive content in RPKI AccessDescription instances, it should be noted CCR content compresses well.
      </t>
      <section>
        <name>Verifying CCR file integrity</name>
        <t>
          The integrity of a CCR object can be checked by confirming whether the hash values embedded inside state aspects match the computed hash value of the respective state aspect payload structure.
        </t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>
        CCR objects are not signed objects.
      </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 type "application/rpki-ccr" 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>
        </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="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>
        <reference anchor="I-D.ietf-sidrops-aspa-profile" target="https://datatracker.ietf.org/doc/html/draft-ietf-sidrops-aspa-profile-20" 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="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="Job Snijders" initials="J." surname="Snijders"/>
            <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="18" month="August" year="2025"/>
            <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 upstream 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-20"/>
        </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.ietf-sidrops-rpki-erik-protocol" target="https://datatracker.ietf.org/doc/html/draft-ietf-sidrops-rpki-erik-protocol-00" 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="1" month="December" year="2025"/>
            <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-00"/>
        </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>
      </references>
    </references>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>
        The authors wish to thank
        <contact fullname="Russ Housley"/>
        and
        <contact fullname="Luuk Hendriks"/>
        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">MIIQsgYLKoZIhvcNAQkQATagghChBIIQnTCCEJkGCWCGSAFlAwQCARgPMjAyNTEyMDIwO
TIwMTVaoYINCzCCDQcwggzQMIHRBCAEIPV/uSkTHf99a3wAhJwkaRY3ljqHJ+b/t93GVR
eslQICCF8EFOUti1y6fC0rivBG638xAQWsDAmsAgIFUhgPMjAyNTEyMDIwMDAxMjhaMH4
wfAYIKwYBBQUHMAuGcHJzeW5jOi8vcnBraS5yaXBlLm5ldC9yZXBvc2l0b3J5L0RFRkFV
TFQvYjQvZDRmODNkLWZiNTMtNDI0Zi04NTFkLWMwZDA2MmE3NTM1NC8xLzVTMkxYTHA4T
FN1SzhFYnJmekVCQmF3TUNhdy5tZnQwgdEEIAQhjxq7EC+M4LcwU1Rv4WRzqcNOtDHnv3
cmK7faqTm0AgIHhAQUla6L0zJJzx7V8NQ5gUfv0y0lQhoCAg7GGA8yMDI1MTIwMjA3MDI
1OVowfjB8BggrBgEFBQcwC4ZwcnN5bmM6Ly9ycGtpLnJpcGUubmV0L3JlcG9zaXRvcnkv
REVGQVVMVC8xZi9lMjdkOWItOTMxYS00ODhiLWFjMzUtOGZmYmQ2YzczYmY1LzEvbGE2T
DB6Skp6eDdWOE5RNWdVZnYweTBsUWhvLm1mdDCB0QQgBCHnZyxReuJ8T3Z3bnRUnl+Sln
GcINUFjyOMA0REw74CAgeEBBQZX6gzAlKgfyUOUdjkdLs419w7mgICBXMYDzIwMjUxMjA
yMDMwMTAzWjB+MHwGCCsGAQUFBzALhnByc3luYzovL3Jwa2kucmlwZS5uZXQvcmVwb3Np
dG9yeS9ERUZBVUxUL2NkL2U5YjBlMC1mNGI2LTQ2ZGEtYWZmOC1iZTcwODdkYmY1MzYvM
S9HVi1vTXdKU29IOGxEbEhZNUhTN09OZmNPNW8ubWZ0MIHRBCAEJmlVwzgav9XDqPXqf0
fWjTrZlTI1+s5xnKTbmkvpOwICB84EFCNLRJiUWJ0W9na/8oKr7apWzHuNAgIHkhgPMjA
yNTEyMDIwMDAxMzBaMH4wfAYIKwYBBQUHMAuGcHJzeW5jOi8vcnBraS5yaXBlLm5ldC9y
ZXBvc2l0b3J5L0RFRkFVTFQvMGQvMzMxOGQ5LTU2NjktNDkyMC1hNTVjLTczYTYzYjI1O
WJlYi8xL0kwdEVtSlJZblJiMmRyX3lncXZ0cWxiTWU0MC5tZnQwgdEEIAQmcgts0SqRCg
E8XUCVn5ACWJPT4z0q3rCb0pINnSajAgIHhAQUSxd8RQ0gNQZ7qiaSC4pL02x7MxQCAg5
pGA8yMDI1MTIwMjA3MDI0OVowfjB8BggrBgEFBQcwC4ZwcnN5bmM6Ly9ycGtpLnJpcGUu
bmV0L3JlcG9zaXRvcnkvREVGQVVMVC85OS81YTZhYWQtYTRjNy00M2I5LThhOWUtOGQ3Y
jczNmE2OTVjLzEvU3hkOFJRMGdOUVo3cWlhU0M0cEwwMng3TXhRLm1mdDCB0QQgBCagCS
WmdO3mC73CYFmilUBUD1aB6UbauZo8WDBN8LMCAgfOBBQg1L1Jn1hJSsDoImO1UgosZNZ
HfgICFugYDzIwMjUxMjAyMDAwMTMzWjB+MHwGCCsGAQUFBzALhnByc3luYzovL3Jwa2ku
cmlwZS5uZXQvcmVwb3NpdG9yeS9ERUZBVUxULzk1L2FmNjAxZS1jMmJmLTRhNmEtYWEzM
i1kMmVlMTUzOTlkMDYvMS9JTlM5U1o5WVNVckE2Q0pqdFZJS0xHVFdSMzQubWZ0MIH6BC
AEJtpLL/iJGicbwG9B+JZrAQLOCsdNsDxE6k8rEZYS9gICEusEFD7uu5RqjSHUCDyT3An
O5Ve7KsMuAgIC5RgPMjAyNTEyMDEyMzEyNDRaMIGOMIGLBggrBgEFBQcwC4Z/cnN5bmM6
Ly9yc3luYy5wYWFzLnJwa2kucmlwZS5uZXQvcmVwb3NpdG9yeS82ZmY3YTk4OS1lY2RmL
TQzZDYtODZlMS1mNmMzOTM1YjliM2QvNC8zRUVFQkI5NDZBOEQyMUQ0MDgzQzkzREMwOU
NFRTU1N0JCMkFDMzJFLm1mdDAWBBQEyS2bHIMHtwxHKQFm1Zic76vcxDCB0QQgBCl0MQp
E86B5mYTCdjobXkfXd+yKruym1EG8O6o52hkCAgeEBBRTN936ZTD8xn92k33r49ggjLmQ
LAICCPkYDzIwMjUxMjAyMDEwMTM5WjB+MHwGCCsGAQUFBzALhnByc3luYzovL3Jwa2kuc
mlwZS5uZXQvcmVwb3NpdG9yeS9ERUZBVUxULzgwLzJjNmMyYi01NGQ2LTQzMWQtOWMwNi
1kZGUzNjU3NGIxNzgvMS9VemZkLW1Vd19NWl9kcE45Ni1QWUlJeTVrQ3cubWZ0MIHRBCA
EK+ABs2zFJ9rS2w57bQ2ms997WhExDGaRg3dRS/6NpwICB88EFNJo2aKmRdfML9JTs2cE
CAVeVv/5AgIOORgPMjAyNTEyMDIwNzAyNTRaMH4wfAYIKwYBBQUHMAuGcHJzeW5jOi8vc
nBraS5yaXBlLm5ldC9yZXBvc2l0b3J5L0RFRkFVTFQvZTcvNDQwMzhiLTgwMzEtNDRlMC
05MWM0LWNjNTY3NmM3ZGU5Zi8xLzBtalpvcVpGMTh3djBsT3pad1FJQlY1V19fay5tZnQ
wgdEEIAQsVhrUyiF2H16Wjhg7i/PEPk8Ww6RM2prBAVj5h5SEAgIHhAQUuo1nmL3QsriA
XUOzRV92c5uUbx0CAhbmGA8yMDI1MTIwMjA3MDIzNFowfjB8BggrBgEFBQcwC4ZwcnN5b
mM6Ly9ycGtpLnJpcGUubmV0L3JlcG9zaXRvcnkvREVGQVVMVC9lYy82OGI1N2ItZDE4ZC
00Nzg1LTk3YjAtZWM1NmMwYjA4MWFlLzEvdW8xbm1MM1FzcmlBWFVPelJWOTJjNXVVYng
wLm1mdDCB/QQgBDNmKXoKbp/8++wT92tazKm/IBKJL2D8/tC14qPSifoCAgkTBBRtL6lP
UTH+uzRMEUBZDh5likmi0wICAUEYDzIwMjUxMjAxMTk1MzU4WjCBqTCBpgYIKwYBBQUHM
AuGgZlyc3luYzovL3JlcG9zaXRvcnkubGFjbmljLm5ldC9ycGtpL2xhY25pYy9EMDREOT
I2QkM4Rjc4REE2QkRFQjkwMUNFNTAyMzVFOUY3RkRCNkFENERGNDJFOURBMkYzQzQ5OTQ
1ODFDQzVFLzAvNkQyRkE5NEY1MTMxRkVCQjM0NEMxMTQwNTkwRTFFNjU4QTQ5QTJEMy5t
ZnQwgeAEIAQz+QWjrEExD4P4TURGIDSwMttHxOY/xfOBDdY/H0hLAgII+wQUMABR7zArN
OA9uYIS2XiGnjSRB9YCAUgYDzIwMjUxMjAyMDUwOTU4WjCBjTCBigYIKwYBBQUHMAuGfn
JzeW5jOi8vcnBraS1yZXBvLnJlZ2lzdHJvLmJyL3JlcG8vNWd1ell1OURxc25rZnBZSjR
4MUI2N3l4QWlyUENKUXRBbTc3UVdEMTNtMXkvMC8zMDAwNTFFRjMwMkIzNEUwM0RCOTgy
MTJEOTc4ODY5RTM0OTEwN0Q2Lm1mdDCB0QQgBDVXRzdRUBIsb7FPiDRKRiBBl86bHb8AU
yl+zPkRemMCAgeEBBRGDFcREar8DVHl/eCCML94uJ5KSAICF1MYDzIwMjUxMjAyMDYwMD
Q5WjB+MHwGCCsGAQUFBzALhnByc3luYzovL3Jwa2kucmlwZS5uZXQvcmVwb3NpdG9yeS9
ERUZBVUxUL2U2LzA2OWU5NS0wYWMyLTRjMjctODJiNC1iZDJmZmY1Yjg4NDkvMS9SZ3hY
RVJHcV9BMVI1ZjNnZ2pDX2VMaWVTa2cubWZ0MIHRBCAEOqCaolOx/H4V5s+b6WiJx3L28
5SVC/sLtZrGj5AzYAICB4QEFJB6TRKSS1NX4wJnr+PFzHNkJBFYAgIRbBgPMjAyNTEyMD
IwNzAyMzZaMH4wfAYIKwYBBQUHMAuGcHJzeW5jOi8vcnBraS5yaXBlLm5ldC9yZXBvc2l
0b3J5L0RFRkFVTFQvNWEvYWVmNDRmLWNiZGYtNDEyMC04NGYxLTYyMWEyYmI0MGM2Ni8x
L2tIcE5FcEpMVTFmakFtZXY0OFhNYzJRa0VWZy5tZnQwgdEEIAQ8vr7Ls5661bYCf/SZx
ZWOmSPSUde+6bval/LAq69rAgIHzgQUXGiieXadGT3z+XgdK6TB2Sd7T9YCAgWGGA8yMD
I1MTIwMjAzMDEzMVowfjB8BggrBgEFBQcwC4ZwcnN5bmM6Ly9ycGtpLnJpcGUubmV0L3J
lcG9zaXRvcnkvREVGQVVMVC81Mi9mNWM5NmEtYjcwZi00MTllLTgyNmYtMTUzOThiYTVi
MGU3LzEvWEdpaWVYYWRHVDN6LVhnZEs2VEIyU2Q3VDlZLm1mdBgPMjAyNTEyMDIwNzAyN
TlaBCAa+M3kk2YLjUlmoTPOBY3VgMgCYTMWK2zsQ5OMMYk/0aKCAWowggFmMIIBQDBkAg
EHMF8wSAQCAAEwQjAJAwQAwCNeAgEgMAkDBADAQysCASAwCQMEAMIgRQIBIDAJAwQBwiD
aAgEgMAkDBADCIooCASAwCQMEAcI9XAIBIDATBAIAAjANMAsDBQMqCztAAgIAgDCBmwIC
IFswgZQwdgQCAAEwcDAGAwQAW9AiMAYDBABejvAwBgMEA16O8DAGAwQAXo7xMAYDBABej
vIwBgMEAF6O9DAGAwQAXo71MAYDBABejvYwBgMEAF6O9zAGAwQAuTTgMAYDBAK5NOAwBg
MEALk04TAGAwQAuTTiMAYDBAC5NOMwGgQCAAIwFDAJAwcAIAEGeAaIMAcDBQAqAgiYMDo
CAjzKMDQwMgQCAAIwLDAJAwcAIAEGfCCMMAkDBwAgAQcoGAgwCQMHACoOskAAADAJAwcA
Kg6yQAEYBCCShx56LQOE9StolvwkWwoCtU+iZ/GFMY3zlgR3WYpwnKOBjDCBiTBlMAoCA
ghJMAQCAg0FMAkCAhGMMAMCAQAwDwICEfkwCQICIGoCAwDjAzAjAgIZGDAdAgIArgICBP
kCAgUTAgIZPQICGmoCAhquAgMCJ4kwFgICGncwEAICAK4CAhg8AgIbGwICMuYEICz1Hxj
/8Ur8yZsJDt5IGPn/pGKgaURkFZUkoheP7OiDpFIwUDAsBBToVSsf1tGk9+QExtjlaA0e
vBY/wwQU/Iqcs+0YThfTDuoeD6dhXOSxr0cEICwfZLVoC974XWm5we/yGi0/BBPizd8TA
BVgCi+3yVUupYIBGTCCARUwgfAwge0CAjzKMIHmMHEEFF1CUOLYHURI2KKe/OkdKf8HXs
niMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEgFcjQ/g//LAQerAH2Mpp+GucoDAGBbh
IqD33wNPsXxnAGb+mtZ7XQrVO9DQ6UlAShtig5+QfEKpTtFgiqfiAFTBxBBS+iJtV0Lc3
OX11xJ9IW4WPqYrRHzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOBcSa9J9m7sdbl9R
L5fkFsGWLyGnT4y7hV9psairgBlISp6+1Syw4KxPvpfaeXh9pFkzVQDdthVFN3W/0SqRN
sEILpftEnO+2ugDzYSeWKi7qboZ/6FErvdrenG5Li8FsHS
</sourcecode>
      <t>
        It decodes as follows:
      </t>
      <sourcecode anchor="tv-decode" type="txt" originalSrc="testvector.decode.fold">=============== NOTE: '\' line wrapping per RFC 8792 ================

$ rpki-client -f example.ccr
File:                   example.ccr
Hash identifier:        dTmqYyAdIR9bqR3nfaVLA3iRx8WdAbqGu70Nbc0cW5M=
CCR produced at:        Tue 02 Dec 2025 09:20:15 +0000
Manifest state hash:    MUFGOENERTQ5MzY2MEI4RDQ5NjZBMTMzQ0UwNThERDU=
Manifest last update:   Tue 02 Dec 2025 07:02:59 +0000
Manifest instances:
                        hash:BCD1f7kpEx3/fWt8AIScJGkWN5Y6hyfm/7fdxlU\
XrJU= size:2143 aki:E52D8B5CBA7C2D2B8AF046EB7F310105AC0C09AC seqnum:\
0552 thisupdate:1764633688 sia:rsync://rpki.ripe.net/repository/DEFA\
ULT/b4/d4f83d-fb53-424f-851d-c0d062a75354/1/5S2LXLp8LSuK8EbrfzEBBawM\
Caw.mft
                        hash:BCGPGrsQL4zgtzBTVG/hZHOpw060Mee/dyYrt9q\
pObQ= size:1924 aki:95AE8BD33249CF1ED5F0D4398147EFD32D25421A seqnum:\
0EC6 thisupdate:1764658979 sia:rsync://rpki.ripe.net/repository/DEFA\
ULT/1f/e27d9b-931a-488b-ac35-8ffbd6c73bf5/1/la6L0zJJzx7V8NQ5gUfv0y0l\
Qho.mft
                        hash:BCHnZyxReuJ8T3Z3bnRUnl+SlnGcINUFjyOMA0R\
Ew74= size:1924 aki:195FA8330252A07F250E51D8E474BB38D7DC3B9A seqnum:\
0573 thisupdate:1764644463 sia:rsync://rpki.ripe.net/repository/DEFA\
ULT/cd/e9b0e0-f4b6-46da-aff8-be7087dbf536/1/GV-oMwJSoH8lDlHY5HS7ONfc\
O5o.mft
                        hash:BCZpVcM4Gr/Vw6j16n9H1o062ZUyNfrOcZyk25p\
L6Ts= size:1998 aki:234B449894589D16F676BFF282ABEDAA56CC7B8D seqnum:\
0792 thisupdate:1764633690 sia:rsync://rpki.ripe.net/repository/DEFA\
ULT/0d/3318d9-5669-4920-a55c-73a63b259beb/1/I0tEmJRYnRb2dr_ygqvtqlbM\
e40.mft
                        hash:BCZyC2zRKpEKATxdQJWfkAJYk9PjPSresJvSkg2\
dJqM= size:1924 aki:4B177C450D2035067BAA26920B8A4BD36C7B3314 seqnum:\
0E69 thisupdate:1764658969 sia:rsync://rpki.ripe.net/repository/DEFA\
ULT/99/5a6aad-a4c7-43b9-8a9e-8d7b736a695c/1/Sxd8RQ0gNQZ7qiaSC4pL02x7\
MxQ.mft
                        hash:BCagCSWmdO3mC73CYFmilUBUD1aB6UbauZo8WDB\
N8LM= size:1998 aki:20D4BD499F58494AC0E82263B5520A2C64D6477E seqnum:\
16E8 thisupdate:1764633693 sia:rsync://rpki.ripe.net/repository/DEFA\
ULT/95/af601e-c2bf-4a6a-aa32-d2ee15399d06/1/INS9SZ9YSUrA6CJjtVIKLGTW\
R34.mft
                        hash:BCbaSy/4iRonG8BvQfiWawECzgrHTbA8ROpPKxG\
WEvY= size:4843 aki:3EEEBB946A8D21D4083C93DC09CEE557BB2AC32E seqnum:\
02E5 thisupdate:1764630764 sia:rsync://rsync.paas.rpki.ripe.net/repo\
sitory/6ff7a989-ecdf-43d6-86e1-f6c3935b9b3d/4/3EEEBB946A8D21D4083C93\
DC09CEE557BB2AC32E.mft subordinates:04C92D9B1C8307B70C47290166D5989C\
EFABDCC4
                        hash:BCl0MQpE86B5mYTCdjobXkfXd+yKruym1EG8O6o\
52hk= size:1924 aki:5337DDFA6530FCC67F76937DEBE3D8208CB9902C seqnum:\
08F9 thisupdate:1764637299 sia:rsync://rpki.ripe.net/repository/DEFA\
ULT/80/2c6c2b-54d6-431d-9c06-dde36574b178/1/Uzfd-mUw_MZ_dpN96-PYIIy5\
kCw.mft
                        hash:BCvgAbNsxSfa0tsOe20NprPfe1oRMQxmkYN3UUv\
+jac= size:1999 aki:D268D9A2A645D7CC2FD253B3670408055E56FFF9 seqnum:\
0E39 thisupdate:1764658974 sia:rsync://rpki.ripe.net/repository/DEFA\
ULT/e7/44038b-8031-44e0-91c4-cc5676c7de9f/1/0mjZoqZF18wv0lOzZwQIBV5W\
__k.mft
                        hash:BCxWGtTKIXYfXpaOGDuL88Q+TxbDpEzamsEBWPm\
HlIQ= size:1924 aki:BA8D6798BDD0B2B8805D43B3455F76739B946F1D seqnum:\
16E6 thisupdate:1764658954 sia:rsync://rpki.ripe.net/repository/DEFA\
ULT/ec/68b57b-d18d-4785-97b0-ec56c0b081ae/1/uo1nmL3QsriAXUOzRV92c5uU\
bx0.mft
                        hash:BDNmKXoKbp/8++wT92tazKm/IBKJL2D8/tC14qP\
Sifo= size:2323 aki:6D2FA94F5131FEBB344C1140590E1E658A49A2D3 seqnum:\
0141 thisupdate:1764618838 sia:rsync://repository.lacnic.net/rpki/la\
cnic/D04D926BC8F78DA6BDEB901CE50235E9F7FDB6AD4DF42E9DA2F3C4994581CC5\
E/0/6D2FA94F5131FEBB344C1140590E1E658A49A2D3.mft
                        hash:BDP5BaOsQTEPg/hNREYgNLAy20fE5j/F84EN1j8\
fSEs= size:2299 aki:300051EF302B34E03DB98212D978869E349107D6 seqnum:\
48 thisupdate:1764652198 sia:rsync://rpki-repo.registro.br/repo/5guz\
Yu9DqsnkfpYJ4x1B67yxAirPCJQtAm77QWD13m1y/0/300051EF302B34E03DB98212D\
978869E349107D6.mft
                        hash:BDVXRzdRUBIsb7FPiDRKRiBBl86bHb8AUyl+zPk\
RemM= size:1924 aki:460C571111AAFC0D51E5FDE08230BF78B89E4A48 seqnum:\
1753 thisupdate:1764655249 sia:rsync://rpki.ripe.net/repository/DEFA\
ULT/e6/069e95-0ac2-4c27-82b4-bd2fff5b8849/1/RgxXERGq_A1R5f3ggjC_eLie\
Skg.mft
                        hash:BDqgmqJTsfx+FebPm+loicdy9vOUlQv7C7Waxo+\
QM2A= size:1924 aki:907A4D12924B5357E30267AFE3C5CC7364241158 seqnum:\
116C thisupdate:1764658956 sia:rsync://rpki.ripe.net/repository/DEFA\
ULT/5a/aef44f-cbdf-4120-84f1-621a2bb40c66/1/kHpNEpJLU1fjAmev48XMc2Qk\
EVg.mft
                        hash:BDy+vsuznrrVtgJ/9JnFlY6ZI9JR177pu9qX8sC\
rr2s= size:1998 aki:5C68A279769D193DF3F9781D2BA4C1D9277B4FD6 seqnum:\
0586 thisupdate:1764644491 sia:rsync://rpki.ripe.net/repository/DEFA\
ULT/52/f5c96a-b70f-419e-826f-15398ba5b0e7/1/XGiieXadGT3z-XgdK6TB2Sd7\
T9Y.mft
ROA payload state hash: OTI4NzFFN0EyRDAzODRGNTJCNjg5NkZDMjQ1QjBBMDI=
ROA payload entries:
                        192.35.94.0/24-32 AS 7
                        192.67.43.0/24-32 AS 7
                        194.32.69.0/24-32 AS 7
                        194.32.218.0/23-32 AS 7
                        194.34.138.0/24-32 AS 7
                        194.61.92.0/23-32 AS 7
                        2a0b:3b40::/29-128 AS 7
                        91.208.34.0/24 AS 8283
                        94.142.240.0/24 AS 8283
                        94.142.240.0/21 AS 8283
                        94.142.241.0/24 AS 8283
                        94.142.242.0/24 AS 8283
                        94.142.244.0/24 AS 8283
                        94.142.245.0/24 AS 8283
                        94.142.246.0/24 AS 8283
                        94.142.247.0/24 AS 8283
                        185.52.224.0/24 AS 8283
                        185.52.224.0/22 AS 8283
                        185.52.225.0/24 AS 8283
                        185.52.226.0/24 AS 8283
                        185.52.227.0/24 AS 8283
                        2001:678:688::/48 AS 8283
                        2a02:898::/32 AS 8283
                        2001:67c:208c::/48 AS 15562
                        2001:728:1808::/48 AS 15562
                        2a0e:b240::/48 AS 15562
                        2a0e:b240:118::/48 AS 15562
ASPA payload state hash:MkNGNTFGMThGRkYxNEFGQ0M5OUIwOTBFREU0ODE4Rjk=
ASPA payload entries:
                        customer: 2121 providers: 3333
                        customer: 4492 providers: 0
                        customer: 4601 providers: 8298, 58115
                        customer: 6424 providers: 174, 1273, 1299, 6\
461, 6762, 6830, 141193
                        customer: 6775 providers: 174, 6204, 6939, 1\
3030
Trust anchor state hash:MkMxRjY0QjU2ODBCREVGODVENjlCOUMxRUZGMjFBMkQ=
Trust anchor keyids:    E8552B1FD6D1A4F7E404C6D8E5680D1EBC163FC3, FC\
8A9CB3ED184E17D30EEA1E0FA7615CE4B1AF47
Router key state hash:  QkE1RkI0NDlDRUZCNkJBMDBGMzYxMjc5NjJBMkVFQTY=
Router keys:
                        asid:15562 ski:5D4250E2D81D4448D8A29EFCE91D2\
9FF075EC9E2 pubkey:MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEgFcjQ/g//LAQe\
rAH2Mpp+GucoDAGBbhIqD33wNPsXxnAGb+mtZ7XQrVO9DQ6UlAShtig5+QfEKpTtFgiq\
fiAFQ==
                        asid:15562 ski:BE889B55D0B737397D75C49F485B8\
58FA98AD11F pubkey:MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE4FxJr0n2bux1u\
X1Evl+QWwZYvIadPjLuFX2mxqKuAGUhKnr7VLLDgrE++l9p5eH2kWTNVAN22FUU3db/R\
KpE2w==
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 and deserializer implementation based on <xref target="rpkitouch"/> was provided by Job Snijders.
        </li>
      </ul>
    </section>
  </back>
</rfc>
