<?xml version="1.0" encoding="utf-8"?>
<!-- name="GENERATOR" content="github.com/mmarkdown/mmark Mmark Markdown Processor - mmark.miek.nl" -->
<rfc version="3" ipr="trust200902" docName="draft-ietf-sidrops-prefer-rrdp-02" submissionType="IETF" category="std" xml:lang="en" xmlns:xi="http://www.w3.org/2001/XInclude" updates="6841, 8182" indexInclude="true" consensus="true">

<front>
<title abbrev="RPKI Repository Requirements">Resource Public Key Infrastructure (RPKI) Repository Requirements</title><seriesInfo value="draft-ietf-sidrops-prefer-rrdp-02" stream="IETF" status="standard" name="Internet-Draft"></seriesInfo>
<author initials="T." surname="Bruijnzeels" fullname="Tim Bruijnzeels"><organization>NLnet Labs</organization><address><postal><street></street>
</postal><email>tim@nlnetlabs.nl</email>
<uri>https://www.nlnetlabs.nl/</uri>
</address></author><author initials="R." surname="Bush" fullname="Randy Bush"><organization>Internet Initiative Japan &amp; Arrcus, Inc.</organization><address><postal><street></street>
</postal><email>randy@psg.com</email>
</address></author><author initials="G." surname="Michaelson" fullname="George Michaelson"><organization>APNIC</organization><address><postal><street></street>
</postal><email>ggm@apnic.net</email>
<uri>http://www.apnic.net</uri>
</address></author><date/>
<area>Internet</area>
<workgroup></workgroup>

<abstract>
<t>This document formulates a plan of a phased transition to a state where
RPKI repositories and Relying Party software performing RPKI Validation
will use the RPKI Repository Delta Protocol (RRDP) <xref target="RFC8182"></xref> as the
preferred access protocol, and require rsync as a fallback option only.</t>
<t>In phase 0, today's deployment, RRDP is supported by most, but not all
Repositories, and most but not all RP software.</t>
<t>In the proposed phase 1 RRDP will become mandatory to implement for
Repositories, in addition to rsync. This phase can start as soon as
this document is published.</t>
<t>Phase 2 will start once the proposed updates are implemented by all
compliant Repositories. In this phase RRDP will become mandatory to
implement for all compliant RP software, and rsync will be required
as a fallback option only.</t>
<t>It should be noted that although this document currently includes
descriptions and updates to RFCs for each of these phases, we may find
that it will be beneficial to have one or more separate documents for
these phases, so that it might be more clear to all when the updates
to RFCs take effect.</t>
</abstract>

</front>

<middle>

<section anchor="requirements-notation"><name>Requirements notation</name>
<t>The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;, &quot;SHOULD&quot;,
&quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, &quot;NOT RECOMMENDED&quot;, &quot;MAY&quot;, and &quot;OPTIONAL&quot; in
this document are to be interpreted as described in BCP 14 <xref target="RFC2119"></xref>
<xref target="RFC8174"></xref> when, and only when, they appear in all capitals, as shown here.</t>
</section>

<section anchor="motivation"><name>Motivation</name>
<t>The Resource Public Key Infrastructure (RPKI) <xref target="RFC6480"></xref> as originally defined
uses rsync as its distribution protocol, as outlined in <xref target="RFC6481"></xref>. Later, the
RPKI Repository Delta Protocol (RRDP) <xref target="RFC8182"></xref> was designed to provide an
alternative. In order to facilitate incremental deployment RRDP has been
deployed as an additional optional protocol, while rsync was still mandatory to
implement.</t>
<t>While rsync has been very useful in the initial deployment of RPKI, a number of
issues observed with it motivated the design of RRDP, e.g.:</t>

<ul spacing="compact">
<li>rsync is CPU and memory heavy on the server side, and easy to DoS</li>
<li>rsync library support is lacking, complicating RP efficiency and error logging</li>
</ul>
<t>RRDP was designed to leverage HTTPS CDN infrastructure to provide RPKI Repository
content in a resilient way, while reducing the load on the Repository server. It
supports updates being published as atomic deltas, which can help prevent most
of the issues described in section 6 of <xref target="RFC6486"></xref>.</t>
<t>For a longer discussion please see section 1 of <xref target="RFC8182"></xref>.</t>
<t>In conclusion: we believe that while RRDP is not perfect, and we may indeed
need future work to improve it, it is an improvement over using rsync in the
context of RPKI. Therefore, this document outlines a transition plan where RRDP
becomes mandatory to implement, and the operational dependency on rsync is
reduced to that of a fallback option.</t>
</section>

<section anchor="plan-to-prefer-rrdp"><name>Plan to prefer RRDP</name>
<t>Changing the RPKI infrastructure to rely on RRDP instead of rsync is a delicate
operation. There is current deployment of Certification Authorities, Repository
Servers and Relying Party software which relies on rsync, and which may not yet
support RRDP.</t>
<t>Therefore we need to have a plan that ultimately updates the relevant RFCs, but
which uses a phased approach combined with measurements to limit the operational
impact of doing this to (almost) zero.</t>
<t>The general outline of the plan is as follows. We will describe each step in
more detail below.</t>
<table>
<thead>
<tr>
<th>Phase</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>0</td>
<td>RPKI repositories support rsync, and optionally RRDP</td>
</tr>

<tr>
<td>1</td>
<td>RPKI repositories support both rsync and RRDP</td>
</tr>

<tr>
<td>2</td>
<td>All RP software prefers RRDP</td>
</tr>
</tbody>
</table>
<section anchor="phase-0-rpki-repositories-support-rsync-and-optionally-rrdp"><name>Phase 0 - RPKI repositories support rsync, and optionally RRDP</name>
<t>This is the situation at the time of writing this document. Relying Parties can
prefer RRDP over rsync today. Therefore all repositories should support RRDP at
their earliest convenience.</t>

<section anchor="updates-to-rfc-8182"><name>Updates to RFC 8182</name>
<t>Section 3.4.5 of <xref target="RFC8182"></xref> has the following on &quot;Considerations Regarding
Operational Failures in RRDP&quot;:</t>
<t>Relying Parties could attempt to use alternative repository access
   mechanisms, if they are available, according to the accessMethod
   element value(s) specified in the SIA of the associated certificate
   (see Section 4.8.8 of [RFC6487]).</t>
<t>The use of the lower case 'could' in this sentence has led some older
versions of RP implementations to conclude that any fallback from RRDP
to rsync as an alternative access mechanism is a local choice. However,
following discussions on this subject it has become clear that there is
a preference to instruct RP software to make use of all possible data
sources. The main motivation being that because of RPKI object security
using a secondary source of data can never lead to a worse outcome in
terms of validation.</t>
<t>Per this document text mentioned above is replaced by the following:</t>
<t>Relying Parties MUST attempt to use alternative repository access
   mechanisms, if they are available, according to the accessMethod
   element value(s) specified in the SIA of the associated certificate
   (see Section 4.8.8 of [RFC6487]).</t>
<t>Note that there is a risk that the rsync repository, as the
   alternative access mechanism, becomes overloaded in case all
   Relying Parties fall back to it at roughly the same time due
   to an issue with RRDP. Therefore it is RECOMMENDED that Relying
   Parties use a retry strategy and/or random jitter time before
   falling back to rsync. But, the fallback to rsync MUST NOT
   be postponed for more than 1 hour.</t>
</section>

<section anchor="updates-to-rfc-6481"><name>Updates to RFC 6481</name>
<t>Section 3.3 of <xref target="RFC8182"></xref> stipulates that RRDP files MUST be made
available by repositories which support RRDP. In other words <xref target="RFC8182"></xref>
expects that RRDP repository availability is treated as a critical
service wherever it is supported.</t>
<t>Per this document the following bullet point is added to the
considerations listed in in section 3 of <xref target="RFC6481"></xref>:</t>

<ul spacing="compact">
<li>The publication repository MAY be available using the RPKI
Repository Delta Protocol <xref target="RFC8182"></xref>. If RPDP is provided,
it SHOULD be hosted on a highly available platform.</li>
</ul>
</section>
</section>

<section anchor="phase-1-rpki-repositories-support-both-rsync-and-rrdp"><name>Phase 1 - RPKI repositories support both rsync and RRDP</name>
<t>During this phase we will make RRDP mandatory to support for Repository Servers,
and measure whether the deployed Repository Servers have been upgraded to do so,
in as far as they don't support RRDP already.</t>

<section anchor="updates-to-rfc-6481-1"><name>Updates to RFC 6481</name>
<t>In this phase the bullet point update to section 3 of <xref target="RFC6481"></xref>
mentioned above, where it was said the publication repository MAY
be available using the RPKI Repository Delta Protocol is replaced by:</t>

<ul spacing="compact">
<li>The publication repository MUST be available using the RPKI
Repository Delta Protocol <xref target="RFC8182"></xref>. The RRDP server SHOULD
be hosted on a highly available platform.</li>
</ul>
</section>

<section anchor="measurements"><name>Measurements</name>
<t>We can find out whether all RPKI repositories support RRDP by running (possibly)
modified Relying Party software that keeps track of this.</t>
<t>When it is found that Repositories do not yet support RRDP, outreach should be
done to them individually. Since the number of Repositories is fairly low, and
it is in their interest to run RRDP because it addresses availability concerns,
we have confidence that we will find these Repositories willing to make changes.</t>
</section>
</section>

<section anchor="phase-2-all-rp-software-prefers-rrdp"><name>Phase 2 - All RP software prefers RRDP</name>
<t>Once all Repositories support RRDP we can proceed to make RRDP mandatory to
implement for Relying Party software. But note that RP software is not prohibited
from implementing this support sooner. At the time of this writing all known
RP software supports RRDP, although it is not known to the authors whether all
of them have RRDP enabled and use it as the preferred protocol.</t>

<section anchor="updates-to-rfc-8182-1"><name>Updates to RFC 8182</name>
<t>From this phase onwards the first paragraph of section 3.4.1 of <xref target="RFC8182"></xref>
is replaced by the following:</t>
<t>When a Relying Party performs RPKI validation and learns about a
  valid certificate with an SIA entry for the RRDP protocol, it MUST
  use this protocol with preference.</t>
<t>Relying Parties MUST NOT attempt to fetch objects using alternate access
  mechanisms, if object retrieval through this protocol is successful.</t>
<t>However, as stipulated in section 3.4.5, Relying Parties MUST attempt to
  use alternative repository access mechanisms, if object retrieval through
  RRDP is unsuccessful.</t>
</section>

<section anchor="measurements-1"><name>Measurements</name>
<t>Although the tools may support RRDP, users will still need to install updated
versions of these tools in their infrastructure. Any Repository operator can
measure this transition by observing access to their RRDP and rsync repositories
respectively.</t>
<t>But even after new versions have been available, it is expected that there will
be a long, low volume, tail of users who did not upgrade and still depend on rsync.</t>
</section>
</section>
</section>

<section anchor="appendix-implementation-status"><name>Appendix - Implementation Status</name>
<t>Note that this section is included for tracking purposes during the discussion
phase of this document and is not intended to be included in an RFC.</t>

<section anchor="current-rrdp-support-in-repository-software"><name>Current RRDP Support in Repository Software</name>
<t>The currently known support for RRDP for repositories is as follows:</t>
<table>
<thead>
<tr>
<th>Repository Implementation</th>
<th>Support for RRDP</th>
</tr>
</thead>

<tbody>
<tr>
<td>afrinic</td>
<td>yes</td>
</tr>

<tr>
<td>apnic</td>
<td>yes</td>
</tr>

<tr>
<td>arin</td>
<td>yes</td>
</tr>

<tr>
<td>lacnic</td>
<td>ongoing</td>
</tr>

<tr>
<td>ripe ncc</td>
<td>yes</td>
</tr>

<tr>
<td>Dragon Research Labs</td>
<td>yes(1,2)</td>
</tr>

<tr>
<td>krill</td>
<td>yes(1)</td>
</tr>
</tbody>
</table><t>(1) in use at various National Internet Registries, as well as other resource
    holders under RIRs.
(2) not all organizations using this software have upgraded to using RRDP.</t>
</section>

<section anchor="current-rrdp-support-in-relying-party-software"><name>Current RRDP Support in Relying Party software</name>
<t>All current versions of known Relying Party software support RRDP:</t>
<table>
<thead>
<tr>
<th>Relying Party Implementation</th>
<th>support</th>
<th>version</th>
<th>since</th>
</tr>
</thead>

<tbody>
<tr>
<td>DRL</td>
<td>yes</td>
<td>?</td>
<td>?</td>
</tr>

<tr>
<td>FORT</td>
<td>yes</td>
<td>1.2.0</td>
<td>02/2021</td>
</tr>

<tr>
<td>OctoRPKI</td>
<td>yes</td>
<td>1.0.0</td>
<td>02/2019</td>
</tr>

<tr>
<td>Routinator</td>
<td>yes</td>
<td>0.6.0</td>
<td>09/2019</td>
</tr>

<tr>
<td>rpki-client</td>
<td>yes</td>
<td>0.7.0</td>
<td>04/2021</td>
</tr>

<tr>
<td>RPSTIR2</td>
<td>yes</td>
<td>2.0</td>
<td>04/2020</td>
</tr>
</tbody>
</table><t>But, support for RRDP does not necessarily mean that it is also
enabled and preferred over rsync by default. The authors kindly
request that RP implementors provide the following information:</t>
<table>
<thead>
<tr>
<th>Relying Party Implementation</th>
<th>prefer</th>
<th>version</th>
<th>since</th>
</tr>
</thead>

<tbody>
<tr>
<td>DRL</td>
<td>?</td>
<td>?</td>
<td>?</td>
</tr>

<tr>
<td>FORT</td>
<td>yes</td>
<td>?</td>
<td>?</td>
</tr>

<tr>
<td>OctoRPKI</td>
<td>?</td>
<td>?</td>
<td>?</td>
</tr>

<tr>
<td>Routinator</td>
<td>yes</td>
<td>0.6.0</td>
<td>09/2019</td>
</tr>

<tr>
<td>rpki-client</td>
<td>?</td>
<td>?</td>
<td>?</td>
</tr>

<tr>
<td>RPSTIR2</td>
<td>?</td>
<td>?</td>
<td>?</td>
</tr>
</tbody>
</table></section>
</section>

<section anchor="iana-considerations"><name>IANA Considerations</name>
<t>This document has no IANA actions.</t>
</section>

<section anchor="security-considerations"><name>Security Considerations</name>
<t>TBD</t>
</section>

<section anchor="acknowledgements"><name>Acknowledgements</name>
<t>TBD</t>
</section>

</middle>

<back>
<references><name>Normative References</name>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6480.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6481.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6486.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8182.xml"/>
</references>

</back>

</rfc>
