privacy.resistFingerprinting подделывает часовой пояс, размер экрана и шрифты. Как единообразие защищает пользователей Firefox и Tor Browser.
Большинство анти-фингерпринтинговых инструментов пытаются скрыть устройство, делая его "непохожим на себя" при каждом обращении — новый хеш Canvas, перемешанный список шрифтов, случайный размер экрана. Настройка Firefox privacy.resistFingerprinting (всегда включена в Tor Browser) действует наоборот: она заставляет ваш браузер сообщать тот же самый небольшой набор значений, что и все остальные пользователи с этой же настройкой. В статье разберём, что означает философия "единообразия" на практике, что именно подделывает RFP, почему Tor Browser и Firefox используют один и тот же движок защиты, и какую цену приходится платить взамен.
Ключевые выводы
privacy.resistFingerprinting(RFP) — настройка Firefox, по умолчанию отключённая в обычном Firefox, но всегда включённая в Tor Browser, которая нормализует поддающиеся фингерпринтингу параметры браузера.- Цель дизайна — единообразие, а не рандомизация: заставить каждый браузер с RFP сообщать одинаковые значения, чтобы ни один отдельный экземпляр не выделялся из толпы.
- RFP подделывает часовой пояс на UTC, округляет размеры окна/экрана до фиксированных шагов ("letterboxing"), запрашивает разрешение перед чтением Canvas, ограничивает перечисление шрифтов и фиксирует сообщаемую ОС/User-Agent.
- Tor Browser и Firefox используют один и тот же код RFP благодаря проекту "Tor Uplift" — исследования Tor по анти-фингерпринтингу в итоге вышли в виде обычной настройки Firefox.
- Компромисс реален: RFP ломает сайты, которые полагаются на точную геолокацию, нативный размер окна или Canvas-виджеты. Это грубый, но эффективный инструмент, а не замена обычного браузинга без потерь.
Философия единообразия: слиться с толпой, а не выделиться
Инструменты Canvas-шума и похожие расширения пытаются победить фингерпринтинг, делая каждое чтение уникальным — новое случайное значение при каждом обращении, чтобы стабильный хеш нельзя было вычислить. Наша статья про Canvas-шум объясняет, почему такой подход — ловушка: любая случайность, которую скрипт может обнаружить (прочитав один и тот же canvas дважды и получив разные байты), сама становится сигналом — факт "этот браузер использует инструменты приватности" сам по себе идентифицирует, иногда сильнее, чем исходный отпечаток.
Документация Mozilla по фингерпринтингу прямо описывает альтернативу: вместо того чтобы прятать уникальное значение, RFP пытается сделать браузеры неотличимыми друг от друга. Если десять миллионов пользователей Tor Browser сообщают один и тот же часовой пояс, один и тот же округлённый размер окна и один и тот же список шрифтов, то ни одно отдельное сообщение не несёт информации, отличающей одного пользователя от остальных. Анонимность обеспечивается размером толпы, а не сокрытием. О том, как сам проект формулирует эту цель, можно прочитать на странице Mozilla Security/Fingerprinting; определение фингерпринтинга как техники отслеживания — в статье глоссария MDN Fingerprinting.
Это работает только если группа, разделяющая одно значение, достаточно велика. Единообразие среди горстки пользователей ближе к отпечатку, чем к защите — именно поэтому RFP выходит как строгая, узкая подмена без настроек, а не как гибкий вариант: любая опция, которую пользователь мог бы подкрутить, снова раздробила бы толпу на различимые подгруппы.
Что именно подделывает RFP
RFP затрагивает длинный список API. Наиболее значимые из них:
Часовой пояс → UTC. И Intl.DateTimeFormat().resolvedOptions().timeZone, и Date.prototype.getTimezoneOffset() сообщают UTC независимо от настроек системных часов. Трекер, читающий часовой пояс напрямую из браузера, вообще не получает сигнала о местоположении — о том, как этот сигнал обычно используют для выявления пользователей VPN, и почему RFP устраняет утечку у источника вместо того, чтобы делать поддельный часовой пояс "согласованным" со страной выхода VPN, читайте в статье «Утечки часового пояса и языка».
Округление окна и экрана ("letterboxing"). Вместо точного размера видимой области RFP округляет innerWidth/innerHeight вниз до ближайшего шага (по умолчанию — кратно 200×100 пикселям) и заполняет остаток однотонной рамкой. Разрешение экрана (screen.width, screen.height) точно так же ограничивается округлённым размером окна, а не реальным разрешением монитора. Это самый заметный эффект RFP — вы увидите серые полосы вокруг области контента, если окно браузера не попадает точно на нужный шаг.
Запрос разрешения на чтение Canvas. Вместо полной блокировки Canvas или инъекции шума RFP перехватывает вызовы toDataURL() / getImageData() запросом разрешения при первой попытке сайта прочитать пиксели canvas. Большинство пользователей по умолчанию отклоняют запрос, что возвращает пустой canvas — визуально одинаковый в каждом браузере с RFP, что удовлетворяет цели единообразия без побочных эффектов, которые выдают инъекцию шума.
Ограниченное перечисление шрифтов. Вместо реального списка установленных в ОС шрифтов — одного из сигналов с наибольшей энтропией в обычном отпечатке — RFP ограничивает document.fonts и подбор шрифтов CSS небольшим фиксированным списком, встроенным в браузер, независимо от того, что реально установлено в системе.
Зафиксированные User-Agent и свойства navigator. navigator.platform, navigator.oscpu, navigator.hardwareConcurrency и связанные поля подделываются под небольшой набор общих значений (например, фиксированное число ядер CPU) вместо реальных характеристик железа, а строка User-Agent нормализуется до нескольких распространённых вариантов вместо отражения точной сборки вашей ОС.
Сниженная точность измерения времени. Высокоточные таймеры вроде performance.now() — и разрешение Date.now() — округляются до более грубых интервалов, закрывая тайминговые побочные каналы, которые иначе можно использовать для фингерпринтинга производительности железа или зондирования поведения кеша.
Tor Uplift: почему Firefox и Tor Browser используют один движок
RFP существует в обычном Firefox благодаря проекту Tor Uplift — усилиям по переносу анти-фингерпринтинговых защит Tor Browser из специфичного для Tor форка в сам Firefox в виде стандартной, поддерживаемой настройки. Tor Browser построен на Firefox ESR и включает privacy.resistFingerprinting по умолчанию; обычный Firefox содержит тот же код, но оставляет его выключенным, поскольку описанные ниже компромиссы считаются слишком навязчивыми для повседневного браузинга.
Практическая выгода от общего движка: баги в защите от фингерпринтинга исправляются один раз, в одной кодовой базе, и оба браузера от этого выигрывают. Это также означает, что любой, кто интересуется анти-фингерпринтинговым поведением Tor Browser, может протестировать точно такой же механизм в обычном Firefox, включив настройку в about:config — полезно, чтобы понять компромиссы до полного перехода на Tor Browser для ежедневного использования.
Компромиссы: что перестаёт работать
Единообразие — грубый инструмент, и RFP действительно ломает вещи:
- Сайты, зависящие от геолокации (погода, локальный поиск, планирование с учётом часового пояса) видят UTC вместо вашего реального часового пояса и ведут себя так, будто вы находитесь в произвольном месте.
- Интерфейсы на основе Canvas — некоторые CAPTCHA, инструменты рисования и виджеты визуализации данных — либо показывают запрос разрешения при каждой загрузке, либо отображаются пустыми, если вы отказали.
- Размер окна ощущается неточным. Letterboxing означает, что область контента не заполняет окно целиком, что некоторые пользователи находят визуально отвлекающим, особенно при нестандартных размерах окна.
- Некоторые сайты работают некорректно, получая общий User-Agent или округлённое значение параллелизма железа, которое не соответствует ожидаемому, особенно старые сайты с агрессивным определением браузера.
Ничто из этого не является багом — это прямая цена стратегии единообразия. Защита, которая работает только пока невидима, по логике самого RFP, была бы не такой уж надёжной защитой.
Как проверить, что RFP работает
Если вы включите privacy.resistFingerprinting в Firefox (about:config → найдите настройку → установите true) или перейдёте на Tor Browser, эффект можно проверить напрямую, а не принимать на веру. Запустите проверку отпечатка BrowserInsight до и после: с активным RFP вы должны увидеть, что сообщаемый часовой пояс переключился на UTC, хеш canvas стал пустым или вызвал запрос разрешения, список шрифтов сократился до встроенного набора, а размеры окна/экрана попадают на округлённый шаг вместо реального разрешения монитора. Сравнение двух запусков — самый быстрый способ увидеть единообразие в действии, а не просто прочитать о нём абстрактно.
Часто задаваемые вопросы
Делает ли resistFingerprinting меня анонимным?
Ни одна отдельная настройка не делает вас анонимным. RFP снижает то, насколько сигналы вашего браузера выделяют вас среди других пользователей RFP, но ваш IP-адрес, авторизации в аккаунтах и поведение при просмотре — отдельные векторы отслеживания, которые RFP не затрагивает. Tor Browser сочетает RFP с сетью Tor именно для того, чтобы одновременно анонимизировать и ваш IP; при использовании только RFP в обычном Firefox ваша сетевая идентичность по-прежнему видна.
Стоит ли включать privacy.resistFingerprinting в обычном Firefox?
Зависит от вашей модели угроз. RFP даёт реальное снижение уникальности отпечатка, но letterboxing, подделка часового пояса и ограничения шрифтов заметны в повседневном использовании и сломают часть сайтов. Большинство пользователей, которым нужна часть преимуществ без такого трения, используют встроенную в Firefox по умолчанию более лёгкую «Усиленную защиту от отслеживания», оставляя полноценный RFP или Tor Browser для более чувствительного браузинга.
Почему вокруг контента в Tor Browser появляется серая рамка?
Это letterboxing. RFP округляет сообщаемые размеры вашего окна до фиксированного шага и заполняет остаток однотонной рамкой, чтобы реальный размер вашего окна не утекал как уникальное значение. Это ожидаемое поведение, а не баг отрисовки.
Полностью ли RFP останавливает фингерпринтинг по Canvas?
Что касается Canvas — фактически да: поведение по умолчанию "запрос, затем отказ" возвращает пустой canvas, одинаковый в каждом браузере с RFP, что удовлетворяет цели единообразия. Это отличается от механизмов на основе шума, таких как farbling в Brave — сравнение двух подходов смотрите в нашем разборе Canvas-шума.


