2026 年的 Canvas 与 WebGL 指纹识别
基于 GPU 的指纹识别现状:Chrome 隐私沙盒带来了什么变化、我们如何应对,以及为何硬件信号仍是最稳定的标识符。
Canvas
和
WebGL
指纹识别自 2010 年代初以来一直是设备识别的基石。但随着 Chrome 的
隐私沙盒
(Privacy Sandbox)计划、Firefox 的增强型跟踪保护,以及 Safari 的智能防跟踪,这一格局已发生显著变化。以下是 2026 年基于 GPU 的指纹识别现状——发生了什么变化、我们如何应对,以及为何这些信号依然不可或缺。
Chrome 隐私沙盒带来的变化
Chrome 的隐私沙盒自 2024 年起逐步推出,引入了若干影响指纹识别的变化。其中最重要的是分区存储(partitioned storage)计划,它降低了基于 cookie 的跟踪的有效性,但并不直接影响 canvas 或 WebGL 指纹识别。
不过,Chrome 已开始试验 canvas 噪声注入——向 canvas 像素数据添加微小的随机扰动,以阻止精确指纹识别。启用后,相同的绘制指令在每次执行时都会产生略有不同的像素输出。这破坏了那种依赖精确可复现性的朴素哈希式 canvas 指纹识别。
适应 Canvas 噪声
我们应对 canvas 噪声注入的方式,是将 canvas 信号从精确匹配切换为基于相似度的匹配。我们不再对整幅 canvas 像素数据计算单一哈希,而是从不同区域和绘制操作中提取多个特征向量。
噪声注入通常很小——每帧只改动几个像素。通过在更粗的粒度上提取特征(将 canvas 划分为多个区域并计算聚合统计量),我们能够在噪声之下识别出底层的硬件特征。我们的跨会话匹配算法使用余弦相似度来比较这些特征向量,并调校阈值,使其在接受硬件一致的变化的同时拒绝不同的设备。
WebGL:仍是一座金矿
尽管 canvas 指纹识别面临新的挑战,WebGL 指纹识别基本不受隐私计划的影响。WebGL API 暴露了硬件参数——最大纹理尺寸、着色器精度格式、受支持的扩展——这些都是 GPU 固有的,无法在不破坏 WebGL 功能的情况下被轻易扰动。
Chrome 曾讨论过限制对 WebGL 渲染器和厂商字符串的访问(用诸如 “GPU” 这样的通用标签替换具体的 GPU 名称),但这一变化尚未被广泛部署。即便部署了,我们查询的另外数十个 WebGL 参数仍能提供高度可区分的识别信号。
GPU 作为硬件锚点
基于 GPU 的指纹识别之所以依然强大,根本原因在于它读取的是由 GPU 芯片、驱动和渲染管线在物理层面决定的硬件特征。这些特征并不是可以轻易更改的软件选择——它们是硅片如何被设计和制造的结果。
一台搭载 NVIDIA RTX 4070 的设备总会报告特定的最大纹理尺寸、特定的着色器精度和特定的扩展支持,因为这些值由 GPU 架构决定。改变这些值的唯一办法是使用不同的 GPU 或不同的驱动——而对大多数用户来说,驱动变更相对少见。
Canvas 渲染:超越像素哈希
现代 canvas 指纹识别已超越了简单的像素哈希。我们使用专门设计的绘制操作来放大与硬件相关的渲染差异。用特定字体渲染文本会调动字体光栅化器;带有特定控制点的贝塞尔曲线会调动 GPU 的曲线细分;带有特定色标的渐变会调动颜色混合管线。
通过选择那些能在不同 GPU 型号间最大化方差、同时在同一 GPU 上重复运行时最小化方差的绘制操作,我们创造出的 canvas 测试比早期指纹识别库所用的简单“文本加图形”方法更具区分度、也更稳健。
WebGL 着色器指纹识别
我们部署的一项较新技术是 WebGL 着色器指纹识别。通过编译特定的着色器程序并查询其编译后的属性(精度、优化级别、指令数),我们能提取有关 GPU 着色器编译器的信息——这是另一项与硬件相关、在不同 GPU 系列间各不相同的特征。
这项技术在区分那些基础 WebGL 参数相似的设备时尤为有价值。两种不同的 GPU 型号可能支持相同的最大纹理尺寸,但它们的着色器编译器对相同的着色器源码会产生不同的编译输出。
隐私考量
基于 GPU 的指纹识别,与所有指纹识别一样,必须被负责任地使用。我们将这些信号用于正当目的——欺诈防范、机器人检测和账户安全——而非用于跨站跟踪或广告。我们的云托管部署方式确保指纹数据保留在客户自己的基础设施上,从而消除向第三方共享数据。
隐私格局将持续演变。浏览器可能会引入更多影响 GPU 指纹识别的保护措施。我们的策略是持续适应——在旧信号被限制时寻找新的、与硬件相关的信号,同时保持客户所依赖的准确性和稳定性。