<?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-rsc-08" ipr="trust200902" xml:lang="en" sortRefs="true" submissionType="IETF" consensus="true" version="3">
  <front>
    <title abbrev="RPKI Signed Checklists">
      A profile for Resource Public Key Infrastructure (RPKI) Signed Checklists (RSC)
    </title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-sidrops-rpki-rsc-08"/>
    <author fullname="Job Snijders" initials="J." surname="Snijders">
      <organization>Fastly</organization>
      <address>
        <postal>
          <street/>
          <code/>
          <city>Amsterdam</city>
          <country>Netherlands</country>
        </postal>
        <email>job@fastly.com</email>
      </address>
    </author>
    <author fullname="Tom Harrison" initials="T." surname="Harrison">
      <organization abbrev="APNIC">Asia Pacific Network Information Centre</organization>
      <address>
        <postal>
          <street>6 Cordelia St</street>
          <city>South Brisbane</city>
          <code>4101</code>
          <country>Australia</country>
          <region>QLD</region>
        </postal>
        <phone/>
        <email>tomh@apnic.net</email>
      </address>
    </author>
    <author fullname="Ben Maddison" initials="B." surname="Maddison">
      <organization abbrev="Workonline">Workonline Communications</organization>
      <address>
        <postal>
          <street/>
          <city>Cape Town</city>
          <code/>
          <country>South Africa</country>
        </postal>
        <email>benm@workonline.africa</email>
      </address>
    </author>
    <abstract>
      <t>
        This document defines a Cryptographic Message Syntax (CMS) profile for a general purpose listing of checksums (a 'checklist'), for use with the Resource Public Key Infrastructure (RPKI).
        The objective is to allow an attestation, in the form of a listing of one or more checksums of arbitrary digital objects (files), to be signed "with resources", and for validation to provide a means to confirm a specific Internet Resource Holder produced the Signed Checklist.
        The profile is intended to provide for the signing of an arbitrary checksum listing with a specific set of Internet Number Resources.
      </t>
    </abstract>
    <note>
      <name>Requirements Language</name>
      <t>
        The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
        NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
        "MAY", and "OPTIONAL" in this document are to be interpreted as
        described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all
        capitals, as shown here.
      </t>
    </note>
  </front>
  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>
        This document defines a Cryptographic Message Syntax (CMS) <xref target="RFC5652"/> profile for a general purpose listing of checksums (a 'checklist'), for use with the Resource Public Key Infrastructure (RPKI) <xref target="RFC6480"/>.
        The objective is to allow an attestation, in the form of a listing of one or more checksums of arbitrary files, to be signed "with resources", and for validation to provide a means to confirm a given Internet Resource Holder produced the RPKI Signed Checklist (RSC).
        The profile is intended to provide for the signing of a checksum listing with a specific set of Internet Number Resources.
      </t>
      <t>
        Signed Checklists are expected to facilitate inter-domain business use-cases which depend on an ability to verify resource holdership.
        RPKI-based validation processes are expected to become the industry norm for automated Bring Your Own IP (BYOIP) on-boarding or establishment of physical interconnection between Autonomous Systems.
      </t>
      <t>
        The RSC concept borrows heavily from <xref target="I-D.ietf-sidrops-rpki-rta">RTA</xref>, Manifests <xref target="RFC6486"/>, and OpenBSD's <xref target="signify"/> utility.
        The main difference between RSC and RTA is that the RTA profile allows multiple signers to attest a single digital object through a checksum of its content, while the RSC profile allows a single signer to attest the existence of multiple digital objects.
        A single signer profile is considered a simplification for both implementers and operators.
      </t>
    </section>
    <section anchor="profile">
      <name>RSC Profile and Distribution</name>
      <t>
        RSC follows the Signed Object Template for the RPKI <xref target="RFC6488"/> with one exception.
        Because RSCs MUST NOT be distributed through the global RPKI Repository system, the Subject Information Access (SIA) extension MUST be omitted from the RSC's X.509 End-Entity (EE) certificate.
      </t>
      <t>
        What constitutes suitable transport for RSC files is deliberately unspecified.
        It might be a USB stick, a web interface secured with conventional HTTPS, PGP-signed email, a T-shirt printed with a QR code, or a carrier pigeon.
      </t>
      <section title="RSC End-Entity Certificates">
        <t>
          The CA MUST only sign one RSC with each EE Certificate, and MUST generate a new key pair for each new RSC.
          This form of use of the associated EE Certificate is termed a "one-time-use" EE certificate <xref target="RFC6487" section="3"/>.
        </t>
      </section>
    </section>
    <section anchor="content">
      <name>The RSC ContentType</name>
      <t>
        The ContentType for an RSC is defined as rpkiSignedChecklist, and has the numerical value of 1.2.840.113549.1.9.16.1.48.
      </t>
      <t>
        This OID MUST appear both within the eContentType in the encapContentInfo object as well as the ContentType signed attribute in the signerInfo object (see <xref target="RFC6488"/>).
      </t>
    </section>
    <section anchor="econtent">
      <name>The RSC eContent</name>
      <t>
        The content of an RSC indicates that a checklist for arbitrary digital objects has been signed "with resources".
        An RSC is formally defined as:
      </t>
      <sourcecode type="asn.1" originalSrc="RpkiSignedChecklist-2022.asn">RpkiSignedChecklist-2022
  { iso(1) member-body(2) us(840) rsadsi(113549)
    pkcs(1) pkcs9(9) smime(16) mod(0) TBD }

DEFINITIONS EXPLICIT TAGS ::=
BEGIN

IMPORTS
  CONTENT-TYPE, Digest, DigestAlgorithmIdentifier
  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) }

  IPAddressOrRange, ASIdOrRange
  FROM IPAddrAndASCertExtn -- in [RFC3779]
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) mod(0)
      id-mod-ip-addr-and-as-ident(30) } ;

ct-rpkiSignedChecklist CONTENT-TYPE ::=
    { TYPE RpkiSignedChecklist IDENTIFIED BY
      id-ct-signedChecklist }

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

RpkiSignedChecklist ::= SEQUENCE {
  version  [0]          INTEGER DEFAULT 0,
  resources             ResourceBlock,
  digestAlgorithm       DigestAlgorithmIdentifier,
  checkList             SEQUENCE (SIZE(1..MAX)) OF FileNameAndHash }

FileNameAndHash ::= SEQUENCE {
  fileName        PortableFilename OPTIONAL,
  hash            Digest }

PortableFilename ::= IA5String (FROM("a".."z" | "A".."Z" | "0".."9" | "." | "_" | "-"))

ResourceBlock ::= SEQUENCE {
  asID         [0]       ConstrainedASIdentifiers OPTIONAL,
  ipAddrBlocks [1]       ConstrainedIPAddrBlocks OPTIONAL }
  -- at least one of asID or ipAddrBlocks MUST be present
  ( WITH COMPONENTS { ..., asID PRESENT} |
    WITH COMPONENTS { ..., ipAddrBlocks PRESENT } )

ConstrainedIPAddrBlocks     ::= SEQUENCE (SIZE(1..MAX)) OF ConstrainedIPAddressFamily

ConstrainedIPAddressFamily   ::= SEQUENCE {
  addressFamily        OCTET STRING (SIZE(2)),
  addressesOrRanges    SEQUENCE (SIZE(1..MAX)) OF IPAddressOrRange }

ConstrainedASIdentifiers    ::= SEQUENCE {
  asnum               [0] SEQUENCE (SIZE(1..MAX)) OF ASIdOrRange }

END
</sourcecode>
      <section>
        <name>version</name>
        <t>
          The version number of the RpkiSignedChecklist MUST be 0.
        </t>
      </section>
      <section>
        <name>resources</name>
        <t>
          The resources contained here are the resources used to mark the attestation, and MUST be a subset of the set of resources listed by the EE Certificate carried in the CMS certificates field.
        </t>
        <t>
          If the asID field is present, it MUST contain an instance of ConstrainedASIdentifiers.
        </t>
        <t>
          If the ipAddrBlocks field is present, it MUST contain an instance of ConstrainedIPAddrBlocks.
        </t>
        <t>
          Each of ConstrainedASIdentifiers and ConstrainedIPAddrBlocks are specified such that the resulting DER-encoded data instances are binary compatible with, respectively, ASIdentifiers and IPAddrBlocks defined in <xref target="RFC3779"/>.
        </t>
        <t>
          Implementations encountering decoding errors whilst attempting to read DER-encoded data using this specification SHOULD be aware of the possibility that the data may have been encoded using an implementation intended for use with <xref target="RFC3779"/>. Such data may contain elements prohibited by the current specification.
        </t>
        <t>
          Attempting to decode the errored data using the more permissive specification conatained in <xref target="RFC3779"/> may enable implementors to gather additional context for use when reporting errors to the user.
        </t>
        <t>
          However, implementations MUST NOT ignore errors resulting from the more restrictive definitions contained herein: in particular, such errors MUST cause the validation procedure described in <xref target="validation"/> to fail.
        </t>
        <section>
          <name>ConstrainedASIdentifiers type</name>
          <t>
            ConstrainedASIdentifiers is a SEQUENCE, constisting of a single field "asnum", itself containing a SEQUENCE OF one or more ASIdOrRange instances as defined in <xref target="RFC3779"/>.
          </t>
          <t>
            ConstrainedASIdentifiers is defined such that the resulting DER-encoded data are binary compatible with ASIdentifiers defined in <xref target="RFC3779"/>.
          </t>
        </section>
        <section>
          <name>ConstrainedIPAddrBlocks type</name>
          <t>
            ConstrainedIPAddrBlocks is a SEQUENCE OF one or more instances of ConstrainedIPAddressFamily.
          </t>
          <t>
            There MUST be only one instance of ConstrainedIPAddressFamily per unique AFI.
          </t>
          <t>
            The elements of ConstrainedIPAddressFamily MUST be ordered by ascending addressFamily values (treating the octets as unsigned numbers).
            Thus, when both IPv4 and IPv6 addresses are specified, the IPv4 addresses MUST precede the IPv6 addresses (since the IPv4 AFI of 0001 is less than the IPv6 AFI of 0002).
          </t>
          <t>
            ConstrainedIPAddrBlocks is defined such that the resulting DER-encoded data are binary compatible with IPAddrBlocks defined in <xref target="RFC3779"/>.
          </t>
          <section>
            <name>ConstrainedIPAddressFamily type</name>
            <section>
              <name>addressFamily field</name>
              <t>
                The addressFamily field is an OCTET STRING containing a two-octet Address Family Identifier (AFI), in network byte order.
                Unlike <xref target="RFC3779">IPAddrBlocks</xref>, a third octet containing a SAFI MUST NOT be present.
                AFIs are specified in <xref target="ADDRESS-FAMILY-NUMBERS"/>.
              </t>
            </section>
            <section>
              <name>addressesOrRanges field</name>
              <t>
                The addressesOrRanges element is a SEQUENCE OF one or more IPAddressOrRange values, as defined in <xref target="RFC3779"/>.
                The rules for canonicalization and encoding defined in <xref target="RFC3779" section="2.2.3.6"/> apply to the value of addressesOrRanges.
              </t>
            </section>
          </section>
        </section>
      </section>
      <section>
        <name>digestAlgorithm</name>
        <t>
          The digest algorithm used to create the message digest of the attested digital object.
          This algorithm MUST be a hashing algorithm defined in <xref target="RFC7935"/>.
        </t>
      </section>
      <section>
        <name>checkList</name>
        <t>
          This field is a SEQUENCE OF one or more FileNameAndHash values.
          There is one FileNameAndHash entry for each digital object referenced on the Signed Checklist.
        </t>
        <section anchor="FileNameAndHash">
          <name>FileNameAndHash</name>
          <t>
            Each FileNameAndHash is an ordered pair of the name of the directory entry containing the digital object and the message digest of the digital object.
          </t>
          <t>
            The fileName field is OPTIONAL.
            This is to allow Signed Checklists to be used in a "stand-alone" fashion in which nameless digital objects are addressed directly through their respective message digest rather than through a file system abstraction.
          </t>
          <t>
            If the fileName field is present then its value:
          </t>
          <ul>
            <li>
              MUST contain only characters specified in the Portable Filename Character Set as defined in <xref target="POSIX"/>.
            </li>
            <li>
              MUST be unique with respect to the other FileNameAndHash elements of checkList for which the fileName field is also present.
            </li>
          </ul>
          <t>
            Conversely, if the fileName field is omitted, then the value of the hash field MUST be unique with respect to the other FileNameAndHash elements of checkList for which the fileName field is also omitted.
          </t>
        </section>
      </section>
    </section>
    <section anchor="validation">
      <name>RSC Validation</name>
      <t>
        Before a Relying Party can use an RSC to validate a set of digital objects, the Relying Party MUST first validate the RSC.
        To validate an RSC, the Relying Party MUST perform all the validation checks specified in <xref target="RFC6488"/> (except checking for the presence of a SIA extension, which MUST NOT be present in the EE X.509 certificate <xref target="RFC6487" section="4.8.8.2"/>), and perform the following additional RSC-specific validation steps:
      </t>
      <ol>
        <li>
          The contents of the CMS eContent field MUST conform to the constraints described in <xref target="econtent"/>. In particular, for each FileNameAndHash element in the checkList field, its contents MUST conform to the constraints described in <xref target="FileNameAndHash"/>.
        </li>
        <li>
          If the asID field is present within the contents of the resources field, then the AS Resources extension <xref target="RFC3779"/> MUST be present in the EE certificate contained in the CMS certificates field. The AS identifiers present in the resources field MUST be a subset of those present in the certificate extension.
        </li>
        <li>
          If the ipAddrBlocks field is present within the contents of the resources field, then the IP Resources extension <xref target="RFC3779"/> MUST be present in the EE certificate contained in the CMS certificates field. The IP address resources present in the resources field MUST be a subset of those present in the certificate extension.
        </li>
      </ol>
    </section>
    <section>
      <name>Verifying files or data using RSC</name>
      <t>
        To verify a set of digital objects with an RSC:
      </t>
      <ul>
        <li>
          The RSC MUST be validated acording to the procedure described in <xref target="validation"/>. If the RSC cannot be validated, verification MUST fail and the error SHOULD be reported to the user.
        </li>
        <li>
          <t>For every digital object to be verified:</t>
          <ol>
            <li anchor="mode">
              <t>
                If the verification procedure is provided with a file name for the object being verified (e.g. because the user has provided a file system path from which to read the object) then verification SHOULD proceed in "filename-aware" mode. Otherwise, verification SHOULD proceed in "filename-unaware" mode.
              </t>
              <t>
                Implementations MAY provide an option to override the verification mode, for example to ignore the fact that the object is to be read from a file.
              </t>
            </li>
            <li anchor="hash">
              <t>
                The message digest MUST be computed from the file contents or data using the digest algorithm specified in the digestAlgorithm field of the RSC.
              </t>
            </li>
            <li anchor="match_hash">
              <t>
                The digest computed in step <xref target="hash" format="counter"/> MUST be compared to the value appearing in the hash field of all FileNameAndHash elements of the checkList field of the RSC.
              </t>
              <t>
                One or more FileNameAndHash elements MUST be found with a matching hash value, otherwise verification MUST fail and the error SHOULD be reported to the user.
              </t>
            </li>
            <li>
              <t>
                If the mode selected in step <xref target="mode" format="counter"/> is "filename-aware" then exactly one of the FileNameAndHash elements matched in step <xref target="match_hash" format="counter"/> MUST contain a fileName field value exactly matching the file name of the object being verified.
              </t>
              <t>
                Alternatively, if the mode selected in step <xref target="mode" format="counter"/> is "filename-unaware" then exactly one of the FileNameAndHash elements matched in step <xref target="match_hash" format="counter"/> MUST have the fileName field omitted.
              </t>
              <t>
                Otherwise, verification MUST fail, and the error SHOULD be reported to the user.
              </t>
            </li>
          </ol>
        </li>
      </ul>
      <t>
        Note that in the above procedure, not all elements of checkList necessarily need be used. That is, it is not an error if the length of checkList is greater than the size of the set of digital objects to be verified. However, in this situation, implementations SHOULD issue a warning to the user, allowing for corrective action to be taken if necessary.
      </t>
    </section>
    <section>
      <name>Operational Considerations</name>
      <t>
        When creating digital objects of a plain-text nature (such as ASCII, UTF-8, HTML, Javascript, XML, etc) it is RECOMMENDED to convert such objects into a lossless compressed form.
        Distributing plain-text objects within a compression envelope (such as <xref target="RFC1952">GZIP</xref>) might help avoid unexpected canonicalization at intermediate systems (which in turn would lead to checksum verification errors).
        Validator implementations are expected to treat a checksummed digital object as string of arbitrary single octets.
      </t>
      <t>
        If a fileName field is present, but no referenced digital object has a filename that matches the content of that field, a validator implementation SHOULD compare the message digest of each digital object to the value from the hash field of the associated FileNameAndHash, and report matches to the client for further consideration.
      </t>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>
        Relying parties are hereby warned that the data in a RPKI Signed Checklist is self-asserted.
        When determining the meaning of any data contained in an RPKI Signed Checklist, Relying Parties MUST NOT make any assumptions about the signer beyond the fact that it had sufficient control of the issuing CA to create the object.
        These data have not been verified by the Certificate Authority (CA) that issued the CA certificate to the entity that issued the EE Certificate used to validate the Signed Checklist.
      </t>
      <t>
        RPKI Certificates are not bound to real world identities, see <xref target="I-D.ymbk-sidrops-rpki-has-no-identity"/> for an elaboration.
        Relying Parties can only associate real world entities to Internet Number Resources by additionally consulting an exogenous authority.
        Signed Checklists are a tool to communicate assertions 'signed with Internet Number Resources', not about any other aspect of the resource holder's business operations such as the identity of the resource holder itself.
      </t>
      <t>
        RSC objects are not distributed through the RPKI Repository system.
        From this, it follows that third parties who do not have a copy of a given RSC, may not be aware of the existence of that RSC.
        Since RSC objects use EE Certificates, but all other currently defined types of RPKI object profiles are published in public CA repositories, an observer may infer from discrepancies in the Repository that RSC object(s) may exist.
        For example, if a CA does not use random serial numbers for Certificates, an observer could detect gaps between the serial numbers of the published EE Certificates.
        Similarly, if the CA includes a serial number on a CRL that does not match any published object, an observer could postulate an RSC EE Certificate was revoked.
      </t>
      <t>
        Conversely, a gap in serial numbers does not imply that an RSC exists.
        Nor does an arbitrary (to the RP unknown) serial in a CRL imply an RSC object exists: the implicitly referenced object might not be a RSC, it might never have been published, or was revoked before it was visible to RPs.
        In general, it is not possible to confidently infer the existence or non-existence of RSCs from the Repository state without access to a given RSC.
      </t>
      <t>
        While an one-time-use EE Certificate must only be used to generate and sign a single RSC object, CAs technically are not restricted from generating and signing multiple different RSC objects with a single keypair.
        Any RSC objects sharing the same EE Certificate can not be revoked individually.
      </t>
    </section>
    <section removeInRFC="true">
      <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>
          A signer and validator implementation <xref target="rpki-rsc-demo"/> written in Perl based on OpenSSL was provided by Tom Harrison from APNIC.
        </li>
        <li>
          A signer implementation <xref target="rpkimancer"/> written in Python was developed by Ben Maddison.
        </li>
        <li>
          Example .sig files were created by Job Snijders with the use of OpenSSL.
        </li>
        <li>
          A validator implementation based on OpenBSD rpki-client and LibreSSL was developed by Job Snijders.
        </li>
        <li>
          A validator implementation <xref target="FORT"/> based on the FORT validator was developed by Alberto Leiva for a previous version of this specification.
        </li>
      </ul>
    </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>
          The IANA has permanently allocated for this document in the SMI Security for S/MIME CMS Content Type (1.2.840.113549.1.9.16.1) registry:
        </t>
        <artwork>
<![CDATA[
Decimal   Description             References
---------------------------------------------------------------
  48      id-ct-signedChecklist   [draft-ietf-sidrops-rpki-rsc]
]]>
        </artwork>
        <t>
          Upon publication of this document, IANA is requested to reference the RFC publication instead of this draft.
        </t>
      </section>
      <section>
        <name>RPKI Signed Objects sub-registry</name>
        <t>
          The IANA is requested to register the OID for the RPKI Signed Checklist in the registry created by <xref target="RFC6488"/> as following:
        </t>
        <artwork>
<![CDATA[
Name              OID                         Specification
-------------------------------------------------------------
Signed Checklist  1.2.840.113549.1.9.16.1.48  [draft-ietf-sidrops-rpki-rsc]
]]>
        </artwork>
      </section>
      <section>
        <name>File Extension</name>
        <t>
          The IANA is requested to add an item for the Signed Checklist file extension to the "RPKI Repository Name Scheme" registry created by <xref target="RFC6481"/> as follows:
        </t>
        <artwork>
<![CDATA[
Filename Extension  RPKI Object       Reference
-------------------------------------------------------------------
       .sig         Signed Checklist  [draft-ietf-sidrops-rpki-rsc]
]]>
        </artwork>
      </section>
      <section>
        <name>SMI Security for S/MIME Module Identifier (1.2.840.113549.1.9.16.0)</name>
        <t>
          The IANA is requested to add an item to the "SMI Security for S/MIME Module Identifier" registry as follows:
        </t>
        <artwork>
<![CDATA[
Decimal  Description                      References
-----------------------------------------------------------------------
    TBD  id-mod-rpkiSignedChecklist-2021  [draft-ietf-sidrops-rpki-rsc]
]]>
        </artwork>
      </section>
      <section>
        <name>Media Type</name>
        <t>
          The IANA is requested to register the media type application/rpki-checklist in the Provisional Standard Media Type registry as follows:
        </t>
        <artwork>
<![CDATA[
   Type name: application
   Subtype name: rpki-checklist
   Required parameters: None
   Optional parameters: None
   Encoding considerations: binary
   Security considerations: Carries an RPKI Signed Checklist
                            [RFC-TBD].
   Interoperability considerations: None
   Published specification: This document.
   Applications that use this media type: RPKI operators.
   Additional information:
     Content: This media type is a signed object, as defined
         in [RFC6488], which contains a payload of a list of
         checksums as defined above in this document.
     Magic number(s): None
     File extension(s): .sig
     Macintosh file type code(s):
   Person & email address to contact for further information:
     Job Snijders <job@fastly.com>
   Intended usage: COMMON
   Restrictions on usage: None
   Author: Job Snijders <job@fastly.com>
   Change controller: Job Snijders <job@fastly.com>
]]>
        </artwork>
      </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://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization/>
            </author>
            <date year="1997" month="March"/>
            <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="RFC3779" target="https://www.rfc-editor.org/info/rfc3779" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3779.xml">
          <front>
            <title>X.509 Extensions for IP Addresses and AS Identifiers</title>
            <author initials="C." surname="Lynn" fullname="C. Lynn">
              <organization/>
            </author>
            <author initials="S." surname="Kent" fullname="S. Kent">
              <organization/>
            </author>
            <author initials="K." surname="Seo" fullname="K. Seo">
              <organization/>
            </author>
            <date year="2004" month="June"/>
            <abstract>
              <t>This document defines two X.509 v3 certificate extensions.  The first binds a list of IP address blocks, or prefixes, to the subject of a certificate.  The second binds a list of autonomous system identifiers to the subject of a certificate.  These extensions may be used to convey the authorization of the subject to use the IP addresses and autonomous system identifiers contained in the extensions.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3779"/>
          <seriesInfo name="DOI" value="10.17487/RFC3779"/>
        </reference>
        <reference anchor="RFC5652" target="https://www.rfc-editor.org/info/rfc5652" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5652.xml">
          <front>
            <title>Cryptographic Message Syntax (CMS)</title>
            <author initials="R." surname="Housley" fullname="R. Housley">
              <organization/>
            </author>
            <date year="2009" month="September"/>
            <abstract>
              <t>This document describes the Cryptographic Message Syntax (CMS).  This syntax is used to digitally sign, digest, authenticate, or encrypt arbitrary message content.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="70"/>
          <seriesInfo name="RFC" value="5652"/>
          <seriesInfo name="DOI" value="10.17487/RFC5652"/>
        </reference>
        <reference anchor="RFC6481" target="https://www.rfc-editor.org/info/rfc6481" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6481.xml">
          <front>
            <title>A Profile for Resource Certificate Repository Structure</title>
            <author initials="G." surname="Huston" fullname="G. Huston">
              <organization/>
            </author>
            <author initials="R." surname="Loomans" fullname="R. Loomans">
              <organization/>
            </author>
            <author initials="G." surname="Michaelson" fullname="G. Michaelson">
              <organization/>
            </author>
            <date year="2012" month="February"/>
            <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="RFC6486" target="https://www.rfc-editor.org/info/rfc6486" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6486.xml">
          <front>
            <title>Manifests for the Resource Public Key Infrastructure (RPKI)</title>
            <author initials="R." surname="Austein" fullname="R. Austein">
              <organization/>
            </author>
            <author initials="G." surname="Huston" fullname="G. Huston">
              <organization/>
            </author>
            <author initials="S." surname="Kent" fullname="S. Kent">
              <organization/>
            </author>
            <author initials="M." surname="Lepinski" fullname="M. Lepinski">
              <organization/>
            </author>
            <date year="2012" month="February"/>
            <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 "stale" (valid) data and deletion of signed objects.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6486"/>
          <seriesInfo name="DOI" value="10.17487/RFC6486"/>
        </reference>
        <reference anchor="RFC6487" target="https://www.rfc-editor.org/info/rfc6487" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6487.xml">
          <front>
            <title>A Profile for X.509 PKIX Resource Certificates</title>
            <author initials="G." surname="Huston" fullname="G. Huston">
              <organization/>
            </author>
            <author initials="G." surname="Michaelson" fullname="G. Michaelson">
              <organization/>
            </author>
            <author initials="R." surname="Loomans" fullname="R. Loomans">
              <organization/>
            </author>
            <date year="2012" month="February"/>
            <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://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6488.xml">
          <front>
            <title>Signed Object Template for the Resource Public Key Infrastructure (RPKI)</title>
            <author initials="M." surname="Lepinski" fullname="M. Lepinski">
              <organization/>
            </author>
            <author initials="A." surname="Chi" fullname="A. Chi">
              <organization/>
            </author>
            <author initials="S." surname="Kent" fullname="S. Kent">
              <organization/>
            </author>
            <date year="2012" month="February"/>
            <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="RFC7935" target="https://www.rfc-editor.org/info/rfc7935" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7935.xml">
          <front>
            <title>The Profile for Algorithms and Key Sizes for Use in the Resource Public Key Infrastructure</title>
            <author initials="G." surname="Huston" fullname="G. Huston">
              <organization/>
            </author>
            <author initials="G." surname="Michaelson" fullname="G. Michaelson" role="editor">
              <organization/>
            </author>
            <date year="2016" month="August"/>
            <abstract>
              <t>This document specifies the algorithms, algorithms' parameters, asymmetric key formats, asymmetric key size, and signature format for the Resource Public Key Infrastructure (RPKI) subscribers that generate digital signatures on certificates, Certificate Revocation Lists (CRLs), Cryptographic Message Syntax (CMS) signed objects and certification requests as well as for the relying parties (RPs) that verify these digital signatures.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7935"/>
          <seriesInfo name="DOI" value="10.17487/RFC7935"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization/>
            </author>
            <date year="2017" month="May"/>
            <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 target="http://www.iana.org/assignments/address-family-numbers" anchor="ADDRESS-FAMILY-NUMBERS" xml:base="https://bib.ietf.org/public/rfc/bibxml-iana/reference.IANA.ADDRESS-FAMILY-NUMBERS.xml">
          <front>
            <title>Address Family Numbers</title>
            <author>
              <organization abbrev="IANA">Internet Assigned Numbers Authority</organization>
            </author>
            <date year="2021" month="October" day="19"/>
          </front>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="I-D.ietf-sidrops-rpki-rta" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.draft-ietf-sidrops-rpki-rta-00.xml">
          <front>
            <title>A profile for Resource Tagged Attestations (RTAs)</title>
            <author initials="G" surname="Michaelson" fullname="George Michaelson">
              <organization/>
            </author>
            <author initials="G" surname="Huston" fullname="Geoff Huston">
              <organization/>
            </author>
            <author initials="T" surname="Harrison" fullname="Tom Harrison">
              <organization/>
            </author>
            <author initials="T" surname="Bruijnzeels" fullname="Tim Bruijnzeels">
              <organization/>
            </author>
            <author initials="M" surname="Hoffmann" fullname="Martin Hoffmann">
              <organization/>
            </author>
            <date year="2021" month="January" day="21"/>
            <abstract>
              <t>This document defines a Cryptographic Message Syntax (CMS) profile for a general purpose Resource Tagged Attestation (RTA), for use with the Resource Public Key Infrastructure (RPKI).  The objective is to allow an attestation, in the form of an arbitrary digital object, to be signed "with resources", and for validation to provide an outcome of "valid with resources".  The profile is intended to provide for the signing of an attestation with an arbitrary set of resources.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-sidrops-rpki-rta-00"/>
          <format type="TXT" target="https://www.ietf.org/internet-drafts/draft-ietf-sidrops-rpki-rta-00.txt"/>
        </reference>
        <reference anchor="I-D.ymbk-sidrops-rpki-has-no-identity" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.I-D.ymbk-sidrops-rpki-has-no-identity-00.xml">
          <front>
            <title>The I in RPKI does not stand for Identity</title>
            <author initials="R." surname="Bush" fullname="Randy Bush">
         </author>
            <author initials="R." surname="Housley" fullname="Russ Housley">
              <organization>Vigil Security</organization>
            </author>
            <date month="March" day="16" year="2021"/>
            <abstract>
              <t>   There is a false notion that Internet Number Resources (INRs) in the
   RPKI can be associated with the real world identity of the 'owner' of
   an INR.  This document attempts to put that notion to rest.


              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ymbk-sidrops-rpki-has-no-identity-00"/>
          <format type="TXT" target="https://www.ietf.org/archive/id/draft-ymbk-sidrops-rpki-has-no-identity-00.txt"/>
        </reference>
        <reference anchor="RFC1952" target="https://www.rfc-editor.org/info/rfc1952" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.1952.xml">
          <front>
            <title>GZIP file format specification version 4.3</title>
            <author initials="P." surname="Deutsch" fullname="P. Deutsch">
              <organization/>
            </author>
            <date year="1996" month="May"/>
            <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="RFC6480" target="https://www.rfc-editor.org/info/rfc6480" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6480.xml">
          <front>
            <title>An Infrastructure to Support Secure Internet Routing</title>
            <author initials="M." surname="Lepinski" fullname="M. Lepinski">
              <organization/>
            </author>
            <author initials="S." surname="Kent" fullname="S. Kent">
              <organization/>
            </author>
            <date year="2012" month="February"/>
            <abstract>
              <t>This document describes an architecture for an infrastructure to support improved security of Internet routing.  The foundation of this architecture is a Resource Public Key Infrastructure (RPKI) that represents the allocation hierarchy of IP address space and Autonomous System (AS) numbers; and a distributed repository system for storing and disseminating the data objects that comprise the RPKI, as well as other signed objects necessary for improved routing security.  As an initial application of this architecture, the document describes how a legitimate holder of IP address space can explicitly and verifiably authorize one or more ASes to originate routes to that address space.  Such verifiable authorizations could be used, for example, to more securely construct BGP route filters.   This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6480"/>
          <seriesInfo name="DOI" value="10.17487/RFC6480"/>
        </reference>
        <reference anchor="signify" target="https://man.openbsd.org/signify">
          <front>
            <title>signify - cryptographically sign and verify files</title>
            <author initials="T." surname="Unangst">
              <organization/>
            </author>
            <author initials="M." surname="Espie">
              <organization/>
            </author>
            <date year="2014" month="May"/>
          </front>
        </reference>
        <reference anchor="rpki-rsc-demo" target="https://github.com/APNIC-net/rpki-rsc-demo">
          <front>
            <title>A proof-of-concept for constructing and validating RPKI Signed Checklists (RSCs).</title>
            <author initials="T." surname="Harrison">
              <organization>APNIC</organization>
            </author>
            <date year="2021" month="February"/>
          </front>
        </reference>
        <reference anchor="rpkimancer" target="https://github.com/benmaddison/rpkimancer">
          <front>
            <title>rpkimancer</title>
            <author initials="B." surname="Maddison">
              <organization>Workonline</organization>
            </author>
            <date year="2021" month="May"/>
          </front>
        </reference>
        <reference anchor="FORT" target="https://github.com/NICMx/FORT-validator">
          <front>
            <title>FORT</title>
            <author surname="FORT Validator">
              <organization>LACNIC and NIC.MX</organization>
            </author>
            <date year="2021" month="May"/>
          </front>
        </reference>
        <reference anchor="POSIX" target="https://publications.opengroup.org/standards/unix/c165">
          <front>
            <title>The Open Group's Base Specifications, Issue 7</title>
            <author>
              <organization>IEEE and The Open Group</organization>
            </author>
            <date year="2016"/>
          </front>
        </reference>
      </references>
    </references>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>
        The authors wish to thank
          George Michaelson,
          Geoff Huston,
          Randy Bush,
          Stephen Kent,
          Matt Lepinski,
          Rob Austein,
          Ted Unangst,
          and Marc Espie
        for prior art.
        The authors thank Russ Housley for reviewing the ASN.1 notation and providing suggestions.
        The authors would like to thank
          Nimrod Levy,
          Tim Bruijnzeels,
          Alberto Leiva,
          Ties de Kock,
          Peter Peele,
          Claudio Jeker,
          and Theo Buehler 
        for document review and suggestions.
      </t>
    </section>
    <section removeInRFC="true">
      <name>Document changelog</name>
      <section>
        <name>changes from -07 -&gt; -08</name>
        <ul>
          <li>Theo requested explanation as to why fileName is OPTIONAL</li>
          <li>Russ &amp; Randy requested implementor guidance when RFC3779-generated data fails to decode</li>
          <li>Added uniqueness constraints for fileName and hash contents</li>
          <li>Improved validation and verification procedure description</li>
          <li>Incorporated character-set constraints for fileName in ASN.1 module</li>
        </ul>
      </section>
      <section>
        <name>changes from -06 -&gt; -07</name>
        <ul>
          <li>Change wire format to allow use of commonly deployed libcrypto APIs.</li>
        </ul>
      </section>
      <section>
        <name>changes from -05 -&gt; -06</name>
        <ul>
          <li>Non-content-related updates.</li>
        </ul>
      </section>
      <section>
        <name>changes from -04 -&gt; -05</name>
        <ul>
          <li>Ties contributed clarifications.</li>
        </ul>
      </section>
      <section>
        <name>changes from -03 -&gt; -04</name>
        <ul>
          <li>Alberto pointed out the asID validation also needs to be documented.</li>
        </ul>
      </section>
      <section>
        <name>changes from -02 -&gt; -03</name>
        <ul>
          <li>Reference the IANA assigned OID</li>
          <li>Clarify validation rules</li>
        </ul>
      </section>
      <section>
        <name>changes from -01 -&gt; -02</name>
        <ul>
          <li>Clarify RSC is part of a puzzle, not panacea. Thanks Randy &amp; Russ.</li>
        </ul>
      </section>
      <section>
        <name>changes from -00 -&gt; -01</name>
        <ul>
          <li>Readability improvements</li>
          <li>Update document category to match the registry allocation policy requirement.</li>
        </ul>
      </section>
      <section>
        <name>individual submission phase</name>
        <ul>
          <li>
            On-the-wire change: the 'Filename' switched from 'required' to 'optional'.
            Some SIDROPS Working Group participants proposed a checksum itself is the most minimal information required to address digital objects.
          </li>
        </ul>
      </section>
    </section>
  </back>
</rfc>
