Device fingerprinting fără cookie-uri: cum funcționează
Cookie-urile dispar. Iată cum device fingerprinting oferă identificare persistentă fără niciun fel de stocare pe partea clientului.
Cookie-ul dispare. Intelligent Tracking Prevention (ITP) de la Safari limitează durata de viață a cookie-urilor la 7 zile. Enhanced Tracking Protection de la Firefox blochează complet cookie-urile terțe. Privacy Sandbox de la Chrome elimină treptat cookie-urile terțe. Cerințele de consimțământ din GDPR fac ca utilizatorii să refuze tot mai des bannerele de cookie-uri.
Pentru prevenirea fraudei, aceasta este o problemă. Dacă nu poți identifica dispozitivele în mod persistent, nu poți urmări infractorii recidiviști, nu poți detecta multi-accounting-ul și nu poți lega între ele sesiunile suspecte. Device fingerprinting rezolvă acest lucru identificând dispozitivele prin caracteristicile lor tehnice — fără cookie-uri, fără localStorage, fără niciun fel de stocare pe partea clientului.
Categoriile de semnale
Fingerprinting pasiv (fără JavaScript)
Încă înainte ca pagina ta să se încarce, browserul dezvăluie informații prin semnale la nivel de rețea:
Fingerprinting TLS (JA4). Mesajul TLS Client Hello conține suite de cifruri, extensii, curbe eliptice și algoritmi de semnătură. Folosim hashing JA4 — un înlocuitor modern al JA3, cu o granularitate mai bună.
Analiza stivei TCP/IP. Dimensiunea ferestrei TCP, valorile TTL și setările MSS variază între sistemele de operare. Linux, Windows și macOS au, fiecare, configurări caracteristice ale stivei TCP.
Analiza antetelor HTTP. Ordinea antetelor, valorile Accept-Language și preferințele de conexiune diferă de la un browser la altul.
Fingerprinting activ (JavaScript pe partea clientului)
Fingerprinting canvas. Desenăm o scenă atent concepută — text specific, forme geometrice și gradienți. GPU-uri diferite redau acest lucru cu diferențe subtile la nivel de pixeli, din cauza variațiilor de anti-aliasing, redare sub-pixel și amestecare a culorilor. Aplicăm hash pe datele pixelilor.
Fingerprinting WebGL. WebGL expune șirurile vendor/renderer ale GPU-ului, dimensiunile maxime de textură, extensiile suportate și capacitățile shaderelor. Aceste date identifică cu precizie modelul GPU-ului și versiunea driverului.
Fingerprinting AudioContext. Generăm un semnal de test și analizăm modul în care este procesat. Componentele audio diferite produc o ieșire măsurabil diferită, din cauza diferențelor de precizie în virgulă mobilă.
Enumerarea fonturilor. Fonturile de sistem disponibile variază în funcție de sistemul de operare, pachetul de limbă și software-ul instalat. Testăm circa 300 de fonturi diagnostice folosind tehnici de măsurare prin canvas.
Proprietățile Navigator. Numărul de nuclee CPU, memoria dispozitivului, platforma, limba, fusul orar, rezoluția ecranului, adâncimea de culoare, capacitățile de pointer și touch.
Analiza entropiei
Nu toate semnalele au aceeași greutate. Măsurăm entropia fiecărui semnal:
| Categoria de semnal | Entropie aproximativă |
|---|---|
| Canvas + WebGL combinate | ~18 biți |
| Lista de fonturi | ~8 biți |
| AudioContext | ~5 biți |
| Proprietățile Navigator | ~7 biți |
| Fingerprint TLS | ~6 biți |
| Ecran + display | ~4 biți |
| Fus orar + limbă | ~3 biți |
Combinate, cele peste 130 de semnale ale noastre oferă aproximativ 50+ biți de entropie — suficient pentru a identifica unic peste 1 catrilion de dispozitive distincte.
De la semnale la un hash stabil
Colectarea semnalelor brute reprezintă doar jumătate din problemă. Actualizările de browser modifică șirurile user agent. Actualizările de driver modifică parametrii WebGL. Instalările de fonturi modifică lista de fonturi.
Potrivirea aproximativă (fuzzy matching)
În loc să impunem potriviri exacte, folosim un algoritm de fuzzy matching care cântărește semnalele în funcție de stabilitate și entropie. Semnalele stabile (canvas, modelul GPU) au o greutate mai mare decât semnalele volatile (user agent, rezoluția ecranului).
Generarea candidaților folosește locality-sensitive hashing (LSH) pe cele mai stabile semnale pentru a identifica potriviri posibile. Scorarea similarității calculează un scor ponderat pe toate categoriile de semnale, calibrat astfel încât modificările normale ale dispozitivului să nu schimbe ID-ul vizitatorului, în timp ce schimbările reale de dispozitiv o fac.
Astfel se atinge o acuratețe de 99,5% — identificând corect vizitatorii care revin în cazul actualizărilor de browser, al ștergerii cookie-urilor, al modului incognito și al schimbării browserului.
Arhitectură care protejează confidențialitatea
Procesare pe server. Toate calculele fingerprint-ului au loc pe serverele noastre. Agentul de pe partea clientului colectează semnalele brute, dar nu calculează și nu stochează hash-ul fingerprint-ului.
Fără stocare de date cu caracter personal (PII). Stocăm hash-uri de fingerprint, nu semnale brute. Hash-ul este o funcție unidirecțională.
Rezidența datelor. Datele clienților din UE sunt procesate și stocate în centre de date din UE. Articolul 6(1)(f) din GDPR acoperă prevenirea fraudei ca interes legitim.
Identificarea între browsere
Cea mai grea provocare este identificarea aceluiași dispozitiv în browsere diferite. Ne bazăm pe semnale independente de browser: hardware-ul GPU, caracteristicile ecranului, fusul orar, setările de limbă, fonturile instalate (la nivel de sistem de operare) și caracteristicile stivei TCP/IP.
Acuratețea legării între browsere este de aproximativ 94% — mai mică decât la identificarea în cadrul aceluiași browser, dar suficientă pentru a detecta multi-accounting-ul între browsere pe același dispozitiv.
Integrare
Adăugarea device fingerprinting-ului necesită trei linii de cod. Agentul se încarcă asincron, colectează semnalele în mai puțin de 50 ms și le trimite către API-ul nostru. Răspunsul serverului include ID-ul vizitatorului, scorul de încredere și toate cele 24 de Smart Signals.