<?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.31 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-qin-bmwg-rpki-rp-bench-00" category="info" submissionType="IETF" version="3">
  <!-- xml2rfc v2v3 conversion 3.32.0 -->
  <front>
    <title abbrev="BM for RPKI RP">RPKI Relying Party Benchmarking Methodology</title>
    <seriesInfo name="Internet-Draft" value="draft-qin-bmwg-rpki-rp-bench-00"/>
    <author initials="L." surname="Qin" fullname="Lancheng Qin">
      <organization>Zhongguancun Laboratory</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <country>China</country>
        </postal>
        <email>qinlc@mail.zgclab.edu.cn</email>
      </address>
    </author>
    <author initials="Y." surname="Su" fullname="Yingying Su">
      <organization>Zhongguancun Laboratory</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <country>China</country>
        </postal>
        <email>suyy@mail.zgclab.edu.cn</email>
      </address>
    </author>
    <author initials="J." surname="Shi" fullname="Jiayi Shi">
      <organization>Tsinghua University</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <country>China</country>
        </postal>
        <email>sjy23@mails.tsinghua.edu.cn</email>
      </address>
    </author>
    <author initials="D." surname="Li" fullname="Dan Li">
      <organization>Tsinghua University</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <country>China</country>
        </postal>
        <email>tolidan@tsinghua.edu.cn</email>
      </address>
    </author>
    <date year="2026" month="March" day="15"/>
    <area>Operations and Management</area>
    <workgroup>BMWG</workgroup>
    <keyword>RPKI, Relying Party, Benchmarking</keyword>
    <abstract>
      <?line 66?>

<t>This document defines a benchmarking methodology for evaluating RPKI Relying Party (RP) implementations in controlled laboratory environments. The methodology focuses on whether RP implementations correctly perform required validation steps and on the performance of these operations. RP implementations are treated as black boxes, enabling consistent and objective assessment based on externally observable behavior rather than internal design or implementation details.</t>
    </abstract>
  </front>
  <middle>
    <?line 70?>

<section anchor="sec-intro">
      <name>Introduction</name>
      <t>The Resource Public Key Infrastructure (RPKI) <xref target="RFC6480"/> provides a framework for cryptographically securing Internet routing by allowing Relying Parties (RPs) to validate Route Origin Authorizations (ROAs) and other RPKI objects. Relying Party implementations are expected to comply with the requirements defined in <xref target="RFC8897"/>.</t>
      <t>Currently, there is no standardized methodology to evaluate whether an RP implementation correctly satisfies these requirements. In addition, the processing performance of RPs, such as the time required to validate objects and generate validated ROA payloads (VRPs), has not been systematically measured.</t>
      <t>This document defines a benchmarking methodology for Relying Parties that addresses both functional correctness and processing performance. Specifically, the methodology provides:</t>
      <ol spacing="normal" type="1"><li>
          <t>Functional correctness tests to evaluate compliance with the requirements of <xref target="RFC8897"/>.</t>
        </li>
        <li>
          <t>Performance tests to measure the total processing time from object retrieval to VRP generation.</t>
        </li>
      </ol>
      <t>The methodology is intended to support implementers and operators in evaluating and comparing RP behavior under controlled conditions.
The remainder of this document is structured as follows:</t>
      <ul spacing="normal">
        <li>
          <t>Section 4 defines the functional correctness and performance tests.</t>
        </li>
        <li>
          <t>Section 5 defines the format for reporting test results.</t>
        </li>
      </ul>
      <section anchor="requirements-language">
        <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 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
    </section>
    <section anchor="sec-rp">
      <name>Relying Party Overview</name>
      <t>A Relying Party (RP) in the Resource Public Key Infrastructure (RPKI) is responsible for retrieving, validating, and making available RPKI objects to support secure route validation. <xref target="RFC8897"/> specifies the expected behavior of RPs, which includes:</t>
      <ul spacing="normal">
        <li>
          <t>Object Retrieval: obtaining RPKI objects from Publication Points (PPs) and keeping them up-to-date.</t>
        </li>
        <li>
          <t>Object syntax Validation: checking DER encoding, syntax, and structural correctness of RPKI objects, including certificates, CRLs, ROAs, and manifests.</t>
        </li>
        <li>
          <t>Certification Path Validation: constructing and validating certificate chains from the Trust Anchor to each leaf certificate.</t>
        </li>
        <li>
          <t>Signed Object Signature Validation: verifying digital signatures of RPKI objects.</t>
        </li>
        <li>
          <t>Manifest Processing: ensuring completeness and integrity of published objects.</t>
        </li>
      </ul>
      <t>After validation, the RP produces a Validated Payload for use in routing systems. These functions ensure that only valid and trusted RPKI objects influence routing decisions.</t>
    </section>
    <section anchor="sec-test-methodology">
      <name>Test Setup</name>
      <t>This section defines the test setup. The System Under Test (SUT) (i.e., the RP software) is treated as a black box. No internal configuration or implementation behavior of the RP software is mandated. The test setup focuses on providing controlled inputs and observing RP outputs to enable reproducible and comparable measurements.</t>
      <section anchor="test-environment">
        <name>Test Environment</name>
        <t>In this methodology, the Tester consists of the Servers and the Controller. Together, they generate the test conditions, trigger events, and support observation of the SUT  for functional and performance evaluation. The SUT itself is evaluated for correctness and efficiency in processing RPKI objects.</t>
        <figure anchor="fig-1">
          <name>Test environment</name>
          <artwork><![CDATA[
+----------------------------------+
|             Controller           |
+----------------------------------+
       |                  |
       v                  v
+-------------+      +-------------+
|     SUT     | ---> |   Servers   |
+-------------+      +-------------+
]]></artwork>
        </figure>
        <t>To ensure meaningful testing, the environment should include:</t>
        <ul spacing="normal">
          <li>
            <t>At least one Trust Anchor (TA)</t>
          </li>
          <li>
            <t>One or more subordinate certificate authorities (CAs) certificates</t>
          </li>
        </ul>
        <t>The test environment should support multiple RPKI transport protocols for object retrieval, including Rsync <xref target="RSYNC"/>, RRDP <xref target="RFC8182"/>, or Eric <xref target="I-D.ietf-sidrops-rpki-erik-protocol"/>.</t>
      </section>
      <section anchor="system-under-test-and-servers">
        <name>System Under Test and Servers</name>
        <t>The System Under Test (SUT) is an RPKI Relying Party implementation that retrieves RPKI objects, validates them, and generates the validated ROA payload (VRP).</t>
        <t>The Servers should include:</t>
        <ul spacing="normal">
          <li>
            <t>Publication Point (PP) servers which host objects signed by CAs. Each PP server contains ROAs, manifests, CRLs, and certificates necessary for the tests.</t>
          </li>
          <li>
            <t>Additional components required by specific RPKI transport protocols. For example, Erik Relays <xref target="I-D.ietf-sidrops-rpki-erik-protocol"/>.</t>
          </li>
        </ul>
        <t>Objects can be added, modified, or removed. Existing tools (e.g., <xref target="Barry"/>) can be used to implement and manage the test environment.</t>
      </section>
      <section anchor="controller">
        <name>Controller</name>
        <t>The controller orchestrates the entire testing process. In <xref target="fig-1"/>, the arrows from the Controller to both the SUT and Servers represent the flow of control information.</t>
        <t>For the SUT, the controller controls the start and end of tests, and handles the parsing and processing of test results.</t>
        <t>For the servers, the controller handles content changes to ensure that the RP sees one set of files during a validation run and a different set during the next run.</t>
      </section>
    </section>
    <section anchor="rpki-relying-party-benchmarking-tests">
      <name>RPKI Relying Party Benchmarking Tests</name>
      <section anchor="object-retrieval-correctness">
        <name>Object Retrieval Correctness</name>
        <t>Objective: To evaluate whether the SUT correctly synchronizes RPKI objects from the configured PP servers. This test focuses on verifying successful repository synchronization regardless of the specific transport protocol used by the SUT.</t>
        <t>Procedure: The PP servers and all RPKI objects are correctly configured prior to the test. The SUT is configured with the URI of TA, and the repository synchronization update interval is set to a fixed value (e.g., 10 minutes).</t>
        <t>The following steps are performed:</t>
        <ol spacing="normal" type="1"><li>
            <t>Initialize the SUT with an empty local repository cache (cold start).</t>
          </li>
          <li>
            <t>Start the SUT and allow it to perform repository synchronization with the configured PP servers.</t>
          </li>
          <li>
            <t>Verify that the SUT retrieves all RPKI objects available from the PP servers.</t>
          </li>
          <li>
            <t>After the initial synchronization completes, update the repository contents on the PP servers (e.g., publish new objects or update existing objects).</t>
          </li>
          <li>
            <t>Wait for one synchronization update interval.</t>
          </li>
          <li>
            <t>Verify that the SUT retrieves the updated repository contents from the PP servers.</t>
          </li>
        </ol>
        <t>Expected results: 
After the cold start synchronization, the SUT retrieve all RPKI objects available from the configured PP servers.
After the repository contents are updated, the SUT synchronize the updated objects within one synchronization update interval.</t>
      </section>
      <section anchor="object-syntax-validation-correctness">
        <name>Object Syntax Validation Correctness</name>
        <t>This section evaluates whether the System Under Test (SUT) correctly performs syntax validation for RPKI objects. The SUT is expected to perform syntax checks according to the relevant specifications and detect objects that do not conform to the defined syntax requirements.</t>
        <t>The syntax requirements for different RPKI objects are defined in the following specifications:</t>
        <ul spacing="normal">
          <li>
            <t>Certificate and CRL: [RFC5280] and <xref target="RFC6487"/></t>
          </li>
          <li>
            <t>Manifest: <xref target="RFC6488"/> and <xref target="RFC9286"/></t>
          </li>
          <li>
            <t>ROA: <xref target="RFC6488"/> and [RFC9592]</t>
          </li>
        </ul>
        <t>For each object type, test objects that violate specific syntax requirements are constructed and published in the repository. The SUT behavior is then observed to determine whether the syntax validation is correctly performed.</t>
        <section anchor="der-decoding">
          <name>DER Decoding</name>
          <section anchor="processing-valid-der">
            <name>Processing Valid DER</name>
            <t>Objective: To evaluate whether the SUT correctly decodes RPKI objects that use valid Distinguished Encoding Rules (DER) encoding.</t>
            <t>Procedure:</t>
            <ol spacing="normal" type="1"><li>
                <t>Publish a set of RPKI objects with valid DER encoding on the PP servers.</t>
              </li>
              <li>
                <t>Start the SUT and allow it to synchronize the repository contents.</t>
              </li>
              <li>
                <t>Verify that the SUT retrieves the objects and attempts to process them.</t>
              </li>
              <li>
                <t>Verify that the SUT successfully decodes the objects with valid DER encoding.</t>
              </li>
            </ol>
            <t>Expected results: The SUT successfully decode RPKI objects that use valid DER encoding.</t>
          </section>
          <section anchor="handling-invalid-der">
            <name>Handling Invalid DER</name>
            <t>Objective: To evaluate whether the SUT correctly detects and rejects RPKI objects that contain invalid DER encoding.</t>
            <t>Procedure:</t>
            <ol spacing="normal" type="1"><li>
                <t>Publish a set of RPKI objects containing malformed DER encoding on the PP servers.</t>
              </li>
              <li>
                <t>Start the SUT and allow it to synchronize the repository contents.</t>
              </li>
              <li>
                <t>Verify that the SUT retrieves the malformed objects.</t>
              </li>
              <li>
                <t>Verify that the SUT attempts to decode the objects.</t>
              </li>
            </ol>
            <t>Expected results: The SUT successfully detect DER decoding errors in objects with malformed encoding and reject those objects.</t>
          </section>
        </section>
        <section anchor="certificate-syntax-validation">
          <name>Certificate Syntax Validation</name>
          <t>Objective: To evaluate whether the SUT correctly performs syntax validation for certificates according to Section 3.1 of <xref target="RFC8897"/>.</t>
          <t>Procedure:
1.  Construct certificate objects that violate specific syntax requirements defined in Section 7.2 of <xref target="RFC6487"/>.
2.  Each test certificate <bcp14>SHOULD</bcp14> violate one syntax requirement at a time (e.g., missing mandatory fields, invalid field values, incorrect extensions, or malformed structures).
3.  Publish these malformed certificate objects on the PP servers.
4.  Start the SUT and allow it to synchronize the repository contents.
5.  Verify that the SUT retrieves the certificate objects and performs syntax validation.</t>
          <t>Expected Results: 
If a certificate violates the syntax requirements, the SUT is able to detect the syntax error.</t>
        </section>
        <section anchor="crl-syntax-validation">
          <name>CRL Syntax Validation</name>
          <t>Objective: To evaluate whether the SUT correctly performs syntax validation for CRLs according to Section 3.2 of <xref target="RFC8897"/>.</t>
          <t>Procedure:</t>
          <ol spacing="normal" type="1"><li>
              <t>Construct CRL objects that violate specific syntax requirements defined in [RFC5280] and <xref target="RFC6487"/>.</t>
            </li>
            <li>
              <t>Each test CRL <bcp14>SHOULD</bcp14> violate one syntax requirement at a time.</t>
            </li>
            <li>
              <t>Publish these malformed CRL objects on the PP servers.</t>
            </li>
            <li>
              <t>Start the SUT and allow it to synchronize the repository contents.</t>
            </li>
            <li>
              <t>Verify that the SUT retrieves the CRL objects and performs syntax validation.</t>
            </li>
          </ol>
          <t>Expected Results: 
If a CRL violates the syntax requirements, the SUT is able to detect the syntax error.</t>
        </section>
        <section anchor="manifest-syntax-validation">
          <name>Manifest Syntax Validation</name>
          <t>Objective: To evaluate whether the SUT correctly performs syntax validation for Manifest according to Section 4.2.1 of <xref target="RFC8897"/>.</t>
          <t>Procedure
1.  Construct manifest objects that violate specific syntax requirements defined in <xref target="RFC6488"/> and <xref target="RFC9286"/>.
2.  Each test manifest <bcp14>SHOULD</bcp14> violate one syntax requirement at a time.
3.  Publish these malformed manifest objects on the PP servers.
4.  Start the SUT and allow it to synchronize the repository contents.
5.  Verify that the SUT retrieves the manifest objects and performs syntax validation.</t>
          <t>Expected Results: 
If a manifest violates the syntax requirements, the SUT is able to detect the syntax error.</t>
        </section>
        <section anchor="roa-syntax-validation">
          <name>ROA Syntax Validation</name>
          <t>Objective: To evaluate whether the SUT correctly performs syntax validation for Manifest according to Section 4.2.2 of <xref target="RFC8897"/>.</t>
          <t>Procedure:</t>
          <ol spacing="normal" type="1"><li>
              <t>Construct ROA objects that violate specific syntax requirements defined in <xref target="RFC6488"/> and <xref target="RFC9582"/>.</t>
            </li>
            <li>
              <t>Each test ROA <bcp14>SHOULD</bcp14> violate one syntax requirement at a time.</t>
            </li>
            <li>
              <t>Publish these malformed ROA objects on the PP servers.</t>
            </li>
            <li>
              <t>Start the SUT and allow it to synchronize the repository contents.</t>
            </li>
            <li>
              <t>Verify that the SUT retrieves the ROA objects and performs syntax validation.</t>
            </li>
          </ol>
          <t>Expected Results: 
If a manifest violates the syntax requirements, the SUT is able to detect the syntax error.</t>
        </section>
      </section>
      <section anchor="certification-path-validation-correctness">
        <name>Certification Path Validation Correctness</name>
        <t>Objective: To evaluate whether the SUT correctly performs certification path validation and detects certification paths that violate the requirements defined in Section 3.2 of <xref target="RFC8897"/>.</t>
        <t>Procedure:</t>
        <ol spacing="normal" type="1"><li>
            <t>Construct RPKI object sets whose associated certification paths violate specific requirements defined in <xref target="RFC6487"/>.</t>
          </li>
          <li>
            <t>Each test case <bcp14>SHOULD</bcp14> introduce one violation at a time in the certification path.</t>
          </li>
          <li>
            <t>Examples of such violations include, but are not limited to:
            </t>
            <ul spacing="normal">
              <li>
                <t>Invalid certification path structure, where the subject of a certificate does not match the issuer of the next certificate in the certification path.</t>
              </li>
              <li>
                <t>Invalid certificate signature, where the certificate cannot be verified using the issuer’s public key.</t>
              </li>
              <li>
                <t>Resource extension violation, where the resources listed in a child certificate are not encompassed by the resources listed in the parent certificate.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Publish these certificates on the PP servers.</t>
          </li>
          <li>
            <t>Start the SUT and allow it to synchronize the repository contents.</t>
          </li>
          <li>
            <t>Verify that the SUT retrieves the certificates and performs certification path validation.</t>
          </li>
        </ol>
        <t>Expected Results: 
If the certification path violates the requirements, the SUT is able to detect the validation failure and reject the affected objects.</t>
      </section>
      <section anchor="signed-object-signature-validation-correctness">
        <name>Signed Object Signature Validation Correctness</name>
        <t>Objective: To evaluate whether the SUT correctly verifies the digital signatures of RPKI signed objects using the corresponding public keys in the associated certificates.</t>
        <t>Procedure:</t>
        <ol spacing="normal" type="1"><li>
            <t>Construct a set of valid RPKI signed objects (e.g., Manifests, ROAs) whose signatures correctly match their associated certificates.</t>
          </li>
          <li>
            <t>Publish these objects on the PP servers.</t>
          </li>
          <li>
            <t>Start the SUT and allow it to synchronize the repository contents.</t>
          </li>
          <li>
            <t>Verify that the SUT retrieves the objects and performs signature validation.</t>
          </li>
          <li>
            <t>Construct a set of signed objects whose signatures are intentionally invalid (e.g., the object content is modified after signing or the signature does not match the corresponding certificate).</t>
          </li>
          <li>
            <t>Publish these malformed objects on the PP servers.</t>
          </li>
          <li>
            <t>Trigger repository synchronization on the SUT.</t>
          </li>
          <li>
            <t>Verify that the SUT performs signature validation for the retrieved objects.</t>
          </li>
        </ol>
        <t>Expected Results
The SUT verifies the digital signature of each retrieved signed object using the corresponding public key contained in the associated certificate. If the signature is invalid, the SUT is able to detect the signature verification failure and reject the object.</t>
      </section>
      <section anchor="manifest-processing-correctness">
        <name>Manifest Processing Correctness</name>
        <t>This section evaluates whether the SUT correctly uses manifests to verify the integrity and completeness of RPKI repository objects.</t>
        <t>Manifests are expected to be used to:</t>
        <ul spacing="normal">
          <li>
            <t>Verify that the content of each RPKI object matches the hash listed in the manifest.</t>
          </li>
          <li>
            <t>Verify that all objects listed in the manifest exist in the repository and that there are no extra objects not declared in the manifest.</t>
          </li>
        </ul>
        <section anchor="manifest-hash-mismatch-check">
          <name>Manifest Hash-Mismatch Check</name>
          <t>Objective: To evaluate whether the SUT detects when the content of a retrieved RPKI object does not match the hash declared in its associated manifest.</t>
          <t>Procedure:</t>
          <ol spacing="normal" type="1"><li>
              <t>Construct a set of RPKI objects (e.g., ROAs) and a corresponding manifest.</t>
            </li>
            <li>
              <t>Modify the content of one or more objects after the manifest has been generated, so that the object hash no longer matches the hash listed in the manifest.</t>
            </li>
            <li>
              <t>Publish the manifest and the modified objects on the PP servers.</t>
            </li>
            <li>
              <t>Start the SUT and allow it to synchronize the repository contents.</t>
            </li>
            <li>
              <t>Verify that the SUT retrieves the manifest and the associated objects, and performs the hash-mismatch check.</t>
            </li>
          </ol>
          <t>Expected Results:
The SUT is able to detects any objects whose content does not match the hash declared in the manifest.</t>
        </section>
        <section anchor="manifest-object-mismatch-check">
          <name>Manifest Object-Mismatch Check</name>
          <t>Objective: To evaluate whether the SUT detects when the objects listed in a manifest are missing from or extra in the repository.</t>
          <t>Procedure</t>
          <ol spacing="normal" type="1"><li>
              <t>Construct a manifest that lists a set of RPKI objects.</t>
            </li>
            <li>
              <t>Publish the manifest and a modified set of objects on the PP servers where:
              </t>
              <ul spacing="normal">
                <li>
                  <t>Some objects declared in the manifest are missing from the repository, and/or</t>
                </li>
                <li>
                  <t>Extra objects exist in the repository that are not declared in the manifest.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Start the SUT and allow it to synchronize the repository contents.</t>
            </li>
            <li>
              <t>Verify that the SUT retrieves the manifest and performs object-mismatch checking.</t>
            </li>
          </ol>
          <t>Expected Results
The SUT is able to detect any discrepancies between the objects declared in the manifest and the objects present in the repository.</t>
        </section>
      </section>
      <section anchor="processing-time-test">
        <name>Processing Time test</name>
        <t>Objective: To measure the end-to-end processing time of the SUT, from the moment it begins processing retrieved RPKI objects to the moment the validated ROA payload is generated. This includes all validation steps such as DER decoding, object syntax validation, certification path validation, signature verification, and manifest usage checks.</t>
        <t>Procedure:</t>
        <ol spacing="normal" type="1"><li>
            <t>Allow the SUT to synchronize with a test repository containing a predefined set of RPKI objects.</t>
          </li>
          <li>
            <t>Start the SUT and record the timestamp at the moment it begins processing the repository objects.</t>
          </li>
          <li>
            <t>Allow the SUT to complete the full validation pipeline, including all functional steps.</t>
          </li>
          <li>
            <t>Record the timestamp at the moment the SUT produces the final validated ROA payload (VRP).</t>
          </li>
          <li>
            <t>Calculate the total processing time as the difference between the start and end timestamps.</t>
          </li>
          <li>
            <t>Repeat the test for different repository sizes and object types to evaluate performance under varying load conditions.</t>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="report-format">
      <name>Report Format</name>
      <t>This section defines the format for reporting the results of RPKI Relying Party benchmarking tests. The format is concise and suitable for documenting both functional correctness and performance results.</t>
      <t>System Under Test (SUT) Information:
- RP implementation name and version</t>
      <t>Test Repository Information:</t>
      <ul spacing="normal">
        <li>
          <t>Number of objects and object types used in the test</t>
        </li>
      </ul>
      <t>Functional Correctness Test Results:</t>
      <ul spacing="normal">
        <li>
          <t>Object Retrieval Correctness: pass/fail</t>
        </li>
        <li>
          <t>DER Decoding Correctness:
          </t>
          <ul spacing="normal">
            <li>
              <t>Valid DER Decoding: pass/fail
   Invalid DER Handling: pass/fail</t>
            </li>
          </ul>
        </li>
        <li>
          <t>Object Syntax Validation Correctness:
          </t>
          <ul spacing="normal">
            <li>
              <t>Certificate: pass/fail</t>
            </li>
            <li>
              <t>CRL: pass/fail</t>
            </li>
            <li>
              <t>Manifest: pass/fail</t>
            </li>
            <li>
              <t>ROA: pass/fail</t>
            </li>
          </ul>
        </li>
        <li>
          <t>Certification Path Validation Correctness: pass/fail</t>
        </li>
        <li>
          <t>Signed Object Signature Validation Correctness: Invalid Signature: pass/fail</t>
        </li>
        <li>
          <t>Manifest Usage Correctness:
          </t>
          <ul spacing="normal">
            <li>
              <t>Hash-Mismatch Check: pass/fail</t>
            </li>
            <li>
              <t>Object-Mismatch Check: pass/fail</t>
            </li>
          </ul>
        </li>
      </ul>
      <t>Performance Test Results:</t>
      <ul spacing="normal">
        <li>
          <t>Processing Time Performance Test:
          </t>
          <ul spacing="normal">
            <li>
              <t>Repository size</t>
            </li>
            <li>
              <t>Number of objects</t>
            </li>
            <li>
              <t>Total processing time from start of object fetching to generation of validated ROA payload</t>
            </li>
          </ul>
        </li>
      </ul>
      <t>Notes:</t>
      <ul spacing="normal">
        <li>
          <t>Functional correctness tests report pass/fail based on whether the SUT correctly performs all validation checks required by the relevant specifications. A test passes only if all applicable validation requirements are correctly enforced.</t>
        </li>
        <li>
          <t>Performance tests report total processing time only, as defined above.</t>
        </li>
      </ul>
    </section>
    <section anchor="sec-security">
      <name>Security Considerations</name>
      <t>This document defines benchmarking methodologies for RPKI RP implementations in controlled laboratory environments using dedicated address space and constrained resources. No additional security considerations are identified within the scope of this document.</t>
    </section>
    <section anchor="sec-iana">
      <name>IANA Considerations</name>
      <t>This document has no IANA requests.</t>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors would like to thank Jorge Cano and the FORT team for their detailed reviews and constructive feedback, which helped clarify and improve the scope and methodology of this work.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC6480" target="https://www.rfc-editor.org/info/rfc6480" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6480.xml">
          <front>
            <title>An Infrastructure to Support Secure Internet Routing</title>
            <author fullname="M. Lepinski" initials="M." surname="Lepinski"/>
            <author fullname="S. Kent" initials="S." surname="Kent"/>
            <date month="February" year="2012"/>
            <abstract>
              <t>This document describes an architecture for an infrastructure to support improved security of Internet routing. The foundation of this architecture is a Resource Public Key Infrastructure (RPKI) that represents the allocation hierarchy of IP address space and Autonomous System (AS) numbers; and a distributed repository system for storing and disseminating the data objects that comprise the RPKI, as well as other signed objects necessary for improved routing security. As an initial application of this architecture, the document describes how a legitimate holder of IP address space can explicitly and verifiably authorize one or more ASes to originate routes to that address space. Such verifiable authorizations could be used, for example, to more securely construct BGP route filters. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6480"/>
          <seriesInfo name="DOI" value="10.17487/RFC6480"/>
        </reference>
        <reference anchor="RFC9286" target="https://www.rfc-editor.org/info/rfc9286" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9286.xml">
          <front>
            <title>Manifests for the Resource Public Key Infrastructure (RPKI)</title>
            <author fullname="R. Austein" initials="R." surname="Austein"/>
            <author fullname="G. Huston" initials="G." surname="Huston"/>
            <author fullname="S. Kent" initials="S." surname="Kent"/>
            <author fullname="M. Lepinski" initials="M." surname="Lepinski"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This document defines a "manifest" for use in the Resource Public Key Infrastructure (RPKI). A manifest is a signed object (file) that contains a listing of all the signed objects (files) in the repository publication point (directory) associated with an authority responsible for publishing in the repository. For each certificate, Certificate Revocation List (CRL), or other type of signed objects issued by the authority that are published at this repository publication point, the manifest contains both the name of the file containing the object and a hash of the file content. Manifests are intended to enable a relying party (RP) to detect certain forms of attacks against a repository. Specifically, if an RP checks a manifest's contents against the signed objects retrieved from a repository publication point, then the RP can detect replay attacks, and unauthorized in-flight modification or deletion of signed objects. This document obsoletes RFC 6486.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9286"/>
          <seriesInfo name="DOI" value="10.17487/RFC9286"/>
        </reference>
        <reference anchor="RFC6487" target="https://www.rfc-editor.org/info/rfc6487" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6487.xml">
          <front>
            <title>A Profile for X.509 PKIX Resource Certificates</title>
            <author fullname="G. Huston" initials="G." surname="Huston"/>
            <author fullname="G. Michaelson" initials="G." surname="Michaelson"/>
            <author fullname="R. Loomans" initials="R." surname="Loomans"/>
            <date month="February" year="2012"/>
            <abstract>
              <t>This document defines a standard profile for X.509 certificates for the purpose of supporting validation of assertions of "right-of-use" of Internet Number Resources (INRs). The certificates issued under this profile are used to convey the issuer's authorization of the subject to be regarded as the current holder of a "right-of-use" of the INRs that are described in the certificate. This document contains the normative specification of Certificate and Certificate Revocation List (CRL) syntax in the Resource Public Key Infrastructure (RPKI). This document also specifies profiles for the format of certificate requests and specifies the Relying Party RPKI certificate path validation procedure. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6487"/>
          <seriesInfo name="DOI" value="10.17487/RFC6487"/>
        </reference>
        <reference anchor="RFC6488" target="https://www.rfc-editor.org/info/rfc6488" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6488.xml">
          <front>
            <title>Signed Object Template for the Resource Public Key Infrastructure (RPKI)</title>
            <author fullname="M. Lepinski" initials="M." surname="Lepinski"/>
            <author fullname="A. Chi" initials="A." surname="Chi"/>
            <author fullname="S. Kent" initials="S." surname="Kent"/>
            <date month="February" year="2012"/>
            <abstract>
              <t>This document defines a generic profile for signed objects used in the Resource Public Key Infrastructure (RPKI). These RPKI signed objects make use of Cryptographic Message Syntax (CMS) as a standard encapsulation format. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6488"/>
          <seriesInfo name="DOI" value="10.17487/RFC6488"/>
        </reference>
        <reference anchor="RFC8182" target="https://www.rfc-editor.org/info/rfc8182" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8182.xml">
          <front>
            <title>The RPKI Repository Delta Protocol (RRDP)</title>
            <author fullname="T. Bruijnzeels" initials="T." surname="Bruijnzeels"/>
            <author fullname="O. Muravskiy" initials="O." surname="Muravskiy"/>
            <author fullname="B. Weber" initials="B." surname="Weber"/>
            <author fullname="R. Austein" initials="R." surname="Austein"/>
            <date month="July" year="2017"/>
            <abstract>
              <t>In the Resource Public Key Infrastructure (RPKI), Certificate Authorities (CAs) publish certificates, including end-entity certificates, Certificate Revocation Lists (CRLs), and RPKI signed objects to repositories. Relying Parties retrieve the published information from those repositories. This document specifies a new RPKI Repository Delta Protocol (RRDP) for this purpose. RRDP was specifically designed for scaling. It relies on an Update Notification File which lists the current Snapshot and Delta Files that can be retrieved using HTTPS (HTTP over Transport Layer Security (TLS)), and it enables the use of Content Distribution Networks (CDNs) or other caching infrastructures for the retrieval of these files.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8182"/>
          <seriesInfo name="DOI" value="10.17487/RFC8182"/>
        </reference>
        <reference anchor="RFC8897" target="https://www.rfc-editor.org/info/rfc8897" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8897.xml">
          <front>
            <title>Requirements for Resource Public Key Infrastructure (RPKI) Relying Parties</title>
            <author fullname="D. Ma" initials="D." surname="Ma"/>
            <author fullname="S. Kent" initials="S." surname="Kent"/>
            <date month="September" year="2020"/>
            <abstract>
              <t>This document provides a single reference point for requirements for Relying Party (RP) software for use in the Resource Public Key Infrastructure (RPKI). It cites requirements that appear in several RPKI RFCs, making it easier for implementers to become aware of these requirements. Over time, this RFC will be updated to reflect changes to the requirements and guidance specified in the RFCs discussed herein.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8897"/>
          <seriesInfo name="DOI" value="10.17487/RFC8897"/>
        </reference>
        <reference anchor="RFC9582" target="https://www.rfc-editor.org/info/rfc9582" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9582.xml">
          <front>
            <title>A Profile for Route Origin Authorizations (ROAs)</title>
            <author fullname="J. Snijders" initials="J." surname="Snijders"/>
            <author fullname="B. Maddison" initials="B." surname="Maddison"/>
            <author fullname="M. Lepinski" initials="M." surname="Lepinski"/>
            <author fullname="D. Kong" initials="D." surname="Kong"/>
            <author fullname="S. Kent" initials="S." surname="Kent"/>
            <date month="May" year="2024"/>
            <abstract>
              <t>This document defines a standard profile for Route Origin Authorizations (ROAs). A ROA is a digitally signed object that provides a means of verifying that an IP address block holder has authorized an Autonomous System (AS) to originate routes to one or more prefixes within the address block. This document obsoletes RFC 6482.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9582"/>
          <seriesInfo name="DOI" value="10.17487/RFC9582"/>
        </reference>
        <reference anchor="I-D.ietf-sidrops-rpki-erik-protocol" target="https://datatracker.ietf.org/doc/html/draft-ietf-sidrops-rpki-erik-protocol-03" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-sidrops-rpki-erik-protocol.xml">
          <front>
            <title>The Erik Synchronization Protocol for use with the Resource Public Key Infrastructure (RPKI)</title>
            <author fullname="Job Snijders" initials="J." surname="Snijders">
              <organization>BSD Software Development</organization>
            </author>
            <author fullname="Tim Bruijnzeels" initials="T." surname="Bruijnzeels">
              <organization>RIPE NCC</organization>
            </author>
            <author fullname="Tom Harrison" initials="T." surname="Harrison">
              <organization>APNIC</organization>
            </author>
            <author fullname="Wataru Ohgai" initials="W." surname="Ohgai">
              <organization>JPNIC</organization>
            </author>
            <date day="27" month="February" year="2026"/>
            <abstract>
              <t>This document specifies the Erik Synchronization Protocol for use with the Resource Public Key Infrastructure (RPKI). Erik Synchronization can be characterized as a data replication system using Merkle trees, a content-addressable naming scheme, concurrency control using monotonically increasing sequence numbers, and HTTP transport. Relying Parties can combine information retrieved via Erik Synchronization with other RPKI transport protocols. The protocol's design is intended to be efficient, fast, easy to implement, and robust in the face of partitions or faults in the network.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-sidrops-rpki-erik-protocol-03"/>
        </reference>
        <reference anchor="RSYNC" target="https://rsync.samba.org">
          <front>
            <title>The rsync web pages</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="Barry" target="https://github.com/lacnic/barry">
          <front>
            <title>BaRRy</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 443?>



  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
