Fingerprinting urządzeń bez plików cookie: jak to działa
Pliki cookie odchodzą do lamusa. Oto jak fingerprinting urządzeń zapewnia trwałą identyfikację bez jakiegokolwiek magazynu danych po stronie klienta.
Plik cookie odchodzi do lamusa. Intelligent Tracking Prevention (ITP) w Safari ogranicza czas życia plików cookie do 7 dni. Enhanced Tracking Protection w Firefoksie całkowicie blokuje pliki cookie stron trzecich. Privacy Sandbox w Chrome wycofuje pliki cookie stron trzecich. Wymogi zgody wynikające z RODO sprawiają, że użytkownicy coraz częściej odrzucają banery cookie.
Dla zapobiegania oszustwom to problem. Jeśli nie potrafisz trwale identyfikować urządzeń, nie możesz śledzić powracających sprawców, wykrywać multikont ani łączyć ze sobą podejrzanych sesji. Fingerprinting urządzeń rozwiązuje ten problem, identyfikując urządzenia po ich cechach technicznych — bez plików cookie, bez localStorage, bez jakiegokolwiek magazynu danych po stronie klienta.
Kategorie sygnałów
Fingerprinting pasywny (bez potrzeby JavaScriptu)
Zanim Twoja strona się jeszcze załaduje, przeglądarka ujawnia informacje poprzez sygnały na poziomie sieci:
Fingerprinting TLS (JA4). Komunikat TLS Client Hello zawiera zestawy szyfrów, rozszerzenia, krzywe eliptyczne i algorytmy podpisu. Używamy hashowania JA4 — nowoczesnego następcy JA3 o lepszej granularności.
Analiza stosu TCP/IP. Rozmiar okna TCP, wartości TTL i ustawienia MSS różnią się między systemami operacyjnymi. Linux, Windows i macOS mają charakterystyczne konfiguracje stosu TCP.
Analiza nagłówków HTTP. Kolejność nagłówków, wartości Accept-Language i preferencje połączenia różnią się między przeglądarkami.
Fingerprinting aktywny (JavaScript po stronie klienta)
Fingerprinting canvas. Rysujemy starannie zaprojektowaną scenę — konkretny tekst, kształty geometryczne i gradienty. Różne procesory graficzne renderują ją z subtelnymi różnicami na poziomie pikseli, wynikającymi z antyaliasingu, renderowania subpikselowego i wariacji w mieszaniu kolorów. Hashujemy dane pikseli.
Fingerprinting WebGL. WebGL ujawnia ciągi znaków dostawcy/renderera GPU, maksymalne rozmiary tekstur, obsługiwane rozszerzenia i możliwości shaderów. Dane te silnie identyfikują model GPU i wersję sterownika.
Fingerprinting AudioContext. Generujemy sygnał testowy i analizujemy sposób jego przetwarzania. Różny sprzęt audio produkuje mierzalnie odmienny wynik ze względu na różnice w precyzji zmiennoprzecinkowej.
Enumeracja czcionek. Dostępne czcionki systemowe różnią się w zależności od systemu operacyjnego, pakietu językowego i zainstalowanego oprogramowania. Testujemy około 300 diagnostycznych czcionek przy użyciu technik pomiaru na canvasie.
Właściwości Navigator. Liczba rdzeni CPU, pamięć urządzenia, platforma, język, strefa czasowa, rozdzielczość ekranu, głębia kolorów, możliwości wskaźnika i dotyku.
Analiza entropii
Nie wszystkie sygnały mają jednakową wagę. Mierzymy entropię każdego z nich:
| Kategoria sygnału | Przybliżona entropia |
|---|---|
| Canvas + WebGL łącznie | ~18 bitów |
| Lista czcionek | ~8 bitów |
| AudioContext | ~5 bitów |
| Właściwości Navigator | ~7 bitów |
| Fingerprint TLS | ~6 bitów |
| Ekran + wyświetlacz | ~4 bity |
| Strefa czasowa + język | ~3 bity |
Łącznie nasze ponad 130 sygnałów daje około 50+ bitów entropii — wystarczająco, by jednoznacznie zidentyfikować ponad kwadrylion różnych urządzeń.
Od sygnałów do stabilnego hasha
Zebranie surowych sygnałów to dopiero połowa problemu. Aktualizacje przeglądarki zmieniają ciągi user agent. Aktualizacje sterowników modyfikują parametry WebGL. Instalacje czcionek zmieniają listę czcionek.
Rozmyte dopasowanie
Zamiast wymagać dokładnych dopasowań, stosujemy algorytm rozmytego dopasowania, który waży sygnały według ich stabilności i entropii. Sygnały stabilne (canvas, model GPU) mają większą wagę niż sygnały zmienne (user agent, rozdzielczość ekranu).
Generowanie kandydatów wykorzystuje locality-sensitive hashing (LSH) na najbardziej stabilnych sygnałach, aby wyłonić potencjalne dopasowania. Ocena podobieństwa oblicza ważony wynik dla wszystkich kategorii sygnałów, skalibrowany tak, by zwykłe zmiany urządzenia nie zmieniały identyfikatora odwiedzającego, a rzeczywiste zmiany urządzenia — owszem.
Pozwala to osiągnąć 99,5% dokładności — poprawne rozpoznawanie powracających odwiedzających mimo aktualizacji przeglądarki, czyszczenia plików cookie, trybu incognito i zmiany przeglądarki.
Architektura chroniąca prywatność
Przetwarzanie po stronie serwera. Całe obliczanie fingerprintu odbywa się na naszych serwerach. Agent po stronie klienta zbiera surowe sygnały, ale nie oblicza ani nie przechowuje hasha fingerprintu.
Brak przechowywania danych osobowych (PII). Przechowujemy hashe fingerprintów, a nie surowe sygnały. Hash jest funkcją jednokierunkową.
Rezydencja danych. Dane klientów z UE są przetwarzane i przechowywane w centrach danych w UE. Artykuł 6 ust. 1 lit. f) RODO obejmuje zapobieganie oszustwom jako prawnie uzasadniony interes.
Identyfikacja międzyprzeglądarkowa
Najtrudniejszym wyzwaniem jest identyfikacja tego samego urządzenia w różnych przeglądarkach. Opieramy się na sygnałach niezależnych od przeglądarki: sprzęcie GPU, cechach ekranu, strefie czasowej, ustawieniach języka, zainstalowanych czcionkach (na poziomie systemu operacyjnego) i cechach stosu TCP/IP.
Dokładność łączenia międzyprzeglądarkowego wynosi około 94% — niżej niż w przypadku identyfikacji w obrębie tej samej przeglądarki, ale wystarczająco, by wykrywać multikonta w różnych przeglądarkach na tym samym urządzeniu.
Integracja
Dodanie fingerprintingu urządzeń zajmuje trzy linie kodu. Agent ładuje się asynchronicznie, zbiera sygnały w mniej niż 50 ms i przesyła je do naszego API. Odpowiedź serwera zawiera identyfikator odwiedzającego, wskaźnik pewności oraz wszystkie 24 Smart Signals.