数字足迹追踪的底层原理
从 TLS 握手到 canvas 渲染——我们如何在不使用 cookie 或存储的情况下,通过 130 多个被动信号重建设备的数字足迹。
每台接入互联网的设备都会留下一串技术痕迹——数字足迹。在 tracio.ai,我们在单次页面加载期间从 130 多个被动信号重建这一足迹,而不依赖 cookie、localStorage 或任何形式的持久化客户端存储。本文将详细说明这一过程的工作原理。
信号采集层
当我们的 JavaScript 代理在访客浏览器中加载时,它会同时跨多个类别开始采集信号。Canvas 渲染、WebGL 参数查询、AudioContext 处理、字体枚举以及 navigator 属性读取全部并行运行。在现代硬件上,整个采集过程在 50 毫秒内完成。
关键洞见在于:每个信号都捕获设备硬件与软件栈的一个不同侧面。Canvas 渲染反映 GPU、驱动和字体渲染引擎。WebGL 参数暴露显卡型号及其能力。AudioContext 揭示音频 DSP 处理浮点运算方式的差异。Navigator 属性报告 CPU 核心数、内存、平台以及语言设置。
上个月,我们的团队在 20 亿次事件上进行了测量:采集时间的中位数为 38 毫秒,第 99 百分位为 52 毫秒。我们其实一开始尝试的是最朴素的方法——串行采集信号。结果慢了 40 倍。带超时栅栏的并行采集,是我们最早做对的架构决策之一。
TLS 指纹:第一层
早在我们的 JavaScript 执行之前,浏览器就已经通过 TLS 握手泄露了大量信息。Client Hello 消息包含浏览器支持的加密套件、所使用的 TLS 扩展、偏好的椭圆曲线以及接受的签名算法。这些信息由浏览器的 TLS 库决定,在不同浏览器家族、版本和操作系统之间差异显著。
我们使用 JA4 哈希来捕获这一 TLS 指纹——它是 JA3 的现代替代方案,提供了更好的粒度和跨版本稳定性。仅凭 JA4 哈希就能区分 Chrome、Firefox 与 Safari,并常常能将识别收窄到具体的浏览器版本区间。结合我们的客户端信号,它提供了一个极难伪造的交叉验证层。
Canvas 与 GPU 指纹
Canvas 指纹利用了这样一个事实:不同 GPU 在渲染相同绘制指令时,会产生细微的像素级差异。Canvas API 让我们能够绘制一个精心设计的场景——多种字体的特定文本字符串、带有特定坐标的几何图形,以及带有精确颜色停止点的渐变——然后对生成的像素数据计算哈希。
这些渲染差异源自不同 GPU 型号和驱动版本之间在抗锯齿算法、子像素渲染、颜色混合和字体微调(hinting)上的差异。即便是两台使用相同 GPU 型号的设备,如果运行不同的驱动版本或操作系统,也可能产生不同的 canvas 输出。这使得 canvas 哈希成为我们最具区分度的信号之一。
WebGL 硬件画像
WebGL API
暴露的图形子系统信息远远超出 renderer 和 vendor 字符串。我们会查询最大纹理尺寸、着色器精度格式、支持的扩展、视口尺寸,以及数十个在不同 GPU 型号和驱动配置下各不相同的参数。
这些参数的组合构成了一份详尽的硬件画像。例如,配备 NVIDIA RTX 4070 的设备所报告的最大纹理尺寸、着色器精度和扩展支持,都会与配备 AMD RX 7800 XT 的设备不同。这份硬件画像本质上是稳定的——它不会随浏览器更新而改变,只会随硬件或驱动变更而改变。
音频处理指纹
Web Audio API 提供了另一个依赖硬件的信号来源。我们创建一个振荡器节点,将其连接到动态压缩器,并测量输出缓冲区。不同音频硬件和操作系统在浮点精度、DSP 实现和重采样算法上的差异,会在输出中产生可测量的变化。
音频指纹的唯一性中等,但稳定性极佳。除非用户更换音频硬件或重装操作系统,否则音频处理管线很少发生变化。这使得音频信号成为我们多层识别系统中宝贵的锚点。
信号融合与身份解析
原始信号经加密后传输到我们的服务器,设备识别引擎在那里通过三层哈希系统对其进行处理。硬件级信号(canvas、WebGL、音频)构成第 1 层——稳定的核心身份。浏览器级信号(特性检测、CSS 属性、媒体能力)构成第 2 层,通过跨会话匹配来处理浏览器更新带来的预期漂移。易变信号(user agent、时区、语言)构成第 3 层,为置信度评分做出贡献,但不主导身份判定。
融合算法会按每个信号的唯一性和稳定性对其加权。命中一个罕见的 canvas 哈希,其权重远高于命中一个常见的屏幕分辨率。这种加权方式确保即使部分信号发生变化,识别依然保持准确。
无存储,无 cookie
我们系统的一项关键设计原则是:识别不依赖任何形式的客户端存储。我们不设置 cookie,不写入 localStorage,也不将 IndexedDB 用于追踪目的。访客 ID 完全由设备的固有特征推导得出——硬件、软件栈、网络配置。这意味着识别能够在清除 cookie、无痕模式,乃至重装浏览器之后依然有效。
以架构保障隐私
由于我们只采集技术性的浏览器属性——不涉及浏览历史、表单数据或个人内容——隐私影响极小。W3C 指纹识别指南 概述了负责任地使用浏览器信号的最佳实践,我们的架构与这些原则相一致。采用云端托管部署时,所有处理都在你自己的基础设施上进行。任何访客数据都不会到达我们的服务器。这一架构使得遵守 GDPR、CCPA 及其他隐私法规变得轻而易举。