RFC 9614
Partitioning as an Architecture for Privacy
Partitioning as an Architecture for Privacy ๐
Series: Internet Architecture Board (IAB) ๐๏ธ RFC number: 9614 Authors: M. Kรผhlewind, T. Pauly, and C. A. Wood ๐ Category: Informational ๐ ISSN: 2070-1721 Date: July 2024 ๐๏ธ Obsoletes / Updates: the header doesn't list either one, so this RFC doesn't obsolete or update anything ๐ โโ๏ธ
Abstract โจ
okay so this doc is all about privacy partitioning ๐ฆ The idea is to spread your data and your communication across several parties on purpose, so that who you are gets separated from what your data is. It's giving "don't let one party see everything" energy ๐ The doc walks through the patterns popping up in newer protocols that partition what data and metadata gets revealed during protocol interactions. It also gives everyone a shared vocabulary and talks about how to analyze these setups ๐ง
Status of This Memo ๐ธ
Not a standards-track spec, sorry bestie ๐ It's published purely for information.
This doc is a product of the Internet Architecture Board (IAB). The IAB decided it's valuable enough to keep on the permanent record, and it reflects the IAB's consensus. Anything the IAB approves for publication can't be a candidate for any level of Internet Standard, see Section 2 of RFC 7841 ๐ซถ
For the current status, any errata, and how to send feedback, check https://www.rfc-editor.org/info/rfc9614 ๐
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 (https://trustee.ietf.org/license-info) as they stand on the date this doc was published. Please read these carefully, because they spell out your rights and restrictions for this document ๐
Table of Contents ๐ง
1. Introduction
2. Privacy Partitioning
2.1. Privacy Contexts
2.2. Context Separation
2.3. Approaches to Partitioning
3. A Survey of Protocols Using Partitioning
3.1. CONNECT Proxying and MASQUE
3.2. Oblivious HTTP and DNS
3.3. Privacy Pass
3.4. Privacy Preserving Measurement
4. Applying Privacy Partitioning
4.1. User-Identifying Information
4.2. Selecting Client Identifiers
4.3. Incorrect or Incomplete Partitioning
4.4. Selecting Information within a Context
5. Limits of Privacy Partitioning
5.1. Violations by Collusion
5.2. Violations by Insufficient or Incorrect Partitioning
5.2.1. Violations from Application Information
5.2.2. Violations from Network Information
5.2.3. Violations from Side Channels
5.2.4. Identifying Partitions
6. Partitioning Impacts
7. Security Considerations
8. IANA Considerations
9. Informative References
IAB Members at the Time of Approval
Acknowledgments
Authors' Addresses
1. Introduction โจ
okay so protocols like TLS and IPsec give you a secure channel between two endpoints, meaning it's authenticated and encrypted, so the info you send gets passed along safely ๐ Encryption and authentication in transit are a must so that nobody other than the intended protocol participants can see or change your info. This kind of security is what keeps the information sent over these channels private ๐
BUT ๐ญ a secure channel between two endpoints is NOT enough for the privacy of the endpoints themselves. Privacy needs have grown way past just protecting data in transit between two endpoints. A few examples of this glow-up:
- A user visits a website service and doesn't consent to share their location, but if that service can see the client's IP address, it can learn something about where the user is. That's a privacy problem, because the service can link user data to the user's location ๐
- A user wants to read content they're allowed to access, like a news article. The news service might still track which users read which articles, even when the user doesn't want their activity tracked. That's a privacy problem, because the service can link user activity to the user's account ๐ฐ
- A client device might need to upload metrics to an aggregation service, and doing so lets the service attribute those specific metric contributions to that device. That's a privacy problem, because the service can link client contributions to the specific client ๐
The common thread is that clients want to use a service without giving it too much user-specific or identifying info. Specifically, keeping user-specific identity info separate from user-specific data is necessary for privacy. So to protect user privacy, it's really important to keep identity (who) and data (what) apart ๐ซถ
This doc defines "privacy partitioning" ๐งฉ (sometimes also called the "decoupling principle" [DECOUPLING]). It's the general technique for separating the data and metadata that different parties can see during network communication, with the goal of improving user privacy. Privacy partitioning can't guarantee there's no link between user-specific identity and user-specific data. But when it's applied properly, it helps make privacy violations more technically difficult to pull off over time ๐ก๏ธ
Several IETF working groups are building protocols and systems that follow the privacy partitioning principle, including Oblivious HTTP Application Intermediation (OHAI), Multiplexed Application Substrate over QUIC Encryption (MASQUE), Privacy Pass, and Privacy Preserving Measurement (PPM). This doc summarizes what those groups are doing and offers a framework for thinking about the resulting privacy posture of different endpoints in practice ๐
Privacy partitioning is especially useful as a tool for data minimization, which is described in Section 6.1 of [RFC6973]. [RFC6973] gives guidance on privacy considerations for Internet protocols, and it includes a set of questions for evaluating a protocol's data minimization in Section 7.1 of [RFC6973]. Protocols that use privacy partitioning ought to work through the questions in that section when evaluating their design. They should pay special attention to how identifiers and data can be correlated by protocol participants and observers in each partitioned context ๐ Privacy partitioning can also separate identity providers from relying parties (see Section 6.1.4 of [RFC6973]), like in the case of Privacy Pass (see Section 3.3) ๐๏ธ
Heads up though: privacy partitioning is NOT a panacea ๐ โโ๏ธ Applying it well means doing a holistic analysis of the system in question to figure out whether partitioning, both as a tool and as actually implemented, gives you meaningful privacy improvements. See Section 5 for more ๐
2. Privacy Partitioning ๐ฆ
For user privacy, this doc focuses on user-specific information. That can include any identifying info specific to a user, like their email address or IP address, or any data about the user, like their date of birth ๐ Basically, the goal of privacy partitioning is to make sure every party in a system, other than the user themselves, only has access to one type of user-specific information ๐ฏ
This is a straightforward use of the principle of least privilege. Every party in the system only gets the minimum amount of info it needs to do its job. Privacy partitioning pushes for this minimization by making sure protocols, applications, and systems only reveal user-specific info to the parties that actually need it for their intended purpose ๐ธ
Put simply, privacy partitioning is all about separating who someone is from what they do ๐ In the rest of this section, we'll go over how privacy partitioning can get that done โจ
2.1. Privacy Contexts โจ
okay so bestie, every bit of user-specific info lives inside some context ๐ซง. A context is basically a bubble: a pile of data, the metadata riding along with it, and all the entities that can see it. To stop user info from getting linked across bubbles, partitions have to make sure that any single entity (other than the client itself) does not hang out in more than one bubble where that info is visible ๐
[RFC6973] explains why identifiers matter for cutting down on correlation, which is a big privacy win ๐
Correlation is the combination of various pieces of information related to an individual or that obtain that characteristic when combined.... Correlation is closely related to identification. Internet protocols can facilitate correlation by allowing individuals' activities to be tracked and combined over time.... Pseudonymity is strengthened when less personal data can be linked to the pseudonym; when the same pseudonym is used less often and across fewer contexts; and when independently chosen pseudonyms are more frequently used for new actions (making them, from an observer's or attacker's perspective, unlinkable).
Context separation is the foundation of privacy partitioning and of reducing correlation ๐ธ Let's look at an unencrypted HTTP session over TCP. Its context includes the content of the transaction plus any metadata from the transport and IP headers ๐ฆ The participants are the client, routers, other network middleboxes, intermediaries, and the server. Middleboxes or intermediaries might just forward traffic, or they might terminate it at any layer (like ending the TCP connection from the client and opening a brand new TCP connection to the server). Either way, for privacy partitioning, they can see all of the data in the context ๐
+-------------------------------------------------------------------+
| Context A |
| +--------+ +-----------+ +--------+ |
| | +------HTTP------+ +--------------+ | |
| | Client | | Middlebox | | Server | |
| | +------TCP-------+ +--------------+ | |
| +--------+ flow +-----------+ +--------+ |
| |
+-------------------------------------------------------------------+
Figure 1: Diagram of a Basic Unencrypted Client-to-Server
Connection with Middleboxes
Adding TLS encryption to the HTTP session is a simple partitioning trick that splits the one context into two separate contexts ๐ฆ Now the content of the transaction is only visible to the client, TLS-terminating intermediaries, and the server, while the metadata in the transport and IP headers stays in the original context. Here's the catch: without any further partitioning, the entities that sit in both contexts can still correlate the data across them ๐ญ
+-------------------------------------------------------------------+
| Context A |
| +--------+ +--------+ |
| | | | | |
| | Client +-------------------HTTPS-------------------+ Server | |
| | | | | |
| +--------+ +--------+ |
| |
+-------------------------------------------------------------------+
| Context B |
| +--------+ +-----------+ +--------+ |
| | | | | | | |
| | Client +-------TCP------+ Middlebox +--------------+ Server | |
| | | flow | | | | |
| +--------+ +-----------+ +--------+ |
| |
+-------------------------------------------------------------------+
Figure 2: Diagram of How Adding Encryption Splits the Context
into Two
Another way to make a partition is to just use separate connections ๐ง For example, to split two separate HTTP requests from each other, a client could send the requests on separate TCP connections, each on a different network and at different times, and avoid including obvious identifiers like HTTP cookies across the requests ๐
+-------------------------------------------------------------------+
| Context A |
| +--------+ +-----------+ +--------+ |
| | | IP A | | | | |
| | Client +-------TCP------+ Middlebox +--------------+ Server | |
| | | flow A | A | | | |
| +--------+ +-----------+ +--------+ |
| |
+-------------------------------------------------------------------+
| Context B |
| +--------+ +-----------+ +--------+ |
| | | IP B | | | | |
| | Client +-------TCP------+ Middlebox +--------------+ Server | |
| | | flow B | B | | | |
| +--------+ +-----------+ +--------+ |
| |
+-------------------------------------------------------------------+
Figure 3: Diagram of Making Separate Connections to Generate
Separate Contexts
Using separate connections to create separate contexts can reduce or eliminate the ability of specific parties to correlate activity across contexts ๐ BUT (and this is important, bestie) any identifier at any layer that is common across different contexts can still be used to correlate activity ๐จ Beyond IP addresses, lots of other factors can be combined into a fingerprint of a specific device, like Media Access Control (MAC) addresses, device properties, software properties and behavior, application state, etc. ๐
2.2. Context Separation ๐
To define and analyze how the various partitioning techniques work, we first need to pin down the boundaries of what is being partitioned ๐ That's the job of context separation. Specifically, to stop user-specific info from being correlated across contexts, partitions need to make sure that any single entity (other than the client itself) does not participate in contexts where both identifiers are visible ๐ซถ
Context separation can be achieved in different ways, for example over time, across network paths, or based on (en)coding, etc. โญ The privacy-oriented protocols described in this document usually involve more complex partitioning, but they still use the same underlying techniques to partition communication contexts:
- Cryptographic protection, such as the use of encryption to specific parties, allows partitioning of contexts between different parties (those with the ability to remove cryptographic protections, and those without).
- Connection separation across time or space to allow partitioning of contexts for different application transactions over the network.
These techniques are often used together for context separation ๐งฉ For example, encrypting an HTTP exchange with TLS between the client and a TLS-terminating server might stop a network middlebox that sees a client IP address from seeing the user account identifier. BUT it doesn't stop the TLS-terminating server from observing both identifiers and correlating them ๐ฌ So, preventing correlation takes actual context separation, like using proxying to hide a client's IP address that would otherwise be used as an identifier ๐ญ
2.3. Approaches to Partitioning ๐
All of the partitioning protocols described in this document create separate contexts using cryptographic protection and/or connection separation ๐ But each one has its own unique approach that results in a different set of contexts. Since many of these protocols are brand new, we'll have to wait and see how each approach gets used at scale across the Internet and what new models pop up in the future ๐ฎ
There are several factors that lead to this diversity in approaches to partitioning, including:
- Adding privacy partitioning to existing protocol ecosystems places requirements and constraints on how contexts are constructed. CONNECT-style proxying is meant to work with servers that are unaware of privacy contexts, which means it needs more intermediaries to provide strong separation guarantees ๐๏ธ On the other hand, Oblivious HTTP assumes servers that cooperate with context separation and, thus, reduces the overall number of elements in the solution ๐
- Whether or not information exchange needs to happen bidirectionally in an interactive fashion determines how contexts can be separated ๐ Some use cases, like metrics collection for PPM, can happen where information only flows from clients to servers, and they can work even when clients are no longer connected ๐ค Privacy Pass is an example of a case that can be either interactive or not, depending on whether tokens can be cached and reused ๐๏ธ CONNECT-style proxying and Oblivious HTTP often require bidirectional and interactive communication ๐ฌ
- The degree to which contexts need to be partitioned depends in part on the client's threat models and level of trust in various protocol participants ๐ต๏ธโโ๏ธ For example, in Oblivious HTTP, clients allow relays to learn that they are accessing a particular application-specific gateway. If clients don't trust relays with this information, they can instead use a multi-hop CONNECT-style proxy approach where no single party learns whether specific clients are accessing a specific application ๐ง This is the default trust model for systems like Tor, where multiple hops are used to drive down the probability of privacy violations due to collusion or related attacks ๐
3. A Survey of Protocols Using Partitioning ๐ฆ
The following section discusses current ongoing work in the IETF that is applying privacy partitioning ๐ธ
3.1. CONNECT Proxying and MASQUE ๐
Okay so bestie, forward proxies are lowkey the MVPs of privacy partitioning โจ. When the connection between the client and the proxy is encrypted, the proxy gets split into segments, and each segment only knows so much. If the connections to targets through the proxy are encrypted too, the proxy can't read the end-to-end content. ๐ HTTP has been doing forward proxying for TCP-like streams with the CONNECT method for a long time. More recently, the Multiplexed Application Substrate over QUIC Encryption (MASQUE) Working Group has been cooking up protocols that proxy UDP [CONNECT-UDP] and IP packets [CONNECT-IP] using tunneling. It's giving main character energy ๐
In a single-proxy setup, there's a tunnel connection between the client and the proxy, and then an end-to-end connection that gets tunneled between the client and the target. As shown in Figure 4, this splits the communication into four contexts:
- a Client-to-Target encrypted context, which holds the end-to-end content inside the TLS session to the target, like HTTP content ๐;
- a Client-to-Target proxied context, which is the end-to-end data exchanged with the target that the proxy can also see, like a TLS session ๐;
- a Client-to-Proxy context, which holds the transport metadata between the client and the target, plus the request asking the proxy to open a connection to the target ๐จ; and
- a Proxy-to-Target context, which, for TCP and UDP proxying, holds any packet header info that the proxy adds or changes, e.g., the IP and TCP/UDP headers ๐งฉ.
+-------------------------------------------------------------------+
| Client-to-Target Encrypted Context |
| +--------+ +--------+ |
| | | | | |
| | Client +------------------HTTPS--------------------+ Target | |
| | | content | | |
| +--------+ +--------+ |
| |
+-------------------------------------------------------------------+
| Client-to-Target Proxied Context |
| +--------+ +-----------+ +--------+ |
| | | | | | | |
| | Client +----Proxied-----+ Proxy +--------------+ Target | |
| | | TLS flow | | | | |
| +--------+ +-----------+ +--------+ |
| |
+-------------------------------------------------------------------+
| Client-to-Proxy Context |
| +--------+ +-----------+ |
| | | | | |
| | Client +---Transport----+ Proxy | |
| | | flow | | |
| +--------+ +-----------+ |
| |
+-------------------------------------------------------------------+
| Proxy-to-Target Context |
| +-----------+ +--------+ |
| | | | | |
| | Proxy +--Transport---+ Target | |
| | | flow | | |
| +-----------+ +--------+ |
| |
+-------------------------------------------------------------------+
Figure 4: Diagram of One-Hop Proxy Contexts
Using two (or more) proxies gives you even better privacy partitioning โจ๐ฆ. Specifically, with two proxies, each proxy sees either the Client metadata but not the Target, the Target but not the Client metadata, or neither. Iconic ๐
On top of the contexts we just covered for the single proxy case, the two-hop proxy case in Figure 5 changes the contexts in a few ways:
- the Client-to-Target proxied context only includes the second proxy (called "Proxy B" here) ๐ธ;
- a new Client-to-Proxy B context gets added, which is the TLS session from the client to Proxy B that the first proxy (called "Proxy A" here) can also see ๐ซถ; and
- the contexts that only see transport data (TCP or UDP over IP) get split into three separate contexts: a Client-to-Proxy A context, a Proxy A-to-Proxy B context, and a Proxy B-to-Target context ๐.
+-------------------------------------------------------------------+
| Client-to-Target Encrypted Context |
| +--------+ +--------+ |
| | | | | |
| | Client +------------------HTTPS--------------------+ Target | |
| | | content | | |
| +--------+ +--------+ |
| |
+-------------------------------------------------------------------+
| Client-to-Target Proxied Context |
| +--------+ +-------+ +--------+ |
| | | | | | | |
| | Client +----------Proxied----------+ Proxy +-------+ Target | |
| | | TLS flow | B | | | |
| +--------+ +-------+ +--------+ |
| |
+-------------------------------------------------------------------+
| Client-to-Proxy B Context |
| +--------+ +-------+ +-------+ |
| | | | | | | |
| | Client +---------+ Proxy +---------+ Proxy | |
| | | | A | | B | |
| +--------+ +-------+ +-------+ |
| |
+-------------------------------------------------------------------+
| Client-to-Proxy A Context |
| +--------+ +-------+ |
| | | | | |
| | Client +---------+ Proxy | |
| | | | A | |
| +--------+ +-------+ |
| |
+-------------------------------------------------------------------+
| Proxy A-to-Proxy B Context |
| +-------+ +-------+ |
| | | | | |
| | Proxy +---------+ Proxy | |
| | A | | B | |
| +-------+ +-------+ |
| |
+-------------------------------------------------------------------+
| Proxy B-to-Target Context |
| +-------+ +--------+ |
| | | | | |
| | Proxy +-------+ Target | |
| | B | | | |
| +-------+ +--------+ |
| |
+-------------------------------------------------------------------+
Figure 5: Diagram of Two-Hop Proxy Contexts
Forward proxying, like the modes of proxying in the MASQUE protocols, uses both encryption (via TLS) and separate connections (via proxy hops that only see the next hop) to get privacy partitioning. It's a whole team effort, and I'm obsessed ๐ง๐
3.2. Oblivious HTTP and DNS ๐ฆ
okay so Oblivious HTTP [OHTTP] is giving total privacy realness ๐ It was developed in the Oblivious HTTP Application Intermediation (OHAI) Working Group, and it adds per-message encryption to HTTP exchanges through a relay system ๐. Clients send requests through an Oblivious Relay, which cannot read the message contents ๐, on the way to an Oblivious Gateway. The Gateway can decrypt the messages, but it can't talk to the client directly or see client metadata like an IP address ๐ . Under the hood, Oblivious HTTP relies on Hybrid Public Key Encryption [HPKE] to do the encryption โจ.
Oblivious HTTP uses both encryption and separation of connections to get its privacy partitioning, and it's honestly so clever ๐ง
- End-to-end messages are encrypted between the Client and Gateway. The content of these inner messages is visible to the Client, Gateway, and Target. This is the Client-to-Target context.
- The encrypted messages exchanged between the Client and Gateway are visible to the Relay, but the Relay cannot decrypt them. This is the Client-to-Gateway context.
- The transport connections (such as TCP and TLS) between the Client, Relay, and Gateway form two separate contexts: a Client-to-Relay context and a Relay-to-Gateway context. It's important to note that the Relay-to-Gateway connection can be a single connection, even if the Relay has many separate Clients. This gives better anonymity, because the pseudonym the Relay shows is shared across lots of Clients ๐ธ
+-------------------------------------------------------------------+
| Client-to-Target Context |
| +--------+ +---------+ +--------+ |
| | | | | | | |
| | Client +---------------------------+ Gateway +-----+ Target | |
| | | | | | | |
| +--------+ +---------+ +--------+ |
| |
+-------------------------------------------------------------------+
| Client-to-Gateway Context |
| +--------+ +-------+ +---------+ |
| | | | | | | |
| | Client +---------+ Relay +---------+ Gateway | |
| | | | | | | |
| +--------+ +-------+ +---------+ |
| |
+-------------------------------------------------------------------+
| Client-to-Relay Context |
| +--------+ +-------+ |
| | | | | |
| | Client +---------+ Relay | |
| | | | | |
| +--------+ +-------+ |
| |
+-------------------------------------------------------------------+
| Relay-to-Gateway Context |
| +-------+ +---------+ |
| | | | | |
| + Relay +---------+ Gateway | |
| | | | | |
| +-------+ +---------+ |
| |
+-------------------------------------------------------------------+
Figure 6: Diagram of Oblivious HTTP Contexts
Oblivious DNS over HTTPS (ODoH) [ODOH] uses the same principle as Oblivious HTTP, but it only works on DNS messages ๐ It's kind of a precursor to the more generalized Oblivious HTTP, so it relies on the same HPKE cryptographic primitives and can be analyzed in the same way ๐
3.3. Privacy Pass ๐
Okay, Privacy Pass is an architecture [RFC9576] and a set of protocols being developed in the Privacy Pass Working Group ๐ง It lets clients prove they've been verified in a way that's anonymous and unlinkable, using tokens ๐ These tokens were first designed to prove a client had solved a CAPTCHA, but they can be used for other kinds of user or device attestation checks too. In Privacy Pass, clients talk to an attester and an issuer to get a token issued, and then they talk to an origin server to redeem that token ๐ซ
In Privacy Pass, privacy partitioning comes from cryptographic protection (blind signature protocols or something similar) plus separation of connections across two contexts: a "redemption context" between clients and origins (servers that request and receive tokens), and an "issuance context" between clients, attestation servers, and token issuance servers. The cryptographic protection makes sure that what gets revealed during the issuance context stays separate from what gets revealed during the redemption context ๐ฆ
+-------------------------------------------------------------------+
| Redemption Context |
| +--------+ +--------+ |
| | | | | |
| | Origin +---------+ Client | |
| | | | | |
| +--------+ +--------+ |
| |
+-------------------------------------------------------------------+
| Issuance Context |
| +--------+ +----------+ +--------+ |
| | | | | | | |
| | Client +------+ Attester +------+ Issuer | |
| | | | | | | |
| +--------+ +----------+ +--------+ |
| |
+-------------------------------------------------------------------+
Figure 7: Diagram of Contexts in Privacy Pass
Since the redemption context and issuance context are separate connections involving separate entities, you can decouple them even further by running those parts of the protocols at different times โฐ Clients can fetch tokens through the issuance context early and cache them for later use in redemption contexts. This can help partition identifiers and data, which is such a smart move ๐ง โจ
[RFC9576] describes different deployment models for which entities operate origins, attesters, and issuers. In some models they're all separate entities, and in others the same entity can run them all. The model affects how well partitioning works ๐ Some models (like when all three are run by the same entity) only give effective partitioning when the timing of connections on the two contexts isn't correlated and when the client uses different identifiers (such as different IP addresses) on each context. Be careful with that one, bestie ๐
3.4. Privacy Preserving Measurement ๐
The Privacy Preserving Measurement (PPM) Working Group is chartered to develop protocols and systems that help a data aggregation or collection server (or multiple non-colluding servers) compute aggregate values without learning the value of any one client's individual measurement ๐ The Distributed Aggregation Protocol (DAP) is the group's primary working item, and it's the main star of the show ๐
At a high level, DAP uses cryptographic protection (in the form of secret sharing among non-colluding servers) to set up two contexts ๐
- an "upload context" between clients and non-colluding aggregation servers (where the servers are split into "Helper" and "Leader" roles). Here, aggregation servers might learn client identity, but they learn nothing about individual measurement reports; and
- a "collect context" where a collector learns aggregate measurement results and nothing about individual client data ๐
+-------------------------------------+--------------------+
| Upload Context | Collect Context |
| +------------+ | |
| +----->| Helper | | |
| +--------+ | +------------+ | |
| | +---+ ^ | +-----------+ |
| | Client | | | | Collector | |
| | +---+ v | +-----+-----+ |
| +--------+ | +------------+ | | |
| +----->| Leader |<-----------+ |
| +------------+ | |
+-------------------------------------+--------------------+
Figure 8: Diagram of Contexts in DAP
4. Applying Privacy Partitioning โจ
Applying privacy partitioning to an existing or new system or protocol takes the following steps, bestie ๐
- Identify the types of information used or exposed in a system or protocol. Some of it can be used to identify a user or correlate to other contexts ๐ต๏ธ
- Partition data to minimize the amount of user-identifying or correlatable information in any given context. Each context should only include what's necessary for that context, and data sharing across contexts should be prevented wherever possible ๐ง
The most impactful types of information to partition are (a) user-identifying information, such as user identifiers (including account names or IP addresses) that can be linked, and (b) non-user-identifying information (including content a user generates or accesses), which can often be sensitive when combined with a user identifier ๐
In this section, we talk through considerations for partitioning these types of information ๐ซถ
4.1. User-Identifying Information โจ
okay so user data can itself be user-identifying ๐, and when it is, you should treat it like an identifier ๐ซถ. Like, Oblivious DoH and Oblivious HTTP split the client IP address and the client request data into separate contexts ๐ฆ, so nobody besides the client can see both ๐ . iconic.
But if the contexts collude ๐, that partitioning can get reversed, and stuff that used to be harmless (non-user-identifying) can suddenly become user-identifying. For example, in CONNECT proxy systems that use QUIC, the QUIC connection ID is non-user-identifying by nature because it's generated randomly (Section 5.1 of [QUIC]) ๐ฒ. However, if you combine it with another context that has user-identifying info, like the client IP address, the QUIC connection ID can become user-identifying info ๐ญ.
Some info is just baked into client user-agents ๐ง, including details of their network location and how protocols are implemented in hardware and software. That info can be used to build user-identifying info, a process people sometimes call "fingerprinting" ๐ต๏ธโโ๏ธ. Depending on the application and system constraints, users may not be able to prevent fingerprinting in privacy contexts. So fingerprinting info, when combined with non-user-identifying user data, could turn that otherwise innocent data into user-identifying info. not me getting plot twisted ๐
4.2. Selecting Client Identifiers ๐
okay the way client identifiers get picked for the contexts used in privacy partitioning has a HUGE impact on how well partitioning works ๐ฅ. Picking identifiers can either wreck the value of partitioning or make it even better ๐. Generally, each context involves some form of client identifier. It might be tied directly to a client identity, but it can also be a pseudonym or a random one-time identifier ๐ธ.
Using the same client identifier across multiple contexts can partly or fully undermine partitioning, because it lets those contexts get linked back to the same client ๐ฉ. For example, if a client uses proxies as described in Section 3.1 to separate connections, but uses the same email address to log into two servers in different contexts, those actions can be linked back to the same client ๐ง. Not all of the partitioning from proxying is lost, tho ๐ : the contexts along the network path still can't correlate the client identity with which servers are being accessed. The overall effect is still diminished though ๐.
When possible, using per-context unique client identifiers gives better partitioning properties โจ. For example, a client can use a unique email address as an account identifier with each different server it needs to log into ๐. The same idea applies across many layers, like per-network MAC address randomization [RANDOM-MAC] ๐ฒ, using multiple temporary IP addresses across connections and over time [RFC8981] ๐ฆ, and using unique per-subscription identifiers for HTTP Web Push [RFC8030] ๐. Main character identifier energy ๐.
4.3. Incorrect or Incomplete Partitioning ๐
Privacy partitioning can be applied incorrectly or incompletely ๐ฌ. Contexts may contain more user-identifying info than anyone wanted, or some info in a context may be more user-identifying than intended. Also, splitting user-identifying info across multiple contexts has to be done with care ๐ง, because creating more contexts can increase the number of entities that need to be trusted to not collude. Still, partitions can help improve the client's privacy posture when applied carefully ๐.
Figuring out the privacy of a system or protocol that applies privacy partitioning depends on which contexts exist and what types of user-identifying info are in each one ๐. This kind of evaluation helps spot ways a system or protocol can improve its privacy posture. For example, consider DNS over HTTPS [DOH] ๐, which makes a single context containing both the client IP address and the client query. One application of privacy partitioning gives you ODoH, which makes two contexts: one with the client IP address and the other with the client query ๐ซถ. two separate lanes, no crashes ๐๐จ.
4.4. Selecting Information within a Context ๐ง
To recognize where privacy partitioning could be applied, you need to identify the contexts in use, the information exposed in each context, and the intent behind the info exposed in each context ๐ฏ. Figuring out what info belongs in a given context is a non-trivial task ๐ตโ๐ซ. In principle, the info in a context should be fit for purpose โจ. So new systems or protocols should aim to make sure all info exposed in a context serves as few purposes as possible ๐. Designing with this in mind from the start helps prevent issues when users of a system or protocol accidentally ossify on the info available in contexts ๐ชจ.
Legacy systems that have ossified on info available in contexts can be hard to change in practice ๐ญ. For example, many existing anti-abuse systems depend on some client identifier, like the client IP address, combined with client data to be useful ๐ก๏ธ. Partitioning the contexts in those systems so they no longer determine client identity means you need new solutions for the anti-abuse problem ๐ฅฒ.
5. Limits of Privacy Partitioning โ ๏ธ
Privacy partitioning aims to increase user privacy, but as we said, it's just one of possibly many architectural tools for managing privacy risks ๐งฐ. Understanding its limits requires a more comprehensive analysis of the system in question ๐ฌ. That analysis also helps determine whether the tool has been applied correctly โ . The value of privacy partitioning depends on lots of factors, including (but not limited to) the following ๐:
- non-collusion across contexts and
- the type of information exposed in each context.
We'll break down each one in the sections below ๐ .
5.1. Violations by Collusion ๐ค๐
Privacy partitions make sure that only the client, the entity responsible for partitioning, can independently link all user-specific info ๐งฉ. No other entity can individually figure out how to link all the user-specific info, as long as they don't collude with each other across contexts ๐ โโ๏ธ. So non-collusion is a fundamental requirement for privacy partitioning to offer meaningful privacy for end users ๐. The trust relationships users have with different parties also affect how much impact there is on the user's privacy ๐ญ.
For example, look at Oblivious HTTP (OHTTP) ๐ฆ. The Oblivious Relay knows the client identity but not the client data, and the Oblivious Gateway knows the client data but not the client identity. If the Oblivious Relay and Gateway collude, they can link client identity and data together for each request and response transaction, just by watching requests in transit ๐๐.
Right now, there's no way to guarantee with technical protocol measures that two entities aren't colluding ๐ฉ. Even if two entities don't collude directly, if both reveal info to other parties, you can't guarantee that the info won't get combined ๐ซ . There are still some mitigations to reduce the risk of collusion in practice ๐ก๏ธ:
- Policy and contractual agreements between entities involved in partitioning to disallow logging or sharing of data, along with auditing to check that the policies are being followed. For cases where logging is required (such as for service operation), the logged data should be minimized and anonymized so it can't be useful for collusion ๐.
- Protocol requirements to make collusion or data sharing more difficult ๐ง.
- Adding more partitions and contexts to make it increasingly difficult to collude with enough parties to recover identities ๐งฑ.
5.2. Violations by Insufficient or Incorrect Partitioning ๐
Insufficient or incorrect application of privacy partitioning can lessen or cancel out the benefits for users ๐. It's possible to apply partitioning in a way that's either insufficient or incorrect for meaningful privacy ๐ค. For example, partitioning at one layer of the stack can fail to account for linkable info at different layers ๐ฅ. Privacy violations can come from partitioning failures in a bunch of ways, and some are described in the following sections ๐ซฃ.
5.2.1. Violations from Application Information ๐ฑ
Partitioning at the network layer can be insufficient when the application layer doesn't partition properly ๐ โโ๏ธ. For example, consider OHTTP used to hide client-identifying info for a browser telemetry system ๐. It's totally possible for reports in a telemetry system like that to contain both client-specific telemetry data, like info about their specific browser instance, and client-identifying info, like the client's email address, location, or IP address ๐ฑ. Even though OHTTP separates the client IP address from the server via a relay, the server can still learn it directly from the client's telemetry report ๐คฆโโ๏ธ.
5.2.2. Violations from Network Information ๐
It's also possible to partition inadequately at the network layer ๐ก. For example, consider both TLS Encrypted Client Hello (ECH) [TLS-ESNI] and VPNs ๐. ECH uses cryptographic protection (encryption) to hide info from unauthorized parties, but both clients and servers (two entities) can link user-specific data to a user-specific identifier (IP address) ๐ฌ. Similarly, while VPNs hide identifiers from end servers, the VPN server can still see the identifiers of both the client and the server ๐. Applying privacy partitioning would call for at least two additional entities so that neither party reveals both identity (who) and user actions (what) ๐ซถ.
5.2.3. Violations from Side Channels ๐ณ๏ธ
Beyond the info that's intentionally revealed by applying privacy partitioning, info can also be unintentionally revealed through side channels ๐ณ. For example, in the two-hop proxy arrangement described in Section 3.1, Proxy A sees and proxies TLS data between the client and Proxy B ๐. While it doesn't directly learn what Proxy B sees, it does learn info through metadata, like the timing and size of the encrypted data being proxied โฑ๏ธ. Traffic analysis could be exploited to learn more from that metadata, including, in some cases, application data that Proxy A was never meant to see ๐. Privacy partitioning doesn't stop these attacks, but it does increase the cost of carrying them out in practice ๐ธ. See Section 7 for more discussion on this topic ๐.
5.2.4. Identifying Partitions โจ
okay so the obvious privacy leaks from not partitioning properly sound like they should be easy to fix, right? ๐ but nope, it's still an open problem bestie ๐ญ. figuring out exactly what info needs partitioning for real privacy, and then actually building it so it does what you want, is genuinely hard. it's hard to tell whether a bunch of info reveals "too much" about a specific person, and it's just as tricky to check whether a partitioning setup is actually working the way it's supposed to ๐. there are SO many cases where data was assumed to be "private" or "anonymous" and then, in hindsight, it said way too much and let people get linked back to individual clients ๐ซ . see [DataSetReconstruction] and [CensusReconstruction] for real-world examples, it's giving cautionary tale fr ๐
6. Partitioning Impacts ๐ฆ
okay so applying privacy partitioning to communication protocols totally changes how the traffic moves ๐. instead of sending traffic straight to a service, basically all user traffic gets routed through a set of intermediaries, and that can add more end-to-end round trips (depending on the system and protocol) ๐ง. there are a few practical consequences, so let's go through them ๐:
- Service operational or management challenges: Information that is usually passively observed in the network, or metadata that got revealed to the service provider by accident, won't be available anymore ๐ญ. this can impact existing security procedures like application rate limiting or DDoS mitigation. current network management techniques often rely on info exposed by typical traffic, which doesn't come with guarantees or accuracy ๐.
privacy partitioning gives us a chance to level up these management techniques ๐ . entities can actively exchange information with each other in a privacy-preserving way, and ask for exactly what they need for a specific task or function. that beats relying on a limited pile of accidentally revealed info that can't be guaranteed to stick around and might get removed in the future โจ.
- Varying performance effects and costs: Depending on how context separation is done, privacy partitioning may affect application performance ๐ข. for example, Privacy Pass introduces an entire end-to-end round trip to issue a token before it can be redeemed, so performance takes a hit ๐. systems like CONNECT proxying might seem like they'd slow things down, but the highly optimized nature of proxy-to-proxy paths often leads to improved performance. plot twist ๐.
reduced performance can be the reason protocols and deployments skip privacy partitioning altogether ๐. take HTTPS connection reuse (Section 9.1.1 of [HTTP2]): it lets clients use an existing HTTPS session created for one origin to interact with different origins, as long as the original origin is authoritative for those alternative origins. reusing connections saves the cost of connection establishment, but it also means the server can link the client's activity across those two or more origins together ๐. applying privacy partitioning would stop that, but it usually costs performance.
in general, performance and privacy trade-offs get framed as a zero-sum game, but in practice that's often not the case ๐ธ. the relationship between privacy and performance shifts depending on a bunch of related factors, like application characteristics, network path properties, and so on.
- Increased attack surface: Even when information is adequately partitioned across non-colluding parties, the effects on the end user may not always be positive ๐ฌ. using OHTTP as an example, picture this: the Oblivious Gateway has an implementation flaw that causes all of its decrypt requests to get logged in a public or otherwise compromised location. say the Target Resource those requests are headed for doesn't have that flaw. applications that use OHTTP with this flawed Oblivious Gateway to reach the Target Resource risk having their user request info made public ๐จ. it's decoupled from user identifying information, sure, but it's still out there. applications that don't use OHTTP to reach the Target Resource don't face that kind of disclosure risk ๐ง.
- Centralization: Depending on the protocol, the system, and the privacy properties you want, partitioning may inherently force centralization onto a selected set of trusted participants ๐ฐ. for example, the impact of OHTTP on end-user privacy generally goes up with the number of users behind a given Oblivious Relay. the probability of an Oblivious Gateway figuring out which client sent a request forwarded through an Oblivious Relay drops as the number of possible clients behind that relay grows ๐. that trade-off encourages centralization of the Oblivious Relays ๐ซค.
7. Security Considerations ๐ฅ
okay this section is SERIOUS bestie, so pay attention ๐จ. section 5 covers some of the limits of privacy partitioning in practice, and it pushes for holistic analysis so we can figure out how much meaningful privacy improvement partitioning actually gives ๐ง . applied correctly, partitioning helps improve an end-user's privacy posture, which makes violations harder to pull off, whether they're technical, social, or policy-based ๐ก๏ธ. but side channels are still a thing ๐. for example, traffic analysis [FINGERPINT] or timing analysis still work, and they can let an unauthorized entity learn about a context they aren't a participant of ๐. the proposed mitigations for these attacks, like padding application traffic or generating fake traffic, can be very expensive, so they're typically not applied in practice ๐ธ.
still, privacy partitioning moves the threat from something that has direct access to user-specific information to something that takes a lot more effort to pull off, like burning computational resources, to violate end-user privacy ๐ช. that's a real win, even if it isn't a magic shield ๐ซถ.
8. IANA Considerations ๐ธ
This document has no IANA actions. ๐
9. Informative References ๐
here's the reading list, bestie ๐ง
- [CensusReconstruction] United States Consensus Bureau, "The Census Bureau's Simulated Reconstruction-Abetted Re-identification Attack on the 2010 Census", May 2021,
https://www.census.gov/data/academy/webinars/2021/disclosure-avoidance-series/simulated-reconstruction-abetted-re-identification-attack-on-the-2010-census.html. - [CONNECT-IP] Pauly, T., Ed., Schinazi, D., Chernyakhovsky, A., Kรผhlewind, M., and M. Westerlund, "Proxying IP in HTTP", RFC 9484, DOI 10.17487/RFC9484, October 2023,
https://www.rfc-editor.org/info/rfc9484. - [CONNECT-UDP] Schinazi, D. and L. Pardue, "HTTP Datagrams and the Capsule Protocol", RFC 9297, DOI 10.17487/RFC9297, August 2022,
https://www.rfc-editor.org/info/rfc9297. - [DataSetReconstruction] Narayanan, A. and V. Shmatikov, "Robust De-anonymization of Large Sparse Datasets", IEEE Symposium on Security and Privacy, DOI 10.1109/sp.2008.33, May 2008,
https://doi.org/10.1109/sp.2008.33. - [DECOUPLING] Schmitt, P., Iyengar, J., Wood, C., and B. Raghavan, "The decoupling principle: a practical privacy framework", Proceedings of the 21st ACM Workshop on Hot Topics in Networks, DOI 10.1145/3563766.3564112, November 2022,
https://doi.org/10.1145/3563766.3564112. - [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. - [FINGERPINT] Goldberg, I., Wang, T., and C. A. Wood, "Network-Based Website Fingerprinting", Work in Progress, Internet-Draft, draft-irtf-pearg-website-fingerprinting-01, 8 September 2020,
https://datatracker.ietf.org/doc/html/draft-irtf-pearg-website-fingerprinting-01. - [HPKE] Barnes, R., Bhargavan, K., Lipp, B., and C. Wood, "Hybrid Public Key Encryption", RFC 9180, DOI 10.17487/RFC9180, February 2022,
https://www.rfc-editor.org/info/rfc9180. - [HTTP2] Thomson, M., Ed. and C. Benfield, Ed., "HTTP/2", RFC 9113, DOI 10.17487/RFC9113, June 2022,
https://www.rfc-editor.org/info/rfc9113. - [ODOH] Kinnear, E., McManus, P., Pauly, T., Verma, T., and C.A. Wood, "Oblivious DNS over HTTPS", RFC 9230, DOI 10.17487/RFC9230, June 2022,
https://www.rfc-editor.org/info/rfc9230. - [OHTTP] Thomson, M. and C. A. Wood, "Oblivious HTTP", RFC 9458, DOI 10.17487/RFC9458, January 2024,
https://www.rfc-editor.org/info/rfc9458. - [QUIC] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based Multiplexed and Secure Transport", RFC 9000, DOI 10.17487/RFC9000, May 2021,
https://www.rfc-editor.org/info/rfc9000. - [RANDOM-MAC] Zuniga, JC., Bernardos, CJ., Ed., and A. Andersdotter, "Randomized and Changing MAC Address state of affairs", Work in Progress, Internet-Draft, draft-ietf-madinas-mac-address-randomization-12, 28 February 2024,
https://datatracker.ietf.org/doc/html/draft-ietf-madinas-mac-address-randomization-12. - [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. - [RFC8030] Thomson, M., Damaggio, E., and B. Raymor, Ed., "Generic Event Delivery Using HTTP Push", RFC 8030, DOI 10.17487/RFC8030, December 2016,
https://www.rfc-editor.org/info/rfc8030. - [RFC8981] Gont, F., Krishnan, S., Narten, T., and R. Draves, "Temporary Address Extensions for Stateless Address Autoconfiguration in IPv6", RFC 8981, DOI 10.17487/RFC8981, February 2021,
https://www.rfc-editor.org/info/rfc8981. - [RFC9576] Davidson, A., Iyengar, J., and C. A. Wood, "The Privacy Pass Architecture", RFC 9576, DOI 10.17487/RFC9576, June 2024,
https://www.rfc-editor.org/info/rfc9576. - [TLS-ESNI] Rescorla, E., Oku, K., Sullivan, N., and C. A. Wood, "TLS Encrypted Client Hello", Work in Progress, Internet-Draft, draft-ietf-tls-esni-18, 4 March 2024,
https://datatracker.ietf.org/doc/html/draft-ietf-tls-esni-18.
IAB Members at the Time of Approval ๐
Here's the squad of Internet Architecture Board members who were in charge when this document got the final stamp of approval ๐ :
- Dhruv Dhody
- Lars Eggert
- Wes Hardaker
- Cullen Jennings
- Mallory Knodel
- Suresh Krishnan
- Mirja Kรผhlewind
- Tommy Pauly
- Alvaro Retana
- David Schinazi
- Christopher A. Wood
- Qin Wu
- Jiankang Yao
Acknowledgments ๐ซถ
Huge thank-yous to Martin Thomson, Eliot Lear, Mark Nottingham, Niels ten Oever, Vittorio Bertola, Antoine Fressancourt, Cullen Jennings, and Dhruv Dhody for their reviews and feedback. You all are literal MVPs ๐ธโจ
Authors' Addresses ๐
Mirja Kรผhlewind Email: mirja.kuehlewind@ericsson.com
Tommy Pauly Email: tpauly@apple.com
Christopher A. Wood Email: caw@heapingbits.net
๐ฆ where this page comes from
- ietf: rfc9614 2024-07
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms