大规模测量与真实世界中的浏览器指纹识别缓解
Tom Ritter1, Fatih Kilic2, Frederik Braun1, Elisa Luo3, Geoffrey M. Voelker3, Stefan Savage3, Christoph Kerschbaumer1
1Mozilla Corporation · 2University of Toronto · 3UC San Diego
这是 Mozilla 开展的一项浏览器指纹识别研究的配套网站。在近 2500 万 Firefox 正式版用户的帮助下,我们测量了浏览器实际可被识别的程度,找出了哪些特征使其独一无二,并据此设计了随 Firefox 143 发布的指纹识别防护。在这里,你可以阅读论文及其主要发现,浏览 PDF 因篇幅所限未能容纳的完整附录数据,下载保护隐私的聚合数据与分析代码,了解数据的收集方式,并运行一个交互式测试,将你自己的浏览器与所测量的用户群体进行对比。如果你有数据能够回答的问题,这里还有一个讨论板,可用于提出后续研究。
浏览器指纹识别是现代 Web 上已知的跟踪机制,但其对用户的真实有效性一直难以衡量。为构建稳健的防护,我们在一个庞大且无偏差的群体中测量了唯一性,以确定哪些单项指标会导致用户独一无二。这些测量使用了多种隐私保护技术(如 OHTTP),以确保没有任何单个用户能在整个 Web 上被识别或跟踪。我们内置于 Firefox 的防护在避免 Web 兼容性问题的同时,将可唯一识别的用户比例从 75% 降至 46%。

论文摘要
Web 浏览器指纹识别已成为现代 Web 上的关键跟踪机制,但其真实有效性以及现有各类缓解措施中哪些能在规模化场景下产生价值,仍未被充分理解。
在本文中,我们基于来自近 2500 万 Firefox 正式版用户的真实遥测数据,开展了一项关于浏览器指纹识别的大规模研究。该数据集使我们能够在群体规模上量化用户唯一性,并识别出哪些特征对这种唯一性贡献最大。
我们的分析表明,可指纹识别性在很大程度上由一小组高影响特征及其组合所驱动,而非众多独立测量的累积。基于这些洞见,我们依据对唯一性和群体结构的影响提出并评估了指纹识别防护,并设计了数据驱动的缓解措施。
这些随 Firefox 143 发布的防护将可唯一识别的用户比例从 75% 降至 46%,同时保持 Web 兼容性,证明在主流浏览器中实现可指纹识别性的实际降低是可行的。
我们的主要发现
以下是我们要通过这篇论文以及我们工作的更广泛范围向你呈现的内容。
指纹识别测试网站可以从你的浏览器中提取看似无穷无尽的测量项。如果一名用户拥有唯一指纹,通常不是因为有某一项测量,但也不是因为 20 或 30 项测量。真正使用户独一无二的,是少数几项指标。
事实上,这非常接近 80/20 法则。具体来说,在 Fingerprint Pro(我们建模的指纹识别器中判别最严格的一个)视为唯一的全部用户中,80% 的用户仅凭 8 项指标就已唯一,而该指纹识别器总共收集超过 50 项指标。Signifyd 收集的指标更多,但判定为唯一的用户更少:它所视为唯一的用户中,80% 会在 9 项指标后被识别出来,尽管它收集了超过 80 项指标。
每当有人在描述“有多少用户是唯一的”时引用一个单一百分比,你都应该怀疑。因为这把多个行为差异很大的不同人群压缩在了一起。
首先,作为基准,你的操作系统始终会暴露给指纹识别方。我们始终在 Web 兼容性的约束下工作,而对用户的操作系统撒谎会破坏快捷键、导致下载错误以及其他问题。所以,如果我们知道网站无论如何都会知道你的真实操作系统,我们就可以用它来划分人群并单独分析。
而当你这样做时,你会看到每个操作系统的表现都不同,因为它们有着不同的重要指标。诚然,既要对工作做简明总结,又要提供四组数字,是非常困难的——所以就连我们也落入了只提供一个数字的陷阱,就像我们在上一段所做的那样。但每当我们给出一个单一百分比时,某处都有按操作系统拆分的那个数字,而这样做之后,你会看到每个操作系统的表现都不同。
把某个指标的所有结果拿来直接计算香农熵,实在太容易了——这是该文献中的标准衡量尺度。但正如我们所展示的,高香农熵并不能可靠预测指纹识别影响。
此前的分析计算了多少人是唯一的,但没有分析其他人——那些不唯一的人。所有这些其他人可能是共享同一个指纹的 100 万用户,也可能是 50 万个不同指纹、每个由 2 人共享——差别很大。
我们使用 Simpson Index(又称 Herfindahl–Hirschman Index)来量化这种差异,并比较不同的队列集合(共享指纹)。这让我们比较不同指纹识别防御的有效性时,不仅基于它们消除了多少唯一性,还基于它们让多少用户群体彼此合并。
例如,两种不同的保护措施都能将唯一用户占比降低约 2.1 个百分点。但一种将队列得分提高 56%,另一种只提高 13%。仅从唯一性判断,两种防御看起来同样有效;而队列改善却差异显著。
保护措施的影响并不均匀,而且差异并不小。例如,钳制可用屏幕分辨率会使 macOS 的累积唯一性降低 25.3 个百分点,但对其他三个平台只降低 0 到 3 个百分点。对所有用户取平均后,这 25 个百分点的下降会缩小到 3.5——对一个平台极其重要的保护,在总体上看可能显得微不足道。
这又是为什么按操作系统划分并分析数据如此重要的另一个原因。
让用户报告相同的值会让他们看起来更相似,但永远不会让所有人看起来都一样。一些用户仍会突出,而在访客群体较小的网站上,这种情况会更糟。标准化改善了情况,但仍应与随机化配合使用。随机化在有效时非常强,但总能被检测并绕过。两者都无法独自承担提供隐私的重任。
将指纹识别值与用户的硬件及其他特征相关联,让我们能够识别为什么某些测量值在用户之间不同。了解根本原因让我们能够构建影响范围更广的保护措施,并保护那些否则会作为少数群体而突出的小群体用户。
解决这些差异已经在 Android 上为图像渲染、Web Audio 和数学运算带来了更一致的输出,还有更多根本原因正在调查中。
严格模式造成的破坏是延迟显现的,而延迟掩盖了原因。开启更严格的模式是一次性操作——但出问题的网站之后才出现,没有任何东西把两者联系起来。从用户的角度看,这个网站在 Firefox 里不能用,他们完全不知道为什么,并感到沮丧。我们看到一份又一份报告,人们发帖求助、困惑不解——尽管他们已经采取了具体行动,启用了某个隐藏设置,让自己选择启用严格的指纹识别保护。
用户没有意识到,是他们更改的某个设置导致了破坏,也不知道如何修复——因此,一项会破坏网络的保护措施也会连带破坏浏览器。我们根据实测影响和兼容性来选择和调优缓解措施。对于默认设置而言,兼容
- 针对不同保护阶段生成的指纹列表,每个建模的指纹器一份,用户的操作系统和区域设置未做遮蔽。
- 按指标统计值频率的聚合表,按操作系统拆分
- 按指标统计值频率的聚合表,并与其他指标的值相关联,同样按操作系统拆分
- 对渲染的 canvas 图像进行详细分析,以便进行比较
在指纹列表中,由于遥测数据的收集方式,无法从测量用户特征的网站重建这些指纹。生成后,文件被重新随机排序,任何出现次数少于 100 次的区域设置都被匿名化处理。
在聚合表中,如果在单个操作系统的群体中任何值的观察次数少于 100 次,则该值不予公布——因此发布的数据描述的是群体,而非个人。
在 canvas 比较中,提供了原始 canvas 渲染结果,但它们与其他用户数据没有任何关联。任何唯一的 canvas 渲染结果都不提供;只提供哈希值。
为了验证和探索,用于处理数据并执行不同分析的代码可供审查。它还包含为论文捕获、逆向工程和建模的特定指纹脚本。
未来研究
对这个数据集可以提出的问题远多于我们已经提出的。有些问题我们选择不追究,有些我们只是没有想到,还有些更适合由其他人而非我们来研究。
有一个讨论板用于提出后续分析。有两类问题值得发布:
- 可从已发布的聚合数据中回答的问题。任何人都可以运行这些分析——各操作系统的分布已发布,分析工具包是开放的。尽管如此,仍请发布问题,这样工作不会重复,结果也能落在其他人可以找到的地方。
- 需要原始数据的问题。这些问题我们必须自己运行,因为底层的 ping 数据是我们永远无法发布的。描述你想知道什么以及为什么!需要明确的是,我们不再拥有原始数据,但未来可能会进行重新收集,届时我们可以进行分析。我们不能承诺运行所有问题,有些问题我们会拒绝,因为我们不希望帮助构建更好的指纹器。