RFC 9536
Registration Data Access Protocol (RDAP) Reverse Search
Okay bestie, RFC 9536 is here and it's giving main character energy ๐ โจ
Title: Registration Data Access Protocol (RDAP) Reverse Search ๐ฆ Number: RFC 9536, from the Internet Engineering Task Force (IETF) ๐ธ Authors: M. Loffredo and M. Martinelli, both from IIT-CNR/Registro.it ๐ Category: Standards Track, so this is a real standard ๐ Date: April 2024 ISSN: 2070-1721 Obsoletes and updates: the header doesn't list any RFCs this one obsoletes or updates ๐ซถ
Abstract ๐
Okay so RDAP doesn't have a way to search for the list of domains linked to a group of entities that match a search pattern ๐ญ. An RDAP entity can be linked to any defined object class, and there are other relationships between RDAP object classes too, so a reverse search can be used for lots of things beyond the classic domain-entity setup ๐ฅ. This document describes an RDAP extension that lets servers offer reverse search, based on the relationship RDAP defines between the object class being searched and any related object class. The domain-entity reverse search is treated as one specific case ๐ง.
Status of This Memo ๐
This is an Internet Standards Track document, so it's an official standard โจ.
It comes from the IETF, and it represents the consensus of the IETF community. It got public review and was approved for publication by the Internet Engineering Steering Group (IESG) ๐. If you want more about Internet Standards, check Section 2 of RFC 7841 ๐.
For the current status, any errata, and how to send feedback, go to https://www.rfc-editor.org/info/rfc9536 ๐.
Copyright Notice ๐
Copyright (c) 2024 IETF Trust and the persons identified as the document authors. All rights reserved ๐.
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents, which you can find at https://trustee.ietf.org/license-info and which apply on the date this document was published. Please read these carefully, because they explain your rights and restrictions for this document ๐. Code Components pulled out of this document must include Revised BSD License text, as described in Section 4.e of the Trust Legal Provisions, and they come without warranty as described in the Revised BSD License โ ๏ธ.
Table of Contents ๐
1. Introduction
1.1. Background
1.2. Conventions Used in This Document
2. Reverse Search Path Segment Specification
3. Reverse Search Definition
4. Reverse Search Properties Discovery
5. Reverse Search Properties Mapping
6. Reverse Search Response Specification
7. Reverse Search Query Processing
8. Reverse Searches Based on Entity Details
9. RDAP Conformance
10. Implementation Considerations
11. IANA Considerations
11.1. RDAP Extensions Registry
11.2. RDAP Reverse Search Registries
11.2.1. Creation of the RDAP Reverse Search Registries
11.2.2. Submit Requests to IANA
11.2.3. RDAP Reverse Search Registry
11.2.3.1. Template
11.2.3.2. Initial Content
11.2.4. RDAP Reverse Search Mapping Registry
11.2.4.1. Template
11.2.4.2. Initial Content
12. Privacy Considerations
13. Security Considerations
14. References
14.1. Normative References
14.2. Informative References
Appendix A. Paradigms to Enforce Access Control on Reverse Search
in RDAP
Acknowledgements
Authors' Addresses
1. Introduction โจ
Okay so this spec wants to level up RDAP's query powers and responses so that reverse search works. It's based on the relationships RDAP defines between the object class being searched and a related object class. The domain-entity reverse search is treated as a particular case of this general model ๐ .
If you're a RDAP provider planning to implement this, you should think carefully about what it means for efficiency (see Section 10), security (see Section 13), and compliance with privacy regulations (see Section 12) for your RDAP service ๐ฅ.
1.1. Background ๐ธ
Reverse WHOIS is a service many web apps offer, and it lets people find the domain names owned by a person or company, starting from the owner's details like name and email ๐. It's been seen as useful for some legal purposes (for example, uncovering trademark infringement and detecting cybercrime). But making it a standardized WHOIS [RFC3912] capability got objected to for two main reasons, which now don't seem to clash with an RDAP implementation ๐ค.
The first objection is about the risk of privacy violation. The domain name community is, however, looking at a new generation of Registration Directory Services [ICANN-RDS] [ICANN-RA] that give access to sensitive data for some permissible purposes, under policies for requestor accreditation, authentication, and authorization. RDAP relies on HTTP, which means it can use common HTTP-based approaches to authentication and authorization, so it's more useful than WHOIS for these directory services ๐. Since RDAP can support a reverse search that follows privacy protection principles, this first objection isn't well-founded ๐.
The second objection is about the impact on server processing. But the core RDAP specifications already define search queries with similar processing requirements, so the basis for this objection isn't clear ๐คทโโ๏ธ.
Reverse searches, like finding the list of domain names linked to contacts or nameservers, could be useful for registrars too. Usually, registries use out-of-band solutions to give results to registrars asking for reverse searches on their domains. The reasons for these requests can be:
- the loss of synchronization between the registrar database and the registry database and
- the need for such data to perform bulk Extensible Provisioning Protocol (EPP) [RFC5730] updates (e.g., changing the contacts of a set of domains, etc.).
Right now, RDAP doesn't give a client any way to search for the collection of domains linked to an entity [RFC9082] ๐ญ. A query (lookup or search) on domains can return the array of entities related to a domain with different roles (registrant, registrar, administrative, technical, reseller, etc.), but the reverse direction isn't allowed. Only reverse searches for the collection of domains related to a nameserver (ldhName or ip) can be requested. Since an entity can be related to any RDAP object [RFC9083], a reverse search could be available across all the object classes allowed for search. Taking it one step further, the meaning of reverse search in RDAP can be extended to include any query that retrieves all the objects related to another query matching a given search pattern ๐ง.
1.2. Conventions Used in This Document ๐
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here ๐.
2. Reverse Search Path Segment Specification ๐
A generic reverse search path is described by this syntax:
{searchable-resource-type}/reverse_search/{related-resource-
type}?<search-condition>
Here's what the path segments mean ๐:
"searchable-resource-type": It MUST be one of the resource types for search defined in Section 3.2 of [RFC9082] (i.e., "domains", "nameservers", and "entities") or a resource type extension."related-resource-type": It MUST be one of the resource types for lookup defined in Section 3.1 of [RFC9082] (i.e., "domain", "nameserver", "entity", "ip", and "autnum") or a resource type extension."search-condition": A sequence of"property=search pattern"predicates separated by the ampersand character ('&', US-ASCII value0x0026).
Even though related-resource-type can be one of a bunch of different values, the only reverse searches this document defines are for a related-resource-type of "entity". Reverse searches for the other resource types specified in [RFC9082] and for resource type extensions may be defined by future documents ๐ฎ.
3. Reverse Search Definition ๐ฆ
Based on Section 2, defining a reverse search means defining the triple <searchable resource type, related resource type, property> and the mapping to the matching RDAP object member ๐. The mapping is done with a JSONPath expression [RFC9535]. Reverse searches are registered in the "RDAP Reverse Search" registry (see Section 11.2.3), while reverse search mappings are registered in the "RDAP Reverse Search Mapping" registry (see Section 11.2.4). The reason there are two registries is that a single type of reverse search may rely on different members, depending on the server's configuration (see Section 5) โ๏ธ.
All of the reverse searches defined by this document (see Section 8) have property names that match the name of the RDAP object member being searched. For example, the reverse search with the property name "fn" relies on the value of the "fn" member inside the jCard of an entity object. It's not necessary for these two names to be the same, though. In particular, remapping searches as part of the deprecation of an existing member (see Section 5) will typically lead to a member with a different name being used for the search ๐.
Servers MUST NOT provide or implement reverse searches or reverse search mappings that are not registered with IANA ๐ซ.
4. Reverse Search Properties Discovery ๐ง
Servers complying with this specification MUST extend the help response [RFC9083] with the "reverse_search_properties" member. That member contains an array of objects with the following mandatory child members ๐:
searchableResourceType: the searchable resource type of the reverse search query, as defined in Section 2relatedResourceType: the related resource type of the reverse search query, as defined in Section 2property: the reverse search property used in the predicate of the reverse search query, as defined in Section 2
An example of the help response including the "reverse_search_properties" member is shown in Figure 2
5. Reverse Search Properties Mapping โจ
okay so bestie, this is the part where the server has to show its homework ๐ง To let clients figure out which member the server used for a reverse search, servers MUST spell out the mapping by adding the reverse_search_properties_mapping member to the topmost object of a reverse search response. It lives in the search response and NOT the help response because the mapping can change depending on the query you send, and that's lowkey iconic ๐
Documents that deprecate or restructure RDAP responses so a registered reverse search can't be used anymore MUST do one of two things. If it's a deprecation, they MUST note that the reverse search is no longer available. If it's a restructuring, they MUST describe how to keep supporting that search by adding another mapping for the reverse search property ๐
The reverse_search_properties_mapping member holds an array of objects with these mandatory child members:
property: the reverse search property used in the predicate of the current query, as defined in Section 2propertyPath: the JSONPath expression of the object member (or members) that corresponds to the reverse search property
The searchable and related resource types come from the query itself, so you don't need to list them again in this member. Main character energy: the query already knows ๐
This member MUST be included for every property used in the search, even if that property has more than one registered mapping at search time. Why? Because new mappings can get registered at any time ๐ฆ
When the JSONPath expression is applied to an object, it MUST produce a list of values, and each value MUST be a JSON number or string ๐ธ
Figure 3 shows an example of a reverse search response that includes the reverse_search_properties_mapping member ๐
6. Reverse Search Response Specification ๐
Reverse search responses use the formats defined in Section 8 of [RFC9083], which correspond to the searchable resource types defined in Section 2. So the response shape is basically decided for you, no stress ๐ซถ
7. Reverse Search Query Processing ๐
okay this is the heart of it, so pay attention bestie ๐ญ To process a reverse search, the server returns the objects from its data store that are of type searchable-resource-type and that match each of the predicates from the search conditions. To check whether an object matches a predicate, the server:
- applies the mapping it uses for the reverse search property to the object, to generate a list of values, each of which MUST be a JSON number or string, and
- checks whether the search pattern matches one or more of those values.
A search pattern matches a value if it equals the string representation of the value, or if it matches the value under the partial string matching behavior defined in Section 4.1 of [RFC9082]. Partial matching is giving wildcard energy โจ
Objects only make it into the search results if they satisfy ALL included predicates. Yes, that includes predicates for the same property! In that case, the related object has to match against each of those predicates, no shortcuts ๐
Servers MUST return an HTTP 501 (Not Implemented) [RFC9110] response to tell clients about unsupported reverse searches ๐
Based on their policy, servers MAY restrict how predicates are used to make a valid search condition, and they do that by returning a 400 (Bad Request) response when a problematic request comes in. Boundaries are valid, bestie ๐
A given reverse search or reverse search mapping MAY define additional or alternative search behavior beyond what is set out in this section. Extra credit unlocked ๐ง
8. Reverse Searches Based on Entity Details ๐ฆ
An entity can be associated with any other object class in RDAP, so the most common kind of reverse search is the one based on an entity's details. These reverse searches come from the query model when the related resource type is set to entity ๐
By picking a specific searchable resource type, the reverse search aims to retrieve all the objects (e.g., all the domains) that are related to any entity object matching the search conditions. Chef's kiss ๐
This section defines the reverse search properties that servers SHOULD support for the domain, nameserver, and entity-searchable resource types, and for the entity-related resource type:
Reverse search property: role
RDAP member path: $.entities[*].roles
Reference: Section 10.2.4 of [RFC9083]
Reverse search property: handle
RDAP member path: $.entities[*].handle
Reference: Section 5.1 of [RFC9083]
Reverse search property: fn
RDAP member path: $.entities[*].vcardArray[1][?(@[0]=='fn')][3]
Reference: Section 6.2.1 of [RFC6350]
Reverse search property: email
RDAP member path: $.entities[*].vcardArray[1][?(@[0]=='email')][3]
Reference: Section 6.4.2 of [RFC6350]
If there's a predicate on the reverse search property "role", that means the RDAP response property "roles" MUST contain at least the specified role. Strict, but fair ๐ซถ
The last two properties are related to jCard elements [RFC7095], but the field references point to vCard [RFC6350], since jCard is just the JSON format for vCard. Two names, one vibe ๐ธ
Here are some examples of reverse search paths based on the domain-entity relationship, shown in Figure 1 ๐
/domains/reverse_search/entity?handle=CID-40*&role=technical
/domains/reverse_search/entity?fn=Bobby*&role=registrant
/domains/reverse_search/entity?handle=RegistrarX&role=registrar
Figure 1: Examples of Reverse Search Queries
Here's an example of the help response listing the supported reverse search properties, shown in Figure 2 ๐
{
"rdapConformance": [
"rdap_level_0",
"reverse_search"
],
...
"reverse_search_properties": [
{
"searchableResourceType": "domains",
"relatedResourceType": "entity",
"property": "fn"
},
{
"searchableResourceType": "domains",
"relatedResourceType": "entity",
"property": "handle"
},
{
"searchableResourceType": "domains",
"relatedResourceType": "entity",
"property": "email"
},
{
"searchableResourceType": "domains",
"relatedResourceType": "entity",
"property": "role"
}
],
...
}
Figure 2: An Example of the Help Response including the "reverse_search_properties" Member
Next up is a response that includes the mapping used for the first reverse search in Figure 1, shown in Figure 3 ๐
{
"rdapConformance": [
"rdap_level_0",
"reverse_search"
],
...
"reverse_search_properties_mapping": [
{
"property": "handle",
"propertyPath": "$.entities[*].handle"
},
{
"property": "role",
"propertyPath": "$.entities[*].roles"
}
],
...
}
Figure 3: An Example of an RDAP Response including the "reverse_search_properties_mapping" Member
9. RDAP Conformance ๐
Servers complying with this specification MUST include the value "reverse_search" in the rdapConformance property of the help response [RFC9083] and in any other response that includes the reverse_search_properties_mapping member. To register this value in the "RDAP Extensions" registry, check Section 11.1 ๐
10. Implementation Considerations ๐ง
To limit the impact of processing the search predicates, servers are RECOMMENDED to use techniques that speed up data retrieval in their underlying data store, such as indexes or similar. Performance issues around result set generation can also be mitigated by adopting practices used for standard searches. For example, you can restrict the search functionality, limit the rate of search requests according to the user's authorization, truncate and page the results [RFC8977], and return partial responses [RFC8982]. Protect your server like it's your main character ๐ฆ
11. IANA Considerations ๐ธ
11.1. RDAP Extensions Registry ๐
IANA has registered the following value in the "RDAP Extensions" registry:
Extension Identifier: reverse_search
Registry Operator: Any
Specification: RFC 9536
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.
11.2. RDAP Reverse Search Registries ๐
11.2.1. Creation of the RDAP Reverse Search Registries โจ
IANA has created the "RDAP Reverse Search" and "RDAP Reverse Search Mapping" registries within the "Registration Data Access Protocol (RDAP)" category in the protocol registries.
These registries follow the Specification Required registration policy, as defined in Section 4.6 of [RFC8126].
The designated expert should prevent collisions and confirm that suitable documentation, as described in Section 4.5 of [RFC8126], is available to ensure interoperability.
Creators of new RDAP reverse searches, or of new mappings for registered reverse searches, SHOULD NOT replicate functionality already available through other documents referenced in these registries. Creators MAY register additional reverse search mappings for existing properties, but they SHOULD NOT map a registered reverse search property to a response field with a meaning other than that of the response fields referenced by the mappings already registered for that property. In other words, all the mappings for a reverse search property MUST point to response fields with the same meaning. Consistency is everything ๐
11.2.2. Submit Requests to IANA ๐ฌ
Registration requests can be sent to <iana@iana.org>.
11.2.3. RDAP Reverse Search Registry ๐
11.2.3.1. Template ๐ฆ
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
property. Multiple reverse search properties differing only by
this field can be grouped together by listing all the searchable
resource types separated by comma (see Section 11.2.3.2).
Related Resource Type: The related resource type of the reverse
search query (Section 2) including the reverse search property.
Registrant: The name of the person registering the reverse search
property.
Contact Information: An email address, postal address, or some other
information to be used to contact the registrant.
Reference: Document (e.g., the RFC number) and section reference
where the reverse search property is specified.
The combination of Searchable Resource Type, Related Resource Type, and Property MUST be unique across the registry entries. Unique combos only, no copycats ๐
11.2.3.2. Initial Content
okay so IANA already put the starter entries in the "RDAP Reverse Search" registry ๐ Table 1 has the common values that every entry shares, and Table 2 has the specific ones ๐
+==========================+================================+
| Registry Property | Value |
+==========================+================================+
| Searchable Resource Type | domains, nameservers, entities |
+--------------------------+--------------------------------+
| Related Resource Type | entity |
+--------------------------+--------------------------------+
| Registrant | IETF |
+--------------------------+--------------------------------+
| Contact Information | iesg@ietf.org |
+--------------------------+--------------------------------+
| Reference | RFC 9536 |
+--------------------------+--------------------------------+
Table 1: Common Values for All Entries in the RDAP
Reverse Search Registry
+==========+==============================================+
| Property | Description |
+==========+==============================================+
| fn | The server supports the domain/nameserver/ |
| | entity search based on the full name (a.k.a. |
| | formatted name) of an associated entity |
+----------+----------------------------------------------+
| handle | The server supports the domain/nameserver/ |
| | entity search based on the handle of an |
| | associated entity |
+----------+----------------------------------------------+
| email | The server supports the domain/nameserver/ |
| | entity search based on the email address of |
| | an associated entity |
+----------+----------------------------------------------+
| role | The server supports the domain/nameserver/ |
| | entity search based on the role of an |
| | associated entity |
+----------+----------------------------------------------+
Table 2: Specific Values for Entries in the RDAP
Reverse Search Registry
11.2.4. RDAP Reverse Search Mapping Registry
11.2.4.1. Template
this is the blueprint for every new mapping entry ๐ง here's what each field means:
- Property: The same as defined in the "RDAP Reverse Search" registry.
- Property Path: The JSONPath of the RDAP property this reverse search property maps to.
- Searchable Resource Type: The same as defined in the "RDAP Reverse Search" registry.
- Related Resource Type: The same as defined in the "RDAP Reverse Search" registry.
- Registrant: The name of the person registering this reverse search property mapping.
- Contact Information: The same as defined in the "RDAP Reverse Search" registry.
- Reference: Document (e.g., the RFC number) and section reference where this reverse search property mapping is specified.
okay this part is non-negotiable ๐ The combination of Searchable Resource Type, Related Resource Type, Property, and Property Path MUST be unique across the registry entries. no duplicates, bestie ๐
11.2.4.2. Initial Content
IANA has registered the following entries in the "RDAP Reverse Search Mapping" registry ๐ธ For all entries, the common values are the same as defined in the "RDAP Reverse Search" registry (see Table 1), whereas the specific values are shown below (see Table 3).
+==========+==================================================+
| Property | Property Path |
+==========+==================================================+
| fn | $.entities[*].vcardArray[1][?(@[0]=='fn')][3] |
+----------+--------------------------------------------------+
| handle | $.entities[*].handle |
+----------+--------------------------------------------------+
| email | $.entities[*].vcardArray[1][?(@[0]=='email')][3] |
+----------+--------------------------------------------------+
| role | $.entities[*].roles |
+----------+--------------------------------------------------+
Table 3: Specific Values for Entries in the RDAP Reverse
Search Mapping Registry
12. Privacy Considerations
okay privacy time, and this one is serious ๐ The search functionality defined in this document may affect the privacy of entities in the registry (and elsewhere) in various ways. see [RFC6973] for a general treatment of privacy in protocol specifications. registry operators should be aware of the trade-offs that result from implementing this functionality ๐ฆ
many jurisdictions have laws or regulations that restrict the use of "personal data", per the definition in [RFC6973]. so registry operators should ascertain whether the regulatory environment they operate in permits implementation of the functionality defined in this document ๐
in those cases where this functionality makes use of sensitive information, the information MUST only be accessible to authorized users under a lawful basis. ๐ญ
since reverse search requests and responses could contain Personally Identifiable Information (PII), reverse search functionality MUST be available over HTTPS only ๐ซถ
providing reverse search in RDAP carries the following threats as described in [RFC6973]:
- Correlation
- Disclosure
- Misuse of data
so RDAP providers need to mitigate the risk of those threats by implementing appropriate measures supported by security services (see Section 13). ๐ก๏ธ
13. Security Considerations
this part is dramatic and I'm here for it ๐ Security services that are required to provide controlled access to the operations specified in this document are described in [RFC7481]. A non-exhaustive list of access control paradigms an RDAP provider can implement is presented in Appendix A.
as an additional measure to enforce security by preventing reverse searches from being accessed by unauthorized users, RDAP providers may consider physically separating the reverse search endpoints from the other ones. they can do this by configuring a proxy that routes the reverse searches to a dedicated backend server, and by leveraging further security services offered by other protocol layers, such as digital certificates and IP allow-listing ๐ฅ
finally, the specification of the relationship within the reverse search path allows RDAP servers to implement different authorization policies on a per-relationship basis โจ
14. References
14.1. Normative References
the normative ones are the must-reads ๐
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>.
[RFC6350] Perreault, S., "vCard Format Specification", RFC 6350,
DOI 10.17487/RFC6350, August 2011,
<https://www.rfc-editor.org/info/rfc6350>.
[RFC7095] Kewisch, P., "jCard: The JSON Format for vCard", RFC 7095,
DOI 10.17487/RFC7095, January 2014,
<https://www.rfc-editor.org/info/rfc7095>.
[RFC7481] Hollenbeck, S. and N. Kong, "Security Services for the
Registration Data Access Protocol (RDAP)", STD 95,
RFC 7481, DOI 10.17487/RFC7481, March 2015,
<https://www.rfc-editor.org/info/rfc7481>.
[RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for
Writing an IANA Considerations Section in RFCs", BCP 26,
RFC 8126, DOI 10.17487/RFC8126, June 2017,
<https://www.rfc-editor.org/info/rfc8126>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/info/rfc8174>.
[RFC9082] Hollenbeck, S. and A. Newton, "Registration Data Access
Protocol (RDAP) Query Format", STD 95, RFC 9082,
DOI 10.17487/RFC9082, June 2021,
<https://www.rfc-editor.org/info/rfc9082>.
[RFC9083] Hollenbeck, S. and A. Newton, "JSON Responses for the
Registration Data Access Protocol (RDAP)", STD 95,
RFC 9083, DOI 10.17487/RFC9083, June 2021,
<https://www.rfc-editor.org/info/rfc9083>.
[RFC9110] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke,
Ed., "HTTP Semantics", STD 97, RFC 9110,
DOI 10.17487/RFC9110, June 2022,
<https://www.rfc-editor.org/info/rfc9110>.
[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>.
14.2. Informative References
and these are the bonus reads for extra context ๐
[ICANN-RA] ICANN, "Base Registry Agreement", January 2024,
<https://www.icann.org/en/registry-agreements/base-
agreement>.
[ICANN-RDS]
ICANN, "Final Report from the Expert Working Group on gTLD
Directory Services: A Next-Generation Registration
Directory Service (RDS)", June 2014,
<https://www.icann.org/en/system/files/files/final-report-
06jun14-en.pdf>.
[OIDCC] Sakimura, N., Bradley, J., Jones, M., de Medeiros, B., and
C. Mortimore, "OpenID Connect Core 1.0 incorporating
errata set 2", December 2023,
<http://openid.net/specs/openid-connect-core-1_0.html>.
[RFC3912] Daigle, L., "WHOIS Protocol Specification", RFC 3912,
DOI 10.17487/RFC3912, September 2004,
<https://www.rfc-editor.org/info/rfc3912>.
[RFC5730] Hollenbeck, S., "Extensible Provisioning Protocol (EPP)",
STD 69, RFC 5730, DOI 10.17487/RFC5730, August 2009,
<https://www.rfc-editor.org/info/rfc5730>.
[RFC6973] Cooper, A., Tschofenig, H., Aboba, B., Peterson, J.,
Morris, J., Hansen, M., and R. Smith, "Privacy
Considerations for Internet Protocols", RFC 6973,
DOI 10.17487/RFC6973, July 2013,
<https://www.rfc-editor.org/info/rfc6973>.
[RFC8977] Loffredo, M., Martinelli, M., and S. Hollenbeck,
"Registration Data Access Protocol (RDAP) Query Parameters
for Result Sorting and Paging", RFC 8977,
DOI 10.17487/RFC8977, January 2021,
<https://www.rfc-editor.org/info/rfc8977>.
[RFC8982] Loffredo, M. and M. Martinelli, "Registration Data Access
Protocol (RDAP) Partial Response", RFC 8982,
DOI 10.17487/RFC8982, February 2021,
<https://www.rfc-editor.org/info/rfc8982>.
Appendix A. Paradigms to Enforce Access Control on Reverse Search in RDAP ๐ฆโจ
okay so this appendix is a whole buffet of access control paradigms, bestie ๐ they're basically different levels of "who gets to see what, and how strict are we being about it" ๐. The paradigms here lean on the stuff OpenID Connect [OIDCC] already gives you, either built in or through extensions, so nobody has to reinvent the wheel ๐ซถ
Role-Based Access Control (RBAC): ๐ access rights are handed out based on roles. Usually that means sorting users into fixed categories and giving each category its own static grants, which is very "everyone in this group gets this." A more dynamic move is using the OpenID Connect scope claim ๐
Purpose-Based Access Control (PBAC): ๐ธ rules are based on the purpose of the data use, meaning why a user wants the data in the first place ๐ง You tag the request with the usage purpose, and then the RDAP server checks whether that purpose fits the control rules attached to the data being returned. Very "tell me why, and I'll decide what you get" ๐
Attribute-Based Access Control (ABAC): ๐ rules are evaluated based on specific attributes that describe the context the data is being requested in. This can happen out-of-band by setting extra OpenID Connect claims that describe the request context, and then the RDAP server checks that the context matches the control rules on the returned data ๐ฅ
Time-Based Access Control (TBAC): โฐ data access is only allowed for a limited time ๐ It can be done by giving users temporary credentials that are tied to access grants with limited scopes. Main character energy, but make it expire ๐ฆ
Now, the privacy threats from Section 12 are the drama here ๐ญ Correlation and disclosure can be mitigated by minimizing both the request features and the response data based on user roles (that's RBAC, bestie ๐). Misuse can be mitigated by checking the purpose of the request (that's PBAC ๐). And it can be done in these ways:
Full Trust: ๐ซถ the registry trusts the fairness of an accredited user. The requestor is always legitimized to submit their requests under a lawful basis โจ They can also be required to specify the purpose, either as a claim on their account or as a query parameter. If it's the account claim, the purpose is assumed to be the same for every request ๐ If it's a query parameter, the purpose must be one of the ones associated with that user ๐
Zero Trust: ๐ง the registry requires documents that assess whether the requestor is legitimized to submit a given request ๐ It can be done by giving the requestor a temporary OpenID account linked to that specific request (TBAC ๐ฆ) and describing the request through a set of claims (ABAC ๐). The association between the temporary account and the request claims is made by an out-of-band application. Then the RDAP server can check that the incoming request is consistent with the request claims linked to the temporary account ๐
The two approaches can be used together, and honestly that's giving strong combo ๐ฅ
- The Full Trust approach is suitable for users doing a task in the public interest or exercising their official authority (e.g., an officer of a cybercrime agency) ๐ฎโโ๏ธ Registrars can also submit reverse searches on their domains and contacts, based on their contractual relationship with the domain holders ๐ In that case, the query results can be restricted to ones that pertain to a registrar by adding an implicit predicate to the search condition โจ
- The Zero Trust approach can be taken to let domain name dispute resolution service providers request information in defense of the legitimate interests of complainants โ๏ธ๐ธ
Acknowledgements ๐ซถ
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 ๐
Authors' Addresses ๐ฎ
Mario Loffredo
IIT-CNR/Registro.it
Via Moruzzi,1
56124 Pisa
Italy
Email: mario.loffredo@iit.cnr.it
URI: http://www.iit.cnr.it
Maurizio Martinelli
IIT-CNR/Registro.it
Via Moruzzi,1
56124 Pisa
Italy
Email: maurizio.martinelli@iit.cnr.it
URI: http://www.iit.cnr.it
๐ฆ where this page comes from
- ietf: rfc9536 2024-04
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms