I think Stéphane raises an interesting point: QUIC does enable
trade-offs between privacy and performance, and these trade-offs are not
well documented in the published RFC. The main trade-off comes from the
use of session resumption, including 0-RTT. A similar trade-off results
from using retry tokens provided in NEW TOKEN frames. A secondary
trade-off comes from the use of connection migration.
Session resumption in QUIC uses the mechanisms described in TLS 1.3. The
risks is actually documented in RFC 9001, in section 9.1 of the session
considerations, "Session Linkability". The entire text says: "Use of TLS
session tickets allows servers and possibly other entities to correlate
connections made by the same client; see Section 4.5 for details."
Section 4.5 is the description of the resumption mechanism. The relevant
text in that section says: "Session resumption allows servers to link
activity on the original connection with the resumed connection, which
might be a privacy issue for clients. Clients can choose not to enable
resumption to avoid creating this correlation. Clients SHOULD NOT reuse
tickets as that allows entities other than the server to correlate
connections; see Appendix C.4
<https://www.rfc-editor.org/rfc/rfc8446#appendix-C.4> of [TLS13
<https://www.rfc-editor.org/rfc/rfc9001.html#TLS13>]."
<https://www.rfc-editor.org/rfc/rfc9001.html#name-session-linkability>
The session resumption risk is not new to QUIC. This is exactly the same
issue as resumption of a TCP/TLS session. QUIC does add an additional
tracking mechanism with the "NEW TOKEN", which is designed to bypass
source address verification and save one RTT by showing a proof that the
IP address was already verified. This token could certainly allow some
form of tracking. We can debate whether this is an additional risk
compared to the TLS session token, but Stéphane's point hold: this
trade-off between performance and privacy is not analyzed and documented.
Similarly, there are potential trade-offs with the support of connection
migration. A client that attempts migration reveals the new IP address
used for that migration. A client that acts on a "server preferred
address" parameter may end up using and revealing a new IP address. We
can argue that the trade-offs are OK, but they are just that,
trade-off.And they are indeed not documented in the RFC.
There are mitigations to all these risks. For example, the classic
mitigation for session resumption privacy risk is for the client to not
use it at all, or to only use it if the IP address did not change and if
the ticket was provided recently. The same apply for the "NEW TOKEN"
variants of retry tokens. It is actually hard for clients behind NAT to
know that their IP address did not change, so such mitigations need
work. Similarly, there is a worthwhile discussion of migration risks,
which are different if the client identifies itself to the server at the
application layer and if it doesn't. It might be a very good idea to
publish that.
-- Christian Huitema
On 6/7/2021 7:37 AM, Mikkel Fahnøe Jørgensen wrote:
Also note that a lot of dicussions have taken place on github issues and pull
requests.
On 7 Jun 2021, at 16.20, Stephane Bortzmeyer <[email protected]> wrote:
On Mon, Jun 07, 2021 at 03:36:31PM +0200,
Mikkel Fahnøe Jørgensen <[email protected]> wrote
a message of 37 lines which said:
User tracking has been discussed a lot during the development of the
QUIC protocol.
User tracking BY THE SERVER? I'm sure the WG left no stone unturned
but I cannot find this discussions in the email archives. I probably
used the wrong keywords.
For servers, it is necessary to track users across migrations,
because you need to maintain connection state and to maintain the IP
address of where to send data.
This is why that I suggested (but it may be a bad idea, may be I
didn't think of everything) that a privacy-conscious client may be
better by not using connection migration, and resetting to an entirely
new connection when the IP address changes.