文章摘要
不同操作系统对同一数学函数(如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 标准定义了双精度浮点数的存储方式,但并未要求 sin、cos、tanh 等超越函数必须精确舍入。为了速度,每个操作系统都提供了自己的数学库(libm),使用不同的算法系数和查找表,导致结果在最后几位比特上产生差异。
关键变化:
这个“漏洞”是最近才出现的。在 Chrome 148 版本之前,V8 引擎自己计算 Math.tanh,所有操作系统返回相同结果。但从 Chrome 148 开始,V8 改用操作系统的原生 std::tanh 函数,从而泄露了操作系统信息。
哪些数学运算会泄露信息?
并非所有数学运算都会泄露。以下是关键路径:
- JavaScript
Math.*: 只有Math.tanh会泄露。其他如Math.sin、Math.cos、Math.exp等,V8 引擎使用自带的数学库,在所有系统上结果一致。 - CSS 三角函数: 所有 CSS 三角函数(如
sin(),cos())都会泄露,因为浏览器渲染引擎直接调用操作系统的原生数学库。 - Web Audio API: 在 macOS 上,Web Audio 的 FFT 和向量运算使用苹果的 Accelerate 框架,而音频压缩器中的标量运算则使用
libsystem_m。这导致同一个音频处理流程中可能涉及三个不同的数学库。
如何伪造(或防御)?
要完美模拟一个操作系统,不能简单地添加随机噪声,因为这会留下新的破绽。正确的方法是:
- 精确复现算法: 逆向分析目标操作系统的数学库,提取其算法系数和常数,用代码精确复现其计算过程,确保每个比特位都一致。
- 保证确定性: 编译时关闭编译器对乘加运算(FMA)的自动优化,确保代码在不同CPU架构上产生相同结果。
- 直接调用原生库: 对于 Windows 的 UCRT,可以直接将其动态链接库(DLL)映射到内存中调用,获得最真实的结果。但需要注意处理 ABI 调用约定和 CPU 指令路径选择等问题。
- 性能优化: 精确复现的代码可能运行缓慢,这本身也是一个破绽。需要利用硬件特性(如硬件FMA指令)进行优化,使其速度与原生浏览器一致。
总结:
数学运算的微小差异是一个强大、稳定且难以伪造的浏览器指纹信号。对于反爬系统而言,这是一个有效的检测手段。而对于需要伪装浏览器的爬虫服务来说,精确复现目标操作系统的数学库,是确保其身份不被识破的关键一环。
评论总结
根据评论内容,总结如下:
主要观点与论据:
技术发现: 评论1指出Chromium v148的Math.tanh函数返回结果因操作系统而异,可用于指纹识别。评论12质疑为何数学函数需调用系统库,而非直接使用CPU指令。
写作风格批评: 评论2、6、7批评文章明显由AI生成,缺乏人类撰写的深度和清晰度。评论6认为AI写作掩盖了更重要的浏览器版本指纹识别潜力。
指纹识别普遍性: 评论5、13、16指出,即使没有Math.tanh,用户仍可通过IP、用户代理、屏幕分辨率等被识别。评论13提到Tor浏览器也未能完全隐藏操作系统。
解决方案与法律呼吁: 评论3建议推动正确舍入的超越函数以消除差异。评论9呼吁将指纹识别定为非法。评论11提出通过注入随机数干扰Math.tanh。
行业动机质疑: 评论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写作质量;对指纹识别普遍性持悲观态度,同时提出技术对抗和法律干预两种路径。