Назад к блогу
Исследования21 мин чтения

Ложь рандомизации: все Canvas-защиты побеждены

W
WHOX Research
26 февраля 2026 г.
Ложь рандомизации: все Canvas-защиты побеждены

Есть красивая идея: добавить шум к каждому пикселю canvas, и трекеры потеряют тебя. Как белый шум в шпионском фильме, глушащий прослушку. Девять расширений Chrome и Firefox построены на этой идее. Brave встроил её в сам браузер и назвал "farbling". Элегантно, интуитивно правильно и бесполезно.

В апреле 2025 года Хоанг Дай Нгуен и Фани Вадреву из Луизианского государственного университета представили на конференции WWW'25 работу "Breaking the Shield: Analyzing and Attacking Canvas Fingerprinting Defenses in the Wild". Они протестировали 18 расширений и 5 основных браузеров. Их вывод, дословно: "К сожалению, полностью развертываемой защиты от canvas fingerprinting в настоящее время не существует."

Все. Ни одной рабочей защиты. Ноль из двадцати трёх.

Статья, которую вы сейчас читаете, собирает доказательства из восьми академических работ, двух CVE, данных антифрод-индустрии и реальных тестов коммерческих систем. Каждый блок подтверждает одно и то же: рандомизация canvas не просто не работает. Она помогает вас найти. И новые исследования 2025 года показали, что реальный масштаб проблемы вдвое больше, чем считали учёные.

Коротко: WWW'25 доказала: все 18 расширений и 5 браузеров побеждены. Canvas-шум > не защита, а маркер. Ноль рабочих решений.


Что такое canvas fingerprinting и почему вам не всё равно

Canvas fingerprinting работает просто. Браузеру дают задачу: нарисуй текст конкретным шрифтом, градиент определённых цветов, эмодзи нужного вида. Результат рендеринга зависит от GPU, драйверов, операционной системы, установленных шрифтов и десятков других параметров. Два разных компьютера нарисуют одну и ту же сцену чуть-чуть по-разному. Эта разница, переведённая в хеш, и есть ваш отпечаток. Без куки, без аккаунтов, без вашего согласия.

По данным IMC 2025, canvas fingerprinting активно используется на значительной части крупнейших сайтов. Это не экзотика и не теоретическая угроза. Это промышленная технология слежки, которая работает прямо сейчас, пока вы читаете эту статью.

Вот почему против неё пытаются защищаться. И вот почему защита не работает.


За пределами краулера: реальный масштаб в два раза хуже

Когда исследователь хочет измерить распространённость фингерпринтинга, он запускает краулер. Бот обходит тысячи сайтов, собирает скрипты, анализирует код. На основе этих данных пишутся отчёты, принимаются решения, формируется картина мира. Картина, как выяснилось, показывает только половину.

В апреле 2025 года Аннамалай (UCL), Де Кристофаро (UC Riverside) и Билогревич (Google Zurich) представили на ACM Web Conference работу "Beyond the Crawl". Они сравнили результаты автоматического краулинга 3 000 сайтов с реальными браузинг-сессиями 30 пользователей. Результат: краулеры пропускают почти половину фингерпринтинг-скриптов.

Три причины. Первая: страницы за авторизацией. Краулер не может залогиниться в ваш банк, в ваш почтовый клиент, в ваш личный кабинет. Но фингерпринтинг-скрипты работают и там. Вторая: обход обнаружения ботов. Многие сайты засекают краулеры и показывают им упрощённую версию страницы, без трекинг-скриптов. Реальные пользователи видят полную версию с полным набором слежки. Третья: скрипты, запускаемые только при взаимодействии. Клик, скролл, заполнение формы могут триггерить фингерпринтинг. Краулер не кликает. Краулер не скроллит. Краулер не заполняет формы.

Вывод жёсткий: все академические оценки распространённости фингерпринтинга, основанные на краулинге, занижены примерно вдвое. Когда исследователь пишет "34% сайтов из топ-500 используют фингерпринтинг", реальная цифра ближе к 60-70%. Масштаб индустрии слежки вдвое больше, чем показывает наука. Наука просто не умеет заходить за форму логина.

Ещё одна тревожная деталь из "Beyond the Crawl": скрипты, невидимые для краулеров, часто оказываются самыми агрессивными. Они собирают больше сигналов, используют более сложные техники, включая canvas fingerprinting с множественными отрисовками и аудио-фингерпринтинг с высоким разрешением. Логика проста: если скрипт спрятан от исследователей, его авторам не нужно притворяться безобидными. На виду стоят "чистые" скрипты с минимальным набором сигналов. В тени работают те, что собирают всё.

Это создаёт иллюзию прогресса. Исследователи публикуют отчёты: "процент сайтов с фингерпринтингом стабилизировался". Регуляторы кивают. Браузерные вендоры рапортуют об успехах. А реальный масштаб слежки растёт в той половине интернета, которую краулеры не видят. Учёные измеряют температуру в прихожей и заключают, что в доме прохладно, не зная, что на кухне давно пожар.

Для понимания контекста: по данным Web Almanac 2025, 75% веб-страниц содержат хотя бы один трекер. Это цифра с краулера. С учётом поправки "Beyond the Crawl", реальный процент ещё выше.

Для canvas fingerprinting этот эффект особенно выражен. Canvas-скрипты за авторизацией не попадают в академические выборки. Но они работают на каждом сайте, где вы залогинены. Ваш банк. Ваша социальная сеть. Ваш почтовый провайдер. Везде, где краулер остановился перед формой логина, реальный canvas fingerprinting только начинается.


Четыре типа защиты: разбор полётов

Нгуен и Вадреву классифицировали все существующие защиты в четыре категории. Вот они, от самой популярной к самой редкой:

Тип защиты Как работает Кто использует Устойчивость
Рандомизация пикселей Добавляет случайный шум к значениям RGBA 9 расширений и Brave Самая слабая
Фиксированный вывод Возвращает одно и то же значение всегда Firefox Resist Fingerprinting Более устойчивая
Блокировка Полностью запрещает доступ к Canvas API Отдельные расширения Ломает сайты
Разрешение по запросу Спрашивает пользователя перед каждым доступом CanvasBlocker и другие Утомляет пользователя

Контринтуитивный результат: рандомизация, самый популярный подход, оказалась самым слабым. Фиксированный вывод, где каждый пользователь Firefox с включённым Resist Fingerprinting получает одинаковый хеш, работает лучше. Интуиция подсказывает обратное, но математика не обманывает.

Как именно ломают рандомизацию

Нгуен и Вадреву не просто констатировали уязвимость. Они показали конкретный механизм по данным WWW'25. Рандомизация пикселей обычно работает так: к значению каждого канала RGBA прибавляется случайное число из узкого диапазона, обычно ±5. Некоторые расширения применяют шум к каждому вызову toDataURL. Другие генерируют seed один раз за сессию и используют детерминированный шум. Третьи комбинируют оба подхода.

Атака использовала статистический анализ множественных отрисовок. Если расширение добавляет случайный шум к каждому вызову, десять отрисовок одного и того же canvas дают десять разных хешей. Усреднение этих отрисовок устраняет случайную компоненту и восстанавливает оригинальное изображение. Как фотограф делает серию кадров ночного неба и складывает их: шум уходит, сигнал остаётся. Если шум детерминирован для сессии, одна отрисовка даёт стабильный, но отличный от оригинала хеш. В этом случае исследователи анализировали статистическое распределение значений пикселей: в оригинальном canvas цвета распределены по задумке художника, а в зашумлённом canvas появляется характерный "хвост" гауссова шума, который обнаруживается простейшим статистическим тестом.

Для трёх из 18 расширений атака оказалась ещё проще: расширения шумили только часть canvas, оставляя остальные пиксели нетронутыми. Достаточно было прочитать "тихую" область, чтобы получить чистый отпечаток. Исследователи записали: "якобы недетерминированное поведение может быть предсказано и использовано". Девять расширений и Brave используют рандомизацию. Все девять взломаны. Brave взломан. Элегантная идея, разбитая о статистику.

А вот если все пользователи возвращают одно и то же значение, ловить нечего. Нет вариации, нет сигнала. Правда, это работает только до тех пор, пока все пользователи используют одну и ту же защиту. Установили Firefox Resist Fingerprinting 2% пользователей? Поздравляю, теперь вас можно отличить от остальных 98% именно по тому, что вы возвращаете фиксированное значение. Сама попытка скрыться стала маркером.

Такова ирония: даже лучшая защита работает только в толпе. А толпы нет.


Drawnapart: когда предаёт кремний

Допустим, вы каким-то чудом решили проблему пиксельного шума. Усреднение не работает, seed непредсказуем, шум действительно случаен. Вы в безопасности?

Нет. Потому что вам угрожает ваш собственный GPU. Не то, что он рисует, а то, как быстро он это делает.

В 2022 году на конференции NDSS группа исследователей из Университета Бен-Гуриона, Inria и Университета Аделаиды представила работу Drawnapart. Они задали вопрос, который до них никто не задавал: можно ли различить два GPU одной модели, из одной партии, с одного завода? Ответ: да.

Физика кремниевого предательства

Каждый GPU состоит из исполнительных блоков, Execution Units. Они проектируются одинаковыми, но при производстве кремниевых пластин возникают микроскопические вариации. Толщина оксидного слоя отличается на нанометры. Длина канала транзистора чуть больше или чуть меньше спецификации. Всё это влияет на скорость работы каждого отдельного блока. Разница неощутима для пользователя, но измерима для алгоритма.

Drawnapart использует WebGL для отрисовки специфических 3D-точек. Каждая точка нагружает определённый Execution Unit. Замеряя время отрисовки для каждого блока, алгоритм строит "трассу" GPU. Серия таких трасс пропускается через нейросеть, которая вычисляет вектор-отпечаток. Евклидово расстояние между векторами двух сессий определяет, один ли это чип.

Масштаб результатов

Исследователи протестировали метод на 2500+ устройствах, включая 1605 уникальных GPU:

Метрика Результат
Увеличение длительности отслеживания vs FP-Stalker +67%
Различение идентичных GPU одной модели Да
Работа на интегрированных GPU Да
Работа на выделенных GPU Да
Три метода измерения Onscreen, Offscreen, GPU timing

Один из соавторов, Виталий Дядюк, провёл физический эксперимент: переставил процессоры с интегрированной графикой между двумя идентичными компьютерами. Drawnapart отследил перестановку. Чип опознал себя в другом корпусе, как собака, которая узнаёт хозяина через забор.

Почему рандомизация canvas здесь бессильна

Вот ключевое. Цитата из самой работы: "Существующие меры против Canvas Fingerprinting, добавляющие шум к рендерингу, не могут быть применены против DrawnApart, поскольку он основан на измерении времени выполнения, а не на сравнении отрисованных изображений."

Вы можете добавлять шум к каждому пикселю, менять хеш каждую секунду, накидывать рандом поверх рандома. Drawnapart этого не замечает. Ему не нужны ваши пиксели. Ему нужно время вашего кремния. Рандомизация canvas против Drawnapart работает примерно как шапка-невидимка против весов: вы всё ещё весите столько же.


WebGPU: следующий рубеж уже открыт

WebGPU, наследник WebGL, новый графический API для браузеров. Более мощный, более низкоуровневый, более подходящий для фингерпринтинга.

В июне 2025 года Хохентаннер, Кеммерцелль и коллеги представили на ACM WiSec 2025 работу "Unveiling Privacy Risks in WebGPU". Они протестировали 500 устройств и добились 70% повторной идентификации через AtomicIncrement-отпечатки. Семьдесят процентов из пятисот случайных устройств. Каждый третий звонок в техподдержку "мой компьютер уникален" оказался бы правдой.

Как это работает. Принцип отличается от canvas fingerprinting принципиально. WebGPU предоставляет доступ к compute shaders, которые выполняют вычисления на GPU параллельно. Атомарные операции, такие как AtomicIncrement, выполняются с разной скоростью на разных GPU из-за различий в архитектуре исполнительных блоков. Исследователи измеряли поведение GPU при выполнении тысяч атомарных операций и строили профиль, уникальный для каждого устройства.

Ключевое: WebGPU обходит все защитные механизмы, разработанные для WebGL. Brave farbling не затрагивает WebGPU. Safari Advanced Fingerprinting Protection не шумит WebGPU-рендеринг. Firefox Resist Fingerprinting не стандартизирует WebGPU-вывод. Ни один браузер пока не имеет защиты от фингерпринтинга через WebGPU. Это новая поверхность атаки: открытая, немаскированная, ждущая массового использования.

Антифрод-системы вроде WHOX уже учитывают WebGPU в своих проверках. Характерный парадокс: пользователь блокирует WebGL, не зная о WebGPU. Защита закрывает старую дверь, не заметив новую.

WebGPU-SPY с AsiaCCS 2024 показал другой вектор: GPU cache side-channel атаки из WebGPU sandbox, позволяющие определять, какие сайты загружены в других вкладках, без какого-либо доступа к их контенту. Это не просто фингерпринтинг. Это шпионаж через графический процессор. Исследователи из TU Graz параллельно продемонстрировали drive-by GPU cache атаки на 11 GPU от пяти поколений двух вендоров. Время атаки: менее 15 минут обычного браузинга. Пропускная способность скрытого канала: 10.9 килобайт в секунду. Никакого взаимодействия пользователя не требуется.

Для индустрии фингерпринтинга WebGPU это подарок. Canvas-защиты разрабатывались годами, и хотя они не работают, хотя бы создают видимость борьбы. WebGPU появился в стабильных версиях Chrome, Edge и Firefox без какой-либо защиты от фингерпринтинга. Спецификация W3C не предусматривает механизмов приватности для compute shaders. Рабочая группа по WebGPU не обсуждает митигации. Браузерные вендоры молчат. А исследователи уже показали 70% реидентификацию. Между публикацией атаки и появлением защиты обычно проходят годы. Для canvas этот цикл начался в 2014. Для WebGPU он начинается сейчас.

Canvas fingerprinting уже не единственный графический вектор. WebGPU открывает второй фронт. А браузеры даже не начали строить оборону.


CVE-2024-27830: лазейка рабочих потоков

В 2024 году исследователь Джо Рутковски обнаружил элегантную уязвимость в Safari 17.4. Защита от canvas fingerprinting работала в основном потоке и в обычных воркерах. Но не в SharedWorker и не в ServiceWorker. Две из четырёх дверей были заперты. Две стояли нараспашку.

Атака тривиальна. Создаёте SharedWorker. Внутри него рисуете canvas через OffscreenCanvas. Получаете чистый, незащищённый отпечаток. Основной поток браузера в это время послушно возвращает зашумлённое значение, думая, что всё под контролем. Как охранник, который проверяет документы у главного входа, пока грабители спокойно заходят через служебный.

Apple изначально была "unconcerned". Буквально. Потом передумали и присвоили CVE-2024-27830. Исправили в Safari 17.5 в июне 2024 года.

Firefox тоже был уязвим. Частично исправили в Firefox 127. ServiceWorker оставался уязвимым до Firefox 131, до августа 2024 года.

Но это была уязвимость браузеров. С расширениями ситуация принципиально другая, и она неразрешима.

Архитектурный тупик расширений

Расширения браузера работают так: они внедряют JavaScript на страницу и подменяют функции toDataURL, getImageData и другие Canvas API. Когда сайт вызывает эти функции, он получает подменённый результат с добавленным шумом. Красиво, правда?

Вот проблема. Web Worker запускается в собственном JavaScript-контексте. Content scripts расширений работают в основном потоке. Подмены API не распространяются в воркеры. Не могут распространяться. Это архитектурное ограничение браузерных расширений.

Ещё в 2017 году разработчики AdguardTeam/FingerprintingBlocker зафиксировали проблему: "OffscreenCanvas может использоваться в web workers, и это обходит любой механизм защиты от фингерпринтинга, основанный на подмене браузерных API."

Девять лет назад. Проблема известна. Решения нет. Его физически не может быть в рамках текущей архитектуры расширений. Manifest V3, новая спецификация расширений Chrome, не решает этот вопрос. Он даже не ставит его.

Антифрод-системы используют именно этот вектор. Сравнение canvas-хеша из основного потока с хешем из Web Worker мгновенно выявляет подмену. Расширение не может спрятаться от этого сравнения. WHOX реализует его как одну из проверок согласованности.


Brave Farbling: приватность на словах

Brave заслужил репутацию "приватного браузера". Отчасти справедливо: встроенный блокировщик рекламы, блокировка трекеров, HTTPS по умолчанию. Для canvas fingerprinting Brave использует "farbling". Термин придумала команда Brave для описания рандомизированных помех.

Как работает farbling

Для каждой комбинации "сайт и сессия" генерируется детерминированный seed. На основе seed к пикселям canvas добавляется шум. Один сайт получает одно значение в рамках сессии. Другой сайт получает другое. В следующей сессии оба получат третье. На бумаге звучит надёжно.

Brave предлагает три уровня. "Off" означает защита выключена. "Default" означает едва заметный шум, разный для каждого сайта, не мешающий пользователю. "Maximum" означает полностью случайные значения, может ломать сайты.

Хроника провалов

История багов Brave в farbling читается как хроника отступления:

Дата Баг Что произошло
Октябрь 2020 #12069 Farbling затрагивал только один RGBA-канал
Январь 2021 #13690 Алгоритм обрабатывал лишь часть canvas, оставляя оригинальные данные
2021 #14135 Помехи были настолько слабыми, что хеш не менялся
Сентябрь 2021 #17850 Пользователи Photopea увидели шум глазами

Каждый из этих багов был исправлен. Но сами исправления показывают, насколько хрупка идея рандомизации. Баг, при котором шум добавляется только в один канал из четырёх, это не мелочь. Это три четверти отпечатка в открытом доступе.

96% и разбитые надежды

Даже без этих багов farbling не спасает. Аналитика Brside.com за декабрь 2025 показала: fingerprint.com стабильно переидентифицировал пользователей Brave после очистки данных, смены IP и подключения VPN. Даже с выключенным WebGL уровень уверенности составлял 96%.

А теперь парадокс, который должен висеть в рамке на стене.

Инструмент EFF "Cover Your Tracks" оценивает Brave как "рандомизированный", то есть хорошо защищённый. Firefox он оценивает как "уникальный", то есть плохо защищённый. Но в реальном коммерческом фингерпринтинге картина обратная. Firefox с Resist Fingerprinting и Safari успешно блокируют переидентификацию, а Brave проигрывает.

Почему стандартизация бьёт рандомизацию

Brave использует только рандомизацию. Firefox использует стандартизацию: все пользователи Strict режима получают одинаковый аудио-отпечаток ~35.75 согласно тестам Brside.com. Safari использует обобщение: вместо "Apple M1 Pro" сообщает просто "Apple GPU".

Brave при этом честно сообщает точную модель GPU, количество ядер CPU, аппаратную аудио-сигнатуру. Можно рандомизировать canvas хоть до посинения. Если вы уже назвали свой домашний адрес, тёмные очки не помогут.

Единственный способ остаться анонимным в Brave, по данным Brside.com: приватное окно с Tor. Но это уже не совсем Brave, правда?


Коммерческий фингерпринтинг: 99.5% на вашем устройстве

Fingerprint Pro использует клиент-серверную архитектуру: клиентский SDK собирает сигналы на устройстве, затем отправляет их на серверы Fingerprint для обработки машинным обучением. Заявленная точность коммерческой версии: 99.5%. Для сравнения, open-source версия FingerprintJS даёт 40-60% точности.

Разница между 60% и 99.5% это разница между "может быть, тот же пользователь" и "это тот же пользователь, и мы уверены до пятого знака после запятой". Коммерческий фингерпринтинг уже не экспериментальная технология. Это зрелый продукт с SLA, техподдержкой и документацией.

On-device вычисление решает проблему, которая мешала массовому развёртыванию: сетевые задержки и стоимость серверной обработки. Когда отпечаток вычисляется на устройстве пользователя и отправляется уже готовым хешем, серверу остаётся только сравнить. Меньше трафика, меньше задержка, меньше инфраструктуры. Больше сайтов могут позволить себе фингерпринтинг.

Canvas рандомизация против этого не работает. 99.5% точности означает, что FingerprintJS уже учитывает и обходит все существующие защиты. Все 18 расширений из исследования WWW'25. Все встроенные механизмы браузеров. Коммерческая мотивация побеждает академическую защиту, потому что у коммерции больше ресурсов и больше причин побеждать.

Для масштаба: FingerprintJS используется на тысячах сайтов по собственным данным компании. Рынок поведенческой биометрии, куда входит и фингерпринтинг, по данным аналитиков оценивается в 2.72 миллиарда долларов в 2025 году и прогнозируется на уровне 11.38 миллиарда к 2031 году. Это рост на 26.95% ежегодно. Академические исследователи публикуют работы о защите от фингерпринтинга раз в год на конференциях. Индустрия обновляет свои методы обхода каждый квартал. Арифметика не в пользу защиты.

Вопрос уже не в том, можно ли вас отследить. Вопрос в том, знаете ли вы об этом. Инструменты вроде WHOX существуют, чтобы показать пользователю то, что коммерческие системы предпочитают скрывать: насколько именно вы идентифицируемы.


Fontleak: когда JavaScript вообще не нужен

До этого момента все атаки использовали JavaScript. А если его отключить? Tor Browser по умолчанию блокирует JS. Почтовые клиенты тоже. Казалось бы, без JS фингерпринтинг невозможен.

Драгош Албастроиу доказал обратное. Его инструмент Fontleak использует исключительно CSS для извлечения данных. Посимвольно.

Как работает CSS-экфильтрация

Атакующий создаёт кастомный шрифт с лигатурными подстановками в формате OpenType GSUB. Все символы в шрифте имеют нулевую ширину, кроме специальных "leak"-глифов. Лигатурные правила цепочкой подстановок изолируют символ на заданной позиции. Leak-глиф для каждого символа имеет уникальную, известную ширину. Через CSS-механизмы, такие как font-size-adjust, media queries или scrollbar-трюки, ширина глифа передаётся на сервер атакующего.

Звучит как сюжет фильма, где грабитель вскрывает сейф стетоскопом. Только сейф это ваш браузер, а стетоскоп это файл шрифта.

Результат: полное извлечение текстового содержимого DOM-элементов. Содержимое тегов <script> с API-ключами и CSRF-токенами. Работает в последних версиях Chrome, Firefox и Safari. DOMPurify по умолчанию пропускает теги <style>, так что инъекция CSS через пользовательский контент вполне реальна.

Для фингерпринтинга это означает: блокировка JS не спасает. CSS стал достаточно мощным, чтобы работать за него. Вектор атаки проходит мимо любых canvas-защит, мимо любых JavaScript-перехватчиков, мимо всей инфраструктуры, которую браузеры строили последние десять лет. Fontleak напоминает, что canvas это только одна поверхность. И не самая уязвимая.


Cascading Spy Sheets: 98% точность без единой строки JS

Fontleak извлекает данные. Исследователи из CISPA пошли дальше и построили полноценную систему идентификации на чистом CSS. Их работа "Cascading Spy Sheets", представленная на NDSS 2025, довела CSS-фингерпринтинг до промышленного уровня.

Три вектора атаки:

CSS-свойства как отпечаток. Разные браузеры и версии поддерживают разные CSS-свойства. Проверяя наличие каждого свойства через @supports, можно определить браузер. В полном сценарии точность составила 98%.

Детекция расширений. Блокировщики рекламы модифицируют DOM, удаляя элементы. CSS-селекторы, привязанные к этим элементам, перестают работать. По паттерну "что удалено, а что нет" определяется конкретное расширение. Исследователи протестировали 10 Chrome-расширений.

Шрифтовой фингерпринтинг через CSS. Наличие конкретных шрифтов проверяется без JavaScript. Шрифт "Leelawadee" означает установленный MS Office. Комбинация установленных и отсутствующих шрифтов, определённая чисто через CSS, создаёт отпечаток ОС и набора программ.

Всё это работает в почтовых клиентах, которые рендерят HTML, но блокируют JS. То есть практически во всех.

Раньше отключение JavaScript казалось крайней, но надёжной мерой. Теперь это как запереть дверь, оставив окна открытыми.


Как ловят шум: 5 техник Castle.io

Если рандомизация не защищает пользователя, как именно её ловят? Блог Castle.io подробно описал пять техник, которые использует индустрия антифрода. Все они работают прямо сейчас.

Техника 1: Верификация пикселей. Нарисуйте canvas с известными цветами, например rgba(0, 127, 255, 1). Считайте значение каждого пикселя. Если R не равен 0 или G не равен 127, шум добавлен. Расширения, которые добавляют ±5 к каждому каналу, проваливают эту проверку мгновенно. Это как подмешать воду в вино и надеяться, что сомелье не заметит.

Техника 2: Проверка консистентности функций. Вызовите toString() на toDataURL. Нативная функция вернёт function toDataURL() { [native code] }. Переопределённая, скорее всего, нет. Проверьте Object.setPrototypeOf(): нативные функции выбрасывают ошибку "Cyclic", Proxy-объекты ведут себя иначе. Загляните в стектрейс ошибки: если там мелькает chrome-extension://, расширение выдало себя вместе со своим идентификатором.

Техника 3: Множественная отрисовка. Нарисуйте один и тот же canvas дважды за сессию. Если хеш изменился, это рандомизация на каждый вызов. Если стабилен внутри сессии, но меняется между сессиями, это farbling в стиле Brave.

Техника 4: Контекстная интерпретация. Castle.io рекомендует различать "нормальную" и "ненормальную" рандомизацию. Brave, Firefox, Samsung Browser добавляют шум штатно, и их паттерн известен. Chrome-пользователь с шумом: это расширение и повод повысить оценку риска. Если паттерн шума не совпадает с заявленным браузером, это подмена.

Техника 5: За пределами хеширования. Ключевое наблюдение Castle.io: "Хеширование эффективно, но эта эффективность имеет компромисс. Когда canvas рандомизирован, хеш сам по себе теряет весь контекст." Вместо хешей Castle.io предлагает сэмплировать конкретные пиксели на детерминированных позициях, вычислять агрегатные метрики вроде среднего цвета и измерять время выполнения canvas-операций. Подмена и эмуляция вносят задержки, которые хеш не поймает, а тайминг поймает.

Google использует аналогичный подход под названием Picasso: группирует устройства в семейства по характерным особенностям рендеринга. Не индивидуальная уникальность, а класс устройства. Такой подход устойчивее к шуму, чем любой хеш.


Как антифрод ловит рандомизацию на практике

Промышленные системы детекции давно адаптировали все пять техник Castle.io в автоматические проверки. WHOX показывает, как это работает: перцептуальный хеш canvas захватывает визуальную структуру изображения, а не побитовое значение, поэтому точечный шум расширений его не меняет. Сравнение canvas из основного потока с canvas из Web Worker ловит любое расширение на основе JavaScript injection. Верификация пикселей и множественная отрисовка обнаруживают добавленный шум. Проверка целостности нативных функций выявляет переопределённые API.

Все эти техники работают не потому, что они умнее рандомизации. Они работают потому, что рандомизация, как доказали Нгуен и Вадреву, решает себя сама. Шум ловят элементарно. Отсутствие шума видно по отпечатку. Любой выбор пользователя несёт информацию. В теории информации это называется «нет нулевого сообщения». Вы не можете не оставлять следов.

И canvas это только один вектор из десятков. Современные системы проверяют WebGL, аудио, шрифты, TLS-отпечатки, поведение мыши, тайминги GPU. Можно обмануть один сигнал, даже десять. Обмануть сотни, согласованных между собой и проверяемых на внутреннюю непротиворечивость, задача другого порядка.


Что дальше

WebGPU обеспечивает 70% реидентификацию при нулевых защитных мерах. CSS-фингерпринтинг вышел за пределы браузера в почтовые клиенты. Коммерческие системы достигли 99.5% точности с клиент-серверной обработкой. "Beyond the Crawl" показала, что реальный масштаб слежки вдвое больше, чем измеряет наука.

Canvas уже не главное поле боя. Рандомизация была хорошей идеей. Замок, который работает, пока никто не пытается его открыть. WWW'25 доказала: пытаются все. У всех получается.

Восемнадцать расширений. Пять браузеров. Ноль работающих защит. Это не прогноз. Это итог.


FAQ

Что такое canvas fingerprinting? Canvas fingerprinting > техника идентификации, при которой браузеру дают задание нарисовать тестовую сцену (текст, градиент, эмодзи). Результат рендеринга зависит от GPU, драйверов, ОС и шрифтов. Хеш результата уникален для каждого устройства. По данным IMC 2025, canvas fingerprinting используется на значительной части крупнейших сайтов. Работает без cookies, без согласия, без уведомления.

Почему рандомизация canvas не работает? Работа WWW'25 (Нгуен и Вадреву) доказала: все 18 расширений и 5 браузеров побеждены. Случайный шум устраняется статистическим усреднением нескольких отрисовок. Детерминированный шум обнаруживается по гауссову «хвосту» в распределении пикселей. Castle.io описал 5 конкретных техник обнаружения шума. Сам факт наличия шума > маркер: canvas.noise_detected: true отличает вас от 96% пользователей.

Что такое Drawnapart и почему он игнорирует canvas-защиты? Drawnapart (NDSS 2022) > метод fingerprinting через тайминги GPU, а не пиксели. Измеряет, как быстро каждый Execution Unit GPU рисует определённые точки. Кремниевые вариации при производстве делают каждый чип уникальным. Увеличивает время отслеживания на 67%. Цитата из работы: «Существующие защиты от Canvas Fingerprinting не могут быть применены против DrawnApart, поскольку он основан на измерении времени, а не изображений.»

Можно ли снять fingerprint без JavaScript, только через CSS? Да. Cascading Spy Sheets (NDSS 2025) достигает 98% точности идентификации браузера чисто через CSS: @supports проверяет свойства, CSS-селекторы детектируют расширения, шрифтовой fingerprinting определяет ОС. Fontleak извлекает текстовое содержимое DOM через CSS-лигатуры. Работает в почтовых клиентах, блокирующих JS. CVE-2024-27830 показала: даже Safari был уязвим через SharedWorker и ServiceWorker.

Что реально помогает от canvas fingerprinting? Стандартизация (все пользователи возвращают одинаковое значение) работает лучше рандомизации. Firefox Resist Fingerprinting и Tor/Mullvad Browser используют этот подход. Но толпа мала: только 0.48% пользователей Firefox включают RFP. Против Drawnapart и WebGPU (70% re-ID) помогает только полное отключение WebGL. Против CSS-fingerprinting защиты не существует. Честный ответ: полностью развертываемой защиты от canvas fingerprinting не существует (WWW'25).


Читайте также


WHOX - Отличаем настоящие сигналы от сфабрикованных. Проверьте свой отпечаток на whox.com и узнайте какие сигналы утекают из вашего браузера и насколько вы уникальны.

Источники: WWW'25 [doi:10.1145/3696410.3714713], "Beyond the Crawl" WWW'25 [arxiv:2502.01608], NDSS'22 Drawnapart [doi:10.14722/ndss.2022.24093], WiSec'25 WebGPU [doi:10.1145/3690624], CVE-2024-27830, IMC'25 [doi:10.1145/3730567.3764500], Castle.io blog 2025, Brside.com Dec 2025, NDSS'25 Cascading Spy Sheets, Fontleak [adragos.ro/fontleak], AsiaCCS'24 WebGPU-SPY [doi:10.1145/3634737.3637648], TU Graz GPU cache attacks [hal-04613708v1], FingerprintJS 2025

canvasfingerprintingresearchwebgl

Похожие статьи