rfc9458.original | rfc9458.txt | |||
---|---|---|---|---|
Oblivious HTTP Application Intermediation M. Thomson | Internet Engineering Task Force (IETF) M. Thomson | |||
Internet-Draft Mozilla | Request for Comments: 9458 Mozilla | |||
Intended status: Standards Track C. A. Wood | Category: Standards Track C. A. Wood | |||
Expires: 16 September 2023 Cloudflare | ISSN: 2070-1721 Cloudflare | |||
15 March 2023 | January 2024 | |||
Oblivious HTTP | Oblivious HTTP | |||
draft-ietf-ohai-ohttp-08 | ||||
Abstract | Abstract | |||
This document describes a system for forwarding encrypted HTTP | This document describes Oblivious HTTP, a protocol for forwarding | |||
messages. This allows a client to make multiple requests to an | encrypted HTTP messages. Oblivious HTTP allows a client to make | |||
origin server without that server being able to link those requests | multiple requests to an origin server without that server being able | |||
to the client or to identify the requests as having come from the | to link those requests to the client or to identify the requests as | |||
same client, while placing only limited trust in the nodes used to | having come from the same client, while placing only limited trust in | |||
forward the messages. | the nodes used to forward the messages. | |||
About This Document | ||||
This note is to be removed before publishing as an RFC. | ||||
The latest revision of this draft can be found at https://ietf-wg- | ||||
ohai.github.io/oblivious-http/draft-ietf-ohai-ohttp.html. Status | ||||
information for this document may be found at | ||||
https://datatracker.ietf.org/doc/draft-ietf-ohai-ohttp/. | ||||
Discussion of this document takes place on the Oblivious HTTP | ||||
Application Intermediation Working Group mailing list | ||||
(mailto:ohai@ietf.org), which is archived at | ||||
https://mailarchive.ietf.org/arch/browse/ohai/. Subscribe at | ||||
https://www.ietf.org/mailman/listinfo/ohai/. | ||||
Source for this draft and an issue tracker can be found at | ||||
https://github.com/ietf-wg-ohai/oblivious-http. | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 16 September 2023. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9458. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2023 IETF Trust and the persons identified as the | Copyright (c) 2024 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction | 1. Introduction | |||
2. Overview | 2. Overview | |||
2.1. Applicability | 2.1. Applicability | |||
2.2. Conventions and Definitions | 2.2. Conventions and Definitions | |||
3. Key Configuration | 3. Key Configuration | |||
3.1. Key Configuration Encoding | 3.1. Key Configuration Encoding | |||
3.2. Key Configuration Media Type | 3.2. Key Configuration Media Type | |||
skipping to change at line 98 ¶ | skipping to change at line 77 ¶ | |||
5.3. Signaling Key Configuration Problems | 5.3. Signaling Key Configuration Problems | |||
6. Security Considerations | 6. Security Considerations | |||
6.1. Client Responsibilities | 6.1. Client Responsibilities | |||
6.2. Relay Responsibilities | 6.2. Relay Responsibilities | |||
6.2.1. Differential Treatment | 6.2.1. Differential Treatment | |||
6.2.2. Denial of Service | 6.2.2. Denial of Service | |||
6.2.3. Traffic Analysis | 6.2.3. Traffic Analysis | |||
6.3. Server Responsibilities | 6.3. Server Responsibilities | |||
6.4. Key Management | 6.4. Key Management | |||
6.5. Replay Attacks | 6.5. Replay Attacks | |||
6.5.1. Use of Date for Anti-Replay | 6.5.1. Use of Date for Anti-replay | |||
6.5.2. Correcting Clock Differences | 6.5.2. Correcting Clock Differences | |||
6.6. Forward Secrecy | 6.6. Forward Secrecy | |||
6.7. Post-Compromise Security | 6.7. Post-Compromise Security | |||
6.8. Client Clock Exposure | 6.8. Client Clock Exposure | |||
6.9. Media Type Security | 6.9. Media Type Security | |||
6.10. Separate Gateway and Target | 6.10. Separate Gateway and Target | |||
7. Privacy Considerations | 7. Privacy Considerations | |||
8. Operational and Deployment Considerations | 8. Operational and Deployment Considerations | |||
8.1. Performance Overhead | 8.1. Performance Overhead | |||
8.2. Resource Mappings | 8.2. Resource Mappings | |||
skipping to change at line 121 ¶ | skipping to change at line 100 ¶ | |||
9.1. application/ohttp-keys Media Type | 9.1. application/ohttp-keys Media Type | |||
9.2. message/ohttp-req Media Type | 9.2. message/ohttp-req Media Type | |||
9.3. message/ohttp-res Media Type | 9.3. message/ohttp-res Media Type | |||
9.4. Registration of "date" Problem Type | 9.4. Registration of "date" Problem Type | |||
9.5. Registration of "ohttp-key" Problem Type | 9.5. Registration of "ohttp-key" Problem Type | |||
10. References | 10. References | |||
10.1. Normative References | 10.1. Normative References | |||
10.2. Informative References | 10.2. Informative References | |||
Appendix A. Complete Example of a Request and Response | Appendix A. Complete Example of a Request and Response | |||
Acknowledgments | Acknowledgments | |||
Index | ||||
Authors' Addresses | Authors' Addresses | |||
1. Introduction | 1. Introduction | |||
An HTTP request reveals information about the client's identity to | HTTP requests reveal information about client identities to servers. | |||
the server. Some of that information is in the request content, and | While the actual content of the request message is under the control | |||
therefore under the control of the client. However, the source IP | of the client, other information that is more difficult to control | |||
address of the underlying connection reveals information that the | can still be used to identify the client. | |||
client has only limited control over. | ||||
Even where an IP address is not directly associated with an | Even where an IP address is not directly associated with an | |||
individual, the requests made from it can be correlated over time to | individual, the requests made from it can be correlated over time to | |||
assemble a profile of client behavior. In particular, connection | assemble a profile of client behavior. In particular, connection | |||
reuse improves performance, but provides servers with the ability to | reuse improves performance but provides servers with the ability to | |||
correlate requests that share a connection. | link requests that share a connection. | |||
Client-configured HTTP proxies can provide a degree of protection | ||||
against IP address tracking, and systems like virtual private | ||||
networks and the Tor network [DMS2004] provide additional options for | ||||
clients. | ||||
However, even when IP address tracking is mitigated using one of | In particular, the source IP address of the underlying connection | |||
these techniques, each request needs to be on a completely new TLS | reveals identifying information that the client has only limited | |||
connection to avoid the connection itself being used to correlate | control over. While client-configured HTTP proxies can provide a | |||
behavior. This imposes considerable performance and efficiency | degree of protection against IP address tracking, they present an | |||
overheads, due to the additional round trip to the server (at a | unfortunate trade-off: if they are used without TLS, the contents of | |||
minimum), additional data exchanged, and additional CPU cost of | communication are revealed to the proxy; if they are used with TLS, a | |||
cryptographic computations. | new connection needs to be used for each request to ensure that the | |||
origin server cannot use the connection as a way to correlate | ||||
requests, incurring significant performance overheads. | ||||
To overcome these limitations, this document defines Oblivious HTTP, | To overcome these limitations, this document defines Oblivious HTTP, | |||
a protocol for encrypting and sending HTTP messages from a client to | a protocol for encrypting and sending HTTP messages from a client to | |||
a gateway through a trusted relay service. In particular, the | a gateway. This uses a trusted relay service in a manner that | |||
protocol in this document describes: | mitigates the use of metadata such as IP address and connection | |||
information for client identification, with reasonable performance | ||||
characteristics. This document describes: | ||||
1. an algorithm for encapsulating binary HTTP messages [BINARY] | 1. an algorithm for encapsulating binary HTTP messages [BINARY] | |||
using Hybrid Public Key Encryption (HPKE; [HPKE]) to protect | using Hybrid Public Key Encryption (HPKE) [HPKE] to protect their | |||
their contents, | contents, | |||
2. a method for forwarding these encapsulated messages between | 2. a method for forwarding Encapsulated Requests between Clients and | |||
clients and an Oblivious Gateway Resource through a trusted | an Oblivious Gateway Resource through a trusted Oblivious Relay | |||
Oblivious Relay Resource using HTTP, and | Resource using HTTP, and | |||
3. requirements for how the Oblivious Gateway Resource handles | 3. requirements for how the Oblivious Gateway Resource handles | |||
encapsulated HTTP messages and produces encapsulated responses | Encapsulated Requests and produces Encapsulated Responses for the | |||
for the client. | Client. | |||
The combination of encapsulation and relaying ensures that Oblivious | The combination of encapsulation and relaying ensures that Oblivious | |||
Gateway Resource never sees the client's IP address and the Oblivious | Gateway Resource never sees the Client's IP address and that the | |||
Relay Resource never sees plaintext HTTP message content. | Oblivious Relay Resource never sees plaintext HTTP message content. | |||
Oblivious HTTP allows connection reuse between the client and | Oblivious HTTP allows connection reuse between the Client and | |||
Oblivious Relay Resource, as well as between that relay and the | Oblivious Relay Resource, as well as between that relay and the | |||
Oblivious Gateway Resource, so this scheme represents a performance | Oblivious Gateway Resource, so this scheme represents a performance | |||
improvement over using just one request in each connection. With | improvement over using just one request in each connection. With | |||
limited trust placed in the Oblivious Relay Resource (see Section 6), | limited trust placed in the Oblivious Relay Resource (see Section 6), | |||
Clients are assured that requests are not uniquely attributed to them | Clients are assured that requests are not uniquely attributed to them | |||
or linked to other requests. | or linked to other requests. | |||
2. Overview | 2. Overview | |||
An Oblivious HTTP Client must initially know the following: | An Oblivious HTTP Client must initially know the following: | |||
skipping to change at line 201 ¶ | skipping to change at line 177 ¶ | |||
* The identity of an Oblivious Relay Resource that will accept relay | * The identity of an Oblivious Relay Resource that will accept relay | |||
requests carrying an Encapsulated Request as its content and | requests carrying an Encapsulated Request as its content and | |||
forward the content in these requests to a particular Oblivious | forward the content in these requests to a particular Oblivious | |||
Gateway Resource. Oblivious HTTP uses a one-to-one mapping | Gateway Resource. Oblivious HTTP uses a one-to-one mapping | |||
between Oblivious Relay and Gateway Resources; see Section 8.2 for | between Oblivious Relay and Gateway Resources; see Section 8.2 for | |||
more details. | more details. | |||
This information allows the Client to send HTTP requests to the | This information allows the Client to send HTTP requests to the | |||
Oblivious Gateway Resource for forwarding to a Target Resource. The | Oblivious Gateway Resource for forwarding to a Target Resource. The | |||
Oblivious Gateway Resource does not learn the client's IP address or | Oblivious Gateway Resource does not learn the Client's IP address or | |||
any other identifying information that might be revealed from the | any other identifying information that might be revealed from the | |||
client at the transport layer, nor does the Oblivious Gateway | Client at the transport layer, nor does the Oblivious Gateway | |||
Resource learn which of the requests it receives are from the same | Resource learn which of the requests it receives are from the same | |||
Client. | Client. | |||
.------------------------------. | .------------------------------. | |||
+---------+ +----------+ | +----------+ +----------+ | | +---------+ +----------+ | +----------+ +----------+ | | |||
| Client | | Relay | | | Gateway | | Target | | | | Client | | Relay | | | Gateway | | Target | | | |||
| | | Resource | | | Resource | | Resource | | | | | | Resource | | | Resource | | Resource | | | |||
+----+----+ +----+-----+ | +-----+----+ +----+-----+ | | +----+----+ +----+-----+ | +-----+----+ +----+-----+ | | |||
| | `-------|--------------|-------' | | | `-------|--------------|-------' | |||
| Relay | | | | | Relay | | | | |||
skipping to change at line 251 ¶ | skipping to change at line 227 ¶ | |||
1. The Client constructs an HTTP request for a Target Resource. | 1. The Client constructs an HTTP request for a Target Resource. | |||
2. The Client encodes the HTTP request in a binary HTTP message and | 2. The Client encodes the HTTP request in a binary HTTP message and | |||
then encapsulates that message using HPKE and the process from | then encapsulates that message using HPKE and the process from | |||
Section 4.3. | Section 4.3. | |||
3. The Client sends a POST request to the Oblivious Relay Resource | 3. The Client sends a POST request to the Oblivious Relay Resource | |||
with the Encapsulated Request as the content of that message. | with the Encapsulated Request as the content of that message. | |||
4. The Oblivious Relay Resource forwards this request to the | 4. The Oblivious Relay Resource forwards this request to the | |||
Oblivious Gateway resource. | Oblivious Gateway Resource. | |||
5. The Oblivious Gateway Resource receives this request and removes | 5. The Oblivious Gateway Resource receives this request and removes | |||
the HPKE protection to obtain an HTTP request. | the HPKE protection to obtain an HTTP request. | |||
The Oblivious Gateway Resource then handles the HTTP request. This | The Oblivious Gateway Resource then handles the HTTP request. This | |||
typically involves making an HTTP request using the content of the | typically involves making an HTTP request using the content of the | |||
Encapsulated Request. Once the Oblivious Gateway Resource has an | Encapsulated Request. Once the Oblivious Gateway Resource has an | |||
HTTP response for this request, the following steps occur to return | HTTP response for this request, the following steps occur to return | |||
this response to the client: | this response to the Client: | |||
1. The Oblivious Gateway Resource encapsulates the HTTP response | 1. The Oblivious Gateway Resource encapsulates the HTTP response | |||
following the process in Section 4.4 and sends this in response | following the process in Section 4.4 and sends this in response | |||
to the request from the Oblivious Relay Resource. | to the request from the Oblivious Relay Resource. | |||
2. The Oblivious Relay Resource forwards this response to the | 2. The Oblivious Relay Resource forwards this response to the | |||
Client. | Client. | |||
3. The Client removes the encapsulation to obtain the response to | 3. The Client removes the encapsulation to obtain the response to | |||
the original request. | the original request. | |||
skipping to change at line 283 ¶ | skipping to change at line 259 ¶ | |||
protection between the Client and the Oblivious Gateway, but | protection between the Client and the Oblivious Gateway, but | |||
importantly not between the Client and the Target Resource. While | importantly not between the Client and the Target Resource. While | |||
the Target Resource is a distinct HTTP resource from the Oblivious | the Target Resource is a distinct HTTP resource from the Oblivious | |||
Gateway Resource, they are both logically under the control of the | Gateway Resource, they are both logically under the control of the | |||
Oblivious Gateway, since the Oblivious Gateway Resource can | Oblivious Gateway, since the Oblivious Gateway Resource can | |||
unilaterally dictate the responses returned from the Target Resource | unilaterally dictate the responses returned from the Target Resource | |||
to the Client. This arrangement is shown in Figure 1. | to the Client. This arrangement is shown in Figure 1. | |||
2.1. Applicability | 2.1. Applicability | |||
Oblivious HTTP has limited applicability. Imporantly, it requires | Oblivious HTTP has limited applicability. Importantly, it requires | |||
expicit support from a willing Oblivious Relay Resource and Oblivious | explicit support from a willing Oblivious Relay Resource and | |||
Gateway Resource, thereby limiting the use of Oblivious HTTP for | Oblivious Gateway Resource, thereby limiting the use of Oblivious | |||
generic applications; see Section 6.3 for more information. | HTTP for generic applications; see Section 6.3 for more information. | |||
Many uses of HTTP benefit from being able to carry state between | Many uses of HTTP benefit from being able to carry state between | |||
requests, such as with cookies ([COOKIES]), authentication | requests, such as with cookies [COOKIES], authentication (Section 11 | |||
(Section 11 of [HTTP]), or even alternative services ([RFC7838]). | of [HTTP]), or even alternative services [RFC7838]. Oblivious HTTP | |||
Oblivious HTTP removes linkage at the transport layer, which is only | removes linkage at the transport layer, which is only useful for an | |||
useful for an application that does not carry state between requests. | application that does not carry state between requests. | |||
Oblivious HTTP is primarily useful where privacy risks associated | Oblivious HTTP is primarily useful where the privacy risks associated | |||
with possible stateful treatment of requests are sufficiently large | with possible stateful treatment of requests are sufficiently large | |||
that the cost of deploying this protocol can be justified. Oblivious | that the cost of deploying this protocol can be justified. Oblivious | |||
HTTP is simpler and less costly than more robust systems, like Prio | HTTP is simpler and less costly than more robust systems, like Prio | |||
([PRIO]) or Tor ([DMS2004]), which can provide stronger guarantees at | [PRIO] or Tor [DMS2004], which can provide stronger guarantees at | |||
higher operational costs. | higher operational costs. | |||
Oblivious HTTP is more costly than a direct connection to a server. | Oblivious HTTP is more costly than a direct connection to a server. | |||
Some costs, like those involved with connection setup, can be | Some costs, like those involved with connection setup, can be | |||
amortized, but there are several ways in which Oblivious HTTP is more | amortized, but there are several ways in which Oblivious HTTP is more | |||
expensive than a direct request: | expensive than a direct request: | |||
* Each request requires at least two regular HTTP requests, which | * Each request requires at least two regular HTTP requests, which | |||
could increase latency. | could increase latency. | |||
* Each request is expanded in size with additional HTTP fields, | * Each request is expanded in size with additional HTTP fields, | |||
encryption-related metadata, and AEAD expansion. | encryption-related metadata, and Authenticated Encryption with | |||
Associated Data (AEAD) expansion. | ||||
* Deriving cryptographic keys and applying them for request and | * Deriving cryptographic keys and applying them for request and | |||
response protection takes non-negligible computational resources. | response protection takes non-negligible computational resources. | |||
Examples of where preventing the linking of requests might justify | Examples of where preventing the linking of requests might justify | |||
these costs include: | these costs include: | |||
* DNS queries. DNS queries made to a recursive resolver reveal | DNS queries: DNS queries made to a recursive resolver reveal | |||
information about the requester, particularly if linked to other | information about the requester, particularly if linked to other | |||
queries. | queries. | |||
* Telemetry submission. Applications that submit reports about | Telemetry submission: Applications that submit reports about their | |||
their usage to their developers might use Oblivious HTTP for some | usage to their developers might use Oblivious HTTP for some types | |||
types of moderately sensitive data. | of moderately sensitive data. | |||
These are examples of requests where there is information in a | These are examples of requests where there is information in a | |||
request that - if it were connected to the identity of the user - | request that -- if it were connected to the identity of the user -- | |||
might allow a server to learn something about that user even if the | might allow a server to learn something about that user even if the | |||
identity of the user is pseudonymous. Other examples include the | identity of the user were pseudonymous. Other examples include | |||
submission of anonymous surveys, making search queries, or requesting | submitting anonymous surveys, making search queries, or requesting | |||
location-specific content (such as retrieving tiles of a map | location-specific content (such as retrieving tiles of a map | |||
display). | display). | |||
In addition to these limitations, Section 6 describes operational | In addition to these limitations, Section 6 describes operational | |||
constraints that are necessary to realize the goals of the protocol. | constraints that are necessary to realize the goals of the protocol. | |||
2.2. Conventions and Definitions | 2.2. Conventions and Definitions | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
This document uses terminology from [HTTP] and defines several terms | This document uses terminology from [HTTP] and defines several terms | |||
as follows: | as follows: | |||
Client: A Client originates Oblivious HTTP requests. A Client is | Client: | |||
also an HTTP client in two ways: for the Target Resource and for | A Client originates Oblivious HTTP requests. A Client is also an | |||
the Oblivious Relay Resource. However, when referring to the HTTP | HTTP client in two ways: for the Target Resource and for the | |||
Oblivious Relay Resource. However, when referring to the HTTP | ||||
definition of client (Section 3.3 of [HTTP]), the term "HTTP | definition of client (Section 3.3 of [HTTP]), the term "HTTP | |||
client" is used; see Section 5. | client" is used; see Section 5. | |||
Encapsulated Request: An HTTP request that is encapsulated in an | Encapsulated Request: | |||
HPKE-encrypted message; see Section 4.3. | An HTTP request that is encapsulated in an HPKE-encrypted message; | |||
see Section 4.3. | ||||
Encapsulated Response: An HTTP response that is encapsulated in an | Encapsulated Response: | |||
HPKE-encrypted message; see Section 4.4. | An HTTP response that is encapsulated in an HPKE-encrypted | |||
message; see Section 4.4. | ||||
Oblivious Relay Resource: An intermediary that forwards Encapsulated | Oblivious Relay Resource: | |||
Requests and Responses between Clients and a single Oblivious | An intermediary that forwards Encapsulated Requests and Responses | |||
Gateway Resource. In context, this can be referred to as simply a | between Clients and a single Oblivious Gateway Resource. In | |||
"relay". | context, this can be referred to simply as a "relay". | |||
Oblivious Gateway Resource: A resource that can receive an | Oblivious Gateway Resource: | |||
Encapsulated Request, extract the contents of that request, | A resource that can receive an Encapsulated Request, extract the | |||
forward it to a Target Resource, receive a response, encapsulate | contents of that request, forward it to a Target Resource, receive | |||
that response, then return the resulting Encapsulated Response. | a response, encapsulate that response, and then return the | |||
In context, this can be referred to as simply a "gateway". | resulting Encapsulated Response. In context, this can be referred | |||
to simply as a "gateway". | ||||
Target Resource: The resource that is the target of an Encapsulated | Target Resource: | |||
Request. This resource logically handles only regular HTTP | The resource that is the target of an Encapsulated Request. This | |||
requests and responses and so might be ignorant of the use of | resource logically handles only regular HTTP requests and | |||
Oblivious HTTP to reach it. | responses, so it might be ignorant of the use of Oblivious HTTP to | |||
reach it. | ||||
This document includes pseudocode that uses the functions and | This document includes pseudocode that uses the functions and | |||
conventions defined in [HPKE]. | conventions defined in [HPKE]. | |||
Encoding an integer to a sequence of bytes in network byte order is | Encoding an integer to a sequence of bytes in network byte order is | |||
described using the function encode(n, v), where n is the number of | described using the function encode(n, v), where n is the number of | |||
bytes and v is the integer value. ASCII [ASCII] encoding of a string | bytes and v is the integer value. ASCII [ASCII] encoding of a string | |||
s is indicated using the function encode_str(s). | s is indicated using the function encode_str(s). | |||
Formats are described using notation from Section 1.3 of [QUIC]. An | Formats are described using notation from Section 1.3 of [QUIC]. An | |||
skipping to change at line 401 ¶ | skipping to change at line 383 ¶ | |||
the Oblivious Gateway Resource in order to send Encapsulated | the Oblivious Gateway Resource in order to send Encapsulated | |||
Requests. In order to ensure that Clients do not encapsulate | Requests. In order to ensure that Clients do not encapsulate | |||
messages that other entities can intercept, the key configuration | messages that other entities can intercept, the key configuration | |||
MUST be authenticated and have integrity protection. | MUST be authenticated and have integrity protection. | |||
This document does not define how that acquisition occurs. However, | This document does not define how that acquisition occurs. However, | |||
in order to help facilitate interoperability, it does specify a | in order to help facilitate interoperability, it does specify a | |||
format for the keys. This ensures that different Client | format for the keys. This ensures that different Client | |||
implementations can be configured in the same way and also enables | implementations can be configured in the same way and also enables | |||
advertising key configurations in a consistent format. This format | advertising key configurations in a consistent format. This format | |||
might be used, for example with HTTPS, as part of a system for | might be used, for example, with HTTPS, as part of a system for | |||
configuring or discovering key configurations. Note however that | configuring or discovering key configurations. However, note that | |||
such a system needs to consider the potential for key configuration | such a system needs to consider the potential for key configuration | |||
to be used to compromise Client privacy; see Section 7. | to be used to compromise Client privacy; see Section 7. | |||
A Client might have multiple key configurations to select from when | A Client might have multiple key configurations to select from when | |||
encapsulating a request. Clients are responsible for selecting a | encapsulating a request. Clients are responsible for selecting a | |||
preferred key configuration from those it supports. Clients need to | preferred key configuration from those it supports. Clients need to | |||
consider both the key encapsulation method (KEM) and the combinations | consider both the Key Encapsulation Method (KEM) and the combinations | |||
of key derivation function (KDF) and authenticated encryption with | of the Key Derivation Function (KDF) and AEAD in this decision. | |||
associated data (AEAD) in this decision. | ||||
3.1. Key Configuration Encoding | 3.1. Key Configuration Encoding | |||
A single key configuration consists of a key identifier, a public | A single key configuration consists of a key identifier, a public | |||
key, an identifier for the KEM that the public key uses, and a set of | key, an identifier for the KEM that the public key uses, and a set of | |||
HPKE symmetric algorithms. Each symmetric algorithm consists of an | HPKE symmetric algorithms. Each symmetric algorithm consists of an | |||
identifier for a KDF and an identifier for an AEAD. | identifier for a KDF and an identifier for an AEAD. | |||
Figure 2 shows a single key configuration. | Figure 2 shows a single key configuration. | |||
skipping to change at line 439 ¶ | skipping to change at line 420 ¶ | |||
HPKE KEM ID (16), | HPKE KEM ID (16), | |||
HPKE Public Key (Npk * 8), | HPKE Public Key (Npk * 8), | |||
HPKE Symmetric Algorithms Length (16) = 4..65532, | HPKE Symmetric Algorithms Length (16) = 4..65532, | |||
HPKE Symmetric Algorithms (32) ..., | HPKE Symmetric Algorithms (32) ..., | |||
} | } | |||
Figure 2: A Single Key Configuration | Figure 2: A Single Key Configuration | |||
That is, a key configuration consists of the following fields: | That is, a key configuration consists of the following fields: | |||
Key Identifier: An 8 bit value that identifies the key used by the | Key Identifier: | |||
Oblivious Gateway Resource. | An 8-bit value that identifies the key used by the Oblivious | |||
Gateway Resource. | ||||
HPKE KEM ID: A 16 bit value that identifies the Key Encapsulation | HPKE KEM ID: | |||
Method (KEM) used for the identified key as defined in Section 7.1 | A 16-bit value that identifies the KEM used for the identified key | |||
of [HPKE] or the HPKE KDF IANA registry | as defined in Section 7.1 of [HPKE] or the "HPKE KEM Identifiers" | |||
(https://www.iana.org/assignments/hpke/hpke.xhtml#hpke-kem-ids). | registry <https://www.iana.org/assignments/hpke>. | |||
HPKE Public Key: The public key used by the gateway. The length of | HPKE Public Key: | |||
the public key is Npk, which is determined by the choice of HPKE | The public key used by the gateway. The length of the public key | |||
KEM as defined in Section 4 of [HPKE]. | is Npk, which is determined by the choice of HPKE KEM as defined | |||
in Section 4 of [HPKE]. | ||||
HPKE Symmetric Algorithms Length: A 16 bit integer in network byte | HPKE Symmetric Algorithms Length: | |||
order that encodes the length, in bytes, of the HPKE Symmetric | A 16-bit integer in network byte order that encodes the length, in | |||
Algorithms field that follows. | bytes, of the HPKE Symmetric Algorithms field that follows. | |||
HPKE Symmetric Algorithms: One or more pairs of identifiers for the | HPKE Symmetric Algorithms: | |||
different combinations of HPKE KDF and AEAD that the Oblivious | One or more pairs of identifiers for the different combinations of | |||
Gateway Resource supports: | HPKE KDF and AEAD that the Oblivious Gateway Resource supports: | |||
HPKE KDF ID: A 16 bit HPKE KDF identifier as defined in | HPKE KDF ID: | |||
Section 7.2 of [HPKE] or the HPKE KDF IANA registry | A 16-bit HPKE KDF identifier as defined in Section 7.2 of | |||
(https://www.iana.org/assignments/hpke/hpke.xhtml#hpke-kdf- | [HPKE] or the "HPKE KDF Identifiers" registry | |||
ids). | <https://www.iana.org/assignments/hpke>. | |||
HPKE AEAD ID: A 16 bit HPKE AEAD identifier as defined in | HPKE AEAD ID: | |||
Section 7.3 of [HPKE] or the HPKE AEAD IANA registry | A 16-bit HPKE AEAD identifier as defined in Section 7.3 of | |||
(https://www.iana.org/assignments/hpke/hpke.xhtml#hpke-aead- | [HPKE] or the "HPKE AEAD Identifiers" registry | |||
ids). | <https://www.iana.org/assignments/hpke>. | |||
3.2. Key Configuration Media Type | 3.2. Key Configuration Media Type | |||
The "application/ohttp-keys" format is a media type that identifies a | The "application/ohttp-keys" format is a media type that identifies a | |||
serialized collection of key configurations. The content of this | serialized collection of key configurations. The content of this | |||
media type comprises one or more key configuration encodings (see | media type comprises one or more key configuration encodings (see | |||
Section 3.1) that are concatenated; see Section 9.1 for a definition | Section 3.1). Each encoded configuration is prefixed with a 2-byte | |||
of the media type. | integer in network byte order that indicates the length of the key | |||
configuration in bytes. The length-prefixed encodings are | ||||
concatenated to form a list. See Section 9.1 for a definition of the | ||||
media type. | ||||
Evolution of the key configuration format is supported through the | Evolution of the key configuration format is supported through the | |||
definition of new formats that are identified by new media types. | definition of new formats that are identified by new media types. | |||
A Client that receives an "application/ohttp-keys" object with | ||||
encoding errors might be able to recover one or more key | ||||
configurations. Differences in how key configurations are recovered | ||||
might be exploited to segregate Clients, so Clients MUST discard | ||||
incorrectly encoded key configuration collections. | ||||
4. HPKE Encapsulation | 4. HPKE Encapsulation | |||
This document defines how a binary-encoded HTTP message [BINARY] is | This document defines how a binary-encoded HTTP message [BINARY] is | |||
encapsulated using HPKE [HPKE]. Separate media types are defined to | encapsulated using HPKE [HPKE]. Separate media types are defined to | |||
distinguish request and response messages: | distinguish request and response messages: | |||
* An Encapsulated Request format defined in Section 4.1 is | * An Encapsulated Request format defined in Section 4.1 is | |||
identified by the "message/ohttp-req" media type (message/ | identified by the "message/ohttp-req" media type (Section 9.2). | |||
ohttp-req Media Type). | ||||
* An Encapsulated Response format defined in Section 4.2 is | * An Encapsulated Response format defined in Section 4.2 is | |||
identified by the "message/ohttp-res" media type (Section 9.3). | identified by the "message/ohttp-res" media type (Section 9.3). | |||
Alternative encapsulations or message formats are indicated using the | Alternative encapsulations or message formats are indicated using the | |||
media type; see Section 4.5 and Section 4.6. | media type; see Sections 4.5 and 4.6. | |||
4.1. Request Format | 4.1. Request Format | |||
A message in "message/ohttp-req" format protects a binary HTTP | A message in "message/ohttp-req" format protects a binary HTTP | |||
request message; see Figure 3. | request message; see Figure 3. | |||
Request { | Request { | |||
Binary HTTP Message (..), | Binary HTTP Message (..), | |||
} | } | |||
Figure 3: Plaintext Request Content | Figure 3: Plaintext Request Structure | |||
This plaintext Request is encapsulated into a message in "message/ | This plaintext Request structure is encapsulated into a message in | |||
ohttp-req" form by generating an Encapsulated Request. An | "message/ohttp-req" form by generating an Encapsulated Request. An | |||
Encapsulated Request comprises a key identifier; HPKE parameters for | Encapsulated Request comprises a key identifier; HPKE parameters for | |||
the chosen KEM, KDF, and AEAD; the encapsulated KEM shared secret (or | the chosen KEM, KDF, and AEAD; the encapsulated KEM shared secret (or | |||
enc); and an HPKE-protected binary HTTP request message. | enc); and an HPKE-protected binary HTTP request message. | |||
An Encapsulated Request is shown in Figure 4. Section 4.3 describes | An Encapsulated Request is shown in Figure 4. Section 4.3 describes | |||
the process for constructing and processing an Encapsulated Request. | the process for constructing and processing an Encapsulated Request. | |||
Encapsulated Request { | Encapsulated Request { | |||
Key Identifier (8), | Key Identifier (8), | |||
HPKE KEM ID (16), | HPKE KEM ID (16), | |||
HPKE KDF ID (16), | HPKE KDF ID (16), | |||
HPKE AEAD ID (16), | HPKE AEAD ID (16), | |||
Encapsulated KEM Shared Secret (8 * Nenc), | Encapsulated KEM Shared Secret (8 * Nenc), | |||
HPKE-Protected Request (..), | HPKE-Protected Request (..), | |||
} | } | |||
Figure 4: Encapsulated Request | Figure 4: Encapsulated Request | |||
That is, an Encapsulated Request comprises a Key Identifier, HPKE KEM | That is, an Encapsulated Request comprises a Key Identifier, an HPKE | |||
ID, HPKE KDF ID, HPKE AEAD ID, Encapsulated KEM Shared Secret, and | KEM ID, an HPKE KDF ID, an HPKE AEAD ID, an Encapsulated KEM Shared | |||
HPKE-Protected Request. The Key Identifier, HPKE KEM ID, HPKE KDF | Secret, and an HPKE-Protected Request. The Key Identifier, HPKE KEM | |||
ID, and HPKE AEAD ID fields are defined in Section 3.1. The | ID, HPKE KDF ID, and HPKE AEAD ID fields are defined in Section 3.1. | |||
Encapsulated KEM Shared Secret is the output of the Encap() function | The Encapsulated KEM Shared Secret is the output of the Encap() | |||
for the KEM, which is Nenc bytes in length, as defined in Section 4 | function for the KEM, which is Nenc bytes in length, as defined in | |||
of [HPKE]. | Section 4 of [HPKE]. | |||
4.2. Response Format | 4.2. Response Format | |||
A message in "message/ohttp-res" format protects a binary HTTP | A message in "message/ohttp-res" format protects a binary HTTP | |||
response message; see Figure 5. | response message; see Figure 5. | |||
Response { | Response { | |||
Binary HTTP Message (..), | Binary HTTP Message (..), | |||
} | } | |||
Figure 5: Plaintext Response Content | Figure 5: Plaintext Response Structure | |||
This plaintext Response is encapsulated into a message in "message/ | This plaintext Response structure is encapsulated into a message in | |||
ohttp-res" form by generating an Encapsulated Response. An | "message/ohttp-res" form by generating an Encapsulated Response. An | |||
Encapsulated Response comprises a nonce and the AEAD-protected binary | Encapsulated Response comprises a nonce and the AEAD-protected binary | |||
HTTP response message. | HTTP response message. | |||
An Encapsulated Response is shown in Figure 6. Section 4.4 describes | An Encapsulated Response is shown in Figure 6. Section 4.4 describes | |||
the process for constructing and processing an Encapsulated Response. | the process for constructing and processing an Encapsulated Response. | |||
Encapsulated Response { | Encapsulated Response { | |||
Nonce (8 * max(Nn, Nk)), | Nonce (8 * max(Nn, Nk)), | |||
AEAD-Protected Response (..), | AEAD-Protected Response (..), | |||
} | } | |||
Figure 6: Encapsulated Response | Figure 6: Encapsulated Response | |||
That is, an Encapsulated Response contains a Nonce and an AEAD- | That is, an Encapsulated Response contains a Nonce and an AEAD- | |||
Protected Response. The Nonce field is either Nn or Nk bytes long, | Protected Response. The Nonce field is either Nn or Nk bytes long, | |||
whichever is larger. The Nn and Nk values correspond to parameters | whichever is larger. The Nn and Nk values correspond to parameters | |||
of the AEAD used in HPKE, which is defined in Section 7.3 of [HPKE] | of the AEAD used in HPKE, which is defined in Section 7.3 of [HPKE] | |||
or the HPKE AEAD IANA registry | or the "HPKE AEAD Identifiers" IANA registry | |||
(https://www.iana.org/assignments/hpke/hpke.xhtml#hpke-aead-ids). Nn | <https://www.iana.org/assignments/hpke>. Nn and Nk refer to the size | |||
and Nk refer to the size of the AEAD nonce and key respectively, in | of the AEAD nonce and key, respectively, in bytes. | |||
bytes. | ||||
4.3. Encapsulation of Requests | 4.3. Encapsulation of Requests | |||
Clients encapsulate a request, request, using values from a key | Clients encapsulate a request, identified as request, using values | |||
configuration: | from a key configuration: | |||
* the key identifier from the configuration, key_id, with the | * the key identifier from the configuration (key_id) with the | |||
corresponding KEM identified by kem_id, | corresponding KEM identified by kem_id, | |||
* the public key from the configuration, pkR, and | * the public key from the configuration (pkR), and | |||
* a combination of KDF, identified by kdf_id, and AEAD, identified | * a combination of KDF (identified by kdf_id) and AEAD (identified | |||
by aead_id, that the Client selects from those in the key | by aead_id) that the Client selects from those in the key | |||
configuration. | configuration. | |||
The Client then constructs an Encapsulated Request, enc_request, from | The Client then constructs an Encapsulated Request, enc_request, from | |||
a binary encoded HTTP request [BINARY], request, as follows: | a binary-encoded HTTP request [BINARY] (request) as follows: | |||
1. Construct a message header, hdr, by concatenating the values of | 1. Construct a message header (hdr) by concatenating the values of | |||
key_id, kem_id, kdf_id, and aead_id, as one 8-bit integer and | key_id, kem_id, kdf_id, and aead_id as one 8-bit integer and | |||
three 16-bit integers, respectively, each in network byte order. | three 16-bit integers, respectively, each in network byte order. | |||
2. Build info by concatenating the ASCII-encoded string "message/ | 2. Build a sequence of bytes (info) by concatenating the ASCII- | |||
bhttp request", a zero byte, and the header. Note: Section 4.6 | encoded string "message/bhttp request", a zero byte, and the | |||
discusses how alternative message formats might use a different | header. Note: Section 4.6 discusses how alternative message | |||
info value. | formats might use a different info value. | |||
3. Create a sending HPKE context by invoking SetupBaseS() | 3. Create a sending HPKE context by invoking SetupBaseS() | |||
(Section 5.1.1 of [HPKE]) with the public key of the receiver pkR | (Section 5.1.1 of [HPKE]) with the public key of the receiver pkR | |||
and info. This yields the context sctxt and an encapsulation key | and info. This yields the context sctxt and an encapsulation key | |||
enc. | enc. | |||
4. Encrypt request by invoking the Seal() method on sctxt | 4. Encrypt request by invoking the Seal() method on sctxt | |||
(Section 5.2 of [HPKE]) with empty associated data aad, yielding | (Section 5.2 of [HPKE]) with empty associated data aad, yielding | |||
ciphertext ct. | ciphertext ct. | |||
5. Concatenate the values of hdr, enc, and ct, yielding an Encrypted | 5. Concatenate the values of hdr, enc, and ct. This yields an | |||
Request enc_request. | Encapsulated Request (enc_request). | |||
Note that enc is of fixed-length, so there is no ambiguity in parsing | Note that enc is of fixed length, so there is no ambiguity in parsing | |||
this structure. | this structure. | |||
In pseudocode, this procedure is as follows: | In pseudocode, this procedure is as follows: | |||
hdr = concat(encode(1, key_id), | hdr = concat(encode(1, key_id), | |||
encode(2, kem_id), | encode(2, kem_id), | |||
encode(2, kdf_id), | encode(2, kdf_id), | |||
encode(2, aead_id)) | encode(2, aead_id)) | |||
info = concat(encode_str("message/bhttp request"), | info = concat(encode_str("message/bhttp request"), | |||
encode(1, 0), | encode(1, 0), | |||
hdr) | hdr) | |||
enc, sctxt = SetupBaseS(pkR, info) | enc, sctxt = SetupBaseS(pkR, info) | |||
ct = sctxt.Seal("", request) | ct = sctxt.Seal("", request) | |||
enc_request = concat(hdr, enc, ct) | enc_request = concat(hdr, enc, ct) | |||
An Oblivious Gateway Resource decrypts an Encapsulated Request by | An Oblivious Gateway Resource decrypts an Encapsulated Request by | |||
reversing this process. To decapsulate an Encapsulated Request, | reversing this process. To decapsulate an Encapsulated Request, | |||
enc_request: | enc_request: | |||
1. Parses enc_request into key_id, kem_id, kdf_id, aead_id, enc, and | 1. Parse enc_request into key_id, kem_id, kdf_id, aead_id, enc, and | |||
ct (indicated using the function parse() in pseudocode). The | ct (indicated using the function parse() in pseudocode). The | |||
Oblivious Gateway Resource is then able to find the HPKE private | Oblivious Gateway Resource is then able to find the HPKE private | |||
key, skR, corresponding to key_id. | key, skR, corresponding to key_id. | |||
a. If key_id does not identify a key matching the type of | a. If key_id does not identify a key matching the type of | |||
kem_id, the Oblivious Gateway Resource returns an error. | kem_id, the Oblivious Gateway Resource returns an error. | |||
b. If kdf_id and aead_id identify a combination of KDF and AEAD | b. If kdf_id and aead_id identify a combination of KDF and AEAD | |||
that the Oblivious Gateway Resource is unwilling to use with skR, | that the Oblivious Gateway Resource is unwilling to use with | |||
the Oblivious Gateway Resource returns an error. | skR, the Oblivious Gateway Resource returns an error. | |||
2. Build info by concatenating the ASCII-encoded string "message/ | 2. Build a sequence of bytes (info) by concatenating the ASCII- | |||
bhttp request", a zero byte, key_id as an 8-bit integer, plus | encoded string "message/bhttp request"; a zero byte; key_id as an | |||
kem_id, kdf_id, and aead_id as three 16-bit integers. | 8-bit integer; plus kem_id, kdf_id, and aead_id as three 16-bit | |||
integers. | ||||
3. Create a receiving HPKE context, rctxt, by invoking SetupBaseR() | 3. Create a receiving HPKE context, rctxt, by invoking SetupBaseR() | |||
(Section 5.1.1 of [HPKE]) with skR, enc, and info. | (Section 5.1.1 of [HPKE]) with skR, enc, and info. | |||
4. Decrypt ct by invoking the Open() method on rctxt (Section 5.2 of | 4. Decrypt ct by invoking the Open() method on rctxt (Section 5.2 of | |||
[HPKE]), with an empty associated data aad, yielding request or | [HPKE]), with an empty associated data aad, yielding request or | |||
an error on failure. If decryption fails, the Oblivious Gateway | an error on failure. If decryption fails, the Oblivious Gateway | |||
Resource returns an error. | Resource returns an error. | |||
In pseudocode, this procedure is as follows: | In pseudocode, this procedure is as follows: | |||
skipping to change at line 669 ¶ | skipping to change at line 660 ¶ | |||
encode(2, kdf_id), | encode(2, kdf_id), | |||
encode(2, aead_id)) | encode(2, aead_id)) | |||
rctxt = SetupBaseR(enc, skR, info) | rctxt = SetupBaseR(enc, skR, info) | |||
request, error = rctxt.Open("", ct) | request, error = rctxt.Open("", ct) | |||
The Oblivious Gateway Resource retains the HPKE context, rctxt, so | The Oblivious Gateway Resource retains the HPKE context, rctxt, so | |||
that it can encapsulate a response. | that it can encapsulate a response. | |||
4.4. Encapsulation of Responses | 4.4. Encapsulation of Responses | |||
Oblivious Gateway Resources generate an Encapsulated Response, | Oblivious Gateway Resources generate an Encapsulated Response | |||
enc_response, from a binary encoded HTTP response [BINARY], response. | (enc_response) from a binary-encoded HTTP response [BINARY] | |||
The Oblivious Gateway Resource uses the HPKE receiver context, rctxt, | (response). The Oblivious Gateway Resource uses the HPKE receiver | |||
as the HPKE context, context, as follows: | context (rctxt) as the HPKE context (context) as follows: | |||
1. Export a secret, secret, from context, using the string "message/ | 1. Export a secret (secret) from context, using the string "message/ | |||
bhttp response" as the exporter_context parameter to | bhttp response" as the exporter_context parameter to | |||
context.Export; see Section 5.3 of [HPKE]. The length of this | context.Export; see Section 5.3 of [HPKE]. The length of this | |||
secret is max(Nn, Nk), where Nn and Nk are the length of AEAD key | secret is max(Nn, Nk), where Nn and Nk are the length of the AEAD | |||
and nonce associated with context. Note: Section 4.6 discusses | key and nonce that are associated with context. Note: | |||
how alternative message formats might use a different context | Section 4.6 discusses how alternative message formats might use a | |||
value. | different context value. | |||
2. Generate a random value of length max(Nn, Nk) bytes, called | 2. Generate a random value of length max(Nn, Nk) bytes, called | |||
response_nonce. | response_nonce. | |||
3. Extract a pseudorandom key, prk, using the Extract function | 3. Extract a pseudorandom key (prk) using the Extract function | |||
provided by the KDF algorithm associated with context. The ikm | provided by the KDF algorithm associated with context. The ikm | |||
input to this function is secret; the salt input is the | input to this function is secret; the salt input is the | |||
concatenation of enc (from enc_request) and response_nonce. | concatenation of enc (from enc_request) and response_nonce. | |||
4. Use the Expand function provided by the same KDF to create an | 4. Use the Expand function provided by the same KDF to create an | |||
AEAD key, key, of length Nk - the length of the keys used by the | AEAD key, key, of length Nk -- the length of the keys used by the | |||
AEAD associated with context. Generating aead_key uses a label | AEAD associated with context. Generating aead_key uses a label | |||
of "key". | of "key". | |||
5. Use the same Expand function to create a nonce, nonce, of length | 5. Use the same Expand function to create a nonce, nonce, of length | |||
Nn - the length of the nonce used by the AEAD. Generating | Nn -- the length of the nonce used by the AEAD. Generating | |||
aead_nonce uses a label of "nonce". | aead_nonce uses a label of "nonce". | |||
6. Encrypt response, passing the AEAD function Seal the values of | 6. Encrypt response, passing the AEAD function Seal the values of | |||
aead_key, aead_nonce, an empty aad, and a pt input of response, | aead_key, aead_nonce, an empty aad, and a pt input of response. | |||
which yields ct. | This yields ct. | |||
7. Concatenate response_nonce and ct, yielding an Encapsulated | 7. Concatenate response_nonce and ct, yielding an Encapsulated | |||
Response, enc_response. Note that response_nonce is of fixed- | Response, enc_response. Note that response_nonce is of fixed | |||
length, so there is no ambiguity in parsing either response_nonce | length, so there is no ambiguity in parsing either response_nonce | |||
or ct. | or ct. | |||
In pseudocode, this procedure is as follows: | In pseudocode, this procedure is as follows: | |||
secret = context.Export("message/bhttp response", Nk) | secret = context.Export("message/bhttp response", max(Nn, Nk)) | |||
response_nonce = random(max(Nn, Nk)) | response_nonce = random(max(Nn, Nk)) | |||
salt = concat(enc, response_nonce) | salt = concat(enc, response_nonce) | |||
prk = Extract(salt, secret) | prk = Extract(salt, secret) | |||
aead_key = Expand(prk, "key", Nk) | aead_key = Expand(prk, "key", Nk) | |||
aead_nonce = Expand(prk, "nonce", Nn) | aead_nonce = Expand(prk, "nonce", Nn) | |||
ct = Seal(aead_key, aead_nonce, "", response) | ct = Seal(aead_key, aead_nonce, "", response) | |||
enc_response = concat(response_nonce, ct) | enc_response = concat(response_nonce, ct) | |||
Clients decrypt an Encapsulated Response by reversing this process. | Clients decrypt an Encapsulated Response by reversing this process. | |||
That is, Clients first parse enc_response into response_nonce and ct. | That is, Clients first parse enc_response into response_nonce and ct. | |||
They then follow the same process to derive values for aead_key and | Then, they follow the same process to derive values for aead_key and | |||
aead_nonce, using their sending HPKE context, sctxt, as the HPKE | aead_nonce, using their sending HPKE context, sctxt, as the HPKE | |||
context, context. | context, context. | |||
The Client uses these values to decrypt ct using the Open function | The Client uses these values to decrypt ct using the AEAD function | |||
provided by the AEAD. Decrypting might produce an error, as follows: | Open. Decrypting might produce an error, as follows: | |||
response, error = Open(aead_key, aead_nonce, "", ct) | response, error = Open(aead_key, aead_nonce, "", ct) | |||
4.5. Request and Response Media Types | 4.5. Request and Response Media Types | |||
Media types are used to identify Encapsulated Requests and Responses; | Media types are used to identify Encapsulated Requests and Responses; | |||
see Section 9.2 and Section 9.3 for definitions of these media types. | see Sections 9.2 and 9.3 for definitions of these media types. | |||
Evolution of the format of Encapsulated Requests and Responses is | Evolution of the format of Encapsulated Requests and Responses is | |||
supported through the definition of new formats that are identified | supported through the definition of new formats that are identified | |||
by new media types. New media types might be defined to use similar | by new media types. New media types might be defined to use a | |||
encapsulation with a different HTTP message format than in [BINARY]; | similar encapsulation with a different HTTP message format than in | |||
see Section 4.6 for guidance on reusing this encapsulation. | [BINARY]; see Section 4.6 for guidance on reusing this encapsulation | |||
Alternatively, a new encapsulation method might be defined. | method. Alternatively, a new encapsulation method might be defined. | |||
4.6. Repurposing the Encapsulation Format | 4.6. Repurposing the Encapsulation Format | |||
The encrypted payload of an Oblivious HTTP request and response is a | The encrypted payload of an Oblivious HTTP request and response is a | |||
binary HTTP message [BINARY]. The Client and Oblivious Gateway | binary HTTP message [BINARY]. The Client and Oblivious Gateway | |||
Resource agree on this encrypted payload type by specifying the media | Resource agree on this encrypted payload type by specifying the media | |||
type "message/bhttp" in the HPKE info string and HPKE export context | type "message/bhttp" in the HPKE info string and HPKE export context | |||
string for request and response encryption, respectively. | string for request and response encryption, respectively. | |||
Future specifications may repurpose the encapsulation mechanism | Future specifications may repurpose the encapsulation mechanism | |||
skipping to change at line 780 ¶ | skipping to change at line 771 ¶ | |||
Resource, a header field containing the content type (see | Resource, a header field containing the content type (see | |||
Section 9.2), and the Encapsulated Request as the request content. | Section 9.2), and the Encapsulated Request as the request content. | |||
In the request to the Oblivious Relay Resource, Clients MAY include | In the request to the Oblivious Relay Resource, Clients MAY include | |||
additional fields. However, additional fields MUST be independent of | additional fields. However, additional fields MUST be independent of | |||
the Encapsulated Request and MUST be fields that the Oblivious Relay | the Encapsulated Request and MUST be fields that the Oblivious Relay | |||
Resource will remove before forwarding the Encapsulated Request | Resource will remove before forwarding the Encapsulated Request | |||
towards the target, such as the Connection or Proxy-Authorization | towards the target, such as the Connection or Proxy-Authorization | |||
header fields [HTTP]. | header fields [HTTP]. | |||
The Client role in this protocol acts as an HTTP client both with | The Client role in this protocol acts as an HTTP client both with | |||
respect to the Oblivious Relay Resource and the Target Resource. For | respect to the Oblivious Relay Resource and the Target Resource. The | |||
the request, the Clients makes to the Target Resource, this diverges | request, which the Client makes to the Target Resource, diverges from | |||
from typical HTTP assumptions about the use of a connection (see | typical HTTP assumptions about the use of a connection (see | |||
Section 3.3 of [HTTP]) in that the request and response are encrypted | Section 3.3 of [HTTP]) in that the request and response are encrypted | |||
rather than sent over a connection. The Oblivious Relay Resource and | rather than sent over a connection. The Oblivious Relay Resource and | |||
the Oblivious Gateway Resource also act as HTTP clients toward the | the Oblivious Gateway Resource also act as HTTP clients toward the | |||
Oblivious Gateway Resource and Target Resource respectively. | Oblivious Gateway Resource and Target Resource, respectively. | |||
In order to achieve the privacy and security goals of the protocol a | In order to achieve the privacy and security goals of the protocol, a | |||
Client also needs to observe the guidance in Section 6.1. | Client also needs to observe the guidance in Section 6.1. | |||
The Oblivious Relay Resource interacts with the Oblivious Gateway | The Oblivious Relay Resource interacts with the Oblivious Gateway | |||
Resource as an HTTP client by constructing a request using the same | Resource as an HTTP client by constructing a request using the same | |||
restrictions as the Client request, except that the target URI is the | restrictions as the Client request, except that the target URI is the | |||
Oblivious Gateway Resource. The content of this request is copied | Oblivious Gateway Resource. The content of this request is copied | |||
from the Client. An Oblivious Relay Resource MAY reject requests | from the Client. An Oblivious Relay Resource MAY reject requests | |||
that are obviously invalid, such as a request with no content. The | that are obviously invalid, such as a request with no content. The | |||
Oblivious Relay Resource MUST NOT add information to the request | Oblivious Relay Resource MUST NOT add information to the request | |||
without the Client being aware of the type of information that might | without the Client being aware of the type of information that might | |||
be added; see Section 6.2 for more information on relay | be added; see Section 6.2 for more information on relay | |||
responsibilities. | responsibilities. | |||
When a response is received from the Oblivious Gateway Resource, the | When a response is received from the Oblivious Gateway Resource, the | |||
Oblivious Relay Resource forwards the response according to the rules | Oblivious Relay Resource forwards the response according to the rules | |||
of an HTTP proxy; see Section 7.6 of [HTTP]. In case of timeout or | of an HTTP proxy; see Section 7.6 of [HTTP]. In case of timeout or | |||
error, the Oblivious Relay Resource can generate a response with an | error, the Oblivious Relay Resource can generate a response with an | |||
appropriate status code. | appropriate status code. | |||
In order to achieve the privacy and security goals of the protocol an | In order to achieve the privacy and security goals of the protocol, | |||
Oblivious Relay Resource also needs to observe the guidance in | an Oblivious Relay Resource also needs to observe the guidance in | |||
Section 6.2. | Section 6.2. | |||
An Oblivious Gateway Resource acts as a gateway for requests to the | An Oblivious Gateway Resource acts as a gateway for requests to the | |||
Target Resource (see Section 7.6 of [HTTP]). The one exception is | Target Resource (see Section 7.6 of [HTTP]). The one exception is | |||
that any information it might forward in a response MUST be | that any information it might forward in a response MUST be | |||
encapsulated, unless it is responding to errors that do not relate to | encapsulated, unless it is responding to errors that do not relate to | |||
processing the contents of the encapsulated request; see Section 5.2. | processing the contents of the Encapsulated Request; see Section 5.2. | |||
An Oblivious Gateway Resource, if it receives any response from the | An Oblivious Gateway Resource, if it receives any response from the | |||
Target Resource, sends a single 200 response containing the | Target Resource, sends a single 200 response containing the | |||
encapsulated response. Like the request from the Client, this | Encapsulated Response. Like the request from the Client, this | |||
response MUST only contain those fields necessary to carry the | response MUST only contain those fields necessary to carry the | |||
encapsulated response: a 200 status code, a header field indicating | Encapsulated Response: a 200 status code, a header field indicating | |||
the content type, and the encapsulated response as the response | the content type, and the Encapsulated Response as the response | |||
content. As with requests, additional fields MAY be used to convey | content. As with requests, additional fields MAY be used to convey | |||
information that does not reveal information about the encapsulated | information that does not reveal information about the Encapsulated | |||
response. | Response. | |||
An Oblivious Gateway Resource that does not receive a response can | An Oblivious Gateway Resource that does not receive a response can | |||
itself generate a response with an appropriate error status code | itself generate a response with an appropriate error status code | |||
(such as 504 (Gateway Timeout); see Section 15.6.5 of [HTTP]), which | (such as 504 (Gateway Timeout); see Section 15.6.5 of [HTTP]), which | |||
is then encapsulated in the same way as a successful response. | is then encapsulated in the same way as a successful response. | |||
In order to achieve the privacy and security goals of the protocol an | In order to achieve the privacy and security goals of the protocol, | |||
Oblivious Gateway Resource also needs to observe the guidance in | an Oblivious Gateway Resource also needs to observe the guidance in | |||
Section 6.3. | Section 6.3. | |||
5.1. Informational Responses | 5.1. Informational Responses | |||
This encapsulation does not permit progressive processing of | This encapsulation does not permit progressive processing of | |||
responses. Though the binary HTTP response format does support the | responses. Though the binary HTTP response format does support the | |||
inclusion of informational (1xx) status codes, the AEAD encapsulation | inclusion of informational (1xx) status codes, the AEAD encapsulation | |||
cannot be removed until the entire message is received. | cannot be removed until the entire message is received. | |||
In particular, the Expect header field with 100-continue (see | In particular, the Expect header field with 100-continue (see | |||
skipping to change at line 865 ¶ | skipping to change at line 856 ¶ | |||
Errors detected by the Oblivious Relay Resource and errors detected | Errors detected by the Oblivious Relay Resource and errors detected | |||
by the Oblivious Gateway Resource before removing protection | by the Oblivious Gateway Resource before removing protection | |||
(including being unable to remove encapsulation for any reason) | (including being unable to remove encapsulation for any reason) | |||
result in the status code being sent without protection in response | result in the status code being sent without protection in response | |||
to the POST request made to that resource. | to the POST request made to that resource. | |||
Errors detected by the Oblivious Gateway Resource after successfully | Errors detected by the Oblivious Gateway Resource after successfully | |||
removing encapsulation and errors detected by the Target Resource | removing encapsulation and errors detected by the Target Resource | |||
MUST be sent in an Encapsulated Response. This might be because the | MUST be sent in an Encapsulated Response. This might be because the | |||
Encapsulated Request is malformed or the Target Resource does not | Encapsulated Request is malformed or the Target Resource does not | |||
produce a response. In either case the Oblivious Gateway Resource | produce a response. In either case, the Oblivious Gateway Resource | |||
can generate a response with an appropriate error status code (such | can generate a response with an appropriate error status code (such | |||
as 400 (Bad Request) or 504 (Gateway Timeout); see Section 15.5.1 of | as 400 (Bad Request) or 504 (Gateway Timeout); see Sections 15.5.1 | |||
[HTTP] and Section 15.6.5 of [HTTP], respectively). This response is | and 15.6.5 of [HTTP], respectively). This response is encapsulated | |||
encapsulated in the same way as a successful response. | in the same way as a successful response. | |||
Errors in the encapsulation of requests mean that responses cannot be | Errors in the encapsulation of requests mean that responses cannot be | |||
encapsulated. This includes cases where the key configuration is | encapsulated. This includes cases where the key configuration is | |||
incorrect or outdated. The Oblivious Gateway Resource can generate | incorrect or outdated. The Oblivious Gateway Resource can generate | |||
and send a response with a 4xx status code to the Oblivious Relay | and send a response with a 4xx status code to the Oblivious Relay | |||
Resource. This response MAY be forwarded to the Client or treated by | Resource. This response MAY be forwarded to the Client or treated by | |||
the Oblivious Relay Resource as a failure. If a Client receives a | the Oblivious Relay Resource as a failure. If a Client receives a | |||
response that is not an Encapsulated Response, this could indicate | response that is not an Encapsulated Response, this could indicate | |||
that the client configuration used to construct the request is | that the Client configuration used to construct the request is | |||
incorrect or out of date. | incorrect or out of date. | |||
5.3. Signaling Key Configuration Problems | 5.3. Signaling Key Configuration Problems | |||
The problem type [PROBLEM] of "https://iana.org/assignments/http- | The problem type [PROBLEM] of "https://iana.org/assignments/http- | |||
problem-types#ohttp-key" is defined. An Oblivious Gateway Resource | problem-types#ohttp-key" is defined in this section. An Oblivious | |||
MAY use this problem type in a response to indicate that an | Gateway Resource MAY use this problem type in a response to indicate | |||
Encapsulated Request used an outdated or incorrect key configuration. | that an Encapsulated Request used an outdated or incorrect key | |||
configuration. | ||||
Figure 7 shows an example response in HTTP/1.1 format. | Figure 7 shows an example response in HTTP/1.1 format. | |||
HTTP/1.1 400 Bad Request | HTTP/1.1 400 Bad Request | |||
Date: Mon, 07 Feb 2022 00:28:05 GMT | Date: Mon, 07 Feb 2022 00:28:05 GMT | |||
Content-Type: application/problem+json | Content-Type: application/problem+json | |||
Content-Length: 106 | Content-Length: 106 | |||
{"type":"https://iana.org/assignments/http-problem-types#ohttp-key", | {"type":"https://iana.org/assignments/http-problem-types#ohttp-key", | |||
"title": "key identifier unknown"} | "title": "key identifier unknown"} | |||
skipping to change at line 914 ¶ | skipping to change at line 906 ¶ | |||
subject to observation or modification by an Oblivious Relay | subject to observation or modification by an Oblivious Relay | |||
Resource. A Client might manage the risk of an outdated key | Resource. A Client might manage the risk of an outdated key | |||
configuration using a heuristic approach whereby it periodically | configuration using a heuristic approach whereby it periodically | |||
refreshes its key configuration if it receives a response with an | refreshes its key configuration if it receives a response with an | |||
error status code that has not been encapsulated. | error status code that has not been encapsulated. | |||
6. Security Considerations | 6. Security Considerations | |||
In this design, a Client wishes to make a request to an Oblivious | In this design, a Client wishes to make a request to an Oblivious | |||
Gateway Resource that is forwarded to a Target Resource. The Client | Gateway Resource that is forwarded to a Target Resource. The Client | |||
wishes to make this request without linking that request with either: | wishes to make this request without linking that request with either | |||
of the following: | ||||
1. The identity at the network and transport layer of the Client | * The identity at the network and transport layer of the Client | |||
(that is, the Client IP address and TCP or UDP port number the | (that is, the Client IP address and TCP or UDP port number the | |||
Client uses to create a connection). | Client uses to create a connection). | |||
2. Any other request the Client might have made in the past or might | * Any other request the Client might have made in the past or might | |||
make in the future. | make in the future. | |||
In order to ensure this, the Client selects a relay (that serves the | In order to ensure this, the Client selects a relay (that serves the | |||
Oblivious Relay Resource) that it trusts will protect this | Oblivious Relay Resource) that it trusts will protect this | |||
information by forwarding the Encapsulated Request and Response | information by forwarding the Encapsulated Request and Response | |||
without passing it to the server (that serves the Oblivious Gateway | without passing it to the server (that serves the Oblivious Gateway | |||
Resource). | Resource). | |||
In this section, a deployment where there are three entities is | In this section, a deployment where there are three entities is | |||
considered: | considered: | |||
* A Client makes requests and receives responses | * A Client makes requests and receives responses. | |||
* A relay operates the Oblivious Relay Resource | * A relay operates the Oblivious Relay Resource. | |||
* A server operates both the Oblivious Gateway Resource and the | * A server operates both the Oblivious Gateway Resource and the | |||
Target Resource | Target Resource. | |||
Section 6.10 discusses the security implications for a case where | Section 6.10 discusses the security implications for a case where | |||
different servers operate the Oblivious Gateway Resource and Target | different servers operate the Oblivious Gateway Resource and Target | |||
Resource. | Resource. | |||
Requests from the Client to Oblivious Relay Resource and from | Requests from the Client to Oblivious Relay Resource and from | |||
Oblivious Relay Resource to Oblivious Gateway Resource MUST use HTTPS | Oblivious Relay Resource to Oblivious Gateway Resource MUST use HTTPS | |||
in order to provide unlinkability in the presence of a network | in order to provide unlinkability in the presence of a network | |||
observer. | observer. | |||
skipping to change at line 960 ¶ | skipping to change at line 953 ¶ | |||
Resource. However, colocation of the Oblivious Gateway Resource and | Resource. However, colocation of the Oblivious Gateway Resource and | |||
Target Resource simplifies the interactions between those resources | Target Resource simplifies the interactions between those resources | |||
without affecting Client privacy. | without affecting Client privacy. | |||
As a consequence of this configuration, Oblivious HTTP prevents | As a consequence of this configuration, Oblivious HTTP prevents | |||
linkability described above. Informally, this means: | linkability described above. Informally, this means: | |||
1. Requests and responses are known only to Clients and Oblivious | 1. Requests and responses are known only to Clients and Oblivious | |||
Gateway Resources. In particular, the Oblivious Relay Resource | Gateway Resources. In particular, the Oblivious Relay Resource | |||
knows the origin and destination of an Encapsulated Request and | knows the origin and destination of an Encapsulated Request and | |||
Response, yet does not know the decrypted contents. Likewise, | Response, yet it does not know the decrypted contents. Likewise, | |||
Oblivious Gateway Resources learn only the Oblivious Relay | Oblivious Gateway Resources learn only the Oblivious Relay | |||
Resource and the decrypted request. No entity other than the | Resource and the decrypted request. No entity other than the | |||
Client can see the plaintext request and response and can | Client can see the plaintext request and response and can | |||
attribute them to the Client. | attribute them to the Client. | |||
2. Oblivous Gateway Resources, and therefore Target Resources, | 2. Oblivious Gateway Resources, and therefore Target Resources, | |||
cannot link requests from the same Client in the absence of | cannot link requests from the same Client in the absence of | |||
unique per-Client keys. | unique per-Client keys. | |||
Traffic analysis that might affect these properties are outside the | Traffic analysis that might affect these properties is outside the | |||
scope of this document; see Section 6.2.3. | scope of this document; see Section 6.2.3. | |||
A formal analysis of Oblivious HTTP is in [OHTTP-ANALYSIS]. | A formal analysis of Oblivious HTTP is in [OHTTP-ANALYSIS]. | |||
6.1. Client Responsibilities | 6.1. Client Responsibilities | |||
Because Clients do not authenticate the Target Resource when using | Because Clients do not authenticate the Target Resource when using | |||
Oblivious HTTP, Clients MUST have some mechanism to authorize an | Oblivious HTTP, Clients MUST have some mechanism to authorize an | |||
Oblivious Gateway Resource for use with a Target Resource. One | Oblivious Gateway Resource for use with a Target Resource. One | |||
possible means of authorization is an allowlist. This ensures that | possible means of authorization is an allowlist. This ensures that | |||
Oblivious Gateway Resources are not abused to forward traffic to | Oblivious Gateway Resources are not misused to forward traffic to | |||
arbitrary Target Resources. Section 6.3 describes similar | arbitrary Target Resources. Section 6.3 describes similar | |||
responsibilities that apply to Oblivious Gateway Resources. | responsibilities that apply to Oblivious Gateway Resources. | |||
Clients MUST ensure that the key configuration they select for | Clients MUST ensure that the key configuration they select for | |||
generating Encapsulated Requests is integrity protected and | generating Encapsulated Requests is integrity protected and | |||
authenticated so that it can be attributed to the Oblivious Gateway | authenticated so that it can be attributed to the Oblivious Gateway | |||
Resource; see Section 3. | Resource; see Section 3. | |||
Since Clients connect directly to the Oblivious Relay Resource | Since Clients connect directly to the Oblivious Relay Resource | |||
instead of the Target Resource, application configurations wherein | instead of the Target Resource, application configurations wherein | |||
Clients make policy decisions about target connections, e.g., to | Clients make policy decisions about target connections, e.g., to | |||
apply certificate pinning, are incompatible with Oblivious HTTP. In | apply certificate pinning, are incompatible with Oblivious HTTP. In | |||
such cases, alternative technologies such as HTTP CONNECT | such cases, alternative technologies such as HTTP CONNECT | |||
(Section 9.3.6 of [HTTP]) can be used. Applications could implement | (Section 9.3.6 of [HTTP]) can be used. Applications could implement | |||
related policies on key configurations and relay connections, though | related policies on key configurations and relay connections, though | |||
these might not provide the same properties as policies enforced | these might not provide the same properties as policies enforced | |||
directly on target connections. When this difference is relevant, | directly on target connections. Instead, when this difference is | |||
applications can instead connect directly to the target at the cost | relevant, applications can connect directly to the target at the cost | |||
of either privacy or performance. | of either privacy or performance. | |||
Clients cannot carry connection-level state between requests as they | Clients cannot carry connection-level state between requests as they | |||
only establish direct connections to the relay responsible for the | only establish direct connections to the relay responsible for the | |||
Oblivious Relay resource. However, the content of requests might be | Oblivious Relay Resource. However, the content of requests might be | |||
used by a server to correlate requests. Cookies [COOKIES] are the | used by a server to correlate requests. Cookies [COOKIES] are the | |||
most obvious feature that might be used to correlate requests, but | most obvious feature that might be used to correlate requests, but | |||
any identity information and authentication credentials might have | any identity information and authentication credentials might have | |||
the same effect. Clients also need to treat information learned from | the same effect. Clients also need to treat information learned from | |||
responses with similar care when constructing subsequent requests, | responses with similar care when constructing subsequent requests, | |||
which includes the identity of resources. | which includes the identity of resources. | |||
Clients MUST generate a new HPKE context for every request, using a | Clients MUST generate a new HPKE context for every request, using a | |||
good source of entropy ([RANDOM]) for generating keys. Key reuse not | good source of entropy [RANDOM] for generating keys. Key reuse not | |||
only risks requests being linked, reuse could expose request and | only risks requests being linked but also could expose request and | |||
response contents to the relay. | response contents to the relay. | |||
The request the Client sends to the Oblivious Relay Resource only | The request the Client sends to the Oblivious Relay Resource only | |||
requires minimal information; see Section 5. The request that | requires minimal information; see Section 5. The request that | |||
carries the Encapsulated Request and is sent to the Oblivious Relay | carries the Encapsulated Request and that is sent to the Oblivious | |||
Resource MUST NOT include identifying information unless the Client | Relay Resource MUST NOT include identifying information unless the | |||
can trust that this information is removed by the relay. A Client | Client can trust that this information is removed by the relay. A | |||
MAY include information only for the Oblivious Relay Resource in | Client MAY include information only for the Oblivious Relay Resource | |||
header fields identified by the Connection header field if it trusts | in header fields identified by the Connection header field if it | |||
the relay to remove these as required by Section 7.6.1 of [HTTP]. | trusts the relay to remove these, as required by Section 7.6.1 of | |||
The Client needs to trust that the relay does not replicate the | [HTTP]. The Client needs to trust that the relay does not replicate | |||
source addressing information in the request it forwards. | the source addressing information in the request it forwards. | |||
Clients rely on the Oblivious Relay Resource to forward Encapsulated | Clients rely on the Oblivious Relay Resource to forward Encapsulated | |||
Requests and responses. However, the relay can only refuse to | Requests and Responses. However, the relay can only refuse to | |||
forward messages, it cannot inspect or modify the contents of | forward messages; it cannot inspect or modify the contents of | |||
Encapsulated Requests or responses. | Encapsulated Requests or Responses. | |||
6.2. Relay Responsibilities | 6.2. Relay Responsibilities | |||
The relay that serves the Oblivious Relay Resource has a very simple | The relay that serves the Oblivious Relay Resource has a very simple | |||
function to perform. For each request it receives, it makes a | function to perform. For each request it receives, it makes a | |||
request of the Oblivious Gateway Resource that includes the same | request of the Oblivious Gateway Resource that includes the same | |||
content. When it receives a response, it sends a response to the | content. When it receives a response, it sends a response to the | |||
Client that includes the content of the response from the Oblivious | Client that includes the content of the response from the Oblivious | |||
Gateway Resource. | Gateway Resource. | |||
skipping to change at line 1062 ¶ | skipping to change at line 1055 ¶ | |||
removes this privacy risk. | removes this privacy risk. | |||
Secondly, generic implementations are often configured to augment | Secondly, generic implementations are often configured to augment | |||
requests with information about the Client, such as the Via field or | requests with information about the Client, such as the Via field or | |||
the Forwarded field [FORWARDED]. A relay MUST NOT add information | the Forwarded field [FORWARDED]. A relay MUST NOT add information | |||
when forwarding requests that might be used to identify Clients, | when forwarding requests that might be used to identify Clients, | |||
except for information that a Client is aware of; see Section 6.2.1. | except for information that a Client is aware of; see Section 6.2.1. | |||
Finally, a relay can also generate responses, though it is assumed to | Finally, a relay can also generate responses, though it is assumed to | |||
not be able to examine the content of a request (other than to | not be able to examine the content of a request (other than to | |||
observe the choice of key identifier, KDF, and AEAD), so it is also | observe the choice of key identifier, KDF, and AEAD); therefore, it | |||
assumed that it cannot generate an Encapsulated Response. | is also assumed that it cannot generate an Encapsulated Response. | |||
6.2.1. Differential Treatment | 6.2.1. Differential Treatment | |||
A relay MAY add information to requests if the Client is aware of the | A relay MAY add information to requests if the Client is aware of the | |||
nature of the information that could be added. Any addition MUST NOT | nature of the information that could be added. Any addition MUST NOT | |||
include information that uniquely and permanently identifies the | include information that uniquely and permanently identifies the | |||
Client, including any pseudonymous identifier. Information added by | Client, including any pseudonymous identifier. Information added by | |||
the relay - beyond what is already revealed through encapsulated | the relay -- beyond what is already revealed through Encapsulated | |||
requests from Clients - can reduce the size of the anonymity set of | Requests from Clients -- can reduce the size of the anonymity set of | |||
Clients at a gateway. | Clients at a gateway. | |||
A Client does not need to be aware of the exact value added for each | A Client does not need to be aware of the exact value added for each | |||
request, but needs to know the range of possible values the relay | request but needs to know the range of possible values the relay | |||
might use. How a Client might learn about added information is not | might use. How a Client might learn about added information is not | |||
defined in this document. | defined in this document. | |||
Moreover, relays MAY apply differential treatment to Clients that | Moreover, relays MAY apply differential treatment to Clients that | |||
engage in abusive behavior, e.g., by sending too many requests in | engage in abusive behavior, e.g., by sending too many requests in | |||
comparison to other Clients, or as a response to rate limits | comparison to other Clients, or as a response to rate limits signaled | |||
signalled from the gateway. Any such differential treatment can | from the gateway. Any such differential treatment can reveal | |||
reveal information to the gateway that would not be revealed | information to the gateway that would not be revealed otherwise and | |||
otherwise and therefore reduce the size of the anonymity set of | therefore reduce the size of the anonymity set of Clients using a | |||
Clients using a gateway. For example, if a relay chooses to rate | gateway. For example, if a relay chooses to rate limit or block an | |||
limit or block an abusive Client, this means that any Client requests | abusive Client, this means that any Client requests that are not | |||
which are not treated this way are known to be non-abusive by the | treated this way are known to be non-abusive by the gateway. Clients | |||
gateway. Clients need to consider the likelihood of such | need to consider the likelihood of such differential treatment and | |||
differential treatment and the privacy risks when using a relay. | the privacy risks when using a relay. | |||
Some patterns of abuse cannot be detected without access to the | Some patterns of abuse cannot be detected without access to the | |||
request that is made to the target. This means that only the gateway | request that is made to the target. This means that only the gateway | |||
or target are in a position to identify abuse. A gateway MAY send | or the target is in a position to identify abuse. A gateway MAY send | |||
signals toward the relay to provide feedback about specific requests. | signals toward the relay to provide feedback about specific requests. | |||
For example, a gateway could respond differently to requests it | For example, a gateway could respond differently to requests it | |||
cannot decapsulate, as mentioned in Section 5.2. A relay that acts | cannot decapsulate, as mentioned in Section 5.2. A relay that acts | |||
on this feedback could - either inadvertently or by design - lead to | on this feedback could -- either inadvertently or by design -- lead | |||
Client deanonymization. | to Client deanonymization. | |||
6.2.2. Denial of Service | 6.2.2. Denial of Service | |||
As there are privacy benefits from having a large rate of requests | As there are privacy benefits from having a large rate of requests | |||
forwarded by the same relay (see Section 6.2.3), servers that operate | forwarded by the same relay (see Section 6.2.3), servers that operate | |||
the Oblivious Gateway Resource might need an arrangement with | the Oblivious Gateway Resource might need an arrangement with | |||
Oblivious Relay Resources. This arrangement might be necessary to | Oblivious Relay Resources. This arrangement might be necessary to | |||
prevent having the large volume of requests being classified as an | prevent having the large volume of requests being classified as an | |||
attack by the server. | attack by the server. | |||
If a server accepts a larger volume of requests from a relay, it | If a server accepts a larger volume of requests from a relay, it | |||
needs to trust that the relay does not allow abusive levels of | needs to trust that the relay does not allow abusive levels of | |||
request volumes from Clients. That is, if a server allows requests | request volumes from Clients. That is, if a server allows requests | |||
from the relay to be exempt from rate limits, the server might want | from the relay to be exempt from rate limits, the server might want | |||
to ensure that the relay applies a rate limiting policy that is | to ensure that the relay applies a rate-limiting policy that is | |||
acceptable to the server. | acceptable to the server. | |||
Servers that enter into an agreement with a relay that enables a | Servers that enter into an agreement with a relay that enables a | |||
higher request rate might choose to authenticate the relay to enable | higher request rate might choose to authenticate the relay to enable | |||
the higher rate. | the higher rate. | |||
6.2.3. Traffic Analysis | 6.2.3. Traffic Analysis | |||
Using HTTPS protects information about which resources are the | Using HTTPS protects information about which resources are the | |||
subject of request and prevents a network observer from being able to | subject of request and prevents a network observer from being able to | |||
trivially correlate messages on either side of a relay. However, | trivially correlate messages on either side of a relay. However, | |||
using HTTPS does not prevent traffic analysis by such network | using HTTPS does not prevent traffic analysis by such network | |||
observers. | observers. | |||
The time at which Encapsulated Request or response messages are sent | The time at which Encapsulated Request or Response messages are sent | |||
can reveal information to a network observer. Though messages | can reveal information to a network observer. Though messages | |||
exchanged between the Oblivious Relay Resource and the Oblivious | exchanged between the Oblivious Relay Resource and the Oblivious | |||
Gateway Resource might be sent in a single connection, traffic | Gateway Resource might be sent in a single connection, traffic | |||
analysis could be used to match messages that are forwarded by the | analysis could be used to match messages that are forwarded by the | |||
relay. | relay. | |||
A relay could, as part of its function, delay requests before | A relay could, as part of its function, delay requests before | |||
forwarding them. Delays might increase the anonymity set into which | forwarding them. Delays might increase the anonymity set into which | |||
each request is attributed. Any delay also increases the time that a | each request is attributed. Any delay also increases the time that a | |||
Client waits for a response, so delays SHOULD only be added with the | Client waits for a response, so delays SHOULD only be added with the | |||
consent - or at least awareness - of Clients. | consent -- or at least awareness -- of Clients. | |||
A relay that forwards large volumes of exchanges can provide better | A relay that forwards large volumes of exchanges can provide better | |||
privacy by providing larger sets of messages that need to be matched. | privacy by providing larger sets of messages that need to be matched. | |||
Traffic analysis is not restricted to network observers. A malicious | Traffic analysis is not restricted to network observers. A malicious | |||
Oblivious Relay Resource could use traffic analysis to learn | Oblivious Relay Resource could use traffic analysis to learn | |||
information about otherwise encrypted requests and responses relayed | information about otherwise encrypted requests and responses relayed | |||
between Clients and gateways. An Oblivious Relay Resource terminates | between Clients and gateways. An Oblivious Relay Resource terminates | |||
TLS connections from Clients, so they see message boundaries. This | TLS connections from Clients, so they see message boundaries. This | |||
privileged position allows for richer feature extraction from | privileged position allows for richer feature extraction from | |||
encrypted data, which might improve traffic analysis. | encrypted data, which might improve traffic analysis. | |||
Clients and Oblivious Gateway Resources can use padding to reduce the | Clients and Oblivious Gateway Resources can use padding to reduce the | |||
effectiveness of traffic analysis. Padding is a capability provided | effectiveness of traffic analysis. Padding is a capability provided | |||
by binary HTTP messages; see Section 3.8 of [BINARY]. If the | by binary HTTP messages; see Section 3.8 of [BINARY]. If the | |||
encapsulation method described in this document is used to protect a | encapsulation method described in this document is used to protect a | |||
different message type (see Section 4.6), that message format might | different message type (see Section 4.6), that message format might | |||
need to include padding support. Oblivious Relay Resources can also | need to include padding support. Oblivious Relay Resources can also | |||
use padding for the same reason, but need to operate at the HTTP | use padding for the same reason but need to operate at the HTTP layer | |||
layer since they cannot manipulate binary HTTP messages; for example, | since they cannot manipulate binary HTTP messages; for example, see | |||
see Section 10.7 of [HTTP/2] or Section 10.7 of [HTTP/3]). | Section 10.7 of [HTTP/2] or Section 10.7 of [HTTP/3]). | |||
6.3. Server Responsibilities | 6.3. Server Responsibilities | |||
The Oblivious Gateway Resource can be operated by a different entity | The Oblivious Gateway Resource can be operated by a different entity | |||
than the Target Resource. However, this means that the Client needs | than the Target Resource. However, this means that the Client needs | |||
to trust the Oblivious Gateway Resource not to modify requests or | to trust the Oblivious Gateway Resource not to modify requests or | |||
responses. This analysis concerns itself with a deployment scenario | responses. This analysis concerns itself with a deployment scenario | |||
where a single server provides both the Oblivious Gateway Resource | where a single server provides both the Oblivious Gateway Resource | |||
and Target Resource. | and Target Resource. | |||
skipping to change at line 1188 ¶ | skipping to change at line 1181 ¶ | |||
help protect against such attacks; see Section 6.2.3. | help protect against such attacks; see Section 6.2.3. | |||
If separate entities provide the Oblivious Gateway Resource and | If separate entities provide the Oblivious Gateway Resource and | |||
Target Resource, these entities might need an arrangement similar to | Target Resource, these entities might need an arrangement similar to | |||
that between server and relay for managing denial of service; see | that between server and relay for managing denial of service; see | |||
Section 6.2.2. Moreover, the Oblivious Gateway Resource SHOULD have | Section 6.2.2. Moreover, the Oblivious Gateway Resource SHOULD have | |||
some mechanism to ensure that the Oblivious Gateway Resource is not | some mechanism to ensure that the Oblivious Gateway Resource is not | |||
misused as a relay for HTTP messages to an arbitrary Target Resource, | misused as a relay for HTTP messages to an arbitrary Target Resource, | |||
such as an allowlist. | such as an allowlist. | |||
Non-secure requests - such as those with the "http" scheme as opposed | Non-secure requests -- such as those with the "http" scheme as | |||
to the "https" scheme - SHOULD NOT be used if the Oblivious Gateway | opposed to the "https" scheme -- SHOULD NOT be used if the Oblivious | |||
and Target Resources are not on the same origin. If messages are | Gateway and Target Resources are not on the same origin. If messages | |||
forwarded between these resources without the protections afforded by | are forwarded between these resources without the protections | |||
HTTPS, they could be inspected or modified by a network attacker. | afforded by HTTPS, they could be inspected or modified by a network | |||
Note that a request could be forwarded without protection if the two | attacker. Note that a request could be forwarded without protection | |||
resources share an origin. | if the two resources share an origin. | |||
6.4. Key Management | 6.4. Key Management | |||
An Oblivious Gateway Resource needs to have a plan for replacing | An Oblivious Gateway Resource needs to have a plan for replacing | |||
keys. This might include regular replacement of keys, which can be | keys. This might include regular replacement of keys, which can be | |||
assigned new key identifiers. If an Oblivious Gateway Resource | assigned new key identifiers. If an Oblivious Gateway Resource | |||
receives a request that contains a key identifier that it does not | receives a request that contains a key identifier that it does not | |||
understand or that corresponds to a key that has been replaced, the | understand or that corresponds to a key that has been replaced, the | |||
server can respond with an HTTP 422 (Unprocessable Content) status | server can respond with an HTTP 422 (Unprocessable Content) status | |||
code. | code. | |||
skipping to change at line 1225 ¶ | skipping to change at line 1218 ¶ | |||
label was chosen for symmetry only as it provides key diversity only | label was chosen for symmetry only as it provides key diversity only | |||
within the HPKE context created using the "message/bhttp request" | within the HPKE context created using the "message/bhttp request" | |||
label; see Section 4.6. | label; see Section 4.6. | |||
6.5. Replay Attacks | 6.5. Replay Attacks | |||
A server is responsible for either rejecting replayed requests or | A server is responsible for either rejecting replayed requests or | |||
ensuring that the effect of replays does not adversely affect Clients | ensuring that the effect of replays does not adversely affect Clients | |||
or resources. | or resources. | |||
Encrypted requests can be copied and replayed by the Oblivious Relay | Encapsulated Requests can be copied and replayed by the Oblivious | |||
resource. The threat model for Oblivious HTTP allows the possibility | Relay Resource. The threat model for Oblivious HTTP allows the | |||
that an Oblivious Relay Resource might replay requests. Furthermore, | possibility that an Oblivious Relay Resource might replay requests. | |||
if a Client sends an Encapsulated Request in TLS early data (see | Furthermore, if a Client sends an Encapsulated Request in TLS early | |||
Section 8 of [TLS] and [RFC8470]), a network-based adversary might be | data (see Section 8 of [TLS] and [RFC8470]), a network-based | |||
able to cause the request to be replayed. In both cases, the effect | adversary might be able to cause the request to be replayed. In both | |||
of a replay attack and the mitigations that might be employed are | cases, the effect of a replay attack and the mitigations that might | |||
similar to TLS early data. | be employed are similar to TLS early data. | |||
It is the responsibility of the application that uses Oblivious HTTP | It is the responsibility of the application that uses Oblivious HTTP | |||
to either reject replayed requests or to ensure that replayed | to either reject replayed requests or ensure that replayed requests | |||
requests have no adverse effects on their operation. This section | have no adverse effect on their operation. This section describes | |||
describes some approaches that are universally applicable and | some approaches that are universally applicable and suggestions for | |||
suggestions for more targeted techniques. | more targeted techniques. | |||
A Client or Oblivious Relay Resource MUST NOT automatically attempt | A Client or Oblivious Relay Resource MUST NOT automatically attempt | |||
to retry a failed request unless it receives a positive signal | to retry a failed request unless it receives a positive signal | |||
indicating that the request was not processed or forwarded. The | indicating that the request was not processed or forwarded. The | |||
HTTP/2 REFUSED_STREAM error code (Section 8.1.4 of [HTTP/2]), the | HTTP/2 REFUSED_STREAM error code (Section 8.1.4 of [HTTP/2]), the | |||
HTTP/3 H3_REQUEST_REJECTED error code (Section 8.1 of [HTTP/3]), or a | HTTP/3 H3_REQUEST_REJECTED error code (Section 8.1 of [HTTP/3]), or a | |||
GOAWAY frame with a low enough identifier (in either protocol | GOAWAY frame with a low enough identifier (in either protocol | |||
version) are all sufficient signals that no processing occurred. | version) are all sufficient signals that no processing occurred. | |||
HTTP/1.1 [HTTP/1.1] provides no equivalent signal. Connection | HTTP/1.1 [HTTP/1.1] provides no equivalent signal. Connection | |||
failures or interruptions are not sufficient signals that no | failures or interruptions are not sufficient signals that no | |||
skipping to change at line 1278 ¶ | skipping to change at line 1271 ¶ | |||
satisfactory for some applications, particularly those that involve | satisfactory for some applications, particularly those that involve | |||
the submission of data to a server. The use of idempotent methods | the submission of data to a server. The use of idempotent methods | |||
might be of some use in managing replay risk, though it is important | might be of some use in managing replay risk, though it is important | |||
to recognize that different idempotent requests can be combined to be | to recognize that different idempotent requests can be combined to be | |||
not idempotent. | not idempotent. | |||
Even without replay prevention, the server-chosen response_nonce | Even without replay prevention, the server-chosen response_nonce | |||
field ensures that responses have unique AEAD keys and nonces even | field ensures that responses have unique AEAD keys and nonces even | |||
when requests are replayed. | when requests are replayed. | |||
6.5.1. Use of Date for Anti-Replay | 6.5.1. Use of Date for Anti-replay | |||
Clients SHOULD include a Date header field in Encapsulated Requests, | Clients SHOULD include a Date header field in Encapsulated Requests, | |||
unless the Client has prior knowledge that indicates that the | unless the Client has prior knowledge that indicates that the | |||
Oblivious Gateway Resource does not use Date for anti-replay | Oblivious Gateway Resource does not use Date for anti-replay | |||
purposes. | purposes. | |||
Though HTTP requests often do not include a Date header field, the | Though HTTP requests often do not include a Date header field, the | |||
value of this field might be used by a server to limit the amount of | value of this field might be used by a server to limit the amount of | |||
requests it needs to track if it needs to prevent replay attacks. | requests it needs to track if it needs to prevent replay attacks. | |||
skipping to change at line 1303 ¶ | skipping to change at line 1296 ¶ | |||
be unique to each request, is sufficient. The Oblivious Gateway | be unique to each request, is sufficient. The Oblivious Gateway | |||
Resource can reject any request that is the same as one that was | Resource can reject any request that is the same as one that was | |||
previously answered within that time window or if the Date header | previously answered within that time window or if the Date header | |||
field from the decrypted request is outside of the current time | field from the decrypted request is outside of the current time | |||
window. | window. | |||
Oblivious Gateway Resources might need to allow for the time it takes | Oblivious Gateway Resources might need to allow for the time it takes | |||
requests to arrive from the Client, with a time window that is large | requests to arrive from the Client, with a time window that is large | |||
enough to allow for differences in clocks. Insufficient tolerance of | enough to allow for differences in clocks. Insufficient tolerance of | |||
time differences could result in valid requests being unnecessarily | time differences could result in valid requests being unnecessarily | |||
rejected. Beyond allowing for multiple round trip times -- to | rejected. Beyond allowing for multiple round-trip times -- to | |||
account for retransmission -- network delays are unlikely to be | account for retransmission -- network delays are unlikely to be | |||
significant in determining the size of the window, unless all | significant in determining the size of the window, unless all | |||
potential Clients are known to have excellent time-keeping. A | potential Clients are known to have excellent timekeeping. A | |||
specific window size might need to be determined experimentally. | specific window size might need to be determined experimentally. | |||
Oblivious Gateway Resources MUST NOT treat the time window as secret | Oblivious Gateway Resources MUST NOT treat the time window as secret | |||
information. An attacker can actively probe with different values | information. An attacker can actively probe with different values | |||
for the Date field to determine the time window over which the server | for the Date field to determine the time window over which the server | |||
will accept responses. | will accept responses. | |||
6.5.2. Correcting Clock Differences | 6.5.2. Correcting Clock Differences | |||
An Oblivious Gateway Resource can reject requests that contain a Date | An Oblivious Gateway Resource can reject requests that contain a Date | |||
skipping to change at line 1368 ¶ | skipping to change at line 1361 ¶ | |||
|<============================+<-------------+ | |<============================+<-------------+ | |||
| | | | | | | | | | |||
| Request | | | | | Request | | | | |||
| + Updated Date | | | | | + Updated Date | | | | |||
+============================>+------------->| | +============================>+------------->| | |||
| | | | | | | | | | |||
Figure 9: Retrying with an Updated Date Field | Figure 9: Retrying with an Updated Date Field | |||
Retrying immediately allows the Oblivious Gateway Resource to measure | Retrying immediately allows the Oblivious Gateway Resource to measure | |||
the round trip time to the Client. The observed delay might reveal | the round-trip time to the Client. The observed delay might reveal | |||
something about the location of the Client. Clients could delay | something about the location of the Client. Clients could delay | |||
retries to add some uncertainty to any observed delay. | retries to add some uncertainty to any observed delay. | |||
Intermediaries can sometimes rewrite the Date field when forwarding | Intermediaries can sometimes rewrite the Date field when forwarding | |||
responses. This might cause problems if the Oblivious Gateway | responses. This might cause problems if the Oblivious Gateway | |||
Resource and intermediary clocks differ by enough to cause the retry | Resource and intermediary clocks differ by enough to cause the retry | |||
to be rejected. Therefore, Clients MUST NOT retry a request with an | to be rejected. Therefore, Clients MUST NOT retry a request with an | |||
adjusted date more than once. | adjusted date more than once. | |||
Oblivious Gateway Resources that condition their responses on the | Oblivious Gateway Resources that condition their responses on the | |||
skipping to change at line 1431 ¶ | skipping to change at line 1424 ¶ | |||
limited by regular rotation of server keys. | limited by regular rotation of server keys. | |||
6.8. Client Clock Exposure | 6.8. Client Clock Exposure | |||
Including a Date field in requests reveals some information about the | Including a Date field in requests reveals some information about the | |||
Client clock. This might be used to fingerprint Clients [UWT] or to | Client clock. This might be used to fingerprint Clients [UWT] or to | |||
identify Clients that are vulnerable to attacks that depend on | identify Clients that are vulnerable to attacks that depend on | |||
incorrect clocks. | incorrect clocks. | |||
Clients can randomize the value that they provide for Date to obscure | Clients can randomize the value that they provide for Date to obscure | |||
the true value of their clock and reduce the chance of linking of | the true value of their clock and reduce the chance of linking | |||
requests over time. However, this increases the risk that their | requests over time. However, this increases the risk that their | |||
request is rejected as outside the acceptable window. | request is rejected as outside the acceptable window. | |||
6.9. Media Type Security | 6.9. Media Type Security | |||
The key configuration media type defined in Section 3.2 represents | The key configuration media type defined in Section 3.2 represents | |||
keying material. The content of this media type is not active (see | keying material. The content of this media type is not active (see | |||
Section 4.6 of [RFC6838]), but it governs how a Client might interact | Section 4.6 of [RFC6838]), but it governs how a Client might interact | |||
with an Oblivious Gateway Resource. The security implications of | with an Oblivious Gateway Resource. The security implications of | |||
processing it are described in Section 6.1; privacy implications are | processing it are described in Section 6.1; privacy implications are | |||
described in Section 7. | described in Section 7. | |||
The security implications of handling the message media types defined | The security implications of handling the message media types defined | |||
in Section 4.5 is covered in other parts of this section in more | in Section 4.5 is covered in other parts of this section in more | |||
detail. However, these message media types are also encrypted | detail. However, these message media types are also encrypted | |||
encapsulations of HTTP requests and responses. | encapsulations of HTTP requests and responses. | |||
HTTP messages contain content, which can use any media type. In | HTTP messages contain content, which can use any media type. In | |||
particular, requests are processed by an Oblivious Target Resource, | particular, requests are processed by an Oblivious Target Resource, | |||
which - as an HTTP resource - defines how content is processed; see | which -- as an HTTP resource -- defines how content is processed; see | |||
Section 3.1 of [HTTP]. HTTP clients can also use resource identity | Section 3.1 of [HTTP]. HTTP clients can also use resource identity | |||
and response content to determine how content is processed. | and response content to determine how content is processed. | |||
Consequently, the security considerations of Section 17 of [HTTP] | Consequently, the security considerations of Section 17 of [HTTP] | |||
also apply to the handling of the content of these media types. | also apply to the handling of the content of these media types. | |||
6.10. Separate Gateway and Target | 6.10. Separate Gateway and Target | |||
This document generally assumes that the same entity operates the | This document generally assumes that the same entity operates the | |||
Oblivious Gateway Resource and the Target Resource. However, as the | Oblivious Gateway Resource and the Target Resource. However, as the | |||
Oblivious Gateway Resource performs generic HTTP processing, the use | Oblivious Gateway Resource performs generic HTTP processing, the use | |||
skipping to change at line 1495 ¶ | skipping to change at line 1488 ¶ | |||
the ability of the Target Resource to implement policy exemptions, | the ability of the Target Resource to implement policy exemptions, | |||
such as only forwarding requests toward specific Target Resources | such as only forwarding requests toward specific Target Resources | |||
according to an allowlist; see Section 6.3. | according to an allowlist; see Section 6.3. | |||
7. Privacy Considerations | 7. Privacy Considerations | |||
One goal of this design is that independent Client requests are only | One goal of this design is that independent Client requests are only | |||
linkable by their content. However, the choice of Client | linkable by their content. However, the choice of Client | |||
configuration might be used to correlate requests. A Client | configuration might be used to correlate requests. A Client | |||
configuration includes the Oblivious Relay Resource URI, the | configuration includes the Oblivious Relay Resource URI, the | |||
Oblivious Gateway key configuration, and Oblivious Gateway Resource | Oblivious Gateway key configuration, and the Oblivious Gateway | |||
URI. A configuration is active if Clients can successfully use it | Resource URI. A configuration is active if Clients can successfully | |||
for interacting with a target. | use it for interacting with a target. | |||
Oblivious Relay and Gateway Resources can identify when requests use | Oblivious Relay and Gateway Resources can identify when requests use | |||
the same configuration by matching the key ID from the key | the same configuration by matching the key identifier from the key | |||
configuration or the Oblivious Gateway Resource URI. The Oblivious | configuration or the Oblivious Gateway Resource URI. The Oblivious | |||
Gateway Resource might use the source address of requests to | Gateway Resource might use the source address of requests to | |||
correlate requests that use an Oblivious Relay Resource run by the | correlate requests that use an Oblivious Relay Resource run by the | |||
same operator. If the Oblivious Gateway Resource is willing to use | same operator. If the Oblivious Gateway Resource is willing to use | |||
trial decryption, requests can be further separated into smaller | trial decryption, requests can be further separated into smaller | |||
groupings based on the keys that are used. | groupings based on active configurations that clients use. | |||
Each active Client configuration partitions the Client anonymity set. | Each active Client configuration partitions the Client anonymity set. | |||
In practice, it is infeasible to reduce the number of active | In practice, it is infeasible to reduce the number of active | |||
configurations to one. Enabling diversity in choice of Oblivious | configurations to one. Enabling diversity in choice of Oblivious | |||
Relay Resource naturally increases the number of active | Relay Resource naturally increases the number of active | |||
configurations. More than one configuration might need to be active | configurations. More than one configuration might need to be active | |||
to allow for key rotation and server maintenance. | to allow for key rotation and server maintenance. | |||
Client privacy depends on having each configuration used by many | Client privacy depends on having each configuration used by many | |||
other Clients. It is critical to prevent the use of unique Client | other Clients. It is critical to prevent the use of unique Client | |||
skipping to change at line 1554 ¶ | skipping to change at line 1547 ¶ | |||
requests relative to a simple HTTP request-response exchange. | requests relative to a simple HTTP request-response exchange. | |||
Deploying relay services that are on path between Clients and servers | Deploying relay services that are on path between Clients and servers | |||
avoids adding significant additional delay due to network topology. | avoids adding significant additional delay due to network topology. | |||
A study of a similar system [ODOH-PETS] found that deploying proxies | A study of a similar system [ODOH-PETS] found that deploying proxies | |||
close to servers was most effective in minimizing additional latency. | close to servers was most effective in minimizing additional latency. | |||
8.2. Resource Mappings | 8.2. Resource Mappings | |||
This protocol assumes a fixed, one-to-one mapping between the | This protocol assumes a fixed, one-to-one mapping between the | |||
Oblivious Relay Resource and the Oblivious Gateway Resource. This | Oblivious Relay Resource and the Oblivious Gateway Resource. This | |||
means that any encrypted request sent to the Oblivious Relay Resource | means that any Encapsulated Request sent to the Oblivious Relay | |||
will always be forwarded to the Oblivious Gateway Resource. This | Resource will always be forwarded to the Oblivious Gateway Resource. | |||
constraint was imposed to simplify relay configuration and mitigate | This constraint was imposed to simplify relay configuration and | |||
against the Oblivious Relay Resource being used as a generic relay | mitigate against the Oblivious Relay Resource being used as a generic | |||
for unknown Oblivious Gateway Resources. The relay will only forward | relay for unknown Oblivious Gateway Resources. The relay will only | |||
for Oblivious Gateway Resources that it has explicitly configured and | forward for Oblivious Gateway Resources that it has explicitly | |||
allowed. | configured and allowed. | |||
It is possible for a server to be configured with multiple Oblivious | It is possible for a server to be configured with multiple Oblivious | |||
Relay Resources, each for a different Oblivious Gateway Resource as | Relay Resources, each for a different Oblivious Gateway Resource as | |||
needed. If the goal is to support a large number of Oblivious | needed. If the goal is to support a large number of Oblivious | |||
Gateway Resources, Clients might be provided with a URI template | Gateway Resources, Clients might be provided with a URI template | |||
[TEMPLATE], from which multiple Oblivious Relay Resources could be | [TEMPLATE], from which multiple Oblivious Relay Resources could be | |||
constructed. | constructed. | |||
8.3. Network Management | 8.3. Network Management | |||
Oblivious HTTP might be incompatible with network interception | Oblivious HTTP might be incompatible with network interception | |||
regimes, such as those that rely on configuring Clients with trust | regimes, such as those that rely on configuring Clients with trust | |||
anchors and intercepting TLS connections. While TLS might be | anchors and intercepting TLS connections. While TLS might be | |||
intercepted successfully, interception middleboxes devices might not | intercepted successfully, interception middlebox devices might not | |||
receive updates that would allow Oblivious HTTP to be correctly | receive updates that would allow Oblivious HTTP to be correctly | |||
identified using the media types defined in Section 9.2 and | identified using the media types defined in Sections 9.2 and 9.3. | |||
Section 9.3. | ||||
Oblivious HTTP has a simple key management design that is not | Oblivious HTTP has a simple key management design that is not | |||
trivially altered to enable interception by intermediaries. Clients | trivially altered to enable interception by intermediaries. Clients | |||
that are configured to enable interception might choose to disable | that are configured to enable interception might choose to disable | |||
Oblivious HTTP in order to ensure that content is accessible to | Oblivious HTTP in order to ensure that content is accessible to | |||
middleboxes. | middleboxes. | |||
9. IANA Considerations | 9. IANA Considerations | |||
Please update the "Media Types" registry at | IANA has registered the following media types in the "Media Types" | |||
https://iana.org/assignments/media-types | registry at <https://iana.org/assignments/media-types>, following the | |||
(https://iana.org/assignments/media-types) for the media types | procedures of [RFC6838]: "application/ohttp-keys" (Section 9.1), | |||
"application/ohttp-keys" (Section 9.1), "message/ohttp-req" | "message/ohttp-req" (Section 9.2), and "message/ohttp-res" | |||
(Section 9.2), and "message/ohttp-res" (Section 9.3), following the | (Section 9.3). | |||
procedures of [RFC6838]. | ||||
Please update the "HTTP Problem Types" registry at | IANA has added the following types to the "HTTP Problem Types" | |||
https://iana.org/assignments/http-problem-types | registry at <https://iana.org/assignments/http-problem-types>: "date" | |||
(https://iana.org/assignments/http-problem-types) for the types | (Section 9.4) and "ohttp-key" (Section 9.5). | |||
"date" (Section 9.4) and "ohttp-key" (Section 9.5). | ||||
9.1. application/ohttp-keys Media Type | 9.1. application/ohttp-keys Media Type | |||
The "application/ohttp-keys" media type identifies a key | The "application/ohttp-keys" media type identifies a key | |||
configuration used by Oblivious HTTP. | configuration used by Oblivious HTTP. | |||
Type name: application | Type name: application | |||
Subtype name: ohttp-keys | Subtype name: ohttp-keys | |||
Required parameters: N/A | Required parameters: N/A | |||
Optional parameters: N/A | Optional parameters: N/A | |||
Encoding considerations: "binary" | Encoding considerations: "binary" | |||
Security considerations: see Section 6.9 | Security considerations: See Section 6.9 | |||
Interoperability considerations: N/A | Interoperability considerations: N/A | |||
Published specification: this specification | Published specification: RFC 9458 | |||
Applications that use this media type: This type identifies a key | Applications that use this media type: This type identifies a key | |||
configuration as used by Oblivious HTTP and applications that use | configuration as used by Oblivious HTTP and applications that use | |||
Oblivious HTTP. | Oblivious HTTP. | |||
Fragment identifier considerations: N/A | Fragment identifier considerations: N/A | |||
Additional information: Magic number(s): N/A | Additional information: | |||
Deprecated alias names for this type: N/A | Magic number(s): N/A | |||
File extension(s): N/A | ||||
Macintosh file type code(s): N/A | Deprecated alias names for this type: N/A | |||
Person and email address to contact for further information: see Aut | ||||
hors' Addresses section | File extension(s): N/A | |||
Macintosh file type code(s): N/A | ||||
Person and email address to contact for further information: | ||||
See Authors' Addresses section | ||||
Intended usage: COMMON | Intended usage: COMMON | |||
Restrictions on usage: N/A | Restrictions on usage: N/A | |||
Author: see Authors' Addresses section | Author: See Authors' Addresses section | |||
Change controller: IETF | Change controller: IETF | |||
9.2. message/ohttp-req Media Type | 9.2. message/ohttp-req Media Type | |||
The "message/ohttp-req" identifies an encrypted binary HTTP request. | The "message/ohttp-req" identifies an encrypted binary HTTP request. | |||
This is a binary format that is defined in Section 4.3. | This is a binary format that is defined in Section 4.3. | |||
Type name: message | Type name: message | |||
Subtype name: ohttp-req | Subtype name: ohttp-req | |||
Required parameters: N/A | Required parameters: N/A | |||
Optional parameters: N/A | Optional parameters: N/A | |||
Encoding considerations: "binary" | Encoding considerations: "binary" | |||
Security considerations: see Section 6.9 | Security considerations: See Section 6.9 | |||
Interoperability considerations: N/A | Interoperability considerations: N/A | |||
Published specification: this specification | Published specification: RFC 9458 | |||
Applications that use this media type: Oblivious HTTP and | Applications that use this media type: Oblivious HTTP and | |||
applications that use Oblivious HTTP use this media type to | applications that use Oblivious HTTP use this media type to | |||
identify encapsulated binary HTTP requests. | identify encapsulated binary HTTP requests. | |||
Fragment identifier considerations: N/A | Fragment identifier considerations: N/A | |||
Additional information: Magic number(s): N/A | Additional information: | |||
Deprecated alias names for this type: N/A | Magic number(s): N/A | |||
File extension(s): N/A | ||||
Macintosh file type code(s): N/A | Deprecated alias names for this type: N/A | |||
Person and email address to contact for further information: see Aut | ||||
hors' Addresses section | File extension(s): N/A | |||
Macintosh file type code(s): N/A | ||||
Person and email address to contact for further information: | ||||
See Authors' Addresses section | ||||
Intended usage: COMMON | Intended usage: COMMON | |||
Restrictions on usage: N/A | Restrictions on usage: N/A | |||
Author: see Authors' Addresses section | Author: See Authors' Addresses section | |||
Change controller: IETF | Change controller: IETF | |||
9.3. message/ohttp-res Media Type | 9.3. message/ohttp-res Media Type | |||
The "message/ohttp-res" identifies an encrypted binary HTTP response. | The "message/ohttp-res" identifies an encrypted binary HTTP response. | |||
This is a binary format that is defined in Section 4.4. | This is a binary format that is defined in Section 4.4. | |||
Type name: message | Type name: message | |||
Subtype name: ohttp-res | Subtype name: ohttp-res | |||
Required parameters: N/A | Required parameters: N/A | |||
Optional parameters: N/A | Optional parameters: N/A | |||
Encoding considerations: "binary" | Encoding considerations: "binary" | |||
Security considerations: see Section 6.9 | Security considerations: See Section 6.9 | |||
Interoperability considerations: N/A | Interoperability considerations: N/A | |||
Published specification: this specification | Published specification: RFC 9458 | |||
Applications that use this media type: Oblivious HTTP and | Applications that use this media type: Oblivious HTTP and | |||
applications that use Oblivious HTTP use this media type to | applications that use Oblivious HTTP use this media type to | |||
identify encapsulated binary HTTP responses. | identify encapsulated binary HTTP responses. | |||
Fragment identifier considerations: N/A | Fragment identifier considerations: N/A | |||
Additional information: Magic number(s): N/A | Additional information: | |||
Deprecated alias names for this type: N/A | Magic number(s): N/A | |||
File extension(s): N/A | ||||
Macintosh file type code(s): N/A | Deprecated alias names for this type: N/A | |||
Person and email address to contact for further information: see Aut | ||||
hors' Addresses section | File extension(s): N/A | |||
Macintosh file type code(s): N/A | ||||
Person and email address to contact for further information: | ||||
See Authors' Addresses section | ||||
Intended usage: COMMON | Intended usage: COMMON | |||
Restrictions on usage: N/A | Restrictions on usage: N/A | |||
Author: see Authors' Addresses section | Author: See Authors' Addresses section | |||
Change controller: IETF | Change controller: IETF | |||
9.4. Registration of "date" Problem Type | 9.4. Registration of "date" Problem Type | |||
IANA are requested to create a new entry in the "HTTP Problem Type" | IANA has added a new entry in the "HTTP Problem Types" registry | |||
registry established by [PROBLEM]. | established by [PROBLEM]. | |||
Type URI: https://iana.org/assignments/http-problem-types#date | Type URI: https://iana.org/assignments/http-problem-types#date | |||
Title: Date Not Acceptable | Title: Date Not Acceptable | |||
Recommended HTTP Status Code: 400 | Recommended HTTP Status Code: 400 | |||
Reference: Section 6.5.2 of this document | Reference: Section 6.5.2 of RFC 9458 | |||
9.5. Registration of "ohttp-key" Problem Type | 9.5. Registration of "ohttp-key" Problem Type | |||
IANA are requested to create a new entry in the "HTTP Problem Type" | IANA has added a new entry in the "HTTP Problem Types" registry | |||
registry established by [PROBLEM]. | established by [PROBLEM]. | |||
Type URI: https://iana.org/assignments/http-problem-types#ohttp-key | Type URI: https://iana.org/assignments/http-problem-types#ohttp-key | |||
Title: Oblivious HTTP key configuration not acceptable | Title: Oblivious HTTP key configuration not acceptable | |||
Recommended HTTP Status Code: 400 | Recommended HTTP Status Code: 400 | |||
Reference: Section 5.3 of this document | Reference: Section 5.3 of RFC 9458 | |||
10. References | 10. References | |||
10.1. Normative References | 10.1. Normative References | |||
[ASCII] Cerf, V., "ASCII format for network interchange", STD 80, | [ASCII] Cerf, V., "ASCII format for network interchange", STD 80, | |||
RFC 20, DOI 10.17487/RFC0020, October 1969, | RFC 20, DOI 10.17487/RFC0020, October 1969, | |||
<https://www.rfc-editor.org/rfc/rfc20>. | <https://www.rfc-editor.org/info/rfc20>. | |||
[BINARY] Thomson, M. and C. A. Wood, "Binary Representation of HTTP | [BINARY] Thomson, M. and C. A. Wood, "Binary Representation of HTTP | |||
Messages", RFC 9292, DOI 10.17487/RFC9292, August 2022, | Messages", RFC 9292, DOI 10.17487/RFC9292, August 2022, | |||
<https://www.rfc-editor.org/rfc/rfc9292>. | <https://www.rfc-editor.org/info/rfc9292>. | |||
[HPKE] Barnes, R., Bhargavan, K., Lipp, B., and C. Wood, "Hybrid | [HPKE] Barnes, R., Bhargavan, K., Lipp, B., and C. Wood, "Hybrid | |||
Public Key Encryption", RFC 9180, DOI 10.17487/RFC9180, | Public Key Encryption", RFC 9180, DOI 10.17487/RFC9180, | |||
February 2022, <https://www.rfc-editor.org/rfc/rfc9180>. | February 2022, <https://www.rfc-editor.org/info/rfc9180>. | |||
[HTTP] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | [HTTP] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
Ed., "HTTP Semantics", STD 97, RFC 9110, | Ed., "HTTP Semantics", STD 97, RFC 9110, | |||
DOI 10.17487/RFC9110, June 2022, | DOI 10.17487/RFC9110, June 2022, | |||
<https://www.rfc-editor.org/rfc/rfc9110>. | <https://www.rfc-editor.org/info/rfc9110>. | |||
[HTTP-CACHING] | [HTTP-CACHING] | |||
Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
Ed., "HTTP Caching", STD 98, RFC 9111, | Ed., "HTTP Caching", STD 98, RFC 9111, | |||
DOI 10.17487/RFC9111, June 2022, | DOI 10.17487/RFC9111, June 2022, | |||
<https://www.rfc-editor.org/rfc/rfc9111>. | <https://www.rfc-editor.org/info/rfc9111>. | |||
[PROBLEM] Nottingham, M., Wilde, E., and S. Dalal, "Problem Details | [PROBLEM] Nottingham, M., Wilde, E., and S. Dalal, "Problem Details | |||
for HTTP APIs", Work in Progress, Internet-Draft, draft- | for HTTP APIs", RFC 9457, DOI 10.17487/RFC9457, July 2023, | |||
ietf-httpapi-rfc7807bis-06, 1 March 2023, | <https://www.rfc-editor.org/info/rfc9457>. | |||
<https://datatracker.ietf.org/doc/html/draft-ietf-httpapi- | ||||
rfc7807bis-06>. | ||||
[QUIC] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | [QUIC] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | |||
Multiplexed and Secure Transport", RFC 9000, | Multiplexed and Secure Transport", RFC 9000, | |||
DOI 10.17487/RFC9000, May 2021, | DOI 10.17487/RFC9000, May 2021, | |||
<https://www.rfc-editor.org/rfc/rfc9000>. | <https://www.rfc-editor.org/info/rfc9000>. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/rfc/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC6838] Freed, N., Klensin, J., and T. Hansen, "Media Type | [RFC6838] Freed, N., Klensin, J., and T. Hansen, "Media Type | |||
Specifications and Registration Procedures", BCP 13, | Specifications and Registration Procedures", BCP 13, | |||
RFC 6838, DOI 10.17487/RFC6838, January 2013, | RFC 6838, DOI 10.17487/RFC6838, January 2013, | |||
<https://www.rfc-editor.org/rfc/rfc6838>. | <https://www.rfc-editor.org/info/rfc6838>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/rfc/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
[RFC8470] Thomson, M., Nottingham, M., and W. Tarreau, "Using Early | [RFC8470] Thomson, M., Nottingham, M., and W. Tarreau, "Using Early | |||
Data in HTTP", RFC 8470, DOI 10.17487/RFC8470, September | Data in HTTP", RFC 8470, DOI 10.17487/RFC8470, September | |||
2018, <https://www.rfc-editor.org/rfc/rfc8470>. | 2018, <https://www.rfc-editor.org/info/rfc8470>. | |||
[TLS] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [TLS] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | |||
<https://www.rfc-editor.org/rfc/rfc8446>. | <https://www.rfc-editor.org/info/rfc8446>. | |||
10.2. Informative References | 10.2. Informative References | |||
[CLOCKSKEW] | [CLOCKSKEW] | |||
Acer, M., Stark, E., Felt, A., Fahl, S., Bhargava, R., | Acer, M., Stark, E., Felt, A., Fahl, S., Bhargava, R., | |||
Dev, B., Braithwaite, M., Sleevi, R., and P. Tabriz, | Dev, B., Braithwaite, M., Sleevi, R., and P. Tabriz, | |||
"Where the Wild Warnings Are: Root Causes of Chrome HTTPS | "Where the Wild Warnings Are: Root Causes of Chrome HTTPS | |||
Certificate Errors", Proceedings of the 2017 ACM SIGSAC | Certificate Errors", Proceedings of the 2017 ACM SIGSAC | |||
Conference on Computer and Communications Security, | Conference on Computer and Communications Security, | |||
DOI 10.1145/3133956.3134007, October 2017, | DOI 10.1145/3133956.3134007, October 2017, | |||
<https://doi.org/10.1145/3133956.3134007>. | <https://doi.org/10.1145/3133956.3134007>. | |||
[CONSISTENCY] | [CONSISTENCY] | |||
Davidson, A., Finkel, M., Thomson, M., and C. A. Wood, | Davidson, A., Finkel, M., Thomson, M., and C. A. Wood, | |||
"Key Consistency and Discovery", Work in Progress, | "Key Consistency and Discovery", Work in Progress, | |||
Internet-Draft, draft-ietf-privacypass-key-consistency-00, | Internet-Draft, draft-ietf-privacypass-key-consistency-01, | |||
24 October 2022, <https://datatracker.ietf.org/doc/html/ | 10 July 2023, <https://datatracker.ietf.org/doc/html/ | |||
draft-ietf-privacypass-key-consistency-00>. | draft-ietf-privacypass-key-consistency-01>. | |||
[COOKIES] Barth, A., "HTTP State Management Mechanism", RFC 6265, | [COOKIES] Barth, A., "HTTP State Management Mechanism", RFC 6265, | |||
DOI 10.17487/RFC6265, April 2011, | DOI 10.17487/RFC6265, April 2011, | |||
<https://www.rfc-editor.org/rfc/rfc6265>. | <https://www.rfc-editor.org/info/rfc6265>. | |||
[DMS2004] Dingledine, R., Mathewson, N., and P. Syverson, "Tor: The | [DMS2004] Dingledine, R., Mathewson, N., and P. Syverson, "Tor: The | |||
Second-Generation Onion Router", August 2004, | Second-Generation Onion Router", May 2004, | |||
<https://svn.torproject.org/svn/projects/design-paper/tor- | <https://svn.torproject.org/svn/projects/design-paper/tor- | |||
design.html>. | design.html>. | |||
[FIELDING] Fielding, R. T., "Architectural Styles and the Design of | [FIELDING] Fielding, R. T., "Architectural Styles and the Design of | |||
Network-based Software Architectures", 2000, | Network-based Software Architectures", January 2000, | |||
<https://www.ics.uci.edu/~fielding/pubs/dissertation/ | <https://www.ics.uci.edu/~fielding/pubs/dissertation/ | |||
fielding_dissertation.pdf>. | fielding_dissertation.pdf>. | |||
[FORWARDED] | [FORWARDED] | |||
Petersson, A. and M. Nilsson, "Forwarded HTTP Extension", | Petersson, A. and M. Nilsson, "Forwarded HTTP Extension", | |||
RFC 7239, DOI 10.17487/RFC7239, June 2014, | RFC 7239, DOI 10.17487/RFC7239, June 2014, | |||
<https://www.rfc-editor.org/rfc/rfc7239>. | <https://www.rfc-editor.org/info/rfc7239>. | |||
[HTTP/1.1] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | [HTTP/1.1] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
Ed., "HTTP/1.1", STD 99, RFC 9112, DOI 10.17487/RFC9112, | Ed., "HTTP/1.1", STD 99, RFC 9112, DOI 10.17487/RFC9112, | |||
June 2022, <https://www.rfc-editor.org/rfc/rfc9112>. | June 2022, <https://www.rfc-editor.org/info/rfc9112>. | |||
[HTTP/2] Thomson, M., Ed. and C. Benfield, Ed., "HTTP/2", RFC 9113, | [HTTP/2] Thomson, M., Ed. and C. Benfield, Ed., "HTTP/2", RFC 9113, | |||
DOI 10.17487/RFC9113, June 2022, | DOI 10.17487/RFC9113, June 2022, | |||
<https://www.rfc-editor.org/rfc/rfc9113>. | <https://www.rfc-editor.org/info/rfc9113>. | |||
[HTTP/3] Bishop, M., Ed., "HTTP/3", RFC 9114, DOI 10.17487/RFC9114, | [HTTP/3] Bishop, M., Ed., "HTTP/3", RFC 9114, DOI 10.17487/RFC9114, | |||
June 2022, <https://www.rfc-editor.org/rfc/rfc9114>. | June 2022, <https://www.rfc-editor.org/info/rfc9114>. | |||
[NTP] Mills, D., Martin, J., Ed., Burbank, J., and W. Kasch, | [NTP] Mills, D., Martin, J., Ed., Burbank, J., and W. Kasch, | |||
"Network Time Protocol Version 4: Protocol and Algorithms | "Network Time Protocol Version 4: Protocol and Algorithms | |||
Specification", RFC 5905, DOI 10.17487/RFC5905, June 2010, | Specification", RFC 5905, DOI 10.17487/RFC5905, June 2010, | |||
<https://www.rfc-editor.org/rfc/rfc5905>. | <https://www.rfc-editor.org/info/rfc5905>. | |||
[ODOH] Kinnear, E., McManus, P., Pauly, T., Verma, T., and C.A. | [ODOH] Kinnear, E., McManus, P., Pauly, T., Verma, T., and C.A. | |||
Wood, "Oblivious DNS over HTTPS", RFC 9230, | Wood, "Oblivious DNS over HTTPS", RFC 9230, | |||
DOI 10.17487/RFC9230, June 2022, | DOI 10.17487/RFC9230, June 2022, | |||
<https://www.rfc-editor.org/rfc/rfc9230>. | <https://www.rfc-editor.org/info/rfc9230>. | |||
[ODOH-PETS] | [ODOH-PETS] | |||
Singanamalla, S., Chunhapanya, S., Vavrusa, M., Verma, T., | Singanamalla, S., Chunhapanya, S., Hoyland, J., Vavruša, | |||
Wu, P., Fayed, M., Heimerl, K., Sullivan, N., and C. A. | M., Verma, T., Wu, P., Fayed, M., Heimerl, K., Sullivan, | |||
Wood, "Oblivious DNS over HTTPS (ODoH): A Practical | N., and C. A. Wood, "Oblivious DNS over HTTPS (ODoH): A | |||
Privacy Enhancement to DNS", 7 January 2021, | Practical Privacy Enhancement to DNS", PoPETS Proceedings | |||
Volume 2021, Issue 4, pp. 575-592, DOI 10.2478/popets- | ||||
2021-0085, January 2021, | ||||
<https://www.petsymposium.org/2021/files/papers/issue4/ | <https://www.petsymposium.org/2021/files/papers/issue4/ | |||
popets-2021-0085.pdf>. | popets-2021-0085.pdf>. | |||
[OHTTP-ANALYSIS] | [OHTTP-ANALYSIS] | |||
Hoyland, J., "Tamarin Model of Oblivious HTTP", 23 August | Hoyland, J., "Tamarin Model of Oblivious HTTP", commit | |||
2021, <https://github.com/cloudflare/ohttp-analysis>. | 6824eee, October 2022, | |||
<https://github.com/cloudflare/ohttp-analysis>. | ||||
[PRIO] Corrigan-Gibbs, H. and D. Boneh, "Prio: Private, Robust, | [PRIO] Corrigan-Gibbs, H. and D. Boneh, "Prio: Private, Robust, | |||
and Scalable Computation of Aggregate Statistics", 14 | and Scalable Computation of Aggregate Statistics", March | |||
March 2017, <https://crypto.stanford.edu/prio/paper.pdf>. | 2017, <https://crypto.stanford.edu/prio/paper.pdf>. | |||
[RANDOM] Eastlake 3rd, D., Schiller, J., and S. Crocker, | [RANDOM] Eastlake 3rd, D., Schiller, J., and S. Crocker, | |||
"Randomness Requirements for Security", BCP 106, RFC 4086, | "Randomness Requirements for Security", BCP 106, RFC 4086, | |||
DOI 10.17487/RFC4086, June 2005, | DOI 10.17487/RFC4086, June 2005, | |||
<https://www.rfc-editor.org/rfc/rfc4086>. | <https://www.rfc-editor.org/info/rfc4086>. | |||
[RFC7838] Nottingham, M., McManus, P., and J. Reschke, "HTTP | [RFC7838] Nottingham, M., McManus, P., and J. Reschke, "HTTP | |||
Alternative Services", RFC 7838, DOI 10.17487/RFC7838, | Alternative Services", RFC 7838, DOI 10.17487/RFC7838, | |||
April 2016, <https://www.rfc-editor.org/rfc/rfc7838>. | April 2016, <https://www.rfc-editor.org/info/rfc7838>. | |||
[RFC8484] Hoffman, P. and P. McManus, "DNS Queries over HTTPS | [RFC8484] Hoffman, P. and P. McManus, "DNS Queries over HTTPS | |||
(DoH)", RFC 8484, DOI 10.17487/RFC8484, October 2018, | (DoH)", RFC 8484, DOI 10.17487/RFC8484, October 2018, | |||
<https://www.rfc-editor.org/rfc/rfc8484>. | <https://www.rfc-editor.org/info/rfc8484>. | |||
[TEMPLATE] Gregorio, J., Fielding, R., Hadley, M., Nottingham, M., | [TEMPLATE] Gregorio, J., Fielding, R., Hadley, M., Nottingham, M., | |||
and D. Orchard, "URI Template", RFC 6570, | and D. Orchard, "URI Template", RFC 6570, | |||
DOI 10.17487/RFC6570, March 2012, | DOI 10.17487/RFC6570, March 2012, | |||
<https://www.rfc-editor.org/rfc/rfc6570>. | <https://www.rfc-editor.org/info/rfc6570>. | |||
[UWT] Nottingham, M., "Unsanctioned Web Tracking", 17 July 2015, | [UWT] Nottingham, M., "Unsanctioned Web Tracking", W3C TAG | |||
Finding, July 2015, | ||||
<https://www.w3.org/2001/tag/doc/unsanctioned-tracking/>. | <https://www.w3.org/2001/tag/doc/unsanctioned-tracking/>. | |||
[X25519] Langley, A., Hamburg, M., and S. Turner, "Elliptic Curves | [X25519] Langley, A., Hamburg, M., and S. Turner, "Elliptic Curves | |||
for Security", RFC 7748, DOI 10.17487/RFC7748, January | for Security", RFC 7748, DOI 10.17487/RFC7748, January | |||
2016, <https://www.rfc-editor.org/rfc/rfc7748>. | 2016, <https://www.rfc-editor.org/info/rfc7748>. | |||
Appendix A. Complete Example of a Request and Response | Appendix A. Complete Example of a Request and Response | |||
A single request and response exchange is shown here. Binary values | A single request and response exchange is shown here. Binary values | |||
(key configuration, secret keys, the content of messages, and | (key configuration, secret keys, the content of messages, and | |||
intermediate values) are shown in hexadecimal. The request and | intermediate values) are shown in hexadecimal. The request and | |||
response here are minimal; the purpose of this example is to show the | response here are minimal; the purpose of this example is to show the | |||
cryptographic operations. In this example, the Client is configured | cryptographic operations. In this example, the Client is configured | |||
with the Oblivious Relay Resource URI of | with the Oblivious Relay Resource URI of | |||
https://proxy.example.org/request.example.net/proxy, and the proxy is | https://proxy.example.org/request.example.net/proxy, and the proxy is | |||
configured to map requests to this URI to the Oblivious Gateway | configured to map requests to this URI to the Oblivious Gateway | |||
Resource URI https://example.com/oblivious/request. The Target | Resource URI https://example.com/oblivious/request. The Target | |||
Resource URI, i.e., the resource the Client ultimately wishes to | Resource URI, i.e., the resource the Client ultimately wishes to | |||
query, is https://example.com. | query, is https://example.com. | |||
To begin the process, the Oblivious Gateway Resource generates a key | To begin the process, the Oblivious Gateway Resource generates a key | |||
pair. In this example the server chooses DHKEM(X25519, HKDF-SHA256) | pair. In this example, the server chooses DHKEM(X25519, HKDF-SHA256) | |||
and generates an X25519 key pair [X25519]. The X25519 secret key is: | and generates an X25519 key pair [X25519]. The X25519 secret key is: | |||
3c168975674b2fa8e465970b79c8dcf09f1c741626480bd4c6162fc5b6a98e1a | 3c168975674b2fa8e465970b79c8dcf09f1c741626480bd4c6162fc5b6a98e1a | |||
The Oblivious Gateway Resource constructs a key configuration that | The Oblivious Gateway Resource constructs a key configuration that | |||
includes the corresponding public key as follows: | includes the corresponding public key as follows: | |||
01002031e1f05a740102115220e9af918f738674aec95f54db6e04eb705aae8e | 01002031e1f05a740102115220e9af918f738674aec95f54db6e04eb705aae8e | |||
79815500080001000100010003 | 79815500080001000100010003 | |||
skipping to change at line 1907 ¶ | skipping to change at line 1911 ¶ | |||
then generates an HPKE sending context that uses the server public | then generates an HPKE sending context that uses the server public | |||
key. This context is constructed from the following ephemeral secret | key. This context is constructed from the following ephemeral secret | |||
key: | key: | |||
bc51d5e930bda26589890ac7032f70ad12e4ecb37abb1b65b1256c9c48999c73 | bc51d5e930bda26589890ac7032f70ad12e4ecb37abb1b65b1256c9c48999c73 | |||
The corresponding public key is: | The corresponding public key is: | |||
4b28f881333e7c164ffc499ad9796f877f4e1051ee6d31bad19dec96c208b472 | 4b28f881333e7c164ffc499ad9796f877f4e1051ee6d31bad19dec96c208b472 | |||
And an info parameter of: | The context is created with an info parameter of: | |||
6d6573736167652f626874747020726571756573740001002000010001 | 6d6573736167652f626874747020726571756573740001002000010001 | |||
Applying the Seal operation from the HPKE context produces an | Applying the Seal operation from the HPKE context produces an | |||
encrypted message, allowing the Client to construct the following | encrypted message, allowing the Client to construct the following | |||
Encapsulated Request: | Encapsulated Request: | |||
010020000100014b28f881333e7c164ffc499ad9796f877f4e1051ee6d31bad1 | 010020000100014b28f881333e7c164ffc499ad9796f877f4e1051ee6d31bad1 | |||
9dec96c208b4726374e469135906992e1268c594d2a10c695d858c40a026e796 | 9dec96c208b4726374e469135906992e1268c594d2a10c695d858c40a026e796 | |||
5e7d86b83dd440b2c0185204b4d63525 | 5e7d86b83dd440b2c0185204b4d63525 | |||
skipping to change at line 1996 ¶ | skipping to change at line 2000 ¶ | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Date: Wed, 27 Jan 2021 04:45:07 GMT | Date: Wed, 27 Jan 2021 04:45:07 GMT | |||
Cache-Control: private, no-store | Cache-Control: private, no-store | |||
Content-Type: message/ohttp-res | Content-Type: message/ohttp-res | |||
Content-Length: 38 | Content-Length: 38 | |||
<content is the Encapsulated Response> | <content is the Encapsulated Response> | |||
The same response might then be generated by the Oblivious Relay | The same response might then be generated by the Oblivious Relay | |||
Resource which might change as little as the Date header. The Client | Resource, which might change as little as the Date header. The | |||
is then able to use the HPKE context it created and the nonce from | Client is then able to use the HPKE context it created and the nonce | |||
the Encapsulated Response to construct the AEAD key and nonce and | from the Encapsulated Response to construct the AEAD key and nonce | |||
decrypt the response. | and decrypt the response. | |||
Acknowledgments | Acknowledgments | |||
This design is based on a design for Oblivious DoH, described in | This design is based on a design for Oblivious DNS (queries) over | |||
[ODOH]. David Benjamin, Mark Nottingham, and Eric Rescorla made | HTTPS (DoH), described in [ODOH]. David Benjamin, Mark Nottingham, | |||
technical contributions. The authors also thank Ralph Giles, Lucas | and Eric Rescorla made technical contributions. The authors also | |||
Pardue, and Tommy Pauly for invaluable assistance. | thank Ralph Giles, Lucas Pardue, and Tommy Pauly for invaluable | |||
assistance. | ||||
Index | ||||
C E K O T | ||||
C | ||||
Client Section 1, Paragraph 3; Section 2, Paragraph 1; | ||||
Section 2, Paragraph 3; Section 2, Paragraph 3; Section 2, | ||||
Paragraph 6, Item 1; Section 2, Paragraph 6, Item 2; | ||||
Section 2, Paragraph 6, Item 3; Section 2, Paragraph 8, Item | ||||
2; Section 2, Paragraph 8, Item 3; Section 2, Paragraph 9; | ||||
Section 2, Paragraph 9; Section 2, Paragraph 9; Section 2.2; | ||||
Section 2.2, Paragraph 3.2.1; Section 2.2, Paragraph 3.2.1; | ||||
Section 3, Paragraph 1; Section 3, Paragraph 2; Section 3, | ||||
Paragraph 2; Section 3, Paragraph 3; Section 4.3, Paragraph | ||||
2, Item 3; Section 4.3, Paragraph 3; Section 4.4, Paragraph | ||||
6; Section 4.6, Paragraph 1; Section 5, Paragraph 1; | ||||
Section 5, Paragraph 2; Section 5, Paragraph 3; Section 5, | ||||
Paragraph 4; Section 5, Paragraph 4; Section 5, Paragraph 4; | ||||
Section 5, Paragraph 8; Section 5.2, Paragraph 4; | ||||
Section 5.2, Paragraph 4; Section 5.3, Paragraph 4; | ||||
Section 5.3, Paragraph 4; Section 5.3, Paragraph 4; | ||||
Section 5.3, Paragraph 4; Section 6, Paragraph 1; Section 6, | ||||
Paragraph 1; Section 6, Paragraph 2, Item 1; Section 6, | ||||
Paragraph 2, Item 1; Section 6, Paragraph 2, Item 1; | ||||
Section 6, Paragraph 2, Item 2; Section 6, Paragraph 3; | ||||
Section 6, Paragraph 5, Item 1; Section 6, Paragraph 7; | ||||
Section 6, Paragraph 8; Section 6, Paragraph 10, Item 1; | ||||
Section 6, Paragraph 10, Item 1; Section 6, Paragraph 10, | ||||
Item 2; Section 6, Paragraph 10, Item 2; Section 6.1, | ||||
Paragraph 6; Section 6.1, Paragraph 6; Section 6.1, | ||||
Paragraph 6; Section 6.1, Paragraph 6; Section 6.2, | ||||
Paragraph 1; Section 6.2, Paragraph 2; Section 6.2, | ||||
Paragraph 4; Section 6.2, Paragraph 4; Section 6.2.1, | ||||
Paragraph 1; Section 6.2.1, Paragraph 1; Section 6.2.1, | ||||
Paragraph 2; Section 6.2.1, Paragraph 2; Section 6.2.1, | ||||
Paragraph 3; Section 6.2.1, Paragraph 3; Section 6.2.1, | ||||
Paragraph 4; Section 6.2.3, Paragraph 3; Section 6.3, | ||||
Paragraph 1; Section 6.5, Paragraph 2; Section 6.5, | ||||
Paragraph 4; Section 6.5, Paragraph 6; Section 6.5.1, | ||||
Paragraph 1; Section 6.5.1, Paragraph 4; Section 6.5.2, | ||||
Paragraph 4; Section 6.5.2, Paragraph 5; Section 6.5.2, | ||||
Paragraph 5; Section 6.5.2, Paragraph 7; Section 6.5.2, | ||||
Paragraph 7; Section 6.7, Paragraph 2; Section 6.7, | ||||
Paragraph 2; Section 6.7, Paragraph 4; Section 6.8, | ||||
Paragraph 1; Section 6.9, Paragraph 1; Section 7, Paragraph | ||||
1; Section 7, Paragraph 1; Section 7, Paragraph 1; | ||||
Section 7, Paragraph 3; Section 7, Paragraph 3; Section 7, | ||||
Paragraph 4; Section 7, Paragraph 4; Section 7, Paragraph 5; | ||||
Section 7, Paragraph 5; Section 7, Paragraph 5; Section 7, | ||||
Paragraph 6; Appendix A, Paragraph 1; Appendix A, Paragraph | ||||
1; Appendix A, Paragraph 6; Appendix A, Paragraph 6; | ||||
Appendix A, Paragraph 8; Appendix A, Paragraph 8; | ||||
Appendix A, Paragraph 8; Appendix A, Paragraph 14; | ||||
Appendix A, Paragraph 16; Appendix A, Paragraph 36 | ||||
Clients Section 1, Paragraph 8; Section 2.2, Paragraph 3.8.1; | ||||
Section 3, Paragraph 1; Section 3, Paragraph 3; Section 3, | ||||
Paragraph 3; Section 4.3, Paragraph 1; Section 4.4, | ||||
Paragraph 5; Section 4.4, Paragraph 5; Section 5, Paragraph | ||||
1; Section 5, Paragraph 2; Section 5.1, Paragraph 2; | ||||
Section 6, Paragraph 10, Item 1; Section 6.1, Paragraph 1; | ||||
Section 6.1, Paragraph 1; Section 6.1, Paragraph 2; | ||||
Section 6.1, Paragraph 3; Section 6.1, Paragraph 3; | ||||
Section 6.1, Paragraph 4; Section 6.1, Paragraph 4; | ||||
Section 6.1, Paragraph 5; Section 6.1, Paragraph 7; | ||||
Section 6.2, Paragraph 3; Section 6.2, Paragraph 4; | ||||
Section 6.2.1, Paragraph 1; Section 6.2.1, Paragraph 1; | ||||
Section 6.2.1, Paragraph 3; Section 6.2.1, Paragraph 3; | ||||
Section 6.2.1, Paragraph 3; Section 6.2.1, Paragraph 3; | ||||
Section 6.2.2, Paragraph 2; Section 6.2.3, Paragraph 3; | ||||
Section 6.2.3, Paragraph 5; Section 6.2.3, Paragraph 5; | ||||
Section 6.2.3, Paragraph 6; Section 6.5, Paragraph 1; | ||||
Section 6.5.1, Paragraph 1; Section 6.5.1, Paragraph 4; | ||||
Section 6.5.2, Paragraph 7; Section 6.5.2, Paragraph 8; | ||||
Section 6.5.2, Paragraph 10; Section 6.8, Paragraph 1; | ||||
Section 6.8, Paragraph 1; Section 6.8, Paragraph 2; | ||||
Section 7, Paragraph 1; Section 7, Paragraph 4; Section 7, | ||||
Paragraph 4; Section 7, Paragraph 4; Section 7, Paragraph 5; | ||||
Section 8.1, Paragraph 1; Section 8.2, Paragraph 2; | ||||
Section 8.3, Paragraph 1; Section 8.3, Paragraph 2 | ||||
E | ||||
Encapsulated Request Section 2, Paragraph 2, Item 3; | ||||
Section 2, Paragraph 6, Item 3; Section 2, Paragraph 7; | ||||
Section 2.2; Section 2.2, Paragraph 3.10.1; Section 2.2, | ||||
Paragraph 3.12.1; Section 4, Paragraph 2, Item 1; | ||||
Section 4.1, Paragraph 3; Section 4.1, Paragraph 3; | ||||
Section 4.1, Paragraph 4; Section 4.1, Paragraph 4; | ||||
Section 4.1, Paragraph 6; Section 4.3, Paragraph 3; | ||||
Section 4.3, Paragraph 8; Section 4.3, Paragraph 8; | ||||
Section 5, Paragraph 1; Section 5, Paragraph 1; Section 5, | ||||
Paragraph 1; Section 5, Paragraph 1; Section 5, Paragraph 1; | ||||
Section 5, Paragraph 1; Section 5.2, Paragraph 3; | ||||
Section 5.3, Paragraph 1; Section 6, Paragraph 3; Section 6, | ||||
Paragraph 10, Item 1; Section 6.1, Paragraph 6; | ||||
Section 6.2.3, Paragraph 2; Section 6.3, Paragraph 2; | ||||
Section 6.4, Paragraph 2; Section 6.5, Paragraph 2; | ||||
Section 6.10, Paragraph 2; Appendix A, Paragraph 14 | ||||
Encapsulated Response Section 2.2; Section 2.2, Paragraph | ||||
3.10.1; Section 4, Paragraph 2, Item 2; Section 4.2, | ||||
Paragraph 3; Section 4.2, Paragraph 3; Section 4.2, | ||||
Paragraph 4; Section 4.2, Paragraph 4; Section 4.2, | ||||
Paragraph 6; Section 4.4, Paragraph 1; Section 4.4, | ||||
Paragraph 2, Item 7; Section 4.4, Paragraph 5; Section 5.2, | ||||
Paragraph 3; Section 5.2, Paragraph 4; Section 6.2, | ||||
Paragraph 5; Appendix A, Paragraph 24; Appendix A, Paragraph | ||||
32; Appendix A, Paragraph 36 | ||||
K | ||||
key configuration Section 3, Paragraph 1; Section 3, Paragraph | ||||
1; Section 3, Paragraph 2; Section 3, Paragraph 3; | ||||
Section 3.1, Paragraph 1; Section 3.1, Paragraph 2; | ||||
Section 3.1, Paragraph 4; Section 3.2, Paragraph 1; | ||||
Section 3.2, Paragraph 2; Section 4.3, Paragraph 1; | ||||
Section 4.3, Paragraph 2, Item 3; Section 5.2, Paragraph 4; | ||||
Section 5.3, Paragraph 1; Section 5.3, Paragraph 4; | ||||
Section 5.3, Paragraph 4; Section 6.1, Paragraph 2; | ||||
Section 6.6, Paragraph 1; Section 6.6, Paragraph 1; | ||||
Section 6.9, Paragraph 1; Section 7, Paragraph 1; Section 7, | ||||
Paragraph 2; Section 9.1, Paragraph 1; Section 9.1, | ||||
Paragraph 2.18.1; Section 9.5, Paragraph 2.4.1; Appendix A, | ||||
Paragraph 1; Appendix A, Paragraph 4; Appendix A, Paragraph | ||||
6; Appendix A, Paragraph 8 | ||||
key configurations Section 3, Paragraph 2; Section 3, | ||||
Paragraph 2; Section 3, Paragraph 3; Section 3.2, Paragraph | ||||
1; Section 6.1, Paragraph 3 | ||||
O | ||||
Oblivious Gateway Resource Section 4.3, Paragraph 9.1.3 | ||||
Oblivious Gateway Resource Section 1, Paragraph 6, Item 2; | ||||
Section 1, Paragraph 6, Item 3; Section 1, Paragraph 7; | ||||
Section 1, Paragraph 8; Section 2, Paragraph 2, Item 1; | ||||
Section 2, Paragraph 2, Item 1; Section 2, Paragraph 2, Item | ||||
2; Section 2, Paragraph 2, Item 3; Section 2, Paragraph 3; | ||||
Section 2, Paragraph 3; Section 2, Paragraph 3; Section 2, | ||||
Paragraph 5; Section 2, Paragraph 6, Item 5; Section 2, | ||||
Paragraph 7; Section 2, Paragraph 7; Section 2, Paragraph 8, | ||||
Item 1; Section 2, Paragraph 9; Section 2, Paragraph 9; | ||||
Section 2.1, Paragraph 1; Section 2.2, Paragraph 3.8.1; | ||||
Section 2.2; Section 3, Paragraph 1; Section 3.1, Paragraph | ||||
5.2.1; Section 3.1, Paragraph 5.10.1; Section 4.3, Paragraph | ||||
8; Section 4.3, Paragraph 9.1.1; Section 4.3, Paragraph | ||||
9.1.2; Section 4.3, Paragraph 9.1.3; Section 4.3, Paragraph | ||||
9, Item 4; Section 4.3, Paragraph 12; Section 4.4, Paragraph | ||||
1; Section 4.6, Paragraph 1; Section 5, Paragraph 2; | ||||
Section 5, Paragraph 2; Section 5, Paragraph 4; Section 5, | ||||
Paragraph 4; Section 5, Paragraph 5; Section 5, Paragraph 7; | ||||
Section 5, Paragraph 8; Section 5, Paragraph 9; Section 5, | ||||
Paragraph 10; Section 5.1, Paragraph 2; Section 5.2, | ||||
Paragraph 2; Section 5.2, Paragraph 3; Section 5.2, | ||||
Paragraph 3; Section 5.2, Paragraph 4; Section 5.3, | ||||
Paragraph 1; Section 5.3, Paragraph 4; Section 6, Paragraph | ||||
1; Section 6, Paragraph 3; Section 6, Paragraph 5, Item 3; | ||||
Section 6, Paragraph 6; Section 6, Paragraph 7; Section 6, | ||||
Paragraph 8; Section 6, Paragraph 8; Section 6.1, Paragraph | ||||
1; Section 6.1, Paragraph 2; Section 6.2, Paragraph 1; | ||||
Section 6.2, Paragraph 1; Section 6.2.2, Paragraph 1; | ||||
Section 6.2.3, Paragraph 2; Section 6.3, Paragraph 1; | ||||
Section 6.3, Paragraph 1; Section 6.3, Paragraph 1; | ||||
Section 6.3, Paragraph 4; Section 6.3, Paragraph 4; | ||||
Section 6.3, Paragraph 4; Section 6.4, Paragraph 1; | ||||
Section 6.4, Paragraph 1; Section 6.5.1, Paragraph 1; | ||||
Section 6.5.1, Paragraph 3; Section 6.5.1, Paragraph 3; | ||||
Section 6.5.1, Paragraph 3; Section 6.5.2, Paragraph 1; | ||||
Section 6.5.2, Paragraph 4; Section 6.5.2, Paragraph 5; | ||||
Section 6.5.2, Paragraph 7; Section 6.5.2, Paragraph 8; | ||||
Section 6.5.2, Paragraph 10; Section 6.5.2, Paragraph 10; | ||||
Section 6.7, Paragraph 3; Section 6.9, Paragraph 1; | ||||
Section 6.10, Paragraph 1; Section 6.10, Paragraph 1; | ||||
Section 6.10, Paragraph 3; Section 6.10, Paragraph 3; | ||||
Section 6.10, Paragraph 3; Section 6.10, Paragraph 3; | ||||
Section 6.10, Paragraph 4; Section 6.10, Paragraph 4; | ||||
Section 6.10, Paragraph 5; Section 7, Paragraph 1; | ||||
Section 7, Paragraph 2; Section 7, Paragraph 2; Section 7, | ||||
Paragraph 2; Section 8.2, Paragraph 1; Section 8.2, | ||||
Paragraph 1; Section 8.2, Paragraph 2; Appendix A, Paragraph | ||||
1; Appendix A, Paragraph 2; Appendix A, Paragraph 4; | ||||
Appendix A, Paragraph 8; Appendix A, Paragraph 18; | ||||
Appendix A, Paragraph 20; Appendix A, Paragraph 20; | ||||
Appendix A, Paragraph 34 | ||||
Oblivious Gateway Resources Section 4.4, Paragraph 1; | ||||
Section 6, Paragraph 10, Item 1; Section 6, Paragraph 10, | ||||
Item 1; Section 6.1, Paragraph 1; Section 6.1, Paragraph 1; | ||||
Section 6.2.3, Paragraph 6; Section 6.5.1, Paragraph 4; | ||||
Section 6.5.1, Paragraph 5; Section 6.5.2, Paragraph 9; | ||||
Section 8.2, Paragraph 1; Section 8.2, Paragraph 1; | ||||
Section 8.2, Paragraph 2 | ||||
Oblivious Relay and Gateway Resources Section 2, Paragraph 2, | ||||
Item 3; Section 7, Paragraph 2 | ||||
Oblivious Relay Resource Section 1, Paragraph 6, Item 2; | ||||
Section 1, Paragraph 7; Section 1, Paragraph 8; Section 1, | ||||
Paragraph 8; Section 2, Paragraph 2, Item 3; Section 2, | ||||
Paragraph 6, Item 3; Section 2, Paragraph 6, Item 4; | ||||
Section 2, Paragraph 8, Item 1; Section 2, Paragraph 8, Item | ||||
2; Section 2.1, Paragraph 1; Section 2.2, Paragraph 3.2.1; | ||||
Section 2.2; Section 5, Paragraph 1; Section 5, Paragraph 1; | ||||
Section 5, Paragraph 1; Section 5, Paragraph 1; Section 5, | ||||
Paragraph 1; Section 5, Paragraph 2; Section 5, Paragraph 2; | ||||
Section 5, Paragraph 4; Section 5, Paragraph 4; Section 5, | ||||
Paragraph 4; Section 5, Paragraph 5; Section 5, Paragraph 5; | ||||
Section 5, Paragraph 6; Section 5.2, Paragraph 2; | ||||
Section 5.2, Paragraph 4; Section 5.2, Paragraph 4; | ||||
Section 5.3, Paragraph 4; Section 6, Paragraph 3; Section 6, | ||||
Paragraph 5, Item 2; Section 6, Paragraph 7; Section 6, | ||||
Paragraph 7; Section 6, Paragraph 8; Section 6, Paragraph | ||||
10, Item 1; Section 6, Paragraph 10, Item 1; Section 6.1, | ||||
Paragraph 3; Section 6.1, Paragraph 6; Section 6.1, | ||||
Paragraph 6; Section 6.1, Paragraph 6; Section 6.1, | ||||
Paragraph 7; Section 6.2, Paragraph 1; Section 6.2, | ||||
Paragraph 2; Section 6.2, Paragraph 3; Section 6.2.3, | ||||
Paragraph 2; Section 6.2.3, Paragraph 5; Section 6.2.3, | ||||
Paragraph 5; Section 6.5, Paragraph 2; Section 6.5, | ||||
Paragraph 4; Section 6.7, Paragraph 4; Section 6.7, | ||||
Paragraph 4; Section 7, Paragraph 1; Section 7, Paragraph 2; | ||||
Section 7, Paragraph 3; Section 8.2, Paragraph 1; | ||||
Section 8.2, Paragraph 1; Section 8.2, Paragraph 1; | ||||
Appendix A, Paragraph 1; Appendix A, Paragraph 16; | ||||
Appendix A, Paragraph 18; Appendix A, Paragraph 36 | ||||
Oblivious Relay Resources Section 6.2.2, Paragraph 1; | ||||
Section 6.2.3, Paragraph 6; Section 6.10, Paragraph 4; | ||||
Section 8.2, Paragraph 2; Section 8.2, Paragraph 2 | ||||
T | ||||
Target Resource Section 2, Paragraph 3; Section 2, Paragraph | ||||
5; Section 2, Paragraph 6, Item 1; Section 2, Paragraph 9; | ||||
Section 2, Paragraph 9; Section 2, Paragraph 9; Section 2.2, | ||||
Paragraph 3.2.1; Section 2.2, Paragraph 3.10.1; Section 2.2; | ||||
Section 5, Paragraph 2; Section 5, Paragraph 2; Section 5, | ||||
Paragraph 2; Section 5, Paragraph 7; Section 5, Paragraph 8; | ||||
Section 5.2, Paragraph 3; Section 5.2, Paragraph 3; | ||||
Section 6, Paragraph 1; Section 6, Paragraph 5, Item 3; | ||||
Section 6, Paragraph 6; Section 6, Paragraph 8; Section 6.1, | ||||
Paragraph 1; Section 6.1, Paragraph 1; Section 6.1, | ||||
Paragraph 3; Section 6.3, Paragraph 1; Section 6.3, | ||||
Paragraph 1; Section 6.3, Paragraph 4; Section 6.3, | ||||
Paragraph 4; Section 6.9, Paragraph 3; Section 6.10, | ||||
Paragraph 1; Section 6.10, Paragraph 3; Section 6.10, | ||||
Paragraph 3; Section 6.10, Paragraph 3; Section 6.10, | ||||
Paragraph 3; Section 6.10, Paragraph 4; Section 6.10, | ||||
Paragraph 5; Appendix A, Paragraph 1; Appendix A, Paragraph | ||||
20; Appendix A, Paragraph 20 | ||||
Authors' Addresses | Authors' Addresses | |||
Martin Thomson | Martin Thomson | |||
Mozilla | Mozilla | |||
Email: mt@lowentropy.net | Email: mt@lowentropy.net | |||
Christopher A. Wood | Christopher A. Wood | |||
Cloudflare | Cloudflare | |||
Email: caw@heapingbits.net | Email: caw@heapingbits.net | |||
End of changes. 189 change blocks. | ||||
677 lines changed or deleted | 436 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |