Vysvětlení TLS fingerprintingu a JA4 hashů
Proč jsou TLS zprávy Client Hello zlatým dolem pro identifikaci zařízení — a jak nám JA4 hashe poskytují stabilní otisk, který přežije aktualizace prohlížeče.
Každé HTTPS spojení začíná TLS handshakem a každý TLS handshake začíná zprávou Client Hello. Tato zpráva obsahuje množství informací o připojujícím se klientovi — šifrovací sady, rozšíření, podporované křivky, podpisové algoritmy — které se výrazně liší napříč prohlížeči, verzemi a operačními systémy. TLS fingerprinting tyto informace zachycuje a využívá je jako identifikační signál.
Co obsahuje Client Hello?
Když se prohlížeč připojuje k HTTPS serveru, odesílá zprávu Client Hello obsahující: verzi TLS, kterou podporuje, seznam šifrovacích sad, které je ochoten použít, TLS rozšíření, která zahrnuje (jako SNI, ALPN a key share), eliptické křivky, které podporuje, podpisové algoritmy, které přijímá, a kompresní metody, které nabízí.
Každá rodina prohlížečů má osobitý otisk. Chrome, Firefox i Safari odesílají odlišné pořadí šifrovacích sad, odlišné sady rozšíření a odlišné preference křivek. I v rámci téže rodiny prohlížečů mohou různé verze odesílat mírně odlišné zprávy Client Hello podle toho, jak jsou šifrovací sady přidávány nebo vyřazovány.
Od JA3 k JA4
JA3 byl původní hash pro TLS fingerprinting, který v roce 2017 představil Salesforce. Spojuje verzi TLS, šifrovací sady, rozšíření, eliptické křivky a formáty EC bodů do řetězce a vypočítá z něj MD5 hash. Ačkoli byl průlomový, JA3 má svá omezení: produkuje jediný neprůhledný hash, který se obtížně analyzuje, a drobná změna v kterémkoli poli vytvoří zcela odlišný hash.
JA4, který v roce 2023 představila společnost FoxIO, vylepšuje JA3 hned v několika ohledech. Produkuje strukturovaný otisk se třemi komponentami: člověku čitelný prefix (jako „t13d1715h2“ — TLS 1.3, 17 šifrovacích sad, 15 rozšíření, HTTP/2), seřazený hash šifrovacích sad a seřazený hash rozšíření. Díky této struktuře jsou JA4 otisky srozumitelné na první pohled, přičemž si zachovávají přesnost potřebnou k identifikaci.
Proč na TLS otiscích záleží pro device intelligence
TLS otisky jsou cenné, protože se sbírají ještě předtím, než se spustí jakýkoli JavaScript. Bot, který falšuje svého user agenta, podvrhuje vykreslování canvasu a upravuje vlastnosti objektu navigator, přesto odesílá pravou zprávu Client Hello z té TLS knihovny, kterou reálně používá. Pokud Client Hello říká „knihovna crypto/tls jazyka Go“, ale user agent tvrdí „Chrome 124“, víme, že se něco podvrhuje.
Tato křížová validace je pro detekci botů mimořádně silná. Většina automatizačních frameworků — Selenium, Puppeteer, Playwright — používá nativní TLS stack prohlížeče, takže jejich TLS otisky odpovídají prohlížeči, který ovládají. Ale vlastní HTTP klienti, scrapery založené na Go a Python skripty používající knihovnu requests mají osobité TLS otisky, které je okamžitě identifikují jako klienty, kteří nejsou prohlížeči.
Stabilita TLS otisku
Jedním z problémů TLS fingerprintingu je stabilita napříč aktualizacemi prohlížeče. Když Chrome přidá nebo odebere šifrovací sadu, TLS otisk se změní. V praxi k tomu dochází méně často, než byste čekali. Seznam šifrovacích sad v Chromu je relativně stabilní — k větším změnám dochází jednou či dvakrát ročně, nikoli s každou verzí.
Strukturovaný formát JA4 zde pomáhá. Člověku čitelný prefix zůstává stabilní napříč minoritními změnami verzí (počet šifrovacích sad a rozšíření se nemění často), takže i když se detailní hash změní, prefix zajišťuje kontinuitu. V našem víceúrovňovém identifikačním systému jsou data TLS otisku zařazena do úrovně Tier 2 — dostatečně stabilní na to, aby přispěla k identifikaci, ale zpracovávaná pomocí párování napříč relacemi, aby zvládla očekávaný drift.
Sběr na straně serveru
Na rozdíl od signálů na straně klienta, které vyžadují spuštění JavaScriptu, se TLS otisky sbírají výhradně na straně serveru. Naše edge servery inspektují surový TLS handshake a extrahují Client Hello ještě před navázáním spojení. To znamená, že TLS fingerprinting funguje i tehdy, když je JavaScript zablokovaný, když má prohlížeč nainstalovaná rozšíření pro ochranu soukromí nebo když klient vůbec není prohlížeč.
Tato serverová povaha také činí TLS otisky odolnými vůči spoofingu. Ačkoli je teoreticky možné vytvořit vlastní TLS Client Hello, které napodobuje konkrétní prohlížeč, vyžaduje to implementaci TLS na nízké úrovni — mnohem více práce než změna řetězce user agenta. Většina nástrojů pro spoofing se o to nepokouší.
Integrace s identifikací zařízení
V našem enginu pro identifikaci zařízení slouží TLS otisk zároveň jako signál i jako validátor. Jako signál přispívá k celkovému otisku zařízení svou vlastní identifikační vahou. Jako validátor poskytuje křížovou kontrolu vůči deklarované identitě prohlížeče. Pokud JavaScriptové signály říkají „Chrome na macOS“, ale TLS otisk říká „Firefox na Linuxu“, tento rozpor spustí příznak tamperingu v naší analýze Smart Signals.