-
Notifications
You must be signed in to change notification settings - Fork 0
/
rpki-validation-update.xml
355 lines (302 loc) · 16.3 KB
/
rpki-validation-update.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc sortrefs="yes"?>
<?rfc subcompact="no"?>
<?rfc symrefs="yes"?>
<?rfc toc="yes"?>
<?rfc tocdepth="3"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc
category="std"
docName="draft-spaghetti-sidrops-rpki-validation-update-00"
updates="6482,6487"
obsoletes="8360"
ipr="trust200902">
<front>
<title abbrev="RPKI Validation Algorithm">RPKI Validation Re-reconsidered</title>
<author fullname="Job Snijders" initials="J." surname="Snijders">
<organization>Fastly</organization>
<address>
<postal>
<street />
<city>Amsterdam</city>
<code />
<country>Netherlands</country>
</postal>
<email>job@fastly.com</email>
</address>
</author>
<author fullname="Ben Maddison" initials="B." surname="Maddison">
<organization>Workonline</organization>
<address>
<postal>
<street />
<city>Cape-Town</city>
<code />
<country>South Africa</country>
</postal>
<email>benm@workonline.africa</email>
</address>
</author>
<date />
<abstract>
<t>
This document describes an improved validation procedure for Resource Public Key Infrastructure (RPKI) signed objects.
This document updates RFC 6482.
This document updates RFC 6487.
This document obsoletes RFC 8360.
</t>
</abstract>
</front>
<middle>
<section title="Introduction">
<t>
<xref target="RFC8360" /> describes an improved validation algorithm for signed objects published in the RPKI.
The improved validation algorithm would help in situations such as described in this <xref target="Report" />.
However, operational experience has shown the described procedure for deploying updates to the validation algorithm, as described in <xref target="RFC6487"/> Section 9, is impractical.
This document deprecates the original <xref target="RFC6487" /> section 7 algorithm in favour of the <xref target="RFC8360" /> algorithm, and obsoletes <xref target="RFC8360" /> because a migration via those codepoints is infeasible.
This document also deprecates the procedure set out in <xref target="RFC6487" /> section 9 for future changes to the validation algorithm.
</t>
<section title="Requirements Language">
<t>
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref format="default" pageno="false"
target="RFC2119"/> <xref format="default" pageno="false"
target="RFC8174"/> when, and only when, they appear in all
capitals, as shown here.
</t>
</section>
</section>
<section title="Updates to RFC 6482">
<t>
This section updates <xref target="RFC6482">Section 4</xref>.
The following text:
</t>
<t>
<list style="empty">
<t>
The IP address delegation extension <xref target="RFC3779"/> is present in the end-entity (EE) certificate (contained within the ROA), and each IP address prefix(es) in the ROA is contained within the set of IP addresses specified by the EE certificate's IP address delegation extension.
</t>
</list>
</t>
<t>
Is replaced with:
</t>
<t>
<list style="empty">
<t>
The IP Address Delegation extension described in <xref target="RFC3779"/> is present in the end entity (EE) certificate (contained within the ROA), and each IP address prefix(es) in the ROA is contained within the VRS-IP set that is specified as an outcome of EE certificate validation described in <xref target="RFC6487">Section 7.2</xref>.
</t>
</list>
</t>
<t>
Note that this ensures that ROAs can be valid only if all IP address prefixes in the ROA are encompassed by the VRS-IP of all certificates along the path to the trust anchor used to verify it.
</t>
<t>
Operators MAY issue separate ROAs for each IP address prefix, so that the loss of one or more IP address prefixes from the VRS-IP of any certificate along the path to the trust anchor would not invalidate authorizations for other IP address prefixes.
</t>
</section>
<section title="Updates to RFC 6487">
<t>
This section updates <xref target="RFC6487"/> to specify an improved behavior of a Relying Party implementation.
</t>
<section title="Updates to Section 7.2">
<t>
The following section replaces <xref target="RFC6487">Section 7.2</xref> (Resource Certification Path Validation) in its entirety.
</t>
<t>
Validation of signed resource data using a target resource certificate consists of verying that the digital signature of the signed resource data is valid, using the public key of the target resource certificate, and also validating the resource certificate in the context of the RPKI, using the path validation process.
</t>
<t>
There are two inputs to the validation algortihm:
<list style="numbers">
<t>A trust anchor</t>
<t>A certificate to be validated</t>
</list>
</t>
<t>
The algorithm is initialized with two new variables for use in the RPKI: Verified Resource Set-IP (VRS-IP) and Verified Resource Set-AS (VRS-AS).
These sets are used to track the set of INRs (IP address space and AS numbers) that are considered valid for each CA certificate.
The VRS-IP and VRS-AS sets are initially set to the IP Address Delegation and AS Identifier Delegation values, respectively, from the trust anchor used to perform validation.
</t>
<t>
This path validation algorithm verifies, among other things, that a prospective certification path (a sequence of n certificates) satisfies the following conditions:
</t>
<t>
<list style="letters">
<t>for all 'x' in {1, ..., n-1}, the subject of certificate 'x' is the issuer of certificate ('x' + 1);</t>
<t>certificate '1' is issued by a trust anchor;</t>
<t>certificate 'n' is the certificate to be validated; and</t>
<t>for all 'x' in {1, ..., n}, certificate 'x' is valid.</t>
</list>
</t>
<t>
Certificate validation requires verifying that all of the following conditions hold, in addition to the certification path validation criteria specified in Section 6 of <xref target="RFC5280"/>.
</t>
<t>
<list style="numbers">
<t>The signature of certificate x (x>1) is verified using the public key of the issuer's certificate (x-1), using the signature algorithm specified for that public key (in certificate x-1).</t>
<t>The current time lies within the interval defined by the NotBefore and NotAfter values in the Validity field of certificate x.</t>
<t>The Version, Issuer, and Subject fields of certificate x satisfy the constraints established in Sections 4.1 to 4.7 of RFC 6487.</t>
<t>If certificate x uses the Certificate Policy defined in Section 4.8.9 of <xref target="RFC6487"/>, then the certificate MUST contain all extensions defined in Section 4.8 of <xref target="RFC6487"/> that must be present.
The value(s) for each of these extensions MUST satisfy the constraints established for each extension in the respective sections.
Any extension not thus identified MUST NOT appear in certificate x.</t>
<t>If certificate x uses the Certificate Policy defined in Section 4.2.4.1, then all extensions defined in Section 4.8 of <xref target="RFC6487"/>, except Sections 4.8.9, 4.8.10, and 4.8.11 MUST be present.
The certificate MUST contain an extension as defined in Sections 4.2.4.2 or 4.2.4.3, or both.
The value(s) for each of these extensions MUST satisfy the constraints established for each extension in the respective sections.
Any extension not thus identified MUST NOT appear in certificate x.</t>
<t>Certificate x MUST NOT have been revoked, i.e., it MUST NOT appear on a Certificate Revocation List (CRL) issued by the CA represented by certificate x-1.</t>
<t>Compute the VRS-IP and VRS-AS set values as indicated below:
<list style="symbol">
<t>If the IP Address Delegation extension is present in certificate x and x=1, set the VRS-IP to the resources found in this extension.</t>
<t>If the IP Address Delegation extension is present in certificate x and x>1, set the VRS-IP to the intersection of the resources between this extension and the value of the VRS-IP computed for certificate x-1.</t>
<t>If the IP Address Delegation extension is absent in certificate x, set the VRS-IP to NULL.</t>
<t>If the IP Address Delegation extension is present in certificate x and x=1, set the VRS-IP to the resources found in this extension.</t>
<t>If the AS Identifier Delegation extension is present in certificate x and x>1, set the VRS-AS to the intersection of the resources between this extension and the value of the VRS-AS computed for certificate x-1.</t>
<t>If the AS Identifier Delegation extension is absent in certificate x, set the VRS-AS to NULL.</t>
</list>
</t>
<t>If there is any difference in resources in the VRS-IP and the IP Address Delegation extension on certificate x, or the VRS-AS and the AS Identifier Delegation extension on certificate x, then a warning listing the overclaiming resources for certificate x SHOULD be issued.</t>
</list>
</t>
<t>These rules allow a CA certificate to contain resources that are not present in (all of) the certificates along the path from the trust anchor to the CA certificate.
If none of the resources in the CA certificate are present in all certificates along the path, no subordinate certificates could be valid.
However, the certificate is not immediately rejected as this may be a transient condition.
Not immediately rejecting the certificate does not result in a security problem because the associated VRS sets accurately reflect the resources validly associated with the certificate in question.
</t>
</section>
<!-- This path validation process verifies, among other things, that a prospective certification path (a sequence of n certificates) satisfies the following conditions: -->
<!-- copy from RFC 8360 section 4.2.4.4 ... -->
<section title="Updates to Section 9">
<t>
Section 9 "Operational Considerations for Profile Agility" is removed.
</t>
</section>
</section>
<section title="Implementation status - RFC EDITOR: REMOVE BEFORE PUBLICATION">
<t>
This section records the status of known implementations of the protocol
defined by this specification at the time of posting of this Internet-Draft,
and is based on a proposal described in RFC7942. The description of
implementations in this section is intended to assist the IETF in its decision
processes in progressing drafts to RFCs. Please note that the listing of any
individual implementation here does not imply endorsement by the IETF.
Furthermore, no effort has been spent to verify the information presented here
that was supplied by IETF contributors. This is not intended as, and must not
be construed to be, a catalog of available implementations or their features.
Readers are advised to note that other implementations may exist.
</t>
<t>
As of today these changesets have been produced for commonly used Relying Party implementations:
<list style="symbol">
<t>NLnet Labs Routinator <xref target="routinator" /></t>
<t>OpenBSD rpki-client <xref target="rpkiclient" /></t>
<t>FORT Validator <xref target="fort" /></t>
</list>
</t>
<t>
The 'public' OpenSSL X509v3_addr_validate_path() and X509v3_asid_validate_path() interfaces do not read the Policy OIDs.
Also, these interfaces are not referenced outside OpenSSL itself: <xref target="codesearch" /> and <xref target="github" />.
</t>
<t>
At the time of writing there are zero (0) certificates in the RPKI carrying the extensions and policy defined in <xref target="RFC8360"/>.
</t>
</section>
<section title="Security Considerations">
<t>
The authors believe that the revised validation algortihm introduces no new security vulnerabilities into the RPKI, because it cannot lead to any ROA and/or router certificates to be accepted if they contain resources that are not held by the issuer.
</t>
</section>
<section title="IANA Considerations">
<t>
IANA is requested to reference this document in the "SMI Security for PKIX Certificate Policies" registry at:
<list style="symbol">
<t>id-cp-ipAddr-asNumber-v2</t>
</list>
</t>
<t>
IANA is requested to reference this document in the "SMI Security for PKIX Certificate Extensions" registry at:
<list style="symbol">
<t>id-pe-ipAddrBlocks-v2</t>
<t>id-pe-autonomousSysIds-v2</t>
</list>
</t>
<t>
IANA is requested to reference this document in the "SMI Security for PKIX Module Identifier" registry at:
<list style="symbol">
<t>id-mod-ip-addr-and-as-ident-v2</t>
<t>id-mod-ip-addr-and-as-ident-2v2</t>
</list>
</t>
</section>
<section title="Acknowledgements">
<t>
The authors would like to thank
Tim Bruijnzeels,
George Michaelson,
Mikael Abrahamsson,
and
Nick Hilliard
for their helpful review of this document.
</t>
</section>
</middle>
<back>
<references title="Normative References">
<?rfc include="reference.RFC.2119.xml"?>
<?rfc include="reference.RFC.3779.xml"?>
<?rfc include="reference.RFC.5280.xml"?>
<?rfc include="reference.RFC.6482.xml"?>
<?rfc include="reference.RFC.6487.xml"?>
<?rfc include="reference.RFC.8174.xml"?>
<?rfc include="reference.RFC.8360.xml"?>
</references>
<references title="Informative References">
<reference anchor="routinator" target="https://github.com/job/rpki-rs/commit/d9fa8c72cf83ed6f25e4420eaaa9054078f15bc3">
<front>
<title>Harmonize RFC 8360 and RFC 6487 in rpki-rs</title>
<author initials="J." surname="Snijders" fullname="Job Snijders"><organization>Fastly</organization></author>
<date year="2021" month="February" />
</front>
</reference>
<reference anchor="rpkiclient" target="https://marc.info/?l=openbsd-tech&m=161011710120123&w=2">
<front>
<title>rpki-client check IP and ASnum coverage only on ROAs</title>
<author initials="C." surname="Jeker" fullname="Claudio Jeker"><organization>OpenBSD</organization></author>
<date year="2021" month="January" />
</front>
</reference>
<reference anchor="fort" target="https://github.com/job/FORT-validator/commit/ff5f4b9313d5c553fa13bae427acb69665977727">
<front>
<title>Harmonize RFC 8360 and RFC 6487 in FORT</title>
<author initials="J." surname="Snijders" fullname="Job Snijders"><organization>Fastly</organization></author>
<date year="2021" month="February" />
</front>
</reference>
<reference anchor="codesearch" target="https://codesearch.debian.net/search?q=X509v3_addr_validate_path&literal=1">
<front>
<title>Debian Codesearch</title>
<author fullname="Debian"><organization /></author>
<date year="2021" month="February" />
</front>
</reference>
<reference anchor="github" target="https://github.com/search?q=X509v3_addr_validate_path&type=commits">
<front>
<title>Github Search</title>
<author fullname="Github"><organization /></author>
<date year="2021" month="February" />
</front>
</reference>
<reference anchor="Report" target="https://www.ripe.net/ripe/mail/archives/routing-wg/2021-January/004220.html">
<front>
<title>[routing-wg] RFC 8360 should be the default (Was: RPKI Outage Post-Mortem)</title>
<author initials="J." surname="Snijders" fullname="Job Snijders"><organization>Fastly</organization></author>
<date year="2021" month="January" />
</front>
</reference>
</references>
</back>
</rfc>