<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-li-sidrops-matching-rov-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="MF-ROV">Matching-first Route Origin Validation</title>
    <seriesInfo name="Internet-Draft" value="draft-li-sidrops-matching-rov-00"/>
    <author fullname="Yanbiao Li" initials="Y." surname="Li">
      <organization>CNIC, CAS</organization>
      <address>
        <email>lybmath@cnic.cn</email>
      </address>
    </author>
    <author fullname="Hui Zou" initials="H." surname="Zou">
      <organization>CNIC, CAS</organization>
      <address>
        <email>zouhui@cnic.cn</email>
      </address>
    </author>
    <author fullname="Gaogang Xie" initials="G." surname="Xie">
      <organization>CNIC, CAS</organization>
      <address>
        <email>xie@cnic.cn</email>
      </address>
    </author>
    <date year="2025" month="July" day="07"/>
    <area>Ops&amp;Management</area>
    <workgroup>SIDR Operations</workgroup>
    <keyword>Routing Security</keyword>
    <keyword>BGP</keyword>
    <keyword>RPKI</keyword>
    <keyword>ROV</keyword>
    <abstract>
      <t>Route Origin Validation (ROV) using the Resource Public Key Infrastructure (RPKI) enables BGP routers to identify illegitimate routes that violate Route Origin Authorizations (ROAs). However, widespread deployment of RPKI requires validation systems to process high volumes of route announcements against increasingly large ROA datasets, where ROV adoption faces significant barriers due to concerns about its processing efficiency. This document identifies a performance issue inherent in current ROV procedure, which could be exacerbated as the expanding coverage of ROAs.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>The rapid deployment of RPKI has significantly expanded Route Origin Authorization (ROA) coverage. However, validating large volumes of route announcements against increasingly massive ROA datasets poses a significant challenge for routers. These efficiency concerns regarding Route Origin Validation (ROV) create a barrier to its wider adoption.</t>

      <t>Current ROV implementations, defined in RFCs 6483 and 6811, typically perform an initial coarse-grained match of a BGP route against all ROAs before verifying an exact match. This approach optimizes for routes without ROA coverage, allowing their validity state (e.g., NotFound) to be determined quickly. However, as ROA coverage expands, this method suffers performance degradation: validation latency increases proportionally with the expanding ROA datasets, especially the increasing number of BGP routes that can pass the validation. Evaluations of open-source ROV implementations confirm this scaling issue.</t>

      <t>To mitigate performance degradation caused by shifting validity distributions, this document defines a modified validation model through step reordering. The optimized workflow first performs precise matching against all ROAs to immediately identify Valid routes, followed by coverage verification to determine NotFound status. Performance evaluations of reference implementations confirm the model's superiority.</t>
      
      <section anchor="requirements-language">
      <name>Requirements Language</name>
      <t>In this document, the key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" are to be interpreted as described in RFC 2119 <xref target="RFC2119"/> when they appear in all upper case.</t>
      </section>
      <section anchor="terminology">
      <name>Terminology</name>
      <t>Besides, the terms "VRP", "VRP Prefix", "VRP ASN", "Route", "Route Prefix", "Route Origin ASN", "Covered", "Matched", "NotFound", "Valid", "Invalid" are to be interpreted as described in RFC 6811 <xref target="RFC6811"/> when they appear in all upper case.</t>
      <t>If a Route is Covered by a VRP, it is termed a covering VRP of that Route. Similarly, if a Route is Matched by a VRP, it is termed a matching VRP of that Route. For a given Route, a matching VRP is a special covering VRP such that: 1) its VRP ASN is the same as the Route Origin ASN and 2) its maxLength value is greater than or equal to the length of Route Prefix.</t>
      <t>For a given Route, the process of finding out a covering VRP or figuring out whether there exists a covering VRP is termed <strong>FC</strong>, while the process of finding out a matching VRP or figuring out whether there exists a matching VRP is termed <strong>FM</strong>. The process to examine whether a covering VRP is a matching VRP is termed <strong>EM</strong>.</t>
      </section>
    </section>
  
    <section anchor="overview-of-current-rov-procedure">
      <name>Overview of Current ROV Procedure</name>
      <t>As a informational, RFC 6483 <xref target="RFC6483"/> describes a general procedure to determine the validity state of a given Route against a set of VRPs, which can be summarized as follows using the terms FC and EM.</t>
      <ul spacing="normal">
        <li>
          <t>FC step: iteratively perform FC to find out all covering VRPs, output NotFound if there is no covering VRP; otherwise go to the EM step.</t>
        </li>
        <li>
          <t>EM step: iteratively perform EM to examine every covering VRP, output Invalid if there is no matching VRP; otherwise output Valid once a matching VRP is found.</t>
        </li>
      </ul>
      <t>RFC 6811 <xref target="RFC6811"/> has standardized the validation procedure and provides the corresponding pseudo-code, which illustrates a similar procedure as the above one but could be more efficient regarding system implementation. This validation procedure can be summarized as follows using the terms FC and EM.</t>
      <ul spacing="normal">
        <li>
          <t>FC step: perform FC to find out the first covering VRP, output NotFound if this step fails; otherwise go to the EM step.</t>
        </li>
        <li>
          <t>EM step: iteratively perform EM to examine the current covering VRP and perform FC to find out the next covering VRP, output Invalid if there is no matching VRP; otherwise output Valid once a matching VRP is found.</t>
        </li>
      </ul>
      <t>Actually, the ROV implementations with the RTRLib <xref target="RTRLib"/>, BIRD <xref target="BIRD"/> and BGP-SRX <xref target="BGP-SRX"/> all follow the above validation procedure. They all adopt Trie-like structures for FC and can output NotFound fast at the earliest stage. We call this validation procedure the <strong>non-covering</strong> first validation.</t>
    </section>
  
    <section anchor="performance-issue-analysis-and-evaluation">
      <name>Performance Issue Analysis and Evaluation</name>
      <t>Non-covering first validation optimizes for BGP routes in the NotFound state. However, this approach delays determining the validity state of Valid routes, which was a tolerable tradeoff during early RPKI deployment when sparse ROA coverage resulted in predominantly NotFound states. However, today, with more than half of global BGP routes are in the Valid state (and growing), non-covering first validation incurs escalating latency as both ROA volume and Valid routes increase simultaneously.</t>
      <t>To quantify this scaling limitation, we measured ROV efficiency using real-world ROA datasets and BGP routing tables. We evaluated four implementations: RTRLib, BGP-SRX, BIRD's basic ROV (BIRD-basic), and BIRD's Trie-optimized ROV (BIRD-opt). The mean validation latency per route during full-table processing served as the efficiency metric. Related source code, datasets and results can be accessed via: https://github.com/FIRLab-CNIC/h-2ROV</t>
      <section anchor="comparative-validation-latency-impact-by-validity-distribution">
        <name>Comparative Validation Latency Impact by Validity Distribution</name>
        <t>Validation of the full RIB (collected from RIPE NCC RIS RRC00 collector on 1st July, 2025) against ROAs (collected from RIPE NCC on 1st July, 2025) classifies routes into three subsets: Valid, Invalid, and NotFound. Using these subsets, we synthesized 55 test RIBs of fixed size (1,050,986 routes each) with controlled validity distributions. Each test RIB was constructed by randomly sampling specified quantities of routes from the Valid, Invalid, and NotFound subsets. The four ROV mechanisms preloaded with the collected ROAs were evaluated against all 55 synthetic RIBs, with results detailed below.</t>
        <t>Experimental results confirm an inverse correlation between the proportion of Valid routes and validation efficiency in RTRLib, BGP-SRX, and BIRD-opt when the sum of routes in Valid or NotFound states is held constant. In tests with no Invalid routes, increasing the Valid ratio from 0 to 100% in 10% increments induced latency multipliers of 1.6, 1.9, and 3.5 for the respective implementations. With 10% of routes in Invalid state, the latency multipliers become 1.5, 1.8, and 3.1 under identical conditions. The root inefficiency stems from how non-covering first validation defers validation of Valid routes, where the latency penalty compounds as the proportion of Valid routes increases.</t>
        <t>Contrasting with other implementations, BIRD-basic exhibits an inverse performance relationship: mean validation latency decreases with higher Valid route proportions. This anomaly stems from its structural divergence from true non-covering first validation. Without Trie optimization, BIRD-basic employs iterative hash probes to identify covering VRPs and cannot output NotFound until all probes complete. This design causes severe inefficiency in NotFound-dominant environments. This is the reason why BIRD-opt was developed. However, as Valid routes become prevalent, the way using iterative hash probes show its advantage since many Valid routes could be confirmed within few probes. Experimental results show BIRD-basic outperforming BIRD-opt in pure-Valid scenarios. Thus, BIRD-basic accidentally approximates (though inefficiently) the validation model proposed in Section 4.</t>
        <t><strong>The Validation Latency with RTRLib (nanosecond):</strong></t>
        <table>
          <thead>
            <tr>
              <th align="left">% of Valid</th>
              <th align="left">0%</th>
              <th align="left">10%</th>
              <th align="left">20%</th>
              <th align="left">30%</th>
              <th align="left">40%</th>
              <th align="left">50%</th>
              <th align="left">60%</th>
              <th align="left">70%</th>
              <th align="left">80%</th>
              <th align="left">90%</th>
              <th align="left">100%</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">% of NotFound</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">0%</td>
              <td align="left">1190</td>
              <td align="left">1214</td>
              <td align="left">1241</td>
              <td align="left">1266</td>
              <td align="left">1282</td>
              <td align="left">1306</td>
              <td align="left">1351</td>
              <td align="left">1359</td>
              <td align="left">1376</td>
              <td align="left">1406</td>
              <td align="left">1464</td>
            </tr>
            <tr>
              <td align="left">10%</td>
              <td align="left">1173</td>
              <td align="left">1192</td>
              <td align="left">1215</td>
              <td align="left">1237</td>
              <td align="left">1361</td>
              <td align="left">1280</td>
              <td align="left">1321</td>
              <td align="left">1346</td>
              <td align="left">1476</td>
              <td align="left">1399</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">20%</td>
              <td align="left">1147</td>
              <td align="left">1170</td>
              <td align="left">1194</td>
              <td align="left">1221</td>
              <td align="left">1232</td>
              <td align="left">1254</td>
              <td align="left">1281</td>
              <td align="left">1315</td>
              <td align="left">1321</td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">30%</td>
              <td align="left">1123</td>
              <td align="left">1148</td>
              <td align="left">1170</td>
              <td align="left">1195</td>
              <td align="left">1206</td>
              <td align="left">1245</td>
              <td align="left">1268</td>
              <td align="left">1351</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">40%</td>
              <td align="left">1092</td>
              <td align="left">1119</td>
              <td align="left">1141</td>
              <td align="left">1237</td>
              <td align="left">1189</td>
              <td align="left">1218</td>
              <td align="left">1238</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">50%</td>
              <td align="left">1072</td>
              <td align="left">1095</td>
              <td align="left">1119</td>
              <td align="left">1144</td>
              <td align="left">1165</td>
              <td align="left">1184</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">60%</td>
              <td align="left">1047</td>
              <td align="left">1069</td>
              <td align="left">1092</td>
              <td align="left">1117</td>
              <td align="left">1137</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">70%</td>
              <td align="left">1018</td>
              <td align="left">1048</td>
              <td align="left">1062</td>
              <td align="left">1092</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">80%</td>
              <td align="left">996</td>
              <td align="left">1020</td>
              <td align="left">1038</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">90%</td>
              <td align="left">962</td>
              <td align="left">984</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">100%</td>
              <td align="left">929</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
          </tbody>
        </table>
        <t><strong>The Validation Latency with BGP-SRX (nanosecond):</strong></t>
        <table>
          <thead>
            <tr>
              <th align="left">% of Valid</th>
              <th align="left">0%</th>
              <th align="left">10%</th>
              <th align="left">20%</th>
              <th align="left">30%</th>
              <th align="left">40%</th>
              <th align="left">50%</th>
              <th align="left">60%</th>
              <th align="left">70%</th>
              <th align="left">80%</th>
              <th align="left">90%</th>
              <th align="left">100%</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">% of NotFound</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">0%</td>
              <td align="left">580</td>
              <td align="left">650</td>
              <td align="left">703</td>
              <td align="left">761</td>
              <td align="left">817</td>
              <td align="left">872</td>
              <td align="left">946</td>
              <td align="left">994</td>
              <td align="left">1022</td>
              <td align="left">1115</td>
              <td align="left">1138</td>
            </tr>
            <tr>
              <td align="left">10%</td>
              <td align="left">597</td>
              <td align="left">653</td>
              <td align="left">701</td>
              <td align="left">765</td>
              <td align="left">804</td>
              <td align="left">859</td>
              <td align="left">947</td>
              <td align="left">1007</td>
              <td align="left">1054</td>
              <td align="left">1115</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">20%</td>
              <td align="left">605</td>
              <td align="left">650</td>
              <td align="left">706</td>
              <td align="left">760</td>
              <td align="left">813</td>
              <td align="left">865</td>
              <td align="left">951</td>
              <td align="left">1002</td>
              <td align="left">1019</td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">30%</td>
              <td align="left">601</td>
              <td align="left">653</td>
              <td align="left">706</td>
              <td align="left">765</td>
              <td align="left">809</td>
              <td align="left">892</td>
              <td align="left">945</td>
              <td align="left">974</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">40%</td>
              <td align="left">606</td>
              <td align="left">655</td>
              <td align="left">725</td>
              <td align="left">770</td>
              <td align="left">840</td>
              <td align="left">877</td>
              <td align="left">941</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">50%</td>
              <td align="left">609</td>
              <td align="left">664</td>
              <td align="left">719</td>
              <td align="left">767</td>
              <td align="left">835</td>
              <td align="left">872</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">60%</td>
              <td align="left">614</td>
              <td align="left">659</td>
              <td align="left">715</td>
              <td align="left">775</td>
              <td align="left">823</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">70%</td>
              <td align="left">616</td>
              <td align="left">668</td>
              <td align="left">720</td>
              <td align="left">771</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">80%</td>
              <td align="left">617</td>
              <td align="left">667</td>
              <td align="left">724</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">90%</td>
              <td align="left">621</td>
              <td align="left">669</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">100%</td>
              <td align="left">616</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
          </tbody>
        </table>
        <t><strong>The Validation Latency with BIRD-opt (nanosecond):</strong></t>
        <table>
          <thead>
            <tr>
              <th align="left">% of Valid</th>
              <th align="left">0%</th>
              <th align="left">10%</th>
              <th align="left">20%</th>
              <th align="left">30%</th>
              <th align="left">40%</th>
              <th align="left">50%</th>
              <th align="left">60%</th>
              <th align="left">70%</th>
              <th align="left">80%</th>
              <th align="left">90%</th>
              <th align="left">100%</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">% of NotFound</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">0%</td>
              <td align="left">442</td>
              <td align="left">458</td>
              <td align="left">474</td>
              <td align="left">494</td>
              <td align="left">508</td>
              <td align="left">522</td>
              <td align="left">534</td>
              <td align="left">564</td>
              <td align="left">564</td>
              <td align="left">616</td>
              <td align="left">591</td>
            </tr>
            <tr>
              <td align="left">10%</td>
              <td align="left">420</td>
              <td align="left">439</td>
              <td align="left">449</td>
              <td align="left">466</td>
              <td align="left">475</td>
              <td align="left">496</td>
              <td align="left">524</td>
              <td align="left">557</td>
              <td align="left">569</td>
              <td align="left">589</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">20%</td>
              <td align="left">392</td>
              <td align="left">416</td>
              <td align="left">421</td>
              <td align="left">439</td>
              <td align="left">450</td>
              <td align="left">466</td>
              <td align="left">511</td>
              <td align="left">519</td>
              <td align="left">502</td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">30%</td>
              <td align="left">366</td>
              <td align="left">381</td>
              <td align="left">411</td>
              <td align="left">410</td>
              <td align="left">419</td>
              <td align="left">449</td>
              <td align="left">513</td>
              <td align="left">464</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">40%</td>
              <td align="left">337</td>
              <td align="left">353</td>
              <td align="left">372</td>
              <td align="left">398</td>
              <td align="left">405</td>
              <td align="left">411</td>
              <td align="left">435</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">50%</td>
              <td align="left">309</td>
              <td align="left">323</td>
              <td align="left">343</td>
              <td align="left">353</td>
              <td align="left">385</td>
              <td align="left">382</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">60%</td>
              <td align="left">279</td>
              <td align="left">296</td>
              <td align="left">310</td>
              <td align="left">327</td>
              <td align="left">362</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">70%</td>
              <td align="left">253</td>
              <td align="left">270</td>
              <td align="left">299</td>
              <td align="left">296</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">80%</td>
              <td align="left">225</td>
              <td align="left">240</td>
              <td align="left">254</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">90%</td>
              <td align="left">198</td>
              <td align="left">220</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">100%</td>
              <td align="left">168</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
          </tbody>
        </table>
        <t><strong>The Validation Latency with BIRD-basic (nanosecond):</strong></t>
        <table>
          <thead>
            <tr>
              <th align="left">% of Valid</th>
              <th align="left">0%</th>
              <th align="left">10%</th>
              <th align="left">20%</th>
              <th align="left">30%</th>
              <th align="left">40%</th>
              <th align="left">50%</th>
              <th align="left">60%</th>
              <th align="left">70%</th>
              <th align="left">80%</th>
              <th align="left">90%</th>
              <th align="left">100%</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">% of NotFound</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">0%</td>
              <td align="left">1457</td>
              <td align="left">1358</td>
              <td align="left">1259</td>
              <td align="left">1169</td>
              <td align="left">1076</td>
              <td align="left">995</td>
              <td align="left">882</td>
              <td align="left">800</td>
              <td align="left">699</td>
              <td align="left">602</td>
              <td align="left">508</td>
            </tr>
            <tr>
              <td align="left">10%</td>
              <td align="left">1501</td>
              <td align="left">1418</td>
              <td align="left">1314</td>
              <td align="left">1215</td>
              <td align="left">1123</td>
              <td align="left">1031</td>
              <td align="left">947</td>
              <td align="left">859</td>
              <td align="left">757</td>
              <td align="left">685</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">20%</td>
              <td align="left">1542</td>
              <td align="left">1456</td>
              <td align="left">1354</td>
              <td align="left">1273</td>
              <td align="left">1171</td>
              <td align="left">1080</td>
              <td align="left">980</td>
              <td align="left">916</td>
              <td align="left">793</td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">30%</td>
              <td align="left">1594</td>
              <td align="left">1502</td>
              <td align="left">1437</td>
              <td align="left">1329</td>
              <td align="left">1219</td>
              <td align="left">1150</td>
              <td align="left">1068</td>
              <td align="left">931</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">40%</td>
              <td align="left">1646</td>
              <td align="left">1559</td>
              <td align="left">1494</td>
              <td align="left">1423</td>
              <td align="left">1295</td>
              <td align="left">1224</td>
              <td align="left">1101</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">50%</td>
              <td align="left">1681</td>
              <td align="left">1592</td>
              <td align="left">1513</td>
              <td align="left">1410</td>
              <td align="left">1351</td>
              <td align="left">1226</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">60%</td>
              <td align="left">1757</td>
              <td align="left">1637</td>
              <td align="left">1553</td>
              <td align="left">1458</td>
              <td align="left">1399</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">70%</td>
              <td align="left">1777</td>
              <td align="left">1735</td>
              <td align="left">1634</td>
              <td align="left">1513</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">80%</td>
              <td align="left">1842</td>
              <td align="left">1742</td>
              <td align="left">1647</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">90%</td>
              <td align="left">1931</td>
              <td align="left">1853</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">100%</td>
              <td align="left">1969</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="temporal-dynamics-in-rov-efficiency">
        <name>Temporal Dynamics in ROV Efficiency</name>
        <t>To evaluate ROV efficiency over time, quarterly snapshots of RIBs and ROAs were collected from January 2015 to July 2025 (January 1, April 1, July 1, and October 1 annually). These form 43 paired datasets, each containing a RIB and ROAs collected on the same date. Every dataset was evaluated by validating all routes in its RIB against corresponding ROAs using the four ROV mechanisms respectively, with results detailed below.</t>
        <t><strong>The Validation Latency with Five ROV Implementations (nanosecond):</strong></t>
        <table>
          <thead>
            <tr>
              <th align="left"> </th>
              <th align="left">h-ROV</th>
              <th align="left">RTRLib</th>
              <th align="left">BIRD-basic</th>
              <th align="left">BIRD-opt</th>
              <th align="left">BGP-SRX</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">20150101</td>
              <td align="left">165.098</td>
              <td align="left">523.560</td>
              <td align="left">757.002</td>
              <td align="left">118.413</td>
              <td align="left">175.254</td>
            </tr>
            <tr>
              <td align="left">20150401</td>
              <td align="left">158.655</td>
              <td align="left">491.642</td>
              <td align="left">791.139</td>
              <td align="left">115.407</td>
              <td align="left">178.476</td>
            </tr>
            <tr>
              <td align="left">20150701</td>
              <td align="left">155.087</td>
              <td align="left">497.265</td>
              <td align="left">827.130</td>
              <td align="left">113.161</td>
              <td align="left">180.930</td>
            </tr>
            <tr>
              <td align="left">20151001</td>
              <td align="left">154.083</td>
              <td align="left">497.265</td>
              <td align="left">834.028</td>
              <td align="left">113.122</td>
              <td align="left">182.548</td>
            </tr>
            <tr>
              <td align="left">20160101</td>
              <td align="left">163.399</td>
              <td align="left">503.778</td>
              <td align="left">863.558</td>
              <td align="left">113.804</td>
              <td align="left">185.322</td>
            </tr>
            <tr>
              <td align="left">20160401</td>
              <td align="left">149.410</td>
              <td align="left">504.032</td>
              <td align="left">689.180</td>
              <td align="left">113.623</td>
              <td align="left">184.570</td>
            </tr>
            <tr>
              <td align="left">20160701</td>
              <td align="left">165.920</td>
              <td align="left">514.139</td>
              <td align="left">738.007</td>
              <td align="left">114.837</td>
              <td align="left">188.005</td>
            </tr>
            <tr>
              <td align="left">20161001</td>
              <td align="left">146.649</td>
              <td align="left">517.331</td>
              <td align="left">744.602</td>
              <td align="left">115.580</td>
              <td align="left">189.179</td>
            </tr>
            <tr>
              <td align="left">20170101</td>
              <td align="left">147.189</td>
              <td align="left">519.751</td>
              <td align="left">755.858</td>
              <td align="left">116.618</td>
              <td align="left">192.976</td>
            </tr>
            <tr>
              <td align="left">20170401</td>
              <td align="left">151.378</td>
              <td align="left">528.262</td>
              <td align="left">791.766</td>
              <td align="left">117.495</td>
              <td align="left">195.810</td>
            </tr>
            <tr>
              <td align="left">20170701</td>
              <td align="left">155.063</td>
              <td align="left">531.632</td>
              <td align="left">819.672</td>
              <td align="left">119.775</td>
              <td align="left">201.450</td>
            </tr>
            <tr>
              <td align="left">20171001</td>
              <td align="left">158.403</td>
              <td align="left">542.005</td>
              <td align="left">884.956</td>
              <td align="left">121.907</td>
              <td align="left">204.583</td>
            </tr>
            <tr>
              <td align="left">20180101</td>
              <td align="left">161.316</td>
              <td align="left">541.712</td>
              <td align="left">924.214</td>
              <td align="left">123.305</td>
              <td align="left">212.811</td>
            </tr>
            <tr>
              <td align="left">20180401</td>
              <td align="left">171.438</td>
              <td align="left">553.403</td>
              <td align="left">732.601</td>
              <td align="left">125.109</td>
              <td align="left">216.967</td>
            </tr>
            <tr>
              <td align="left">20180701</td>
              <td align="left">154.154</td>
              <td align="left">634.921</td>
              <td align="left">823.723</td>
              <td align="left">143.740</td>
              <td align="left">264.971</td>
            </tr>
            <tr>
              <td align="left">20181001</td>
              <td align="left">159.668</td>
              <td align="left">648.508</td>
              <td align="left">838.926</td>
              <td align="left">145.879</td>
              <td align="left">273.973</td>
            </tr>
            <tr>
              <td align="left">20190101</td>
              <td align="left">154.967</td>
              <td align="left">668.003</td>
              <td align="left">923.361</td>
              <td align="left">154.727</td>
              <td align="left">298.063</td>
            </tr>
            <tr>
              <td align="left">20190401</td>
              <td align="left">164.123</td>
              <td align="left">684.463</td>
              <td align="left">759.301</td>
              <td align="left">160.436</td>
              <td align="left">314.367</td>
            </tr>
            <tr>
              <td align="left">20190701</td>
              <td align="left">174.307</td>
              <td align="left">699.790</td>
              <td align="left">759.301</td>
              <td align="left">164.177</td>
              <td align="left">328.192</td>
            </tr>
            <tr>
              <td align="left">20191001</td>
              <td align="left">158.957</td>
              <td align="left">722.543</td>
              <td align="left">872.600</td>
              <td align="left">174.917</td>
              <td align="left">353.982</td>
            </tr>
            <tr>
              <td align="left">20200101</td>
              <td align="left">178.987</td>
              <td align="left">742.390</td>
              <td align="left">985.222</td>
              <td align="left">185.632</td>
              <td align="left">371.609</td>
            </tr>
            <tr>
              <td align="left">20200401</td>
              <td align="left">173.370</td>
              <td align="left">771.010</td>
              <td align="left">1025.641</td>
              <td align="left">195.313</td>
              <td align="left">405.186</td>
            </tr>
            <tr>
              <td align="left">20200701</td>
              <td align="left">179.340</td>
              <td align="left">800.000</td>
              <td align="left">827.815</td>
              <td align="left">210.793</td>
              <td align="left">448.029</td>
            </tr>
            <tr>
              <td align="left">20201001</td>
              <td align="left">188.076</td>
              <td align="left">835.422</td>
              <td align="left">912.409</td>
              <td align="left">228.102</td>
              <td align="left">490.677</td>
            </tr>
            <tr>
              <td align="left">20210101</td>
              <td align="left">205.719</td>
              <td align="left">865.801</td>
              <td align="left">989.120</td>
              <td align="left">244.141</td>
              <td align="left">529.661</td>
            </tr>
            <tr>
              <td align="left">20210401</td>
              <td align="left">194.970</td>
              <td align="left">882.613</td>
              <td align="left">1109.878</td>
              <td align="left">254.582</td>
              <td align="left">559.284</td>
            </tr>
            <tr>
              <td align="left">20210701</td>
              <td align="left">205.592</td>
              <td align="left">906.618</td>
              <td align="left">1273.885</td>
              <td align="left">265.816</td>
              <td align="left">575.705</td>
            </tr>
            <tr>
              <td align="left">20211001</td>
              <td align="left">198.570</td>
              <td align="left">883.392</td>
              <td align="left">1140.251</td>
              <td align="left">242.307</td>
              <td align="left">544.959</td>
            </tr>
            <tr>
              <td align="left">20220101</td>
              <td align="left">206.313</td>
              <td align="left">930.233</td>
              <td align="left">1406.470</td>
              <td align="left">271.370</td>
              <td align="left">592.417</td>
            </tr>
            <tr>
              <td align="left">20220401</td>
              <td align="left">210.881</td>
              <td align="left">962.464</td>
              <td align="left">1034.126</td>
              <td align="left">285.225</td>
              <td align="left">651.466</td>
            </tr>
            <tr>
              <td align="left">20220701</td>
              <td align="left">211.685</td>
              <td align="left">982.318</td>
              <td align="left">1046.025</td>
              <td align="left">298.954</td>
              <td align="left">678.887</td>
            </tr>
            <tr>
              <td align="left">20221001</td>
              <td align="left">212.811</td>
              <td align="left">1005.025</td>
              <td align="left">1101.322</td>
              <td align="left">314.169</td>
              <td align="left">707.714</td>
            </tr>
            <tr>
              <td align="left">20230101</td>
              <td align="left">216.263</td>
              <td align="left">1000.000</td>
              <td align="left">1187.648</td>
              <td align="left">303.767</td>
              <td align="left">679.348</td>
            </tr>
            <tr>
              <td align="left">20230401</td>
              <td align="left">223.115</td>
              <td align="left">1034.126</td>
              <td align="left">1254.705</td>
              <td align="left">328.947</td>
              <td align="left">695.894</td>
            </tr>
            <tr>
              <td align="left">20230701</td>
              <td align="left">225.785</td>
              <td align="left">1039.501</td>
              <td align="left">1245.330</td>
              <td align="left">329.056</td>
              <td align="left">767.460</td>
            </tr>
            <tr>
              <td align="left">20231001</td>
              <td align="left">255.754</td>
              <td align="left">1062.699</td>
              <td align="left">1333.333</td>
              <td align="left">355.999</td>
              <td align="left">775.795</td>
            </tr>
            <tr>
              <td align="left">20240101</td>
              <td align="left">257.533</td>
              <td align="left">1079.914</td>
              <td align="left">1362.398</td>
              <td align="left">370.096</td>
              <td align="left">795.545</td>
            </tr>
            <tr>
              <td align="left">20240401</td>
              <td align="left">239.292</td>
              <td align="left">1062.699</td>
              <td align="left">1443.001</td>
              <td align="left">350.140</td>
              <td align="left">747.384</td>
            </tr>
            <tr>
              <td align="left">20240701</td>
              <td align="left">244.618</td>
              <td align="left">1104.972</td>
              <td align="left">1631.321</td>
              <td align="left">383.877</td>
              <td align="left">823.045</td>
            </tr>
            <tr>
              <td align="left">20241001</td>
              <td align="left">246.488</td>
              <td align="left">1097.695</td>
              <td align="left">1510.574</td>
              <td align="left">376.506</td>
              <td align="left">794.913</td>
            </tr>
            <tr>
              <td align="left">20250101</td>
              <td align="left">246.488</td>
              <td align="left">1106.195</td>
              <td align="left">1555.210</td>
              <td align="left">385.654</td>
              <td align="left">859.845</td>
            </tr>
            <tr>
              <td align="left">20250401</td>
              <td align="left">255.493</td>
              <td align="left">1156.069</td>
              <td align="left">1049.318</td>
              <td align="left">397.298</td>
              <td align="left">884.173</td>
            </tr>
            <tr>
              <td align="left">20250701</td>
              <td align="left">254.001</td>
              <td align="left">1173.709</td>
              <td align="left">1089.325</td>
              <td align="left">409.668</td>
              <td align="left">892.857</td>
            </tr>
          </tbody>
        </table>
        <t>Over time, Valid route prevalence increases significantly, with particularly rapid growth after 2019. This correlates with a proportional decline in NotFound states. Meanwhile, Invalid routes remain stable below 3.0%, exhibiting minor fluctuations. Consequently, ROV efficiency becomes predominantly governed by the latency performance for either Valid or NotFound route processing. Concurrently, expanding ROA datasets can also compound ROV computational demands.</t>
        <t>Expanding ROA datasets and rising Valid route prevalence collectively drive significant latency growth in RTRLib, BGP-SRX, and BIRD-opt, which have increased by factors of 1.6, 2.4, and 2.2, respectively since 2020. However, BIRD-basic, while consistently outperformed by its Trie-optimized variant (BIRD-opt) throughout the observation period, exhibits marginal throughput gains since April 2025. This confirms that validity distribution has become the dominant factor to ROV efficiency of BIRD-basic.</t>
      </section>
      <section anchor="a-brief-summary">
        <name>A Brief Summary</name>
        <ul spacing="normal">
          <li>
            <t>While non-covering first validation provided efficiency advantages during RPKI's initial deployment phase, it has become unsuitable for present-day validity distributions and will exhibit progressively worse scalability as RPKI adoption continues to grow.</t>
          </li>
          <li>
            <t>As RPKI adoption increases, two distinct factors, expanding ROA datasets and rising Valid route prevalence, independently yet collectively impact ROV efficiency. These separable influences warrant distinct optimization strategies.</t>
          </li>
        </ul>
      </section>
    </section>

    <section anchor="matching-first-route-origin-validation">
      <name>Matching First Route Origin Validation</name>
      <t>Non-covering first validation, though pivotal during initial RPKI deployment, fails to scale in modern environments where Valid routes have exceed 50% and continue growing, rendering it fundamentally mismatched to current validity distributions and those in future. Revisiting the validation model is now imperative to guide ROV implementations toward capitalizing on rising Valid route prevalence while mitigating scaling challenges from expanding ROA datasets. The critical optimization involves prioritizing matching VRP discovery over covering VRP searches. Such a matching first validation procedure can be defined as follows.</t>
      <ul spacing="normal">
        <li>
          <t>FM step: find out a matching VRP or figuring out whether there exists a matching VRP, output Valid if there is one; otherwise go to the FC step.</t>
        </li>
        <li>
          <t>FC step: find out a covering VRP or figuring out whether there exists a covering VRP, output Invalid if there is one; otherwise output NotFound.</t>
        </li>
      </ul>
      <section anchor="another-reference-implementation">
       <name>Another Reference Implementation</name>
         <t>BIRD-basic constitutes an implementation of this model, thus benefiting significantly from rising Valid route proportions. However, its efficiency remains suboptimal due to requiring multiple hash probes, each involving sequential FM examinations, to confirm Valid state. In contrast, h-ROV <xref target="h-ROV"/> provides a more efficient reference implementation through bitmap-encoded VRPs. This approach guarantees most Valid routes are identified via a single hash probe followed with a bitwise operation.</t>
        <t>Experimental results (detailed below) for h-ROV, evaluated per the methodology described in Section 3.1, demonstrate 66.3%~85.7% lower validation latency than BIRD-basic under identical validity distributions. When Valid routes exceed 30%, h-ROV achieves the lowest latency among all evaluated ROV mechanisms.</t>
        <t><strong>The Validation Latency with h-ROV (nanosecond):</strong></t>
        <table>
          <thead>
            <tr>
              <th align="left">% of Valid</th>
              <th align="left">0%</th>
              <th align="left">10%</th>
              <th align="left">20%</th>
              <th align="left">30%</th>
              <th align="left">40%</th>
              <th align="left">50%</th>
              <th align="left">60%</th>
              <th align="left">70%</th>
              <th align="left">80%</th>
              <th align="left">90%</th>
              <th align="left">100%</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">% of NotFound</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">0%</td>
              <td align="left">209</td>
              <td align="left">207</td>
              <td align="left">204</td>
              <td align="left">199</td>
              <td align="left">195</td>
              <td align="left">192</td>
              <td align="left">187</td>
              <td align="left">186</td>
              <td align="left">192</td>
              <td align="left">174</td>
              <td align="left">171</td>
            </tr>
            <tr>
              <td align="left">10%</td>
              <td align="left">218</td>
              <td align="left">217</td>
              <td align="left">213</td>
              <td align="left">211</td>
              <td align="left">205</td>
              <td align="left">202</td>
              <td align="left">200</td>
              <td align="left">197</td>
              <td align="left">192</td>
              <td align="left">189</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">20%</td>
              <td align="left">228</td>
              <td align="left">225</td>
              <td align="left">222</td>
              <td align="left">220</td>
              <td align="left">215</td>
              <td align="left">211</td>
              <td align="left">206</td>
              <td align="left">206</td>
              <td align="left">199</td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">30%</td>
              <td align="left">236</td>
              <td align="left">236</td>
              <td align="left">235</td>
              <td align="left">229</td>
              <td align="left">222</td>
              <td align="left">223</td>
              <td align="left">218</td>
              <td align="left">199</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">40%</td>
              <td align="left">246</td>
              <td align="left">245</td>
              <td align="left">242</td>
              <td align="left">220</td>
              <td align="left">234</td>
              <td align="left">232</td>
              <td align="left">227</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">50%</td>
              <td align="left">255</td>
              <td align="left">251</td>
              <td align="left">251</td>
              <td align="left">247</td>
              <td align="left">245</td>
              <td align="left">239</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">60%</td>
              <td align="left">265</td>
              <td align="left">263</td>
              <td align="left">257</td>
              <td align="left">257</td>
              <td align="left">253</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">70%</td>
              <td align="left">276</td>
              <td align="left">271</td>
              <td align="left">266</td>
              <td align="left">266</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">80%</td>
              <td align="left">283</td>
              <td align="left">281</td>
              <td align="left">276</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">90%</td>
              <td align="left">294</td>
              <td align="left">293</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">100%</td>
              <td align="left">298</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
          </tbody>
        </table>
        <t>Experimental results for h-ROV (methodology per Section 3.2) show latency escalation consistent with other implementations due to expanding ROA datasets. However, h-ROV exhibits more moderate latency growth, offset by efficiency gains from rising Valid route prevalence. While BIRD-opt demonstrated the lowest latency before July 2019, h-ROV became the most efficient implementation after October 2019, with its performance advantage widening over time.</t>
      </section>
      <section anchor="lessons-lenard-from-reference-implementations">
        <name>Lessons Lenard from Reference Implementations</name>
        <ul spacing="normal">
          <li>
            <t>While the matching-first validation model enables scalable performance amid expanding ROA coverage, realized ROV efficiency remains contingent on implementation-specific optimizations.</t>
          </li>
          <li>
            <t>Prefix-level VRP management enables highly efficient implementations of the matching first validation model.</t>
          </li>
        </ul>
      </section>
    </section>

    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security considerations in Section 6 of RFC6811 <xref target="RFC6811"/> are also applied to this document.</t>
    </section>
    
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>  
  </middle>

  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC6811">
          <front>
            <title>BGP Prefix Origin Validation</title>
            <author fullname="P. Mohapatra" initials="P." surname="Mohapatra"/>
            <author fullname="J. Scudder" initials="J." surname="Scudder"/>
            <author fullname="D. Ward" initials="D." surname="Ward"/>
            <author fullname="R. Bush" initials="R." surname="Bush"/>
            <author fullname="R. Austein" initials="R." surname="Austein"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>To help reduce well-known threats against BGP including prefix mis- announcing and monkey-in-the-middle attacks, one of the security requirements is the ability to validate the origination Autonomous System (AS) of BGP routes. More specifically, one needs to validate that the AS number claiming to originate an address prefix (as derived from the AS_PATH attribute of the BGP route) is in fact authorized by the prefix holder to do so. This document describes a simple validation mechanism to partially satisfy this requirement. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6811"/>
          <seriesInfo name="DOI" value="10.17487/RFC6811"/>
        </reference>
        <reference anchor="RFC6483">
          <front>
            <title>Validation of Route Origination Using the Resource Certificate Public Key Infrastructure (PKI) and Route Origin Authorizations (ROAs)</title>
            <author fullname="G. Huston" initials="G." surname="Huston"/>
            <author fullname="G. Michaelson" initials="G." surname="Michaelson"/>
            <date month="February" year="2012"/>
            <abstract>
              <t>This document defines the semantics of a Route Origin Authorization (ROA) in terms of the context of an application of the Resource Public Key Infrastructure to validate the origination of routes advertised in the Border Gateway Protocol. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6483"/>
          <seriesInfo name="DOI" value="10.17487/RFC6483"/>
        </reference>
        <reference anchor="RTRLib">
          <front>
            <title>RTRlib. The RPKI RTR Client C Library.</title>
            <author>
              <organization>NIST ANTD</organization>
            </author>
            <date year="2023"/>
          </front>
          <seriesInfo name="Web" value="https://rtrlib.realmv6.org/"/>
        </reference>
        <reference anchor="BIRD">
          <front>
            <title>The BIRD Internet Routing Daemon</title>
            <author>
              <organization>CZ.NIC</organization>
            </author>
            <date year="2023"/>
          </front>
          <seriesInfo name="Web" value="https://bird.network.cz/"/>
        </reference>
        <reference anchor="BGP-SRX">
          <front>
            <title>BGP Secure Routing Extension (BGP‑SRx) Software Suite</title>
            <author>
              <organization>NIST</organization>
            </author>
            <date year="2022"/>
          </front>
          <seriesInfo name="Web" value="https://github.com/usnistgov/NIST-BGP-SRx"/>
        </reference>
        <reference anchor="h-ROV" target="https://www.usenix.org/system/files/nsdi25-ni.pdf">
          <front>
            <title>From Address Blocks to Authorized Prefixes Redesigning RPKI ROV with a Hierarchical Hashing Scheme for Fast and Memory-Efficient Validation</title>
            <author initials="" surname="ZD Ni" fullname="Zedong Ni">
              <organization>CNIC, CAS</organization>
            </author>
            <date year="2025"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 340?>
  </back>

</rfc>
