Hacker News 中文摘要

RSS订阅

自Chromium 148起,Math.tanh可被用于指纹识别以关联底层操作系统 -- Since Chromium 148, Math.tanh is now fingerprintable to link underlying OS

文章摘要

不同操作系统对同一数学函数(如Math.tanh)的计算结果存在细微差异,这种差异体现在数值的最后几位上,反机器人系统可通过检测这些差异来识别用户的操作系统。

文章总结

好的,这是根据您的要求,对原文进行中文重述和精简后的版本。


标题:你的浏览器在不同操作系统上做数学运算的结果不同,反爬系统正利用这一点

核心发现:

浏览器指纹识别通常依赖Canvas、WebGL、字体和音频。但有一个更隐蔽的信号,藏在数学运算结果的最后几位比特中。

在浏览器控制台运行 Math.tanh(0.8),不同操作系统会返回不同的结果:

  • Linux Chrome (glibc): 0.6640367702678491
  • macOS Chrome (libsystem_m): 0.664036770267849
  • Windows Chrome (UCRT): 0.6640367702678489

这不是一个常数,而是一个近似值。其精确的比特位取决于计算它的操作系统。例如,macOS 使用苹果的数学库,Linux 使用 glibc,两者在大约四分之一的输入上结果不同,通常只差一个最小精度单位(1 ULP)。Windows 的通用C运行时(UCRT)则与两者都有差异。

为什么不同?

IEEE 754 标准定义了双精度浮点数的存储方式,但并未要求 sincostanh 等超越函数必须精确舍入。为了速度,每个操作系统都提供了自己的数学库(libm),使用不同的算法系数和查找表,导致结果在最后几位比特上产生差异。

关键变化:

这个“漏洞”是最近才出现的。在 Chrome 148 版本之前,V8 引擎自己计算 Math.tanh,所有操作系统返回相同结果。但从 Chrome 148 开始,V8 改用操作系统的原生 std::tanh 函数,从而泄露了操作系统信息。

哪些数学运算会泄露信息?

并非所有数学运算都会泄露。以下是关键路径:

  1. JavaScript Math.* 只有 Math.tanh 会泄露。其他如 Math.sinMath.cosMath.exp 等,V8 引擎使用自带的数学库,在所有系统上结果一致。
  2. CSS 三角函数: 所有 CSS 三角函数(如 sin(), cos())都会泄露,因为浏览器渲染引擎直接调用操作系统的原生数学库。
  3. Web Audio API: 在 macOS 上,Web Audio 的 FFT 和向量运算使用苹果的 Accelerate 框架,而音频压缩器中的标量运算则使用 libsystem_m。这导致同一个音频处理流程中可能涉及三个不同的数学库。

如何伪造(或防御)?

要完美模拟一个操作系统,不能简单地添加随机噪声,因为这会留下新的破绽。正确的方法是:

  1. 精确复现算法: 逆向分析目标操作系统的数学库,提取其算法系数和常数,用代码精确复现其计算过程,确保每个比特位都一致。
  2. 保证确定性: 编译时关闭编译器对乘加运算(FMA)的自动优化,确保代码在不同CPU架构上产生相同结果。
  3. 直接调用原生库: 对于 Windows 的 UCRT,可以直接将其动态链接库(DLL)映射到内存中调用,获得最真实的结果。但需要注意处理 ABI 调用约定和 CPU 指令路径选择等问题。
  4. 性能优化: 精确复现的代码可能运行缓慢,这本身也是一个破绽。需要利用硬件特性(如硬件FMA指令)进行优化,使其速度与原生浏览器一致。

总结:

数学运算的微小差异是一个强大、稳定且难以伪造的浏览器指纹信号。对于反爬系统而言,这是一个有效的检测手段。而对于需要伪装浏览器的爬虫服务来说,精确复现目标操作系统的数学库,是确保其身份不被识破的关键一环。

评论总结

根据评论内容,总结如下:

主要观点与论据:

  1. 技术发现: 评论1指出Chromium v148的Math.tanh函数返回结果因操作系统而异,可用于指纹识别。评论12质疑为何数学函数需调用系统库,而非直接使用CPU指令。

  2. 写作风格批评: 评论2、6、7批评文章明显由AI生成,缺乏人类撰写的深度和清晰度。评论6认为AI写作掩盖了更重要的浏览器版本指纹识别潜力。

  3. 指纹识别普遍性: 评论5、13、16指出,即使没有Math.tanh,用户仍可通过IP、用户代理、屏幕分辨率等被识别。评论13提到Tor浏览器也未能完全隐藏操作系统。

  4. 解决方案与法律呼吁: 评论3建议推动正确舍入的超越函数以消除差异。评论9呼吁将指纹识别定为非法。评论11提出通过注入随机数干扰Math.tanh。

  5. 行业动机质疑: 评论7怀疑文章发布者(指纹识别公司)旨在通过曝光技术引发修复,从而保护其商业利益。

关键引用(保留中英文):

  • 评论1: "We noticed Chromium Math.tanh since v148 returned a different result... it's now a fingerprintable surface to retrieve the OS Chromium run on"
  • 评论6: "They (or rather the LLM that wrote this) missed that this is possibly fingerprintable to browser version range"
  • 评论7: "Kind of a smart move by this company: write up an AI analysis of all fingerprinting techniques in hopes they get fixed after outrage"
  • 评论9: "Can't we make fingerprinting illegal, as in, jailtime illegal?"
  • 评论11: "just inject this with your favorite JS injection plugin... Math.tanh = x => oldTanh(x) + Math.random()/10000000"

平衡性说明: 评论对技术发现表示认可,但普遍批评AI写作质量;对指纹识别普遍性持悲观态度,同时提出技术对抗和法律干预两种路径。