Метод идентификации системы пользователя на основе информации о GPU

Исследователи из нескольких израильских, французских и австралийских университетов разработали новую технику идентификации устройства пользователя через определение параметров работы GPU в web-браузере. Метод получил название “Drawn Apart” и основан на использовании WebGL для получения профиля производительности GPU, позволяющего значительно повысить точность пассивных методов отслеживания устройства пользователя, работающих без применения Cookie и без сохранения идентификатора на системе пользователя.

Методы, учитывающие при идентификации особенности отрисовки, GPU, графического стека и драйверов использовались и ранее, но они ограничивались возможностью разделения устройств только на уровне разных моделей видеокарт и GPU, т.е. могли применяться лишь как дополнительный фактор для повышения вероятности идентификации. Ключевой особенностью нового метода “Drawn Apart” является то, что он не ограничивается разделением разных моделей GPU, а пытается выявить различия между идентичными GPU одной модели, обусловленные неоднородностью процесса производства чипов, рассчитанных на массивные параллельные вычисления. Отмечается, что возникающие в процессе производства вариации позволяют формировать неповторяющиеся слепки для одних и тех же моделей устройств.


Оказалось, что данные различия можно выявить через подсчёт числа блоков выполнения и анализа их производительности в GPU. В качестве примитивов для выявления разных моделей GPU были использованы проверки на основе набора тригонометрических функций, логических операций и вычислений с плавающей запятой. Для выявления различий в одинаковых GPU оценивалось число одновременно выполняемых потоков при выполнении вершинных шейдеров. Предполагается, что выявленный эффект вызван различиями в температурных режимах и энергопотреблении разных экземпляров чипов (ранее похожий эффект был продемонстрирован для CPU – одинаковые процессоры при выполнении одинакового кода демонстрировали разное энергопотребление).

Так как операции через WebGL выполняются асинхронно, для измерения времени их выполнения нельзя напрямую использовать JavaScript API performance.now(), поэтому для измерения времени было предложено три трюка:

  • onscreen – отрисовка сцены в HTML canvas с измерением времени срабатывания callback-функции, выставленной через API Window.requestAnimationFrame и вызываемой после завершения отрисовки.
  • offscreen – использование worker-а и отрисовки сцены в объект OffscreenCanvas с измерением времени выполнения команды convertToBlob.
  • GPU – отрисовка в объект OffscreenCanvas, но использование для измерения времени предоставляемого в WebGL таймера, учитывающего продолжительность выполнения набора команд на стороне GPU.

В процессе создания идентификатора на каждом устройстве производится 50 проверок, каждая из которых охватывает 176 измерений 16 различных характеристик. Эксперимент, в ходе которого была собрана информация о 2500 устройствах с 1605 разными GPU, показал повышение продолжительности отслеживания на 67% при использовании метода Drawn Apart (метод на базе учёта FPS в среднем обеспечивал идентификацию в течение 17.5 дней, а комбинированный метод FPS+Drawn Apart – 28 дней).


  • Точность разделения 10 систем с чипами Intel i5-3470 (GEN 3 Ivy Bridge) и GPU Intel HD Graphics 2500 в тесте onscreen составила 93%, а в offscreen – 36.3%.
  • Для 10 систем Intel i5-10500 (GEN 10 Comet Lake) с видеокартой NVIDIA GTX1650 точность составила 70% и 95.8%.
  • Для 15 систем Intel i5-8500 (GEN 8 Coffee Lake) с GPU Intel UHD Graphics 630 – 42% и 55%.
  • Для 23 систем Intel i5-4590 (GEN 4 Haswell) c GPU Intel HD Graphics 4600 – 32.7% и 63.7%.
  • Для шести смартфонов Samsung Galaxy S20/S20 Ultra с GPU Mali-G77 MP11 в тесте с выводом на экран точность идентификации составила 92.7%, а для смартфонов Samsung Galaxy S9/S9+ с Mali-G72 MP18 – 54.3%.


Отмечается, что на точность влияла температура GPU, а для некоторых устройств перезагрузка системы приводила к искажению идентификатора.
При использовании метода в сочетании с другими методами косвенной идентификации точность может быть существенно увеличена. Точность также планируют поднять за счёт использования вычислительных шейдеров после стабилизации нового API WebGPU.

Компании Intel, ARM, Google, Khronos, Mozilla и Brave были уведомлены о проблеме ещё в 2020 году, но детали метода раскрыты только сейчас. В том числе исследователи опубликовали написанные на JavaScript и GLSL рабочие примеры, которые могут работать с выводом и без вывода информации на экран. Также для систем на базе GPU Intel GEN 3/4/8/10 опубликованы наборы данных для классификации извлекаемой информации в системах машинного обучения.

Release. Ссылка here.