Фингерпринтинг устройств без cookie: как это работает
Cookie отмирают. Вот как фингерпринтинг устройств обеспечивает устойчивую идентификацию без какого-либо хранения данных на стороне клиента.
Cookie отмирают. Intelligent Tracking Prevention (ITP) в Safari ограничивает срок жизни cookie до 7 дней. Enhanced Tracking Protection в Firefox полностью блокирует сторонние cookie. Privacy Sandbox в Chrome сворачивает поддержку сторонних cookie. Требования GDPR к согласию приводят к тому, что пользователи всё чаще отклоняют cookie-баннеры.
Для защиты от фрода это проблема. Если вы не можете устойчиво идентифицировать устройства, вы не сможете отслеживать повторных нарушителей, выявлять мультиаккаунтинг или связывать подозрительные сессии между собой. Фингерпринтинг устройств решает эту задачу, идентифицируя устройства по их техническим характеристикам — без cookie, без localStorage, без какого-либо хранения данных на стороне клиента.
Категории сигналов
Пассивный фингерпринтинг (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 бита |
В сумме наши 130+ сигналов дают примерно 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% — ниже, чем при идентификации в одном браузере, но достаточно для выявления мультиаккаунтинга между браузерами на одном устройстве.
Интеграция
Добавление фингерпринтинга устройств занимает три строки кода. Агент загружается асинхронно, собирает сигналы менее чем за 50 мс и отправляет их в наш API. Ответ сервера включает идентификатор посетителя, оценку уверенности и все 24 Smart Signals.