Система ідентифікації TRACIO формує стабільний ідентифікатор відвідувача зі 130+ сигналів браузера. Ідентифікатор зберігається між сеансами, у режимі інкогніто, при зміні VPN та очищенні cookie. Ця сторінка пояснює повний конвеєр ідентифікації.
Клієнт збирає 130+ різних сигналів браузера в 10 категоріях. Кожен сигнал досліджує окремий аспект браузера та пристрою — від апаратних характеристик до поведінки рендерингу.
| Група | Сигнали | Стабільність | Приклади |
|---|---|---|---|
| Апаратура | 12 | Дуже висока | Роздільна здатність екрана, пам'ять пристрою, апаратний паралелізм, підтримка сенсорного вводу |
| Рендеринг | 9 | Висока | Canvas-відбиток (текст + геометрія), рендерер WebGL, обробка аудіо |
| Шрифти | 5 | Висока | Доступні системні шрифти (перевірено 69 родин), налаштування шрифтів, рендеринг MathML |
| Платформа | 25 | Середня | User-Agent, властивості navigator, часовий пояс, мова, постачальник |
| Рушій CSS | 10 | Середня | Відповіді медіазапитів (колірна схема, HDR, зменшений рух, примусові кольори) |
| Сховище | 10 | Середня | Підтримка cookie, localStorage, sessionStorage, квота сховища |
| WebGL | 9 | Висока | Постачальник GPU, рендерер (немаскований), точність шейдерів, підтримка розширень |
| Мережа | 3 | Низька | RTT з'єднання, TURN-проба, версія застосунку |
| Індикатори ботів | 15 | Немає | Прапорець webdriver, фреймворки автоматизації, довжина eval, headless-маркери |
| Користувацькі | 14 | Варіюється | Математичний відбиток, можливості WASM, визначення архітектури |
Не всі сигнали однаково корисні для ідентифікації. Сигнали класифікуються за стабільністю:
Рівень 1 (Заморожені): апаратні сигнали та сигнали рендерингу, які майже ніколи не змінюються. Canvas-відбиток, рендерер WebGL, аудіовідбиток, параметри GPU, перелік шрифтів, математичні операції, байт архітектури.
Рівень 2 (Напівстабільні): сигнали, що змінюються з оновленнями браузера або змінами конфігурації. User-Agent, Client Hints, плагіни, CSS-медіазапити, можливості сховища.
Рівень 3 (Мінливі): сигнали, що змінюються часто. Роздільна здатність екрана (зміна монітора), часовий пояс (подорожі), мовні налаштування, властивості з'єднання.
Ідентифікатор відвідувача обчислюється трирівневою системою хешування, яка врівноважує стабільність із розширюваністю:
Visitor ID = [Tier1Hash][Tier2Hash][Tier3Hash] 20 chars 10 chars 10 chars ──────── ──────── ──────── base62 base62 base62Рівень 1 використовує лише заморожені сигнали, властиві апаратурі та рушію рендерингу. Ці сигнали змінюються лише тоді, коли користувач переходить на інший фізичний пристрій або вносить суттєві апаратні зміни.
Включені сигнали: хеш Canvas-відбитка, рендерер WebGL (немаскований), постачальник WebGL (немаскований), аудіовідбиток, хеш переліку шрифтів, хеш параметрів WebGL, хеш математичних операцій, байт архітектури (ARM проти x86).
Алгоритм:
key1=value1|key2=value2|... (ключі відсортовані за абеткою)Рівень 1 навмисно заморожений. Нові сигнали ніколи не додаються до Рівня 1, що гарантує стабільність ядра ідентичності при оновленнях сервера.
Рівень 2 фіксує середовище браузера та ОС. Ці сигнали змінюються, коли користувач оновлює браузер, встановлює розширення або змінює системні налаштування.
Включені сигнали: дані User-Agent, Client Hints (бренди, платформа, архітектура), властивості navigator (постачальник, платформа, мови), список плагінів, глибина кольору екрана, пам'ять пристрою, апаратний паралелізм.
Рівень 3 фіксує мінливі сигнали, які можуть змінюватися між сеансами. Вони використовуються для оцінки достовірності та нечіткого зіставлення, але не впливають на ядро ідентичності.
Включені сигнали: роздільна здатність екрана, часовий пояс, мова, DOM-блокувальники, можливості сховища, відповіді CSS-медіазапитів, властивості з'єднання.
Кожен рівень хешується через MurmurHash3-x64-128 — швидкої некриптографічної хеш-функції, яка видає 128-бітний результат. Алгоритм:
MurmurHash3 забезпечує чудовий розподіл (кожен біт входу впливає на кожен біт виходу) і достатньо швидкий для обчислень у реальному часі. Він не є криптографічно захищеним, але для хешування відбитків це й не потрібно.
Input: "canvas=abc123|webgl_renderer=ANGLE|audio=0.04852" ↓ MurmurHash3-x64-128Output: 0x7f4a8c2d1e3b5f6a 0x9d8c7b6a5e4f3d2c ↓ base62 encodeResult: "X7fh2Hg9LkMn3pQr5tBv"Оцінка достовірності (від 0.0 до 1.0) відображає, наскільки система впевнена в ідентифікації відвідувача:
Коли cookie _vid_t збігається з відомим відвідувачем, достовірність встановлюється на 1.0. Cookie містить UID відвідувача, який сервер перевіряє за своїми записами. Це найшвидший і найнадійніший шлях ідентифікації.
Нові відвідувачі без попереднього запису отримують оцінку достовірності 0.90. Ризику хибного збігу немає, оскільки немає наявних записів для порівняння.
Для повторних відвідувачів без збігу за cookie система обчислює достовірність на основі:
Зважування за частотою сигналів (IDF): сигнали, які є унікальнішими серед світової сукупності, отримують більшу вагу. Рідкісний рендерер WebGL більш ідентифікаційний, ніж поширена роздільна здатність екрана.
Нечітке зіставлення: система порівнює поточний відбиток зі збереженими за відстанню Геммінга на бітовому рівні. Сигнали групуються за рівнями, і оцінка збігу кожного рівня зважується незалежно.
Історична узгодженість: якщо сигнали відвідувача були стабільними протягом кількох візитів, достовірність зростає. Якщо сигнали часто коливаються, достовірність знижується.
| Сценарій | Типова оцінка | Пояснення |
|---|---|---|
| Збіг за cookie | 1.000 | UID cookie _vid_t перевірено на боці сервера |
| Перший візит | 0.900 | Немає попередніх записів для порівняння |
| Сильний збіг відбитка | 0.990–0.999 | Усі сигнали Рівня 1 збігаються, більшість Рівня 2 |
| Частковий збіг (оновлення браузера) | 0.950–0.989 | Рівень 1 збігається, Рівень 2 змінився (новий UA) |
| Слабкий збіг (суттєві зміни) | 0.850–0.949 | Деякі сигнали Рівня 1 змінилися |
| Неоднозначний | 0.500–0.849 | Кілька можливих збігів у базі даних |
TRACIO використовує first-party cookie (_vid_t) для підтримання ідентичності відвідувача між сеансами:
_vid_tSameSite=Lax та Secure на HTTPS (не HttpOnly — агент читає його на боці клієнта)Cookie видається як на боці сервера (через заголовок відповіді Set-Cookie), так і на боці клієнта агентом, а UID також дублюється в localStorage як запасний варіант, коли cookie заблоковані.
Сервер намагається встановити cookie на послідовно ширших доменних областях:
app.example.com → example.com → comВикористовується найширший домен, для якого cookie вдалося встановити. Це гарантує, що cookie зберігається між піддоменами.
TRACIO може ідентифікувати одну й ту саму людину в різних браузерах на одному пристрої, коли сигнали Рівня 1 дають однакові хеші. Оскільки Рівень 1 спирається на апаратні характеристики та характеристики рендерингу (canvas, WebGL, аудіо, шрифти), ці сигнали часто ідентичні для браузерів на основі Chromium на одній машині й розходяться між різними рушіями (Chromium проти Firefox проти Safari). Зіставлення відвідувача з комп'ютера з відвідувачем із мобільного пристрою не очікується — поверхні апаратури та рендерингу відрізняються.
Зіставлення між браузерами за своєю природою є операцією з нижчою достовірністю й обробляється відповідно в оцінці.