| rfc9092xml2.original.xml | rfc9092.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="US-ASCII"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
| <!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-ietf-opsawg-finding-geofeeds-17" ipr="trust20 0902"> | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
| <front> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" submissionType="IETF" category=" std" consensus="true" docName="draft-ietf-opsawg-finding-geofeeds-17" number="90 92" ipr="trust200902" obsoletes="" updates="" xml:lang="en" sortRefs="true" symR efs="true" tocInclude="true" tocDepth="3" version="3"> | |||
| <front> | ||||
| <title abbrev="Finding Geofeeds">Finding and Using Geofeed Data</title> | <title abbrev="Finding Geofeeds">Finding and Using Geofeed Data</title> | |||
| <seriesInfo name="RFC" value="9092"/> | ||||
| <author fullname="Randy Bush" initials="R." surname="Bush"> | <author fullname="Randy Bush" initials="R." surname="Bush"> | |||
| <organization>IIJ & Arrcus</organization> | <organization>IIJ & Arrcus</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>5147 Crystal Springs</street> | <street>5147 Crystal Springs</street> | |||
| <city>Bainbridge Island</city> | <city>Bainbridge Island</city> | |||
| <region>Washington</region> | <region>Washington</region> | |||
| <code>98110</code> | <code>98110</code> | |||
| <country>United States of America</country> | <country>United States of America</country> | |||
| </postal> | </postal> | |||
| skipping to change at line 43 ¶ | skipping to change at line 35 ¶ | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>Siriusdreef 70-72</street> | <street>Siriusdreef 70-72</street> | |||
| <city>Hoofddorp</city> | <city>Hoofddorp</city> | |||
| <code>2132 WT</code> | <code>2132 WT</code> | |||
| <country>Netherlands</country> | <country>Netherlands</country> | |||
| </postal> | </postal> | |||
| <email>massimo@ntt.net</email> | <email>massimo@ntt.net</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Warren Kumari" initials="W." surname="Kumari"> | <author fullname="Warren Kumari" initials="W." surname="Kumari"> | |||
| <organization>Google</organization> | <organization>Google</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>1600 Amphitheatre Parkway</street> | <street>1600 Amphitheatre Parkway</street> | |||
| <city>Mountain View, CA</city> | <city>Mountain View</city> | |||
| <region>CA</region> | ||||
| <code>94043</code> | <code>94043</code> | |||
| <country>US</country> | <country>United States of America</country> | |||
| </postal> | </postal> | |||
| <email>warren@kumari.net</email> | <email>warren@kumari.net</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Russ Housley" initials="R" surname="Housley"> | <author fullname="Russ Housley" initials="R" surname="Housley"> | |||
| <organization abbrev="Vigil Security">Vigil Security, LLC</organization> | <organization abbrev="Vigil Security">Vigil Security, LLC</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>516 Dranesville Road</street> | <street>516 Dranesville Road</street> | |||
| <city>Herndon</city> | <city>Herndon</city> | |||
| <region>VA</region> | <region>VA</region> | |||
| <code>20170</code> | <code>20170</code> | |||
| <country>USA</country> | <country>United States of America</country> | |||
| </postal> | </postal> | |||
| <email>housley@vigilsec.com</email> | <email>housley@vigilsec.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <date year="2021" month="July" /> | ||||
| <date /> | <keyword>geolocation</keyword> | |||
| <keyword>geo-location</keyword> | ||||
| <abstract> | <keyword>RPSL</keyword> | |||
| <abstract> | ||||
| <t> | <t> | |||
| 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 | |||
| geofeed data CSV files, and describes an optional scheme to use | data comma-separated values (CSV) files and describes an optional scheme | |||
| the Routing Public Key Infrastructure to authenticate the | that uses the Routing Public Key Infrastructure to authenticate the | |||
| geofeed data CSV files. | geofeed data CSV files. | |||
| </t> | </t> | |||
| </abstract> | </abstract> | |||
| </front> | </front> | |||
| <middle> | <middle> | |||
| <section anchor="intro" numbered="true" toc="default"> | ||||
| <section title="Introduction" anchor="intro"> | <name>Introduction</name> | |||
| <t> | <t> | |||
| 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 | customize those services based on the geographic location of the | |||
| user of the service. This is often done using the source IP | user of the service. This is often done using the source IP | |||
| address used to contact the service. Also, infrastructure and | address used to contact the service. Also, infrastructure and | |||
| other services might wish to publish the locale of their | other services might wish to publish the locale of their | |||
| services. <xref target="RFC8805"/> defines geofeed, a syntax to | services. <xref target="RFC8805" format="default"/> defines geofeed, a | |||
| associate geographic locales with IP addresses. But it does not | syntax to | |||
| associate geographic locales with IP addresses, but it does not | ||||
| specify how to find the relevant geofeed data given an IP | specify how to find the relevant geofeed data given an IP | |||
| address. | address. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This document specifies how to augment the Routing Policy | This document specifies how to augment the Routing Policy | |||
| Specification Language (RPSL) <xref target="RFC2725"/> inetnum: | Specification Language (RPSL) <xref target="RFC2725" format="default"/> | |||
| class to refer specifically to geofeed data CSV files, and how | inetnum: | |||
| class to refer specifically to geofeed data CSV files and how | ||||
| to prudently use them. In all places inetnum: is used, | to prudently use them. In all places inetnum: is used, | |||
| inet6num: should also be assumed <xref target="RFC4012"/>. | inet6num: should also be assumed <xref target="RFC4012" format="default" />. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The reader may find <xref target="INETNUM"/> and <xref | The reader may find <xref target="INETNUM" format="default"/> and <xref | |||
| target="INET6NUM"/> informative, and certainly more verbose, | target="INET6NUM" format="default"/> informative, and certainly more verbose, | |||
| descriptions of the inetnum: database classes. | descriptions of the inetnum: database classes. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| 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. | |||
| </t> | </t> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Requirements Language"> | <name>Requirements Language</name> | |||
| <t> | <t> | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
| NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
| "MAY", and "OPTIONAL" in this document are to be interpreted as | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | |||
| described in BCP 14 <xref format="default" pageno="false" | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| target="RFC2119"/> <xref format="default" pageno="false" | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are | |||
| target="RFC8174"/> when, and only when, they appear in all | to be interpreted as described in BCP 14 <xref target="RFC2119"/> | |||
| capitals, as shown here. | <xref target="RFC8174"/> when, and only when, they appear in all capitals, | |||
| as shown here. | ||||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="gf" numbered="true" toc="default"> | ||||
| <section title="Geofeed Files" anchor="gf"> | <name>Geofeed Files</name> | |||
| <t> | <t> | |||
| Geofeed files are described in <xref target="RFC8805"/>. They | Geofeed files are described in <xref target="RFC8805" format="default"/> | |||
| provide a facility for an IP address resource 'owner' to | . They | |||
| provide a facility for an IP address resource "owner" to | ||||
| associate those IP addresses to geographic locales. | associate those IP addresses to geographic locales. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Content providers and other parties who wish to locate an IP | Content providers and other parties who wish to locate an IP address | |||
| address to a geographic locale need to find the relevant geofeed | to a geographic locale need to find the relevant geofeed data. In | |||
| data. In <xref target="inetnum"/>, this document specifies how | <xref target="inetnum" format="default"/>, this document specifies how | |||
| to find the relevant <xref target="RFC8805"/> geofeed file given | to find the relevant geofeed <xref target="RFC8805" format="default"/> | |||
| an IP address. | file given an IP address. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Geofeed data for large providers with significant horizontal | Geofeed data for large providers with significant horizontal | |||
| scale and high granularity can be quite large. The size of a | scale and high granularity can be quite large. The size of a | |||
| file can be even larger if an unsigned geofeed file combines | file can be even larger if an unsigned geofeed file combines | |||
| data for many prefixes, dual IPv4/IPv6 spaces are represented, | data for many prefixes, if dual IPv4/IPv6 spaces are represented, | |||
| etc. | etc. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Geofeed data do have privacy considerations, see <xref | Geofeed data do have privacy considerations (see <xref | |||
| target="privacy"/>; and this process makes bulk access to those | target="privacy" format="default"/>); this process makes bulk access | |||
| data easier. | to those data easier. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| 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. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="inetnum" numbered="true" toc="default"> | ||||
| <section title="inetnum: Class" anchor="inetnum"> | <name>inetnum: Class</name> | |||
| <t> | <t> | |||
| The original RPSL specifications starting with <xref | The original RPSL specifications starting with <xref target="RIPE81" for | |||
| target="RIPE81"/>, <xref target="RIPE181"/>, and a trail of | mat="default"/>, <xref target="RIPE181" format="default"/>, and a trail of | |||
| subsequent documents were done by the RIPE community. The IETF | subsequent documents were written by the RIPE community. The IETF | |||
| standardized RPSL in <xref target="RFC2622"/> and <xref | standardized RPSL in <xref target="RFC2622" format="default"/> and <xref | |||
| target="RFC4012"/>. Since then, it has been modified and | target="RFC4012" format="default"/>. Since then, it has been modified and | |||
| extensively enhanced in the Regional Internet Registry (RIR) | extensively enhanced in the Regional Internet Registry (RIR) | |||
| community, mostly by RIPE, <xref target="RIPE-DB"/>. Currently, | community, mostly by RIPE <xref target="RIPE-DB" format="default"/>. Cu rrently, | |||
| change control effectively lies in the operator community. | change control effectively lies in the operator community. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The Routing Policy Specification Language (RPSL), and <xref | The RPSL, and <xref target="RFC2725" format="default"/> and <xref target | |||
| target="RFC2725"/> and <xref target="RFC4012"/> used by the | ="RFC4012" format="default"/> used by the | |||
| Regional Internet Registries (RIRs) specifies the inetnum: | Regional Internet Registries (RIRs), specify the inetnum: | |||
| database class. Each of these objects describes an IP address | database class. Each of these objects describes an IP address | |||
| range and its attributes. The inetnum: objects form a hierarchy | range and its attributes. The inetnum: objects form a hierarchy | |||
| ordered on the address space. | ordered on the address space. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| 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 | defines the syntax of a Geofeed remarks: attribute, which contains an | |||
| contains an HTTPS URL of a geofeed file. The format of the | HTTPS URL of a geofeed file. The format of the inetnum: geofeed | |||
| inetnum: geofeed remarks: attribute MUST be as in this example, | remarks: attribute <bcp14>MUST</bcp14> be as in this example, | |||
| "remarks: Geofeed ", where the token "Geofeed" MUST be | "remarks: Geofeed ", where the token "Geofeed " <bcp14>MUST</bcp14> be | |||
| case-sensitive, followed by a URL which will vary, but MUST | case sensitive, followed by a URL that will vary, but it | |||
| refer only to a single <xref target="RFC8805"/> geofeed file. | <bcp14>MUST</bcp14> refer only to a single geofeed <xref | |||
| target="RFC8805" format="default"/> file. | ||||
| </t> | </t> | |||
| <figure> | <sourcecode type="rpsl"> <![CDATA[ | |||
| <artwork> | ||||
| 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 | |||
| </artwork> | ]]></sourcecode> | |||
| </figure> | ||||
| <t> | <t> | |||
| While we leave global agreement of RPSL modification to the | While we leave global agreement of RPSL modification to the relevant | |||
| relevant parties, we specify that a proper geofeed: attribute in | parties, we specify that a proper geofeed: attribute in the inetnum: | |||
| the inetnum: class MUST be "geofeed: ", and MUST be followed by | class <bcp14>MUST</bcp14> be "geofeed:" and <bcp14>MUST</bcp14> be | |||
| a single URL which will vary, but MUST refer only to a single | followed by a single URL that will vary, but it <bcp14>MUST</bcp14> | |||
| <xref target="RFC8805"/> geofeed file. | refer only to a single geofeed <xref target="RFC8805" | |||
| format="default"/> file. | ||||
| </t> | </t> | |||
| <sourcecode type="rpsl"><![CDATA[ | ||||
| <figure> | ||||
| <artwork> | ||||
| 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 | |||
| </artwork> | ]]></sourcecode> | |||
| </figure> | ||||
| <t> | <t> | |||
| Registries MAY, for the interim, provide a mix of the remarks: | Registries <bcp14>MAY</bcp14>, for the interim, provide a mix of the rem arks: | |||
| attribute form and the geofeed: attribute form. | attribute form and the geofeed: attribute form. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The URL uses HTTPS, so the WebPKI provides authentication, | The URL uses HTTPS, so the WebPKI provides authentication, integrity, | |||
| integrity, and confidentiality for the fetched geofeed file. | and confidentiality for the fetched geofeed file. However, the WebPKI | |||
| However, the WebPKI can not provide authentication of IP address | can not provide authentication of IP address space assignment. In | |||
| space assignment. In contrast, the Resource Public Key | contrast, the RPKI (see <xref target="RFC6481" format="default"/>) can | |||
| Infrastructure (RPKI, see <xref target="RFC6481"/>) can be used | be used to authenticate IP space assignment; see optional | |||
| to authenticate IP space assignment; see optional authentication | authentication in <xref target="auth" format="default"/>. | |||
| in <xref target="auth"/>. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| Until all producers of inetnum:s, i.e. the RIRs, state that they | Until all producers of inetnum: objects, i.e., the RIRs, state that they | |||
| have migrated to supporting a geofeed: attribute, consumers | have migrated to supporting a geofeed: attribute, consumers | |||
| looking at inetnum:s to find geofeed URLs MUST be able to | looking at inetnum: objects to find geofeed URLs <bcp14>MUST</bcp14> be | |||
| consume both the remarks: and geofeed: forms. The migration not | able to | |||
| only implies that the RIRs support the geofeed: attribute, but | consume both the remarks: and geofeed: forms. | |||
| that all registrants have migrated any inetnum:s from remarks: | ||||
| use to geofeed:s. | The migration not only implies that the RIRs support the geofeed: | |||
| </t> | attribute, but that all registrants have migrated any inetnum: objects | |||
| from remarks: to geofeed: attributes. | ||||
| </t> | ||||
| <t> | <t> | |||
| Any particular inetnum: object MUST have at most, one geofeed | Any particular inetnum: object <bcp14>MUST</bcp14> have, at most, one ge ofeed | |||
| reference, whether a remarks: or a proper geofeed: attribute | reference, whether a remarks: or a proper geofeed: attribute | |||
| when it is implemented. If there is more than one, all are | when it is implemented. If there is more than one, all are | |||
| ignored. | ignored. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| 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 <xref target="auth"/>. | procedure in <xref target="auth" format="default"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| When geofeed references are provided by multiple inetnum: | When geofeed references are provided by multiple inetnum: | |||
| objects which have identical address ranges, then the geofeed | objects that have identical address ranges, then the geofeed | |||
| reference on the inetnum: with the most recent last-modified: | reference on the inetnum: with the most recent last-modified: | |||
| attribute SHOULD be preferred. | attribute <bcp14>SHOULD</bcp14> be preferred. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| As inetnum: objects form a hierarchy, Geofeed references SHOULD | As inetnum: objects form a hierarchy, geofeed references <bcp14>SHOULD</ bcp14> | |||
| be at the lowest applicable inetnum: object covering the | be at the lowest applicable inetnum: object covering the | |||
| relevant address ranges in the referenced geofeed file. When | relevant address ranges in the referenced geofeed file. When | |||
| fetching, the most specific inetnum: object with a geofeed | fetching, the most specific inetnum: object with a geofeed | |||
| reference MUST be used. | reference <bcp14>MUST</bcp14> be used. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| It is significant that geofeed data may have finer granularity | It is significant that geofeed data may have finer granularity | |||
| than the inetnum: which refers to them. For example an INETNUM | than the inetnum: that refers to them. For example, an INETNUM | |||
| object for an address range P could refer to a geofeed file in | object for an address range P could refer to a geofeed file in | |||
| which P has been sub-divided into one or more longer prefixes. | which P has been subdivided into one or more longer prefixes. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Currently, the registry data published by ARIN is not the same | Currently, the registry data published by ARIN are not the same RPSL as | |||
| RPSL as that of the other registries (see <xref | that of the other registries (see <xref target="RFC7485" | |||
| target="RFC7485"/> for a survey of the whois Tower of Babel); | format="default"/> for a survey of the WHOIS Tower of Babel); | |||
| therefore, when fetching from ARIN via FTP <xref | therefore, when fetching from ARIN via FTP <xref target="RFC0959" | |||
| target="RFC0959"/>, whois <xref target="RFC3912"/>, RDAP <xref | format="default"/>, WHOIS <xref target="RFC3912" format="default"/>, | |||
| target="RFC7482"/>, or whatever, the "NetRange" attribute/key | the Registration Data Access Protocol (RDAP) <xref target="RFC9082" | |||
| MUST be treated as "inetnum" and the "Comment" attribute MUST be | format="default"/>, etc., the "NetRange" attribute/key | |||
| treated as "remarks". | <bcp14>MUST</bcp14> be treated as "inetnum", and the "Comment" | |||
| attribute <bcp14>MUST</bcp14> be treated as "remarks". | ||||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="auth" numbered="true" toc="default"> | ||||
| <section title="Authenticating Geofeed Data" anchor="auth"> | <name>Authenticating Geofeed Data</name> | |||
| <t> | <t> | |||
| The question arises whether a particular <xref | The question arises whether a particular geofeed <xref | |||
| target="RFC8805"/> geofeed data set is valid, i.e. is authorized | target="RFC8805" format="default"/> data set is valid, i.e., is | |||
| by the 'owner' of the IP address space and is authoritative in | authorized by the "owner" of the IP address space and is authoritative | |||
| some sense. The inetnum: which points to the <xref | in some sense. The inetnum: that points to the geofeed <xref | |||
| target="RFC8805"/> geofeed file provides some assurance. | target="RFC8805" format="default"/> file provides some assurance. | |||
| Unfortunately, the RPSL in many repositories is weakly | Unfortunately, the RPSL in many repositories is weakly authenticated | |||
| authenticated at best. An approach where RPSL was signed a la | at best. An approach where RPSL was signed per <xref target="RFC7909" | |||
| <xref target="RFC7909"/> would be good, except it would have to | format="default"/> would be good, except it would have to be deployed | |||
| be deployed by all RPSL registries, and there is a fair number | by all RPSL registries, and there is a fair number of them. | |||
| of them. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| A single optional authenticator MAY be appended to a <xref | A single optional authenticator <bcp14>MAY</bcp14> be appended to a | |||
| target="RFC8805"/> geofeed file. It is a digest of the main | geofeed <xref target="RFC8805" format="default"/> file. It is a | |||
| body of the file signed by the private key of the relevant RPKI | digest of the main body of the file signed by the private key of the | |||
| certificate for a covering address range. One needs a format | relevant RPKI certificate for a covering address range. One needs a | |||
| that bundles the relevant RPKI certificate with the signature of | format that bundles the relevant RPKI certificate with the signature | |||
| the geofeed text. | of the geofeed text. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The canonicalization procedure converts the data from its | The canonicalization procedure converts the data from their internal | |||
| internal character representation to the UTF-8 <xref | character representation to the UTF-8 <xref target="RFC3629" | |||
| target="RFC3629"/> character encoding, and the <CRLF> | format="default"/> character encoding, and the <CRLF> sequence | |||
| sequence MUST be used to denote the end of a line of text. A | <bcp14>MUST</bcp14> be used to denote the end of a line of text. A | |||
| blank line is represented solely by the <CRLF> sequence. | blank line is represented solely by the <CRLF> sequence. For | |||
| For robustness, any non-printable characters MUST NOT be changed | robustness, any non-printable characters <bcp14>MUST NOT</bcp14> be | |||
| by canonicalization. Trailing blank lines MUST NOT appear at | changed by canonicalization. Trailing blank lines <bcp14>MUST | |||
| the end of the file. That is, the file must not end with | NOT</bcp14> appear at the end of the file. That is, the file must not | |||
| multiple consecutive <CRLF> sequences. Any end-of-file | end with multiple consecutive <CRLF> sequences. Any end-of-file | |||
| marker used by an operating system is not considered to be part | marker used by an operating system is not considered to be part of the | |||
| of the file content. When present, such end-of-file markers | file content. When present, such end-of-file markers <bcp14>MUST | |||
| MUST NOT be processed by the digital signature algorithm. | NOT</bcp14> be processed by the digital signature algorithm. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Should the authenticator be syntactically incorrect per the | Should the authenticator be syntactically incorrect per the | |||
| above, the authenticator is invalid. | above, the authenticator is invalid. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Borrowing detached signatures from <xref target="RFC5485"/>, | Borrowing detached signatures from <xref target="RFC5485" | |||
| after file canonicalization, the Cryptographic Message Syntax | format="default"/>, after file canonicalization, the Cryptographic | |||
| (CMS) <xref target="RFC5652"/> would be used to create a | Message Syntax (CMS) <xref target="RFC5652" format="default"/> would | |||
| detached DER encoded signature which is then padded BASE64 | be used to create a detached DER-encoded signature that is then padded | |||
| encoded (as per <xref target="RFC4648"/> Section 4), and line | BASE64 encoded (as per <xref target="RFC4648" sectionFormat="of" | |||
| wrapped to 72 or fewer characters. The same digest algorithm | section="4" format="default"/>) and line wrapped to 72 or fewer | |||
| MUST be used for calculating the message digest on content being | characters. The same digest algorithm <bcp14>MUST</bcp14> be used for | |||
| signed, which is the geofeed file, and calculating the message | calculating the message digest on content being signed, which is the | |||
| digest on the SignerInfo SignedAttributes <xref | geofeed file, and for calculating the message digest on the SignerInfo | |||
| target="RFC8933"/>. The message digest algorithm identifier | SignedAttributes <xref target="RFC8933" format="default"/>. The | |||
| MUST appear in both the SigenedData DigestAlgorithmIdentifiers | message digest algorithm identifier <bcp14>MUST</bcp14> appear in both | |||
| and the SignerInfo DigestAlgorithmIdentifier <xref | the SignedData DigestAlgorithmIdentifiers and the SignerInfo | |||
| target="RFC5652"/>. | DigestAlgorithmIdentifier <xref target="RFC5652" format="default"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The address range of the signing certificate MUST cover all | The address range of the signing certificate <bcp14>MUST</bcp14> cover a ll | |||
| prefixes in the geofeed file it signs. | prefixes in the geofeed file it signs. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| 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 | identical to or a subset of A. "Address range" is used here because | |||
| because inetnum: objects and RPKI certificates need not align on | inetnum: objects and RPKI certificates need not align on Classless | |||
| CIDR prefix boundaries, while those of the CSV lines in a | Inter-Domain Routing (CIDR) <xref target="RFC4632"/> prefix | |||
| geofeed file do. | boundaries, while those of the CSV lines in a geofeed file do. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| As the signer specifies the covered RPKI resources relevant to | As the signer specifies the covered RPKI resources relevant to the | |||
| the signature, the RPKI certificate covering the inetnum: | signature, the RPKI certificate covering the inetnum: object's address | |||
| object's address range is included in the <xref | range is included in the <xref target="RFC5652" format="default"/> CMS | |||
| target="RFC5652"/> CMS SignedData certificates field. | SignedData certificates field. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| 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 | getting the department that controls the private key (which might be | |||
| might be trapped in a Hardware Security Module, HSM) to sign the | trapped in a Hardware Security Module (HSM)) to sign the CMS blob is | |||
| CMS blob is left as an exercise for the implementor. On the | left as an exercise for the implementor. On the other hand, verifying | |||
| other hand, verifying the signature requires no complexity; the | the signature requires no complexity; the certificate, which can be | |||
| certificate, which can be validated in the public RPKI, has the | validated in the public RPKI, has the needed public key. | |||
| needed public key. | ||||
| The trust anchors for the RIRs are expected to already be | The trust anchors for the RIRs are expected to already be | |||
| available to the party performing signature validation. | available to the party performing signature validation. | |||
| Validation of the CMS signature on the geofeed file | Validation of the CMS signature on the geofeed file | |||
| involves:<list style="numbers"> | involves:</t> | |||
| <ol spacing="normal" type="1"><li> | ||||
| <t> Obtaining the signer's certificate from the CMS SignedData | ||||
| CertificateSet <xref target="RFC5652" format="default"/>. The certificate | ||||
| SubjectKeyIdentifier extension <xref target="RFC5280" format="default"/> | ||||
| <bcp14>MUST</bcp14> match the SubjectKeyIdentifier in the CMS SignerInfo | ||||
| SignerIdentifier <xref target="RFC5652" format="default"/>. If the key | ||||
| identifiers do not match, then validation <bcp14>MUST</bcp14> fail.</t> | ||||
| <t> | ||||
| Validation of the signer's certificate <bcp14>MUST</bcp14> ensure | ||||
| that it is part of the current <xref target="RFC6486" | ||||
| format="default"/> manifest and that the resources are covered by | ||||
| the RPKI certificate. | ||||
| </t> | ||||
| <t> | </li> | |||
| Obtain the signer's certificate from the CMS SignedData | ||||
| CertificateSet <xref target="RFC5652"/>. The certificate | ||||
| SubjectKeyIdentifier extension <xref target="RFC5280"/> MUST | ||||
| match the SubjectKeyIdentifier in the CMS SignerInfo | ||||
| SignerIdentifier <xref target="RFC5652"/>. If the key | ||||
| identifiers do not match, then validation MUST fail. | ||||
| </t> | ||||
| <t> | <li> | |||
| Construct the certification path for the signer's certificate. | 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 | available in the RPKI repository. The certification path <bcp14>MUST< | |||
| be valid according to the validation algorithm in <xref | /bcp14> | |||
| target="RFC5280"/> and the additional checks specified in | be valid according to the validation algorithm in <xref target="RFC528 | |||
| <xref target="RFC3779"/> associated with the IP Address | 0" format="default"/> and the additional checks specified in | |||
| <xref target="RFC3779" format="default"/> associated with the IP Addre | ||||
| ss | ||||
| Delegation certificate extension and the Autonomous System | Delegation certificate extension and the Autonomous System | |||
| Identifier Delegation certificate extension. If certification | Identifier Delegation certificate extension. If certification | |||
| path validation is unsuccessful, then validation MUST fail. | path validation is unsuccessful, then validation <bcp14>MUST</bcp14> f | |||
| </t> | ail. | |||
| </li> | ||||
| <t> | <li> | |||
| Validate the CMS SignedData as specified in <xref | Validating the CMS SignedData as specified in <xref target="RFC5652" f | |||
| target="RFC5652"/> using the public key from the validated | ormat="default"/> using the public key from the validated | |||
| signer's certificate. If the signature validation is | signer's certificate. If the signature validation is | |||
| unsuccessful, then validation MUST fail. | unsuccessful, then validation <bcp14>MUST</bcp14> fail. | |||
| </t> | </li> | |||
| <li> | ||||
| <t> | Verifying that the IP Address Delegation certificate extension | |||
| Verify that the IP Address Delegation certificate extension | <xref target="RFC3779" format="default"/> covers all of the address ra | |||
| <xref target="RFC3779"/> covers all of the address ranges of | nges of | |||
| the geofeed file. If all of the address ranges are not | the geofeed file. If all of the address ranges are not | |||
| covered, then validation MUST fail. | covered, then validation <bcp14>MUST</bcp14> fail. | |||
| </t> | </li> | |||
| <t> | ||||
| Validation of the signer's certificate MUST ensure that it is | ||||
| part of the current <xref target="RFC6486"/> manifest and that | ||||
| the resources are covered by the RPKI certificate. | ||||
| </t> | ||||
| </list></t> | ||||
| </ol> | ||||
| <t> | <t> | |||
| All of these steps MUST be successful to consider the geofeed | All of these steps <bcp14>MUST</bcp14> be successful to consider the geo feed | |||
| file signature as valid. | file signature as valid. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| As the signer specifies the covered RPKI resources relevant to | As the signer specifies the covered RPKI resources relevant to the | |||
| the signature, the RPKI certificate covering the inetnum: | signature, the RPKI certificate covering the inetnum: object's address | |||
| object's address range is included in the <xref | range is included in the CMS SignedData certificates field <xref | |||
| target="RFC5652"/> CMS SignedData certificates field. | target="RFC5652" format="default"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| 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) | getting the department with the Hardware Security Module (HSM) to sign | |||
| to sign the CMS blob is left as an exercise for the implementor. | the CMS blob is left as an exercise for the implementor. On the other | |||
| On the other hand, verifying the signature requires no | hand, verifying the signature requires no complexity; the certificate, | |||
| complexity; the certificate, which can be validated in the | which can be validated in the public RPKI, has the needed public key. | |||
| public RPKI, has the needed public key. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| The appendix MUST be 'hidden' as a series of "#" comments at the | The appendix <bcp14>MUST</bcp14> be hidden as a series of "#" comments a t the | |||
| end of the geofeed file. The following is a cryptographically | end of the geofeed file. The following is a cryptographically | |||
| incorrect, albeit simple example. A correct and full example is | incorrect, albeit simple, example. A correct and full example is | |||
| in <xref target="example"/>. | in <xref target="example" format="default"/>. | |||
| </t> | </t> | |||
| <sourcecode type=""><![CDATA[ | ||||
| <figure> | ||||
| <artwork> | ||||
| # 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 | |||
| </artwork> | ]]></sourcecode> | |||
| </figure> | ||||
| <t> | <t> | |||
| The signature does not cover the signature lines. | The signature does not cover the signature lines. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The bracketing "# RPKI Signature:" and "# End Signature:" MUST | The bracketing "# RPKI Signature:" and "# End Signature:" <bcp14>MUST</b cp14> | |||
| be present following the model as shown. Their IP address range | be present following the model as shown. Their IP address range | |||
| MUST match that of the inetnum: URL followed to the file. | <bcp14>MUST</bcp14> match that of the inetnum: URL followed to the file. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| <xref target="I-D.spaghetti-sidrops-rpki-rsc"/> describes and | <xref target="I-D.ietf-sidrops-rpki-rsc" format="default"/> describes | |||
| provides code for a Cryptographic Message Syntax (CMS) profile | and provides code for a CMS profile for | |||
| for a general purpose listing of checksums (a 'checklist'), for | a general purpose listing of checksums (a "checklist") for use with | |||
| use with the Resource Public Key Infrastructure (RPKI). It | the Resource Public Key Infrastructure (RPKI). It provides usable, | |||
| provides usable, albeit complex, code to sign geofeed files. | albeit complex, code to sign geofeed files. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| <xref target="I-D.ietf-sidrops-rpki-rta"/> describes a | <xref target="I-D.ietf-sidrops-rpki-rta" format="default"/> describes | |||
| Cryptographic Message Syntax (CMS) profile for a general purpose | a CMS profile for a general purpose Resource Tagged Attestation (RTA) | |||
| Resource Tagged Attestation (RTA) based on the RPKI. While this | based on the RPKI. While this is expected to become applicable in the | |||
| is expected to become applicable in the long run, for the | long run, for the purposes of this document, a self-signed root trust | |||
| purposes of this document, a self-signed root trust anchor is | anchor is used. | |||
| used. | ||||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="ops" numbered="true" toc="default"> | ||||
| <section title="Operational Considerations" anchor="ops"> | <name>Operational Considerations</name> | |||
| <t> | <t> | |||
| To create the needed inetnum: objects, an operator wishing to | To create the needed inetnum: objects, an operator wishing to register | |||
| register the location of their geofeed file needs to coordinate | the location of their geofeed file needs to coordinate with their | |||
| with their RIR/NIR and/or any provider LIR which has assigned | Regional Internet Registry (RIR) or National Internet Registry (NIR) | |||
| address ranges to them. RIRs/NIRs provide means for assignees | and/or any provider Local Internet Registry (LIR) that has assigned | |||
| to create and maintain inetnum: objects. They also provide | address ranges to them. RIRs/NIRs provide means for assignees to | |||
| means of [sub-]assigning IP address resources and allowing the | create and maintain inetnum: objects. They also provide means of | |||
| assignee to create whois data, including inetnum: objects, and | assigning or sub-assigning IP address resources and allowing the | |||
| thereby referring to geofeed files. | assignee to create WHOIS data, including inetnum: objects, thereby | |||
| referring to geofeed files. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| The geofeed files MUST be published via and fetched using | The geofeed files <bcp14>MUST</bcp14> be published via and fetched using | |||
| HTTPS <xref target="RFC2818"/>. | HTTPS <xref target="RFC2818" format="default"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| When using data from a geofeed file, one MUST ignore data | When using data from a geofeed file, one <bcp14>MUST</bcp14> ignore data | |||
| outside the referring inetnum: object's inetnum: attribute | outside the referring inetnum: object's inetnum: attribute | |||
| address range. | address range. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If and only if the geofeed file is not signed per <xref | If and only if the geofeed file is not signed per <xref target="auth" | |||
| target="auth"/>, then multiple inetnum: objects MAY refer to the | format="default"/>, then multiple inetnum: objects <bcp14>MAY</bcp14> | |||
| same geofeed file, and the consumer MUST use only lines in the | refer to the same geofeed file, and the consumer <bcp14>MUST</bcp14> | |||
| geofeed file where the prefix is covered by the address range of | use only lines in the geofeed file where the prefix is covered by the | |||
| the inetnum: object's URL it has followed. | address range of the inetnum: object's URL it has followed. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If the geofeed file is signed, and the signer's certificate | If the geofeed file is signed, and the signer's certificate | |||
| changes, the signature in the geofeed file MUST be updated. | changes, the signature in the geofeed file <bcp14>MUST</bcp14> be update d. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| It is good key hygiene to use a given key for only one purpose. | 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 | To dedicate a signing private key for signing a geofeed file, an | |||
| RPKI CA may issue a subordinate certificate exclusively for | RPKI Certification Authority (CA) may issue a subordinate certificate ex | |||
| the purpose as shown in <xref target="example"/>. | clusively for | |||
| the purpose shown in <xref target="example" format="default"/>. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| To minimize the load on RIR whois <xref target="RFC3912"/> | To minimize the load on RIR WHOIS <xref target="RFC3912" | |||
| services, use of the RIR's FTP <xref target="RFC0959"/> services | format="default"/> services, use of the RIR's FTP <xref | |||
| SHOULD be used for large scale access to gather geofeed URLs. | target="RFC0959" format="default"/> services <bcp14>SHOULD</bcp14> be | |||
| This also provides bulk access instead of fetching by brute | used for large-scale access to gather geofeed URLs. This also | |||
| force search through the IP space. | provides bulk access instead of fetching by brute-force search | |||
| through the IP space. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| Currently, geolocation providers have bulk whois data access at | Currently, geolocation providers have bulk WHOIS data access at | |||
| all the RIRs. An anonymized version of such data is openly | all the RIRs. An anonymized version of such data is openly | |||
| available for all RIRs except ARIN, which requires an | available for all RIRs except ARIN, which requires an | |||
| authorization. However, for users without such authorization, | authorization. However, for users without such authorization, | |||
| the same result can be achieved with extra RDAP effort. There is | the same result can be achieved with extra RDAP effort. There is | |||
| open source code to pass over such data across all RIRs, collect | open-source code to pass over such data across all RIRs, collect | |||
| all geofeed references, and process them <xref | all geofeed references, and process them <xref target="GEOFEED-FINDER" f | |||
| target="geofeed-finder"/>. | ormat="default"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| To prevent undue load on RPSL and geofeed servers, an entity | To prevent undue load on RPSL and geofeed servers, entity-fetching | |||
| fetching geofeed data using these mechanisms MUST NOT do | geofeed data using these mechanisms <bcp14>MUST NOT</bcp14> do | |||
| frequent real-time look-ups. <xref target="RFC8805"/> Section | frequent real-time lookups. <xref target="RFC8805" sectionFormat="of" | |||
| 3.4 suggests use of the <xref target="RFC7234"/> HTTP Expires | section="3.4" format="default"/> suggests use of the HTTP Expires | |||
| Caching Header to signal when geofeed data should be | header <xref target="RFC7234" format="default"/> to signal when | |||
| refetched. As the data change very infrequently, in the absence | geofeed data should be refetched. As the data change very | |||
| of such an HTTP Header signal, collectors SHOULD NOT fetch more | infrequently, in the absence of such an HTTP Header signal, collectors | |||
| frequently than weekly. It would be polite not to fetch at | <bcp14>SHOULD NOT</bcp14> fetch more frequently than weekly. It would | |||
| magic times such as midnight UTC, the first of the month, etc., | be polite not to fetch at magic times such as midnight UTC, the first | |||
| because too many others are likely to do the same. | of the month, etc., because too many others are likely to do the same. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="privacy" numbered="true" toc="default"> | ||||
| <section title="Privacy Considerations" anchor="privacy"> | <name>Privacy Considerations</name> | |||
| <t> | <t> | |||
| <xref target="RFC8805"/> geofeed data may reveal the approximate | <xref target="RFC8805" format="default"/> geofeed data may reveal the | |||
| location of an IP address, which might in turn reveal the | approximate location of an IP address, which might in turn reveal the | |||
| approximate location of an individual user. Unfortunately, | approximate location of an individual user. Unfortunately, <xref | |||
| <xref target="RFC8805"/> provides no privacy guidance on | target="RFC8805" format="default"/> provides no privacy guidance on | |||
| avoiding or ameliorating possible damage due to this exposure of | avoiding or ameliorating possible damage due to this exposure of the | |||
| the user. In publishing pointers to geofeed files as described | user. In publishing pointers to geofeed files as described in this | |||
| in this document, the operator should be aware of this exposure | document, the operator should be aware of this exposure in geofeed | |||
| in geofeed data and be cautious. All the privacy considerations | data and be cautious. All the privacy considerations of <xref | |||
| of <xref target="RFC8805"/> Section 4 apply to this document. | target="RFC8805" sectionFormat="of" section="4" format="default"/> | |||
| apply to this document. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| Where <xref target="RFC8805"/> provided the ability to publish | Where <xref target="RFC8805" format="default"/> provided the ability | |||
| location data, this document makes bulk access to those data | to publish location data, this document makes bulk access to those data | |||
| readily available. This is a goal, not an accident. | readily available. This is a goal, not an accident. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="seccons" numbered="true" toc="default"> | ||||
| <section title="Security Considerations" anchor="seccons"> | <name>Security Considerations</name> | |||
| <t> | <t> | |||
| It is generally prudent for a consumer of geofeed data to also | It is generally prudent for a consumer of geofeed data to also | |||
| use other sources to cross-validate the data. All the Security | use other sources to cross validate the data. All the security | |||
| Considerations of <xref target="RFC8805"/> apply here as well. | considerations of <xref target="RFC8805" format="default"/> apply here a | |||
| s well. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| As mentioned in <xref target="auth"/>, many RPSL repositories | As mentioned in <xref target="auth" format="default"/>, many RPSL | |||
| have weak if any authentication. This allows spoofing of | repositories have weak, if any, authentication. This allows spoofing | |||
| inetnum: objects pointing to malicious geofeed files. <xref | of inetnum: objects pointing to malicious geofeed files. <xref | |||
| target="auth"/> suggests an unfortunately complex method for | target="auth" format="default"/> suggests an unfortunately complex | |||
| stronger authentication based on the RPKI. | method for stronger authentication based on the RPKI. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| For example, if an inetnum: for a wide address range (e.g. a | For example, if an inetnum: for a wide address range (e.g., a | |||
| /16) points to an RPKI-signed geofeed file, a customer or | /16) points to an RPKI-signed geofeed file, a customer or | |||
| attacker could publish an unsigned equal or narrower (e.g. a | attacker could publish an unsigned equal or narrower (e.g., a | |||
| /24) inetnum: in a whois registry which has weak authorization, | /24) inetnum: in a WHOIS registry that has weak authorization, | |||
| abusing the rule that the most-specific inetnum: object with a | abusing the rule that the most-specific inetnum: object with a | |||
| geofeed reference MUST be used. | geofeed reference <bcp14>MUST</bcp14> be used. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If signatures were mandatory, the above attack would be stymied. | If signatures were mandatory, the above attack would be stymied, but | |||
| But of course that is not happening anytime soon. | of course that is not happening anytime soon. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The RPSL providers have had to throttle fetching from their | The RPSL providers have had to throttle fetching from their | |||
| servers due to too-frequent queries. Usually they throttle by | servers due to too-frequent queries. Usually, they throttle by | |||
| the querying IP address or block. Similar defenses will likely | the querying IP address or block. Similar defenses will likely | |||
| need to be deployed by geofeed file servers. | need to be deployed by geofeed file servers. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="iana" numbered="true" toc="default"> | ||||
| <section title="IANA Considerations" anchor="iana"> | <name>IANA Considerations</name> | |||
| <t> | <t> | |||
| IANA is asked to register object identifiers for one content | IANA has registered object identifiers for one content | |||
| type in the "SMI Security for S/MIME CMS Content Type | type in the "SMI Security for S/MIME CMS Content Type | |||
| (1.2.840.113549.1.9.16.1)" registry as follows: | (1.2.840.113549.1.9.16.1)" registry as follows: | |||
| </t> | </t> | |||
| <figure> | <table anchor="iana_table"> | |||
| <artwork><![CDATA[ | <thead> | |||
| Description OID Specification | <tr> | |||
| id-ct-geofeedCSVwithCRLF 1.2.840.113549.1.9.16.1.47 [RFC-TBD] | <th>Decimal</th> | |||
| ]]></artwork> | <th>Description</th> | |||
| </figure> | <th>References</th> | |||
| </tr> | ||||
| </section> | </thead> | |||
| <tbody> | ||||
| <section title="Acknowledgments" anchor="ack"> | <tr> | |||
| <td>47</td> | ||||
| <t> | <td>id-ct-geofeedCSVwithCRLF</td> | |||
| Thanks to Rob Austein for CMS and detached signature clue. | <td>RFC 9092</td> | |||
| George Michaelson for the first and substantial external review, | </tr> | |||
| Erik Kline who was too shy to agree to co-authorship. | </tbody> | |||
| Additionally, we express our gratitude to early implementors, | </table> | |||
| 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. | ||||
| </t> | ||||
| </section> | </section> | |||
| </middle> | </middle> | |||
| <back> | <back> | |||
| <references title="Normative References"> | <displayreference target="I-D.ietf-sidrops-rpki-rsc" to="RPKI-RSC"/> | |||
| <?rfc include="reference.RFC.2119"?> | <displayreference target="I-D.ietf-sidrops-rpki-rta" to="RPKI-RTA"/> | |||
| <?rfc include="reference.RFC.2622"?> | ||||
| <?rfc include="reference.RFC.2725"?> | ||||
| <?rfc include="reference.RFC.2818"?> | ||||
| <?rfc include="reference.RFC.3629"?> | ||||
| <?rfc include="reference.RFC.3779"?> | ||||
| <?rfc include="reference.RFC.4012"?> | ||||
| <?rfc include="reference.RFC.4648"?> | ||||
| <?rfc include="reference.RFC.5280"?> | ||||
| <?rfc include="reference.RFC.5652"?> | ||||
| <?rfc include="reference.RFC.8174"?> | ||||
| <?rfc include="reference.RFC.6481"?> | ||||
| <?rfc include="reference.RFC.6486"?> | ||||
| <?rfc include="reference.RFC.8805"?> | ||||
| <?rfc include="reference.RFC.8933"?> | ||||
| </references> | ||||
| <references title="Informative References"> | <references> | |||
| <?rfc include="reference.RFC.0959"?> | <name>References</name> | |||
| <?rfc include="reference.RFC.3912"?> | <references> | |||
| <?rfc include="reference.RFC.5485"?> | <name>Normative References</name> | |||
| <?rfc include="reference.RFC.7234"?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| <?rfc include="reference.RFC.7482"?> | FC.2119.xml"/> | |||
| <?rfc include="reference.RFC.7485"?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| <?rfc include="reference.RFC.7909"?> | FC.2622.xml"/> | |||
| <?rfc include="reference.I-D.spaghetti-sidrops-rpki-rsc"?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| <?rfc include="reference.I-D.ietf-sidrops-rpki-rta"?> | FC.2725.xml"/> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.2818.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.3629.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.3779.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.4012.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.4648.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.5280.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.5652.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8174.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.6481.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.6486.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8805.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8933.xml"/> | ||||
| </references> | ||||
| <references> | ||||
| <name>Informative References</name> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.0959.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.3912.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.5485.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7234.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.9082.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7485.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7909.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.4632.xml"/> | ||||
| <reference anchor="RIPE81" target="https://www.ripe.net/publications/docs/ | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D | |||
| ripe-081"> | .ietf-sidrops-rpki-rsc.xml"/> | |||
| <front> | ||||
| <title>Representation Of IP Routing Policies In The RIPE Database</tit | ||||
| le> | ||||
| <author><organization>RIPE</organization></author> | ||||
| <date/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="RIPE181" target="https://www.ripe.net/publications/docs | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D | |||
| /ripe-181"> | .ietf-sidrops-rpki-rta.xml"/> | |||
| <front> | ||||
| <title>Representation Of IP Routing Policies In A Routing Registry</ti | ||||
| tle> | ||||
| <author><organization>RIPE</organization></author> | ||||
| <date/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="RIPE-DB" target="https://www.ripe.net/manage-ips-and-as | <reference anchor="RIPE81" target="https://www.ripe.net/publications/doc | |||
| ns/db/support/documentation/ripe-database-documentation"> | s/ripe-081"> | |||
| <front> | <front> | |||
| <title>RIPE Database Documentation</title> | <title>Representation Of IP Routing Policies In The RIPE Database</t | |||
| <author><organization>RIPE</organization></author> | itle> | |||
| <date/> | <author> | |||
| </front> | <organization>RIPE NCC</organization> | |||
| </reference> | </author> | |||
| <date month="February" year="1993"/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="INETNUM" target="https://www.ripe.net/manage-ips-and-as | <reference anchor="RIPE181" target="https://www.ripe.net/publications/do | |||
| ns/db/support/documentation/ripe-database-documentation/rpsl-object-types/4-2-de | cs/ripe-181"> | |||
| scriptions-of-primary-objects/4-2-4-description-of-the-inetnum-object"> | <front> | |||
| <front> | <title>Representation Of IP Routing Policies In A Routing Registry</ | |||
| <title>Description of the INETNUM Object</title> | title> | |||
| <author><organization>RIPE</organization></author> | <author> | |||
| <date/> | <organization>RIPE NCC</organization> | |||
| </front> | </author> | |||
| </reference> | <date month="October" year="1994"/> | |||
| </front> | ||||
| </reference> | ||||
| <reference anchor="INET6NUM" target="https://www.ripe.net/manage-ips-and-a | <reference anchor="RIPE-DB" target="https://www.ripe.net/manage-ips-and- | |||
| sns/db/support/documentation/ripe-database-documentation/rpsl-object-types/4-2-d | asns/db/support/documentation/ripe-database-documentation"> | |||
| escriptions-of-primary-objects/4-2-3-description-of-the-inet6num-object"> | <front> | |||
| <front> | <title>RIPE Database Documentation</title> | |||
| <title>Description of the INET6NUM Object</title> | <author> | |||
| <author><organization>RIPE</organization></author> | <organization>RIPE NCC</organization> | |||
| <date/> | </author> | |||
| </front> | <date/> | |||
| </reference> | </front> | |||
| </reference> | ||||
| <reference anchor="geofeed-finder" target="https://github.com/massimocande | <reference anchor="INETNUM" target="https://www.ripe.net/manage-ips-and- | |||
| la/geofeed-finder"> | asns/db/support/documentation/ripe-database-documentation/rpsl-object-types/4-2- | |||
| <front> | descriptions-of-primary-objects/4-2-4-description-of-the-inetnum-object"> | |||
| <title>geofeed-finder</title> | <front> | |||
| <author><organization>Massimo Candela</organization></author> | <title>Description of the INETNUM Object</title> | |||
| <date/> | <author> | |||
| </front> | <organization>RIPE NCC</organization> | |||
| </reference> | </author> | |||
| <date month="June" year="2020"/> | ||||
| </front> | ||||
| </reference> | ||||
| </references> | <reference anchor="INET6NUM" target="https://www.ripe.net/manage-ips-and | |||
| -asns/db/support/documentation/ripe-database-documentation/rpsl-object-types/4-2 | ||||
| -descriptions-of-primary-objects/4-2-3-description-of-the-inet6num-object"> | ||||
| <front> | ||||
| <title>Description of the INET6NUM Object</title> | ||||
| <author> | ||||
| <organization>RIPE NCC</organization> | ||||
| </author> | ||||
| <date month="October" year="2019"/> | ||||
| </front> | ||||
| </reference> | ||||
| <section title="Example" anchor="example"> | <reference anchor="GEOFEED-FINDER" target="https://github.com/massimocan | |||
| dela/geofeed-finder"> | ||||
| <front> | ||||
| <title>geofeed-finder</title> | ||||
| <author> | ||||
| <organization></organization> | ||||
| </author> | ||||
| <date month="June" year="2021"/> | ||||
| </front> | ||||
| <refcontent>commit 5f557a4</refcontent> | ||||
| </reference> | ||||
| <t> | </references> | |||
| This appendix provides an example, including a trust anchor, a CA | </references> | |||
| <section anchor="example" numbered="true" toc="default"> | ||||
| <name>Example</name> | ||||
| <t> | ||||
| 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. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| 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) nu | |||
| </t> | mbers. | |||
| </t> | ||||
| <figure><artwork><![CDATA[ | <sourcecode type=""><![CDATA[ | |||
| -----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 | |||
| jaVc0g7ORc+eIAcHw7Uroc6h7Y7lGjOkDZF75j0mLQa3AgMBAAGjggGEMIIBgDAd | jaVc0g7ORc+eIAcHw7Uroc6h7Y7lGjOkDZF75j0mLQa3AgMBAAGjggGEMIIBgDAd | |||
| skipping to change at line 813 ¶ | skipping to change at line 746 ¶ | |||
| ZXQvbm90aWZpY2F0aW9uLnhtbDAwBggrBgEFBQcwBYYkcnN5bmM6Ly9ycGtpLmV4 | ZXQvbm90aWZpY2F0aW9uLnhtbDAwBggrBgEFBQcwBYYkcnN5bmM6Ly9ycGtpLmV4 | |||
| YW1wbGUubmV0L3JlcG9zaXRvcnkvMCcGCCsGAQUFBwEHAQH/BBgwFjAJBAIAATAD | YW1wbGUubmV0L3JlcG9zaXRvcnkvMCcGCCsGAQUFBwEHAQH/BBgwFjAJBAIAATAD | |||
| AwEAMAkEAgACMAMDAQAwHgYIKwYBBQUHAQgEEjAQoA4wDDAKAgEAAgUA/////zAN | AwEAMAkEAgACMAMDAQAwHgYIKwYBBQUHAQgEEjAQoA4wDDAKAgEAAgUA/////zAN | |||
| BgkqhkiG9w0BAQsFAAOCAQEAgZFQ0Sf3CI5Hwev61AUWHYOFniy69PuDTq+WnhDe | BgkqhkiG9w0BAQsFAAOCAQEAgZFQ0Sf3CI5Hwev61AUWHYOFniy69PuDTq+WnhDe | |||
| xX5rpjSDRrs5L756KSKJcaOJ36lzO45lfOPSY9fH6x30pnipaqRA7t5rApky24jH | xX5rpjSDRrs5L756KSKJcaOJ36lzO45lfOPSY9fH6x30pnipaqRA7t5rApky24jH | |||
| cSUA9iRednzxhVyGjWKnfAKyNo2MYfaOAT0db1GjyLKbOADI9FowtHBUu+60ykcM | cSUA9iRednzxhVyGjWKnfAKyNo2MYfaOAT0db1GjyLKbOADI9FowtHBUu+60ykcM | |||
| Quz66XrzxtmxlrRcAnbv/HtV17qOd4my6q5yjTPR1dmYN9oR/2ChlXtGE6uQVguA | Quz66XrzxtmxlrRcAnbv/HtV17qOd4my6q5yjTPR1dmYN9oR/2ChlXtGE6uQVguA | |||
| rvNZ5CwiJ1TgGGTB7T8ORHwWU6dGTc0jk2rESAaikmLi1roZSNC21fckhapEit1a | rvNZ5CwiJ1TgGGTB7T8ORHwWU6dGTc0jk2rESAaikmLi1roZSNC21fckhapEit1a | |||
| x8CyiVxjcVc5e0AmS1rJfL6LIfwmtive/N/eBtIM92HkBA== | x8CyiVxjcVc5e0AmS1rJfL6LIfwmtive/N/eBtIM92HkBA== | |||
| -----END CERTIFICATE----- | -----END CERTIFICATE----- | |||
| ]]></artwork></figure> | ]]></sourcecode> | |||
| <t> | <t> | |||
| The CA certificate is issued by the trust anchor. This | The CA certificate is issued by the trust anchor. This | |||
| certificate grants authority over one IPv4 address block | certificate grants authority over one IPv4 address block | |||
| (192.0.2.0/24) and two AS numbers (64496 and 64497).</t> | (192.0.2.0/24) and two AS numbers (64496 and 64497).</t> | |||
| <sourcecode type=""><![CDATA[ | ||||
| <figure><artwork><![CDATA[ | ||||
| -----BEGIN CERTIFICATE----- | -----BEGIN CERTIFICATE----- | |||
| MIIFBzCCA++gAwIBAgIUcyCzS10hdfG65kbRq7toQAvRDKowDQYJKoZIhvcNAQEL | MIIFBzCCA++gAwIBAgIUcyCzS10hdfG65kbRq7toQAvRDKowDQYJKoZIhvcNAQEL | |||
| BQAwFTETMBEGA1UEAxMKZXhhbXBsZS10YTAeFw0yMDA5MDMxOTAyMTlaFw0yMTA5 | BQAwFTETMBEGA1UEAxMKZXhhbXBsZS10YTAeFw0yMDA5MDMxOTAyMTlaFw0yMTA5 | |||
| MDMxOTAyMTlaMDMxMTAvBgNVBAMTKDNBQ0UyQ0VGNEZCMjFCN0QxMUUzRTE4NEVG | MDMxOTAyMTlaMDMxMTAvBgNVBAMTKDNBQ0UyQ0VGNEZCMjFCN0QxMUUzRTE4NEVG | |||
| QzFFMjk3QjM3Nzg2NDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDc | QzFFMjk3QjM3Nzg2NDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDc | |||
| zz1qwTxC2ocw5rqp8ktm2XyYkl8riBVuqlXwfefTxsR2YFpgz9vkYUd5Az9EVEG7 | zz1qwTxC2ocw5rqp8ktm2XyYkl8riBVuqlXwfefTxsR2YFpgz9vkYUd5Az9EVEG7 | |||
| 6wGIyZbtmhK63eEeaqbKz2GHub467498BXeVrYysO+YuIGgCEYKznNDZ4j5aaDbo | 6wGIyZbtmhK63eEeaqbKz2GHub467498BXeVrYysO+YuIGgCEYKznNDZ4j5aaDbo | |||
| j5+4/z0Qvv6HEsxQd0f8br6lKJwgeRM6+fm7796HNPB0aqD7Zj9NRCLXjbB0DCgJ | j5+4/z0Qvv6HEsxQd0f8br6lKJwgeRM6+fm7796HNPB0aqD7Zj9NRCLXjbB0DCgJ | |||
| liH6rXMKR86ofgll9V2mRjesvhdKYgkGbOif9rvxVpLJ/6zdru5CE9yeuJZ59l+n | liH6rXMKR86ofgll9V2mRjesvhdKYgkGbOif9rvxVpLJ/6zdru5CE9yeuJZ59l+n | |||
| YH/r6PzdJ4Q7yKrJX8qD6A60j4+biaU4MQ72KpsjhQNTTqF/HRwi0N54GDaknEwE | YH/r6PzdJ4Q7yKrJX8qD6A60j4+biaU4MQ72KpsjhQNTTqF/HRwi0N54GDaknEwE | |||
| skipping to change at line 850 ¶ | skipping to change at line 782 ¶ | |||
| Oi8vcnJkcC5leGFtcGxlLm5ldC9ub3RpZmljYXRpb24ueG1sMDAGCCsGAQUFBzAF | Oi8vcnJkcC5leGFtcGxlLm5ldC9ub3RpZmljYXRpb24ueG1sMDAGCCsGAQUFBzAF | |||
| hiRyc3luYzovL3Jwa2kuZXhhbXBsZS5uZXQvcmVwb3NpdG9yeS8wHwYIKwYBBQUH | hiRyc3luYzovL3Jwa2kuZXhhbXBsZS5uZXQvcmVwb3NpdG9yeS8wHwYIKwYBBQUH | |||
| AQcBAf8EEDAOMAwEAgABMAYDBADAAAIwHgYIKwYBBQUHAQgEEjAQoA4wDDAKAgMA | AQcBAf8EEDAOMAwEAgABMAYDBADAAAIwHgYIKwYBBQUHAQgEEjAQoA4wDDAKAgMA | |||
| +/ACAwD78TANBgkqhkiG9w0BAQsFAAOCAQEAnLu+d1ZsUTiX3YWGueTHIalW4ad0 | +/ACAwD78TANBgkqhkiG9w0BAQsFAAOCAQEAnLu+d1ZsUTiX3YWGueTHIalW4ad0 | |||
| Kupi7pYMV2nXbxNGmdJMol9BkzVz9tj55ReMghUU4YLm/ICYe4fz5e0T8o9s/vIm | Kupi7pYMV2nXbxNGmdJMol9BkzVz9tj55ReMghUU4YLm/ICYe4fz5e0T8o9s/vIm | |||
| cGS29+WoGuiznMitpvbS/379gaMezk6KpqjH6Brw6meMqy09phmcmvm3x3WTmx09 | cGS29+WoGuiznMitpvbS/379gaMezk6KpqjH6Brw6meMqy09phmcmvm3x3WTmx09 | |||
| mLlQneMptwk8qSYcnMUmGLJs+cVqmkOa3sWRdw8WrGu6QqYtQz3HFZQojF06YzEq | mLlQneMptwk8qSYcnMUmGLJs+cVqmkOa3sWRdw8WrGu6QqYtQz3HFZQojF06YzEq | |||
| V/dBdCFdEOwTfVl2n2XqhoJl/oEBdC4uu2G0qRk3+WVs+uwVHP0Ttsbt7TzFgZfY | V/dBdCFdEOwTfVl2n2XqhoJl/oEBdC4uu2G0qRk3+WVs+uwVHP0Ttsbt7TzFgZfY | |||
| yxqvOg6QoldxZVZmHHncKmETu/BqCDGJot9may31ukrx34Bu+XFMVihm0w== | yxqvOg6QoldxZVZmHHncKmETu/BqCDGJot9may31ukrx34Bu+XFMVihm0w== | |||
| -----END CERTIFICATE----- | -----END CERTIFICATE----- | |||
| ]]></artwork></figure> | ]]></sourcecode> | |||
| <t> | ||||
| <t> | ||||
| The end-entity certificate is issued by the CA. This | The end-entity certificate is issued by the CA. This | |||
| certificate grants signature authority for one IPv4 address block | certificate grants signature authority for one IPv4 address block | |||
| (192.0.2.0/24). Signature authority for AS numbers is not needed for | (192.0.2.0/24). Signature authority for AS numbers is not needed for | |||
| geofeed data signatures, so no AS numbers are included in the | geofeed data signatures, so no AS numbers are included in the | |||
| certificate.</t> | certificate.</t> | |||
| <sourcecode type=""><![CDATA[ | ||||
| <figure><artwork><![CDATA[ | ||||
| -----BEGIN CERTIFICATE----- | -----BEGIN CERTIFICATE----- | |||
| MIIEpTCCA42gAwIBAgIUJ605QIPX8rW5m4Zwx3WyuW7hZuQwDQYJKoZIhvcNAQEL | MIIEpTCCA42gAwIBAgIUJ605QIPX8rW5m4Zwx3WyuW7hZuQwDQYJKoZIhvcNAQEL | |||
| BQAwMzExMC8GA1UEAxMoM0FDRTJDRUY0RkIyMUI3RDExRTNFMTg0RUZDMUUyOTdC | BQAwMzExMC8GA1UEAxMoM0FDRTJDRUY0RkIyMUI3RDExRTNFMTg0RUZDMUUyOTdC | |||
| Mzc3ODY0MjAeFw0yMTA1MjAxNjA1NDVaFw0yMjAzMTYxNjA1NDVaMDMxMTAvBgNV | Mzc3ODY0MjAeFw0yMTA1MjAxNjA1NDVaFw0yMjAzMTYxNjA1NDVaMDMxMTAvBgNV | |||
| BAMTKDkxNDY1MkEzQkQ1MUMxNDQyNjAxOTg4ODlGNUM0NUFCRjA1M0ExODcwggEi | BAMTKDkxNDY1MkEzQkQ1MUMxNDQyNjAxOTg4ODlGNUM0NUFCRjA1M0ExODcwggEi | |||
| MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCycTQrOb/qB2W3i3Ki8PhA/DEW | MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCycTQrOb/qB2W3i3Ki8PhA/DEW | |||
| yii2TgGo9pgCwO9lsIRI6Zb/k+aSiWWP9kSczlcQgtPCVwr62hTQZCIowBN0BL0c | yii2TgGo9pgCwO9lsIRI6Zb/k+aSiWWP9kSczlcQgtPCVwr62hTQZCIowBN0BL0c | |||
| K0/5k1imJdi5qdM3nvKswM8CnoR11vB8pQFwruZmr5xphXRvE+mzuJVLgu2V1upm | K0/5k1imJdi5qdM3nvKswM8CnoR11vB8pQFwruZmr5xphXRvE+mzuJVLgu2V1upm | |||
| BXuWloeymudh6WWJ+GDjwPXO3RiXBejBrOFNXhaFLe08y4DPfr/S/tXJOBm7QzQp | BXuWloeymudh6WWJ+GDjwPXO3RiXBejBrOFNXhaFLe08y4DPfr/S/tXJOBm7QzQp | |||
| tmbPLYtGfprYu45liFFqqP94UeLpISfXd36AKGzqTFCcc3EW9l5UFE1MFLlnoEog | tmbPLYtGfprYu45liFFqqP94UeLpISfXd36AKGzqTFCcc3EW9l5UFE1MFLlnoEog | |||
| skipping to change at line 887 ¶ | skipping to change at line 817 ¶ | |||
| c2l0b3J5LzNBQ0UyQ0VGNEZCMjFCN0QxMUUzRTE4NEVGQzFFMjk3QjM3Nzg2NDIu | c2l0b3J5LzNBQ0UyQ0VGNEZCMjFCN0QxMUUzRTE4NEVGQzFFMjk3QjM3Nzg2NDIu | |||
| Y2VyMBkGCCsGAQUFBwEHAQH/BAowCDAGBAIAAQUAMEUGCCsGAQUFBwELBDkwNzA1 | Y2VyMBkGCCsGAQUFBwEHAQH/BAowCDAGBAIAAQUAMEUGCCsGAQUFBwELBDkwNzA1 | |||
| BggrBgEFBQcwDYYpaHR0cHM6Ly9ycmRwLmV4YW1wbGUubmV0L25vdGlmaWNhdGlv | BggrBgEFBQcwDYYpaHR0cHM6Ly9ycmRwLmV4YW1wbGUubmV0L25vdGlmaWNhdGlv | |||
| bi54bWwwDQYJKoZIhvcNAQELBQADggEBAEjC98gVp0Mb7uiKaHylP0453mtJ+AkN | bi54bWwwDQYJKoZIhvcNAQELBQADggEBAEjC98gVp0Mb7uiKaHylP0453mtJ+AkN | |||
| 07fsK/qGw/e90DJv7cp1hvjj4uy3sgf7PJQ7cKNGrgybq/lE0jce+ARgVjbi2Brz | 07fsK/qGw/e90DJv7cp1hvjj4uy3sgf7PJQ7cKNGrgybq/lE0jce+ARgVjbi2Brz | |||
| ZsWAnB846Snwsktw6cenaif6Aww6q00NspAepMBd2Vg/9sKFvOwJFVOgNcqiQiXP | ZsWAnB846Snwsktw6cenaif6Aww6q00NspAepMBd2Vg/9sKFvOwJFVOgNcqiQiXP | |||
| 5rGJPWBcOMv52a/7adjfXwpnOijiTOgMloQGmC2TPZpydZKjlxEATdFEQssa33xD | 5rGJPWBcOMv52a/7adjfXwpnOijiTOgMloQGmC2TPZpydZKjlxEATdFEQssa33xD | |||
| nlpp+/r9xuNVYRtRcC36oWraVA3jzN6F6rDE8r8xs3ylISVz6JeCQ4YRYwbMsjjc | nlpp+/r9xuNVYRtRcC36oWraVA3jzN6F6rDE8r8xs3ylISVz6JeCQ4YRYwbMsjjc | |||
| /tiJLM7ZYxIe5IrYz1ZtN6n/SEssJAswRIgps2EhCt/HS2xAmGCOhgU= | /tiJLM7ZYxIe5IrYz1ZtN6n/SEssJAswRIgps2EhCt/HS2xAmGCOhgU= | |||
| -----END CERTIFICATE----- | -----END CERTIFICATE----- | |||
| ]]></artwork></figure> | ]]></sourcecode> | |||
| <t> | ||||
| <t> | ||||
| The end-entity certificate is displayed below in detail. For | The end-entity certificate is displayed below in detail. For | |||
| brevity, the other two certificates are not. | brevity, the other two certificates are not. | |||
| </t> | </t> | |||
| <sourcecode type=""><![CDATA[ | ||||
| <figure><artwork><![CDATA[ | ||||
| 0 1189: SEQUENCE { | 0 1189: SEQUENCE { | |||
| 4 909: SEQUENCE { | 4 909: SEQUENCE { | |||
| 8 3: [0] { | 8 3: [0] { | |||
| 10 1: INTEGER 2 | 10 1: INTEGER 2 | |||
| : } | : } | |||
| 13 20: INTEGER 27AD394083D7F2B5B99B8670C775B2B96EE166E4 | 13 20: INTEGER 27AD394083D7F2B5B99B8670C775B2B96EE166E4 | |||
| 35 13: SEQUENCE { | 35 13: SEQUENCE { | |||
| 37 9: OBJECT IDENTIFIER | 37 9: OBJECT IDENTIFIER | |||
| : sha256WithRSAEncryption (1 2 840 113549 1 1 11) | : sha256WithRSAEncryption (1 2 840 113549 1 1 11) | |||
| 48 0: NULL | 48 0: NULL | |||
| skipping to change at line 1086 ¶ | skipping to change at line 1014 ¶ | |||
| : A0 35 CA A2 42 25 CF E6 B1 89 3D 60 5C 38 CB F9 | : A0 35 CA A2 42 25 CF E6 B1 89 3D 60 5C 38 CB F9 | |||
| : D9 AF FB 69 D8 DF 5F 0A 67 3A 28 E2 4C E8 0C 96 | : D9 AF FB 69 D8 DF 5F 0A 67 3A 28 E2 4C E8 0C 96 | |||
| : 84 06 98 2D 93 3D 9A 72 75 92 A3 97 11 00 4D D1 | : 84 06 98 2D 93 3D 9A 72 75 92 A3 97 11 00 4D D1 | |||
| : 44 42 CB 1A DF 7C 43 9E 5A 69 FB FA FD C6 E3 55 | : 44 42 CB 1A DF 7C 43 9E 5A 69 FB FA FD C6 E3 55 | |||
| : 61 1B 51 70 2D FA A1 6A DA 54 0D E3 CC DE 85 EA | : 61 1B 51 70 2D FA A1 6A DA 54 0D E3 CC DE 85 EA | |||
| : B0 C4 F2 BF 31 B3 7C A5 21 25 73 E8 97 82 43 86 | : B0 C4 F2 BF 31 B3 7C A5 21 25 73 E8 97 82 43 86 | |||
| : 11 63 06 CC B2 38 DC FE D8 89 2C CE D9 63 12 1E | : 11 63 06 CC B2 38 DC FE D8 89 2C CE D9 63 12 1E | |||
| : E4 8A D8 CF 56 6D 37 A9 FF 48 4B 2C 24 0B 30 44 | : E4 8A D8 CF 56 6D 37 A9 FF 48 4B 2C 24 0B 30 44 | |||
| : 88 29 B3 61 21 0A DF C7 4B 6C 40 98 60 8E 86 05 | : 88 29 B3 61 21 0A DF C7 4B 6C 40 98 60 8E 86 05 | |||
| : } | : } | |||
| ]]></artwork></figure> | ]]></sourcecode> | |||
| <t> | ||||
| <t> | ||||
| To allow reproduction of the signature results, the end-entity | To allow reproduction of the signature results, the end-entity | |||
| private key is provided. For brevity, the other two private | private key is provided. For brevity, the other two private | |||
| keys are not.</t> | keys are not.</t> | |||
| <sourcecode type=""><![CDATA[ | ||||
| <figure><artwork><![CDATA[ | ||||
| -----BEGIN RSA PRIVATE KEY----- | -----BEGIN RSA PRIVATE KEY----- | |||
| MIIEpQIBAAKCAQEAsnE0Kzm/6gdlt4tyovD4QPwxFsootk4BqPaYAsDvZbCESOmW | MIIEpQIBAAKCAQEAsnE0Kzm/6gdlt4tyovD4QPwxFsootk4BqPaYAsDvZbCESOmW | |||
| /5Pmkollj/ZEnM5XEILTwlcK+toU0GQiKMATdAS9HCtP+ZNYpiXYuanTN57yrMDP | /5Pmkollj/ZEnM5XEILTwlcK+toU0GQiKMATdAS9HCtP+ZNYpiXYuanTN57yrMDP | |||
| Ap6EddbwfKUBcK7mZq+caYV0bxPps7iVS4LtldbqZgV7lpaHsprnYellifhg48D1 | Ap6EddbwfKUBcK7mZq+caYV0bxPps7iVS4LtldbqZgV7lpaHsprnYellifhg48D1 | |||
| zt0YlwXowazhTV4WhS3tPMuAz36/0v7VyTgZu0M0KbZmzy2LRn6a2LuOZYhRaqj/ | zt0YlwXowazhTV4WhS3tPMuAz36/0v7VyTgZu0M0KbZmzy2LRn6a2LuOZYhRaqj/ | |||
| eFHi6SEn13d+gChs6kxQnHNxFvZeVBRNTBS5Z6BKIKraC6CgAbdCJDhRingvxIHm | eFHi6SEn13d+gChs6kxQnHNxFvZeVBRNTBS5Z6BKIKraC6CgAbdCJDhRingvxIHm | |||
| gXVi3uOvXXQva0H7ecOoOnJsRvmmA3SBAd+M6wIDAQABAoIBAQCyB0FeMuKm8bRo | gXVi3uOvXXQva0H7ecOoOnJsRvmmA3SBAd+M6wIDAQABAoIBAQCyB0FeMuKm8bRo | |||
| 18aKjFGSPEoZi53srIz5bvUgIi92TBLez7ZnzL6Iym26oJ+5th+lCHGO/dqlhXio | 18aKjFGSPEoZi53srIz5bvUgIi92TBLez7ZnzL6Iym26oJ+5th+lCHGO/dqlhXio | |||
| pI50C5Yc9TFbblb/ECOsuCuuqKFjZ8CD3GVsHozXKJeMM+/o5YZXQrORj6UnwT0z | pI50C5Yc9TFbblb/ECOsuCuuqKFjZ8CD3GVsHozXKJeMM+/o5YZXQrORj6UnwT0z | |||
| ol/JE5pIGUCIgsXX6tz9s5BP3lUAvVQHsv6+vEVKLxQ3wj/1vIL8O/CN036EV0GJ | ol/JE5pIGUCIgsXX6tz9s5BP3lUAvVQHsv6+vEVKLxQ3wj/1vIL8O/CN036EV0GJ | |||
| skipping to change at line 1121 ¶ | skipping to change at line 1047 ¶ | |||
| FGSli+3KxQhCNIJJfgWzq4bE0ioAMjdGbYXzIYQFAoGBAM6tuDJ36KDU+hIS6wu6 | FGSli+3KxQhCNIJJfgWzq4bE0ioAMjdGbYXzIYQFAoGBAM6tuDJ36KDU+hIS6wu6 | |||
| 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----- | |||
| ]]></artwork></figure> | ]]></sourcecode> | |||
| <t> | ||||
| <t> | Signing of "192.0.2.0/24,US,WA,Seattle," (terminated by CR and LF) yields the | |||
| Signing of "192.0.2.0/24,US,WA,Seattle," (terminated by CR and LF), | following detached CMS signature.</t> | |||
| yields the following detached CMS signature.</t> | <sourcecode type=""><![CDATA[ | |||
| <figure><artwork><![CDATA[ | ||||
| # 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 | |||
| # tPCVwr62hTQZCIowBN0BL0cK0/5k1imJdi5qdM3nvKswM8CnoR11vB8pQFwruZm | # tPCVwr62hTQZCIowBN0BL0cK0/5k1imJdi5qdM3nvKswM8CnoR11vB8pQFwruZm | |||
| # r5xphXRvE+mzuJVLgu2V1upmBXuWloeymudh6WWJ+GDjwPXO3RiXBejBrOFNXha | # r5xphXRvE+mzuJVLgu2V1upmBXuWloeymudh6WWJ+GDjwPXO3RiXBejBrOFNXha | |||
| skipping to change at line 1166 ¶ | skipping to change at line 1090 ¶ | |||
| # ZiIn1xFq/BToYcwCwYJYIZIAWUDBAIBoGswGgYJKoZIhvcNAQkDMQ0GCyqGSIb3 | # ZiIn1xFq/BToYcwCwYJYIZIAWUDBAIBoGswGgYJKoZIhvcNAQkDMQ0GCyqGSIb3 | |||
| # 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 | |||
| ]]></artwork></figure> | ]]></sourcecode> | |||
| </section> | </section> | |||
| </back> | ||||
| <section anchor="ack" numbered="false" toc="default"> | ||||
| <name>Acknowledgments</name> | ||||
| <t> | ||||
| Thanks to <contact fullname="Rob Austein"/> for CMS and detached | ||||
| signature clue, <contact fullname="George Michaelson"/> for the first | ||||
| and substantial external review, and <contact fullname="Erik Kline"/> | ||||
| who was too shy to agree to coauthorship. Additionally, we express | ||||
| our gratitude to early implementors, including <contact fullname="Menno | ||||
| Schepers"/>; <contact fullname="Flavio Luciani"/>; <contact | ||||
| fullname="Eric Dugas"/>; <contact fullname="Job Snijders"/>, who | ||||
| provided running code; and <contact fullname="Kevin Pack"/>. Also, | ||||
| thanks to the following geolocation providers who are consuming geofeeds | ||||
| with this | ||||
| described solution: <contact fullname="Jonathan Kosgei"/> (ipdata.co), | ||||
| <contact fullname="Ben Dowling"/> (ipinfo.io), and <contact | ||||
| fullname="Pol Nisenblat"/> (bigdatacloud.com). For an amazing number | ||||
| of helpful reviews, we thank <contact fullname="Adrian Farrel"/>, | ||||
| <contact fullname="Antonio Prado"/>, <contact fullname="Francesca | ||||
| Palombini"/>, <contact fullname="Jean-Michel Combes"/> (INTDIR), | ||||
| <contact fullname="John Scudder"/>, <contact fullname="Kyle Rose"/> | ||||
| (SECDIR), <contact fullname="Martin Duke"/>, <contact fullname="Murray | ||||
| Kucherawy"/>, <contact fullname="Paul Kyzivat"/> (GENART), <contact | ||||
| fullname="Rob Wilton"/>, and <contact fullname="Roman Danyliw"/>. The | ||||
| authors also thank <contact fullname="George Michaelson"/>, the | ||||
| awesome document shepherd. | ||||
| </t> | ||||
| </section> | ||||
| </back> | ||||
| </rfc> | </rfc> | |||
| End of changes. 176 change blocks. | ||||
| 519 lines changed or deleted | 515 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/ | ||||