O que é uma impressão digital JA3/JA4?

A Impressão digital JA3 / JA4 é um hash curto derivado de um handshake de cliente TLS que identifica qual biblioteca TLS, navegador ou bot estabeleceu uma conexão, sem depender do endereço IP. O JA3 foi introduzido pela Salesforce em 2017 utilizando o MD5; o JA4 é o sucessor moderno do FoxIO, que utiliza o SHA-256 e ordena os campos de entrada para resistir à evasão. Defesas contra bots, plataformas antifraude e sistemas de controle de acesso utilizam esses hashes para sinalizar clientes suspeitos no nível do protocolo.

Como funcionam as impressões digitais JA3 e JA4

O JA3 concatena cinco campos da mensagem TLS ClientHello: versão do TLS, conjuntos de criptografia, extensões, curvas elípticas e formatos de pontos EC; em seguida, aplica o hash MD5 a eles, gerando uma sequência de 32 caracteres (Fingerprint.com - Identificação de TLS, 2024). Todo cliente que envia a mesma combinação, independentemente do endereço IP, gera o mesmo hash. Essa consistência permite que os sistemas de segurança agrupem o tráfego por tipo de cliente, em vez de por origem.

O JA4 corrige uma vulnerabilidade fundamental do JA3: a ordem das extensões. Os clientes podiam alterar a ordem das extensões TLS para gerar um hash JA3 diferente, embora apresentassem recursos idênticos. O JA4 ordena os conjuntos de criptografia e as extensões antes de aplicar o hash, eliminando essa via de evasão. O resultado é uma sequência de caracteres dividida em três partes (por exemplo, t13d1516h2_8daaf6152771_b186095e22b6), composto por um prefixo legível por humanos e dois hashes SHA-256 truncados de 12 caracteres (Especificação JA4 da FoxIO-LLC, 2025). O JA4 também remove os valores GREASE, que os navegadores inserem para testes de compatibilidade e que, de outra forma, causariam ruído.

O conjunto FoxIO JA4+ amplia o conceito para além do TLS. O JA4H abrange os cabeçalhos das solicitações HTTP, o JA4S abrange a resposta TLS do lado do servidor e o JA4L mede os padrões de latência da rede. A combinação de sub-fingerprints aumenta consideravelmente a precisão da detecção.

Casos de uso

Os sistemas de mitigação de bots utilizam hashes JA3/JA4 para identificar bibliotecas de scraping (como as do Python, requests, httpx, ou compilações do Chromium sem interface gráfica) mesmo quando esses clientes alternam endereços IP ou falsificam strings de user-agent. Um endereço IP residencial combinado com uma pilha TLS em Python ainda produz uma assinatura digital reconhecível que não corresponde a um navegador.

As plataformas de controle de acesso combinam JA3/JA4 com outros sinais (agente do usuário, ordem dos quadros HTTP/2, hash do canvas) para construir um perfil composto do dispositivo. Uma discrepância entre o navegador declarado e a impressão digital TLS constitui um forte sinal de anomalia que merece ser investigado.

Pesquisadores de segurança e equipes de simulação de ataques utilizam essas “impressões digitais” de maneira inversa: identificam qual biblioteca TLS um servidor alvo espera receber e, em seguida, configuram seu cliente para se adequar a ela. Ferramentas como curl-impersonate e o utls A biblioteca aplica um patch na pilha TLS para gerar um handshake compatível com o Chrome.

Ao acessar sites em grande escala por meio de proxies residenciais, a assinatura digital JA4 do cliente ainda precisa corresponder a um navegador real; caso contrário, a vantagem da reputação do IP desaparece. A prática padrão consiste em combinar IPs residenciais genuínos (como os da rede Massive) com TLS compatível com o navegador.

Perguntas frequentes

Uma impressão digital JA3 é um hash MD5 de 32 caracteres composto por cinco campos do TLS ClientHello (versão TLS, conjuntos de criptografia, extensões, curvas elípticas e formatos de pontos EC), introduzida pela Salesforce em 2017 (Fingerprint.com - Identificação de TLS, 2024). Isso permite que as ferramentas de segurança de rede identifiquem a biblioteca TLS de um cliente sem depender do endereço IP.

O JA4 ordena os campos antes da hash, o que anula a aleatorização baseada na ordem das extensões, e utiliza o SHA-256 em vez do MD5. O resultado é um texto legível por humanos a_b_c uma string, em vez de um hash hexadecimal opaco (Especificação JA4 da FoxIO-LLC, 2025). O JA4 também ignora os valores do GREASE, tornando as impressões digitais mais estáveis ao longo das atualizações do navegador.

Sim. Bibliotecas como curl-impersonate e utls modificar a pilha TLS para imitar exatamente o ClientHello de um navegador alvo. As defesas contra bots combatem isso combinando o JA4 com sinais adicionais, como a ordem dos quadros HTTP/2, padrões de tempo e impressões digitais de canvas, a fim de criar um perfil composto mais difícil de falsificar.

A rotação de endereços IP não altera a impressão digital TLS do cliente HTTP subjacente. Um scraper em execução em um endereço IP residencial, mas que utilize a pilha TLS padrão do Python, continuará a corresponder a uma impressão digital conhecida de bot. É necessária uma emulação TLS precisa do navegador, juntamente com a rotação de IP, para evitar a detecção.