GithubHelp home page GithubHelp logo

Comments (6)

gaukas avatar gaukas commented on June 3, 2024 1

Implementation-wise, you may refer to gaukas/clienthellod and tlsfingerprint.io for implementation in Go and Python/Rust respectively.

Please check out the repositories linked from my previous response for the actual implementation. I am pretty sure it has been implemented in multiple programming languages and feel free to pick the one you are more familiar with.

from utls.

lmmqxyx404 avatar lmmqxyx404 commented on June 3, 2024 1

Implementation-wise, you may refer to gaukas/clienthellod and tlsfingerprint.io for implementation in Go and Python/Rust respectively.

Please check out the repositories linked from my previous response for the actual implementation. I am pretty sure it has been implemented in multiple programming languages and feel free to pick the one you are more familiar with.

rust-src/src/tls_parser.rs
I found the file.
And I hate C++...

from utls.

lmmqxyx404 avatar lmmqxyx404 commented on June 3, 2024

For example, chrome83 is 9c673fd64a32c8dc.
while in wireshark, it is b32309a26951912be7dba376398abc3b.

from utls.

gaukas avatar gaukas commented on June 3, 2024

While this question might be more suitable for tlsfingerprint.io or clienthellod, I can answer it here.

TLSFingerprint.io uses a SHA-1 based hash to differentiate TLS fingerprints with great granularity. For what's covered by the hash, please see the original paper: The use of TLS in Censorship Circumvention.

Implementation-wise, you may refer to gaukas/clienthellod and tlsfingerprint.io for implementation in Go and Python/Rust respectively.


As of the hash and long-string representation you saw in wireshark, it is called JA3 (with a new version named JA4?), a TLS fingerprint representation implemented by salesforce. I'm not aware of the original designer of it, but they didn't opt to adapt our design and therefore is of little value to uTLS.

from utls.

lmmqxyx404 avatar lmmqxyx404 commented on June 3, 2024

While this question might be more suitable for tlsfingerprint.io or clienthellod, I can answer it here.

TLSFingerprint.io uses a SHA-1 based hash to differentiate TLS fingerprints with great granularity. For what's covered by the hash, please see the original paper: The use of TLS in Censorship Circumvention.

Implementation-wise, you may refer to gaukas/clienthellod and tlsfingerprint.io for implementation in Go and Python/Rust respectively.

As of the hash and long-string representation you saw in wireshark, it is called JA3 (with a new version named JA4?), a TLS fingerprint representation implemented by salesforce. I'm not aware of the original designer of it, but they didn't opt to adapt our design and therefore is of little value to uTLS.

Thanks a lot. I will try sha1 later.

from utls.

lmmqxyx404 avatar lmmqxyx404 commented on June 3, 2024
In our study, we collected 3 kinds of information from
the network, including counts and coarse grained times�tamps of unique Client Hello messages, a sample of SNI
and anonymized connection-specific metadata for each unique
Client Hello, and Server Hello responses. We applied for and
received IRB exemption for our collection, and worked with
our institution’s network and IT staff to ensure protection of
user privacy.
Client Hellos For successfully parsed Client Hellos, we
extracted the TLS record version, handshake version, list of
cipher suites, list of supported compression methods, and list
of extensions. When present, we extracted data from several
specific extensions, including the server name indication, el�liptic curves (supported groups), EC point formats, signature
algorithms, and application layer protocol negotiation (ALPN).
We then formed a fingerprint ID from this data, by taking
the SHA1 hash of the TLS record version, handshake version,
cipher suite list, compression method list, extension list, elliptic
curve list, EC point format list, signature algorithm list, and
ALPN list4
. We truncated the SHA1 hash to 64-bits to allow it
to fit a native type in our database. Assuming no adversarially�generated fingerprints, the probability of any collision (given
by the birthday paradox) in a dataset of up to 1,000,000 unique
fingerprints is below 10−7
. For each fingerprint, we recorded
a count of the number of connections it appeared in for each
hour in a PostgreSQL database.

I've read the paper about the SHA1 algorithm, but still haven't found a more accurate description.I wonder if anyone can provide the detailed algorithm used in the site
@gaukas

from utls.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.