Présentation du problème

Depuis Chrome 148, la fonction Math.tanh est désormais fingerprintable, ce qui signifie qu'elle peut être utilisée pour identifier l'OS sous-jacent d'un utilisateur. Cela est dû au fait que V8 utilise désormais la fonction std::tanh du système hôte, qui peut varier en fonction de l'OS.

Fonctionnement de Math.tanh

La fonction Math.tanh est une approximation qui dépend de l'OS qui la calcule. Les résultats de Math.tanh(0.8) sur différents OS sont les suivants : 0.6640367702678491 sur Linux, 0.664036770267849 sur macOS et 0.6640367702678489 sur Windows. Ces différences sont dues aux algorithmes utilisés par les bibliothèques mathématiques de chaque OS.

Math.tanh(0.8)

Ces différences peuvent être utilisées pour identifier l'OS d'un utilisateur, ce qui peut être un problème de confidentialité.

Implications et limites

Il est important de noter que cette fingerprinting n'est pas limitée à Math.tanh, mais peut également être appliquée à d'autres fonctions mathématiques. De plus, les différences entre les OS peuvent varier en fonction de la version de Chrome et de l'OS utilisé.

Pour éviter cette fingerprinting, il est possible de reproduire exactement l'algorithme utilisé par l'OS cible, en récupérant les coefficients de minimax, les tables d'exponentielle et les constantes de réduction à partir de la bibliothèque mathématique de l'OS cible et en les transcrivant en C portable.

// Exemple de code pour reproduire l'algorithme de sin de Apple
// Toutes les opérations de multiplication-addition fusionnée émises par Apple sont écrites sous forme d'appel explicite à fma().
// Le bit p…

Cela nécessite une compréhension approfondie des algorithmes mathématiques utilisés par les différents OS et peut être un défi important.