To initiate a TLS session, a client sends a TLS Client Hello packet following the TCP handshake. This packet, and the way in which it is generated, is dependent on packages and methods that are used when building the client application.

The server responds with a TLS Server Hello packet that is based on server-side supported ciphers and configurations as well as details in the Client Hello .

Because TLS negotiations are transmitted in the clear, it is possible to fingerprint and potentially identify client applications using the details in the TLS Client Hello packet.

The JA3 method gathers the decimal values of the bytes for the following fields in the Client Hello packet:

  • Version
  • Accepted cipher suites
  • List of extensions
  • Elliptic curves
  • Elliptic curve formats

It then concatenates those values together to create an MD5 hash (or unique fingerprint) that can enhance traditional cybersecurity approaches such as allow lists, deny lists, and searching for IOCs.

The JA3S method then gathers the decimal values of the bytes for the following fields in the Server Hello packet:

  • Version
  • Accepted cipher
  • List of extensions

It concatenates these values in the same way as the Client Hello packet, resulting in an MD5 hash known as a JA3S fingerprint.