PowerScan
RU

Canvas fingerprinting: почему два одинаковых браузера рисуют разные пиксели

Отпечатки браузера · 6 мин чтения · Автор: PowerScan

Фото: Unsplash

Canvas fingerprinting — метод, о котором слышали больше всего людей и который могут объяснить меньше всего. Идея проста: попросить браузер что-то нарисовать, считать пиксели и вычислить их хеш. Интересно другое — почему пиксели вообще различаются между компьютерами.

Рисунок

Скрипт для снятия отпечатка создаёт невидимый <canvas>, получает 2D-контекст и рисует короткую последовательность: залитый прямоугольник, текст заданным шрифтом, возможно, градиент, кривую, эмодзи. Затем он вызывает toDataURL() или getImageData(), чтобы прочитать результат, и пропускает байты через хеш-функцию. На выходе получается короткая строка вроде 71ae464e. Эта строка и есть «хеш canvas».

В самом рисунке нет ничего секретного, и в GPU не уходит ничего такого, чего страница не могла бы описать сама. Информация содержится в отрисовке, а не в инструкциях.

Почему пиксели различаются

Основной источник различий — текст. Отрисовка глифа зависит от того, какой файл шрифта был действительно выбран (запасные шрифты различаются по операционным системам), от стратегии хинтинга и сглаживания (оттенки серого или субпиксельное, и в каком порядке субпиксели), от растеризатора (FreeType, DirectWrite, CoreText или собственного в браузере) и от того, кто занимался композицией — GPU или CPU. Каждый из этих факторов даёт слегка отличающиеся граничные пиксели. Одного светло-серого пикселя на краю буквы «e» достаточно, чтобы хеш изменился полностью.

Градиенты и кривые добавляют ещё: разные графические драйверы и разные пути сглаживания по-разному округляют промежуточные значения. В итоге два компьютера с одной версией браузера, но разными GPU, драйверами или операционными системами обычно дают разные хеши, а один и тот же компьютер каждый раз даёт один и тот же хеш. Стабильность и разнообразие — ровно то, что нужно трекеру.

Что хеш сообщает сайту

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

Что с этим делают браузеры

Firefox с включённым resist-fingerprinting возвращает пустой или случайный canvas и может запрашивать разрешение на доступ к нему. Brave добавляет небольшие случайные возмущения при чтении canvas, поэтому хеш меняется между сайтами и сессиями. Safari ограничивает видимые шрифты и некоторые способы считывания. Сам Chromium canvas не рандомизирует; браузеры на его основе, которые стремятся контролировать отпечатки, делают это собственными патчами, и качество этих патчей различается.

Шум не бесплатен. Хеш canvas, который меняется при каждом визите, сам по себе сигнал, потому что реальные браузеры так не делают. Лучшая стратегия для изолированного профиля браузера — хеш правдоподобный и постоянный, чтобы он выглядел как один обычный компьютер, а не как другой компьютер каждый час.

Что показывает диагностика

PowerScan рисует собственное небольшое изображение и показывает вам хеш. Он его не загружает: значение существует только в вашей вкладке. После перезагрузки хеш должен быть тем же. Если это не так, что-то в браузере вносит шум, и об этом стоит знать до того, как полагаться на этот профиль.

Все статьи · Запустить проверку