rfc9536.original | rfc9536.txt | |||
---|---|---|---|---|
Registration Protocols Extensions M. Loffredo | Internet Engineering Task Force (IETF) M. Loffredo | |||
Internet-Draft M. Martinelli | Request for Comments: 9536 M. Martinelli | |||
Intended status: Standards Track IIT-CNR/Registro.it | Category: Standards Track IIT-CNR/Registro.it | |||
Expires: 2 March 2024 30 August 2023 | ISSN: 2070-1721 March 2024 | |||
Registration Data Access Protocol (RDAP) Reverse Search | Registration Data Access Protocol (RDAP) Reverse Search | |||
draft-ietf-regext-rdap-reverse-search-25 | ||||
Abstract | Abstract | |||
The Registration Data Access Protocol (RDAP) does not include query | The Registration Data Access Protocol (RDAP) does not include query | |||
capabilities for finding the list of domains related to a set of | capabilities for finding the list of domains related to a set of | |||
entities matching a given search pattern. Considering that an RDAP | entities matching a given search pattern. Considering that an RDAP | |||
entity can be associated with any defined object class and other | entity can be associated with any defined object class and other | |||
relationships between RDAP object classes exist, a reverse search can | relationships between RDAP object classes exist, a reverse search can | |||
be applied to other use cases besides the classic domain-entity | be applied to other use cases besides the classic domain-entity | |||
scenario. This document describes an RDAP extension that allows | scenario. This document describes an RDAP extension that allows | |||
servers to provide a reverse search feature based on the relationship | servers to provide a reverse search feature based on the relationship | |||
defined in RDAP between an object class for search and any related | defined in RDAP between an object class for search and any related | |||
object class. The reverse search based on the domain-entity | object class. The reverse search based on the domain-entity | |||
relationship is treated as a particular case. | relationship is treated as a particular case. | |||
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 2 March 2024. | 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/rfc9536. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2023 IETF Trust and the persons identified as the | Copyright (c) 2024 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 (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | ||||
Please review these documents carefully, as they describe your rights | carefully, as they describe your rights and restrictions with respect | |||
and restrictions with respect to this document. Code Components | to this document. Code Components extracted from this document must | |||
extracted from this document must include Revised BSD License text as | include Revised BSD License text as described in Section 4.e of the | |||
described in Section 4.e of the Trust Legal Provisions and are | Trust Legal Provisions and are provided without warranty as described | |||
provided without warranty as described in the Revised BSD License. | in the Revised BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
1.1. Background . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.1. Background | |||
1.2. Conventions Used in This Document . . . . . . . . . . . . 4 | 1.2. Conventions Used in This Document | |||
2. Reverse Search Path Segment Specification . . . . . . . . . . 4 | 2. Reverse Search Path Segment Specification | |||
3. Reverse Search Definition . . . . . . . . . . . . . . . . . . 5 | 3. Reverse Search Definition | |||
4. Reverse Search Properties Discovery . . . . . . . . . . . . . 5 | 4. Reverse Search Properties Discovery | |||
5. Reverse Search Properties Mapping . . . . . . . . . . . . . . 6 | 5. Reverse Search Properties Mapping | |||
6. Reverse Search Response Specification . . . . . . . . . . . . 7 | 6. Reverse Search Response Specification | |||
7. Reverse Search Query Processing . . . . . . . . . . . . . . . 7 | 7. Reverse Search Query Processing | |||
8. Reverse Searches Based on Entity Details . . . . . . . . . . 8 | 8. Reverse Searches Based on Entity Details | |||
9. RDAP Conformance . . . . . . . . . . . . . . . . . . . . . . 10 | 9. RDAP Conformance | |||
10. Implementation Considerations . . . . . . . . . . . . . . . . 10 | 10. Implementation Considerations | |||
11. Implementation Status . . . . . . . . . . . . . . . . . . . . 10 | 11. IANA Considerations | |||
11.1. IIT-CNR/Registro.it RDAP Server . . . . . . . . . . . . 11 | 11.1. RDAP Extensions Registry | |||
11.2. IIT-CNR/Registro.it RDAP Client . . . . . . . . . . . . 11 | 11.2. RDAP Reverse Search Registries | |||
12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 12 | 11.2.1. Creation of the RDAP Reverse Search Registries | |||
12.1. RDAP Extensions Registry . . . . . . . . . . . . . . . . 12 | 11.2.2. Submit Requests to IANA | |||
12.2. RDAP Reverse Search Registries . . . . . . . . . . . . . 12 | 11.2.3. RDAP Reverse Search Registry | |||
12.2.1. Creation of the RDAP Reverse Search Registries . . . 12 | 11.2.3.1. Template | |||
12.2.2. Submit Request to IANA . . . . . . . . . . . . . . . 12 | 11.2.3.2. Initial Content | |||
12.2.3. RDAP Reverse Search Registry . . . . . . . . . . . . 13 | 11.2.4. RDAP Reverse Search Mapping Registry | |||
12.2.3.1. Template . . . . . . . . . . . . . . . . . . . . 13 | 11.2.4.1. Template | |||
12.2.3.2. Initial Content . . . . . . . . . . . . . . . . 13 | 11.2.4.2. Initial Content | |||
12.2.4. RDAP Reverse Search Mapping Registry . . . . . . . . 14 | 12. Privacy Considerations | |||
12.2.4.1. Template . . . . . . . . . . . . . . . . . . . . 14 | 13. Security Considerations | |||
12.2.4.2. Initial Content . . . . . . . . . . . . . . . . 15 | 14. References | |||
13. Privacy Considerations . . . . . . . . . . . . . . . . . . . 16 | 14.1. Normative References | |||
14. Security Considerations . . . . . . . . . . . . . . . . . . . 16 | 14.2. Informative References | |||
15. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 17 | ||||
16. References . . . . . . . . . . . . . . . . . . . . . . . . . 17 | ||||
16.1. Normative References . . . . . . . . . . . . . . . . . . 17 | ||||
16.2. Informative References . . . . . . . . . . . . . . . . . 18 | ||||
Appendix A. Paradigms to Enforce Access Control on Reverse Search | Appendix A. Paradigms to Enforce Access Control on Reverse Search | |||
in RDAP . . . . . . . . . . . . . . . . . . . . . . . . . 19 | in RDAP | |||
Appendix B. Change Log . . . . . . . . . . . . . . . . . . . . . 21 | Acknowledgements | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 24 | Authors' Addresses | |||
1. Introduction | 1. Introduction | |||
The protocol described in this specification aims to extend the RDAP | The protocol described in this specification aims to extend the RDAP | |||
query capabilities and response to enable reverse search based on the | query capabilities and response to enable reverse search based on the | |||
relationships defined in RDAP between an object class for search and | relationships defined in RDAP between an object class for search and | |||
a related object class. The reverse search based on the domain- | a related object class. The reverse search based on the domain- | |||
entity relationship is treated as a particular case of such a generic | entity relationship is treated as a particular case of such a generic | |||
model. | model. | |||
RDAP providers willing to implement this specification should | RDAP providers willing to implement this specification should | |||
carefully consider its implications on the efficiency (see | carefully consider its implications on the efficiency (see | |||
Section 10), the security (see Section 14) and the compliance with | Section 10), the security (see Section 13), and the compliance with | |||
privacy regulations (see Section 13) of their RDAP service. | privacy regulations (see Section 12) of their RDAP service. | |||
1.1. Background | 1.1. Background | |||
Reverse Whois is a service provided by many web applications that | Reverse WHOIS is a service provided by many web applications that | |||
allows users to find domain names owned by an individual or a company | allows users to find domain names owned by an individual or a company | |||
starting from the owner's details, such as name and email. Even if | starting from the owner's details, such as name and email. Even if | |||
it has been considered useful for some legal purposes (e.g. | it has been considered useful for some legal purposes (e.g., | |||
uncovering trademark infringements, detecting cybercrimes), its | uncovering trademark infringements and detecting cybercrimes), its | |||
availability as a standardized Whois [RFC3912] capability has been | availability as a standardized WHOIS [RFC3912] capability has been | |||
objected to for two main reasons, which now don't seem to conflict | objected to for two main reasons, which now don't seem to conflict | |||
with an RDAP implementation. | with an RDAP implementation. | |||
The first objection concerns the potential risks of privacy | The first objection concerns the potential risks of privacy | |||
violation. However, the domain name community is considering a new | violation. However, the domain name community is considering a new | |||
generation of Registration Directory Services [ICANN-RDS1] | generation of Registration Directory Services [ICANN-RDS] [ICANN-RA] | |||
[ICANN-RDS2] [ICANN-RA], which provide access to sensitive data under | that provide access to sensitive data under some permissible purposes | |||
some permissible purposes and in accordance with appropriate policies | and in accordance with appropriate policies for requestor | |||
for requestor accreditation, authentication and authorization. | accreditation, authentication, and authorization. RDAP's reliance on | |||
RDAP's reliance on HTTP means that it can make use of common HTTP- | HTTP means that it can make use of common HTTP-based approaches to | |||
based approaches to authentication and authorization, making it more | authentication and authorization, making it more useful than WHOIS in | |||
useful than Whois in the context of such directory services. Since | the context of such directory services. Since RDAP consequently | |||
RDAP consequently permits a reverse search implementation complying | permits a reverse search implementation complying with privacy | |||
with privacy protection principles, this first objection is not well- | protection principles, this first objection is not well-founded. | |||
founded. | ||||
The second objection to the implementation of a reverse search | The second objection to the implementation of a reverse search | |||
capability has been connected with its impact on server processing. | capability has been connected with its impact on server processing. | |||
However, the core RDAP specifications already define search queries, | However, the core RDAP specifications already define search queries, | |||
with similar processing requirements, so the basis of this objection | with similar processing requirements, so the basis of this objection | |||
is not clear. | is not clear. | |||
Reverse searches, such as finding the list of domain names associated | Reverse searches, such as finding the list of domain names associated | |||
with contacts or nameservers, may be useful to registrars as well. | with contacts or nameservers, may be useful to registrars as well. | |||
Usually, registries adopt out-of-band solutions to provide results to | Usually, registries adopt out-of-band solutions to provide results to | |||
registrars asking for reverse searches on their domains. Possible | registrars asking for reverse searches on their domains. Possible | |||
reasons for such requests are: | reasons for such requests are: | |||
* the loss of synchronization between the registrar database and the | * the loss of synchronization between the registrar database and the | |||
registry database; | registry database and | |||
* the need for such data to perform bulk Extensible Provisioning | * the need for such data to perform bulk Extensible Provisioning | |||
Protocol (EPP) [RFC5730] updates (e.g. changing the contacts of a | Protocol (EPP) [RFC5730] updates (e.g., changing the contacts of a | |||
set of domains, etc.). | set of domains, etc.). | |||
Currently, RDAP does not provide any means for a client to search for | Currently, RDAP does not provide any means for a client to search for | |||
the collection of domains associated with an entity [RFC9082]. A | the collection of domains associated with an entity [RFC9082]. A | |||
query (lookup or search) on domains can return the array of entities | query (lookup or search) on domains can return the array of entities | |||
related to a domain with different roles (registrant, registrar, | related to a domain with different roles (registrant, registrar, | |||
administrative, technical, reseller, etc.), but the reverse operation | administrative, technical, reseller, etc.), but the reverse operation | |||
is not allowed. Only reverse searches to find the collection of | is not allowed. Only reverse searches to find the collection of | |||
domains related to a nameserver (ldhName or ip) can be requested. | domains related to a nameserver (ldhName or ip) can be requested. | |||
Since an entity can be in relationship with any RDAP object | Since an entity can be in relationship with any RDAP object | |||
[RFC9083], the availability of a reverse search as largely intended | [RFC9083], the availability of a reverse search as largely intended | |||
can be common to all the object classes allowed for search. Through | can be common to all the object classes allowed for search. Through | |||
a further step of generalization, the meaning of reverse search in | a further step of generalization, the meaning of reverse search in | |||
the RDAP context can be extended to include any query for retrieving | the RDAP context can be extended to include any query for retrieving | |||
all the objects in relationship with another matching a given search | all the objects that relates to another query matching a given search | |||
pattern. | pattern. | |||
1.2. Conventions Used in This Document | 1.2. Conventions Used in This Document | |||
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. Reverse Search Path Segment Specification | 2. Reverse Search Path Segment Specification | |||
A generic reverse search path is described by the syntax: | A generic reverse search path is described by the syntax: | |||
{searchable-resource-type}/reverse_search/{related-resource- | {searchable-resource-type}/reverse_search/{related-resource- | |||
type}?<search-condition> | type}?<search-condition> | |||
The path segments are defined as in the following: | The path segments are defined as follows: | |||
"searchable-resource-type": it MUST be one of the resource types for | "searchable-resource-type": It MUST be one of the resource types for | |||
search defined in Section 3.2 of [RFC9082] (i.e. "domains", | search defined in Section 3.2 of [RFC9082] (i.e., "domains", | |||
"nameservers" and "entities") or a resource type extension; | "nameservers", and "entities") or a resource type extension. | |||
"related-resource-type": it MUST be one of the resource types for | "related-resource-type": It MUST be one of the resource types for | |||
lookup defined in Section 3.1 of [RFC9082] (i.e. "domain", | lookup defined in Section 3.1 of [RFC9082] (i.e., "domain", | |||
"nameserver", "entity", "ip" and "autnum") or a resource type | "nameserver", "entity", "ip", and "autnum") or a resource type | |||
extension; | extension. | |||
"search-condition": a sequence of "property=search pattern" | "search-condition": A sequence of "property=search pattern" | |||
predicates separated by the ampersand character ('&', US-ASCII | predicates separated by the ampersand character ('&', US-ASCII | |||
value 0x0026). | value 0x0026). | |||
While related-resource-type is defined as having one of a number of | While related-resource-type is defined as having one of a number of | |||
different values, the only reverse searches defined in this document | different values, the only reverse searches defined in this document | |||
are for a related-resource-type of "entity". Reverse searches for | are for a related-resource-type of "entity". Reverse searches for | |||
the other resource types specified in [RFC9082] and resource type | the other resource types specified in [RFC9082] and resource type | |||
extensions may be defined by future documents. | extensions may be defined by future documents. | |||
3. Reverse Search Definition | 3. Reverse Search Definition | |||
Based on the content of Section 2, defining a reverse search means to | Based on the content of Section 2, defining a reverse search means to | |||
define the triple <searchable resource type, related resource type, | define the triple <searchable resource type, related resource type, | |||
property> and the mapping with the corresponding RDAP object member. | property> and the mapping with the corresponding RDAP object member. | |||
The mapping is done through the use of a JSONPath expression | The mapping is done through the use of a JSONPath expression | |||
[I-D.ietf-jsonpath-base]. Reverse searches are registered in the | [RFC9535]. Reverse searches are registered in the "RDAP Reverse | |||
Reverse Search registry (see Section 12.2.3), whereas reverse search | Search" registry (see Section 11.2.3), whereas reverse search | |||
mappings are registered in the Reverse Search Mapping registry (see | mappings are registered in the "RDAP Reverse Search Mapping" registry | |||
Section 12.2.4). The reason for having two registries is that it may | (see Section 11.2.4). The reason for having two registries is that | |||
be possible for a single type of reverse search to rely on different | it may be possible for a single type of reverse search to rely on | |||
members, depending on the server's configuration (see Section 5). | different members, depending on the server's configuration (see | |||
Section 5). | ||||
All of the reverse searches defined by this document (see Section 8) | All of the reverse searches defined by this document (see Section 8) | |||
have property names that are the same as the name of the RDAP object | have property names that are the same as the name of the RDAP object | |||
member that is the subject of the search. For example, the reverse | member that is the subject of the search. For example, the reverse | |||
search with the property name "fn" relies on the value of the "fn" | search with the property name "fn" relies on the value of the "fn" | |||
member inside the jCard of an entity object. However, it is not | member inside the jCard of an entity object. However, it is not | |||
necessary that these two names be the same. In particular, remapping | necessary that these two names be the same. In particular, remapping | |||
of searches as part of the deprecation of an existing member (see | of searches as part of the deprecation of an existing member (see | |||
Section 5) will typically lead to a member with a different name | Section 5) will typically lead to a member with a different name | |||
being used for the search. | being used for the search. | |||
Servers MUST NOT provide or implement reverse searches or reverse | Servers MUST NOT provide or implement reverse searches or reverse | |||
search mappings that are not registered with IANA. | search mappings that are not registered with IANA. | |||
4. Reverse Search Properties Discovery | 4. Reverse Search Properties Discovery | |||
Servers complying with this specification MUST extend the help | Servers complying with this specification MUST extend the help | |||
response [RFC9083] with the "reverse_search_properties" member which | response [RFC9083] with the "reverse_search_properties" member that | |||
contains an array of objects with the following mandatory child | contains an array of objects with the following mandatory child | |||
members: | members: | |||
"searchableResourceType": the searchable resource type of the | "searchableResourceType": the searchable resource type of the | |||
reverse search query as defined in Section 2; | reverse search query, as defined in Section 2 | |||
"relatedResourceType": the related resource type of the reverse | "relatedResourceType": the related resource type of the reverse | |||
search query as defined in Section 2; | search query, as defined in Section 2 | |||
"property": the reverse search property used in the predicate of the | "property": the reverse search property used in the predicate of the | |||
reverse search query as defined in Section 2; | reverse search query, as defined in Section 2 | |||
An example of the help response including the | An example of the help response including the | |||
"reverse_search_properties" member is shown in Figure 2. | "reverse_search_properties" member is shown in Figure 2 | |||
5. Reverse Search Properties Mapping | 5. Reverse Search Properties Mapping | |||
To permit clients to determine the member used by the server for a | To permit clients to determine the member used by the server for a | |||
reverse search, servers MUST detail the mapping that is occurring by | reverse search, servers MUST detail the mapping that is occurring by | |||
adding the "reverse_search_properties_mapping" member to the topmost | adding the "reverse_search_properties_mapping" member to the topmost | |||
object of a reverse search response. This data is included in the | object of a reverse search response. This data structure is included | |||
search response, rather than in the help response, because it may | in the search response, rather than in the help response, because it | |||
differ depending on the query that is sent to the server. | may differ depending on the query that is sent to the server. | |||
Documents that deprecate or restructure RDAP responses such that a | Documents that deprecate or restructure RDAP responses such that a | |||
registered reverse search is no longer able to be used MUST either | registered reverse search is no longer able to be used MUST either | |||
note that the relevant reverse search is no longer available (in the | note that the relevant reverse search is no longer available (in the | |||
case of deprecation) or describe how to continue supporting the | case of deprecation) or describe how to continue supporting the | |||
relevant search by adding another mapping for the reverse search | relevant search by adding another mapping for the reverse search | |||
property (in the case of restructuring). | property (in the case of restructuring). | |||
The "reverse_search_properties_mapping" member contains an array of | The "reverse_search_properties_mapping" member contains an array of | |||
objects with the following mandatory child members: | objects with the following mandatory child members: | |||
"property": the reverse search property used in the predicate of the | "property": the reverse search property used in the predicate of the | |||
current query as defined in Section 2; | current query, as defined in Section 2 | |||
"propertyPath": the JSONPath expression of the object member (or | "propertyPath": the JSONPath expression of the object member (or | |||
members) corresponding to the reverse search property. | members) corresponding to the reverse search property | |||
The searchable and the related resource types are derived from the | The searchable and the related resource types are derived from the | |||
query, so there is no need to include them in addition to the | query, so there is no need to include them in addition to the | |||
property in this member. | property in this member. | |||
This member MUST be included for all properties used in the search, | This member MUST be included for all properties used in the search, | |||
regardless of whether that property has multiple registered mappings | regardless of whether that property has multiple registered mappings | |||
as at the time of the search, because new mappings may be registered | as at the time of the search, because new mappings may be registered | |||
at any time. | at any time. | |||
When applied to an object, the JSONPath expression MUST produce a | When applied to an object, the JSONPath expression MUST produce a | |||
list of values, each of which is a JSON number or string. | list of values, each of which is a JSON number or string. | |||
An example of a reverse search response including the | An example of a reverse search response including the | |||
"reverse_search_properties_mapping" member is shown in Figure 3. | "reverse_search_properties_mapping" member is shown in Figure 3. | |||
6. Reverse Search Response Specification | 6. Reverse Search Response Specification | |||
Reverse search responses use the formats defined in section 8 of | Reverse search responses use the formats defined in Section 8 of | |||
[RFC9083], which correspond to the searchable resource types defined | [RFC9083], which correspond to the searchable resource types defined | |||
in Section 2. | in Section 2. | |||
7. Reverse Search Query Processing | 7. Reverse Search Query Processing | |||
To process a reverse search, the server returns the objects from its | To process a reverse search, the server returns the objects from its | |||
data store that are of type searchable-resource-type and that match | data store that are of type searchable-resource-type and that match | |||
each of the predicates from the search conditions. To determine | each of the predicates from the search conditions. To determine | |||
whether an object matches a predicate, the server: | whether an object matches a predicate, the server: | |||
* applies the mapping it uses for the reverse search property to the | * applies the mapping it uses for the reverse search property to the | |||
object in order to generate a list of values, each of which MUST | object in order to generate a list of values, each of which MUST | |||
be a JSON number or string; and | be a JSON number or string and | |||
* checks whether the search pattern matches one or more of those | * checks whether the search pattern matches one or more of those | |||
values. | values. | |||
A search pattern matches a value where it equals the string | A search pattern matches a value where it equals the string | |||
representation of the value, or where it is a match for the value in | representation of the value or where it is a match for the value in | |||
accordance with the partial string matching behaviour defined in | accordance with the partial string matching behavior defined in | |||
section 4.1 of [RFC9082]. | Section 4.1 of [RFC9082]. | |||
Objects are only included in the search results if they satisfy all | Objects are only included in the search results if they satisfy all | |||
included predicates. This includes predicates that are for the same | included predicates. This includes predicates that are for the same | |||
property: it is necessary in such a case for the related object to | property; in such a case, it is necessary for the related object to | |||
match against each of those predicates. | match against each of those predicates. | |||
Servers MUST return an HTTP 501 (Not Implemented) [RFC9110] response | Servers MUST return an HTTP 501 (Not Implemented) [RFC9110] response | |||
to inform clients of unsupported reverse searches. | to inform clients of unsupported reverse searches. | |||
Based on their policy, servers MAY restrict how predicates are used | Based on their policy, servers MAY restrict how predicates are used | |||
to make a valid search condition, by returning a 400 (Bad Request) | to make a valid search condition by returning a 400 (Bad Request) | |||
response when a problematic request is received. | response when a problematic request is received. | |||
A given reverse search or reverse search mapping MAY define | A given reverse search or reverse search mapping MAY define | |||
additional or alternative search behaviour past that set out in this | additional or alternative search behavior past that set out in this | |||
section. | section. | |||
8. Reverse Searches Based on Entity Details | 8. Reverse Searches Based on Entity Details | |||
Since in RDAP, an entity can be associated with any other object | Since an entity can be associated with any other object class in | |||
class, the most common kind of reverse search is one based on an | RDAP, the most common kind of reverse search is one based on an | |||
entity's details. Such reverse searches arise from the query model | entity's details. Such reverse searches arise from the query model | |||
by setting the related resource type to "entity". | by setting the related resource type to "entity". | |||
By selecting a specific searchable resource type, the resulting | By selecting a specific searchable resource type, the resulting | |||
reverse search aims at retrieving all the objects (e.g. all the | reverse search aims at retrieving all the objects (e.g., all the | |||
domains) that are related to any entity object matching the search | domains) that are related to any entity object matching the search | |||
conditions. | conditions. | |||
This section defines the reverse search properties servers SHOULD | This section defines the reverse search properties servers SHOULD | |||
support for the domain, nameserver, and entity searchable resource | support for the domain, nameserver, entity-searchable resource types, | |||
types and the entity related resource type: | and entity-related resource type: | |||
Reverse search property: role | Reverse search property: role | |||
RDAP member path: $.entities[*].roles | RDAP member path: $.entities[*].roles | |||
Reference: Section 10.2.4 of [RFC9083] | Reference: Section 10.2.4 of [RFC9083] | |||
Reverse search property: handle | Reverse search property: handle | |||
RDAP member path: $.entities[*].handle | RDAP member path: $.entities[*].handle | |||
Reference: Section 5.1 of [RFC9083] | Reference: Section 5.1 of [RFC9083] | |||
Reverse search property: fn | Reverse search property: fn | |||
skipping to change at page 9, line 4 ¶ | skipping to change at line 369 ¶ | |||
format for vCard. | format for vCard. | |||
Examples of reverse search paths based on the domain-entity | Examples of reverse search paths based on the domain-entity | |||
relationship are presented in Figure 1. | relationship are presented in Figure 1. | |||
/domains/reverse_search/entity?handle=CID-40*&role=technical | /domains/reverse_search/entity?handle=CID-40*&role=technical | |||
/domains/reverse_search/entity?fn=Bobby*&role=registrant | /domains/reverse_search/entity?fn=Bobby*&role=registrant | |||
/domains/reverse_search/entity?handle=RegistrarX&role=registrar | /domains/reverse_search/entity?handle=RegistrarX&role=registrar | |||
Figure 1: Examples of reverse search queries | ||||
An example of the help response including the reverse search | Figure 1: Examples of Reverse Search Queries | |||
properties supported is shown below. | ||||
An example of the help response including the supported reverse | ||||
search properties is shown in Figure 2. | ||||
{ | { | |||
"rdapConformance": [ | "rdapConformance": [ | |||
"rdap_level_0", | "rdap_level_0", | |||
"reverse_search" | "reverse_search" | |||
], | ], | |||
... | ... | |||
"reverse_search_properties": [ | "reverse_search_properties": [ | |||
{ | { | |||
"searchableResourceType": "domains", | "searchableResourceType": "domains", | |||
skipping to change at page 9, line 40 ¶ | skipping to change at line 406 ¶ | |||
}, | }, | |||
{ | { | |||
"searchableResourceType": "domains", | "searchableResourceType": "domains", | |||
"relatedResourceType": "entity", | "relatedResourceType": "entity", | |||
"property": "role" | "property": "role" | |||
} | } | |||
], | ], | |||
... | ... | |||
} | } | |||
Figure 2: An example of help response including the | Figure 2: An Example of the Help Response including the | |||
"reverse_search_properties_mapping" member | "reverse_search_properties" Member | |||
An example of a response including the mapping that is occurring for | An example of a response including the mapping that is occurring for | |||
the first reverse search in Figure 1 is shown below. | the first reverse search in Figure 1 is shown below. | |||
{ | { | |||
"rdapConformance": [ | "rdapConformance": [ | |||
"rdap_level_0", | "rdap_level_0", | |||
"reverse_search" | "reverse_search" | |||
], | ], | |||
... | ... | |||
skipping to change at page 10, line 24 ¶ | skipping to change at line 431 ¶ | |||
"propertyPath": "$.entities[*].handle" | "propertyPath": "$.entities[*].handle" | |||
}, | }, | |||
{ | { | |||
"property": "role", | "property": "role", | |||
"propertyPath": "$.entities[*].roles" | "propertyPath": "$.entities[*].roles" | |||
} | } | |||
], | ], | |||
... | ... | |||
} | } | |||
Figure 3: An example of an RDAP response including the | Figure 3: An Example of an RDAP Response including the | |||
"reverse_search_properties" member | "reverse_search_properties_mapping" Member | |||
9. RDAP Conformance | 9. RDAP Conformance | |||
Servers complying with this specification MUST include the value | Servers complying with this specification MUST include the value | |||
"reverse_search" in the rdapConformance property of the help response | "reverse_search" in the rdapConformance property of the help response | |||
[RFC9083] and any other response including the | [RFC9083] and any other response including the | |||
"reverse_search_properties_mapping" member. The information needed | "reverse_search_properties_mapping" member. The information needed | |||
to register this value in the "RDAP Extensions" registry is described | to register this value in the "RDAP Extensions" registry is described | |||
in Section 12.1. | in Section 11.1. | |||
10. Implementation Considerations | 10. Implementation Considerations | |||
To limit the impact of processing the search predicates, servers are | To limit the impact of processing the search predicates, servers are | |||
RECOMMENDED to make use of techniques to speed up the data retrieval | RECOMMENDED to make use of techniques to speed up the data retrieval | |||
in their underlying data store such as indexes or similar. In | in their underlying data store, such as indexes or similar. In | |||
addition, risks with respect to performance degradation or result set | addition, risks with respect to performance degradation or result set | |||
generation can be mitigated by adopting practices used for standard | generation can be mitigated by adopting practices used for standard | |||
searches, e.g. restricting the search functionality, limiting the | searches, e.g., restricting the search functionality, limiting the | |||
rate of search requests according to the user's authorization, | rate of search requests according to the user's authorization, | |||
truncating and paging the results [RFC8977], and returning partial | truncating and paging the results [RFC8977], and returning partial | |||
responses [RFC8982]. | responses [RFC8982]. | |||
11. Implementation Status | 11. IANA Considerations | |||
NOTE: Please remove this section and the reference to RFC 7942 prior | ||||
to publication as an RFC. | ||||
This section records the status of known implementations of the | ||||
protocol defined by this specification at the time of posting of this | ||||
Internet-Draft, and is based on a proposal described in [RFC7942]. | ||||
The description of implementations in this section is intended to | ||||
assist the IETF in its decision processes in progressing drafts to | ||||
RFCs. Please note that the listing of any individual implementation | ||||
here does not imply endorsement by the IETF. Furthermore, no effort | ||||
has been spent to verify the information presented here that was | ||||
supplied by IETF contributors. This is not intended as, and must not | ||||
be construed to be, a catalog of available implementations or their | ||||
features. Readers are advised to note that other implementations may | ||||
exist. | ||||
According to RFC 7942, "this will allow reviewers and working groups | ||||
to assign due consideration to documents that have the benefit of | ||||
running code, which may serve as evidence of valuable experimentation | ||||
and feedback that have made the implemented protocols more mature. | ||||
It is up to the individual working groups to use this information as | ||||
they see fit". | ||||
11.1. IIT-CNR/Registro.it RDAP Server | ||||
* Responsible Organization: Institute of Informatics and Telematics | ||||
of National Research Council (IIT-CNR)/Registro.it | ||||
* Location: https://rdap.pubtest.nic.it/ | ||||
* Description: This implementation includes support for RDAP queries | ||||
using data from the public test environment of .it ccTLD. Reverse | ||||
search is allowed to authenticated users. Registrar users are | ||||
allowed to perform reverse searches on their own domains and | ||||
contacts. This is achieved by adding an implicit predicate to the | ||||
search condition. | ||||
* Level of Maturity: This is an "alpha" test implementation. | ||||
* Coverage: This implementation includes all of the features | ||||
described in this specification. | ||||
* Contact Information: Mario Loffredo, mario.loffredo@iit.cnr.it | ||||
11.2. IIT-CNR/Registro.it RDAP Client | 11.1. RDAP Extensions Registry | |||
* Responsible Organization: Institute of Informatics and Telematics | IANA has registered the following value in the "RDAP Extensions" | |||
of National Research Council (IIT-CNR)/Registro.it | registry: | |||
* Location: https://web-rdap.pubtest.nic.it/ | ||||
* Description: This is a Javascript web-based RDAP client. RDAP | ||||
responses are retrieved from RDAP servers by the browser, parsed | ||||
into an HTML representation, and displayed in a format improving | ||||
the user experience. Reverse search is allowed to authenticated | ||||
users. | ||||
* Level of Maturity: This is an "alpha" test implementation. | ||||
* Coverage: This implementation includes all of the features | Extension Identifier: reverse_search | |||
described in this specification. | ||||
* Contact Information: Francesco Donini, francesco.donini@iit.cnr.it | ||||
12. IANA Considerations | Registry Operator: Any | |||
12.1. RDAP Extensions Registry | Specification: RFC 9536 | |||
IANA is requested to register the following value in the "RDAP | Contact: IETF <iesg@ietf.org> | |||
Extensions" registry: | ||||
* Extension identifier: reverse_search | Intended Usage: This extension identifier is used for both URI path | |||
* Registry operator: Any | segments and response extensions related to the reverse search in | |||
* Published specification: This document. | RDAP. | |||
* Contact: IETF <iesg@ietf.org> | ||||
* Intended usage: This extension identifier is used for both URI | ||||
path segments and response extensions related to the reverse | ||||
search in RDAP. | ||||
12.2. RDAP Reverse Search Registries | 11.2. RDAP Reverse Search Registries | |||
12.2.1. Creation of the RDAP Reverse Search Registries | 11.2.1. Creation of the RDAP Reverse Search Registries | |||
IANA is requested to create the "RDAP Reverse Search" and "RDAP | IANA has created the "RDAP Reverse Search" and "RDAP Reverse Search | |||
Reverse Search Mapping" registries within the group "Registration | Mapping" registries within the "Registration Data Access Protocol | |||
Data Access Protocol (RDAP)". | (RDAP)" category in the protocol registries. | |||
These registries follow the Specification Required process as defined | These registries follow the Specification Required registration | |||
in Section 4.5 of [RFC8126]. | policy, as defined in Section 4.6 of [RFC8126]. | |||
The designated expert should prevent collisions and confirm that | The designated expert should prevent collisions and confirm that | |||
suitable documentation, as described in Section 4.6 of [RFC8126], is | suitable documentation, as described in Section 4.5 of [RFC8126], is | |||
available to ensure interoperability. | available to ensure interoperability. | |||
Creators of either new RDAP reverse searches or new mappings for | Creators of either new RDAP reverse searches or new mappings for | |||
registered reverse searches SHOULD NOT replicate functionality | registered reverse searches SHOULD NOT replicate functionality | |||
already available by way of other documents referenced in these | already available by way of other documents referenced in these | |||
registries. Creators MAY register additional reverse search mappings | registries. Creators MAY register additional reverse search mappings | |||
for existing properties, but they SHOULD NOT map a registered reverse | for existing properties, but they SHOULD NOT map a registered reverse | |||
search property to a response field with a meaning other than that of | search property to a response field with a meaning other than that of | |||
the response fields referenced by the mappings already registered for | the response fields referenced by the mappings already registered for | |||
that property. In other words, all the mappings for a reverse search | that property. In other words, all the mappings for a reverse search | |||
property MUST point to response fields with the same meaning. | property MUST point to response fields with the same meaning. | |||
12.2.2. Submit Request to IANA | 11.2.2. Submit Requests to IANA | |||
Registration requests can be sent to <iana@iana.org>. | Registration requests can be sent to <iana@iana.org>. | |||
12.2.3. RDAP Reverse Search Registry | 11.2.3. RDAP Reverse Search Registry | |||
12.2.3.1. Template | 11.2.3.1. Template | |||
"Searchable Resource Type": The searchable resource type of the | Property: The name of the reverse search property. | |||
Description: A brief human-readable text describing the reverse | ||||
search property. | ||||
Searchable Resource Type: The searchable resource type of the | ||||
reverse search query (Section 2) including the reverse search | reverse search query (Section 2) including the reverse search | |||
property. Multiple reverse search properties differing only by | property. Multiple reverse search properties differing only by | |||
this field can be grouped together by listing all the searchable | this field can be grouped together by listing all the searchable | |||
resource types separated by comma (see Section 12.2.3.2). | resource types separated by comma (see Section 11.2.3.2). | |||
"Related Resource Type": The related resource type of the reverse | Related Resource Type: The related resource type of the reverse | |||
search query (Section 2) including the reverse search property. | search query (Section 2) including the reverse search property. | |||
"Property": The name of the reverse search property. | Registrant: The name of the person registering the reverse search | |||
property. | ||||
"Description": A brief human-readable text describing the reverse | ||||
search property. | ||||
"Registrant Name": The name of the person registering the reverse | ||||
search property. | ||||
"Registrant Contact Information": An email address, postal address, | Contact Information: An email address, postal address, or some other | |||
or some other information to be used to contact the registrant. | information to be used to contact the registrant. | |||
"Reference": Document (e.g. the RFC number) and section reference | Reference: Document (e.g., the RFC number) and section reference | |||
where the reverse search property is specified. | where the reverse search property is specified. | |||
The combination of "Searchable Resource Type", "Related Resource | The combination of Searchable Resource Type, Related Resource Type, | |||
Type" and "Property" MUST be unique across the registry entries. | and Property MUST be unique across the registry entries. | |||
12.2.3.2. Initial Content | ||||
IANA is requested to register the following entries in the "RDAP | 11.2.3.2. Initial Content | |||
Reverse Search" registry. | ||||
For all entries, the common values are shown in Table 1 whereas the | IANA has registered the following entries in the "RDAP Reverse | |||
specific values are shown in Table 2. | Search" registry. For all entries, the common values are shown in | |||
Table 1, whereas the specific values are shown in Table 2. | ||||
+================================+================================+ | +==========================+================================+ | |||
| Registry Property | Value | | | Registry Property | Value | | |||
+================================+================================+ | +==========================+================================+ | |||
| Searchable Resource Type | domains, nameservers, entities | | | Searchable Resource Type | domains, nameservers, entities | | |||
+--------------------------------+--------------------------------+ | +--------------------------+--------------------------------+ | |||
| Related Resource Type | entity | | | Related Resource Type | entity | | |||
+--------------------------------+--------------------------------+ | +--------------------------+--------------------------------+ | |||
| Registrant Name | IETF | | | Registrant | IETF | | |||
+--------------------------------+--------------------------------+ | +--------------------------+--------------------------------+ | |||
| Registrant Contact Information | iesg@ietf.org | | | Contact Information | iesg@ietf.org | | |||
+--------------------------------+--------------------------------+ | +--------------------------+--------------------------------+ | |||
| Reference | This document, Section 8 | | | Reference | RFC 9536 | | |||
+--------------------------------+--------------------------------+ | +--------------------------+--------------------------------+ | |||
Table 1: Common values for all entries in the "RDAP Reverse | Table 1: Common Values for All Entries in the RDAP | |||
Search" registry | Reverse Search Registry | |||
+==========+==============================================+ | +==========+==============================================+ | |||
| Property | Description | | | Property | Description | | |||
+==========+==============================================+ | +==========+==============================================+ | |||
| fn | The server supports the domain/nameserver/ | | | fn | The server supports the domain/nameserver/ | | |||
| | entity search based on the full name (a.k.a. | | | | entity search based on the full name (a.k.a. | | |||
| | formatted name) of an associated entity | | | | formatted name) of an associated entity | | |||
+----------+----------------------------------------------+ | +----------+----------------------------------------------+ | |||
| handle | The server supports the domain/nameserver/ | | | handle | The server supports the domain/nameserver/ | | |||
| | entity search based on the handle of an | | | | entity search based on the handle of an | | |||
skipping to change at page 14, line 42 ¶ | skipping to change at line 576 ¶ | |||
+----------+----------------------------------------------+ | +----------+----------------------------------------------+ | |||
| email | The server supports the domain/nameserver/ | | | email | The server supports the domain/nameserver/ | | |||
| | entity search based on the email address of | | | | entity search based on the email address of | | |||
| | an associated entity | | | | an associated entity | | |||
+----------+----------------------------------------------+ | +----------+----------------------------------------------+ | |||
| role | The server supports the domain/nameserver/ | | | role | The server supports the domain/nameserver/ | | |||
| | entity search based on the role of an | | | | entity search based on the role of an | | |||
| | associated entity | | | | associated entity | | |||
+----------+----------------------------------------------+ | +----------+----------------------------------------------+ | |||
Table 2: Specific values for all entries in the "RDAP | Table 2: Specific Values for Entries in the RDAP | |||
Reverse Search" registry | Reverse Search Registry | |||
12.2.4. RDAP Reverse Search Mapping Registry | ||||
12.2.4.1. Template | 11.2.4. RDAP Reverse Search Mapping Registry | |||
"Searchable Resource Type": The same as defined in the "Reverse | 11.2.4.1. Template | |||
Search Registry". | ||||
"Related Resource Type": The same as defined in the "Reverse Search | Property: The same as defined in the "RDAP Reverse Search" registry. | |||
Registry". | ||||
"Property": The same as defined in the "Reverse Search Registry". | Property Path: The JSONPath of the RDAP property this reverse search | |||
property maps to. | ||||
"Property Path": The JSONPath of the RDAP property this reverse | Searchable Resource Type: The same as defined in the "RDAP Reverse | |||
search property maps to. | Search" registry. | |||
"Description": A brief human-readable text describing this reverse | Related Resource Type: The same as defined in the "RDAP Reverse | |||
search property mapping. | Search" registry. | |||
"Registrant Name": The name of the person registering this reverse | Registrant: The name of the person registering this reverse search | |||
search property mapping. | property mapping. | |||
"Registrant Contact Information": The same as defined in the | Contact Information: The same as defined in the "RDAP Reverse | |||
"Reverse Search Registry". | Search" registry. | |||
"Reference": Document (e.g. the RFC number) and section reference | Reference: Document (e.g., the RFC number) and section reference | |||
where this reverse search property mapping is specified. | where this reverse search property mapping is specified. | |||
The combination of "Searchable Resource Type", "Related Resource | The combination of Searchable Resource Type, Related Resource Type, | |||
Type", "Property" and "Property Path" MUST be unique across the | Property, and Property Path MUST be unique across the registry | |||
registry entries. | entries. | |||
12.2.4.2. Initial Content | ||||
IANA is requested to register the following entries in the "RDAP | 11.2.4.2. Initial Content | |||
Reverse Search Mapping" registry. | ||||
For all entries, the common values are the same as defined in the | IANA has registered the following entries in the "RDAP Reverse Search | |||
"RDAP Reverse Search" registry (see Table 1) whereas the specific | Mapping" registry. For all entries, the common values are the same | |||
values are shown in Table 3. | as defined in the "RDAP Reverse Search" registry (see Table 1), | |||
whereas the specific values are shown below (see Table 3). | ||||
+==========+==================================================+ | +==========+==================================================+ | |||
| Property | Property Path | | | Property | Property Path | | |||
+==========+==================================================+ | +==========+==================================================+ | |||
| fn | $.entities[*].vcardArray[1][?(@[0]=='fn')][3] | | | fn | $.entities[*].vcardArray[1][?(@[0]=='fn')][3] | | |||
+----------+--------------------------------------------------+ | +----------+--------------------------------------------------+ | |||
| handle | $.entities[*].handle | | | handle | $.entities[*].handle | | |||
+----------+--------------------------------------------------+ | +----------+--------------------------------------------------+ | |||
| email | $.entities[*].vcardArray[1][?(@[0]=='email')][3] | | | email | $.entities[*].vcardArray[1][?(@[0]=='email')][3] | | |||
+----------+--------------------------------------------------+ | +----------+--------------------------------------------------+ | |||
| role | $.entities[*].roles | | | role | $.entities[*].roles | | |||
+----------+--------------------------------------------------+ | +----------+--------------------------------------------------+ | |||
Table 3: Specific values for all entries in the "RDAP | Table 3: Specific Values for Entries in the RDAP Reverse | |||
Reverse Search Mapping" registry | Search Mapping Registry | |||
13. Privacy Considerations | 12. Privacy Considerations | |||
The search functionality defined in this document may affect the | The search functionality defined in this document may affect the | |||
privacy of entities in the registry (and elsewhere) in various ways: | privacy of entities in the registry (and elsewhere) in various ways; | |||
see [RFC6973] for a general treatment of privacy in protocol | see [RFC6973] for a general treatment of privacy in protocol | |||
specifications. Registry operators should be aware of the tradeoffs | specifications. Registry operators should be aware of the trade-offs | |||
that result from implementation of this functionality. | that result from implementing this functionality. | |||
Many jurisdictions have laws or regulations that restrict the use of | Many jurisdictions have laws or regulations that restrict the use of | |||
"Personal Data", per the definition in [RFC6973]. Given that, | "personal data", per the definition in [RFC6973]. Given that, | |||
registry operators should ascertain whether the regulatory | registry operators should ascertain whether the regulatory | |||
environment in which they operate permits implementation of the | environment in which they operate permits implementation of the | |||
functionality defined in this document. | functionality defined in this document. | |||
In those cases where this functionality makes use of sensitive | In those cases where this functionality makes use of sensitive | |||
information, it MUST only be accessible to authorized users supported | information, the information MUST only be accessible to authorized | |||
by lawful basis. | users under a lawful basis. | |||
Since reverse search requests and responses could contain Personally | Since reverse search requests and responses could contain Personally | |||
Identifiable Information (PII), reverse search functionality MUST be | Identifiable Information (PII), reverse search functionality MUST be | |||
available over HTTPS only. | available over HTTPS only. | |||
Providing reverse search in RDAP carries the following threats as | Providing reverse search in RDAP carries the following threats as | |||
described in [RFC6973]: | described in [RFC6973]: | |||
* Correlation | * Correlation | |||
* Disclosure | * Disclosure | |||
* Misuse of information | ||||
* Misuse of data | ||||
Therefore, RDAP providers need to mitigate the risk of those threats | Therefore, RDAP providers need to mitigate the risk of those threats | |||
by implementing appropriate measures supported by security services | by implementing appropriate measures supported by security services | |||
(see Section 14). | (see Section 13). | |||
14. Security Considerations | 13. Security Considerations | |||
Security services required to provide controlled access to the | Security services that are required to provide controlled access to | |||
operations specified in this document are described in [RFC7481]. A | the operations specified in this document are described in [RFC7481]. | |||
non-exhaustive list of access control paradigms an RDAP provider can | A non-exhaustive list of access control paradigms an RDAP provider | |||
implement is presented in Appendix A. | can implement is presented in Appendix A. | |||
As an additional measure to enforce security by preventing reverse | As an additional measure to enforce security by preventing reverse | |||
searches to be accessed from unauthorized users, the RDAP providers | searches to be accessed from unauthorized users, the RDAP providers | |||
may consider to physically separate the reverse search endpoints from | may consider physically separating the reverse search endpoints from | |||
the other ones by configuring a proxy routing the reverse searches to | the other ones by configuring a proxy routing the reverse searches to | |||
a dedicated backend server and leveraging further security services | a dedicated backend server and leveraging further security services | |||
offered by other protocol layers such as digital certificates and IP | offered by other protocol layers, such as digital certificates and IP | |||
whitelisting. | allow-listing. | |||
Finally, the specification of the relationship within the reverse | Finally, the specification of the relationship within the reverse | |||
search path allows the RDAP servers to implement different | search path allows the RDAP servers to implement different | |||
authorization policies on a per-relationship basis. | authorization policies on a per-relationship basis. | |||
15. Acknowledgements | 14. References | |||
The authors would like to acknowledge the following individuals for | ||||
their contributions to this document: Francesco Donini, Scott | ||||
Hollenbeck, Francisco Arias, Gustavo Lozano, Eduardo Alvarez, Ulrich | ||||
Wisser, James Gould and Pawel Kowalik. | ||||
Tom Harrison and Jasdip Singh provided relevant feedback and constant | ||||
support to the implementation of this proposal. Their contributions | ||||
have been greatly appreciated. | ||||
16. References | ||||
16.1. Normative References | ||||
[I-D.ietf-jsonpath-base] | 14.1. Normative References | |||
Gössner, S., Normington, G., and C. Bormann, "JSONPath: | ||||
Query expressions for JSON", Work in Progress, Internet- | ||||
Draft, draft-ietf-jsonpath-base-20, 25 August 2023, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf- | ||||
jsonpath-base-20>. | ||||
[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>. | |||
[RFC6350] Perreault, S., "vCard Format Specification", RFC 6350, | [RFC6350] Perreault, S., "vCard Format Specification", RFC 6350, | |||
DOI 10.17487/RFC6350, August 2011, | DOI 10.17487/RFC6350, August 2011, | |||
<https://www.rfc-editor.org/info/rfc6350>. | <https://www.rfc-editor.org/info/rfc6350>. | |||
[RFC7095] Kewisch, P., "jCard: The JSON Format for vCard", RFC 7095, | [RFC7095] Kewisch, P., "jCard: The JSON Format for vCard", RFC 7095, | |||
DOI 10.17487/RFC7095, January 2014, | DOI 10.17487/RFC7095, January 2014, | |||
<https://www.rfc-editor.org/info/rfc7095>. | <https://www.rfc-editor.org/info/rfc7095>. | |||
[RFC7481] Hollenbeck, S. and N. Kong, "Security Services for the | [RFC7481] Hollenbeck, S. and N. Kong, "Security Services for the | |||
Registration Data Access Protocol (RDAP)", STD 95, | Registration Data Access Protocol (RDAP)", STD 95, | |||
RFC 7481, DOI 10.17487/RFC7481, March 2015, | RFC 7481, DOI 10.17487/RFC7481, March 2015, | |||
<https://www.rfc-editor.org/info/rfc7481>. | <https://www.rfc-editor.org/info/rfc7481>. | |||
[RFC7942] Sheffer, Y. and A. Farrel, "Improving Awareness of Running | ||||
Code: The Implementation Status Section", BCP 205, | ||||
RFC 7942, DOI 10.17487/RFC7942, July 2016, | ||||
<https://www.rfc-editor.org/info/rfc7942>. | ||||
[RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
Writing an IANA Considerations Section in RFCs", BCP 26, | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
RFC 8126, DOI 10.17487/RFC8126, June 2017, | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
<https://www.rfc-editor.org/info/rfc8126>. | <https://www.rfc-editor.org/info/rfc8126>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
[RFC9082] Hollenbeck, S. and A. Newton, "Registration Data Access | [RFC9082] Hollenbeck, S. and A. Newton, "Registration Data Access | |||
skipping to change at page 18, line 29 ¶ | skipping to change at line 729 ¶ | |||
[RFC9083] Hollenbeck, S. and A. Newton, "JSON Responses for the | [RFC9083] Hollenbeck, S. and A. Newton, "JSON Responses for the | |||
Registration Data Access Protocol (RDAP)", STD 95, | Registration Data Access Protocol (RDAP)", STD 95, | |||
RFC 9083, DOI 10.17487/RFC9083, June 2021, | RFC 9083, DOI 10.17487/RFC9083, June 2021, | |||
<https://www.rfc-editor.org/info/rfc9083>. | <https://www.rfc-editor.org/info/rfc9083>. | |||
[RFC9110] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | [RFC9110] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
Ed., "HTTP Semantics", STD 97, RFC 9110, | Ed., "HTTP Semantics", STD 97, RFC 9110, | |||
DOI 10.17487/RFC9110, June 2022, | DOI 10.17487/RFC9110, June 2022, | |||
<https://www.rfc-editor.org/info/rfc9110>. | <https://www.rfc-editor.org/info/rfc9110>. | |||
16.2. Informative References | [RFC9535] Gössner, S., Ed., Normington, G., Ed., and C. Bormann, | |||
Ed., "JSONPath: Query Expressions for JSON", RFC 9535, | ||||
DOI 10.17487/RFC9535, February 2024, | ||||
<https://www.rfc-editor.org/info/rfc9535>. | ||||
[ICANN-RA] Internet Corporation For Assigned Names and Numbers, | 14.2. Informative References | |||
"Registry Agreement", July 2017, | ||||
<https://newgtlds.icann.org/sites/default/files/ | ||||
agreements/agreement-approved-31jul17-en.pdf>. | ||||
[ICANN-RDS1] | [ICANN-RA] ICANN, "Base Registry Agreement", January 2024, | |||
Internet Corporation For Assigned Names and Numbers, | <https://www.icann.org/en/registry-agreements/base- | |||
"Final Report from the Expert Working Group on gTLD | agreement>. | |||
[ICANN-RDS] | ||||
ICANN, "Final Report from the Expert Working Group on gTLD | ||||
Directory Services: A Next-Generation Registration | Directory Services: A Next-Generation Registration | |||
Directory Service (RDS)", June 2014, | Directory Service (RDS)", June 2014, | |||
<https://www.icann.org/en/system/files/files/final-report- | <https://www.icann.org/en/system/files/files/final-report- | |||
06jun14-en.pdf>. | 06jun14-en.pdf>. | |||
[ICANN-RDS2] | [OIDCC] Sakimura, N., Bradley, J., Jones, M., de Medeiros, B., and | |||
Internet Corporation For Assigned Names and Numbers, | C. Mortimore, "OpenID Connect Core 1.0 incorporating | |||
"Final Issue Report on a Next-Generation gTLD RDS to | errata set 2", December 2023, | |||
Replace WHOIS", October 2015, | ||||
<http://whois.icann.org/sites/default/files/files/final- | ||||
issue-report-next-generation-rds-07oct15-en.pdf>. | ||||
[OIDCC] OpenID Foundation, "OpenID Connect Core incorporating | ||||
errata set 1", November 2014, | ||||
<http://openid.net/specs/openid-connect-core-1_0.html>. | <http://openid.net/specs/openid-connect-core-1_0.html>. | |||
[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>. | |||
[RFC5730] Hollenbeck, S., "Extensible Provisioning Protocol (EPP)", | [RFC5730] Hollenbeck, S., "Extensible Provisioning Protocol (EPP)", | |||
STD 69, RFC 5730, DOI 10.17487/RFC5730, August 2009, | STD 69, RFC 5730, DOI 10.17487/RFC5730, August 2009, | |||
<https://www.rfc-editor.org/info/rfc5730>. | <https://www.rfc-editor.org/info/rfc5730>. | |||
skipping to change at page 19, line 38 ¶ | skipping to change at line 781 ¶ | |||
[RFC8982] Loffredo, M. and M. Martinelli, "Registration Data Access | [RFC8982] Loffredo, M. and M. Martinelli, "Registration Data Access | |||
Protocol (RDAP) Partial Response", RFC 8982, | Protocol (RDAP) Partial Response", RFC 8982, | |||
DOI 10.17487/RFC8982, February 2021, | DOI 10.17487/RFC8982, February 2021, | |||
<https://www.rfc-editor.org/info/rfc8982>. | <https://www.rfc-editor.org/info/rfc8982>. | |||
Appendix A. Paradigms to Enforce Access Control on Reverse Search in | Appendix A. Paradigms to Enforce Access Control on Reverse Search in | |||
RDAP | RDAP | |||
Access control can be implemented according to different paradigms | Access control can be implemented according to different paradigms | |||
introducing increasingly stringent rules. The paradigms reported | introducing increasingly stringent rules. The paradigms listed below | |||
here in the following leverage the capabilities either built-in or | leverage the capabilities that are either built in or provided as | |||
provided as extensions by the OpenID Connect [OIDCC]: | extensions by the OpenID Connect [OIDCC]: | |||
* Role-Based Access Control (RBAC): access rights are granted | Role-Based Access Control (RBAC): Access rights are granted | |||
depending on roles. Generally, this is done by grouping users | depending on roles. Generally, this is done by grouping users | |||
into fixed categories and assigning static grants to each | into fixed categories and assigning static grants to each | |||
category. A more dynamic approach can be implemented by using the | category. A more dynamic approach can be implemented by using the | |||
OpenID Connect "scope" claim; | OpenID Connect "scope" claim. | |||
* Purpose-Based Access Control (PBAC): access rules are based on the | ||||
Purpose-Based Access Control (PBAC): Access rules are based on the | ||||
notion of purpose, being the intended use of some data by a user. | notion of purpose, being the intended use of some data by a user. | |||
It can be implemented by tagging a request with the usage purpose | It can be implemented by tagging a request with the usage purpose | |||
and making the RDAP server check the compliance between the given | and making the RDAP server check the compliance between the given | |||
purpose and the control rules applied to the data to be returned; | purpose and the control rules applied to the data to be returned. | |||
* Attribute-Based Access Control (ABAC): rules to manage access | Attribute-Based Access Control (ABAC): Rules to manage access rights | |||
rights are evaluated and applied according to specific attributes | are evaluated and applied according to specific attributes | |||
describing the context within which data are requested. It can be | describing the context within which data are requested. It can be | |||
implemented by setting within an out-of-band process additional | implemented within an out-of-band process by setting additional | |||
OpenID Connect claims describing the request context and making | OpenID Connect claims that describe the request context and make | |||
the RDAP server check the compliance between the given context and | the RDAP server check for compliance between the given context and | |||
the control rules applied to the data to be returned; | the control rules that are applied to the data to be returned. | |||
* Time-Based Access Control (TBAC): data access is allowed for a | ||||
limited time only. It can be implemented by assigning the users | ||||
with temporary credentials linked to access grants whose scope is | ||||
limited. | ||||
With regard to the privacy threats reported in Section 13, | Time-Based Access Control (TBAC): Data access is allowed for a | |||
limited time only. It can be implemented by assigning users | ||||
temporary credentials linked to access grants with limited scopes. | ||||
With regard to the privacy threats reported in Section 12, | ||||
correlation and disclosure can be mitigated by minimizing both the | correlation and disclosure can be mitigated by minimizing both the | |||
request features and the response data based on user roles (i.e. | request features and the response data based on user roles (i.e., | |||
RBAC). Misuse can be mitigated by checking for the purpose of the | RBAC). Misuse can be mitigated by checking for the purpose of the | |||
request (i.e. PBAC). It can be accomplished according to the | request (i.e., PBAC). It can be accomplished according to the | |||
following approaches: | following approaches: | |||
* Full Trust: the registry trusts the fairness of an accredited | Full Trust: The registry trusts the fairness of an accredited user. | |||
user. The requestor is always legitimized to submit his requests | The requestor is always legitimized to submit their requests under | |||
under a lawful basis. Additionally, he can be required to specify | a lawful basis. Additionally, they can be required to specify the | |||
the purpose as either a claim of his account or a query parameter. | purpose as either a claim of their account or a query parameter. | |||
In the former case, the purpose is assumed to be the same for | In the former case, the purpose is assumed to be the same for | |||
every request. In the latter case, the purpose must be one of | every request. In the latter case, the purpose must be one of | |||
those associated to the user; | those associated to the user. | |||
* Zero Trust: the registry requires documents assessing that the | ||||
Zero Trust: The registry requires documents that assess whether the | ||||
requestor is legitimized to submit a given request. It can be | requestor is legitimized to submit a given request. It can be | |||
implemented by assigning the requestor with temporary OpenID | implemented by assigning the requestor a temporary OpenID account | |||
account linked to the given request (i.e. TBAC) and describing | linked to the given request (i.e., TBAC) and describing the | |||
the request through a set of claims (i.e. ABAC). The association | request through a set of claims (i.e., ABAC). The association | |||
between the temporary account and the claims about the request is | between the temporary account and the claims about the request is | |||
made by an out-of-band application. In so doing, the RDAP server | made by an out-of-band application. In so doing, the RDAP server | |||
is able to check that the incoming request is consistent with the | is able to check that the incoming request is consistent with the | |||
request claims linked to the temporary account. | request claims linked to the temporary account. | |||
The two approaches can be used together: | The two approaches can be used together: | |||
* The former is suitable for users carrying out a task in the public | * The former is suitable for users carrying out a task in the public | |||
interest, or exercising their official authority (e.g. an officer | interest or exercising their official authority (e.g., an officer | |||
of a cybercrime agency). Similarly, registrars can submit reverse | of a cybercrime agency). Similarly, registrars can submit reverse | |||
searches on their domains and contacts based on their contractual | searches on their domains and contacts based on their contractual | |||
relationship with the domain holders. In this case, the query | relationship with the domain holders. In this case, the query | |||
results can be restricted to those pertaining a registrar by | results can be restricted to those pertaining to a registrar by | |||
adding an implicit predicate to the search condition. | adding an implicit predicate to the search condition. | |||
* The latter can be taken to allow domain name dispute resolution | * The latter can be taken to allow domain name dispute resolution | |||
service providers to request information in defense of the | service providers to request information in defense of the | |||
legitimate interests of complainants. | legitimate interests of complainants. | |||
Appendix B. Change Log | Acknowledgements | |||
00: Initial working group version ported from draft-loffredo-regext- | ||||
rdap-reverse-search-04 | ||||
01: Updated "Privacy Considerations" section. | ||||
02: Revised the text. | ||||
03: Refactored the query model. | ||||
04: Keepalive refresh. | ||||
05: Reorganized "Abstract". Corrected "Conventions Used in This | ||||
Document" section. Added "RDAP Conformance" section. Changed | ||||
"IANA Considerations" section. Added references to RFC7095 and | ||||
RFC8174. Other minor edits. | ||||
06: Updated "Privacy Considerations", "Security Considerations" and | ||||
"Acknowledgements" sections. Added some normative and informative | ||||
references. Added Appendix A. | ||||
07: Updated normative references. | ||||
08: Changed "Implementation Status" section. Updated informative | ||||
references. | ||||
09: Extended the query model to represent a reverse search based on | ||||
any relationship between the RDAP object classes. Changed the | ||||
path segment "role" into a query parameter. | ||||
10: Updated "Reverse Searches Based on Entity Details" section to | ||||
consider the use of JSContact format instead of jCard. Added | ||||
references to JSContact documents. | ||||
11: Updated the document based on Tom Harrison and James Gould | ||||
feedback: | ||||
* Updated section "RDAP Path Segment Specification": | ||||
- Clarified how servers must evaluate a reverse search | ||||
including predicates that are for the same property. | ||||
- Specified the error response servers must return when | ||||
receiving a wrong reverse search request according to their | ||||
policy. | ||||
- Clarified that searchs for the related-resource-type values | ||||
other than "entity" may be defined in future documents. | ||||
* Reviewed text in section "Reverse Searches Based on Entity | ||||
Details" about reverse searches based on custom response | ||||
extensions. | ||||
* Removed references to JSContact documents in section "Reverse | ||||
Searches Based on Entity Details". Moved the mapping between | ||||
jCard properties used in the RDAP response and JSContact | ||||
counterparts to draft-ietf-regext-rdap-jscontact. | ||||
* Added section "RDAP Response Specification". | ||||
* Changed the text to present reverse search as a single | ||||
extension with multiple features. | ||||
* Changed the definition of searchable-resource-type and related- | ||||
resource-type to consider also the resource type extensions. | ||||
* Replaced "reverse" with "reverse_search_0" in the generic | ||||
reverse search path. Updated Figure 1 accordingly. | ||||
* Removed the phrase "but with a special focus on its privacy | ||||
implications" from both the "Abstract" and the "Introduction". | ||||
Moved the mapping between jCard properties used in the RDAP | ||||
response and JSContact counterparts to draft-ietf-regext-rdap- | ||||
jscontact. | ||||
* Reviewed the text of "Privacy Considerations" section. | ||||
* Text cleaning. | ||||
12: Replaced "reverse_search_0" with "reverse_search" as both URI | ||||
path segment, extension identifier and rdapConformance tag to | ||||
match the working group consensus. | ||||
13: Done some minor text changes. | ||||
14: Revised text of first sentence and added references to RFC8977 | ||||
and RFC8982 in the "Implementation Considerations" section. | ||||
15: Moved RFC6973 from Normative References to Informative | ||||
References. Remnoved informative reference to draft-ietf-regext- | ||||
rdap-openid. Rephrased text in Appendix A accordingly. | ||||
16: Moved OIDC from Normative References to Informative References. | ||||
Added the "Reverse Search Properties Discovery" section. Added | ||||
"RDAP JSON Values Registry" as a subsection of the "IANA | ||||
Considerations" section. Rephrased the "Reverse Searches Based on | ||||
Entity Details" section to refer to the "Reverse Search Properties | ||||
Discovery" section. Updated the "Acknowledgements" section. | ||||
Minor text edits. | ||||
17: Revised the "Reverse Search Properties Discovery" section. | ||||
Replaced "RDAP JSON Values Registry" section with the "RDAP | ||||
Reverse Search Properties Registry" section. | ||||
18: Changed "Expert Review" with "Specification Required" in the | ||||
"Creation of the RDAP Reverse Search Properties Registry" section. | ||||
Renamed the "RDAP Reverse Search Properties Registry" into "RDAP | ||||
Reverse Search Registry". Aligned the RDAP Reverse Search | ||||
Registry template with the initial content. Introduced the | ||||
"reverse_search_properties_mapping" response extension. Added the | ||||
"RDAP Reverse Search Mapping Registry". Reorganized the document | ||||
to separate the implementation of a generic reverse search from | ||||
that based on domain-entity relationship. | ||||
19: Added the "Reverse Search Query Processing" section. Changed | ||||
the definition of search-condition in Section 2. Moved the | ||||
"Reverse Search Response Specification" section. Corrected | ||||
Figure 3. | ||||
20: | ||||
* Changed document title. | ||||
* Changed "Servers MUST NOT provide or implement unregistered | ||||
reverse searches or unregistered reverse search mappings." to | ||||
"Servers MUST NOT provide or implement reverse searches or | ||||
reverse search mappings that are not registered with IANA." in | ||||
Section 3. | ||||
* Changed "...that the RDAP response property "roles" must | The authors would like to acknowledge the following individuals for | |||
contain at least the specified role" to "...that the RDAP | their contributions to this document: Francesco Donini, Scott | |||
response property "roles" MUST contain at least the specified | Hollenbeck, Francisco Arias, Gustavo Lozano, Eduardo Alvarez, Ulrich | |||
role" in Section 8. | Wisser, James Gould, and Pawel Kowalik. | |||
* Changed the value of the "Intended usage" property of the "RDAP | ||||
Extensions Registry" entry in Section 12.1. | ||||
* Changed "..., reverse search functionality SHOULD be available | ||||
over HTTPS only." to "..., reverse search functionality MUST be | ||||
available over HTTPS only." in Section 13. | ||||
21: | ||||
* Added a sentence about servers signaling the unsupported | ||||
reverse searches to Section 7. | ||||
* Replaced "$.." with "$." in JSONPath expressions. | ||||
* Clarified that the registry group the new registries must be | ||||
added to is "Registration Data Access Protocol (RDAP)". | ||||
* Removed unused normative reference to RFC7480. | ||||
22: | ||||
* Expanded EPP acronym in Section 1. | ||||
* Moved RFC3912 and RFC5730 from normative to informative | ||||
references. | ||||
23: | ||||
* Replaced IESG with IETF as the Registrant Name for each entry | ||||
in the IANA registries. | ||||
* Rearranged the layout of the initial content for the IANA | ||||
registries. | ||||
* Added titles to figures. | ||||
* Repalced "RDAP providers are REQUIRED to" with "RDAP providers | ||||
need to" in Section 14. | ||||
* Text cleaning. | ||||
24: | ||||
* Added text to Section 12.2.1 to make the term "collisions" | ||||
clear enough for future DEs. | ||||
* Added titles to tables. | ||||
25: | ||||
* Added text to Section 1 to reference the implications of this | ||||
specification on efficiency, security and compliance with | ||||
privacy regulations. | ||||
* Changed text in Privacy Considerations to clarify that in those | ||||
cases where sensitive information are used, this feature MUST | ||||
be accessble to authorized users only. | ||||
* Added text to Section 14 to describe additional measures to | ||||
enforce the security. | ||||
* Added text to Appendix A to clarify how the proposed access | ||||
control paradigms can contribute to mitigate the threats listed | ||||
in Section 13. | ||||
* Moved the reference to RFC3912. | ||||
* Moved reference to draft-ietf-jsonpath-based to Normative | ||||
References. | ||||
* Text cleaning. | Tom Harrison and Jasdip Singh provided relevant feedback and constant | |||
support to the implementation of this proposal. Their contributions | ||||
have been greatly appreciated. | ||||
Authors' Addresses | Authors' Addresses | |||
Mario Loffredo | Mario Loffredo | |||
IIT-CNR/Registro.it | IIT-CNR/Registro.it | |||
Via Moruzzi,1 | Via Moruzzi,1 | |||
56124 Pisa | 56124 Pisa | |||
Italy | Italy | |||
Email: mario.loffredo@iit.cnr.it | Email: mario.loffredo@iit.cnr.it | |||
URI: http://www.iit.cnr.it | URI: http://www.iit.cnr.it | |||
End of changes. 124 change blocks. | ||||
506 lines changed or deleted | 284 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |