Какие сигналы переживают обновления браузеров? Анализ стабильности
Мы проанализировали стабильность сигналов на 50 обновлениях Chrome, Firefox и Safari. Вот самые стабильные и самые нестабильные сигналы фингерпринтинга.
Обновления браузеров — естественный враг фингерпринтинга устройств. Каждые 4–6 недель Chrome, Firefox и Safari выпускают новые версии, которые способны менять значения сигналов — изменять строки user-agent, поведение рендеринга, добавлять или удалять API. Как отмечается в руководстве W3C по фингерпринтингу, браузеры активно работают над сокращением поверхности, доступной для фингерпринтинга. Для систем фингерпринтинга, которые относятся ко всем сигналам одинаково, каждое обновление — это потенциальный разрыв идентичности для миллионов посетителей.
Мы провели комплексный анализ стабильности на 50 обновлениях браузеров, чтобы ответить на фундаментальный вопрос: на какие сигналы можно полагаться, а какие вас подведут?
Методология
Мы инструментировали 200 физических устройств на 5 операционных системах (Windows 10, Windows 11, macOS Ventura, macOS Sonoma, Ubuntu 22.04) и 3 браузерах (Chrome, Firefox, Safari). Каждое устройство ежедневно выполняло автоматический сбор сигналов на протяжении 14 месяцев, охватив 50 крупных обновлений версий браузеров: 24 релиза Chrome, 16 релизов Firefox и 10 релизов Safari.
Для каждого сигнала мы отслеживали: как часто менялось значение, коррелировало ли изменение с обновлением браузера или внешним фактором (обновление драйвера, патч ОС), и масштаб изменения (полная замена значения против незначительной вариации).
Уровни стабильности
Уровень 1: Незыблемые (стабильность 99,5%+)
Эти сигналы менялись только при смене физического оборудования или обновлении драйверов — никогда из-за одних лишь обновлений браузера.
Число аппаратных потоков (navigator.hardwareConcurrency): стабильность 99,97%. Изменилось лишь на 1 устройстве, где обновление BIOS повлияло на hyperthreading. Объём памяти устройства (navigator.deviceMemory): стабильность 99,98%. Одно устройство во время исследования проапгрейдили с 8 ГБ до 16 ГБ. Разрешение экрана и глубина цвета: стабильность 99,92%. Изменения коррелировали со сменой мониторов и событиями подключения док-станций. Максимальный размер текстуры WebGL: стабильность 99,99%. Ноль изменений, связанных с браузером. Изменился один раз на устройстве, получившем обновление драйвера NVIDIA. Частота дискретизации аудио: стабильность 100%. Ноль изменений на всех 200 устройствах и 50 обновлениях. Это самый стабильный сигнал из тех, что мы отслеживаем.
Уровень 2: В основном стабильные (95–99,5%)
Эти сигналы иногда меняются при обновлениях браузера, но остаются стабильными в большинстве релизов.
Canvas 2D Fingerprint: стабильность 97,8%. Изменения произошли в Chrome 118 (обновление движка рендеринга шрифтов), Chrome 122 (изменение субпиксельного сглаживания) и Firefox 121 (обновление раскладки текста). Каждое изменение затронуло все устройства на этом браузере одновременно — детектируемый паттерн, который мы обрабатываем сопоставлением с учётом версии браузера. Строка WebGL Renderer: стабильность 98,1%. Chrome периодически переформатирует строку обёртки ANGLE. Информация о самом GPU не меняется, но её строковое представление сдвигается. Мы извлекаем модель GPU из строки, а не хешируем строку напрямую. Список шрифтов: стабильность 96,4%. Обновления ОС иногда добавляют или удаляют системные шрифты. Обновления браузера редко влияют на перечисление шрифтов, но Chrome 120 изменил порядок, в котором сообщаются шрифты, что сломало фингерпринтинг шрифтов на основе хешей. Мы используем сравнение по множествам (сходство множеств), а не упорядоченное хеширование.
Уровень 3: Умеренная стабильность (80–95%)
Эти сигналы меняются с заметной частотой, но между изменениями всё же дают полезную идентификационную ценность.
Установленные плагины: стабильность 89,2%. Продолжающееся сокращение Chrome массива плагинов (navigator.plugins) в некоторых контекстах полностью убрало видимость плагинов. Firefox сохранил перечисление плагинов. Safari ограничил его стандартным набором. Детекция CSS-возможностей: стабильность 91,7%. С каждым релизом браузера добавляются новые CSS-возможности, что меняет набор возможностей, обнаруживаемых нашим CSS-зондированием. Мы придаём новым возможностям меньший вес, чем устоявшимся, чтобы снизить влияние. Поддержка касаний: стабильность 93,1%. Десктопные браузеры иногда меняют сообщаемую поддержку касаний, когда Chrome корректирует детекцию эмуляции устройств.
Уровень 4: Нестабильные (<80%)
Эти сигналы меняются часто и никогда не должны быть основными якорями идентификации.
Строка User Agent: стабильность 42,3%. Инициатива Chrome по сокращению User-Agent несколько раз меняла формат строки. Firefox обновляет номер версии с каждым релизом. Safari регулярно модифицирует строку версии WebKit. Раньше это было основой простых систем фингерпринтинга — теперь такие системы сломаны. Тип соединения (navigator.connection): стабильность 68,4%. Меняется при переключении сети (WiFi на сотовую связь, разные сети WiFi). Battery API: стабильность 71,2%. Варьируется в зависимости от состояния заряда и доступности API в браузере. Chrome ограничил доступ к Battery API в некоторых контекстах. Доступная область экрана: стабильность 76,8%. Меняется при видимости панели задач, управлении окнами и корректировках масштабирования дисплея.
Сравнение между браузерами
Chrome — самый нестабильный браузер с точки зрения стабильности фингерпринтинга. Google активно работает над снижением возможности фингерпринтинга, а значит, обновления Chrome ломают больше сигналов, чем обновления Firefox или Safari. За период нашего исследования:
Chrome вызвал изменения сигналов в 3,2% сессий сбора. Firefox вызвал изменения сигналов в 1,8% сессий сбора. Safari вызвал изменения сигналов в 1,1% сессий сбора.
Более низкая нестабильность Safari отчасти объясняется тем, что Apple выпускает меньше релизов в год, а отчасти тем, что меры Safari против фингерпринтинга (Intelligent Tracking Prevention) работают на сетевом уровне, а не меняют возвращаемые значения API.
Практические рекомендации
На основе этого анализа мы даём пять рекомендаций для продакшн-систем фингерпринтинга:
Никогда не используйте user-agent как якорь идентификации. Это наименее стабильный различающий сигнал. Используйте его только для детекции браузера и оценки уверенности уровня 3.
Разделяйте аппаратные и программные сигналы. Аппаратные сигналы (GPU, экран, аудио) в 40 раз стабильнее программных (user agent, плагины, CSS-возможности). Взвешивайте их соответственно.
Используйте сравнение по множествам для перечислимых сигналов. Списки шрифтов, списки плагинов и результаты детекции возможностей следует сравнивать через сходство множеств или аналогичные метрики расстояния между множествами, а не упорядоченным хешированием. Изменения порядка встречаются часто; изменения содержимого — редко.
Внедряйте сопоставление с учётом версии браузера. Когда Chrome 118 меняет рендеринг canvas сразу для всех пользователей Chrome, ваша система должна распознать это как обновление браузера, а не массовый разрыв идентичности. Отслеживайте версии браузеров и применяйте допуски сопоставления, специфичные для версии.
Непрерывно мониторьте стабильность сигналов. Наши проценты стабильности основаны на исторических данных. Будущие обновления браузеров могут изменить профиль стабильности любого сигнала. Мы ведём непрерывный мониторинг и автоматически корректируем веса сигналов при изменении стабильности.
Влияние на tracio.ai
Наша многоуровневая архитектура идентификации V3 напрямую отражает этот анализ стабильности. Сигналы уровня 1 (аппаратные) несут 60% веса. Сигналы уровня 2 (рендеринг, шрифты) несут 30% веса. Сигналы уровня 3 (метаданные браузера, соединение) несут 10% веса. Такое взвешивание гарантирует, что идентификацию определяют самые стабильные сигналы, тогда как нестабильные вносят вклад в оценку уверенности, не вызывая разрывов идентичности.
Результат: 99,5% стабильности идентификации на 50 обновлениях браузеров против 69% у систем, использующих плоский фингерпринтинг на основе хешей. Разница не в алгоритмической изощрённости — она в эмпирическом анализе сигналов, применённом к архитектурным решениям.