Sistemul de identificare al TRACIO generează un identificator stabil al vizitatorului din peste 130 de semnale de browser. Identificatorul persistă între sesiuni, în modul incognito, la schimbarea VPN-ului și la ștergerea cookie-urilor. Această pagină explică întregul flux de identificare.
Clientul colectează peste 130 de semnale distincte de browser în 10 categorii. Fiecare semnal sondează un alt aspect al browserului și al dispozitivului, de la caracteristicile hardware până la comportamentul de randare.
| Grup | Semnale | Stabilitate | Exemple |
|---|---|---|---|
| Hardware | 12 | Foarte mare | Rezoluția ecranului, memoria dispozitivului, paralelismul hardware, suport touch |
| Randare | 9 | Mare | Fingerprint canvas (text + geometrie), renderer WebGL, procesare audio |
| Fonturi | 5 | Mare | Fonturi de sistem disponibile (69 de familii testate), preferințe de font, randare MathML |
| Platformă | 25 | Mediu | User-Agent, proprietăți navigator, fus orar, limbă, vendor |
| Motor CSS | 10 | Mediu | Răspunsuri media query (schema de culori, HDR, reduced motion, forced colors) |
| Stocare | 10 | Mediu | Suport cookie, localStorage, sessionStorage, cotă de stocare |
| WebGL | 9 | Mare | Vendor GPU, renderer (unmasked), precizie shader, suport pentru extensii |
| Rețea | 3 | Scăzut | RTT conexiune, sondă TURN, versiune aplicație |
| Indicatori bot | 15 | N/A | Flag webdriver, framework-uri de automatizare, lungime eval, markeri headless |
| Personalizat | 14 | Variază | Fingerprint math, funcții WASM, detectare arhitectură |
Nu toate semnalele sunt la fel de utile pentru identificare. Semnalele sunt clasificate după stabilitate:
Nivelul 1 (Înghețat): Semnale hardware și de randare care aproape niciodată nu se schimbă. Fingerprint canvas, renderer WebGL, fingerprint audio, parametri GPU, enumerare fonturi, operații matematice, octet de arhitectură.
Nivelul 2 (Semi-stabil): Semnale care se schimbă odată cu actualizările de browser sau modificările de configurație. User-Agent, Client Hints, plugin-uri, media query CSS, capabilități de stocare.
Nivelul 3 (Volatil): Semnale care se schimbă frecvent. Rezoluția ecranului (schimbarea monitorului), fusul orar (călătorii), preferințele de limbă, proprietățile conexiunii.
ID-ul vizitatorului este calculat printr-un sistem de hashing pe trei niveluri, care echilibrează stabilitatea cu extensibilitatea:
Visitor ID = [Tier1Hash][Tier2Hash][Tier3Hash] 20 chars 10 chars 10 chars ──────── ──────── ──────── base62 base62 base62Nivelul 1 folosește exclusiv semnale înghețate, inerente hardware-ului și motorului de randare. Aceste semnale se schimbă doar când utilizatorul trece la un alt dispozitiv fizic sau face modificări hardware semnificative.
Semnale incluse: hash-ul fingerprint-ului canvas, renderer WebGL (unmasked), vendor WebGL (unmasked), fingerprint audio, hash-ul enumerării fonturilor, hash-ul parametrilor WebGL, hash-ul operațiilor matematice, octetul de arhitectură (ARM vs. x86).
Algoritm:
key1=value1|key2=value2|... (cheile sortate alfabetic)Nivelul 1 este înghețat în mod intenționat. Semnale noi nu se adaugă niciodată la nivelul 1, ceea ce asigură că nucleul de identitate rămâne stabil între actualizările serverului.
Nivelul 2 captează mediul browserului și al sistemului de operare. Aceste semnale se schimbă când utilizatorul își actualizează browserul, instalează extensii sau modifică setările de sistem.
Semnale incluse: date User-Agent, Client Hints (branduri, platformă, arhitectură), proprietăți navigator (vendor, platformă, limbi), lista de plugin-uri, adâncimea de culoare a ecranului, memoria dispozitivului, paralelismul hardware.
Nivelul 3 captează semnale volatile care se pot schimba între sesiuni. Acestea sunt folosite pentru scorarea de încredere și fuzzy matching, dar nu afectează identitatea de bază.
Semnale incluse: rezoluția ecranului, fusul orar, limba, blocantele DOM, capabilitățile de stocare, răspunsurile media query CSS, proprietățile conexiunii.
Fiecare nivel este hash-uit cu MurmurHash3-x64-128, o funcție de hash rapidă, non-criptografică, care produce o ieșire de 128 de biți. Algoritmul:
MurmurHash3 oferă o distribuție excelentă (fiecare bit al intrării influențează fiecare bit al ieșirii) și este suficient de rapid pentru calcule în timp real. Nu este sigur criptografic, dar acest lucru nu este necesar pentru hashing-ul de fingerprint-uri.
Input: "canvas=abc123|webgl_renderer=ANGLE|audio=0.04852" ↓ MurmurHash3-x64-128Output: 0x7f4a8c2d1e3b5f6a 0x9d8c7b6a5e4f3d2c ↓ base62 encodeResult: "X7fh2Hg9LkMn3pQr5tBv"Scorul de încredere (0.0 până la 1.0) reprezintă cât de sigur este sistemul în privința identificării vizitatorului:
Când cookie-ul _vid_t se potrivește cu un vizitator cunoscut, încrederea este setată la 1.0. Cookie-ul conține UID-ul vizitatorului, pe care serverul îl validează în raport cu înregistrările sale. Aceasta este cea mai rapidă și mai fiabilă cale de identificare.
Vizitatorii noi, fără vreo înregistrare anterioară, primesc un scor de încredere de 0.90. Nu există riscul unei potriviri false, deoarece nu există înregistrări existente cu care să se compare.
Pentru vizitatorii recurenți fără o potrivire de cookie, sistemul calculează încrederea pe baza:
Ponderare după frecvența semnalelor (IDF): Semnalele care sunt mai unice în populația globală primesc o pondere mai mare. Un renderer WebGL rar este mai identificator decât o rezoluție de ecran comună.
Fuzzy matching: Sistemul compară fingerprint-ul curent cu fingerprint-urile stocate folosind distanța Hamming la nivel de bit. Semnalele sunt grupate pe niveluri, iar scorul de potrivire al fiecărui nivel este ponderat independent.
Consistență istorică: Dacă semnalele unui vizitator au fost stabile de-a lungul mai multor vizite, încrederea crește. Dacă semnalele fluctuează frecvent, încrederea scade.
| Scenariu | Scor tipic | Explicație |
|---|---|---|
| Potrivire cookie | 1.000 | UID-ul cookie-ului _vid_t verificat pe server |
| Prima vizită | 0.900 | Nu există înregistrări anterioare de comparat |
| Potrivire puternică de fingerprint | 0.990–0.999 | Toate semnalele de nivel 1 se potrivesc, majoritatea celor de nivel 2 |
| Potrivire parțială (actualizare browser) | 0.950–0.989 | Nivelul 1 se potrivește, nivelul 2 s-a schimbat (UA nou) |
| Potrivire slabă (schimbări semnificative) | 0.850–0.949 | Unele semnale de nivel 1 s-au schimbat |
| Ambiguu | 0.500–0.849 | Mai multe potriviri posibile în baza de date |
TRACIO folosește un cookie first-party (_vid_t) pentru a menține identitatea vizitatorului între sesiuni:
_vid_tSameSite=Lax și Secure pe HTTPS (nu HttpOnly — agentul îl citește pe partea de client)Cookie-ul este emis atât pe server (prin header-ul de răspuns Set-Cookie), cât și pe client de către agent, iar UID-ul este de asemenea reflectat în localStorage ca rezervă atunci când cookie-urile sunt blocate.
Serverul încearcă să seteze cookie-ul pe domenii cu domeniu de acoperire progresiv mai larg:
app.example.com → example.com → comSe folosește cel mai larg domeniu pe care cookie-ul se setează cu succes. Astfel, cookie-ul persistă între subdomenii.
TRACIO poate identifica aceeași persoană în browsere diferite de pe același dispozitiv atunci când semnalele de nivel 1 produc hash-uri identice. Deoarece nivelul 1 se bazează pe caracteristici hardware și de randare (canvas, WebGL, audio, fonturi), aceste semnale sunt adesea identice între browserele bazate pe Chromium de pe aceeași mașină și se degradează între motoare diferite (Chromium vs. Firefox vs. Safari). Potrivirea unui vizitator desktop cu un vizitator mobil nu este de așteptat — suprafețele hardware și de randare diferă.
Potrivirea între browsere este, prin natura sa, o operație cu încredere mai scăzută și este tratată ca atare în scorare.