WebGPU 指纹:继 Canvas 和 WebGL 之后的下一代
WebGPU 暴露的硬件能力比 Canvas 与 WebGL 加起来还要深入,而且已在 Chrome、Edge 和 Firefox 中可用。它能揭示什么,以及为何将在两三年内取代旧有指纹技术。
WebGPU 于 2023 年随 Chrome 113 发布。到 2026 年,它已在所有主流平台的所有主流浏览器中可用。WebGL 是包装 OpenGL ES 2.0 的浏览器 API,而 WebGPU 不同:它是通往现代 GPU API 的直接接口——Linux 上的 Vulkan、macOS 上的 Metal、Windows 上的 DirectX 12。
这改变了浏览器能就底层硬件查询到的内容。Canvas 与 WebGL 指纹依赖渲染输出,而 WebGPU 允许直接向 GPU 本身查询能力,暴露出渲染输出至多只能暗示的架构细节。
对指纹识别而言,这是信号质量的阶跃式提升。
WebGPU 暴露而 WebGL 不暴露的内容
WebGL 的诊断面很有限。其中最有用的是 WEBGL_debug_renderer_info 扩展,它返回厂商与渲染器字符串——这些字符串常被反检测浏览器伪造,或被隐私功能剥离。
WebGPU 提供 GPUAdapter 与 GPUAdapterInfo 对象,数据丰富得多:
- Vendor —— GPU 厂商标识(NVIDIA、AMD、Intel、Apple、Qualcomm)。
- Architecture —— GPU 架构系列(Ampere、RDNA 2、Xe-LP、Apple M2、Adreno)。
- Device —— 在可用时给出的具体型号。
- Description —— 供人阅读的字符串。
除身份信息外,WebGPU 还暴露 GPU 上限值,即硬件的精确数值能力。它们可通过 GPUSupportedLimits 接口查询,包含 30 多项数值属性:
- 最大纹理尺寸 ——
maxTextureDimension2D - 最大缓冲区大小 ——
maxBufferSize - 最大绑定组数量 ——
maxBindGroups - 计算工作组的最大维度
- 最大顶点属性数量
- 存储缓冲区的对齐要求
这些数值都由 GPU 驱动依据硬件能力设定。不同世代的 GPU,哪怕来自同一厂商,其上限组合也各不相同。2019 年的 GPU 与同系列 2023 年的 GPU 上限并不一样。
为何更难伪造
反检测浏览器通过拦截 API 调用并修改结果来伪造 Canvas 与 WebGL。Canvas 返回的是渲染像素的哈希——浏览器可以先渲染,再把哈希换掉。WebGL 被查询的只是少量字符串,可以整体替换。
WebGPU 则不同。其 API 面很大,方法与属性数以百计,每一次调用都需要一个说得通的返回值。伪造层必须做到:
- 在所有数值上限之间呈现一致的身份——一块自称 NVIDIA RTX 4090 的 GPU,必须返回与该硬件相符的每一个上限值。
- 应付真实的计算执行。WebGPU 允许运行计算着色器。若伪造层声称高性能却交付缓慢的计算,这种落差可通过计时被检测出来。
- 跟上驱动更新带来的变化。每个 GPU 驱动版本的上限都略有差异,静态的伪造表会随着新驱动发布而过时。
真实硬件免费提供了这一切。伪造硬件则需要维护一个数据库,记录每个 GPU 型号、每个驱动版本的真实上限组合——这是一项持续的维护负担,多数反检测浏览器至今尚未承担。
把计算性能当作指纹
WebGPU 允许在浏览器中运行任意计算着色器。这意味着检测系统可以执行标准化负载并测量其耗时。
哈希破解基准测试、矩阵乘法,或与渲染相邻的计算任务,其运行速度都由底层硬件决定。两位访客声称使用同一 GPU 型号,却交付出不同的计算性能,那就有人在硬件上说谎。
这一技术完全绕开了静态指纹伪造。访客可以声称任意 GPU 字符串,却无法声称自己并不具备的计算性能。
代价在于用户体验。后台运行计算着色器会消耗 GPU 周期,可能被感知为卡顿。这限制了该技术的使用力度——通常作为对可疑会话的一次性检查,而非持续监控。
特性可用性作为信号
WebGPU 通过 GPUAdapter.features 暴露可选特性。部分 GPU 支持特定扩展:
timestamp-query—— 需要带性能计数器的现代 GPUshader-f16—— 半精度浮点,在移动 GPU 上常见texture-compression-bc—— Block Compression,桌面端标准texture-compression-etc2—— 移动端纹理格式texture-compression-astc—— 移动端纹理格式
特性集合按 GPU 型号是确定的。一台自称具备移动端 Adreno 特性的 Windows 机器会露馅。一台自称支持桌面独有压缩格式的移动设备同样会露馅。
与 WebGL 的一致性
在 WebGPU 之前,浏览器只有一个主要的 GPU 查询面:WebGL。如今有了两个,而它们必须彼此吻合。
WebGL 与 WebGPU 暴露的是同一块底层 GPU,两者的回答必须一致。一个通过 WebGL 报告 NVIDIA RTX 4080、却返回与集成 Intel GPU 相符的 WebGPU 上限的浏览器,在真实硬件上根本不可能存在。
跨 API 的一致性是另一个检测信号。伪造一个 API 很直接;让两个 API 相互自洽地伪造则困难得多——而当前的反检测浏览器大多做不到这一点。
WebGPU 暴露的操作系统与驱动信息
除 GPU 身份外,WebGPU 还会暴露图形栈的上下文:
- 在 Windows 上,WebGPU 可以显示当前使用的是 Direct3D 11 还是 Direct3D 12,这与系统版本和驱动年代相关。
- 在 macOS 上,所支持的 Metal 版本会透露 macOS 版本,因为 Metal 版本随系统更新一同发布。
- 在 Linux 上,Vulkan 的支持级别会透露发行版与驱动来源(例如闭源 NVIDIA 与开源 Mesa)。
这些信号没有一个是直接的,每一个都需要解读。但合在一起,它们勾勒出底层软件栈的图景,而这幅图景应当与所报告的浏览器指纹相互吻合。不一致即指向伪造。
进入检测栈的时间线
2026 年,WebGPU 指纹尚未成为主流检测技术,原因有三:
- 浏览器支持仍在趋于稳定。 Firefox 的 WebGPU 于 2024 年发布,但特性覆盖有限;Safari 的 WebGPU 同样在 2024 年发布,但上限与 Chrome 不同。检测系统需要足够广的覆盖,才能倚重 WebGPU 信号。
- 真实用户中的 WebGPU 支持仍不完整。 较旧的设备没有支持 WebGPU 特性的 GPU。若检测系统惩罚没有 WebGPU 的访客,就有可能拦截使用五年前硬件的正常用户。
- 反检测浏览器尚未构建完整的 WebGPU 伪造能力,因此基于 WebGPU 的信号目前对那些自认为已抹去痕迹的高水平攻击者尤其有效。随着检测普及、伪造工具跟进,这一局面将会改变。
两到三年的落地周期是现实的。到 2027–2028 年,WebGPU 信号对机器人检测的重要性将与今日的 WebGL 相当。对检测团队来说,问题只是何时开始采集 WebGPU 数据——答案是现在,这样等到这些信号成为主力时,历史基线已经就位。
这对防守方意味着什么
Canvas 指纹是成熟技术,WebGL 指纹也是成熟技术。二者都正被反检测工具积极伪造,且成效尚可。
WebGPU 指纹则是一项年轻的技术,伪造工具还没有跟上。这就打开了一个窗口——大概 18 到 36 个月——在此期间,WebGPU 信号能够干净地把真实用户与高水平机器人区分开。这个窗口值得投入。
它产生的信号在结构上也比 Canvas 或 WebGL 更难伪造。渲染可以被拦截,计算性能不能。特性集合可以撒谎,但无法在整个 API 面上保持一致。每一代指纹技术都在抬高伪造成本,而 WebGPU 抬高得相当可观。
对于在 2026 年及以后认真对待机器人检测的平台来说,信号正在向 WebGPU 转移。