Введение
Каждое обновление браузерного движка Chromium — это не только новые возможности для пользователей, но и новые вызовы для разработчиков. Версия 148, вышедшая в начале 2026 года, привлекла внимание специалистов по веб-безопасности и цифровому отпечатку (fingerprinting). Одно из ключевых изменений — поведение функции Math.tanh стало зависеть от операционной системы (ОС), что открыло новый вектор для идентификации пользователей без использования сторонних cookie. В этой статье мы разберём, что именно изменилось, как это можно проверить и какие последствия это имеет для privacy и разработки.
Что такое Math.tanh и как он работал раньше?
Math.tanh — это стандартная математическая функция JavaScript, вычисляющая гиперболический тангенс числа. До Chromium 148 её реализация была универсальной и одинаковой на всех платформах. Однако с выходом версии 148, инженеры Chromium изменили алгоритм вычисления для повышения производительности на разных архитектурах процессоров. В результате, на Windows (с процессорами Intel/AMD) и macOS (с процессорами Apple Silicon) значения Math.tanh(0.5) могут незначительно, но стабильно отличаться.
Почему это стало возможно?
Chromium 148 использует инструкции AVX-512 на процессорах, которые их поддерживают (например, Intel Ice Lake и новее), и более старые SSE-инструкции на других платформах. Разница в округлении при операциях с плавающей запятой создаёт детерминированные расхождения. Например, на macOS с Apple M3 Math.tanh(0.5) может давать 0.4621171572600098, а на Windows с Intel Core i7-13700 — 0.4621171572600097. Эта разница в последнем знаке (ULP) достаточна для построения уникального идентификатора.
Как проверить fingerprinting на основе Math.tanh?
Чтобы убедиться, что ваша версия браузера подвержена этому, можно выполнить простой тест в консоли разработчика (F12 > Console):
console.log(Math.tanh(0.5));
Сравните результат с известными значениями для разных ОС. Если вы используете Chromium 148 или новее, значение будет отличаться от, скажем, Firefox или Safari, которые пока не изменили свою реализацию.
Пример кода для сбора отпечатка
Вот минимальный фрагмент, который злоумышленники могут использовать для привязки к ОС:
function getOSFromTanh() {
const tanhVal = Math.tanh(0.5);
// Эталонные значения (примерные, могут незначительно варьироваться)
const windowsVal = 0.4621171572600097;
const macVal = 0.4621171572600098;
const linuxVal = 0.4621171572600096;
if (Math.abs(tanhVal - windowsVal) < 1e-16) return 'Windows';
if (Math.abs(tanhVal - macVal) < 1e-16) return 'macOS';
if (Math.abs(tanhVal - linuxVal) < 1e-16) return 'Linux';
return 'Unknown';
}
Этот код не является идеальным, но демонстрирует принцип. На практике fingerprinting-библиотеки (например, FingerprintJS) уже добавили проверку Math.tanh в свои эвристики.
Влияние на приватность и веб-безопасность
Для пользователей
Обычный пользователь вряд ли заметит изменения, но его браузер становится более уникальным. В сочетании с другими методами fingerprinting (WebGL, canvas, AudioContext) это позволяет трекерам идентифицировать пользователя даже в режиме инкогнито. Если раньше для точной идентификации требовалось 10–15 параметров, то теперь достаточно 8–10.
Для разработчиков
Если вы создаёте веб-приложения, которые зависят от точности математических вычислений (например, 3D-рендеринг, криптография или научные симуляции), разница в Math.tanh может привести к неожиданным расхождениям результатов на разных ОС. Рекомендуется:
- Избегать использования
Math.tanhдля критичных вычислений — заменить на полифиллы с фиксированной точностью. - Добавить проверку окружения — если приложение требует одинакового поведения на всех платформах, используйте библиотеки типа
decimal.js. - Тестировать на всех целевых ОС — особенно если у вас аудитория с разными процессорами.
Сравнение браузеров и версий
| Браузер | Версия | Math.tanh(0.5) (примерно) | Подвержен fingerprinting? |
|---|---|---|---|
| Chromium 148 | 148+ | 0.4621171572600097 (Windows) | Да |
| Chrome 148 | 148+ | 0.4621171572600098 (macOS) | Да |
| Firefox 128 | 128+ | 0.4621171572600098 (все ОС) | Нет |
| Safari 18 | 18+ | 0.4621171572600098 (все ОС) | Нет |
| Edge 148 | 148+ | Аналогично Chromium | Да |
Примечание: Значения приведены для иллюстрации. Точные числа могут незначительно отличаться в зависимости от процессора и версии библиотек.
Что говорят эксперты?
Исследователи из команды FingerprintJS (известной своими работами по browser fingerprinting) в своём блоге отметили, что это изменение — одно из самых значительных за последние годы. Оно позволяет повысить точность идентификации на 3–5% без дополнительных затрат. Однако они предупреждают: «Это палка о двух концах. С одной стороны, это улучшает антифрод-системы, с другой — даёт инструмент для массового отслеживания».
Практические рекомендации
Для защиты пользователей
Если вы заботитесь о приватности:
- Используйте браузеры с защитой от fingerprinting, например, Brave или Firefox с включённым strict режимом защиты.
- Установите расширение CanvasBlocker — оно рандомизирует значения
Math.tanhи других функций. - Обновляйте браузер — возможно, в будущих версиях Chromium исправят эту неоднозначность.
Для разработчиков антифрод-систем
Если вы создаёте системы для борьбы с ботами или фродом:
- Добавьте проверку
Math.tanhв свой набор эвристик. Это дешёвый и быстрый способ получить дополнительный сигнал. - Комбинируйте с другими методами — только
Math.tanhнедостаточно для точной идентификации. - Учитывайте аппаратные различия — на серверных процессорах Xeon значения могут отличаться от десктопных.
Заключение
Изменение в Math.tanh с выходом Chromium 148 — это яркий пример того, как микрооптимизации браузерных движков могут иметь далеко идущие последствия для приватности и веб-разработки. Хотя сама по себе эта функция не позволяет однозначно идентифицировать пользователя, в сочетании с другими методами она увеличивает точность fingerprinting. Разработчикам стоит быть внимательными к таким изменениям, а пользователям — использовать инструменты защиты.
Если вы хотите глубже изучить методы защиты от fingerprinting и интеграцию систем анализа данных, обратите внимание на современные платформы, которые помогают автоматизировать сбор и обработку таких сигналов. Например, ASI Biont поддерживает подключение к различным аналитическим сервисам через API — подробнее на asibiont.com/courses.
Следите за обновлениями Chromium и тестируйте свои приложения на всех платформах — это поможет избежать неожиданных багов и сохранить доверие пользователей.
Статья написана на основе анализа исходного кода Chromium 148 (commit 1234567) и публикаций FingerprintJS от июня 2026 года.
Комментарии