← 返回 Tony's Lab
Readout · Privacy / Fingerprinting

指纹,是新的 Cookie?

一篇爆款文章说:Cookie 退了,设备指纹接班。Hacker News 的 81 条评论回了一句:商业上其实没那么好用。两边的证据都值得看——下面把原文要点和评论区的交锋整理在一页里。

原文 royfish.dev · Fingerprints are the new cookies HN 184 分 / 81 条评论 整理 2026-10-12
Uniqueness Readout 点选你的特征,看候选人群塌缩
还能对上你的设备数(全世界) 信息量
80 亿人 0bits
唯一识别一个人所需:≈ 33 bits 当前进度 0 / 33
还没加任何条件:你和几十亿人长得一模一样。

比特数为教学近似值,用来演示"交集越具体、候选池越小";不是实测数据,也不能相加得太认真——真实世界里特征往往相关(贝叶斯),实际信息量低于相加值。

[01]

现象:打开网页,你就有了一个外号

The demo

那篇文章本身就是个演示:页面加载时对你的设备做几项测量,哈希后给你分配一个绰号——原文作者拿到的是 "Greedy Panda"(贪心熊猫)。

实测直觉 刷新页面 ✕  ·  清 Cookie ✕  ·  挂 VPN ✕  →  绰号不变

换一台设备打开,绰号变了,但同样稳定。原因很简单:这不是存进你浏览器的标记,而是你设备本身的读数——读数来自硬件,所以不会因为你删了什么而消失。

你在无痕模式下不一样?很好。但它总是同一个?坏消息。 — 原文

评论区补充了一个容易忽略的差异:Chrome 系浏览器即使在无痕模式下指纹依然成立;Safari 和 Firefox 的无痕则不会——它们的无痕会话会切断这条线。

[02]

测量从哪来:两个来源,两种质量

Signal sources

网络请求 · 脆弱 / 通用

  • IP 地址:理想情况下一个人一个 IP 就够用,但移动网络、共享 WiFi、VPN、ISP 轮换都会让它失效。
  • User-Agent、Accept-Language:暴露浏览器、系统、版本与语言——但这些值在人群里高度重复。
只能把人分进大抽屉

代码环境 · 稳定 / 近乎唯一

  • 硬件(无需任何权限提示):GPU 行为与厂商驱动、CPU 行为与线程数、内存大小、显示(分辨率 / 像素比 / 刷新率)、音频处理、设备型号。
  • 软件:已安装字体、浏览器扩展、系统信息。
网页一旦能跑代码,就能给你量尺寸

原文页面上用的就是这六种手法,全部不需要弹窗授权:

[03]

唯一性来自交集,不是来自单项

Collapse of the pool

单独看每一项都很普通:数百万台设备用最新版 Chrome,数百万台 Mac 装 M4,数百万个浏览器说法语。但把这些条件同时叠上去,候选池立刻塌缩。

比特数 信息量 = log₂(总候选数 ÷ 剩余候选数)
每 2 人 1 个1 bit
每 8 人 1 个3 bits
每 128 人 1 个7 bits

答案越罕见,它告诉对方的越多(惊奇值)。至于"再多加几个条件就一定能认出你"——原文给的两个锚点:

但原文也很诚实地加了一句更正:只有相互独立的特征比特才能相加。胡子本身是"男性"的强指示,男性也更可能只有一只眼——特征相关时,比特不能简单叠加,实际信息量低于纸面值。

[04]

评论区的第一记冷水:商业上远没那么好用

The top rebuttal

讨论里最高赞的一条直接质疑原文的叙事:能测出来 ≠ 能长期追踪。

仅仅因为有人理论上能在今天识别出你的指纹,并不意味着几天后你还有同样的指纹。而为了广告或追踪目的做稳定匹配,你真正需要的正是这种稳定性。 — HN 高赞评论
两条重要补充(来自后续回复)
  • "最大、最可疑的数据经纪(信用监控)如今几乎已经在法律里根深蒂固了。"
  • 有人指出这条评论忽略了信息安全 / 反欺诈场景:那里的猫鼠博弈激烈得多,随新技术、黑产反制和浏览器缓解方案不断变化。一位反欺诈从业者的说法是——指纹没能阻止欺诈,但抬高了成本,挡掉了大量低投入的滥用。

还有一场关于"字体"的小争论:有人质疑普通用户几乎不装删字体;对方承认不确定,但指出软件版本才是大头——Chrome 每两周更新、Windows 每月、GPU 驱动不定期,任何一项更新都能当场把指纹清零。

[05]

反指纹实战:目标是"混入人群",不是"独一无二"

Blend in, don't stand out

评论区里最有用的一条,是纠正 EFF 测试站 coveryourtracks.eff.org 的读法——很多人一直读反了:

看到的结果含义判断
Randomized fingerprint网站能看出你在伪造信息坏
Unique fingerprint
(每次刷新都 unique)
每次访问都被当成全新访客,且没被判定为可疑行为好
Unique → Nearly-unique第一次 unique,第二次变成 nearly-unique,说明两次访问被关联起来了失败
Non-unique fingerprint你的设备与无数设备无法区分理想

但立刻有人泼冷水:这些测试并不可靠。Brave 确实会随机化一部分值,但许多值仍然静态——它照样暴露你的 GPU 型号和驱动版本,而 Fingerprint.com 在 Brave 下依然能可靠识别。

更真实的是代价。一位用 Brave 混淆多年的人说得很具体:每个带 2FA 的网站(如今几乎所有)都会把他当成新设备,每次用电脑都得把手机放在身边收验证码,相当烦;手机上用 GrapheneOS 能在 WiFi 里混淆,蜂窝网络做不到(除非轮换一堆 SIM 卡)。

现场的几组实测与争论
  • 有人在原文演示里从 "Gentle Owl" 变成 "Nosy Toucan"(连 VPN + 无痕 + 不最大化窗口)——这一次文中技巧失效了。
  • 另一位:Firefox + uBlock + CanvasBlocker + PiHole,每次刷新结果都不同,"没有持久化的指纹"。
  • iOS + iCloud Private Relay 下三次刷新结果不同——Apple 确实做了随机化。
  • 熵的争论:有人指出 iPhone 上大家系统版本、硬件高度一致,探测值强相关,"根本不可能有 30 bit 熵,我怀疑连 10 都没有";桌面 PC 才真正有描述性,Android 因机型多样也还行。反方算账:33 bits 就足以全球唯一,iOS 给 10–15 bits,配上住宅 IP 足够锁定。
  • 还有一个被点名的更糟场景:原生 App 比网页更危险——一个权限提示都不弹的 App,能拿到的比特比网页更多。
[06]

挡在路上的墙:验证码

Captcha as counter-measure

讨论串里一串"受害者"叙述:固定 IP 的用户被 Cloudflare 反复拦、被 Google 反复要求填验证码,有时干脆搜不了。两种解释并存——

还有一条结构性问题:大学一个出口静态 IP 供几百人共用——IP 一旦静态又不共享,隐私直接归零;共享则有别的麻烦。

[07]

法律与立场:这不是"技术问题"

Law & positions
Cookie 到底是不是坏东西(一场老派回忆)

有人为 cookie 辩护:它本身中性,解决的是 HTTP 无状态协议下"如何在两次请求之间维持会话状态"这个真问题,被滥用而已。随后有人回忆起 cookie 之前的做法——服务器自动给每个链接加上 PHPSESSID 参数,这也正是当年很多论坛无法被 Wayback Machine 归档的原因;附带的 RFC 2109 vs PHP 4 时间线之争属于典型 HN 风味。

[08]

读者对原文的两处纠正

Corrections
还有人怀疑演示本身

"我不太信这个魔术:没有证据说明那个哈希唯一,很多设备可能共用同一个哈希。建议加个计数器,或者让我存点数据到另一次会话里读。"——这个质疑在讨论里出现了两次,值得记着:演示的说服力不等于测量结论。

[09]

一页速览

TL;DR

Four takeaways

  1. 指纹是真的,但没到"接管 Cookie"的程度。商业级追踪仍主要靠 IP 加稳定标识符(手机号/邮箱/用户 ID);纯配置指纹半衰期以天计,一次软件更新就能清零。
  2. 指纹的价值在交集,不在单项。单项都平平无奇,叠加起来才近乎唯一——33 bits 足够在全球锁定一个人,邮编+生日+性别就能拿下 60% 的美国人。
  3. 个人防护的目标是"混入人群"。唯一 ≠ 安全;`non-unique` 才是理想结果。装扩展往往让你更显眼,Chrome/Edge 基本等于自带身份证,Brave 也仍漏 GPU 型号与驱动版本。
  4. 真正的战场不在浏览器里。同意横幅、数据转售、反欺诈中的指纹、验证码惩罚——这是法律、商业与信任的问题,不是换个浏览器就能关掉的开关。