TRACIO je identifikační systém typu klient–server. Klient sbírá signály prohlížeče a odesílá je na server, který vypočítá stabilní identifikátor návštěvníka, spustí detekční algoritmy a vrátí obohacené výsledky. Tato část vysvětluje každou fázi celého procesu.
Browser TRACIO Cloud | | |-- Tracio.init({ publicKey }) ---------> | (init, no network) | | |-- tracio.getResult() ----------------> | | 1. Collect 130+ browser signals | | 2. Encrypt (XOR + deflate + B64) | | 3. POST to ingress endpoint | | | | |-- Decrypt & extract signals | |-- Compute visitor ID (MurmurHash3-128) | |-- Run bot detection (weighted scoring) | |-- Run smart signals (server-side enrichment) | |-- Run IP intelligence (VPN/proxy/Tor) | |-- Store visit event | | |<-- JSON response ------------------- | | visitorId, confidence, | | bot detection, smart signals | | | |-- Store visitor cookie (_vid_t) -----> | (365-day persistence)Když je zavolána metoda tracio.getResult(), klient sesbírá více než 130 různých signálů prohlížeče uspořádaných do úrovní (tiers). Sběr využívá vícefázový proces s Web Workery a sdílenými iframy kvůli výkonu.
| Kategorie | Počet signálů | Příklady |
|---|---|---|
| Canvas & WebGL | 9 | Canvas fingerprint, WebGL renderer, parametry WebGL, WebGPU |
| Audio | 3 | AudioContext fingerprint, base latency, DRM timing |
| Písma & rendering | 10 | Detekce písem, nastavení písem, MathML, vykreslování emoji |
| Navigator & platforma | 25 | User-Agent, jazyky, obrazovka, hardware concurrency, časové pásmo |
| Úložiště & cookies | 10 | localStorage, sessionStorage, cookies, storage quota |
| CSS & media queries | 10 | Barevné schéma, HDR, reduced motion, forced colors |
| Síť & WebRTC | 3 | TURN probe, connection RTT, verze aplikace |
| Bot detection | 15 | Webdriver flag, automatizační frameworky, eval length |
| Tamper detection | 8 | Introspekce property getterů, prototypové řetězce, integrita nativních funkcí |
| Custom Extensions | 14 | Math fingerprint, detekce architektury, funkce WASM |
Proces sběru probíhá ve čtyřech fázích, aby se minimalizovalo blokování hlavního vlákna:
Fáze 1 (okamžitá): Signály s vysokou prioritou, které lze sesbírat rychle (vlastnosti navigatoru, obrazovka, časové pásmo). Zde se také spouští TURN probe, protože běží souběžně.
Fáze 2 (idle callback): Synchronní signály, které těží z období nečinnosti (CSS media queries, storage probes, testy cookies).
Fáze 3 (async): Signály vyžadující asynchronní API nebo rendering (canvas, WebGL, audio fingerprint, detekce písem, vykreslování emoji).
Web Worker: Izolovaný sběr signálů ve vyhrazeném vlákně (detekce funkcí WASM, doNotTrack).
Sdílený skrytý iframe je vytvořen jednou a znovu použit více kolektory (emoji, MathML, systémové barvy, písma, screen frame), aby se předešlo režii vytváření samostatných iframů pro každý signál.
Každý signál má konzistentní strukturu:
interface Signal<T> { s: number // Status code v: T // Value (when successful)}Stavové kódy:
| Kód | Význam |
|---|---|
0 | Úspěch |
-1 | Nedostupné (vlastnost undefined) |
-2 | Sekundární kontrola selhala |
-3 | Neočekávané chování |
-4 | Timeout |
-5 | Zakázáno |
-6 | Blokováno CSP |
-7 | Bezpečnostní chyba |
Sesbírané signály jsou serializovány do JSON a poté před přenosem zašifrovány a komprimovány:
Serializace do JSON: Všechny hodnoty signálů jsou zabaleny do objektu JSON s klíči podle signálu, plus metadatová pole (c pro API klíč, t pro tag, lid pro linked ID).
Komprese: Pokud payload přesáhne 1024 bajtů, je zkomprimován pomocí CompressionStream("deflate-raw").
XOR šifrování: Payload je zabalen do šifrovací obálky:
Kódování Base64: Šifrovaný payload je zakódován ve formátu Base64url a odeslán jako tělo POST požadavku.
Požadavek je odeslán na ingress endpoint s query parametry pro verzi klienta a API klíč. Zahrnují se CORS credentials, aby se odeslaly first-party cookies.
Server přijme šifrovaný payload a zpracuje jej prostřednictvím několika subsystémů:
Server dekóduje XOR obálku, v případě potřeby dekomprimuje a parsuje data signálů ve formátu JSON. Stavový kód a hodnota každého signálu jsou extrahovány a validovány.
ID návštěvníka se vypočítá pomocí přístupu víceúrovňového hashování (tiered hashing, V3):
Tier 1 (Frozen): 20 base62 characters - Stable hardware signals that rarely change - Canvas, WebGL renderer, audio fingerprint, fonts - Provides long-term visitor identity
Tier 2 (Semi-stable): 10 base62 characters - Signals that change with browser updates - User-Agent data, Client Hints, plugins - Extensible without breaking Tier 1
Tier 3 (Volatile): 10 base62 characters - Signals that change frequently - Screen resolution, timezone, language - Used for confidence scoring, not identityKaždá úroveň extrahuje své přidělené signály, sestaví kanonický řetězec a zahashuje jej pomocí MurmurHash3-x64-128. Tři hashe jednotlivých úrovní se zřetězí a zakódují do base62, čímž vznikne finální ID návštěvníka.
Skóre jistoty (confidence, 0.0 až 1.0) udává, jak jistě systém tohoto návštěvníka správně identifikoval:
_vid_t shoduje, jistota je maximální.Engine pro detekci botů spouští několik detektorů, jejichž vážené výstupy se kombinují do bot skóre (prahové hodnoty: bot ≥ 0,70, suspicious ≥ 0,30; signál typu hard-fail vynutí verdikt bota). Mezi přispívající detektory patří:
Obohacovací signály na straně serveru se počítají ze surových dat signálů a z IP intelligence. Patří sem detekce VPN/proxy/Tor, IP geolokace, analýza manipulace s prohlížečem (browser tampering) a skórování podezřelosti.
Subsystém IP intelligence poskytuje:
Server vrátí odpověď ve formátu JSON obsahující:
{ "visitorId": "X7fh2Hg9LkMn3pQr", "bot": { "detected": false, "confidence": 2, "reasons": [] }}Toto je výsledek, na který se tracio.getResult() v prohlížeči rozhodne (resolve). Kompletní, obohacená událost — včetně kanonického bot_result
(human / bot / uncertain), geolokace a smart signals — je
doručena na straně serveru prostřednictvím webhooků a zobrazena v
dashboardu.
Klient ukládá token návštěvníka jak do first-party cookie (platnost 365 dní, SameSite=Lax), tak do localStorage kvůli perzistenci napříč relacemi.
| Krok | Umístění | Doba trvání | Popis |
|---|---|---|---|
| 1 | Browser | ~5ms | Inicializace agenta, vytvoření sdíleného iframu |
| 2 | Browser | ~50-150ms | Sběr 130+ signálů (paralelně, vícefázově) |
| 3 | Browser | ~5ms | Zašifrování a komprese payloadu |
| 4 | Síť | ~10-50ms | POST na server |
| 5 | Server | ~5-20ms | Dešifrování, extrakce signálů, výpočet ID návštěvníka |
| 6 | Server | ~5-15ms | Spuštění bot detection a smart signals |
| 7 | Server | ~5ms | Sestavení odpovědi |
| 8 | Síť | ~10-50ms | Vrácení odpovědi JSON |
| 9 | Browser | ~1ms | Uložení cookie návštěvníka |
Celkový round-trip: Typicky 80–300 ms v závislosti na síťových podmínkách a možnostech prohlížeče.