Фингерпринтинг устройств без cookie: как это работает
Cookie отмирают. Вот как фингерпринтинг устройств обеспечивает устойчивую идентификацию, которая переживает очистку cookie, режим инкогнито и обновления браузера.
Cookie отмирают. Intelligent Tracking Prevention (ITP) в Safari ограничивает срок жизни cookie до 7 дней. Enhanced Tracking Protection в Firefox полностью блокирует сторонние cookie. Privacy Sandbox в Chrome сворачивает поддержку сторонних cookie. Требования GDPR к согласию приводят к тому, что пользователи всё чаще отклоняют cookie-баннеры.
Для защиты от фрода это проблема. Если вы не можете устойчиво идентифицировать устройства, вы не сможете отслеживать повторных нарушителей, выявлять мультиаккаунтинг или связывать подозрительные сессии между собой. Фингерпринтинг устройств решает эту задачу, идентифицируя устройства по их техническим характеристикам, а не по тому, что браузеру предлагается запомнить.
Чтобы быть точными в том, что это означает в нашем случае: Tracio не ставит сторонних cookie и не хранит ничего, что работало бы между сайтами. Мы действительно ставим одну собственную cookie, _vid_t, со сроком жизни 365 дней и зеркалим тот же непрозрачный идентификатор в localStorage. Эта cookie — ускоритель, а не сам механизм: когда она есть, совпадение мгновенное и однозначное, а когда посетитель её удаляет, заходит в режиме инкогнито или полностью блокирует хранение данных, идентификатор восстанавливается из самих сигналов устройства с чуть меньшей уверенностью. Различие важно: система, которая зависит от хранилища, теряет посетителя при его очистке, а эта — нет.
Категории сигналов
Пассивный фингерпринтинг (JavaScript не требуется)
Ещё до загрузки вашей страницы браузер раскрывает информацию через сигналы сетевого уровня:
TLS-фингерпринтинг (JA4). Сообщение TLS Client Hello содержит наборы шифров, расширения, эллиптические кривые и алгоритмы подписи. Мы используем хеширование JA4 — современную замену JA3 с более высокой детализацией.
Анализ стека TCP/IP. Размер окна TCP, значения TTL и настройки MSS различаются между операционными системами. У Linux, Windows и macOS свои характерные конфигурации TCP-стека.
Анализ HTTP-заголовков. Порядок заголовков, значения Accept-Language и предпочтения соединения различаются между браузерами.
Активный фингерпринтинг (клиентский JavaScript)
Canvas-фингерпринтинг. Мы отрисовываем тщательно спроектированную сцену — определённый текст, геометрические фигуры и градиенты. Разные GPU визуализируют её с едва заметными различиями на уровне пикселей из-за особенностей сглаживания, субпиксельного рендеринга и смешивания цветов. Мы хешируем пиксельные данные.
WebGL-фингерпринтинг. WebGL раскрывает строки вендора/рендерера GPU, максимальные размеры текстур, поддерживаемые расширения и возможности шейдеров. Эти данные надёжно идентифицируют модель GPU и версию драйвера.
AudioContext-фингерпринтинг. Мы генерируем тестовый сигнал и анализируем, как он обрабатывается. Разное аудиооборудование выдаёт измеримо разный результат из-за различий в точности вычислений с плавающей запятой.
Перечисление шрифтов. Доступные системные шрифты различаются в зависимости от ОС, языкового пакета и установленного ПО. Мы проверяем ~300 диагностических шрифтов с помощью техник измерения через canvas.
Свойства Navigator. Число ядер CPU, объём памяти устройства, платформа, язык, часовой пояс, разрешение экрана, глубина цвета, возможности указателя и сенсорного ввода.
Анализ энтропии
Не все сигналы имеют одинаковый вес. Мы измеряем энтропию каждого сигнала:
| Категория сигнала | Приблизительная энтропия |
|---|---|
| Canvas + WebGL вместе | ~18 бит |
| Список шрифтов | ~8 бит |
| AudioContext | ~5 бит |
| Свойства Navigator | ~7 бит |
| TLS-фингерпринт | ~6 бит |
| Экран + дисплей | ~4 бита |
| Часовой пояс + язык | ~3 бита |
В сумме наши 300+ сигналов дают примерно 50+ бит энтропии — этого достаточно для уникальной идентификации свыше 1 квадриллиона различных устройств.
От сигналов к стабильному хешу
Сбор сырых сигналов — это лишь половина задачи. Обновления браузера меняют строки user agent. Обновления драйверов меняют параметры WebGL. Установка шрифтов меняет их список.
Нечёткое сопоставление
Вместо того чтобы требовать точных совпадений, мы применяем алгоритм нечёткого сопоставления, который взвешивает сигналы по стабильности и энтропии. Стабильные сигналы (canvas, модель GPU) имеют больший вес, чем изменчивые (user agent, разрешение экрана).
Генерация кандидатов использует locality-sensitive hashing (LSH) по наиболее стабильным сигналам для выявления потенциальных совпадений. Оценка сходства вычисляет взвешенную оценку по всем категориям сигналов, откалиброванную так, чтобы обычные изменения устройства не меняли идентификатор посетителя, а реальная смена устройства — меняла.
Это обеспечивает точность 99,5% — корректное распознавание возвращающихся посетителей при обновлениях браузера, очистке cookie, в режиме инкогнито и при смене браузера.
Архитектура с сохранением приватности
Обработка на стороне сервера. Все вычисления фингерпринта происходят на наших серверах. Клиентский агент собирает сырые сигналы, но не вычисляет и не хранит хеш фингерпринта.
Отсутствие хранения PII. Мы храним хеши фингерпринтов, а не сырые сигналы. Хеш — это односторонняя функция.
Резидентность данных. Данные клиентов из ЕС обрабатываются и хранятся в европейских дата-центрах. Статья 6(1)(f) GDPR относит защиту от фрода к законному интересу.
Кросс-браузерная идентификация
Самая трудная задача — идентифицировать одно и то же устройство в разных браузерах. Мы опираемся на браузеронезависимые сигналы: аппаратный GPU, характеристики экрана, часовой пояс, языковые настройки, установленные шрифты (на уровне ОС) и характеристики стека TCP/IP.
Точность кросс-браузерной связки составляет около 94% — ниже, чем при идентификации в одном браузере, но достаточно для выявления мультиаккаунтинга между браузерами на одном устройстве.
Интеграция
Добавление фингерпринтинга устройств занимает три строки кода. Агент загружается асинхронно и отправляет собранные сигналы в наш API; браузер получает идентификатор посетителя и вердикт по боту. Полное серверное обогащение — 35+ Smart Signals — доставляется в ваш бэкенд через payload вебхука и Data API, поэтому детальная картина рисков никогда не проходит через клиент, где её можно было бы прочитать или подменить.