rfc9092.original | rfc9092.txt | |||
---|---|---|---|---|
Network Working Group R. Bush | Internet Engineering Task Force (IETF) R. Bush | |||
Internet-Draft IIJ & Arrcus | Request for Comments: 9092 IIJ & Arrcus | |||
Intended status: Standards Track M. Candela | Category: Standards Track M. Candela | |||
Expires: November 26, 2021 NTT | ISSN: 2070-1721 NTT | |||
W. Kumari | W. Kumari | |||
R. Housley | R. Housley | |||
Vigil Security | Vigil Security | |||
May 25, 2021 | July 2021 | |||
Finding and Using Geofeed Data | Finding and Using Geofeed Data | |||
draft-ietf-opsawg-finding-geofeeds-17 | ||||
Abstract | Abstract | |||
This document specifies how to augment the Routing Policy | This document specifies how to augment the Routing Policy | |||
Specification Language inetnum: class to refer specifically to | Specification Language inetnum: class to refer specifically to | |||
geofeed data CSV files, and describes an optional scheme to use the | geofeed data comma-separated values (CSV) files and describes an | |||
Routing Public Key Infrastructure to authenticate the geofeed data | optional scheme that uses the Routing Public Key Infrastructure to | |||
CSV files. | authenticate the geofeed data CSV files. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on November 26, 2021. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9092. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2021 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
1.1. Requirements Language . . . . . . . . . . . . . . . . . . 3 | 1.1. Requirements Language | |||
2. Geofeed Files . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Geofeed Files | |||
3. inetnum: Class . . . . . . . . . . . . . . . . . . . . . . . 3 | 3. inetnum: Class | |||
4. Authenticating Geofeed Data . . . . . . . . . . . . . . . . . 5 | 4. Authenticating Geofeed Data | |||
5. Operational Considerations . . . . . . . . . . . . . . . . . 8 | 5. Operational Considerations | |||
6. Privacy Considerations . . . . . . . . . . . . . . . . . . . 9 | 6. Privacy Considerations | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 9 | 7. Security Considerations | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | 8. IANA Considerations | |||
9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 10 | 9. References | |||
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 9.1. Normative References | |||
10.1. Normative References . . . . . . . . . . . . . . . . . . 10 | 9.2. Informative References | |||
10.2. Informative References . . . . . . . . . . . . . . . . . 12 | Appendix A. Example | |||
Appendix A. Example . . . . . . . . . . . . . . . . . . . . . . 14 | Acknowledgments | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 22 | Authors' Addresses | |||
1. Introduction | 1. Introduction | |||
Providers of Internet content and other services may wish to | Providers of Internet content and other services may wish to | |||
customize those services based on the geographic location of the user | customize those services based on the geographic location of the user | |||
of the service. This is often done using the source IP address used | of the service. This is often done using the source IP address used | |||
to contact the service. Also, infrastructure and other services | to contact the service. Also, infrastructure and other services | |||
might wish to publish the locale of their services. [RFC8805] | might wish to publish the locale of their services. [RFC8805] | |||
defines geofeed, a syntax to associate geographic locales with IP | defines geofeed, a syntax to associate geographic locales with IP | |||
addresses. But it does not specify how to find the relevant geofeed | addresses, but it does not specify how to find the relevant geofeed | |||
data given an IP address. | data given an IP address. | |||
This document specifies how to augment the Routing Policy | This document specifies how to augment the Routing Policy | |||
Specification Language (RPSL) [RFC2725] inetnum: class to refer | Specification Language (RPSL) [RFC2725] inetnum: class to refer | |||
specifically to geofeed data CSV files, and how to prudently use | specifically to geofeed data CSV files and how to prudently use them. | |||
them. In all places inetnum: is used, inet6num: should also be | In all places inetnum: is used, inet6num: should also be assumed | |||
assumed [RFC4012]. | [RFC4012]. | |||
The reader may find [INETNUM] and [INET6NUM] informative, and | The reader may find [INETNUM] and [INET6NUM] informative, and | |||
certainly more verbose, descriptions of the inetnum: database | certainly more verbose, descriptions of the inetnum: database | |||
classes. | classes. | |||
An optional, utterly awesome but slightly complex means for | An optional utterly awesome but slightly complex means for | |||
authenticating geofeed data is also defined. | authenticating geofeed data is also defined. | |||
1.1. Requirements Language | 1.1. Requirements Language | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
2. Geofeed Files | 2. Geofeed Files | |||
Geofeed files are described in [RFC8805]. They provide a facility | Geofeed files are described in [RFC8805]. They provide a facility | |||
for an IP address resource 'owner' to associate those IP addresses to | for an IP address resource "owner" to associate those IP addresses to | |||
geographic locales. | geographic locales. | |||
Content providers and other parties who wish to locate an IP address | Content providers and other parties who wish to locate an IP address | |||
to a geographic locale need to find the relevant geofeed data. In | to a geographic locale need to find the relevant geofeed data. In | |||
Section 3, this document specifies how to find the relevant [RFC8805] | Section 3, this document specifies how to find the relevant geofeed | |||
geofeed file given an IP address. | [RFC8805] file given an IP address. | |||
Geofeed data for large providers with significant horizontal scale | Geofeed data for large providers with significant horizontal scale | |||
and high granularity can be quite large. The size of a file can be | and high granularity can be quite large. The size of a file can be | |||
even larger if an unsigned geofeed file combines data for many | even larger if an unsigned geofeed file combines data for many | |||
prefixes, dual IPv4/IPv6 spaces are represented, etc. | prefixes, if dual IPv4/IPv6 spaces are represented, etc. | |||
Geofeed data do have privacy considerations, see Section 6; and this | Geofeed data do have privacy considerations (see Section 6); this | |||
process makes bulk access to those data easier. | process makes bulk access to those data easier. | |||
This document also suggests an optional signature to strongly | This document also suggests an optional signature to strongly | |||
authenticate the data in the geofeed files. | authenticate the data in the geofeed files. | |||
3. inetnum: Class | 3. inetnum: Class | |||
The original RPSL specifications starting with [RIPE81], [RIPE181], | The original RPSL specifications starting with [RIPE81], [RIPE181], | |||
and a trail of subsequent documents were done by the RIPE community. | and a trail of subsequent documents were written by the RIPE | |||
The IETF standardized RPSL in [RFC2622] and [RFC4012]. Since then, | community. The IETF standardized RPSL in [RFC2622] and [RFC4012]. | |||
it has been modified and extensively enhanced in the Regional | Since then, it has been modified and extensively enhanced in the | |||
Internet Registry (RIR) community, mostly by RIPE, [RIPE-DB]. | Regional Internet Registry (RIR) community, mostly by RIPE [RIPE-DB]. | |||
Currently, change control effectively lies in the operator community. | Currently, change control effectively lies in the operator community. | |||
The Routing Policy Specification Language (RPSL), and [RFC2725] and | The RPSL, and [RFC2725] and [RFC4012] used by the Regional Internet | |||
[RFC4012] used by the Regional Internet Registries (RIRs) specifies | Registries (RIRs), specify the inetnum: database class. Each of | |||
the inetnum: database class. Each of these objects describes an IP | these objects describes an IP address range and its attributes. The | |||
address range and its attributes. The inetnum: objects form a | inetnum: objects form a hierarchy ordered on the address space. | |||
hierarchy ordered on the address space. | ||||
Ideally, RPSL would be augmented to define a new RPSL geofeed: | Ideally, RPSL would be augmented to define a new RPSL geofeed: | |||
attribute in the inetnum: class. Until such time, this document | attribute in the inetnum: class. Until such time, this document | |||
defines the syntax of a Geofeed remarks: attribute which contains an | defines the syntax of a Geofeed remarks: attribute, which contains an | |||
HTTPS URL of a geofeed file. The format of the inetnum: geofeed | HTTPS URL of a geofeed file. The format of the inetnum: geofeed | |||
remarks: attribute MUST be as in this example, "remarks: Geofeed ", | remarks: attribute MUST be as in this example, "remarks: Geofeed ", | |||
where the token "Geofeed" MUST be case-sensitive, followed by a URL | where the token "Geofeed " MUST be case sensitive, followed by a URL | |||
which will vary, but MUST refer only to a single [RFC8805] geofeed | that will vary, but it MUST refer only to a single geofeed [RFC8805] | |||
file. | file. | |||
inetnum: 192.0.2.0/24 # example | inetnum: 192.0.2.0/24 # example | |||
remarks: Geofeed https://example.com/geofeed.csv | remarks: Geofeed https://example.com/geofeed.csv | |||
While we leave global agreement of RPSL modification to the relevant | While we leave global agreement of RPSL modification to the relevant | |||
parties, we specify that a proper geofeed: attribute in the inetnum: | parties, we specify that a proper geofeed: attribute in the inetnum: | |||
class MUST be "geofeed: ", and MUST be followed by a single URL which | class MUST be "geofeed:" and MUST be followed by a single URL that | |||
will vary, but MUST refer only to a single [RFC8805] geofeed file. | will vary, but it MUST refer only to a single geofeed [RFC8805] file. | |||
inetnum: 192.0.2.0/24 # example | inetnum: 192.0.2.0/24 # example | |||
geofeed: https://example.com/geofeed.csv | geofeed: https://example.com/geofeed.csv | |||
Registries MAY, for the interim, provide a mix of the remarks: | Registries MAY, for the interim, provide a mix of the remarks: | |||
attribute form and the geofeed: attribute form. | attribute form and the geofeed: attribute form. | |||
The URL uses HTTPS, so the WebPKI provides authentication, integrity, | The URL uses HTTPS, so the WebPKI provides authentication, integrity, | |||
and confidentiality for the fetched geofeed file. However, the | and confidentiality for the fetched geofeed file. However, the | |||
WebPKI can not provide authentication of IP address space assignment. | WebPKI can not provide authentication of IP address space assignment. | |||
In contrast, the Resource Public Key Infrastructure (RPKI, see | In contrast, the RPKI (see [RFC6481]) can be used to authenticate IP | |||
[RFC6481]) can be used to authenticate IP space assignment; see | space assignment; see optional authentication in Section 4. | |||
optional authentication in Section 4. | ||||
Until all producers of inetnum:s, i.e. the RIRs, state that they have | Until all producers of inetnum: objects, i.e., the RIRs, state that | |||
migrated to supporting a geofeed: attribute, consumers looking at | they have migrated to supporting a geofeed: attribute, consumers | |||
inetnum:s to find geofeed URLs MUST be able to consume both the | looking at inetnum: objects to find geofeed URLs MUST be able to | |||
remarks: and geofeed: forms. The migration not only implies that the | consume both the remarks: and geofeed: forms. The migration not only | |||
RIRs support the geofeed: attribute, but that all registrants have | implies that the RIRs support the geofeed: attribute, but that all | |||
migrated any inetnum:s from remarks: use to geofeed:s. | registrants have migrated any inetnum: objects from remarks: to | |||
geofeed: attributes. | ||||
Any particular inetnum: object MUST have at most, one geofeed | Any particular inetnum: object MUST have, at most, one geofeed | |||
reference, whether a remarks: or a proper geofeed: attribute when it | reference, whether a remarks: or a proper geofeed: attribute when it | |||
is implemented. If there is more than one, all are ignored. | is implemented. If there is more than one, all are ignored. | |||
If a geofeed CSV file describes multiple disjoint ranges of IP | If a geofeed CSV file describes multiple disjoint ranges of IP | |||
address space, there are likely to be geofeed references from | address space, there are likely to be geofeed references from | |||
multiple inetnum: objects. Files with geofeed references from | multiple inetnum: objects. Files with geofeed references from | |||
multiple inetnum: objects are not compatible with the signing | multiple inetnum: objects are not compatible with the signing | |||
procedure in Section 4. | procedure in Section 4. | |||
When geofeed references are provided by multiple inetnum: objects | When geofeed references are provided by multiple inetnum: objects | |||
which have identical address ranges, then the geofeed reference on | that have identical address ranges, then the geofeed reference on the | |||
the inetnum: with the most recent last-modified: attribute SHOULD be | inetnum: with the most recent last-modified: attribute SHOULD be | |||
preferred. | preferred. | |||
As inetnum: objects form a hierarchy, Geofeed references SHOULD be at | As inetnum: objects form a hierarchy, geofeed references SHOULD be at | |||
the lowest applicable inetnum: object covering the relevant address | the lowest applicable inetnum: object covering the relevant address | |||
ranges in the referenced geofeed file. When fetching, the most | ranges in the referenced geofeed file. When fetching, the most | |||
specific inetnum: object with a geofeed reference MUST be used. | specific inetnum: object with a geofeed reference MUST be used. | |||
It is significant that geofeed data may have finer granularity than | It is significant that geofeed data may have finer granularity than | |||
the inetnum: which refers to them. For example an INETNUM object for | the inetnum: that refers to them. For example, an INETNUM object for | |||
an address range P could refer to a geofeed file in which P has been | an address range P could refer to a geofeed file in which P has been | |||
sub-divided into one or more longer prefixes. | subdivided into one or more longer prefixes. | |||
Currently, the registry data published by ARIN is not the same RPSL | Currently, the registry data published by ARIN are not the same RPSL | |||
as that of the other registries (see [RFC7485] for a survey of the | as that of the other registries (see [RFC7485] for a survey of the | |||
whois Tower of Babel); therefore, when fetching from ARIN via FTP | WHOIS Tower of Babel); therefore, when fetching from ARIN via FTP | |||
[RFC0959], whois [RFC3912], RDAP [RFC7482], or whatever, the | [RFC0959], WHOIS [RFC3912], the Registration Data Access Protocol | |||
"NetRange" attribute/key MUST be treated as "inetnum" and the | (RDAP) [RFC9082], etc., the "NetRange" attribute/key MUST be treated | |||
"Comment" attribute MUST be treated as "remarks". | as "inetnum", and the "Comment" attribute MUST be treated as | |||
"remarks". | ||||
4. Authenticating Geofeed Data | 4. Authenticating Geofeed Data | |||
The question arises whether a particular [RFC8805] geofeed data set | The question arises whether a particular geofeed [RFC8805] data set | |||
is valid, i.e. is authorized by the 'owner' of the IP address space | is valid, i.e., is authorized by the "owner" of the IP address space | |||
and is authoritative in some sense. The inetnum: which points to the | and is authoritative in some sense. The inetnum: that points to the | |||
[RFC8805] geofeed file provides some assurance. Unfortunately, the | geofeed [RFC8805] file provides some assurance. Unfortunately, the | |||
RPSL in many repositories is weakly authenticated at best. An | RPSL in many repositories is weakly authenticated at best. An | |||
approach where RPSL was signed a la [RFC7909] would be good, except | approach where RPSL was signed per [RFC7909] would be good, except it | |||
it would have to be deployed by all RPSL registries, and there is a | would have to be deployed by all RPSL registries, and there is a fair | |||
fair number of them. | number of them. | |||
A single optional authenticator MAY be appended to a [RFC8805] | A single optional authenticator MAY be appended to a geofeed | |||
geofeed file. It is a digest of the main body of the file signed by | [RFC8805] file. It is a digest of the main body of the file signed | |||
the private key of the relevant RPKI certificate for a covering | by the private key of the relevant RPKI certificate for a covering | |||
address range. One needs a format that bundles the relevant RPKI | address range. One needs a format that bundles the relevant RPKI | |||
certificate with the signature of the geofeed text. | certificate with the signature of the geofeed text. | |||
The canonicalization procedure converts the data from its internal | The canonicalization procedure converts the data from their internal | |||
character representation to the UTF-8 [RFC3629] character encoding, | character representation to the UTF-8 [RFC3629] character encoding, | |||
and the <CRLF> sequence MUST be used to denote the end of a line of | and the <CRLF> sequence MUST be used to denote the end of a line of | |||
text. A blank line is represented solely by the <CRLF> sequence. | text. A blank line is represented solely by the <CRLF> sequence. | |||
For robustness, any non-printable characters MUST NOT be changed by | For robustness, any non-printable characters MUST NOT be changed by | |||
canonicalization. Trailing blank lines MUST NOT appear at the end of | canonicalization. Trailing blank lines MUST NOT appear at the end of | |||
the file. That is, the file must not end with multiple consecutive | the file. That is, the file must not end with multiple consecutive | |||
<CRLF> sequences. Any end-of-file marker used by an operating system | <CRLF> sequences. Any end-of-file marker used by an operating system | |||
is not considered to be part of the file content. When present, such | is not considered to be part of the file content. When present, such | |||
end-of-file markers MUST NOT be processed by the digital signature | end-of-file markers MUST NOT be processed by the digital signature | |||
algorithm. | algorithm. | |||
Should the authenticator be syntactically incorrect per the above, | Should the authenticator be syntactically incorrect per the above, | |||
the authenticator is invalid. | the authenticator is invalid. | |||
Borrowing detached signatures from [RFC5485], after file | Borrowing detached signatures from [RFC5485], after file | |||
canonicalization, the Cryptographic Message Syntax (CMS) [RFC5652] | canonicalization, the Cryptographic Message Syntax (CMS) [RFC5652] | |||
would be used to create a detached DER encoded signature which is | would be used to create a detached DER-encoded signature that is then | |||
then padded BASE64 encoded (as per [RFC4648] Section 4), and line | padded BASE64 encoded (as per Section 4 of [RFC4648]) and line | |||
wrapped to 72 or fewer characters. The same digest algorithm MUST be | wrapped to 72 or fewer characters. The same digest algorithm MUST be | |||
used for calculating the message digest on content being signed, | used for calculating the message digest on content being signed, | |||
which is the geofeed file, and calculating the message digest on the | which is the geofeed file, and for calculating the message digest on | |||
SignerInfo SignedAttributes [RFC8933]. The message digest algorithm | the SignerInfo SignedAttributes [RFC8933]. The message digest | |||
identifier MUST appear in both the SigenedData | algorithm identifier MUST appear in both the SignedData | |||
DigestAlgorithmIdentifiers and the SignerInfo | DigestAlgorithmIdentifiers and the SignerInfo | |||
DigestAlgorithmIdentifier [RFC5652]. | DigestAlgorithmIdentifier [RFC5652]. | |||
The address range of the signing certificate MUST cover all prefixes | The address range of the signing certificate MUST cover all prefixes | |||
in the geofeed file it signs. | in the geofeed file it signs. | |||
An address range A 'covers' address range B if the range of B is | An address range A "covers" address range B if the range of B is | |||
identical to or a subset of A. 'Address range' is used here because | identical to or a subset of A. "Address range" is used here because | |||
inetnum: objects and RPKI certificates need not align on CIDR prefix | inetnum: objects and RPKI certificates need not align on Classless | |||
boundaries, while those of the CSV lines in a geofeed file do. | Inter-Domain Routing (CIDR) [RFC4632] prefix boundaries, while those | |||
of the CSV lines in a geofeed file do. | ||||
As the signer specifies the covered RPKI resources relevant to the | As the signer specifies the covered RPKI resources relevant to the | |||
signature, the RPKI certificate covering the inetnum: object's | signature, the RPKI certificate covering the inetnum: object's | |||
address range is included in the [RFC5652] CMS SignedData | address range is included in the [RFC5652] CMS SignedData | |||
certificates field. | certificates field. | |||
Identifying the private key associated with the certificate, and | Identifying the private key associated with the certificate and | |||
getting the department that controls the private key (which might be | getting the department that controls the private key (which might be | |||
trapped in a Hardware Security Module, HSM) to sign the CMS blob is | trapped in a Hardware Security Module (HSM)) to sign the CMS blob is | |||
left as an exercise for the implementor. On the other hand, | left as an exercise for the implementor. On the other hand, | |||
verifying the signature requires no complexity; the certificate, | verifying the signature requires no complexity; the certificate, | |||
which can be validated in the public RPKI, has the needed public key. | which can be validated in the public RPKI, has the needed public key. | |||
The trust anchors for the RIRs are expected to already be available | The trust anchors for the RIRs are expected to already be available | |||
to the party performing signature validation. Validation of the CMS | to the party performing signature validation. Validation of the CMS | |||
signature on the geofeed file involves: | signature on the geofeed file involves: | |||
1. Obtain the signer's certificate from the CMS SignedData | 1. Obtaining the signer's certificate from the CMS SignedData | |||
CertificateSet [RFC5652]. The certificate SubjectKeyIdentifier | CertificateSet [RFC5652]. The certificate SubjectKeyIdentifier | |||
extension [RFC5280] MUST match the SubjectKeyIdentifier in the | extension [RFC5280] MUST match the SubjectKeyIdentifier in the | |||
CMS SignerInfo SignerIdentifier [RFC5652]. If the key | CMS SignerInfo SignerIdentifier [RFC5652]. If the key | |||
identifiers do not match, then validation MUST fail. | identifiers do not match, then validation MUST fail. | |||
2. Construct the certification path for the signer's certificate. | Validation of the signer's certificate MUST ensure that it is | |||
part of the current [RFC6486] manifest and that the resources are | ||||
covered by the RPKI certificate. | ||||
2. Constructing the certification path for the signer's certificate. | ||||
All of the needed certificates are expected to be readily | All of the needed certificates are expected to be readily | |||
available in the RPKI Repository. The certification path MUST be | available in the RPKI repository. The certification path MUST be | |||
valid according to the validation algorithm in [RFC5280] and the | valid according to the validation algorithm in [RFC5280] and the | |||
additional checks specified in [RFC3779] associated with the IP | additional checks specified in [RFC3779] associated with the IP | |||
Address Delegation certificate extension and the Autonomous | Address Delegation certificate extension and the Autonomous | |||
System Identifier Delegation certificate extension. If | System Identifier Delegation certificate extension. If | |||
certification path validation is unsuccessful, then validation | certification path validation is unsuccessful, then validation | |||
MUST fail. | MUST fail. | |||
3. Validate the CMS SignedData as specified in [RFC5652] using the | 3. Validating the CMS SignedData as specified in [RFC5652] using the | |||
public key from the validated signer's certificate. If the | public key from the validated signer's certificate. If the | |||
signature validation is unsuccessful, then validation MUST fail. | signature validation is unsuccessful, then validation MUST fail. | |||
4. Verify that the IP Address Delegation certificate extension | 4. Verifying that the IP Address Delegation certificate extension | |||
[RFC3779] covers all of the address ranges of the geofeed file. | [RFC3779] covers all of the address ranges of the geofeed file. | |||
If all of the address ranges are not covered, then validation | If all of the address ranges are not covered, then validation | |||
MUST fail. | MUST fail. | |||
5. Validation of the signer's certificate MUST ensure that it is | ||||
part of the current [RFC6486] manifest and that the resources are | ||||
covered by the RPKI certificate. | ||||
All of these steps MUST be successful to consider the geofeed file | All of these steps MUST be successful to consider the geofeed file | |||
signature as valid. | signature as valid. | |||
As the signer specifies the covered RPKI resources relevant to the | As the signer specifies the covered RPKI resources relevant to the | |||
signature, the RPKI certificate covering the inetnum: object's | signature, the RPKI certificate covering the inetnum: object's | |||
address range is included in the [RFC5652] CMS SignedData | address range is included in the CMS SignedData certificates field | |||
certificates field. | [RFC5652]. | |||
Identifying the private key associated with the certificate, and | Identifying the private key associated with the certificate and | |||
getting the department with the Hardware Security Module (HSM) to | getting the department with the Hardware Security Module (HSM) to | |||
sign the CMS blob is left as an exercise for the implementor. On the | sign the CMS blob is left as an exercise for the implementor. On the | |||
other hand, verifying the signature requires no complexity; the | other hand, verifying the signature requires no complexity; the | |||
certificate, which can be validated in the public RPKI, has the | certificate, which can be validated in the public RPKI, has the | |||
needed public key. | needed public key. | |||
The appendix MUST be 'hidden' as a series of "#" comments at the end | The appendix MUST be hidden as a series of "#" comments at the end of | |||
of the geofeed file. The following is a cryptographically incorrect, | the geofeed file. The following is a cryptographically incorrect, | |||
albeit simple example. A correct and full example is in Appendix A. | albeit simple, example. A correct and full example is in Appendix A. | |||
# RPKI Signature: 192.0.2.0 - 192.0.2.255 | # RPKI Signature: 192.0.2.0 - 192.0.2.255 | |||
# MIIGlwYJKoZIhvcNAQcCoIIGiDCCBoQCAQMxDTALBglghkgBZQMEAgEwDQYLKoZ | # MIIGlwYJKoZIhvcNAQcCoIIGiDCCBoQCAQMxDTALBglghkgBZQMEAgEwDQYLKoZ | |||
# IhvcNAQkQAS+gggSxMIIErTCCA5WgAwIBAgIUJ605QIPX8rW5m4Zwx3WyuW7hZu | # IhvcNAQkQAS+gggSxMIIErTCCA5WgAwIBAgIUJ605QIPX8rW5m4Zwx3WyuW7hZu | |||
... | ... | |||
# imwYkXpiMxw44EZqDjl36MiWsRDLdgoijBBcGbibwyAfGeR46k5raZCGvxG+4xa | # imwYkXpiMxw44EZqDjl36MiWsRDLdgoijBBcGbibwyAfGeR46k5raZCGvxG+4xa | |||
# O8PDTxTfIYwAnBjRBKAqAZ7yX5xHfm58jUXsZJ7Ileq1S7G6Kk= | # O8PDTxTfIYwAnBjRBKAqAZ7yX5xHfm58jUXsZJ7Ileq1S7G6Kk= | |||
# End Signature: 192.0.2.0 - 192.0.2.255 | # End Signature: 192.0.2.0 - 192.0.2.255 | |||
The signature does not cover the signature lines. | The signature does not cover the signature lines. | |||
The bracketing "# RPKI Signature:" and "# End Signature:" MUST be | The bracketing "# RPKI Signature:" and "# End Signature:" MUST be | |||
present following the model as shown. Their IP address range MUST | present following the model as shown. Their IP address range MUST | |||
match that of the inetnum: URL followed to the file. | match that of the inetnum: URL followed to the file. | |||
[I-D.spaghetti-sidrops-rpki-rsc] describes and provides code for a | [RPKI-RSC] describes and provides code for a CMS profile for a | |||
Cryptographic Message Syntax (CMS) profile for a general purpose | general purpose listing of checksums (a "checklist") for use with the | |||
listing of checksums (a 'checklist'), for use with the Resource | Resource Public Key Infrastructure (RPKI). It provides usable, | |||
Public Key Infrastructure (RPKI). It provides usable, albeit | albeit complex, code to sign geofeed files. | |||
complex, code to sign geofeed files. | ||||
[I-D.ietf-sidrops-rpki-rta] describes a Cryptographic Message Syntax | [RPKI-RTA] describes a CMS profile for a general purpose Resource | |||
(CMS) profile for a general purpose Resource Tagged Attestation (RTA) | Tagged Attestation (RTA) based on the RPKI. While this is expected | |||
based on the RPKI. While this is expected to become applicable in | to become applicable in the long run, for the purposes of this | |||
the long run, for the purposes of this document, a self-signed root | document, a self-signed root trust anchor is used. | |||
trust anchor is used. | ||||
5. Operational Considerations | 5. Operational Considerations | |||
To create the needed inetnum: objects, an operator wishing to | To create the needed inetnum: objects, an operator wishing to | |||
register the location of their geofeed file needs to coordinate with | register the location of their geofeed file needs to coordinate with | |||
their RIR/NIR and/or any provider LIR which has assigned address | their Regional Internet Registry (RIR) or National Internet Registry | |||
ranges to them. RIRs/NIRs provide means for assignees to create and | (NIR) and/or any provider Local Internet Registry (LIR) that has | |||
maintain inetnum: objects. They also provide means of | assigned address ranges to them. RIRs/NIRs provide means for | |||
[sub-]assigning IP address resources and allowing the assignee to | assignees to create and maintain inetnum: objects. They also provide | |||
create whois data, including inetnum: objects, and thereby referring | means of assigning or sub-assigning IP address resources and allowing | |||
to geofeed files. | the assignee to create WHOIS data, including inetnum: objects, | |||
thereby referring to geofeed files. | ||||
The geofeed files MUST be published via and fetched using HTTPS | The geofeed files MUST be published via and fetched using HTTPS | |||
[RFC2818]. | [RFC2818]. | |||
When using data from a geofeed file, one MUST ignore data outside the | When using data from a geofeed file, one MUST ignore data outside the | |||
referring inetnum: object's inetnum: attribute address range. | referring inetnum: object's inetnum: attribute address range. | |||
If and only if the geofeed file is not signed per Section 4, then | If and only if the geofeed file is not signed per Section 4, then | |||
multiple inetnum: objects MAY refer to the same geofeed file, and the | multiple inetnum: objects MAY refer to the same geofeed file, and the | |||
consumer MUST use only lines in the geofeed file where the prefix is | consumer MUST use only lines in the geofeed file where the prefix is | |||
covered by the address range of the inetnum: object's URL it has | covered by the address range of the inetnum: object's URL it has | |||
followed. | followed. | |||
If the geofeed file is signed, and the signer's certificate changes, | If the geofeed file is signed, and the signer's certificate changes, | |||
the signature in the geofeed file MUST be updated. | the signature in the geofeed file MUST be updated. | |||
It is good key hygiene to use a given key for only one purpose. To | It is good key hygiene to use a given key for only one purpose. To | |||
dedicate a signing private key for signing a geofeed file, an RPKI CA | dedicate a signing private key for signing a geofeed file, an RPKI | |||
may issue a subordinate certificate exclusively for the purpose as | Certification Authority (CA) may issue a subordinate certificate | |||
shown in Appendix A. | exclusively for the purpose shown in Appendix A. | |||
To minimize the load on RIR whois [RFC3912] services, use of the | To minimize the load on RIR WHOIS [RFC3912] services, use of the | |||
RIR's FTP [RFC0959] services SHOULD be used for large scale access to | RIR's FTP [RFC0959] services SHOULD be used for large-scale access to | |||
gather geofeed URLs. This also provides bulk access instead of | gather geofeed URLs. This also provides bulk access instead of | |||
fetching by brute force search through the IP space. | fetching by brute-force search through the IP space. | |||
Currently, geolocation providers have bulk whois data access at all | Currently, geolocation providers have bulk WHOIS data access at all | |||
the RIRs. An anonymized version of such data is openly available for | the RIRs. An anonymized version of such data is openly available for | |||
all RIRs except ARIN, which requires an authorization. However, for | all RIRs except ARIN, which requires an authorization. However, for | |||
users without such authorization, the same result can be achieved | users without such authorization, the same result can be achieved | |||
with extra RDAP effort. There is open source code to pass over such | with extra RDAP effort. There is open-source code to pass over such | |||
data across all RIRs, collect all geofeed references, and process | data across all RIRs, collect all geofeed references, and process | |||
them [geofeed-finder]. | them [GEOFEED-FINDER]. | |||
To prevent undue load on RPSL and geofeed servers, an entity fetching | To prevent undue load on RPSL and geofeed servers, entity-fetching | |||
geofeed data using these mechanisms MUST NOT do frequent real-time | geofeed data using these mechanisms MUST NOT do frequent real-time | |||
look-ups. [RFC8805] Section 3.4 suggests use of the [RFC7234] HTTP | lookups. Section 3.4 of [RFC8805] suggests use of the HTTP Expires | |||
Expires Caching Header to signal when geofeed data should be | header [RFC7234] to signal when geofeed data should be refetched. As | |||
refetched. As the data change very infrequently, in the absence of | the data change very infrequently, in the absence of such an HTTP | |||
such an HTTP Header signal, collectors SHOULD NOT fetch more | Header signal, collectors SHOULD NOT fetch more frequently than | |||
frequently than weekly. It would be polite not to fetch at magic | weekly. It would be polite not to fetch at magic times such as | |||
times such as midnight UTC, the first of the month, etc., because too | midnight UTC, the first of the month, etc., because too many others | |||
many others are likely to do the same. | are likely to do the same. | |||
6. Privacy Considerations | 6. Privacy Considerations | |||
[RFC8805] geofeed data may reveal the approximate location of an IP | [RFC8805] geofeed data may reveal the approximate location of an IP | |||
address, which might in turn reveal the approximate location of an | address, which might in turn reveal the approximate location of an | |||
individual user. Unfortunately, [RFC8805] provides no privacy | individual user. Unfortunately, [RFC8805] provides no privacy | |||
guidance on avoiding or ameliorating possible damage due to this | guidance on avoiding or ameliorating possible damage due to this | |||
exposure of the user. In publishing pointers to geofeed files as | exposure of the user. In publishing pointers to geofeed files as | |||
described in this document, the operator should be aware of this | described in this document, the operator should be aware of this | |||
exposure in geofeed data and be cautious. All the privacy | exposure in geofeed data and be cautious. All the privacy | |||
considerations of [RFC8805] Section 4 apply to this document. | considerations of Section 4 of [RFC8805] apply to this document. | |||
Where [RFC8805] provided the ability to publish location data, this | Where [RFC8805] provided the ability to publish location data, this | |||
document makes bulk access to those data readily available. This is | document makes bulk access to those data readily available. This is | |||
a goal, not an accident. | a goal, not an accident. | |||
7. Security Considerations | 7. Security Considerations | |||
It is generally prudent for a consumer of geofeed data to also use | It is generally prudent for a consumer of geofeed data to also use | |||
other sources to cross-validate the data. All the Security | other sources to cross validate the data. All the security | |||
Considerations of [RFC8805] apply here as well. | considerations of [RFC8805] apply here as well. | |||
As mentioned in Section 4, many RPSL repositories have weak if any | As mentioned in Section 4, many RPSL repositories have weak, if any, | |||
authentication. This allows spoofing of inetnum: objects pointing to | authentication. This allows spoofing of inetnum: objects pointing to | |||
malicious geofeed files. Section 4 suggests an unfortunately complex | malicious geofeed files. Section 4 suggests an unfortunately complex | |||
method for stronger authentication based on the RPKI. | method for stronger authentication based on the RPKI. | |||
For example, if an inetnum: for a wide address range (e.g. a /16) | For example, if an inetnum: for a wide address range (e.g., a /16) | |||
points to an RPKI-signed geofeed file, a customer or attacker could | points to an RPKI-signed geofeed file, a customer or attacker could | |||
publish an unsigned equal or narrower (e.g. a /24) inetnum: in a | publish an unsigned equal or narrower (e.g., a /24) inetnum: in a | |||
whois registry which has weak authorization, abusing the rule that | WHOIS registry that has weak authorization, abusing the rule that the | |||
the most-specific inetnum: object with a geofeed reference MUST be | most-specific inetnum: object with a geofeed reference MUST be used. | |||
used. | ||||
If signatures were mandatory, the above attack would be stymied. But | If signatures were mandatory, the above attack would be stymied, but | |||
of course that is not happening anytime soon. | of course that is not happening anytime soon. | |||
The RPSL providers have had to throttle fetching from their servers | The RPSL providers have had to throttle fetching from their servers | |||
due to too-frequent queries. Usually they throttle by the querying | due to too-frequent queries. Usually, they throttle by the querying | |||
IP address or block. Similar defenses will likely need to be | IP address or block. Similar defenses will likely need to be | |||
deployed by geofeed file servers. | deployed by geofeed file servers. | |||
8. IANA Considerations | 8. IANA Considerations | |||
IANA is asked to register object identifiers for one content type in | IANA has registered object identifiers for one content type in the | |||
the "SMI Security for S/MIME CMS Content Type | "SMI Security for S/MIME CMS Content Type (1.2.840.113549.1.9.16.1)" | |||
(1.2.840.113549.1.9.16.1)" registry as follows: | registry as follows: | |||
Description OID Specification | ||||
----------------------------------------------------------------- | ||||
id-ct-geofeedCSVwithCRLF 1.2.840.113549.1.9.16.1.47 [RFC-TBD] | ||||
9. Acknowledgments | +=========+==========================+============+ | |||
| Decimal | Description | References | | ||||
+=========+==========================+============+ | ||||
| 47 | id-ct-geofeedCSVwithCRLF | RFC 9092 | | ||||
+---------+--------------------------+------------+ | ||||
Thanks to Rob Austein for CMS and detached signature clue. George | Table 1 | |||
Michaelson for the first and substantial external review, Erik Kline | ||||
who was too shy to agree to co-authorship. Additionally, we express | ||||
our gratitude to early implementors, including Menno Schepers, Flavio | ||||
Luciani, Eric Dugas, Job Snijders who provided running code, and | ||||
Kevin Pack. Also, to geolocation providers that are consuming | ||||
geofeeds with this described solution, Jonathan Kosgei (ipdata.co), | ||||
Ben Dowling (ipinfo.io), and Pol Nisenblat (bigdatacloud.com). For | ||||
an amazing number of helpful reviews we thank Adrian Farrel, Antonio | ||||
Prado, Francesca Palombini, Jean-Michel Combes (INTDIR), John | ||||
Scudder, Kyle Rose (SECDIR), Martin Duke, Murray Kucherawy, Paul | ||||
Kyzivat (GENART), Rob Wilton, and Roman Danyliw. The authors also | ||||
thank George Michaelson, the awesome document shepherd. | ||||
10. References | 9. References | |||
10.1. Normative References | 9.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC2622] Alaettinoglu, C., Villamizar, C., Gerich, E., Kessens, D., | [RFC2622] Alaettinoglu, C., Villamizar, C., Gerich, E., Kessens, D., | |||
Meyer, D., Bates, T., Karrenberg, D., and M. Terpstra, | Meyer, D., Bates, T., Karrenberg, D., and M. Terpstra, | |||
"Routing Policy Specification Language (RPSL)", RFC 2622, | "Routing Policy Specification Language (RPSL)", RFC 2622, | |||
DOI 10.17487/RFC2622, June 1999, | DOI 10.17487/RFC2622, June 1999, | |||
skipping to change at page 12, line 24 ¶ | skipping to change at line 532 ¶ | |||
[RFC8805] Kline, E., Duleba, K., Szamonek, Z., Moser, S., and W. | [RFC8805] Kline, E., Duleba, K., Szamonek, Z., Moser, S., and W. | |||
Kumari, "A Format for Self-Published IP Geolocation | Kumari, "A Format for Self-Published IP Geolocation | |||
Feeds", RFC 8805, DOI 10.17487/RFC8805, August 2020, | Feeds", RFC 8805, DOI 10.17487/RFC8805, August 2020, | |||
<https://www.rfc-editor.org/info/rfc8805>. | <https://www.rfc-editor.org/info/rfc8805>. | |||
[RFC8933] Housley, R., "Update to the Cryptographic Message Syntax | [RFC8933] Housley, R., "Update to the Cryptographic Message Syntax | |||
(CMS) for Algorithm Identifier Protection", RFC 8933, | (CMS) for Algorithm Identifier Protection", RFC 8933, | |||
DOI 10.17487/RFC8933, October 2020, | DOI 10.17487/RFC8933, October 2020, | |||
<https://www.rfc-editor.org/info/rfc8933>. | <https://www.rfc-editor.org/info/rfc8933>. | |||
10.2. Informative References | 9.2. Informative References | |||
[geofeed-finder] | [GEOFEED-FINDER] | |||
Massimo Candela, "geofeed-finder", | "geofeed-finder", commit 5f557a4, June 2021, | |||
<https://github.com/massimocandela/geofeed-finder>. | <https://github.com/massimocandela/geofeed-finder>. | |||
[I-D.ietf-sidrops-rpki-rta] | [INET6NUM] RIPE NCC, "Description of the INET6NUM Object", October | |||
Michaelson, G. G., Huston, G., Harrison, T., Bruijnzeels, | 2019, <https://www.ripe.net/manage-ips-and- | |||
T., and M. Hoffmann, "A profile for Resource Tagged | ||||
Attestations (RTAs)", draft-ietf-sidrops-rpki-rta-00 (work | ||||
in progress), January 2021. | ||||
[I-D.spaghetti-sidrops-rpki-rsc] | ||||
Snijders, J., "RPKI Signed Checklists", draft-spaghetti- | ||||
sidrops-rpki-rsc-03 (work in progress), February 2021. | ||||
[INET6NUM] | ||||
RIPE, "Description of the INET6NUM Object", | ||||
<https://www.ripe.net/manage-ips-and- | ||||
asns/db/support/documentation/ripe-database-documentation/ | asns/db/support/documentation/ripe-database-documentation/ | |||
rpsl-object-types/4-2-descriptions-of-primary- | rpsl-object-types/4-2-descriptions-of-primary- | |||
objects/4-2-3-description-of-the-inet6num-object>. | objects/4-2-3-description-of-the-inet6num-object>. | |||
[INETNUM] RIPE, "Description of the INETNUM Object", | [INETNUM] RIPE NCC, "Description of the INETNUM Object", June 2020, | |||
<https://www.ripe.net/manage-ips-and- | <https://www.ripe.net/manage-ips-and- | |||
asns/db/support/documentation/ripe-database-documentation/ | asns/db/support/documentation/ripe-database-documentation/ | |||
rpsl-object-types/4-2-descriptions-of-primary- | rpsl-object-types/4-2-descriptions-of-primary- | |||
objects/4-2-4-description-of-the-inetnum-object>. | objects/4-2-4-description-of-the-inetnum-object>. | |||
[RFC0959] Postel, J. and J. Reynolds, "File Transfer Protocol", | [RFC0959] Postel, J. and J. Reynolds, "File Transfer Protocol", | |||
STD 9, RFC 959, DOI 10.17487/RFC0959, October 1985, | STD 9, RFC 959, DOI 10.17487/RFC0959, October 1985, | |||
<https://www.rfc-editor.org/info/rfc959>. | <https://www.rfc-editor.org/info/rfc959>. | |||
[RFC3912] Daigle, L., "WHOIS Protocol Specification", RFC 3912, | [RFC3912] Daigle, L., "WHOIS Protocol Specification", RFC 3912, | |||
DOI 10.17487/RFC3912, September 2004, | DOI 10.17487/RFC3912, September 2004, | |||
<https://www.rfc-editor.org/info/rfc3912>. | <https://www.rfc-editor.org/info/rfc3912>. | |||
[RFC4632] Fuller, V. and T. Li, "Classless Inter-domain Routing | ||||
(CIDR): The Internet Address Assignment and Aggregation | ||||
Plan", BCP 122, RFC 4632, DOI 10.17487/RFC4632, August | ||||
2006, <https://www.rfc-editor.org/info/rfc4632>. | ||||
[RFC5485] Housley, R., "Digital Signatures on Internet-Draft | [RFC5485] Housley, R., "Digital Signatures on Internet-Draft | |||
Documents", RFC 5485, DOI 10.17487/RFC5485, March 2009, | Documents", RFC 5485, DOI 10.17487/RFC5485, March 2009, | |||
<https://www.rfc-editor.org/info/rfc5485>. | <https://www.rfc-editor.org/info/rfc5485>. | |||
[RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | [RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", | Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", | |||
RFC 7234, DOI 10.17487/RFC7234, June 2014, | RFC 7234, DOI 10.17487/RFC7234, June 2014, | |||
<https://www.rfc-editor.org/info/rfc7234>. | <https://www.rfc-editor.org/info/rfc7234>. | |||
[RFC7482] Newton, A. and S. Hollenbeck, "Registration Data Access | ||||
Protocol (RDAP) Query Format", RFC 7482, | ||||
DOI 10.17487/RFC7482, March 2015, | ||||
<https://www.rfc-editor.org/info/rfc7482>. | ||||
[RFC7485] Zhou, L., Kong, N., Shen, S., Sheng, S., and A. Servin, | [RFC7485] Zhou, L., Kong, N., Shen, S., Sheng, S., and A. Servin, | |||
"Inventory and Analysis of WHOIS Registration Objects", | "Inventory and Analysis of WHOIS Registration Objects", | |||
RFC 7485, DOI 10.17487/RFC7485, March 2015, | RFC 7485, DOI 10.17487/RFC7485, March 2015, | |||
<https://www.rfc-editor.org/info/rfc7485>. | <https://www.rfc-editor.org/info/rfc7485>. | |||
[RFC7909] Kisteleki, R. and B. Haberman, "Securing Routing Policy | [RFC7909] Kisteleki, R. and B. Haberman, "Securing Routing Policy | |||
Specification Language (RPSL) Objects with Resource Public | Specification Language (RPSL) Objects with Resource Public | |||
Key Infrastructure (RPKI) Signatures", RFC 7909, | Key Infrastructure (RPKI) Signatures", RFC 7909, | |||
DOI 10.17487/RFC7909, June 2016, | DOI 10.17487/RFC7909, June 2016, | |||
<https://www.rfc-editor.org/info/rfc7909>. | <https://www.rfc-editor.org/info/rfc7909>. | |||
[RIPE-DB] RIPE, "RIPE Database Documentation", | [RFC9082] Hollenbeck, S. and A. Newton, "Registration Data Access | |||
Protocol (RDAP) Query Format", STD 95, RFC 9082, | ||||
DOI 10.17487/RFC9082, June 2021, | ||||
<https://www.rfc-editor.org/info/rfc9082>. | ||||
[RIPE-DB] RIPE NCC, "RIPE Database Documentation", | ||||
<https://www.ripe.net/manage-ips-and- | <https://www.ripe.net/manage-ips-and- | |||
asns/db/support/documentation/ripe-database- | asns/db/support/documentation/ripe-database- | |||
documentation>. | documentation>. | |||
[RIPE181] RIPE, "Representation Of IP Routing Policies In A Routing | [RIPE181] RIPE NCC, "Representation Of IP Routing Policies In A | |||
Registry", | Routing Registry", October 1994, | |||
<https://www.ripe.net/publications/docs/ripe-181>. | <https://www.ripe.net/publications/docs/ripe-181>. | |||
[RIPE81] RIPE, "Representation Of IP Routing Policies In The RIPE | [RIPE81] RIPE NCC, "Representation Of IP Routing Policies In The | |||
Database", | RIPE Database", February 1993, | |||
<https://www.ripe.net/publications/docs/ripe-081>. | <https://www.ripe.net/publications/docs/ripe-081>. | |||
[RPKI-RSC] Snijders, J., Harrison, T., and B. Maddison, "Resource | ||||
Public Key Infrastructure (RPKI) object profile for Signed | ||||
Checklist (RSC)", Work in Progress, Internet-Draft, draft- | ||||
ietf-sidrops-rpki-rsc-04, 31 May 2021, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-sidrops- | ||||
rpki-rsc-04>. | ||||
[RPKI-RTA] Michaelson, G. G., Huston, G., Harrison, T., Bruijnzeels, | ||||
T., and M. Hoffmann, "A profile for Resource Tagged | ||||
Attestations (RTAs)", Work in Progress, Internet-Draft, | ||||
draft-ietf-sidrops-rpki-rta-00, 21 January 2021, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-sidrops- | ||||
rpki-rta-00>. | ||||
Appendix A. Example | Appendix A. Example | |||
This appendix provides an example, including a trust anchor, a CA | This appendix provides an example that includes a trust anchor, a CA | |||
certificate subordinate to the trust anchor, an end-entity | certificate subordinate to the trust anchor, an end-entity | |||
certificate subordinate to the CA for signing the geofeed, and a | certificate subordinate to the CA for signing the geofeed, and a | |||
detached signature. | detached signature. | |||
The trust anchor is represented by a self-signed certificate. As | The trust anchor is represented by a self-signed certificate. As | |||
usual in the RPKI, the trust anchor has authority over all IPv4 | usual in the RPKI, the trust anchor has authority over all IPv4 | |||
address blocks, all IPv6 address blocks, and all AS numbers. | address blocks, all IPv6 address blocks, and all Autonomous System | |||
(AS) numbers. | ||||
-----BEGIN CERTIFICATE----- | -----BEGIN CERTIFICATE----- | |||
MIIEPjCCAyagAwIBAgIUPsUFJ4e/7pKZ6E14aBdkbYzms1gwDQYJKoZIhvcNAQEL | MIIEPjCCAyagAwIBAgIUPsUFJ4e/7pKZ6E14aBdkbYzms1gwDQYJKoZIhvcNAQEL | |||
BQAwFTETMBEGA1UEAxMKZXhhbXBsZS10YTAeFw0yMDA5MDMxODU0NTRaFw0zMDA5 | BQAwFTETMBEGA1UEAxMKZXhhbXBsZS10YTAeFw0yMDA5MDMxODU0NTRaFw0zMDA5 | |||
MDExODU0NTRaMBUxEzARBgNVBAMTCmV4YW1wbGUtdGEwggEiMA0GCSqGSIb3DQEB | MDExODU0NTRaMBUxEzARBgNVBAMTCmV4YW1wbGUtdGEwggEiMA0GCSqGSIb3DQEB | |||
AQUAA4IBDwAwggEKAoIBAQCelMmMDCGBhqn/a3VrNAoKMr1HVLKxGoG7VF/13HZJ | AQUAA4IBDwAwggEKAoIBAQCelMmMDCGBhqn/a3VrNAoKMr1HVLKxGoG7VF/13HZJ | |||
0twObUZlh3Jz+XeD+kNAURhELWTrsgdTkQQfqinqOuRemxTl55+x7nLpe5nmwaBH | 0twObUZlh3Jz+XeD+kNAURhELWTrsgdTkQQfqinqOuRemxTl55+x7nLpe5nmwaBH | |||
XqqDOHubmkbAGanGcm6T/rD9KNk1Z46Uc2p7UYu0fwNO0mo0aqFL2FSyvzZwziNe | XqqDOHubmkbAGanGcm6T/rD9KNk1Z46Uc2p7UYu0fwNO0mo0aqFL2FSyvzZwziNe | |||
g7ELYZ4a3LvGn81JfP/JvM6pgtoMNuee5RV6TWaz7LV304ICj8Bhphy/HFpOA1rb | g7ELYZ4a3LvGn81JfP/JvM6pgtoMNuee5RV6TWaz7LV304ICj8Bhphy/HFpOA1rb | |||
O9gs8CUMgqz+RroAIa8cV8gbF/fPCz9Ofl7Gdmib679JxxFrW4wRJ0nMJgJmsZXq | O9gs8CUMgqz+RroAIa8cV8gbF/fPCz9Ofl7Gdmib679JxxFrW4wRJ0nMJgJmsZXq | |||
skipping to change at page 21, line 33 ¶ | skipping to change at line 947 ¶ | |||
O2TPSfZhF/zPo3pCWQ78/QDb+Zdw4IEiqoBA7F4NPVLg9Y/H8UTx9r/veqe7hPOo | O2TPSfZhF/zPo3pCWQ78/QDb+Zdw4IEiqoBA7F4NPVLg9Y/H8UTx9r/veqe7hPOo | |||
Ok7NpIzSmKTHkc5XfZ60Zn9OLFoKbaQ40a1kXoJdWEu2YROaUlAe9F6/Rog6PHYz | Ok7NpIzSmKTHkc5XfZ60Zn9OLFoKbaQ40a1kXoJdWEu2YROaUlAe9F6/Rog6PHYz | |||
vLE5qscRbu0XQhLkN+z7bg5bAoGBAKDsbDEb/dbqbyaAYpmwhH2sdRSkphg7Niwc | vLE5qscRbu0XQhLkN+z7bg5bAoGBAKDsbDEb/dbqbyaAYpmwhH2sdRSkphg7Niwc | |||
DNm9qWa1J6Zw1+M87I6Q8naRREuU1IAVqqWHVLr/ROBQ6NTJ1Uc5/qFeT2XXUgkf | DNm9qWa1J6Zw1+M87I6Q8naRREuU1IAVqqWHVLr/ROBQ6NTJ1Uc5/qFeT2XXUgkf | |||
taMKv61tuyjZK3sTmznMh0HfzUpWjEhWnCEuB+ZYVdmO52ZGw2A75RdrILL2+9Dc | taMKv61tuyjZK3sTmznMh0HfzUpWjEhWnCEuB+ZYVdmO52ZGw2A75RdrILL2+9Dc | |||
PvDXVubRAoGAdqXeSWoLxuzZXzl8rsaKrQsTYaXnOWaZieU1SL5vVe8nK257UDqZ | PvDXVubRAoGAdqXeSWoLxuzZXzl8rsaKrQsTYaXnOWaZieU1SL5vVe8nK257UDqZ | |||
E3ng2j5XPTUWli+aNGFEJGRoNtcQvO60O/sFZUhu52sqq9mWVYZNh1TB5aP8X+pV | E3ng2j5XPTUWli+aNGFEJGRoNtcQvO60O/sFZUhu52sqq9mWVYZNh1TB5aP8X+pV | |||
iFcZOLUvQEcN6PA+YQK5FU11rAI1M0Gm5RDnVnUl0L2xfCYxb7FzV6Y= | iFcZOLUvQEcN6PA+YQK5FU11rAI1M0Gm5RDnVnUl0L2xfCYxb7FzV6Y= | |||
-----END RSA PRIVATE KEY----- | -----END RSA PRIVATE KEY----- | |||
Signing of "192.0.2.0/24,US,WA,Seattle," (terminated by CR and LF), | Signing of "192.0.2.0/24,US,WA,Seattle," (terminated by CR and LF) | |||
yields the following detached CMS signature. | yields the following detached CMS signature. | |||
# RPKI Signature: 192.0.2.0 - 192.0.2.255 | # RPKI Signature: 192.0.2.0 - 192.0.2.255 | |||
# MIIGjwYJKoZIhvcNAQcCoIIGgDCCBnwCAQMxDTALBglghkgBZQMEAgEwDQYLKoZ | # MIIGjwYJKoZIhvcNAQcCoIIGgDCCBnwCAQMxDTALBglghkgBZQMEAgEwDQYLKoZ | |||
# IhvcNAQkQAS+gggSpMIIEpTCCA42gAwIBAgIUJ605QIPX8rW5m4Zwx3WyuW7hZu | # IhvcNAQkQAS+gggSpMIIEpTCCA42gAwIBAgIUJ605QIPX8rW5m4Zwx3WyuW7hZu | |||
# QwDQYJKoZIhvcNAQELBQAwMzExMC8GA1UEAxMoM0FDRTJDRUY0RkIyMUI3RDExR | # QwDQYJKoZIhvcNAQELBQAwMzExMC8GA1UEAxMoM0FDRTJDRUY0RkIyMUI3RDExR | |||
# TNFMTg0RUZDMUUyOTdCMzc3ODY0MjAeFw0yMTA1MjAxNjA1NDVaFw0yMjAzMTYx | # TNFMTg0RUZDMUUyOTdCMzc3ODY0MjAeFw0yMTA1MjAxNjA1NDVaFw0yMjAzMTYx | |||
# NjA1NDVaMDMxMTAvBgNVBAMTKDkxNDY1MkEzQkQ1MUMxNDQyNjAxOTg4ODlGNUM | # NjA1NDVaMDMxMTAvBgNVBAMTKDkxNDY1MkEzQkQ1MUMxNDQyNjAxOTg4ODlGNUM | |||
# 0NUFCRjA1M0ExODcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCycT | # 0NUFCRjA1M0ExODcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCycT | |||
# QrOb/qB2W3i3Ki8PhA/DEWyii2TgGo9pgCwO9lsIRI6Zb/k+aSiWWP9kSczlcQg | # QrOb/qB2W3i3Ki8PhA/DEWyii2TgGo9pgCwO9lsIRI6Zb/k+aSiWWP9kSczlcQg | |||
skipping to change at page 22, line 44 ¶ | skipping to change at line 989 ¶ | |||
# DQEJEAEvMBwGCSqGSIb3DQEJBTEPFw0yMTA1MjAxNjI4MzlaMC8GCSqGSIb3DQE | # DQEJEAEvMBwGCSqGSIb3DQEJBTEPFw0yMTA1MjAxNjI4MzlaMC8GCSqGSIb3DQE | |||
# JBDEiBCAr4vKeUvHJINsE0YQwUMxoo48qrOU+iPuFbQR8qX3BFjANBgkqhkiG9w | # JBDEiBCAr4vKeUvHJINsE0YQwUMxoo48qrOU+iPuFbQR8qX3BFjANBgkqhkiG9w | |||
# 0BAQEFAASCAQB85HsCBrU3EcVOcf4nC6Z3jrOjT+fVlyTDAObF6GTNWgrxe7jSA | # 0BAQEFAASCAQB85HsCBrU3EcVOcf4nC6Z3jrOjT+fVlyTDAObF6GTNWgrxe7jSA | |||
# Inyf51UzuIGqhVY3sQiiXbdWcVYtPb4118KvyeXh8A/HLp4eeAJntl9D3igt38M | # Inyf51UzuIGqhVY3sQiiXbdWcVYtPb4118KvyeXh8A/HLp4eeAJntl9D3igt38M | |||
# o84q5pf9pTQXx3hbsm51ilpOip/TKVMqzE42s6OPox3M0+6eKH3/vBKnw1s1ayM | # o84q5pf9pTQXx3hbsm51ilpOip/TKVMqzE42s6OPox3M0+6eKH3/vBKnw1s1ayM | |||
# 0MUnPDTBfZL3JJEGPWfIZHEcrypevbqR7Jjsz5vp0qyF2D9v+w+nyhZOPmuePm7 | # 0MUnPDTBfZL3JJEGPWfIZHEcrypevbqR7Jjsz5vp0qyF2D9v+w+nyhZOPmuePm7 | |||
# YqLyOw/E99PVBs9uI+hmBiCz/BK2Z3VRjrrlrUU+49eldSTkZ2sJyhCbbV2Ufgi | # YqLyOw/E99PVBs9uI+hmBiCz/BK2Z3VRjrrlrUU+49eldSTkZ2sJyhCbbV2Ufgi | |||
# S2FOquAgJzjilyN3BDQLV8Rp9cGh0PpVslKH2na | # S2FOquAgJzjilyN3BDQLV8Rp9cGh0PpVslKH2na | |||
# End Signature: 192.0.2.0 - 192.0.2.255 | # End Signature: 192.0.2.0 - 192.0.2.255 | |||
Acknowledgments | ||||
Thanks to Rob Austein for CMS and detached signature clue, George | ||||
Michaelson for the first and substantial external review, and Erik | ||||
Kline who was too shy to agree to coauthorship. Additionally, we | ||||
express our gratitude to early implementors, including Menno | ||||
Schepers; Flavio Luciani; Eric Dugas; Job Snijders, who provided | ||||
running code; and Kevin Pack. Also, thanks to the following | ||||
geolocation providers who are consuming geofeeds with this described | ||||
solution: Jonathan Kosgei (ipdata.co), Ben Dowling (ipinfo.io), and | ||||
Pol Nisenblat (bigdatacloud.com). For an amazing number of helpful | ||||
reviews, we thank Adrian Farrel, Antonio Prado, Francesca Palombini, | ||||
Jean-Michel Combes (INTDIR), John Scudder, Kyle Rose (SECDIR), Martin | ||||
Duke, Murray Kucherawy, Paul Kyzivat (GENART), Rob Wilton, and Roman | ||||
Danyliw. The authors also thank George Michaelson, the awesome | ||||
document shepherd. | ||||
Authors' Addresses | Authors' Addresses | |||
Randy Bush | Randy Bush | |||
IIJ & Arrcus | IIJ & Arrcus | |||
5147 Crystal Springs | 5147 Crystal Springs | |||
Bainbridge Island, Washington 98110 | Bainbridge Island, Washington 98110 | |||
United States of America | United States of America | |||
Email: randy@psg.com | Email: randy@psg.com | |||
Massimo Candela | Massimo Candela | |||
NTT | NTT | |||
Siriusdreef 70-72 | Siriusdreef 70-72 | |||
Hoofddorp 2132 WT | 2132 WT Hoofddorp | |||
Netherlands | Netherlands | |||
Email: massimo@ntt.net | Email: massimo@ntt.net | |||
Warren Kumari | Warren Kumari | |||
1600 Amphitheatre Parkway | 1600 Amphitheatre Parkway | |||
Mountain View, CA 94043 | Mountain View, CA 94043 | |||
US | United States of America | |||
Email: warren@kumari.net | Email: warren@kumari.net | |||
Russ Housley | Russ Housley | |||
Vigil Security, LLC | Vigil Security, LLC | |||
516 Dranesville Road | 516 Dranesville Road | |||
Herndon, VA 20170 | Herndon, VA 20170 | |||
USA | United States of America | |||
Email: housley@vigilsec.com | Email: housley@vigilsec.com | |||
End of changes. 90 change blocks. | ||||
222 lines changed or deleted | 232 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |