Снятие отпечатков WebGPU: следующее поколение отслеживания GPU
Как WebGPU API раскрывает детали адаптера GPU для снятия отпечатков и как контролировать сигналы идентичности GPU через загруженный профиль браузера.
BotBrowser Team
Нужна поддерживаемая продуктовая документация?
У этой статьи есть соответствующая страница в центре документации. Используйте docs для каноничного сценария настройки, актуальных флагов и долгосрочной справки.
Статья о том, что WebGPU раскрывает о GPU: поля адаптера, набор функций, лимиты и результаты вычислений. BotBrowser задаёт эти значения через профиль и --bot-webgpu, но не гарантирует доступность API и не доказывает идентичность оборудования.
Краткое резюме
Сверяйте сведения адаптера (вендор, архитектуру, устройство), функции и лимиты WebGPU с профилированным GPU и с тем, что сообщает WebGL. Для детерминированного вывода рендеринга сочетайте профиль с --bot-noise-seed.
Содержание руководства
- Смотреть видео
- Введение
- Влияние на конфиденциальность
- Почему это важно для вашей конфиденциальности
- Распространенные подходы к защите и их ограничения
- Подход BotBrowser через загруженный профиль
- Настройка и использование
- Проверка
BotBrowser документирует выбираемые режимы WebGPU для контролируемых тестов; он не гарантирует доступность, сокрытие всех сигналов или идентификацию оборудования.
Смотреть видео
В этом англоязычном видео показано, что страница узнаёт из navigator.gpu.requestAdapter() ещё до запуска любого шейдера. Локальная лабораторная страница объявляет три отчёта об адаптере, один из них без адаптера, и один и тот же вызов читает каждый. Затем та же страница читает собственный отчёт браузера в официальном Google Chrome 155 на Windows, где есть адаптер и восемнадцать возможностей, и в Chrome 154 на Ubuntu, где вызов возвращает null. Запуск был один, причина не проверялась, поэтому видео показывает лишь, что отчёты могут различаться, и ничего о других системах. Профиль BotBrowser не используется. Звук английский.
Введение
WebGPU является преемником WebGL, обеспечивая современный, низкоуровневый доступ к оборудованию GPU для задач рендеринга и вычислений. По мере принятия WebGPU браузерами он вводит новую поверхность снятия отпечатков, о которой нужно знать пользователям, заботящимся о конфиденциальности. API раскрывает информацию об адаптере GPU, включая вендора, архитектуру, описание устройства, набор функций и детальные лимиты возможностей. Эта информация богаче и более структурирована, чем то, что предоставляет WebGL, что делает её растущей проблемой для всех, кто ценит свою конфиденциальность в сети. В контролируемой среде BotBrowser может сохранять информацию об адаптере, функции и лимиты WebGPU согласованными с загруженным профилем; он не может заставить неподдерживаемое оборудование GPU или WebGPU вести себя как другое устройство.
Для исследователей конфиденциальности, инженеров автоматизации и всех, кого беспокоит снятие отпечатков браузера, WebGPU представляет значительный новый источник утечки идентичности устройства.
Влияние на конфиденциальность
WebGPU является относительно новым API (доступен в Chrome с версии 113), но его последствия для снятия отпечатков уже значительны. Хотя спецификация WebGPU была разработана с некоторыми соображениями конфиденциальности, включая информацию об адаптере с уменьшенным разрешением по умолчанию, комбинация доступных сигналов все еще обеспечивает значимую энтропию, которая может использоваться для отслеживания.
При сравнении запишите Chrome 113, vendor, architecture и maxTextureDimension2D; это наблюдаемые поля, а не идентификатор оборудования.
Информация о GPU, раскрываемая через WebGPU, включает поля вендора, архитектуры и устройства. Хотя они намеренно менее детальны, чем необработанные строки рендерера WebGL, они все же различают семейства GPU. Разные вендоры GPU, встроенные и дискретные GPU и разные архитектуры создают различные значения, сужающие конфигурацию вашего устройства. О том, что представляет собой адаптер и когда он может быть недоступен, читайте в статье Информация об адаптере WebGPU и конфиденциальность пользователя: в ней разобраны границы доступности и запасные варианты с учётом конфиденциальности.
Помимо базовой информации об адаптере, WebGPU раскрывает детальный набор лимитов возможностей: максимальные размеры текстур, максимальные размеры буферов, максимальные размеры вычислительных рабочих групп и десятки других. Эти лимиты варьируются между вендорами, архитектурами и версиями драйверов GPU. Комбинация этих значений лимитов создает отпечаток возможностей GPU, который часто более гранулярен, чем сама информация об адаптере.
Ранние исследования команд конфиденциальности браузеров отметили, что значения лимитов WebGPU могут различать конкретные поколения GPU в рамках одного семейства вендора. Два GPU от одного производителя, но разных продуктовых линеек сообщают разные лимиты, хотя и разделяют один идентификатор вендора. Этот уровень гранулярности вызывает беспокойство для конфиденциальности, потому что он сужает идентификацию до конкретных моделей оборудования.
Растущая важность
По мере роста принятия WebGPU, особенно для инференса AI, продвинутой визуализации, игр и креативных приложений, API станет стандартным для современных браузеров. Это означает, что снятие отпечатков через WebGPU станет более распространенным, а отсутствие WebGPU само по себе может стать отличающим сигналом. Проактивная защита необходима.
Почему это важно для вашей конфиденциальности
Раскрытие идентичности GPU
Ваш GPU - одна из наиболее отличительных частей оборудования в вашем компьютере. Комбинация вендора, архитектуры и лимитов возможностей создает аппаратный отпечаток, который трудно изменить и который сохраняется между сессиями просмотра. WebGPU делает эту информацию напрямую запрашиваемой любым веб-сайтом без какого-либо запроса разрешений или уведомления пользователя.
Межпротокольная корреляция
Критическая проблема конфиденциальности - корреляция между WebGPU и WebGL. Оба API обращаются к одному GPU. Если идентичность GPU, сообщаемая одним API, не соответствует другому, или если профили возможностей несогласованы между двумя API, само несоответствие становится сильным сигналом отслеживания. Веб-сайты, запрашивающие оба API, могут обнаружить несоответствия, поэтому любой подход к защите должен решать оба API одновременно. О том, как WebGL раскрывает ту же идентичность GPU и что означает там согласованность профиля, читайте в статье Фингерпринтинг WebGL: контроль идентичности GPU: в ней разобраны семейства сигналов WebGL и распространённые подходы к защите.
Набор функций как отпечаток
Набор функций GPU, доступных через WebGPU (таких как форматы сжатия текстур, ограничение глубины, запросы временных меток и возможности шейдеров), варьируется между моделями GPU и версиями драйверов. Конкретная комбинация поддерживаемых функций действует как дополнительное измерение снятия отпечатков, дополняющее информацию об адаптере и лимиты возможностей.
Вариации вывода рендеринга
Как и WebGL, рендеринг WebGPU создает GPU-специфичный вывод. Вычислительные шейдеры, конвейеры рендеринга и операции с текстурами создают результаты, которые варьируются на числовом уровне между архитектурами GPU. Хотя спецификация WebGPU строже относительно точности, чем WebGL, различия в реализации все еще существуют и могут использоваться для снятия отпечатков. О том, как подтвердить эти сигналы рендеринга при программном и аппаратном рендеринге, читайте в статье Проверка приватности в разных графических backend: в ней описана матрица рендеринга для проверки Canvas, WebGL и WebGPU.
Распространенные подходы к защите и их ограничения
Отключение WebGPU в настоящее время является простейшей защитой. Поскольку WebGPU относительно нов, большая часть веб-контента его не требует. Однако по мере роста принятия его отключение станет все более непрактичным. Отсутствие WebGPU также станет отличающим сигналом по мере стандартизации API, потенциально делая ваш браузер более идентифицируемым, а не менее.
Блокировка отдельных методов API решает только часть отпечатка. Набор функций и лимиты возможностей остаются доступными и обеспечивают значительную энтропию сами по себе. Частичная защита часто хуже, чем отсутствие защиты, потому что создает несоответствия.
Модификация на уровне JavaScript информации об адаптере изменяет сообщаемого вендора и архитектуру, но не меняет реальные лимиты возможностей или поведение рендеринга. Веб-сайт, проверяющий и информацию об адаптере, и лимиты, может сразу обнаружить несоответствие. Поверхностные подходы создают новые сигналы обнаружения вместо устранения существующих.
Стандартизация лимитов (сообщение минимальных требуемых значений для всех лимитов) уменьшила бы поверхность отпечатка, но может нарушить работу WebGPU-приложений, зависящих от более высоких возможностей, ухудшая пользовательский опыт.
Эффективный подход требует контроля информации об адаптере, функций, лимитов и поведения рендеринга из единого когерентного источника. Именно это обеспечивает BotBrowser.
Подход BotBrowser через загруженный профиль
BotBrowser предоставляет поведение WebGPU через параметры запуска, связанные с профилем. Они описывают наблюдаемые страницей значения в поддерживаемой сборке; они не добавляют отсутствующую возможность хоста и не гарантируют принятие результата приложением.
Полный контроль информации об адаптере
При загрузке профиля информация об адаптере соответствует профилированному GPU по всем полям: вендор, архитектура, идентификатор устройства и описание. Эти значения соответствуют реальной конфигурации GPU, захваченной с реального устройства. Нет синтетических или универсальных значений, которые могли бы указать на модификацию идентичности.
Контроль набора функций
Набор функций, сообщаемый адаптером WebGPU, точно соответствует профилированному GPU. Перечислены только функции, поддерживаемые профилированным GPU, и все функции, которые поддерживает профилированный GPU, присутствуют. Это обеспечивает согласованность набора функций с информацией об адаптере, лимитами возможностей и поведением рендеринга.
Контроль лимитов возможностей
Все значения лимитов возможностей выводятся из профиля. Максимальные размеры текстур, размеры буферов, размеры вычислительных рабочих групп и все остальные лимиты соответствуют реальным возможностям профилированного GPU. Это не минимальные значения по умолчанию. Они соответствуют конкретной модели GPU в профиле, отражая реальные характеристики оборудования.
Согласованность WebGL-WebGPU
BotBrowser обеспечивает согласованность идентичности GPU, сообщаемой WebGPU, с тем, что сообщает WebGL. Оба API указывают на одного вендора GPU, и профили возможностей совместимы. Эта межпротокольная согласованность устраняет основной вектор обнаружения, влияющий на другие подходы к защите.
Контроль вывода рендеринга
В сочетании с --bot-noise-seed вывод рендеринга WebGPU становится детерминированным и согласованным с профилированным устройством. Результаты вычислительных шейдеров и вывод конвейера рендеринга отражают числовое поведение профилированного GPU, обеспечивая защиту от снятия отпечатков на основе рендеринга.
Настройка и использование
Базовая защита WebGPU
Защита WebGPU автоматическая при загрузке профиля:
chrome --bot-profile="path/to/profile.enc" \
--user-data-dir="$(mktemp -d)"
Параметры конфигурации WebGPU
BotBrowser дает явный контроль над поведением WebGPU через флаг --bot-webgpu:
# Использовать настройки WebGPU из профиля (по умолчанию, рекомендуется)
chrome --bot-profile="path/to/profile.enc" \
--bot-webgpu=profile
# Использовать реальный системный GPU для WebGPU (когда нужна реальная производительность)
chrome --bot-profile="path/to/profile.enc" \
--bot-webgpu=real
# Полностью отключить WebGPU (удаляет поверхность снятия отпечатков)
chrome --bot-profile="path/to/profile.enc" \
--bot-webgpu=disabled
Совместная настройка WebGL и WebGPU
Для наиболее сильной защиты отпечатков настраивайте оба GPU API вместе:
# Оба API используют данные профиля (рекомендуется для согласованности)
chrome --bot-profile="path/to/profile.enc" \
--bot-webgl=profile \
--bot-webgpu=profile \
--bot-noise-seed=42
Это обеспечивает полную согласованность идентичности GPU между обоими API с детерминированным выводом рендеринга через шумовое зерно.
Интеграция с Playwright
const { chromium } = require('playwright');
const browser = await chromium.launch({
executablePath: 'path/to/botbrowser/chrome',
args: ['--bot-profile=path/to/profile.enc', '--bot-webgpu=profile', '--bot-noise-seed=42'],
});
const page = await browser.newPage();
await page.goto('https://example.com');
// Проверка соответствия идентичности WebGPU профилю
const gpuInfo = await page.evaluate(async () => {
if (!navigator.gpu) return 'WebGPU not available';
const adapter = await navigator.gpu.requestAdapter();
if (!adapter) return 'No adapter';
const info = await adapter.requestAdapterInfo();
return {
vendor: info.vendor,
architecture: info.architecture,
device: info.device,
features: [...adapter.features],
maxTexture2D: adapter.limits.maxTextureDimension2D,
};
});
console.log('WebGPU identity:', gpuInfo);
Интеграция с Puppeteer
const puppeteer = require('puppeteer');
const browser = await puppeteer.launch({
executablePath: 'path/to/botbrowser/chrome',
defaultViewport: null,
args: ['--bot-profile=path/to/profile.enc', '--bot-webgpu=profile'],
});
const page = await browser.newPage();
await page.goto('https://example.com');
// Ваша идентичность WebGPU теперь защищена профилем
Проверка
После запуска BotBrowser с профилем проверьте защиту WebGPU:
Проверка информации об адаптере. Убедитесь, что вендор, архитектура и устройство соответствуют целевому GPU профиля. Они должны отражать профилированное устройство, а не ваше реальное оборудование.
Проверка набора функций. Подтвердите, что перечисленные функции соответствуют ожидаемым для профилированного GPU. Набор должен быть полным и точным.
Проверка лимитов. Проверьте несколько значений лимитов и убедитесь, что они соответствуют возможностям профилированного GPU. Значения должны быть специфичны для модели GPU в профиле, а не универсальными минимумами.
Согласованность WebGL-WebGPU. Сравните вендора GPU, сообщаемого WebGL, с вендором, сообщаемым WebGPU. Они должны указывать на одно семейство GPU, обеспечивая межпротокольную когерентность.
Стабильность между сессиями. Запустите те же запросы WebGPU в нескольких сессиях с одним профилем. Все значения должны быть идентичны каждый раз, демонстрируя стабильность и воспроизводимость вашего отпечатка GPU.
Лучшие практики
-
Согласовывайте настройки WebGL и WebGPU. Оба API раскрывают идентичность GPU. Используйте
--bot-webgl=profileи--bot-webgpu=profileвместе для обеспечения межпротокольной согласованности. Несовпадающие идентичности GPU между двумя API являются сильным сигналом отслеживания. -
Используйте профили с данными WebGPU. Не все профили включают информацию WebGPU (старые профили могут предшествовать WebGPU). Используйте актуальные профили, содержащие данные адаптера WebGPU, для обеспечения полной защиты.
-
Рассмотрите отключение WebGPU, если не нужен. Если ваш сценарий использования не требует WebGPU,
--bot-webgpu=disabledполностью удаляет поверхность снятия отпечатков. Это допустимый выбор пока принятие WebGPU растет, хотя он может стать менее жизнеспособным по мере стандартизации API. -
Сочетайте с
--bot-noise-seedдля вывода рендеринга. Информация об адаптере и лимиты детерминированы из профиля. Вывод рендеринга также требует шумовое зерно для детерминизма. Использование обоих вместе обеспечивает наиболее комплексную защиту отпечатка GPU. -
Тестируйте доступность WebGPU. Некоторые профили могут не поддерживать WebGPU (соответствуя устройствам без WebGPU). Убедитесь, что ваш профиль включает данные WebGPU, если вашему приложению нужен доступ к WebGPU.
Часто задаваемые вопросы
В: Доступен ли WebGPU во всех браузерах? О: На начало 2026 года WebGPU доступен в Chrome/Edge (с версии 113), Firefox (за флагом в некоторых версиях) и Safari (частичная поддержка). Доступность варьируется по платформам. Профили BotBrowser указывают, должен ли WebGPU быть доступен на основе профилированного устройства, обеспечивая точное представление реальных конфигураций браузера.
В: Как снятие отпечатков WebGPU сравнивается со снятием отпечатков WebGL? О: WebGPU предоставляет более структурированную информацию об адаптере и более детальные лимиты возможностей, в то время как WebGL предоставляет необработанные строки рендерера и отпечатки на основе рендеринга. Оба API важны для комплексной защиты отпечатка GPU. BotBrowser защищает оба через свою систему профилей.
В: Могу ли я использовать WebGPU для вычислительных нагрузок с BotBrowser? О: Да. Контроль WebGPU BotBrowser работает на уровне отчетности идентичности и возможностей. Реальное выполнение вычислений использует ваше настоящее оборудование GPU для производительности. Вы получаете полную производительность GPU для ваших нагрузок, сохраняя защищенную идентичность отпечатка.
В: Что если мой профиль не содержит данных WebGPU?
О: Если профиль не содержит данных WebGPU и установлен --bot-webgpu=profile, WebGPU может быть недоступен (соответствуя устройству без поддержки WebGPU). Используйте более новый профиль с данными WebGPU, если вам нужен доступ к WebGPU.
В: Влияет ли отключение WebGPU на WebGL?
О: Нет. WebGL и WebGPU - независимые API. Отключение WebGPU не влияет на функциональность WebGL. Каждый контролируется своим флагом --bot-*, что дает вам гранулярный контроль над отпечатком GPU.
В: Влияет ли шумовое зерно на результаты вычислительных шейдеров WebGPU?
О: При установке --bot-noise-seed вывод рендеринга и вычислений, который может использоваться для снятия отпечатков, включает детерминированную вариацию. Обычные вычислительные нагрузки, не затрагивающие чувствительные к отпечаткам поверхности, не затрагиваются. Ваши научные или AI-вычислительные нагрузки остаются точными, а ваш отпечаток защищен.
Итоги
WebGPU вводит детальную поверхность наблюдения GPU через информацию об адаптере, наборы функций, лимиты и вывод рендеринга. Флаг --bot-webgpu выбирает документированный режим профиля, реальный или отключенный в поддерживаемых сборках. Сопоставляйте возвращенные значения с WebGL и рабочей нагрузкой приложения и рассматривайте результат как ограниченное наблюдение совместимости и конфиденциальности, а не доказательство физического оборудования или универсальной согласованности.
По связанным темам см. Что такое снятие отпечатков браузера, Защита отпечатка WebGL, Снятие отпечатков Canvas и Детерминированное поведение браузера.
Что добавлено по сравнению со справочной страницей
Справочная страница перечисляет режимы WebGPU. Добавленная матрица сравнивает доступность адаптера, названия функций и лимиты в режимах профиля, реальном и отключенном, затем отдельно проверяет WebGL. Отчет профиля не доказывает выполнение той же нагрузки GPU хоста.
В каждой строке фиксируйте mode, adapter и firstChangedField, чтобы сравнение версий можно было проверить.
Для воспроизводимого запуска сохраните режим, идентификатор профиля, сборку, результат запроса адаптера, имена функций и лимиты, которые получила страница. Запустите один и тот же тест дважды без изменения хоста, затем повторите его, изменив только режим. Нулевой адаптер в отключенном режиме ожидаем; в режиме профиля или реальном режиме сначала проверьте хост и разрешения, прежде чем связывать результат с конфиденциальностью.
При сбое графического приложения сначала решите, нужен ли ему WebGPU или подойдет резервный путь WebGL. Затем сопоставьте записанные адаптер, функции и лимиты с ошибкой приложения и журналами хоста. Это отделяет решение о совместимости от утверждения о физическом GPU или классификации сайта.
Минимальный отчет содержит строку для каждого режима с одним источником и одинаковыми параметрами запроса. Укажите, разрешилось ли обещание адаптера, его класс, число функций и важные лимиты. При изменении значения сохраните обе строки и отметьте первое различающееся поле.
Для передачи результата приложите источник страницы, параметры запроса, профиль, версию, класс хоста и точную изменившуюся строку. Сохраните второй запуск с неизменным хостом как контроль; тогда наблюдение помогает принять решение о совместимости и не превращается в утверждение о человеке или физическом устройстве.
Практический итог
Настраивайте WebGPU и WebGL вместе, чтобы оба API указывали на один GPU с совместимыми профилями возможностей. Принимайте результат, только когда поля адаптера, функции, лимиты и вывод рендеринга совпали с профилем, а разрыв между WebGPU и WebGL считайте дефектом настройки.
Источники
Эта статья входит в руководство: Что такое отпечаток браузера?
Похожие статьи
webgl_debug_renderer_info: что GPU раскрывает страницам
ОтпечаткиИнформация об адаптере WebGPU и конфиденциальность пользователя
ОтпечаткиПроверка приватности в разных графических backend
ОтпечаткиFingerprinting измерения текста: субпиксельное отслеживание
ПлатформаВосстановление после потери устройства WebGPU
ОтпечаткиПриватность браузера между поверхностями: согласованный контекст
Переведите BotBrowser из исследований в продакшн
Используйте эти руководства, чтобы понять модель, а затем перейти к кроссплатформенной валидации, изолированным контекстам и масштабируемому браузерному развертыванию.