EFF 的 Cover Your Tracks 只测量你的浏览器有多独特,不测量它是否安全或被伪造。这篇文章讲清楚这个分数能说明什么、不能说明什么。
运行 EFF 的 Cover Your Tracks,你会得到一行听起来相当吓人的结果:你的浏览器指纹在最近测过的几千个样本中是独一无二的。人很容易把这行字读成一张成绩单——「你及格了」或「你不及格」,评判的是你整体的隐私状况。但它不是。这个数字只回答一个问题:你这套浏览器信号组合有多容易被识别出来。这比「我安全吗」「我的浏览器有没有说谎」「我有没有受到追踪防护」这些更大的问题要窄得多。把唯一性数字当成这些更大问题的答案,是人们误读自己结果的最常见方式。
核心要点
- 「N 分之一」这个数字测量的是唯一性——有多少其他被测浏览器和你的信号组合完全一致——而不是安全性、诚实度,也不是整体防护水平。
- Cover Your Tracks 在这个数字旁边还会给出另外几项结果,但那些是独立的追踪器拦截通过/未通过测试,并不参与唯一性数字的计算。
- 「N 分之一」是相对于该工具自己最近的样本而言的,不是相对于整个互联网;背后的数学是信息论意义上的熵,以比特计算,近似独立的信号其比特数可以相加。
- 罕见的指纹不等于被伪造的指纹,常见的指纹也不等于隐私安全——唯一性和连贯性是完全不同的两个维度。
- 如果反指纹扩展本身就成了那个罕见的、可识别的信号,它反而会让你的唯一性分数变得更差,而不是更好。
- 这个工具只能看到 JavaScript 在你浏览器内部能读到的东西——它没有办法把这些信息和你的连接实际来自哪个 IP 做比对。
「N 分之一」到底是什么意思
Cover Your Tracks(EFF 早期 Panopticlick 研究项目的继任者)会收集一批浏览器可读的信号——比如你的 User-Agent 字符串、已安装字体、Canvas 与 WebGL 输出、屏幕几何参数——然后检查它最近的其他访问者当中,有多少人上报了和你完全相同的组合。如果最近这批样本里没有人和你一样,它就把你的指纹标记为「唯一」;如果有几百个人和你一样,它就会报告这个群体规模。
同一个页面上,这个数字旁边还并排放着另外几项结果,把它们和唯一性区分开,问题就解决了一半。除了指纹之外,Cover Your Tracks 还会跑几项「通过/未通过」的追踪器拦截测试:模拟的追踪广告有没有被拦下、隐形的追踪信标有没有被拦下、你的浏览器会不会对承诺遵守 Do Not Track 的域名放行;如果这些追踪器加载了但 Cookie 被拦掉,则记为「部分防护」。每一项的具体做法,EFF 都写在方法说明里。这些测试评的是你的内容拦截器,并不参与「N 分之一」的计算——后者只由指纹信号算出。把整个页面当成一个综合成绩来读,混乱就是从这里开始的。
唯一性数字背后的数学是熵,以比特为单位:一个信号只有在它足够「令人意外」时才有信息量,而近似独立的信号会按比特数相加的方式合并。EFF 自己写的这篇底层数学科普短文,很值得一读:信息论与隐私入门。关于单个信号的「比特」如何合并成一个数字,以及一个舒适的匿名集大小是什么样子,我们在浏览器指纹熵与匿名集详解一文中讲过完整的机制。
最容易让人搞错的地方是分母。「N 分之一」是相对于Cover Your Tracks 最近测量过的那批人群而言的,不是相对于地球上的每一个浏览器。会主动去找指纹检测工具来跑的人,本来就比普通网民更在意隐私,而且这个工具的采样窗口是有限的。你相对整个互联网的真实罕见程度,任何单一工具的数字都无法告诉你——但作为一个相对信号,这个数字依然有用,而且就它实际测量的东西而言,它是诚实的。
常见的误读:罕见不等于可疑,常见不等于安全
最大的一个误解,是把唯一性直接等同于对可信度的判决。无论从哪个方向看,这套逻辑都不成立。
一台完全原生的浏览器——不装任何扩展、全部默认设置、字体就是操作系统自带的那套——依然可能因为一块高端小众显卡、一种地区性键盘布局,或者一个不常见的显示器分辨率,而得到很高的唯一性分数,同时完全没有被篡改过的痕迹。这台浏览器没有任何东西是假的,它只是一个不太常见、但每一项都如实上报的组合。Cover Your Tracks 上的高唯一性,是一个隐私问题——你容易被跨站点识别出来——而不是欺诈或伪造的信号。
这是和连贯性完全不同的一个维度:浏览器的各项信号是否彼此吻合、是否符合真实实现应有的行为。CreepJS 的测谎模型专门用来抓这类矛盾——比如一个声称是某浏览器的 User-Agent,配上一个只可能来自另一种浏览器的渲染签名。一台浏览器可以同时既完全连贯又高度唯一,也可以看起来完全常见却依然过不了连贯性检查。《指纹检测工具为何对你各执一词》更详细地拆解了这种区别,还讲到了第三类——厂商匿名度综合评分,它把唯一性、连贯性和不公开的启发式规则混在一起,得出一个无法直接和前两者比较的专有数字。
反过来的误解同样常见:以为一个「常见」的结果就意味着自己不会被追踪。共同的指纹只是堵掉了一条路径——基于唯一性的识别。Cookie、登录状态和账号级追踪根本不在乎你的 Canvas 哈希有多独特,这些也完全不会出现在唯一性数字里。
反直觉的结果:扩展可能让你变得更糟
有一点会让装了隐私扩展、指望分数变好的人感到意外:分数有时反而会变差。
大多数反指纹扩展的做法,是伪造或随机化几项信号——一个假的 Canvas 哈希、一个被抖动过的 WebGL 参数、被屏蔽的字体枚举。如果这种伪造行为本身是可以被检测出来的——而它往往真的可以,因为只有一小部分访问者会装这个特定扩展——那么「这个浏览器的 Canvas API 明显被改过」本身就会变成一个罕见的、可识别的信号。装完一个扩展之后,你反而可能比装之前更容易被指纹识别,而不是更不容易。我们的《浏览器扩展的隐私风险》一文讲了扩展在指纹之外带来的更广泛的信任问题。
另一种思路是走「一致化」而不是「随机化」:与其隐藏你的值,不如让所有人的值都变得一样。这正是 Firefox 的 privacy.resistFingerprinting(在 Tor 浏览器中始终开启)背后的设计——具体它伪造了哪些内容、为什么它直接针对人群规模而不是试图伪装某一个信号,可参见《resistFingerprinting 详解》。它之所以有效,是因为有一个庞大且步调一致的人群共同使用它——人群本身就是防护。一个人单独跑一套自己特有的随机化方案,背后没有这样一个人群;这也正是为什么同样自称「反指纹」的两种做法,会落在唯一性分数的两端。
分数看不见的地方:浏览器之外的一切
Cover Your Tracks 读取的每一个信号,都来自你浏览器自身的 JavaScript 环境。这带来了一个结构性的硬限制:它没有办法把浏览器声称的内容,和服务器实际观察到的连接情况做比对。
Intl.DateTimeFormat().resolvedOptions().timeZone 告诉脚本的,只是你的操作系统被配置成上报哪个时区——它对你的流量走了什么路由完全不知情。一台浏览器完全可以在通过另一个大洲的 VPN 出口节点连接的同时,上报一套完全合理、内部自洽的时区与语言组合,而一个纯浏览器端的指纹检测根本没有渠道注意到这一点。要抓住这一点,需要第二次、服务端侧的观测:把连接实际来自的 IP,和浏览器自称的内容做比对。《时区与语言泄露:当浏览器与 IP 自相矛盾》完整讲述了这套机制,而 BrowserInsight 的 VPN/代理检测正是围绕纯浏览器端分数补不上的网络侧这一半构建的。
这不是 Cover Your Tracks 的缺陷——它只是完全落在了一个页面自身 JavaScript 所能观察到的范围之外。了解这个边界的存在很重要,这样一个干净的唯一性结果就不会被误读成你整套设置在其他方面也都健康。
看懂结果,而不是过度解读
Cover Your Tracks 的结果,对它专门要回答的那一个问题非常有用:相对于该工具最近看到的样本,你当前这套浏览器可读信号组合有多容易被识别出来。可以搭配运行 BrowserInsight 的指纹检测,看看这个数字背后的各项信号被单独摊开呈现——Canvas、WebGL、字体、navigator 属性——而不是被压缩成一个数字;再配合 VPN/代理检测,获得任何纯浏览器端工具都无法单独完成的网络侧比对。
常见问题
Cover Your Tracks 分数很高,是不是说明我的浏览器被伪造或入侵了?
不是。这只说明你这套信号组合,在该工具最近测过的浏览器中并不常见——这是一个关于可追踪性的隐私问题,不是任何东西被伪造或损坏的信号。一台完全真实、未经修改的浏览器,只要拥有一套不常见的硬件或字体组合,同样可能得到很高的唯一性分数。
Cover Your Tracks 显示我的浏览器能拦截追踪器,唯一性分数是不是就没问题了?
不是,这是两组各自独立的结果。追踪器拦截测试检查的是:模拟的广告、隐形信标,以及承诺遵守 Do Not Track 的域名,你的拦截器是怎么处理的。而「N 分之一」只由你的指纹信号算出。一台浏览器完全可能每一项拦截测试都通过,同时依然高度唯一——因为拦掉一个追踪器的请求,并不会改变你的 Canvas、字体和屏幕参数向那些确实加载成功的页面上报什么。
为什么我装了隐私扩展之后,唯一性分数反而变差了?
因为这个扩展的伪造或随机化行为本身可能变成一种罕见的、可被检测出来的模式,而罕见正是这个分数所测量的东西。像 Firefox 的 resistFingerprinting 这类一致化防护之所以能避开这个问题,是因为它让一大群人上报完全相同的值,而不是让一台浏览器的值和所有人都不一样。
同一台浏览器,两次运行 Cover Your Tracks 会不会得到不同的数字?
会,因为「N 分之一」这个数字是相对于该工具最近测量过的那批人群而言的,而这批样本会随时间变化。这个结果反映的是你相对于那个特定样本的罕见程度,而不是一个固定不变的通用罕见度数字。
Cover Your Tracks 会检测 VPN 或基于 IP 的追踪吗?
不会。它只读取 JavaScript 在你浏览器内部能拿到的信号,没有办法看到服务器实际观察到的连接来源 IP。要做时区或语言与 IP 归属地的比对,需要像 VPN/代理检测这样的服务端工具。


