-
Notifications
You must be signed in to change notification settings - Fork 82
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
Google Chrome TLS extension permutation #220
Comments
I see there is an issue in uTLS and a merge request (already merged) that adds a @gaukas, how might randomized extension order be taken into account at https://tlsfingerprint.io/? With extension ordering being significant, I suppose Chrome fingerprints are going to be close to unique from now on. Maybe a secondary fingerprint that has all the extensions in a canonical order? Something like that could be useful for projects like naiveproxy that use a Chrome fingerprint. |
We have observed the behavior that Chrome shuffling the order of their extensions (skipping
Recently we have also updated tlsfingerprint.io to reflect this change and we call it Normalized Fingerprint, which integrates the website with the latest change to our database/tap (db/tap change by @sippejw). And it is computed by sorting the Extensions List before hashing (exactly as you have suggested here) For those of you interested in the latest change, please refer to the screenshot down below. We prefix all Normalized Fingerprints with For Google Chrome, it is very likely that the "real fp" (be018011859fa141 in this screenshot) wouldn't have a corresponding entry in the database. Instead, the normalized version could be used to inspect any related specs and user-agents. This change to TLSFingerprint.io is not yet final since we are still updating the page template to include more details, therefore you won't be able to find the corresponding code change in refraction-networking/tls-fingerprint yet. But we would welcome any input on what information/statistics people would like us to include, given if we could record them on tap without violating our privacy policy or any regulations. |
All the fingerprinting shops would also implement their own order normalization so that their feature vector in the extensions would not degenerate into combinatorial noise. For the purpose of fingerprinting the Chrome fingerprints would remain more or less as distinct as before. But for the purpose of comparing fingerprints, the ways to normalize the order are not publicly specified and could well be slightly different across fingerprint databases, and then the fingerprint results cannot be used across databases. |
Here's an issue in JA3, no responses to it yet.
|
My question is that what is the purpose of shuffling while the privacy that random fingerprints bring can't be satisfied? |
Might not be the only reason to shuffle the extensions. Most likely, it is an attempt to defeat middleboxes which hardcoded all well-known
|
what is the point of this issue? I read the full issue text, but I am not understanding the concern? what is the problem you are hoping to address? to me this seems like a good change. if Chrome is sending random fingerprints, then servers can no longer whitelist Chrome only, or other dumb restrictions, at least not without some extra effort. |
For utls which try to simulate chrome tls, this will increase extra work.
It means utls library need to generate a new fingerprint inside chrome possible permutations for each connection.
And Firefox will follow the way.
So a false simulated utls fingerprint (say a fix fingerprint) may cause fingerprint of the fingerprint.
|
not sure what that nonsense was, but if Chrome is randomizing extensions, then other clients like uTLS can do that as well. In fact they already have: refraction-networking/utls#132 so I will ask again, what is the issue here? |
For a long time without looking, so...
don't know 🤭.
|
@4cq2 there is no problem to address. It's just a discussion topic. TLS fingerprinting is an important topic in censorship circumvention. This was a note to keep people updated with what's happening in that topic. |
By preventing servers and middleboxes from relying on a static order of TLS extensions, Chrome makes its TLS implementation more adaptable to future changes. This reduces the risk of issues or restrictions arising if Chrome updates how it arranges TLS extensions internally. While not guaranteeing privacy, it does disrupt server-side fingerprinting techniques built solely on TLS extension order. For a service solely focusing on this specific aspect, the Chrome change adds uncertainty to their data. fingerprinting services can easily implement normalization to reduce the uniqueness of individual connections for better comparison. Every additional fingerprinting vector that becomes dynamic (rather than static) introduces hurdles for trackers. This forces them to either gather more data points or invest in research to maintain the same level of identification. |
I am reposting some information from @ValdikSS on NTC.
Since 2023-01-20, Google Chrome has started randomizing the order of extensions in the TLS Client Hello. Fastly has a post about it:
A first look at Chrome's TLS ClientHello permutation in the wild
Contemporary versions of Chrome were 108, 109, and 110, though apparently the feature had been trialed back to 106.
Ready for Trial: TLS ClientHello extension permutation
Chrome Platform Status: Feature: TLS ClientHello extension permutation
Bug #1789436 is for doing the same thing in Firefox. It is closed with a commit since a couple of weeks ago, so I guess it will soon be happening in Firefox as well.
The text was updated successfully, but these errors were encountered: