<?xml version='1.0' encoding='utf-8'?>

<!DOCTYPE rfc [
 <!ENTITY nbsp "&#160;">
]>

<?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-spl-verification-00"
     ipr="trust200902"
     xml:lang="en"
     sortRefs="true"
     submissionType="IETF"
     consensus="true"
     version="3">

  <front>
    <title abbrev="SPL-based Route Verification">
      Signed Prefix List (SPL) Based Route Origin Verification and Operational Considerations
    </title>

    <author fullname="Kotikalapudi Sriram" initials="K." surname="Sriram">
      <organization abbrev="USA NIST" showOnFrontPage="true">USA National Institute of Standards and Technology</organization>
      <address>
        <postal>
          <street>100 Bureau Drive</street>
          <city>Gaithersburg</city>
          <region>MD</region>
          <code>20899</code>
          <country>United States of America</country>
        </postal>
        <email>ksriram@nist.gov</email>
      </address>
    </author>

    <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="Doug Montgomery" initials="D." surname="Montgomery">
      <organization abbrev="USA NIST" showOnFrontPage="true">USA National Institute of Standards and Technology</organization>
      <address>
        <postal>
          <street>100 Bureau Drive</street>
          <city>Gaithersburg</city>
          <region>MD</region>
          <code>20899</code>
          <country>United States of America</country>
        </postal>
        <email>dougm@nist.gov</email>
      </address>
    </author>

    <date />

    <area>ops</area>
    <workgroup>sidrops</workgroup>

    <keyword>BGP</keyword>
    <keyword>RPKI</keyword>
    <keyword>Route Origin Verification</keyword>
    <keyword>security</keyword>
    <keyword>cryptography</keyword>
    <keyword>X.509</keyword>

    <abstract>

      <t>
         The Signed Prefix List (SPL) is an RPKI object that attests to the complete list of prefixes which an Autonomous System (AS) may originate in the Border Gateway Protocol (BGP).
         This document specifies an SPL-based Route Origin Verification (SPL-ROV) methodology and combines it with the ROA-based ROV (ROA-ROV) to facilitate an integrated mitigation strategy for prefix hijacks and AS forgery.
         The document also explains the various BGP security threats that SPL can help address and provides operational considerations associated with SPL-ROV deployment.
      </t>
    </abstract>
  </front>

  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>
        The Signed Prefix List (SPL) <xref target="I-D.ietf-sidrops-rpki-prefixlist"/> is a Resource Public Key Infrastructure (RPKI) object that attests to the complete list of prefixes which an Autonomous System (AS) may originate in the Border Gateway Protocol (BGP).
        This document specifies an SPL-based Route Origin Verification (SPL-ROV) procedure and how it can be combined with ROA-based ROV (ROA-ROV) <xref target="RFC6811"/><xref target="RFC9319"/> to facilitate an integrated mitigation strategy for prefix hijacks, AS forgery, and reduction of attack surface for forged-origin prefix hijacks.
        An AS forgery occurs when an offending AS illegitimately inserts another AS (victim AS) as the origin in a BGP announcement (prefix may belong to a third party or the offender).
        A forged-origin prefix hijack occurs when an offending AS makes a BGP announcement with illegitimate insertion of a {prefix, origin AS} tuple that is Valid per ROA-ROV <xref target="RFC7115"/><xref target="RFC9319"/>.
        The various BGP security threats that SPL-ROV helps to address are described in <xref target="threats"/>.
        Operational considerations associated with SPL-ROV are discussed in <xref target="operations"/>.
      </t>
      <t>
        The verification procedures described in this document MUST be applied to BGP routes with {AFI, SAFI} combinations {AFI 1 (IPv4), SAFI 1} and {AFI 2 (IPv6), SAFI 1} <xref target="IANA-AF"/> <xref target="IANA-SAF"/>.
        The procedures MUST NOT be applied to other address families by default.
      </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 title="Terminology and List of Acronyms" anchor="terminology">
         <t>
           The following list includes the terms used with special meanings and acronyms.
         </t>
          <ul>
           <li>
                "Route is ineligible": The term has the same meaning as in <xref target="RFC4271"/>, i.e., "route is ineligible to be installed in Loc-RIB and will be excluded from the next phase of route selection."
           </li>
           <li>
                SPL: Signed Prefix List (see <xref target="I-D.ietf-sidrops-rpki-prefixlist"/>).
           </li>
           <li>
                VSP: Validated SPL Payload (see <xref target="SPL-and-VSP"/>).
           </li>
           <li>
                ROA: Route Origin Authorization (see <xref target="RFC6811"/>).
           </li>
           <li>
                ROA-ROV: ROA-based Route Origin Verification (see <xref target="alg"/>).
           </li>
           <li>
                SPL-ROV: SPL-based Route Origin Verification (see <xref target="alg"/>).
           </li>
           <li>
                RP: Relying Party (see <xref target="RFC6484"/>).
           </li>
          </ul>
      </section>

    <section anchor="SPL-and-VSP">
      <name>Signed Prefix List (SPL) and Validated SPL Payload (VSP)</name>
      <t>
        The definition and semantics of Signed Prefix List (SPL) are provided in <xref target="I-D.ietf-sidrops-rpki-prefixlist"/> apply here.
        Additional clarification is that the SPL object does not implicitly permit a more-specific prefix subsumed by a listed IP address prefix to be originated by the subject AS listed in it.
        For any such more-specific prefix to be permitted by the SPL object, it must be explicitly listed in the list of IP address prefixes.
      </t>
      <t>
        Normally there would be a single valid Signed Prefix List (SPL) object for a given asID <xref target="I-D.ietf-sidrops-rpki-prefixlist"/>.
        However, if multiple valid SPL objects which contain the same asID exist, then union of the resulting address prefix members forms the complete set of members.
        The complete set (resulting from a single or multiple SPLs) is locally stored by a Relying Party (RP) or compliant router, and such an object is called the Validated SPL Payload (VSP) for the asID in consideration.
        For a given asID, there may be only a valid SPL object with zero prefixes listed.
        By creating such an empty SPL object, the subject AS is declaring that it does not originate any prefixes.
        For an empty SPL, the corresponding VSP conveys 'Empty' in place of the set of prefixes <xref target="I-D.ietf-sidrops-rpki-prefixlist"/>.
      </t>
    </section>
    <!--
    <section title="Recommendations for Creation of PrefixList Object" anchor="recs">
      <t>
        An AS SHOULD include all prefixes it originates or intends to originate in its PrefixList.
        These would include prefixes it owns and the prefixes of BYOIP customers.
        It is understood that some of these prefixes may have ROA coverage and some may not.
      </t>
      <t>
        There appears to be no need to include a maxLength in the PrefixList object.
        The reason is as follows.
        Even if a prefix originated by an AS (whether the prefix is owned by the AS owner or BYOIP)
        has a ROA with maxLength (greater than the prefix length),
        typically only the prefix and possibly some of its subprefixes
        (i.e., subsumed more specific prefixes) are announced in BGP.
        The owner of the prefix informs the AS operator (typically via a customer interface)
        about the prefixes and subprefixes (if any) it intends to announce,
        and only those prefixes/subprefixes SHOULD be included in the PrefixList.
        Other subprefixes SHOULD NOT be included merely because
        they are permitted by the ROA or its maxLength.
        This narrows the attack surface for forged-origin subprefix hijacks
        which may be otherwise wide due to the ROA maxLength.
      </t>
    </section>
    -->
    <!--
    <section title="Route Verification: State Space and Outcomes" anchor="outcomes">
      <t>
        The state-space for route verification considering ROV and PrefixList is enumerated in <xref target="state-space"/>.
        Also, mentioned are the combined results for each state from combining both verifications.
        A RECOMMENDED route selection policy is also mentioned in the last column of <xref target="state-space"/>.
        A network operator is free to select a policy that they consider most appropriate.
        The use of the term "route is ineligible" in this document has the same meaning as in <xref target="RFC4271"/>,
        i.e., "route is ineligible to be installed in Loc-RIB and will be excluded from the next phase of route selection".
      </t>
        <table anchor="state-space" align="center">
          <name/>
          <thead>
            <tr>
              <th rowspan="1" colspan="1">Index</th>
              <th rowspan="1" colspan="1">ROV</th>
              <th rowspan="1" colspan="1">PrefixList Verification</th>
              <th rowspan="1" colspan="1">Combined Verification</th>
              <th rowspan="1" colspan="1">Route Selection</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>1</td>
              <td>Valid</td>
              <td>Valid</td>
              <td>Valid</td>
              <td>Eligible</td>
            </tr>
            <tr>
              <td>2</td>
              <td>Valid</td>
              <td>Unknown</td>
              <td>Unknown</td>
              <td>Eligible</td>
            </tr>
            <tr>
              <td>3</td>
              <td>Valid</td>
              <td>Invalid</td>
              <td>Invalid</td>
              <td>Ineligible</td>
            </tr>
            <tr>
              <td>4</td>
              <td>Unknown</td>
              <td>Valid</td>
              <td>Unknown</td>
              <td>Eligible</td>
            </tr>
            <tr>
              <td>5</td>
              <td>Unknown</td>
              <td>Unknown</td>
              <td>Unknown</td>
              <td>Eligible</td>
            </tr>
            <tr>
              <td>6</td>
              <td>Unknown</td>
              <td>Invalid</td>
              <td>Invalid</td>
              <td>Ineligible</td>
            </tr>
            <tr>
              <td>7</td>
              <td>Invalid</td>
              <td>Valid</td>
              <td>Invalid</td>
              <td>Ineligible</td>
            </tr>
            <tr>
              <td>8</td>
              <td>Invalid</td>
              <td>Unknown</td>
              <td>Invalid</td>
              <td>Ineligible</td>
            </tr>
            <tr>
              <td>9</td>
              <td>Invalid</td>
              <td>Invalid</td>
              <td>Invalid</td>
              <td>Ineligible</td>
            </tr>
          </tbody>
        </table>
    </section>
    -->
    <section title="Route Origin Verification Algorithms Using ROA and SPL" anchor="alg">
      <t>
        SPLs provide a second means to perform route origin verification (ROV) based upon RPKI data. In this document, we refer to the ROV based upon ROA data as ROA-ROV and the ROV based upon SPL data (algorithm described below) as SPL-ROV.
      </t>
      <t>
        This document makes no changes to the ROA-ROV procedure defined in <xref target="RFC6811" section="2"/>. The SPL-ROV procedure described below is designed to augment and integrate with the existing ROA-ROV procedures. The ROA-ROV and SPL-ROV procedures produce independent verification results referred to as ROA-ROV-state and SPL-ROV-state, respectively.
      </t>
      <t>
        An eBGP router that conforms to this specification MUST implement both the ROA-ROV and SPL-ROV procedures specified below.
      </t>
      <!--
      <t>
        The Route Origin Verification (ROV) procedure using ROA data is named as ROA-ROV in this document.
        The ROV procedure using SPL data is named as SPL-ROV.
        The verification states of a route based on these procedures are called ROA-ROV-state and SPL-ROV-state, respectively.
        The ROA-ROV procedure is the same as that in <xref target="RFC6811" section="2"/> and the ROA-ROV-state is set as follows:
      </t>
      -->
      <t>
        For each received BGP route:
      </t>
      <ol>
        <li>
            Set the ROA-ROV-state = the outcome (NotFound, Valid, or Invalid) of the route origin verification procedure in <xref target="RFC6811" section="2"/>.
        </li>

        <!--
        <li>
            If the route's validation state per <xref target="RFC6811" section="2"/> is NotFound, then set the ROA-ROV-state = NotFound and stop.
            Else, continue.
        </li>
        <li>
            If the route's validation state per <xref target="RFC6811" section="2"/> is Valid, then set the ROA-ROV-state = Valid and stop.
            Else, continue. 
        </li>
        <li>
            If the route's validation state per <xref target="RFC6811" section="2"/> is Invalid, then set the ROA-ROV-state = Invalid and stop.
        </li>
        -->
        
        <li>
            If the route contains an AS_SET, then set the SPL-ROV-state = Invalid and stop.
        </li>
        <li>
            Else, if the route's origin AS does not have a VSP, then set the SPL-ROV-state = NotFound and stop.
        </li>
        <li>
            Else, if the route's origin AS's VSP includes the route prefix, then set the SPL-ROV-state = Valid and stop.
        </li>
        <li>
            Else, set the SPL-ROV-state = Invalid and stop.
        </li>
        </ol>

        <!-- The general principles on which the algorithm is based are as follows.
        A received route is considered Invalid if (1) the route's AS_PATH contains an AS_SET, or (2) the origin AS has a VSP but it does not include the route prefix, or (3) the prefix has a covering VRP(s) but there is no covering VRP that contains the route's origin AS as well as a maxLength value that is equal to or greater than the route's prefix length. -->  

      <!--
      <ol>
        <li>
            If the route contains an AS_SET, then set the SPL-ROV-state = Invalid and go to Step 4.
            Else, continue.
        </li>
        <li>
            If the route's origin AS does not have a VSP, then set the SPL-ROV-state = NotFound and go to Step 4.
            Else, continue.
        </li>
        <li>
            If the route's origin AS's VSP includes the route prefix, then set the SPL-ROV-state = Valid and go to Step 4.
            Else, set the SPL-ROV-state = Invalid. Continue to the next step.
        </li>
        <li>
            If the route's validation state per <xref target="RFC6811" section="2"/> is NotFound and the route does not contain any AS_SET, then set the ROA-ROV-state = NotFound and stop.
            Else, continue.
        </li>
        <li>
            If the route's validation state per <xref target="RFC6811" section="2"/> is NotFound and the route contains an AS_SET, then set the ROA-ROV-state = Invalid and stop.
            Else, continue.
        </li>
        <li>
            If the route's validation state per <xref target="RFC6811" section="2"/> is Valid, then set the ROA-ROV-state = Valid and stop. Else, set the ROA-ROV-state = Invalid and stop.
        </li>
        </ol>
        -->
    </section>
    <section title="Mitigation Policy" anchor="mitig">
      <t>
       The specific configuration of a mitigation policy is at the discretion of the network operator.
       However, the following mitigation policy is highly recommended.
      </t>
      <t>
       If either the route's SPL-ROV-state or ROA-ROV-state = Invalid (<xref target="alg"/>), then the route SHOULD be considered ineligible for route selection (see <xref target="terminology"/>) but MUST be kept in the Adj-RIB-In for potential future re-evaluation (see <xref target="RFC9324"/>).
       To be clear, the above applies when either or both of the two ROV states is (or are) Invalid.
       Routes with all other combinations of the SPL-ROV and ROA-ROV states (i.e., Valid-Valid, Valid-NotFound, NotFound-Valid, NotFound-NotFound) SHOULD be considered eligible for best path selection and SHOULD get the same preference level relative to each other (assuming other path properties are equal).
      </t>
      <t>
       For visualization purposes, <xref target="state-space"/> below lists all possible combinations of the ROA-ROV and SPL-ROV states and the associated recommendations for the route's eligibility for path selection.
       <!-- It is sufficient for implementations to mark routes with ROA-ROV-state and SPL-ROV-state for mitigation purposes. It is not necessary to tag the routes with the combined ROV state. -->
      </t>
        <table anchor="state-space" align="center">
          <name/>
          <thead>
            <tr>
              <th rowspan="1" colspan="1">Index</th>
              <th rowspan="1" colspan="1">ROA-ROV-state</th>
              <th rowspan="1" colspan="1">SPL-ROV-state</th>
              <th rowspan="1" colspan="1">Route Selection</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>1</td>
              <td>Valid</td>
              <td>Valid</td>
              <td>Eligible</td>
            </tr>
            <tr>
              <td>2</td>
              <td>Valid</td>
              <td>NotFound</td>
              <td>Eligible</td>
            </tr>
            <tr>
              <td>3</td>
              <td>Valid</td>
              <td>Invalid</td>
              <td>Ineligible</td>
            </tr>
            <tr>
              <td>4</td>
              <td>NotFound</td>
              <td>Valid</td>
              <td>Eligible</td>
            </tr>
            <tr>
              <td>5</td>
              <td>NotFound</td>
              <td>NotFound</td>
              <td>Eligible</td>
            </tr>
            <tr>
              <td>6</td>
              <td>NotFound</td>
              <td>Invalid</td>
              <td>Ineligible</td>
            </tr>
            <tr>
              <td>7</td>
              <td>Invalid</td>
              <td>Valid</td>
              <td>Ineligible</td>
            </tr>
            <tr>
              <td>8</td>
              <td>Invalid</td>
              <td>NotFound</td>
              <td>Ineligible</td>
            </tr>
            <tr>
              <td>9</td>
              <td>Invalid</td>
              <td>Invalid</td>
              <td>Ineligible</td>
            </tr>
          </tbody>
        </table>
    </section>
        <!--
        <table anchor="state-space" align="center">
          <name/>
          <thead>
            <tr>
              <th rowspan="1" colspan="1">Index</th>
              <th rowspan="1" colspan="1">ROA-ROV-state</th>
              <th rowspan="1" colspan="1">SPL-ROV-state</th>
              <th rowspan="1" colspan="1">Combined ROV state</th>
              <th rowspan="1" colspan="1">Route Selection</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>1</td>
              <td>Valid</td>
              <td>Valid</td>
              <td>Valid</td>
              <td>Eligible</td>
            </tr>
            <tr>
              <td>2</td>
              <td>Valid</td>
              <td>NotFound</td>
              <td>Valid</td>
              <td>Eligible</td>
            </tr>
            <tr>
              <td>3</td>
              <td>Valid</td>
              <td>Invalid</td>
              <td>Invalid</td>
              <td>Ineligible</td>
            </tr>
            <tr>
              <td>4</td>
              <td>NotFound</td>
              <td>Valid</td>
              <td>NotFound</td>
              <td>Eligible</td>
            </tr>
            <tr>
              <td>5</td>
              <td>NotFound</td>
              <td>NotFound</td>
              <td>NotFound</td>
              <td>Eligible</td>
            </tr>
            <tr>
              <td>6</td>
              <td>NotFound</td>
              <td>Invalid</td>
              <td>Invalid</td>
              <td>Ineligible</td>
            </tr>
            <tr>
              <td>7</td>
              <td>Invalid</td>
              <td>Valid</td>
              <td>Invalid</td>
              <td>Ineligible</td>
            </tr>
            <tr>
              <td>8</td>
              <td>Invalid</td>
              <td>NotFound</td>
              <td>Invalid</td>
              <td>Ineligible</td>
            </tr>
            <tr>
              <td>9</td>
              <td>Invalid</td>
              <td>Invalid</td>
              <td>Invalid</td>
              <td>Ineligible</td>
            </tr>
          </tbody>
        </table>
        -->


      <section title="BGP Security Threats Addressed by SPL-ROV" anchor="threats">
      <t>
        The BGP security threats addressed by deploying SPL-ROV together with ROA-ROV (<xref target="alg"/>) and the mitigation policy (<xref target="mitig"/>) are discussed below.
        <!-- Given that a VSP exists for an asID, if a prefix route is announced whose origin AS matches the asID but the prefix is not listed in the VSP, then the route is considered Invalid per SPL-ROV.
        The network operator may consider such a route ineligible <xref target="RFC4271"/> for route selection, regardless of the route's ROA-ROV status <xref target="RFC6811"/>.
        Similarly, the operator may consider an ROA-ROV Invalid route ineligible for route selection, regardless of the route's SPL-ROV status.
        If the above stated policy is implemented, SPL-ROV solves the additional routing security problems listed below while ROA-ROV detects accidental prefix hijacks.
        More details concerning the procedures for SPL-ROV will be provided in a separate draft. -->
      </t>
      <ol>
        <li>
        <strong>AS Forgery While Hijacking an ROA-ROV-NotFound Prefix:</strong>
        If AS A creates an SPL, it is protected by SPL-ROV in case an offending AS X inserts AS A as the origin AS and announces a third-party prefix not covered by a ROA.
        </li>
        <li>
        <strong>AS Forgery Together with a Conflicting ROA:</strong>
        A conflicting ROA is one which attests the origination of a prefix from an AS but the AS has not included the specific prefix in its SPL.
        Consider the scenario in which AS A creates a Signed Prefix List.
        In this case, AS A is protected by SPL-ROV if an offending AS X inserts AS A as the origin AS and announces a prefix for which AS X holds an RPKI certificate and has signed a conflicting ROA showing AS A as the origin.
        </li>
        <li>
        <strong>AS Accidentally Strips AS_PATH and Mis-Originates Prefixes:</strong>
        An AS learns a route from an eBGP neighbor and announces the prefix to another eBGP neighbor as if it is being originated by it (i.e., strips the received AS_PATH and re-originates the prefix).
        This can be called a re-origination or mis-origination attack (also see Type 5 route leak in <xref target="RFC7908"/>).
        This attack has been seen to happen in practice due to malfunctioning route optimizers.
        It can be mitigated at neighboring ASes by SPL-ROV if the AS in consideration has registered an SPL.
        </li>
        <li>
        <strong>Attack Surface Reduction:</strong>
        Often a prefix owner includes more prefixes and/or more more-specific prefixes (using maxLength or otherwise) in their ROA but has no plans to announce some or many of them.
        Such overly broad ROAs create a larger attack surface for forged-origin prefix and/or subprefix hijacks (<xref target="intro"/>).
        Creation of an SPL and the deployment of SPL-ROV can reduce this attack surface by effectively restricting the broad set of prefixes announcements authorized by the ROA to the subset of prefixes originated by the origin AS (i.e., prefixes in its VSP).

        <!--However, they would notify the operator of the AS serving them for origination purposes about the prefixes they do intend to announce, and only those prefixes would be included in the AS's SPL.
        This helps to reduce the attack surface for the forged-origin hijacks when SPL-ROV is applied. -->
        </li>
        <li>
        <strong>AS can declare itself "Not Originating Prefixes in the Internet":</strong>
        An SPL can be created with an empty prefix list in it.
        In doing this, the AS is asserting that it is not originating any prefixes in the Internet.
        Any route showing this AS as the origin AS is Invalid per SPL-ROV.
        </li>
      </ol>
      </section>

<!--
      <section title="Problems Solved by PrefixList" anchor="threats">
      <t>
        Given that a VSP exists for an asID, if a prefix route is announced whose origin AS matches the asID but the prefix is not listed in the VSP, then the route is considered Invalid per PrefixList verification.
        The network operator may consider such a route ineligible <xref target="RFC4271"/> for route selection, regardless of the route's RPKI Route Origin Validation (ROV) status <xref target="RFC6811"/>.
        Similarly, the operator may consider an ROV Invalid route ineligible for route selection, regardless of the route's PrefixList verification status.
        If the above stated policy is implemented, PrefixList verification solves the additional routing security problems listed below while ROV detects accidental prefix hijacks.
        More details concerning the procedures for PrefixList verification will be provided in a separate draft.
      </t>
      <ol>
        <li>
        <strong>AS Forgery While Hijacking an ROV-Unknown Prefix:</strong>
        If AS A creates a PrefixList, it is protected in case an offending AS X inserts AS A as the origin AS and hijacks a third-party prefix not covered by a ROA.
        </li>
        xxxx
        The route will be ROV-Unknown and PrefixList Invalid and hence
        considered ineligible by an RP (see #6 in <xref target="state-space"/>).
        Thus, AS A protects itself from this form of AS Forgery.
        xxxx
        <li>
        <strong>AS Forgery Together with a Bogus ROA:</strong>
        If AS A creates a PrefixList, it is protected in case an offending AS X inserts AS A as the origin AS and announces a prefix for which AS X has an RPKI certificate and a bogus ROA showing AS A as the origin.
        xxxx
        The route will be ROV-Valid due to the bogus ROA but PrefixList Invalid
        and hence considered ineligible by an RP (see #3 in <xref target="state-space"/>).
        Thus, AS A protects itself from this second form of AS Forgery as well.
        xxxx
        </li>
        <li>
        <strong>AS Accidentally Strips AS_PATH and Mis-Originates Prefixes:</strong>
        An AS learns a route from an eBGP neighbor and announces the prefix to another eBGP neighbor as if it is being originated by it (i.e., strips the received AS_PATH and re-originates the prefix).
        This can be called re-origination or mis-origination (also see Type 5 route leak in <xref target="RFC7908"/>).
        This attack has been seen to happen in practice due to malfunctioning route optimizers.
        It is mitigated at neighboring ASes if the AS in consideration has registered a PrefixList.
        xxxx
        If the affected prefixes have ROA coverage, then ROV at a subsequent AS would detect this anomaly.
        However, if the affected prefixes do not have ROA coverage, then these prefixes
        will be ROV-Unknown and PrefixList Invalid and considered Invalid by an RP
        (per #6 in <xref target="state-space"/>) provided that the leaking AS has registered a PrefixList.
        Thus, a leaking AS protects itself in the sense that when the leaks (mis-originations) reach
        a neighbor AS that is doing PrefixList based verification, they will be detected and blocked
        from further propagation.
        xxxx
        </li>
        <li>
        <strong>Attack Surface Reduction:</strong>
        Often a prefix owner includes more prefixes and/or more more-specific prefixes (using maxLength or otherwise) in their ROA but has no plans to announce some or many of them.
        Due to this, they tend to create a larger attack surface for forged-origin prefix and/or subprefix hijacks.
        However, they would notify the operator of the AS serving them for origination purposes about the prefixes they do intend to announce, and the AS operator would include only those prefixes in the AS's PrefixList.
        This helps to reduce the attack surface for the forged-origin hijacks.
        </li>
        <li>
        <strong>AS can declare itself "Not Originating Prefixes in the Internet":</strong>
        PrefixList can be created with an empty list in it. In doing this, the AS is asserting that it is not originating prefixes in the Internet.
        Any route showing this AS as the origin AS is Invalid per PrefixList verification.
        </li>
      </ol>
      </section>
-->
      <section anchor="operations">
      <name>Operational Considerations</name>
      <!--
      <t>
        It is highly <bcp14>RECOMMENDED</bcp14> that a compliant CA maintains a single Signed Prefix List for a given asID.
      </t>
      <t>
        If an AS holder publishes a Signed Prefix List, then relying parties SHOULD assume that the list is complete for that originating AS, and the presence of any route with the same AS as the originating AS and an address prefix that is not included in the Signed Prefix List implies that the route has been propagated within the routing system without the permission of the originating AS.
      </t>
      <t>
        The construction of an 'allowlist' for a given EBGP session using Signed Prefix List(s) compliments both best current practices <xref target="RFC7454"/> and the practice of rejecting RPKI-ROV-invalid BGP route announcements <xref target="RFC6811"/>.
        In other words, if a given BGP route is covered by a Signed Prefix List, but also is "Invalid" from a Route Origin Validation perspective, it is RECOMMENDED to reject the route announcement. Here the term "reject the route" is used in the sense of "consider the route ineligible for path selection" <xref target="RFC4271"/>.
      </t>
      -->
      <section title="Considerations when Prefix Owner Splits a Prefix" anchor="split-prefix">
        <t>
        A prefix owner with a prefix listed in the SPL of an AS may one day decide to split its prefix and announce only a more-specific prefix (subsumed under the prefix) from the AS in consideration.
        This operation needs to be managed carefully by applying the make-before-break principle.
        When notified of the intent, the AS must update its SPL to add the more-specific prefix while maintaining the original prefix.
        However, the updated SPL will take time to propagate to the RPs throughout the Internet.
        So, the AS must continue to announce the original prefix as well as the more-specific prefix for at least a period greater than the estimated propagation time of the updated SPL.
        <!-- This period of time may be based on an estimated measure of the propagation time such as its estimated (commonly accepted) 95th-percentile value plus a margin. -->
        At a later time, the less specific prefix may be removed from the AS's SPL.
        The prefix owner should be kept informed about the operational procedure so the expectations can be properly managed.
        </t>
      </section>
      <section title="Considerations when Prefix Owner Has a New Prefix" anchor="new-prefix">
        <t>
        A prefix owner with a new prefix may request the AS operator with an SPL to announce it.
        The AS operator SHOULD recommend the prefix owner to create a ROA for the new prefix.
        The AS operator MUST update its SPL to add the new prefix.
        Ubiquitous BGP propagation of the routes based upon the new prefix cannot be achieved until the updated SPL has propagated to RPs throughout the Internet.
        AS operators that make such SPL updates may choose to delay announcement of the new prefix to minimize triggering SPL-ROV Invalids at down-path ASes.

        <!-- The prefix owner may expect the new prefix to be announced shortly after making the request.
        However, the updated SPL will take some time to propagate to RPs throughout the Internet.
        So, the operator must delay the announcement of the new prefix for a period of time necessary for the propagation of the updated SPL.
        The period of time may be based on an estimated measure of the propagation time such as its estimated (commonly accepted) 95th-percentile value plus a margin.
        The prefix owner should be kept informed of the resulting wait time. -->
        </t>
      </section>

   <section title="Avoidance of Discrepancies in the SPL">
        <t>
        A prefix owner may dispute with the originating AS that its prefix has not been included in the AS's SPL.
        This can happen due to miscommunication or operational errors at the AS.
        A compliant AS should have appropriate operational processes to avoid such discrepancies and fix any such issues expeditiously.
        </t>
      </section>

   <section title="DoS/DDoS Mitigation Service Provider">
    <t>
      An AS may have a DoS/DDoS mitigation service provider (MSP) to defend against attacks targeting systems within its originated address space.
      Such an AS may request the MSP to include the prefixes contracted for the protection service to be included in the MSP AS's SPL.
      The prefixes under such a contract would be typically more-specific prefixes than the AS's normal announcements.
      With such an SPL in place, in the event of an attack, the MSP AS can announce the more-specific prefixes for mitigation purposes and they will be Valid per SPL-ROV.
      It is assumed that appropriate ROAs are also registered in advance so that the announcements are Valid per ROA-ROV as well <xref target="RFC9319"/>.
      </t>
      </section>
      <!--
      <section title="Why are ROA Prefixes not Simply Copied into PrefixList?" anchor="do-not-copy-roa">
      <t>
        It may be argued that including everything from any applicable ROA
        (including the optional maxLength if it exists) in the PrefixList object
        makes the PrefixList more effective.
        One may reason that if the prefix owner decides at a future date to announce (from the AS in consideration)
        more specific prefixes permitted by the ROA, the PrefixList would be ready for it a priori.
        However, by doing so, the benefit of a pragmatic PrefixList, i.e., reducing
        the attack surface for potential subprefix hijacks, is lost.
        So, there is a trade-off and it appears better to opt for not copying prefixes from ROA
        into the PrefixList and not including an optional maxLength in the PrefixList.
        Instead, the AS operator SHOULD include in the PrefixList only the prefixes requested by the prefix owners
        for origination (typically via a customer interface).
        This helps preserve the benefit of reduced attack surface for forged origin hijacks.
        If a prefix owner wishes readiness for future instantaneous announcement of some split prefixes
        under some circumstances, they can include them in their ROA a priori,
        and simultaneously inform the AS operator to include them in the PrefixList as well.
      </t>
      </section>
      -->
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
        <t>
          This document has no IANA considerations.
        </t>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
        <t>
          In the SPL profile specification <xref target="I-D.ietf-sidrops-rpki-prefixlist"/>, it is highly RECOMMENDED that an AS should only maintain one SPL that contains all the prefixes originated or intended to be originated by that AS.
          If an operator chooses to maintain multiple SPL objects (each with only a subset of the prefixes that could be originated by the AS), then consideration must be given to the risk imposed in scenarios in which an RP might receive some but not all of the SPL objects.
          Given the semantics of the SPL data as a comprehensive permit list for an AS's BGP originations, receiving some, but not all, SPL data of an AS can result in unintended route filtering and potential loss of reachability.
        </t>

          <!-- The SPL is in essence a permit list and any route with a prefix not included in the SPL while having the AS in the SPL as the origin is denied (considered ineligible). So, an AS creating an SPL must ensure that all prefixes it originates or intends to originate are correctly included in the SPL.

          In case there are multiple SPLs for an AS, all of them must be available to the RPs. Otherwise, the prefixes in any missing SPLs will experience service disruption. -->
    </section>
  </middle>

  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>

          <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
          <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4271.xml"/>
          <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6811.xml"/>
          <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
          <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9324.xml"/>
          <xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-ietf-sidrops-rpki-prefixlist.xml"/>
          <!-- <?rfc include="reference.I-D.ietf-sidrops-aspa-profile.xml"?> -->
      </references>

      <references>
      <name>Informative References</name>
       <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6484.xml"/>
       <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7115.xml"/>
       <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7908.xml"/>
       <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9319.xml"/>
       <reference anchor="IANA-AF" target="https://www.iana.org/assignments/address-family-numbers/address-family-numbers.xhtml" quote-title="true">
        <front>
          <title>Address Family Numbers</title>
          <author>
            <organization>IANA</organization>
          </author>
          <date/>
        </front>
        <!-- <seriesInfo name="Reachable from" value="http://www.iana.org/numbers.html"/> -->
      </reference>

      <reference anchor="IANA-SAF" target="https://www.iana.org/assignments/safi-namespace/safi-namespace.xhtml" quote-title="true">
          <front>
            <title>Subsequent Address Family Identifiers (SAFI) Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        <!-- <seriesInfo name="Reachable from" value="http://www.iana.org/numbers.html"/> -->
        </reference>
      </references>
      </references>

      <!--
      <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>
        The authors wish to thank ...
      </t>
      </section>
      -->

  </back>

</rfc>
