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

WebGPU: ваш GPU и есть ваш паспорт

W
WHOX Research
4 февраля 2026 г.
WebGPU: ваш GPU и есть ваш паспорт

Два ноутбука. Одна модель, одна партия, куплены в один день в одном магазине. Одинаковая ОС, одинаковый браузер, одинаковые настройки. Ставите их рядом, открываете один и тот же сайт. Сайт их различает.

Не по cookies. Не по IP-адресу. Не по User-Agent. По тому, как их видеокарты рисуют треугольник. Одна управляется на 3 миллисекунды быстрее. Каждый чип сходит с конвейера чуточку другим. Крохотные сдвиги в пороговых напряжениях транзисторов, сопротивлении дорожек, толщине оксида затвора. Глазом не увидишь, штангенциркулем не измеришь, обновлением драйверов не поправишь. Зато JavaScript в браузере их видит прекрасно.

Исследователи из Университета Бен-Гуриона и Inria назвали это Drawnapart и опубликовали на NDSS 2022. Разброс скоростей исполнительных блоков GPU создаёт уникальную подпись устройства. Обычный JavaScript. Никаких привилегий, никаких разрешений, никаких всплывающих окон. Результат: 67% прибавка к медианной длительности трекинга по сравнению с лучшим на тот момент методом FP-Stalker. Работает на номинально одинаковых устройствах. Одна модель, одна партия, один завод.

Меняйте браузер. Меняйте ОС. Включайте VPN, Tor, инкогнито. GPU останется тем же. Он впаян в материнскую плату. Это не настройка. Это физика. Единственный выход: новое железо.

А теперь представьте, что тем самым фрагментным шейдерам, рисующим треугольники, дали старшего брата. С прямым доступом к вычислительным ядрам GPU. Без посредников, без ограничений фиксированного конвейера. Зовут этого брата WebGPU.

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

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

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

WebGPU убрал витрину.

Стандарт W3C с 2023 года, работает в Chrome с версии 113, в Safari 26+, экспериментально в Firefox. К рендерингу прикрутили вычислительные конвейеры. Теперь веб-страница запускает на GPU что угодно: нейросети, физические симуляции, научные расчёты, обработку видео в реальном времени. Это уже не просьба нарисовать 3D-модельку. Это тысячи ядер в полном распоряжении. Делай что хочешь.

Разница между WebGL и WebGPU как между калькулятором и компьютером. Калькулятор считает арифметику. Компьютер выполняет произвольный код. WebGL рисовал картинки и попутно сливал данные через canvas fingerprinting. WebGPU делает всё, на что способен GPU, и сливает такое, о чём создатели canvas-рандомизации и не мечтали. К слову, canvas-рандомизация уже побеждена. Это отдельная история.

В спецификации W3C есть фраза, ради которой и писалась эта статья. Прямо в тексте стандарта сказано: вычислительные конвейеры WebGPU открывают доступ к GPU без ограничений фиксированной аппаратной логики, что создаёт дополнительный риск уникальной идентификации устройств. Авторы спецификации вписали предупреждение в стандарт. Потом утвердили стандарт. Повесили табличку с надписью Осторожно, не заперто и ушли спать.

Три слоя GPU-фингерпринтинга

Фингерпринтинг через GPU не сводится к одному приёму. Их три, и каждый копает глубже предыдущего.

Визитная карточка

Самый простой слой. Вызываете navigator.gpu.requestAdapter(), получаете список поддерживаемых функций и лимитов. Максимальный размер буфера, число рабочих групп, форматы текстур, потолок привязок. Каждая видеокарта отдаёт свой набор цифр. Как визитка: имя, должность, компания. Не уникальный идентификатор, но крепкая отправная точка.

WHOX проверяет это в тестах F04 по битовой маске WebGPU features и F05 по сигнатуре лимитов. Данных хватает, чтобы определить семейство GPU с точностью до поколения. Nvidia RTX 3060 и RTX 4070 выдают разные наборы лимитов. Intel UHD 770 и Apple M2 GPU выдают совершенно разные наборы features. Зато два RTX 3060 выдадут одно и то же.

Тут-то и начинается второй слой.

Голос

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

Исследование WiSec 2025 авторов Hohentanner, Kemmerzell и Florschütz под названием Unveiling Privacy Risks in WebGPU закрепило этот подход. Аппаратный фингерпринтинг через поведение GPU при вычислениях. Суть вот в чём: атака обходит canvas-шум, подмену User-Agent, все существующие механизмы приватности. Она измеряет не то, что GPU отвечает, а то, как GPU пашет. Переидентифицирует устройства между сессиями. Очистили cookies? Бесполезно. Сменили профиль? Бесполезно. Зашли через приватное окно? Всё так же бесполезно. GPU работает одинаково, какие бы переключатели приватности вы ни дёргали.

WHOX ловит это как F21: тайминговый отпечаток GPU.

ДНК

Глубокий слой. Drawnapart. Производственный разброс между чипами, которые должны быть близнецами.

В аппаратной безопасности этот принцип называется PUF, Physical Unclonable Function, физически неклонируемая функция. PUF используют для аутентификации чипов, защиты от подделок, генерации криптографических ключей. Идея проста до безобразия: каждый транзистор на кристалле несёт крохотные отклонения от чертежа. Порог срабатывания отличается на доли милливольта. Длина дорожки плывёт на нанометры. Толщина оксида затвора гуляет на ангстремы. Эти отклонения единственны в своём роде и неповторимы, как отпечатки пальцев. Нельзя скопировать. Нельзя подделать. Нельзя стереть.

У вашего GPU есть такое же несмываемое родимое пятно от процесса изготовления. Никакое обновление ПО его не сдвинет. Никакая настройка браузера его не замаскирует. Никакой VPN его не скроет. Личность, впечатанная в кремний.

Тот самый принцип, который изобрели для защиты оборудования, теперь работает против вас. Замок стал отмычкой.

Вот что здесь по-настоящему существенно. Drawnapart доказал всё это через WebGL. Через фрагментные шейдеры, через графический конвейер, через косвенные замеры. WebGPU открывает прямой доступ к compute pipeline с куда более точными таймингами, чем позволяет рендеринг-ориентированный API WebGL. Представьте Drawnapart, только не с микрофоном через стену, а с микрофоном у вас на столе.

67-процентный прирост трекинга от Drawnapart через WebGL может стать убийственным через вычислительные шейдеры WebGPU. Никто пока не опубликовал Drawnapart-через-WebGPU. Порох и фитиль лежат рядом. Просто спичку ещё никто не чиркнул.

Когда фингерпринтинг становится шпионажем

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

Баннер, который читает ваш пароль

Команда TU Graz в составе Giner, Czerny, Gruber, Rauscher, Kogler, De Almeida Braga и Gruss опубликовала на AsiaCCS 2024 работу Generic and Automated Drive-by GPU Cache Attacks from the Browser. Протестировали 11 настольных GPU: 2 AMD RX, 9 Nvidia GTX/RTX/Quadro. Их атака самонастраивающаяся: примитивы автоматически подстраиваются под конкретную видеокарту. Три демонстрации.

Межклавишный тайминг. Когда вы набираете текст, GPU перерисовывает экран. Курсор мигает, появляется символ, рендерится свежий кадр. Эти изменения оставляют след в кэше GPU. Вычислительный шейдер WebGPU, спрятанный в фоновом рекламном баннере, ловит эти тайминговые паттерны. Из совершенно другой вкладки. Никакой связи между вкладками. Никакого JavaScript-доступа к событиям клавиатуры. Никаких запрошенных разрешений.

Вы вводите пароль в интернет-банке. Баннерная реклама читает его через видеокарту.

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

Скрытый канал передачи данных на скорости 10.9 кБ/с. Две вкладки обмениваются информацией через кэш GPU, минуя все механизмы изоляции браузера.

Всё это из песочницы WebGPU. Менее 15 минут на drive-by атаку. Зашли на сайт, попили кофе, ушли. Дело сделано.

Шпион в вычислительном стеке

WebGPU-SPY авторов Ferguson, Wilson и Naghibijouybari, тоже AsiaCCS 2024, стала первой атакой по побочным каналам через кэш GPU, где вычислительный стек шпионит за графическим. Вычислительный шейдер молча наблюдает, что рендерит графический конвейер. Из другой вкладки или страницы. Точность идентификации сайтов из топ-100: 90%.

Как это устроено: графический конвейер рисует страницу. Разные страницы оставляют разные паттерны нагрузки на GPU. Эти паттерны отпечатываются в состоянии кэша. Вычислительный шейдер считывает кэш и по нему определяет, что именно рисует графический конвейер.

У вас открыты две вкладки. Одна с банком. Другая с новостным порталом и рекламой. Реклама знает, что вы смотрите банковский сайт. Не потому что прочитала cookies. Потому что GPU ей проболтался. Ненароком, через общий кэш.

Сообщник: WebAssembly

Классический JavaScript-фингерпринтинг имеет ахиллесову пяту: его можно засечь. Расширения браузера разбирают вызовы API, сигнатуры скриптов, паттерны поведения. Privacy Badger, uBlock Origin, CanvasBlocker: все они ищут знакомые уловки. Нашли подозрительный вызов canvas.toDataURL() и заблокировали. Засекли перебор шрифтов и пометили. Система дырявая, но работает.

WebAssembly ломает её в щепки.

Исследование The WASM Cloak на arXiv от августа 2025 показало: злоумышленники конвертируют JavaScript-код фингерпринтинга в бинарный формат WASM, чтобы замаскировать вредоносную логику. Расширения браузеров не умеют заглядывать внутрь WASM-модулей так, как заглядывают в JS. JavaScript это текст, который можно прочитать и разобрать. WASM это скомпилированный бинарный код. Непрозрачный, нечитаемый, невидимый для нынешних средств защиты. Антифингерпринтинговые инструменты ищут знакомые вызовы JavaScript API. WASM обходит всю эту модель обнаружения целиком. Как если бы полиция научилась прослушивать телефоны, а преступники перешли на язык жестов.

Параллельно исследователи из Бен-Гуриона, Guri и Fibert, опубликовали на arXiv в мае 2025 работу Browser Fingerprinting Using WebAssembly. Они показали обратную сторону медали: тайминговые различия самого WASM позволяют отличать браузеры на базе Chromium, Chrome от Edge, даже при полной подмене User-Agent. Менее 1% ложных срабатываний. Метод опирается на CPU-зависимые операции, работу с памятью и I/O-активность. Проверено на Intel, AMD, ARM. Вдобавок метод выводит на чистую воду виртуальные машины: VMware, KVM, VirtualBox. WHOX проверяет это как F22: тайминговый отпечаток WASM.

Теперь сложите два факта вместе. WASM прячет код фингерпринтинга от обнаружения. WebGPU считывает аппаратные сигналы, которые невозможно подделать программно. Вместе они порождают фингерпринтинг, работающий как непрозрачный скомпилированный код, который измеряет поведение железа, не подвластное ни одной программной настройке. Нынешние инструменты защиты не видят ни код, потому что WASM, ни данные, потому что железо. Идеальное преступление: невидимый вор крадёт то, что невозможно спрятать.

W3C: мы знали, и всё равно выпустили

В июне 2022 года группа W3C по интересам приватности, Ping, подняла Issue #3101 о поверхности фингерпринтинга в WebGPU. Начались обсуждения. Два с половиной года. Комментарии, встречи, предложения, контрпредложения.

В декабре 2024 года рабочая группа WebGPU вынесла вердикт: предоставление аппаратного доступа к GPU в принципе создаёт поверхность для фингерпринтинга.

Они признали проблему. Они всё равно выпустили стандарт. Не потому что не могли починить. Починить значит выпотрошить API.

Это осознанное архитектурное решение. Полезность WebGPU перевешивает приватность пользователей. В браузере нужен инференс нейросетей: так быстрее, чем гонять данные на сервер. Нужен 3D-рендеринг для архитектуры, медицины, образования. Нужны научные вычисления для исследований, которые раньше требовали нативных приложений. Всё это обоснованно. Всё это полезно.

Побочный эффект при этом: каждый пользователь WebGPU идентифицируем по определению. Авторы стандарта говорят прямым текстом. Дверь не заперта. Замок ставить не планируют.

Проверка WHOX C40 ловит побочный эффект этого решения: парадокс WebGPU vs WebGL. Если ваш браузер поддерживает WebGPU, круг сужается. Если не поддерживает, круг тоже сужается. Само наличие или отсутствие API уже является фингерпринтом. А C54 фиксирует ещё один артефакт: расхождение между бэкендом WebNN и программным рендерером. Когда браузер заявляет один уровень GPU-поддержки, а по факту использует другой. Типичная ситуация для виртуальных машин, серверов с проброшенным GPU и антидетект-браузеров с кривой эмуляцией.

Подробнее о том, куда движется фингерпринтинг после WebGPU, читайте в нашем обзоре WebGPU, QUIC и eBPF.

Что вы можете сделать

Если честно? Немного.

Chrome: WebGPU включён по умолчанию с версии 113. Отключить через chrome://flags/#enable-unsafe-webgpu можно, но сломается растущая куча сайтов, использующих WebGPU для AI-инференса и графики. Google продвигает WebGPU как фундамент для ИИ в браузере. Выключать его значит плыть против течения.

Антидетект-браузеры подменяют API-уровень: features, лимиты, имя адаптера. Визитка поддельная. Тайминги выполнения и кремниевые вариации при этом подменить не выйдет. Это не данные, которые отдаёт браузер. Это физика, которую браузер не контролирует. Серверный фингерпринтинг приходит к тому же ответу другой дорогой.

Tor Browser пока не поддерживает WebGPU. Это защищает от WebGPU-фингерпринтинга, зато создаёт очередной бинарный сигнал: у этого пользователя нет WebGPU. В мире, где WebGPU есть у 70%+ десктопных Chrome, отсутствие API выдаёт вас громче, чем его наличие.

Проверить, что ваш GPU рассказывает миру, можно на whox.com/test/.

FAQ

WebGPU-фингерпринтинг работает в инкогнито? Да. Инкогнито чистит cookies и историю. GPU остаётся тем же куском кремния. Его родимое пятно не зависит от режима браузера. Так же как не зависит от погоды за окном.

Можно ли подменить данные GPU? API-уровень, features и лимиты, да. Тайминги и кремниевые вариации, нет. Это как подделать голос в текстовом чате, но не по телефону. WHOX проверяет оба слоя и находит расхождения.

Это только для десктопов? Нет. Мобильные GPU от Qualcomm Adreno, ARM Mali и Apple несут тот же производственный разброс. WebGPU работает в мобильном Chrome и Safari. Drawnapart тестировался на смартфонах и работал.

Баннерная реклама правда может украсть мой пароль через GPU? TU Graz показала извлечение межклавишного тайминга через кэш GPU из вычислительного шейдера WebGPU в лабораторных условиях. На 11 настольных видеокартах. Атака академическая, в дикой природе не замечена. Пока. Все ингредиенты на столе.

W3C планирует исправить проблему? W3C прямо заключил в декабре 2024 года, что поверхность фингерпринтинга неотделима от аппаратного доступа к GPU. Исправить значит убрать API. Убирать API никто не собирается. Слишком много денег поставлено на кон.


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


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

webgpugpufingerprinting

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