Система идентификации 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 | Переменная | Math-фингерпринт, возможности 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). Сопоставление настольного посетителя с мобильным не ожидается — поверхности оборудования и рендеринга различаются.
Межбраузерное сопоставление по своей природе является операцией с более низкой уверенностью и трактуется в оценке соответственно.