Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

token-based greasing / initial packet protection #3166

Closed
wants to merge 30 commits into from
Closed
Changes from 1 commit
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
048788c
first cut
kazuho Oct 29, 2019
5067498
editorial
kazuho Oct 29, 2019
58468c5
define downgrade prevention
kazuho Oct 29, 2019
42a7387
clarify the requirement when building a token
kazuho Oct 29, 2019
81dc3d9
editorial
kazuho Oct 29, 2019
2553793
protect token using checksum (reusing text from #3120 by @DavidSchinazi)
kazuho Oct 29, 2019
d16700d
use list for implementation guidance, applying @DavidSchnazi's sugges…
kazuho Oct 30, 2019
06bd108
clarify what can be associated with the token, adopting @MikeBishop's…
kazuho Oct 30, 2019
6158bd9
s/comprises of/contains/ (@MikeBishop)
kazuho Oct 30, 2019
7eded0a
use "Long Packet Type" (@DavidSchinazi)
kazuho Oct 30, 2019
0720ef3
swap reserved bits and packet type modifier (suggested by @martinthom…
kazuho Oct 30, 2019
14469be
long packet types when encoded in a long header packet is an XOR (@ma…
kazuho Oct 30, 2019
4e95ee6
clarify how a server can opt-out
kazuho Oct 30, 2019
bacab50
Revert "protect token using checksum (reusing text from #3120 by @Dav…
kazuho Oct 30, 2019
d9ec324
no more downgrade
kazuho Oct 30, 2019
3f4e7cc
server always announce (though it can effectively opt-out)
kazuho Oct 30, 2019
69d9969
delete VERSION_NEGOTIATION_ERROR (once again)
kazuho Oct 30, 2019
373257b
clarify how to handle Retry, as well as stating that a fixed mapping …
kazuho Oct 30, 2019
94a5a1b
add Lifetime field
kazuho Oct 30, 2019
5f853ad
Update draft-ietf-quic-transport.md
kazuho Oct 31, 2019
75735e0
@MikeBishop's suggestions; https://github.com/quicwg/base-drafts/pull…
kazuho Oct 31, 2019
44c2b1d
oops, amend the previous commit
kazuho Oct 31, 2019
d557fb7
fix typo, emphasize that this is just an example
kazuho Oct 31, 2019
7d0fa47
Rephrase as "seeding"; The default of "alternative" being the standar…
kazuho Oct 31, 2019
3caa73e
Update draft-ietf-quic-transport.md
kazuho Oct 31, 2019
ead19c0
Update draft-ietf-quic-transport.md
kazuho Oct 31, 2019
bd45b37
Update draft-ietf-quic-transport.md
kazuho Oct 31, 2019
0a45df1
Update draft-ietf-quic-transport.md
kazuho Oct 31, 2019
d683da8
wordwrap
kazuho Oct 31, 2019
febd899
s/PRF/CSPRNG/ for clarification
kazuho Oct 31, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
17 changes: 17 additions & 0 deletions draft-ietf-quic-transport.md
Expand Up @@ -2789,6 +2789,23 @@ following steps:
decrypts the embedded token and recovers the alternative initial salt, uses
that to decrypt the payload of the Initial packet.

* When sending a Retry in response to an Initial packet carrying an alternative
version number, the server embeds the NEW_TOKEN token found in the Initial
packet within the retry token it issues. Once the server receives a response
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is an important design point that is hidden: the aliased version applies to all Initial packets that are sent. That means that the alternative salt is used when the server provides an updated connection ID. Do the Handshake and 0-RTT packets also use the aliased version? That needs to be right up front.

from the client carrying that retry token and the path is validated, it
decrypts the NEW_TOKEN token embedded in the retry token to recover the
kazuho marked this conversation as resolved.
Show resolved Hide resolved
alternative initial salt that is to be used for unprotecting the packet
payload.

Instead of associating a new alternative initial salt to every NEW_TOKEN token,
kazuho marked this conversation as resolved.
Show resolved Hide resolved
a server might map a fixed salt to each of the alternative version numbers it
issues. Such design is not recommended, as an active attacker might build a
list of known alternative version numbers and their initial salts and use that
list to decrypt the payload of Initial packets using those alternative version
numbers. But still, having a set of version numbers and initial salts used
concurrently is considered better than just using the default values of QUIC in
terms of preventing ossification.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not comfortable with the slack given here. While it does improve things when salt is reused, it also gives the client a false sense of security. It would be better if the client could be certain that it does indeed sent private information on the wire.

For example it might create an initial connection to bootstrap safety, similar to if it connected to a secure DNS with crypto keys (TBD), and then reconnects to send confidential informational information.

Taking this one further, it would be advantageous if a token could be used across different server certificates so the initial certificate could be "harmless" in order to enhance privacy.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be better if the client could be certain that it does indeed sent private information on the wire.

At the moment, we never provide that certainty. The only way to provide that is to send a public key in the NEW_TOKEN frame and do a DH to determine the initial salt.

We can do that, but that's essentially about porting ESNI to QUIC. My assumption has so far been that such an effort would require time, and it would be better to do that as a separet draft (e.g., https://datatracker.ietf.org/doc/draft-kazuho-quic-authenticated-handshake/).


A server MUST NOT send a Version Negotitation packet in response to a long
header packet with an alternative version number it has advertised.

Expand Down