指纹测试会给你一个数字,并称其为熵的比特。然后人们把这些数字相加,得出结论:自己是互联网上少数几个人之一。这两步都以有趣的方式错了。这些比特并不独立,测试也不是人口普查。

1. 不要叠加相互依赖的信号

先从观察值之间的关系而不是数量入手,这也是 W3C 的指纹识别指南在讨论可能分布时所要求的。两个均衡的二元属性以最简单的形式展示了这套算术。

RelationshipPossible observed pairs
Independent properties00, 01, 10, 11
The second always copies the first00, 11

四种等可能状态携带两个比特;两种等可能状态携带一个比特。如果第二个属性总是复制第一个,报告仍然列出两个字段,信息仍然是一个比特。把同一件事读两遍并不是第二次区分。

真实特征很少是精确复制。语言、区域设置和时区之间的相关性会被独立性假设忽略,因此简单相加会高估结果。

2. 追问分数描述的是哪个总体

测试可以诚实地报告某个组合在它自己的观察中很罕见。那只是关于某一天、某份属性清单和某种计算下的一个样本的陈述。它不是你浏览器的永久属性,也不是对世界上每台设备的计数。浏览器更新本身就会改变答案。

先读方法再看标题:收集了什么、数值如何分桶、样本有多少,以及罕见性结论是否来自产出该分数的同一个面板。基于一小撮自选样本算出的数字,描述的只是那个样本。

3. 把识别与身份分开

持久账户或 Cookie 无需任何聪明的指纹识别就能把你的访问串起来,而更换 VPN 出口并不会触及它。指纹可以在不点名背后之人的情况下认出回访的浏览器。这是两种不同的能力,而一个分数把它们混为一谈。当服务想要身份时,通常最先伸手去拿的是那些无聊的工具。

这也解释了为什么同一间办公室的两个人,对粗糙指纹来说可能一模一样,对登录来说却完全不同。

4. 注意无论如何都会让数字变化的因素

设置会变,扩展会变,浏览器版本也会改变究竟哪些东西可被观测。一些防护会有意把测试本会视为区分项的字段归一化。另一些则按会话随机化某个值,这表现出来是不稳定,而不是匿名。

每次访问都变化的指纹更难跨会话关联,它也无法说明你有多罕见。这两个事实都属于解读的一部分。

5. 想清楚你要达成什么

在安装任何东西之前先写下目标。如果目标是阻止某家广告网络的跨站跟踪,Cookie 与存储卫生加上内容拦截器就完成了大部分工作。如果目标是规避某一项特定相关性,就点名那个特征。如果目标是难以被单独挑出,诚实的做法是主流配置,而不是罕见配置。

反直觉之处在于:追逐罕见反而让你更容易被挑出来。与众不同的配置正是指纹脚本希望找到的东西。融入人群与最大化一个印出来的数字,是两种不同的目标。

相关文章