RFC 9536

Registration Data Access Protocol (RDAP) Reverse Search

๐Ÿ“… published April 2024, from ietf

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 (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 value 0x0026).

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 2
  • relatedResourceType: the related resource type of the reverse search query, as defined in Section 2
  • property: 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 2
  • propertyPath: 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