<?xml version="1.0"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
     which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
     There has to be one entity for each item to be referenced.
     An alternate method (rfc include) is described in the references. -->

<!ENTITY RFC2535 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2535.xml">
<!ENTITY RFC3779 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3779.xml">
<!ENTITY RFC4301 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4301.xml">
<!ENTITY RFC5280 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5280.xml">
<!ENTITY RFC6480 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6480.xml">
<!ENTITY RFC6481 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6481.xml">
<!ENTITY RFC6482 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6482.xml">
<!ENTITY RFC6486 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6486.xml">
<!ENTITY RFC6487 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6487.xml">
<!ENTITY RFC6488 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6488.xml">
<!ENTITY RFC6489 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6489.xml">
<!ENTITY RFC6493 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6493.xml">
<!ENTITY RFC6810 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6810.xml">
<!ENTITY RFC6916 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6916.xml">
<!ENTITY RFC6480 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6480.xml">
<!ENTITY RFC7935 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7935.xml">
<!ENTITY RFC8182 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8182.xml">
<!ENTITY RFC8208 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8208.xml">
<!ENTITY RFC8209 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8209.xml">
<!ENTITY RFC8210 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8210.xml">
<!ENTITY RFC8360 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8360.xml">
<!ENTITY I-D.ietf-sidrops-bgpsec-rollover SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-sidrops-bgpsec-rollover.xml">
<!ENTITY I-D.ietf-sidrops-https-tal SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-sidrops-https-tal.xml">


]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs),
     please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
     (Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<?rfc tocappendix="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="3"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space
     (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<?rfc comments="no" ?>
<?rfc inline="yes" ?>
<rfc category="info" docName="draft-ietf-sidrops-rp-04" ipr="trust200902">

  <front>

    <title abbrev="RPKI RP Requirements">Requirements for Resource Public Key Infrastructure (RPKI) Relying Parties</title>

    <author fullname="Di Ma" initials="D." surname="Ma">
      <organization>ZDNS</organization>
      <address>
        <postal>
          <street>4 South 4th St. Zhongguancun</street>
          <city>Haidian</city>
          <code>100190</code>
          <region>Beijing</region>
          <country>China</country>
        </postal>
        <email>madi@zdns.cn</email>
      </address>
    </author>

    <author fullname="Stephen Kent" initials="S." surname="Kent">
      <organization>Independent</organization>
      <address>
        <email>kent@alum.mit.edu</email>
      </address>
    </author>

    <date/>

    <!-- Meta-data Declarations -->

    <area>Routing Area</area>
    <workgroup>SIDROPS</workgroup>

    <!-- <keyword>dns</keyword> -->

    <abstract>
        <t>This document provides a single reference point for requirements for Relying Party (RP) software for use in the Resource Public Key Infrastructure (RPKI) in the context of securing Internet routing.  It cites requirements that appear in several RPKI RFCs, making it easier for implementers to become aware of these requirements that are segmented with orthogonal functionalities.</t>
    </abstract>

  </front>

<middle>

<section title="Introduction">
   <t>The RPKI Relying Party (RP) software is used by network operators and others to acquire and verify Internet Number Resource (INR) data stored in the RPKI repository system.  RPKI data, when verified, allow an RP to verify assertions about which Autonomous Systems (ASes) are authorized to originate routes for IP address prefixes.  RPKI data also establishes binding between public keys and BGP routers, and indicates the AS numbers that each router is authorized to represent.</t>
   <t>Noting that the essential requirements imposed on RPs to support securing Internet routing (<xref target="RFC6480" />) are scattered throughout numerous RFC documents that are protocol specific or provide best practices, as follows:</t>
   <t>
       RFC 6481 (Repository Structure)
       <vspace />
       RFC 6482 (ROA format)
       <vspace />
       RFC 6486 (Manifests)
       <vspace />
       RFC 6487 (Certificate and CRL profile)
       <vspace />
       RFC 6488 (RPKI Signed Objects)
       <vspace />
       RFC 6489 (Key Rollover)
       <vspace />
       RFC 6810 (RPKI to Router Protocol)
       <vspace />
       RFC 6916 (Algorithm Agility)
       <vspace />
       RFC 7935 (Algorithms)
       <vspace />
       RFC 8209 (Router Certificates)
       <vspace />
       RFC 8210 (RPKI to Router Protocol,Version 1)
       <vspace />
       RFC 8360 (Certificate Validation Procedure)
       <vspace />
       I-D.ietf-sidrops-https-tal (Trust Anchor Locator)
   </t>
   <t>This makes it hard for an implementer to be confident that he/she has addressed all of these generalized requirements. Besides, software engineering calls for how to segment the RP system into components with orthogonal functionalities, so that those components could be distributed across the operational timeline of the user. Taxonomy of generalized RP requirements is going to help have ‘the role of the RP’ well framed.</t>
   <t>To consolidate RP requirements in one document, with pointers to all the relevant RFCs, this document outlines a set of baseline requirements imposed on RPs and provides a single reference point for requirements for RP software for use in the RPKI, as segmented with orthogonal functionalities:</t>
   <t>
       • Fetching and Caching RPKI Repository Objects
       <vspace />
       • Processing Certificates and CRLs
       <vspace />
       • Processing RPKI Repository Signed Objects
       <vspace />
       • Distributing Validated Cache of the RPKI Data</t>
   <t>This document will be update to reflect new or changed requirements as these RFCs are updated, or new RFCs are written.</t>
</section>



<section title="Fetching and Caching RPKI Repository Objects">

    <t>RP software uses synchronization mechanisms supported by targeted repositories (e.g., <xref target="rsync" />, RRDP <xref target="RFC8182" />) to download all RPKI changed data objects in the repository system and cache them locally. The software validates the RPKI data and uses it to generate authenticated data identifying which ASes are authorized to originate routes for address prefixes, and which routers are authorized to sign BGP updates on behalf of ASes.</t>

    <section title="TAL Acquisition and Processing">
    <t>In the RPKI, each RP chooses its own set of trust anchors (TAs). Consistent with the extant INR allocation hierarchy, the IANA and/or the five RIRs are obvious candidates to be default TAs for the RP.</t>
    <t>An RP does not retrieve TAs directly. A set of Trust Anchor Locators (TALs) is used by each RP to retrieve and verify the authenticity of each TA.</t>
    <t>TAL acquisition and processing are specified in Section 3 of <xref target="I-D.ietf-sidrops-https-tal" />.</t>
    </section>

    <section title="Locating RPKI Objects Using Authority and Subject Information Extensions">
        <t>The RPKI repository system is a distributed one, consisting of multiple repository instances. Each repository instance contains one or more repository publication points. An RP discovers publication points using the Subject Information Access (SIA) and the Authority Information Access (AIA) extensions from (validated) certificates.</t>
    <t>Section 5 of <xref target="RFC6481" /> specifies how an RP locates all RPKI objects by using the SIA and AIA extensions.  Detailed specifications of SIA and AIA extensions in a resource certificate are described in Section 4 of <xref target="RFC6487" />.</t>
    </section>


    <section title="Dealing with Key Rollover">
    <t>An RP takes the key rollover period into account with regard to its frequency of synchronization with RPKI repository system.</t>
    <t>RP requirements in dealing with key rollover are described in Section 3 of <xref target="RFC6489" /> and Section 3 of <xref target="I-D.ietf-sidrops-bgpsec-rollover" />.</t>
    </section>

    <section title="Dealing with Algorithm Transition">
    <t>The set of cryptographic algorithms used with the RPKI is expected to change over time. Each RP is expected to be aware of the milestones established for the algorithm transition and what actions are required at every juncture.</t>
    <t>RP requirements for dealing with algorithm transition are specified in Section 4 of <xref target="RFC6916" />.</t>
    </section>

    <section title="Strategies for Efficient Cache Maintenance">
    <t>Each RP is expected to maintain a local cache of RPKI objects. The cache needs to be as up to date and consistent with repository publication point data as the RP’s frequency of checking permits.</t>
    <t>The last paragraph of Section 5 of <xref target="RFC6481" /> provides guidance for maintenance of a local cache.</t>
    </section>


</section>


<section title="Certificate and CRL Processing">

    <t>The RPKI make use of X.509 certificates and CRLs, but it profiles these standard formats <xref target="RFC6487" />. The major change to the profile established in <xref target="RFC5280" /> is the mandatory use of a new extension to X.509 certificate <xref target="RFC3779" />.</t>

    <section title="Verifying Resource Certificate and Syntax">
    <t>Certificates in the RPKI are called resource certificates, and they are required to conform to the profile <xref target="RFC6487" />. An RP is required to verify that a resource certificate adheres to the profile established by Section 4 of <xref target="RFC6487" />. This means that all extensions mandated by Section 4.8 of <xref target="RFC6487" /> must be present and value of each extension must be within the range specified by this RFC. Moreover, any extension excluded by Section 4.8 of <xref target="RFC6487" /> must be omitted.</t>
    <t>Section 7.1 of <xref target="RFC6487" /> gives the procedure that the RP should follow to verify resource certificate and syntax.</t>
    </section>


    <section title="Certificate Path Validation">
    <t>The INRs in issuer’s certificate are required to encompass the INRs in the subject’s certificate. This is one of necessary principles of certificate path validation in addition to cryptographic verification i.e., verification of the signature on each certificate using the public key of the parent certificate).</t>
    <t>Section 7.2 of <xref target="RFC6487" /> gives the procedure that the RP should follow to perform certificate path validation.</t>
    <t>Certificate Authorities that want to reduce aspects of operational fragility will migrate to the new OIDs <xref target="RFC8360" />, informing the RP of using an alternative RPKI validation algorithm. An RP is expected to support the amended procedure to handle with accidental over-claim.</t>
    
    </section>


    <section title="CRL Processing">
    <t>The CRL processing requirements imposed on CAs and RP are described in Section 5 of <xref target="RFC6487" />. CRLs in the RPKI are tightly constrained; only the AuthorityKeyIndetifier and CRLNumber extensions are allowed, and they are required to be present. No other CRL extensions are allowed, and no CRLEntry extensions are permitted. RPs are required to verify that these constraints have been met. Each CRL in the RPKI must be verified using the public key from the certificate of the CA that issued the CRL.</t>

    <t>In the RPKI, RPs are expected to pay extra attention when dealing with a CRL that is not consistent with the Manifest associated with the publication point associated with the CRL.</t>
    <t>Processing of a CRL that is not consistent with a manifest is a matter of local policy, as described in the fourth paragraph of Section 6.6 of <xref target="RFC6486" />.</t>
    </section>
</section>


<section title="Processing RPKI Repository Signed Objects">

    <section title="Basic Signed Object Syntax Checks">
        <t>Before an RP can use a signed object from the RPKI repository, the RP is required to check the signed object syntax.</t>
        <t>Section 3 of <xref target="RFC6488" /> lists all the steps that the RP is required to execute in order to validate the top level syntax of a repository signed object.</t>
        <t>Note that these checks are necessary, but not sufficient.  Additional validation checks must be performed based on the specific type of signed object.</t>
    </section>


    <section title="Syntax and Validation for Each Type of Signed Object">

            <section title="Manifest">
                <t>To determine whether a manifest is valid, the RP is required to perform manifest-specific checks in addition to those specified in <xref target="RFC6488" />.</t>
                <t>Specific checks for a Manifest are described in Section 4 of <xref target="RFC6486" />. If any of these checks fails, indicating that the manifest is invalid, then the manifest will be discarded and treated as though no manifest were present.</t>
            </section>

            <section title="ROA">
                <t>To validate a ROA, the RP is required perform all the checks specified in <xref target="RFC6488" /> as well as the additional ROA-specific validation steps. The IP address delegation extension <xref target="RFC3779" /> present in the end-entity (EE) certificate (contained within the ROA), must encompass each of the IP address prefix(es) in the ROA.</t>
               <t>More details for ROA validation are specified in Section 4 of <xref target="RFC6482" />.</t>
            </section>

            <section title="Ghostbusters">
                <t>The Ghostbusters Record is optional; a publication point in the RPKI can have zero or more associated Ghostbuster Records. If a CA has at least one Ghostbuster Record, RP is required to verify that this Ghostbusters Record conforms to the syntax of signed object defined in <xref target="RFC6488" />.</t>
                <t>The payload of this signed object is a (severely) profiled vCard. An RP is required to verify that the payload of Ghostbusters conforms to format as profiled in <xref target="RFC6493" />.</t>
            </section>

            <section title="Verifying BGPsec Router Certificate">
                <t>A BGPsec Router Certificate is a resource certificate, so it is required to comply with <xref target="RFC6487"/>. Additionally, the certificate must contain an AS Identifier Delegation extension, and must not contain an IP Address Delegation extension. The validation procedure used for BGPsec Router Certificates is identical to the validation procedure described in Section 7 of <xref target="RFC6487" />, but using the constraints applied come from specification of Section 7 of <xref target="RFC8209" />. </t>
                <t>Note that the cryptographic algorithms used by BGPsec routers are found in <xref target="RFC8208" />.  Currently, the algorithms specified in <xref target="RFC8208" />and <xref target="RFC7935" /> are different. BGPsec RPs will need to support algorithms that are used to validate BGPsec signatures as well as the algorithms that are needed to validate signatures on BGPsec certificates, RPKI CA certificates, and RPKI CRLs.</t>
            </section>
    </section>


    <section title="How to Make Use of Manifest Data">
        <t>For a given publication point, the RP ought to perform tests, as specified in Section 6.1 of <xref target="RFC6486" />, to determine the state of the Manifest at the publication point. A Manifest can be classified as either valid or invalid, and a valid Manifest is either current and stale. An RP decides how to make use of a Manifest based on its state, according to local (RP) policy.</t>
        <t>If there are valid objects in a publication point that are not present on a Manifest, <xref target="RFC6486" /> does not mandate specific RP behavior with respect to such objects. However, most RP software ignores such objects and the authors of this document suggest this behavior be adopted uniformly.</t>
        <t>In the absence of a Manifest, an RP is expected to accept all valid signed objects present in the publication point. If a Manifest is stale or invalid (see <xref target="RFC6486" />) and an RP has no way to acquire a more recently valid Manifest, the RP is expected to contact the repository manager via Ghostbusters record and thereafter make decision according to local (RP) policy.</t>
    </section>

    <section title="What to Do with Ghostbusters Information">
        <t>An RP may encounter a stale Manifest or CRL, or an expired CA certificate or ROA at a publication point.  An RP is expected to use the information from the Ghostbusters record to contact the maintainer of the publication point where any stale/expired objects were encountered. The intent here is to encourage the relevant CA and/or repository manager to update the slate or expired objects.</t>
    </section>


</section>




<section title="Distributing Validated Cache">
    <t>On a periodic basis, BGP speakers within an AS request updated validated origin AS data and router/ASN data from the validated cache of RPKI data. The RP may either transfer the validated data to the BGP speakers directly, or it may transfer the validated data to a cache server that is responsible for provisioning such data to BGP speakers. The specification of the protocol designed to deliver validated cache data to a BGP Speaker is provided in <xref target="RFC6810" /> and <xref target="RFC8210" />.</t>
</section>



<section title="Security Considerations">
    <t>The RP links the RPKI provisioning side and the routing system, establishing the local view of global RPKI data to BGP speakers. The security of the RP is critical to BGP messages exchanging.  The RP implementation is expected to offer cache backup management to facilitate recovery from outage state. The RP implementation also should support application of secure transport (e.g., IPsec <xref target="RFC4301" />) that is able to protect validated cache delivery in a unsafe environment. </t>
</section>


<section title="IANA Considerations">
    <t>This document has no actions for IANA.</t>
</section>


<section title="Acknowledgements">
    <t>The authors thank David Mandelberg, Wei Wang, Tim Bruijnzeels, George Michaelson and Oleg Muravskiy for their review, feedback and editorial assistance in preparing this document.</t>
</section>


</middle>

<back>

<references title="Normative References">
    &RFC3779;
    &RFC5280;
    &RFC6481;
    &RFC6482;
    &RFC6486;
    &RFC6487;
    &RFC6488;
    &RFC6493;
    &RFC6810;
    &RFC7935;
    &RFC8208;
    &RFC8209;
    &RFC8210;
    &RFC8360;
    &I-D.ietf-sidrops-https-tal;
</references>

<references title="Informative References">
    &RFC4301;
    &RFC6480;
    &RFC6489;
    &RFC6916;
    &RFC8182;
    &I-D.ietf-sidrops-bgpsec-rollover;


    <reference anchor="rsync" target="http://rsync.samba.org/">
        <front>
          <title>rsync web page</title>
          <author></author>
          <date />
        </front>
    </reference>

</references>


  </back>
</rfc>
