Since Chromium 148, Math.tanh is now fingerprintable to link underlying OS
430 points • 4 days agoArticle Link

指纹识别技术经常通过分析浏览器行为中的细微不一致来识别用户的操作系统。其中一个既精确又常被忽视的信号是某些数学函数的输出。由于 IEEE 754 浮点数存储标准并不强制对像 sin 、 cos 或 hyperbolic tangent 等超越函数做出相同的舍入,不同操作系统会产生略微不同的结果。这些差异通常只有最后一位的一个单位(ULP)左右,原因在于各个系统将这些运算交由各自不同的数学库处理,例如 Linux 上的 glibc 、 macOS 上的 libsystem_m 或 Windows 上的 UCRT 。

自 Chrome 148 起,V8 在处理 Math.tanh 时改为使用宿主的本地数学库,而不再使用捆绑的跨平台数学库。这一变化意味着浏览器仅凭计算像 tanh(0.8) 这种常见值就会泄露出其操作系统身份。该漏洞尤为突出,因为它会造成浏览器所报告的 User-Agent 与数学运算返回的实际位级结果不一致。此外,CSS 的三角函数和 Web Audio 组件也依赖于宿主特定的数学库,从而形成了多层次的指纹面,若要掩饰浏览器真实身份,开发者必须考虑这些层面。

要成功模拟特定操作系统,远不止简单伪装那么简单,错误的实现常会引入可被检测的模式或不一致。例如 Apple 在 macOS 生态中使用两套数学库:用于标量运算的常规库和用于向量运算的 Accelerate 框架。如果两者未能对齐,产生的误差往往比不做伪装更糟。再者,诸如 fused-multiply-add 之类的架构特定硬件特性也会导致运算漂移,因此必须在编译和执行层面精细控制,才能保证数学输出在不同服务器环境下的确定性。

为有效封堵这些泄露,开发者需要采取严格的方法,需对目标库进行逆向工程并实现逐位相同的兼容。这可能包括将 minimax 系数和内部约减常数转写为可移植代码,或在某些情况下直接在运行时环境中映射并执行目标操作系统的本地库。通过保持这种级别的精确性并针对真实设备作为判定基准进行严格验证,就有可能构建出在单个浮点位层面上也无法与真实用户流量区分的爬虫。

220 comments • Comments Link

操作系统在计算 Math.tanh 等数学函数时的微小差异,会形成独特的可指纹特征,从而暴露底层平台,这常常与 User-Agent 头部信息不一致。

自动化抓取工具经常伪造 User-Agent 字符串以冒充合法的桌面系统,但这些"数学签名"能让安全服务发现所宣称的操作系统与实际数学实现之间的差异。

尽管指纹识别是机器人检测和防欺诈的常用手段,该领域正越来越被大规模、滥用性的数据抓取主导,进而损害网络基础设施和用户体验。

依赖在浏览器中注入随机化数学结果等简单缓解措施大多无效,因为更复杂的反机器人厂商会把这些改动视为确认机器人的辅助信号。

关于使用浮点数学还是定点算术的争论,凸显了便利性与确定性之间的张力。现代硬件与库倾向于浮点,但在需要极高精度或模拟一致性的场景下,定点仍然是关键选择。

指纹识别已如此普遍,以至于像 Mullvad 这样注重隐私的浏览器也基本放弃了完美掩盖操作系统的尝试,他们的结论是:独特的侧信道太多,难以取胜。

许多用户对"LLM-generated"技术内容的激增感到沮丧,这类内容常以措辞重复和过度修饰为特征,反而让人更希望看到由人编写的简短摘要。

讨论的一个重要部分集中在,是否应将指纹识别在法律上视为类似非法窃听的行为——因为它常被用于在未经同意的情况下跨互联网追踪个人。

在"识别客户"与"秘密追踪"之间的紧张关系,揭示了人们对隐私价值评估的分歧。监管支持者认为,虽然个别商店可能在本地观察顾客,但现代数字指纹识别如同一个隐形的、跨站的 AirTag,在全球范围内追踪用户。

浏览器和核心引擎的贡献者常出于善意推出新 API 或为提升性能而做出改动,却无意中创造了新的指纹向量,随即被安全公司和数据抓取者利用。

这场讨论反映了人们对自动化抓取工具无节制采集互联网数据以及与之相关的指纹识别军备竞赛的深切不安。各方一致认为大规模、未经同意的数据提取有害,但在指纹识别本身的道德性上存在分歧:有人把它视为安全所必须的权宜之计,另一些人则认为它根本侵犯了用户自主权。辩论的核心是一种无奈感:随着浏览器越发复杂,可被识别的攻击面也在扩大,在没有立法干预的情况下,实现真正私密、匿名的网络显得愈发难以企及。