System identyfikacji TRACIO generuje stabilny identyfikator odwiedzającego na podstawie ponad 130 sygnałów przeglądarki. Identyfikator jest zachowywany między sesjami, w trybie incognito, przy zmianach VPN oraz po wyczyszczeniu plików cookie. Ta strona opisuje kompletny proces identyfikacji.
Klient zbiera ponad 130 różnych sygnałów przeglądarki w 10 kategoriach. Każdy sygnał bada inny aspekt przeglądarki i urządzenia — od cech sprzętowych po zachowanie renderowania.
| Grupa | Sygnały | Stabilność | Przykłady |
|---|---|---|---|
| Sprzęt | 12 | Bardzo wys. | Rozdzielczość ekranu, pamięć urządzenia, równoległość sprzętowa, obsługa dotyku |
| Renderowanie | 9 | Wysoka | Fingerprint canvas (tekst + geometria), renderer WebGL, przetwarzanie audio |
| Czcionki | 5 | Wysoka | Dostępne czcionki systemowe (69 rodzin przetestowanych), preferencje czcionek, renderowanie MathML |
| Platforma | 25 | Średnia | User-Agent, właściwości navigatora, strefa czasowa, język, dostawca |
| Silnik CSS | 10 | Średnia | Odpowiedzi media query (schemat kolorów, HDR, ograniczony ruch, wymuszone kolory) |
| Pamięć | 10 | Średnia | Obsługa cookie, localStorage, sessionStorage, limit pamięci |
| WebGL | 9 | Wysoka | Dostawca GPU, renderer (odmaskowany), precyzja shaderów, obsługa rozszerzeń |
| Sieć | 3 | Niska | RTT połączenia, sonda TURN, wersja aplikacji |
| Wskaźniki botów | 15 | Nd. | Flaga webdriver, frameworki automatyzacji, długość eval, znaczniki headless |
| Niestandardowe | 14 | Zmienna | Fingerprint matematyczny, funkcje WASM, wykrywanie architektury |
Nie wszystkie sygnały są równie przydatne do identyfikacji. Sygnały są klasyfikowane według stabilności:
Poziom 1 (Zamrożony): Sygnały sprzętowe i renderowania, które prawie nigdy się nie zmieniają. Fingerprint canvas, renderer WebGL, fingerprint audio, parametry GPU, enumeracja czcionek, operacje matematyczne, bajt architektury.
Poziom 2 (Częściowo stabilny): Sygnały, które zmieniają się wraz z aktualizacjami przeglądarki lub zmianami konfiguracji. User-Agent, Client Hints, wtyczki, media query CSS, możliwości pamięci.
Poziom 3 (Zmienny): Sygnały, które zmieniają się często. Rozdzielczość ekranu (zmiana monitora), strefa czasowa (podróże), preferencje językowe, właściwości połączenia.
Identyfikator odwiedzającego jest obliczany za pomocą trójwarstwowego systemu haszowania, który równoważy stabilność z rozszerzalnością:
Visitor ID = [Tier1Hash][Tier2Hash][Tier3Hash] 20 chars 10 chars 10 chars ──────── ──────── ──────── base62 base62 base62Poziom 1 używa wyłącznie zamrożonych sygnałów, które są nieodłącznie związane ze sprzętem i silnikiem renderowania. Sygnały te zmieniają się tylko wtedy, gdy użytkownik przełącza się na inne fizyczne urządzenie lub dokonuje istotnych zmian sprzętowych.
Uwzględnione sygnały: Hash fingerprintu canvas, renderer WebGL (odmaskowany), dostawca WebGL (odmaskowany), fingerprint audio, hash enumeracji czcionek, hash parametrów WebGL, hash operacji matematycznych, bajt architektury (ARM vs x86).
Algorytm:
key1=value1|key2=value2|... (klucze posortowane alfabetycznie)Poziom 1 jest celowo zamrożony. Do poziomu 1 nigdy nie są dodawane nowe sygnały, co zapewnia, że rdzeń tożsamości pozostaje stabilny między aktualizacjami serwera.
Poziom 2 przechwytuje środowisko przeglądarki i systemu operacyjnego. Sygnały te zmieniają się, gdy użytkownik aktualizuje przeglądarkę, instaluje rozszerzenia lub modyfikuje ustawienia systemowe.
Uwzględnione sygnały: Dane User-Agent, Client Hints (marki, platforma, architektura), właściwości navigatora (dostawca, platforma, języki), lista wtyczek, głębia kolorów ekranu, pamięć urządzenia, równoległość sprzętowa.
Poziom 3 przechwytuje zmienne sygnały, które mogą się zmieniać między sesjami. Są one wykorzystywane do oceny pewności i dopasowywania rozmytego, ale nie wpływają na podstawową tożsamość.
Uwzględnione sygnały: Rozdzielczość ekranu, strefa czasowa, język, blokery DOM, możliwości pamięci, odpowiedzi media query CSS, właściwości połączenia.
Każdy poziom jest haszowany za pomocą MurmurHash3-x64-128, szybkiej, niekryptograficznej funkcji haszującej, która generuje 128-bitowe wyjście. Algorytm:
MurmurHash3 zapewnia doskonały rozkład (każdy bit danych wejściowych wpływa na każdy bit wyjścia) i jest wystarczająco szybki do obliczeń w czasie rzeczywistym. Nie jest kryptograficznie bezpieczny, ale nie jest to wymagane do haszowania fingerprintów.
Input: "canvas=abc123|webgl_renderer=ANGLE|audio=0.04852" ↓ MurmurHash3-x64-128Output: 0x7f4a8c2d1e3b5f6a 0x9d8c7b6a5e4f3d2c ↓ base62 encodeResult: "X7fh2Hg9LkMn3pQr5tBv"Wskaźnik pewności (od 0,0 do 1,0) wskazuje, jak bardzo system jest pewien identyfikacji odwiedzającego:
Gdy plik cookie _vid_t pasuje do znanego odwiedzającego, pewność jest ustawiana na 1.0. Cookie zawiera UID odwiedzającego, który serwer weryfikuje względem swoich rekordów. Jest to najszybsza i najbardziej niezawodna ścieżka identyfikacji.
Nowi odwiedzający bez wcześniejszego rekordu otrzymują wskaźnik pewności 0.90. Nie istnieje ryzyko błędnego dopasowania, ponieważ nie ma istniejących rekordów do porównania.
Dla powracających odwiedzających bez dopasowania cookie system oblicza pewność na podstawie:
Ważenie częstotliwości sygnałów (IDF): Sygnały, które są bardziej unikalne w skali globalnej populacji, otrzymują wyższą wagę. Rzadki renderer WebGL jest bardziej identyfikujący niż powszechna rozdzielczość ekranu.
Dopasowywanie rozmyte: System porównuje bieżący fingerprint z zapisanymi fingerprintami przy użyciu odległości Hamminga na poziomie bitów. Sygnały są grupowane według poziomów, a wynik dopasowania każdego poziomu jest ważony niezależnie.
Spójność historyczna: Jeśli sygnały odwiedzającego były stabilne przez wiele wizyt, pewność wzrasta. Jeśli sygnały często się wahają, pewność maleje.
| Scenariusz | Typowy wynik | Wyjaśnienie |
|---|---|---|
| Dopasowanie cookie | 1.000 | UID cookie _vid_t zweryfikowany po stronie serwera |
| Pierwsza wizyta | 0.900 | Brak wcześniejszych rekordów do porównania |
| Silne dopasowanie fingerprintu | 0.990–0.999 | Wszystkie sygnały poziomu 1 pasują, większość poziomu 2 |
| Częściowe dopasowanie (aktualizacja przeglądarki) | 0.950–0.989 | Poziom 1 pasuje, poziom 2 zmieniony (nowy UA) |
| Słabe dopasowanie (istotne zmiany) | 0.850–0.949 | Niektóre sygnały poziomu 1 uległy zmianie |
| Niejednoznaczne | 0.500–0.849 | Wiele możliwych dopasowań w bazie danych |
TRACIO używa pliku cookie first-party (_vid_t), aby utrzymać tożsamość odwiedzającego między sesjami:
_vid_tSameSite=Lax oraz Secure przy HTTPS (nie HttpOnly — agent odczytuje go po stronie klienta)Cookie jest wystawiane zarówno po stronie serwera (poprzez nagłówek odpowiedzi Set-Cookie), jak i po stronie klienta przez agenta, a UID jest dodatkowo kopiowany do localStorage jako rozwiązanie zapasowe, gdy pliki cookie są zablokowane.
Serwer próbuje ustawić cookie na coraz szerszych zakresach domen:
app.example.com → example.com → comUżywana jest najszersza domena, na której udaje się pomyślnie ustawić cookie. Zapewnia to zachowanie cookie w obrębie subdomen.
TRACIO może zidentyfikować tę samą osobę w różnych przeglądarkach na tym samym urządzeniu, gdy sygnały poziomu 1 generują pasujące hasze. Ponieważ poziom 1 opiera się na cechach sprzętu i renderowania (canvas, WebGL, audio, czcionki), sygnały te są często identyczne w przeglądarkach opartych na Chromium na tej samej maszynie i tracą zgodność między różnymi silnikami (Chromium vs Firefox vs Safari). Dopasowanie odwiedzającego z komputera do odwiedzającego z urządzenia mobilnego nie jest oczekiwane — powierzchnie sprzętu i renderowania różnią się.
Dopasowywanie międzyprzeglądarkowe jest z natury operacją o niższej pewności i jest tak traktowane w ocenie.