Le 12 juillet 2026, un ingénieur de Scrapfly — une société d’anti-scraping — a publié un billet technique révélant une découverte inquiétante : depuis Chrome 148, une fonction mathématique en apparence inoffensive, Math.tanh(), renvoie des résultats légèrement différents selon le système d’exploitation. Autrement dit, n’importe quel site web, en vous faisant exécuter une seule ligne de calcul, peut déterminer si vous êtes sous Windows, macOS ou Linux.
▲ Source image : capture du billet de blog Scrapfly
Cette découverte est montée en Une de Hacker News le jour même, avec 207 upvotes et 90 commentaires. La réaction de la communauté de développeurs peut se qualifier de « stupéfaction » — on avait l’habitude que l’empreinte de navigateur traque les utilisateurs via le rendu Canvas, le rendu WebGL, le traitement audio, ces « gros calibres » ; personne n’avait imaginé qu’une simple fonction tangente hyperbolique puisse devenir un indice d’identification du système d’exploitation.
Un même problème de maths, trois réponses différentes
Prenons un exemple concret. Dans la console de Chrome 150, entrez Math.tanh(0.8), c’est-à-dire calculez la tangente hyperbolique de 0.8 : trois machines réelles sous trois systèmes différents ont donné trois résultats différents :
| Système d’exploitation | Valeur renvoyée par Math.tanh(0.8) |
|---|---|
| Linux (glibc) | 0.6640367702678491 |
| macOS (libsystem_m) | 0.664036770267849 |
| Windows (UCRT) | 0.6640367702678489 |
Regardez les derniers chiffres. Linux a un chiffre de plus que macOS et la valeur la plus élevée ; macOS a un chiffre de moins que Windows et se situe au milieu ; la valeur de Windows est légèrement plus basse. La différence ne porte que sur le dernier ou l’avant-dernier chiffre, à peine perceptible à l’œil nu — mais pour un ordinateur, ces écarts suffisent à constituer une signature de système d’exploitation nette.
Fait amusant : tous les entrants ne produisent pas de différence. Les données de test de Scrapfly montrent qu’environ trois quarts des valeurs d’entrée donnent un résultat identique sur les trois systèmes. Par exemple Math.tanh(0.5), Linux, macOS et Windows renvoient tous 0.46211715726000974. Tandis que tanh(0.7) ne diffère que pour Linux, et tanh(0.9) n’a que Windows qui s’en démarque. tanh(0.8) est précisément le « point doux » qui distingue les trois à la fois.
▲ Source image : capture du tableau comparatif du blog Scrapfly
Cela signifie qu’un traqueur n’a pas besoin de manipulations complexes. En exécutant quelques Math.tanh() sur une page web, en choisissant quelques valeurs d’entrée clés et en comparant les résultats, il peut déduire le système d’exploitation du visiteur. Si le User-Agent du visiteur prétend être macOS, mais que la valeur de tanh est typiquement un résultat Linux — alors ce visiteur est très probablement en train de dissimuler son identité.
De qui est la faute ? Bug ou destin mathématique ?
Le lecteur arrivé ici pourrait demander : est-ce un bug de Chrome ?
La réponse est nuancée. Ce n’est pas tout à fait un bug, mais un effet secondaire inattendu d’un « patch ».
Avant Chrome 148, l’implémentation de Math.tanh par le moteur V8 (le cœur d’exécution JavaScript de Chrome) utilisait sa propre bibliothèque mathématique embarquée, appelée fdlibm. Comme le même code était utilisé sur toutes les plateformes, peu importait que l’utilisateur soit sous Windows, macOS ou Linux : le résultat de Math.tanh était parfaitement identique — et ne fuyait aucune information sur le système d’exploitation.
Mais fin 2025, l’équipe V8 a soumis un changement de code (commit c1486295ae5) remplaçant l’implémentation de Math.tanh par la bibliothèque standard C++ std::tanh. La motivation était sensée : réduire la taille du code de V8, exploiter les bibliothèques mathématiques déjà hautement optimisées du système d’exploitation, et théoriquement améliorer les performances. Ce changement est arrivé avec V8 14.8.57, correspondant à Chrome 148.
Le problème : les bibliothèques mathématiques sous-jacentes des différents systèmes (glibc de Linux, libsystem_m de macOS, UCRT de Windows) n’implémentent pas la fonction tangente hyperbolique de la même façon.
C’est une contrainte fondamentale des mathématiques. La norme IEEE 754 spécifie le format de stockage des nombres à virgule flottante et l’exigence de précision pour les opérations de base (addition, soustraction, multiplication, division, racine carrée), mais pour les fonctions trigonométriques, exponentielles, hyperboliques — ces « fonctions transcendantes » — la norme n’impose pas un « arrondi correct », c’est-à-dire garantir que le résultat est exact jusqu’au dernier bit. La raison est pragmatique : un arrondi correct coûterait un calcul colossal, nuisant gravement aux performances. Aussi chaque bibliothèque mathématique système a ses propres algorithmes d’approximation, tables de coefficients et constantes ; leur objectif est, sous réserve de la vitesse, de maintenir l’erreur dans une limite d’« unité de précision minimale » (ULP).
Ainsi, la petite différence de Math.tanh entre OS après Chrome 148 est fondamentalement l’expression de la diversité des algorithmes d’approximation mathématique. Ce n’est pas un bug qu’on peut « réparer » simplement — c’est un compromis vieux de plusieurs décennies dans le domaine des calculs à virgule flottante : vitesse contre précision. Sauf que lorsque ce compromis est exposé à la couche interface du navigateur, il devient par accident un canal de fuite de vie privée.
Pas seulement tanh — une surface de fuite qui traverse tout le navigateur
Plus inquiétant encore, Math.tanh n’est que la partie émergée de l’iceberg.
Le blog de Scrapfly indique que toute API de navigateur calculant via la bibliothèque mathématique du système hôte (libm) présente théoriquement le même risque de fuite. Cela inclut les fonctions trigonométriques du CSS (sin(), cos(), tan() etc.), ainsi que le compresseur dynamique de la Web Audio API. Toutes ces fonctionnalités dépendent de la bibliothèque mathématique sous-jacente du système pour le calcul en virgule flottante.
En d’autres termes, même si l’équipe Chrome corrige Math.tanh, tant qu’une seule API du navigateur appelle une fonction mathématique du système hôte sans uniformisation, la fenêtre d’empreinte reste ouverte.
C’est une classique course aux armements « jeu du chat et de la souris ». Les développeurs de navigateurs s’efforcent de boucher chaque interstice susceptible de révéler l’identité de l’utilisateur, tandis que les traqueurs et systèmes anti-scraping cherchent sans cesse de nouveaux signaux. L’histoire de l’empreinte est celle d’une succession de nouveaux champs de bataille découverts des deux côtés : du Canvas au WebGL, des listes de polices aux formes d’onde audio, jusqu’à présent aux différences de résultats des fonctions mathématiques. Chaque fois qu’un développeur bouche une brèche, le traqueur trouve le prochain indice qui paraissait totalement impossible.
Les réactions polarisées de HN
La discussion sur HN a présenté deux perspectives diamétralement opposées.
Une partie des développeurs estime que cette découverte a un impact limité sur l’utilisateur ordinaire. L’utilisateur « Aurornis » a fait valoir que la plupart des utilisateurs ne falsifient pas leur User-Agent, donc identifier le système via tanh n’apporte aucune information supplémentaire au traqueur — le User-Agent indique déjà au site quel système vous utilisez. Il estime que cette faille est plus pertinente pour l’empreinte de la fourchette de versions du navigateur, mais même là, ce n’est qu’un petit élément du puzzle des signaux d’empreinte.
L’autre parti voit les choses tout autrement. L’utilisateur « jeroenhd » a souligné que cette découverte importe à des sociétés d’anti-scraping comme Scrapfly précisément parce qu’elles doivent faire passer des robots pour de vrais navigateurs. Un robot tournant sur une machine virtuelle Linux, prétendant être Chrome sous macOS, mais dont la valeur de tanh révèle son véritable système d’exploitation, peut être facilement identifié comme bot par le système anti-scraping.
L’auteur penche pour dire que les deux ont raison. Pour l’utilisateur de navigateur ordinaire et honnête, la fuite de Math.tanh est effectivement superflue — votre User-Agent indique déjà activement au site quel système vous utilisez. Mais pour qui tente de dissimuler son identité (que ce soit pour la protection de la vie privée ou pour le scraping de données), ce nouveau signal signifie : non seulement vous devez falsifier le User-Agent, mais aussi la valeur de retour des fonctions mathématiques.
Cela soulève une question plus profonde : dans une architecture Internet, combien d’infrastructures que nous croyons « neutres » « standardisées » transmettent en silence des signaux uniques sur nos appareils ? Une fonction mathématique, une ligne de CSS, un bout de traitement audio — rien de tout cela ne devrait devenir un indice d’identité, et pourtant, à cause de la diversité des implémentations sous-jacentes, ils deviennent des marqueurs de traçage de facto.
Que va-t-il se passer ?
Pour l’heure, ce canal de fuite affecte Chrome 148, 149 et 150. L’équipe Chrome n’a pas encore réagi publiquement sur le sujet. L’équipe Scrapfly indique que pour fermer complètement ce canal, il faudrait que le navigateur utilise une bibliothèque mathématique unifiée à chaque couche (V8, Blink, Web Audio), ou au moins « aplatisse » les sorties. Mais cela pourrait entraîner une perte de performance, et poser des défis non négligeables de compatibilité et de maintenance.
À l’utilisateur ordinaire, l’auteur veut dire : pas de panique. Cette découverte est davantage un signal nouveau, intéressant mais non urgent, dans la recherche sur la vie privée — pas une faille de sécurité grave qui volerait votre compte. Elle mérite attention, car elle représente une tendance : l’empreinte numérique des utilisateurs devient de plus en plus difficile à cacher totalement.
Le sens véritable de cette histoire réside peut-être dans une observation plus générale : dans la chaîne complexe de dépendances des systèmes logiciels, tout choix sous-jacent en apparence insignifiant peut produire en couche supérieure des conséquences de vie privée imprévues. Un nettoyage de code de l’équipe Chrome, initialement destiné à réduire les redondances et améliorer les performances, a par accident ouvert une nouvelle fenêtre d’identification du système d’exploitation. En ce sens, l’histoire de Math.tanh est un cas d’école de « l’intention et de l’effet secondaire ».
Liens de référence :
- Scrapfly : Browser Math OS Fingerprint
- Discussion HN (item?id=48884853)