Chrome 148以降、Math.tanhでOSが特定可能に
원제: Since Chromium 148, Math.tanh is now fingerprintable to link underlying OS
왜 중요한가
ブラウザフィンガープリント技術がOS固有の浮動小数点演算差異にまで及んでおり、スクレイピング対策・プライバシー保護の双方で新たな対応が求められる。
Chromium 148以降、JavaScriptのMath.tanh関数がOS固有の数学ライブラリ(libm)を経由するよう変更され、Linux・macOS・Windowsの各OSをビット単位で識別できるブラウザフィンガープリント手法が生じていることをScrapfly Engineeringが2026年7月12日に報告した。
Scrapfly Engineeringの報告によると、Chrome 148からV8エンジンのMath.tanh実装が独自バンドルのfdlibmポートからホストOSのstd::tanhへ切り替わった(V8コミットc1486295ae5)。これにより、同じ入力値でも各OSの数学ライブラリ(Linux: glibc、macOS: libsystem_m、Windows: UCRT)が異なる計算結果を返すようになった。
具体的には、Math.tanh(0.8)をChrome 150で実行すると、Linux(glibc)は0.6640367702678491、macOS(libsystem_m)は0.664036770267849、Windows(UCRT)は0.6640367702678489と、三者それぞれ異なる値を返す(最大2 ULPの差)。IEEE 754規格はdoubleの格納方式を定義するが、sin・cos・tanh・expの正確な丸め処理は義務付けておらず、各ベンダーが速度優先で独自のlibmを実装しているため差異が生じる。
Chrome 147以前はV8が独自のfdlibmでtanhを計算していたため全OSで同一ビット値を返していたが、Chrome 148・149・150ではこのOS識別が可能となっている。アンチボットシステムはUser-Agentが主張するOSと実際の数値計算結果を照合することで、ブラウザなりすましを検出できる。Scrapflyは自社ブラウザがこの信号を含む数百のシグナルで実機と一致させる必要があると説明している。Math.tanh以外にもCSS三角関数やWeb Audio APIのコンプレッサーも同様にホストlibmを経由することが指摘されている。