WebGPU 指纹识别:下一代 GPU 追踪
WebGPU API 如何暴露 GPU 适配器详情用于指纹识别,以及如何在浏览器引擎级别控制 GPU 身份信号。
简介
WebGPU 是 WebGL 的继任者,为渲染和计算工作负载提供现代、低级的 GPU 硬件访问。随着浏览器采用 WebGPU,它引入了新的指纹识别面,注重隐私的用户需要了解。该 API 暴露 GPU 适配器信息,包括供应商、架构、设备描述、特性集和详细的能力限制。这些信息比 WebGL 提供的更丰富、更结构化,使其成为关注浏览器指纹识别的人日益关注的问题。
对于隐私研究人员、自动化工程师以及任何关注浏览器指纹识别的人来说,WebGPU 代表了设备身份泄漏的重要新来源。本文解释为什么 WebGPU 对你的隐私很重要,以及 BotBrowser 如何通过其配置文件系统和 --bot-config-webgpu 标志控制 WebGPU 身份信号。
隐私影响
WebGPU 是一个相对较新的 API(自 Chrome 113 版本起发布),但其指纹识别影响已经很显著。虽然 WebGPU 规范在设计时有一些隐私考虑,包括默认降低分辨率的适配器信息,但可用信号的组合仍然提供有意义的熵,可用于追踪。
WebGPU 暴露的 GPU 信息包括供应商、架构和设备字段。虽然这些故意比 WebGL 的原始渲染器字符串不那么详细,但它们仍然区分 GPU 系列。不同的 GPU 供应商、集成与独立 GPU 以及不同的架构都产生不同的值,缩小你的设备配置范围。
除了基本适配器信息外,WebGPU 还暴露了详细的能力限制集:最大纹理尺寸、最大缓冲区大小、最大计算工作组大小等数十项。这些限制在 GPU 供应商、架构和驱动版本间变化。这些限制值的组合创建了通常比适配器信息本身更细粒度的 GPU 能力指纹。
浏览器隐私团队的早期研究指出,WebGPU 的限制值可以区分同一供应商系列内的特定 GPU 代。来自同一制造商但不同产品线的两个 GPU 报告不同的限制,即使它们共享相同的供应商标识符。这种细粒度对隐私来说令人担忧,因为它将识别缩小到特定硬件型号。
日益增长的重要性
随着 WebGPU 采用率增加,特别是用于 AI 推理、高级可视化、游戏和创意应用,该 API 将成为现代浏览器中的标准。这意味着 WebGPU 指纹识别将变得更加普遍,WebGPU 的缺失本身可能成为区分信号。主动保护至关重要。
为什么这对你的隐私很重要
GPU 身份暴露
你的 GPU 是计算机中最独特的硬件之一。供应商、架构和能力限制的组合创建了一个难以更改且跨浏览会话持久的硬件指纹。WebGPU 使这些信息可以被任何网站直接查询,无需任何权限提示或用户通知。
跨 API 关联
一个关键的隐私问题是 WebGPU 和 WebGL 之间的关联。两个 API 访问相同的 GPU。如果一个 API 报告的 GPU 身份与另一个不匹配,或者两个 API 之间的能力配置不一致,不匹配本身成为强追踪信号。查询两个 API 的网站可以检测到不一致,这就是为什么任何保护方法必须同时处理两个 API。
特性集作为指纹
通过 WebGPU 可用的 GPU 特性集(如纹理压缩格式、深度剪裁、时间戳查询和着色器能力)在 GPU 型号和驱动版本间变化。支持特性的特定组合作为额外的指纹维度,补充适配器信息和能力限制。
渲染输出变化
与 WebGL 一样,WebGPU 渲染产生 GPU 特定的输出。计算着色器、渲染管线和纹理操作都在数值级别产生因 GPU 架构不同而变化的结果。虽然 WebGPU 的规范在精度方面比 WebGL 更严格,但实现差异仍然存在并可用于指纹识别。
常见保护方法及其局限性
禁用 WebGPU 目前是最简单的保护。由于 WebGPU 相对较新,大多数 Web 内容不需要它。然而,随着采用率增加,禁用它将变得越来越不实际。WebGPU 的缺失也将随着 API 成为标准而成为区分信号,可能使你的浏览器更容易被识别而非更少。
阻止单个 API 方法只解决部分指纹。特性集和能力限制仍然可用并提供显著的熵。部分保护通常比没有保护更糟糕,因为它创建了不一致。
JavaScript 级别修改适配器信息改变了报告的供应商和架构,但不改变实际的能力限制或渲染行为。检查适配器信息和限制的网站可以立即检测到不一致。表面级方法创建新的检测信号而不是移除现有的。
标准化限制(为所有限制报告最低要求值)会减少指纹面但可能破坏依赖更高能力的 WebGPU 应用,降低用户体验。
有效的方法需要从单一一致的来源控制适配器信息、特性、限制和渲染行为。这正是 BotBrowser 提供的。
BotBrowser 的引擎级方法
BotBrowser 通过其配置文件系统在 Chromium 引擎级别控制 WebGPU 身份,确保所有 WebGPU 相关信号都是一致和真实的。这不是 JavaScript 覆盖。BotBrowser 修改浏览器的内部 GPU 报告,因此原生 API 本身产生配置文件一致的结果。
完整适配器信息控制
当加载配置文件时,适配器信息在所有字段上匹配配置文件的 GPU:供应商、架构、设备标识符和描述。这些值对应从实际设备捕获的真实 GPU 配置。没有可能表明身份已被修改的合成或通用值。
特性集控制
WebGPU 适配器报告的特性集精确匹配配置文件的 GPU。只有配置文件 GPU 支持的特性被列出,配置文件 GPU 支持的所有特性都存在。这确保特性集与适配器信息、能力限制和渲染行为一致。
能力限制控制
所有能力限制值从配置文件派生。最大纹理尺寸、缓冲区大小、计算工作组大小和所有其他限制匹配配置文件 GPU 的实际能力。这些不是默认最小值。它们对应配置文件中特定的 GPU 型号,反映真实世界的硬件特征。
WebGL-WebGPU 一致性
BotBrowser 确保 WebGPU 报告的 GPU 身份与 WebGL 报告的一致。两个 API 指示相同的 GPU 供应商,能力配置文件兼容。这种跨 API 一致性消除了影响其他保护方法的主要检测向量。
渲染输出控制
与 --bot-noise-seed 结合时,WebGPU 渲染输出变得确定性且与配置文件设备一致。计算着色器结果和渲染管线输出反映配置文件 GPU 的数值行为,提供对基于渲染的指纹识别的保护。
配置和使用
基本 WebGPU 保护
加载配置文件时自动提供 WebGPU 保护:
chrome --bot-profile="/path/to/profile.enc" \
--user-data-dir="$(mktemp -d)"
WebGPU 配置选项
BotBrowser 通过 --bot-config-webgpu 标志给你对 WebGPU 行为的显式控制:
# 使用配置文件的 WebGPU 设置(默认,推荐)
chrome --bot-profile="/path/to/profile.enc" \
--bot-config-webgpu=profile
# 使用真实系统 GPU(当需要实际 GPU 性能时)
chrome --bot-profile="/path/to/profile.enc" \
--bot-config-webgpu=real
# 完全禁用 WebGPU(移除指纹面)
chrome --bot-profile="/path/to/profile.enc" \
--bot-config-webgpu=disabled
组合 WebGL 和 WebGPU 配置
为获得最强的指纹保护,同时配置两个 GPU API:
# 两个 API 都使用配置文件数据(推荐以保持一致性)
chrome --bot-profile="/path/to/profile.enc" \
--bot-config-webgl=profile \
--bot-config-webgpu=profile \
--bot-noise-seed=42
这确保了两个 API 之间完整的 GPU 身份一致性,通过噪声种子实现确定性渲染输出。
Playwright 集成
const { chromium } = require('playwright');
const browser = await chromium.launch({
executablePath: '/path/to/botbrowser/chrome',
args: [
'--bot-profile=/path/to/profile.enc',
'--bot-config-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-config-webgpu=profile'
]
});
const page = await browser.newPage();
await page.goto('https://example.com');
验证
使用配置文件启动 BotBrowser 后,验证 WebGPU 保护:
适配器信息检查。 验证供应商、架构和设备匹配配置文件的目标 GPU。它们应反映配置文件的设备,而不是你的实际硬件。
特性集检查。 确认列出的特性匹配配置文件 GPU 的预期特性。
限制检查。 验证几个限制值并确认它们匹配配置文件 GPU 的能力。值应特定于配置文件中的 GPU 型号,而不是通用最小值。
WebGL-WebGPU 一致性。 比较 WebGL 报告的 GPU 供应商与 WebGPU 报告的。它们应指示相同的 GPU 系列,确保跨 API 一致性。
跨会话稳定性。 使用相同配置文件在多个会话中运行相同的 WebGPU 查询。所有值每次都应相同,表明你的 GPU 指纹是稳定且可复现的。
最佳实践
-
保持 WebGL 和 WebGPU 设置一致。 两个 API 都暴露 GPU 身份。同时使用
--bot-config-webgl=profile和--bot-config-webgpu=profile以确保跨 API 一致性。两个 API 之间不匹配的 GPU 身份是强追踪信号。 -
使用包含 WebGPU 数据的配置文件。 并非所有配置文件都包含 WebGPU 信息(较旧的配置文件可能早于 WebGPU)。使用包含 WebGPU 适配器数据的最新配置文件以确保完整保护。
-
如果不需要可以考虑禁用 WebGPU。 如果你的用例不需要 WebGPU,
--bot-config-webgpu=disabled完全移除指纹面。在 WebGPU 采用率仍在增长时这是有效的选择,但随着 API 成为标准可能变得不太可行。 -
与
--bot-noise-seed结合以控制渲染输出。 适配器信息和限制从配置文件确定性提供。渲染输出也需要噪声种子以实现确定性。两者一起使用提供最全面的 GPU 指纹保护。
常见问题
Q: WebGPU 在所有浏览器中都可用吗? A: 截至 2026 年初,WebGPU 在 Chrome/Edge(自 113 版本起)、Firefox(在某些版本中需要标志)和 Safari(部分支持)中可用。可用性因平台而异。BotBrowser 配置文件根据配置文件的设备指定 WebGPU 是否应该可用,给你真实世界浏览器配置的准确表示。
Q: WebGPU 指纹识别与 WebGL 指纹识别比较如何? A: WebGPU 提供更结构化的适配器信息和更详细的能力限制,而 WebGL 提供原始渲染器字符串和基于渲染的指纹。两个 API 对全面的 GPU 指纹保护都很重要。BotBrowser 通过其配置文件系统保护两者。
Q: 我可以使用 BotBrowser 进行 WebGPU 计算工作负载吗? A: 可以。BotBrowser 的 WebGPU 控制在身份和能力报告级别操作。实际计算执行使用你的真实 GPU 硬件以获得性能。你的工作负载获得完整的 GPU 性能,同时保持受保护的指纹身份。
Q: 如果我的配置文件不包含 WebGPU 数据会怎样?
A: 如果配置文件不包含 WebGPU 数据且 --bot-config-webgpu=profile 已设置,WebGPU 可能不可用(匹配不支持 WebGPU 的设备)。如果需要 WebGPU 访问,使用包含 WebGPU 数据的较新配置文件。
Q: 禁用 WebGPU 会影响 WebGL 吗?
A: 不会。WebGL 和 WebGPU 是独立的 API。禁用 WebGPU 不影响 WebGL 功能。每个都由自己的 --bot-config-* 标志控制。
Q: WebGPU 计算着色器结果是否受噪声种子影响?
A: 设置 --bot-noise-seed 时,可能用于指纹识别的渲染和计算输出包含确定性变化。不涉及指纹敏感面的正常计算工作负载不受影响。
总结
WebGPU 通过适配器信息、特性集、能力限制和渲染输出引入了新的详细 GPU 指纹面。随着 API 成为标准,控制这些信号对全面的指纹保护至关重要。BotBrowser 通过其配置文件系统在 Chromium 引擎级别控制所有 WebGPU 身份信号,确保与 WebGL 身份和整体设备配置文件的一致性。--bot-config-webgpu 标志提供对 WebGPU 行为的显式控制,从完整的配置文件驱动保护到完全禁用。使用 BotBrowser,你的 GPU 身份是真实的、跨 API 一致的,并与整体浏览器指纹完全一致。
相关主题请参阅什么是浏览器指纹识别、WebGL 指纹保护、Canvas 指纹识别和确定性浏览器行为。