RFC 9540

Discovery of Oblivious Services via Service Binding Records

πŸ“… published February 2024, from ietf

RFC 9540: Discovery of Oblivious Services via Service Binding Records πŸ¦‹

Okay bestie, this one is from the IETF (Internet Engineering Task Force) and it's Request for Comments 9540 πŸ“œ. The authors are T. Pauly from Apple Inc. and T. Reddy.K from Nokia πŸ’œ. It's on the Standards Track, the ISSN is 2070-1721, and it's dated February 2024 🌸. The title block doesn't list any RFCs that it obsoletes or updates, so it's not replacing or changing anything else ✨.

Abstract

Okay so the big idea is this πŸŽ€. The doc gives you a parameter you can stick inside Service Binding (SVCB) and HTTPS DNS resource records. When it's there, it says the service can be reached using Oblivious HTTP, because it offers an Oblivious Gateway Resource that you can use to get to the target πŸ¦‹. It also gives you a way to learn the key configuration of that discovered Oblivious Gateway Resource πŸ”‘.

Status of This Memo

This is an Internet Standards Track document πŸ’….

This document is a product of the Internet Engineering Task Force (IETF) 🌈. It represents the consensus of the IETF community. It went through public review and got approved for publication by the Internet Engineering Steering Group (IESG) πŸ‘‘. If you want more about Internet Standards, check out Section 2 of RFC 7841 🫢.

For the current status of this document, any errata, and how to send feedback, go to https://www.rfc-editor.org/info/rfc9540 πŸ’–.

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 (https://trustee.ietf.org/license-info) as they're in effect 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
2.  Conventions and Definitions
3.  Applicability
4.  The "ohttp" SvcParamKey
  4.1.  Use in HTTPS Service RRs
  4.2.  Use in DNS Server SVCB RRs
    4.2.1.  Use with DDR
    4.2.2.  Use with DNR
5.  Gateway Location
6.  Key Configuration Fetching
7.  Security and Privacy Considerations
  7.1.  Key Targeting Attacks
  7.2.  dohpath Targeting Attacks
8.  IANA Considerations
  8.1.  SVCB Service Parameter
  8.2.  Well-Known URI
9.  References
  9.1.  Normative References
  9.2.  Informative References
Authors' Addresses

1. Introduction ✨

Oblivious HTTP [OHTTP] lets clients encrypt the messages they exchange with an Oblivious Target Resource (target) πŸ”. Those messages get wrapped up in encrypted messages sent to an Oblivious Gateway Resource (gateway), which gives you Oblivious HTTP access to the target 🎁. You reach the gateway through an Oblivious Relay Resource (relay), which proxies the wrapped messages so the client's identity stays hidden πŸ¦‹. The whole setup is designed so that the relay can't look inside the messages, and the gateway and target can't figure out who the client is from a single transaction πŸ™ˆ.

Since Oblivious HTTP deployments usually need very specific coordination between clients, relays, and gateways, the key configuration is often shared in a custom way πŸ’…. But some deployments have clients discovering targets and their gateways more dynamically 🌸. For example, a network might run a DNS resolver that gives more optimized or more relevant DNS answers, and that resolver is reachable over Oblivious HTTP. The network might want to advertise that support through mechanisms like Discovery of Designated Resolvers [DDR] and Discovery of Network-designated Resolvers [DNR] πŸ‘‘. Clients can reach these gateways through trusted relays πŸ’œ.

This document defines a way to use DNS resource records (RRs) to advertise that an HTTP service supports Oblivious HTTP πŸŽ€. The advertisement is a parameter that can be included in Service Binding (SVCB) and HTTPS DNS RRs [SVCB] (Section 4) πŸ’–. When the parameter is present, it means the service can act as a target and has a gateway that can give access to that target 🧚.

The client learns the URI to use for the gateway through the well-known URI suffix [WELLKNOWN], "ohttp-gateway", which is accessed on the target (Section 5) 🫢. This means that for deployments that support this kind of discovery, the Gateway and Target Resources need to be on the same host πŸ“.

This document also defines a way to fetch a gateway's key configuration from the gateway (Section 6) πŸ”‘.

This mechanism doesn't help with discovering relays, because relay configuration is out of scope for this document πŸ™…. The models where this discovery mechanism applies are described in Section 3 🌈.

2. Conventions and Definitions πŸ“š

Okay, the key words get their own moment πŸ‘‘. In this document, the key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here πŸ’….

3. Applicability πŸ¦‹

There are multiple models where you can use the discovery mechanism defined in this document. These include:

  • Upgrading regular (non-proxied) HTTP to Oblivious HTTP. In this model, the client wants to talk to a specific target service and prefers Oblivious HTTP if it's available πŸ’–. The target service has a gateway that it offers for Oblivious HTTP access πŸŽ€. Once the client learns about the gateway, it "upgrades" its requests from non-proxied HTTP to Oblivious HTTP to reach the target service ✨.
  • Discovering alternative Oblivious HTTP services. In this model, the client has a default target service it already uses 🌸. For example, that could be a public DNS resolver that's reachable over Oblivious HTTP 🧚. The client is open to using alternative target services if it discovers them, since those might give more optimized or more relevant responses πŸ‘‘.

In both of these deployment models, the client is set up with a relay that it trusts for Oblivious HTTP transactions 🫢. That relay needs to provide either (1) generic access to gateways or (2) a service that lets clients check which gateways are accessible πŸ“.

4. The "ohttp" SvcParamKey πŸŽ€

The "ohttp" SvcParamKey is used to say that a service described in a SVCB RR can be accessed as a target through an associated gateway πŸ’œ. The service that the client queries hosts one or more Target Resources 🌈.

To reach the service's Target Resources using Oblivious HTTP, the client needs to send encapsulated messages to the Gateway Resource, and it also needs the gateway's key configuration. You can get both using the method described in Section 6 πŸ”‘.

Both the presentation and wire-format values for the "ohttp" parameter MUST be empty πŸ™ˆ.

Services can put the "ohttp" parameter in the mandatory parameter list if they're only accessible using Oblivious HTTP πŸ’…. Marking "ohttp" as mandatory means clients that don't understand the parameter will ignore that SVCB RR πŸ¦‹. Including "ohttp" without marking it mandatory advertises a service that's optionally available using Oblivious HTTP 🌸. Also, multiple SVCB RRs can be provided to indicate separate configurations ✨.

The media type used for encapsulated requests to a target service depends on the scheme of the SVCB RR 🧚. This document defines the interpretation for the "https" scheme [SVCB] and the "dns" scheme [DNS-SVCB] πŸ‘‘. Other schemes that want to use this parameter MUST define the interpretation and meaning of the configuration πŸ’–.

4.1. Use in HTTPS Service RRs 🌸

For the "https" scheme, which uses the HTTPS RR type instead of SVCB, the presence of the "ohttp" parameter means the target being described is an Oblivious HTTP service that's accessible using the default "message/bhttp" media type [OHTTP] [BINARY-HTTP] πŸŽ€.

For example, an HTTPS service RR for svc.example.com that supports Oblivious HTTP could look like this:

svc.example.com. 7200  IN HTTPS 1 . ( alpn=h2 ohttp )

A similar RR for a service that only supports Oblivious HTTP could look like this:

svc.example.com. 7200  IN HTTPS 1 . ( mandatory=ohttp ohttp )

4.2. Use in DNS Server SVCB RRs πŸ’…

For the "dns" scheme, as defined in [DNS-SVCB], the presence of the "ohttp" parameter means the DNS server being described has a DNS-over-HTTPS (DoH) service [DOH] that can be accessed using Oblivious HTTP πŸ¦‹. Requests to the resolver are sent to the gateway using binary HTTP with the default "message/bhttp" media type [BINARY-HTTP], and the inner requests use the application/dns-message media type [DOH] 🧚.

If the "ohttp" parameter is included in a DNS server SVCB RR, the "alpn" parameter MUST include at least one HTTP value (such as "h2" or "h3") πŸ™ˆ.

For DoH-capable recursive resolvers to work as Oblivious HTTP targets, their associated gateways need to be reachable through a client-trusted relay 🌈. DoH recursive resolvers used with the discovery mechanisms in this section can be publicly accessible or specific to a network πŸ“. In general, only publicly accessible DoH recursive resolvers will work as Oblivious HTTP targets, unless there's a coordinated deployment with a relay that can reach the network-specific DoH recursive resolvers πŸ‘‘.

4.2.1. Use with DDR πŸ¦‹

Clients can find out that a DoH recursive resolver supports Oblivious HTTP using DDR. They do this by either querying _dns.resolver.arpa to a locally configured resolver, or by querying using the name of a resolver [DDR] πŸ’œ.

For example, a DoH service advertised over DDR can be marked as supporting resolution via Oblivious HTTP with this RR:

_dns.resolver.arpa  7200  IN SVCB 1 doh.example.net (
     alpn=h2 dohpath=/dns-query{?dns} ohttp )

Clients still need to verify oblivious DoH servers. Specifically, they need to do the TLS certificate checks described in Section 4.2 of [DDR] πŸ”. Since the Gateway and Target Resources for discovered oblivious services need to be on the same host, the client needs to verify that the certificate presented by the gateway passes the required checks 🫢. These checks can be done when looking up the configuration on the gateway, as described in Section 6, and they can be performed either directly or through the relay or another proxy so client IP addresses aren't exposed 🌸.

Opportunistic Discovery [DDR], where only the IP address is validated, SHOULD NOT be used in general with Oblivious HTTP πŸ™…. That's because this mode mainly exists to support resolvers that use private or local IP addresses, which usually won't be accessible when you're using a relay πŸ’€. If a configuration comes up where the resolver is accessible but can't use certificate-based validation, the client MUST ensure that the relay only accesses the gateway and target using the unencrypted resolver's original IP address ⚠️.

Careful bestie: that last rule is a MUST, so the relay really has to stick to that original IP address in this case 🚨.

For DoH recursive resolvers, clients also need to make sure they aren't being targeted with unique DoH paths that would reveal their identity πŸ™ˆ. See Section 7 for more discussion πŸ’œ.

4.2.2. Use with DNR ✨

Okay so the ohttp SvcParamKey from this doc can also be used with Discovery of Network-designated Resolvers [DNR] πŸ§šπŸ’–. In this case, the oblivious configuration and path parameters can get tucked into DHCP and Router Advertisement messages πŸŽ€.

Now, DNR doesn't need the same kind of verification that DDR does πŸ™ˆ, BUT clients that learn about DoH recursive resolvers still need to make sure nobody is targeting them with unique DoH paths that would reveal who they are πŸ•΅οΈβ€β™€οΈπŸ’…. See Section 7 for more on this, bestie 🫢.

5. Gateway Location πŸ—ΊοΈ

Once a client has found out that a service supports Oblivious HTTP through the "ohttp" parameter in an SVCB or HTTPS RR, it needs a way to send requests through a relay to the right gateway location πŸ¦‹βœ¨.

This doc defines a well-known resource [WELLKNOWN], "/.well-known/ohttp-gateway" πŸ’œ, which is an Oblivious Gateway Resource that lives on the same host as the Target Resource 🌸.

Some servers might not want to run the gateway on a well-known URI, and that's totally valid πŸ’…. In those cases, servers can use 3xx (Redirection) responses (Section 15.4 of [HTTP]) to point clients and relays at the correct gateway location 🧭. These redirects apply to both (1) requests made to fetch key configurations (as defined in Section 6) and (2) encapsulated requests made via a relay πŸ”₯.

If a client gets a redirect when fetching the key configuration from the well-known Gateway Resource, it MUST NOT pass the redirected gateway URI along to the relay as the gateway location to use 🚫😭. Why? Because that would let the gateway target clients by encoding unique or client-identifying values in the redirected URI πŸ’€. Instead, relays being used with dynamically discovered gateways MUST use the well-known Gateway Resource and follow any redirects on their own, separately from whatever redirects the client got πŸ‘‘. The relay can remember those redirects across oblivious requests for all clients so it can avoid added latency ⚑🌈.

6. Key Configuration Fetching πŸ”‘

Clients also need to know the key configuration of a gateway before they encapsulate and send requests to the relay 🧁.

If a client fetches the key configuration directly from the gateway, it will expose identifiers like its IP address to the gateway πŸ‘€. We'll talk more about the privacy and security implications of this in Section 7 πŸŽ€. Clients can use an HTTP proxy to hide their IP addresses when fetching key configurations 🫣. Clients can also run consistency checks to make sure they aren't receiving unique key configurations, as discussed in Section 7.1 βœ….

To fetch the key configuration of a gateway discovered the way Section 5 describes, the client sends a GET request (either through a proxy or directly) to the gateway's URI, and it specifies the "application/ohttp-keys" media type [OHTTP] in the Accept header πŸ’Œ.

For example, if the client knows an Oblivious Gateway URI, https://svc.example.com/.well-known/ohttp-gateway, it could fetch the key configuration with this request 🧚:

GET /.well-known/ohttp-gateway HTTP/1.1
Host: svc.example.com
Accept: application/ohttp-keys

Gateways that coordinate with targets advertising Oblivious HTTP support SHOULD support GET requests for their key configuration in this manner 🌟, unless there's another out-of-band configuration model that clients can actually use πŸ€·β€β™€οΈ. Gateways respond with their key configuration in the response body, with a content type of "application/ohttp-keys" πŸ“.

7. Security and Privacy Considerations πŸ›‘οΈπŸ’œ

⚠️ Okay bestie, this section is seriously important, so read it closely πŸ₯Ί.

Attackers on a network can remove SVCB information from cleartext DNS answers that aren't protected by DNSSEC [DNSSEC] 😱. That can effectively downgrade clients. BUT since SVCB indications for Oblivious HTTP support are just hints πŸ’…, a client can mitigate this by always checking for a gateway configuration (Section 6) on the well-known gateway location (Section 5) 🫢. Using encrypted DNS along with DNSSEC can also provide that mitigation πŸ”.

When clients fetch a gateway's configuration (Section 6), they can expose their identity in the form of an IP address if they don't connect via a proxy or some other IP-hiding mechanism πŸ‘€. In some circumstances this might not be a privacy concern, since revealing that a particular client IP address is preparing to use an Oblivious HTTP service can be expected 🀍. However, if a client is otherwise trying to hide its IP address or location (and not merely decouple its specific requests from its IP address) πŸ™…β€β™€οΈ, or if revealing its IP address facilitates key targeting attacks (if a gateway service uses IP addresses to associate specific configurations with specific clients) 😭, a proxy or similar mechanism can be used to fetch the gateway's configuration πŸ¦‹.

When discovering designated oblivious DoH recursive resolvers using this mechanism, clients need to make sure the designation is trusted, since they can't directly check the contents of the gateway server's TLS certificate πŸ”. See Section 4.2.1 for more on this, plus Section 8 ("Security Considerations") of [DNS-SVCB] πŸ“šβœ¨.

7.1. Key Targeting Attacks 🎯

As discussed in [OHTTP], client requests using Oblivious HTTP can only be linked by recognizing the key configuration 🧩. To prevent unwanted linkability and tracking, clients using any key configuration discovery mechanism need to watch out for attacks that target a specific user or population with a unique key configuration 🚨.

There are several approaches clients can use to mitigate key targeting attacks πŸ› οΈ. [CONSISTENCY] gives an overview of the options for making sure key configurations are consistent between different clients πŸ’–. Clients SHOULD employ some technique to mitigate key targeting attacks, such as confirming the key with a shared proxy as described in [CONSISTENCY] 🀝. If a client detects that a gateway is using per-client targeted key configuration, the client can stop using that gateway and, potentially, report the targeting attack so other clients can avoid the gateway in the future πŸ™…β€β™€οΈπŸ“’.

7.2. dohpath Targeting Attacks πŸ›£οΈ

For oblivious DoH servers, an attacker could use unique "dohpath" values to target or identify specific clients πŸ•΅οΈβ€β™€οΈ. This attack is very similar to the generic OHTTP key targeting attack described above πŸ₯΄.

A client can avoid these targeting attacks by only allowing a single "dohpath" value, such as the commonly used "/dns-query{?dns}" or another pre-known value πŸ™Œ. If the client allows arbitrary "dohpath" values, it SHOULD mitigate targeting attacks with a consistency check, such as one of the mechanisms described in [CONSISTENCY], to validate the "dohpath" value with another source πŸ’…. Clients might choose to run a consistency check on only a percentage of discovery events, depending on the capacity of consistency check options and their deployment threat model πŸ“Š.

8. IANA Considerations πŸ“‹

8.1. SVCB Service Parameter πŸŽ€

This document adds the following entry to the "Service Parameter Keys (SvcParamKeys)" registry [SVCB] πŸ—‚οΈ. This parameter is defined in Section 4 ✨.

 +========+=======+=======================+============+===========+
 | Number | Name  | Meaning               | Change     | Reference |
 |        |       |                       | Controller |           |
 +========+=======+=======================+============+===========+
 | 8      | ohttp | Denotes that a        | IETF       | RFC 9540, |
 |        |       | service operates an   |            | Section 4 |
 |        |       | Oblivious HTTP target |            |           |
 +--------+-------+-----------------------+------------+-----------+

Table 1

8.2. Well-Known URI 🌐

IANA has added one entry in the "Well-Known URIs" registry [WELLKNOWN] πŸŽ‰.

URI Suffix:  ohttp-gateway
Change Controller:  IETF
Reference:  RFC 9540
Status:  permanent
Related Information:  N/A

9. References πŸ“š

9.1. Normative References πŸ’œ

[BINARY-HTTP]
           Thomson, M. and C. A. Wood, "Binary Representation of HTTP
           Messages", RFC 9292, DOI 10.17487/RFC9292, August 2022,
           <https://www.rfc-editor.org/info/rfc9292>.

[DDR]      Pauly, T., Kinnear, E., Wood, C. A., McManus, P., and T.
           Jensen, "Discovery of Designated Resolvers", RFC 9462,
           DOI 10.17487/RFC9462, November 2023,
           <https://www.rfc-editor.org/info/rfc9462>.

[DNR]      Boucadair, M., Ed., Reddy.K, T., Ed., Wing, D., Cook, N.,
           and T. Jensen, "DHCP and Router Advertisement Options for
           the Discovery of Network-designated Resolvers (DNR)",
           RFC 9463, DOI 10.17487/RFC9463, November 2023,
           <https://www.rfc-editor.org/info/rfc9463>.

[DNS-SVCB] Schwartz, B., "Service Binding Mapping for DNS Servers",
           RFC 9461, DOI 10.17487/RFC9461, November 2023,
           <https://www.rfc-editor.org/info/rfc9461>.

[DOH]      Hoffman, P. and P. McManus, "DNS Queries over HTTPS
           (DoH)", RFC 8484, DOI 10.17487/RFC8484, October 2018,
           <https://www.rfc-editor.org/info/rfc8484>.

[HTTP]     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>.

[OHTTP]    Thomson, M. and C. A. Wood, "Oblivious HTTP", RFC 9458,
           DOI 10.17487/RFC9458, January 2024,
           <https://www.rfc-editor.org/info/rfc9458>.

[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>.

[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>.

[SVCB]     Schwartz, B., Bishop, M., and E. Nygren, "Service Binding
           and Parameter Specification via the DNS (SVCB and HTTPS
           Resource Records)", RFC 9460, DOI 10.17487/RFC9460,
           November 2023, <https://www.rfc-editor.org/info/rfc9460>.

[WELLKNOWN]
           Nottingham, M., "Well-Known Uniform Resource Identifiers
           (URIs)", RFC 8615, DOI 10.17487/RFC8615, May 2019,
           <https://www.rfc-editor.org/info/rfc8615>.

9.2. Informative References πŸ¦‹

[CONSISTENCY]
           Davidson, A., Finkel, M., Thomson, M., and C. A. Wood,
           "Key Consistency and Discovery", Work in Progress,
           Internet-Draft, draft-ietf-privacypass-key-consistency-01,
           10 July 2023, <https://datatracker.ietf.org/doc/html/
           draft-ietf-privacypass-key-consistency-01>.

[DNSSEC]   Arends, R., Austein, R., Larson, M., Massey, D., and S.
           Rose, "DNS Security Introduction and Requirements",
           RFC 4033, DOI 10.17487/RFC4033, March 2005,
           <https://www.rfc-editor.org/info/rfc4033>.

Authors' Addresses πŸ§‘β€πŸ’»

Tommy Pauly
Apple Inc.
Email: tpauly@apple.com


Tirumaleswar Reddy.K
Nokia
Email: kondtir@gmail.com

πŸ“¦ where this page comes from