Una función matemática está filtrando tu sistema operativo a las webs

Una función matemática está filtrando tu sistema operativo a las webs

Huella de navegadorPrivacidadSeguridadChromiumSistema operativoV8

Fuentes:HN + web research · HN

El 12 de julio de 2026, los ingenieros de la empresa de tecnología antiscraping Scrapfly publicaron una entrada técnica que revelaba un hallazgo inquietante: desde Chrome 148, una función matemática de aspecto inofensivo, Math.tanh(), devuelve resultados ligeramente distintos según el sistema operativo. Es decir, cualquier sitio web que te haga ejecutar una sola línea de cálculo matemático puede saber si usas Windows, macOS o Linux.

Captura del blog de Scrapfly: diferencias en el valor devuelto por Math.tanh según el SO ▲ Fuente de la imagen: captura del artículo del blog de Scrapfly

El hallazgo llegó ese mismo día a la portada de Hacker News, con 207 votos y 90 comentarios. La reacción de la comunidad de desarrolladores se puede resumir en una palabra: «sorpresa». Todos estaban acostumbrados a que la huella digital del navegador rastreara a los usuarios mediante «armas pesadas» como el dibujo en Canvas, el renderizado con WebGL o el procesamiento de audio; nadie imaginaba que una simple función de tangente hiperbólica pudiera convertirse en una pista para identificar el sistema operativo.

El mismo problema de matemáticas, tres respuestas distintas

Ilustrémoslo con un ejemplo concreto. En la consola del navegador de Chrome 150, si introduces Math.tanh(0.8) —es decir, calculas la tangente hiperbólica de 0,8—, tres máquinas reales con tres sistemas operativos distintos devuelven tres resultados diferentes:

Sistema operativoValor devuelto por Math.tanh(0.8)
Linux (glibc)0.6640367702678491
macOS (libsystem_m)0.664036770267849
Windows (UCRT)0.6640367702678489

Fíjate en los últimos dígitos. Linux tiene un dígito más que macOS y el valor mayor; macOS tiene un dígito menos que Windows y queda en medio; Windows tiene el valor ligeramente menor. La diferencia entre los tres está solo en el último o los dos últimos dígitos, casi imperceptible a simple vista, pero para un ordenador esas diferencias bastan para constituir una firma clara del sistema operativo.

Lo curioso es que no todas las entradas producen diferencias. Los datos de prueba de Scrapfly muestran que en torno a tres cuartas partes de los valores de entrada dan resultados idénticos en los tres sistemas. Por ejemplo, Math.tanh(0.5) devuelve 0.46211715726000974 tanto en Linux como en macOS y Windows. En cambio, en tanh(0.7) solo el valor de Linux difiere de los otros dos, y en tanh(0.9) solo Windows va por libre. tanh(0.8) resulta ser justo el «punto dulce» capaz de distinguir a los tres.

Tabla comparativa de Scrapfly: valores de tanh en los tres sistemas para distintas entradas ▲ Fuente de la imagen: captura de la tabla comparativa del blog de Scrapfly

Esto significa que un rastreador no necesita hacer nada complejo. Basta con ejecutar unas cuantas veces Math.tanh() en la web, elegir varios valores de entrada clave y comparar los resultados para deducir el sistema operativo del visitante. Si el User-Agent del visitante afirma que usa macOS pero el valor devuelto por tanh es el resultado típico de Linux, ese visitante casi con seguridad está falseando su identidad.

¿De quién es la culpa? ¿Un bug o el destino de las matemáticas?

Quizá el lector se pregunte a estas alturas: ¿es esto un bug de Chrome?

La respuesta es matizada. No es exactamente un bug, sino el efecto secundario inesperado de un «parche».

Antes de Chrome 148, el motor V8 (el núcleo de ejecución de JavaScript de Chrome) implementaba Math.tanh con su propia biblioteca matemática empaquetada, llamada fdlibm. Como en todas las plataformas se usaba el mismo código, el resultado de Math.tanh era idéntico tanto en Windows como en macOS y Linux, y por tanto no filtraba ninguna información del sistema operativo.

Pero a finales de 2025, el equipo de V8 introdujo un cambio de código (commit c1486295ae5) que sustituyó la implementación de Math.tanh de la fdlibm propia por la std::tanh de la biblioteca estándar de C++. La motivación del cambio es razonable: reducir el tamaño del propio código de V8, aprovechar las bibliotecas matemáticas de bajo nivel del sistema operativo, altamente optimizadas, y, en teoría, mejorar el rendimiento. El cambio se publicó con V8 14.8.57, correspondiente a Chrome 148.

El problema es que las bibliotecas matemáticas de bajo nivel de los distintos sistemas operativos (glibc en Linux, libsystem_m en macOS, UCRT en Windows) no implementan la función de tangente hiperbólica de la misma manera.

Se trata de una restricción matemática fundamental. La norma IEEE 754 define el formato de almacenamiento de los números de coma flotante y los requisitos de precisión de las operaciones básicas (suma, resta, multiplicación, división, raíz cuadrada), pero para funciones «trascendentes» como las trigonométricas, exponenciales e hiperbólicas, la norma no obliga a un «redondeo correcto», es decir, a garantizar que el resultado sea exacto hasta el último bit binario. La razón es muy práctica: implementar el redondeo correcto tiene un coste de cómputo enorme y afectaría gravemente al rendimiento. Por eso cada biblioteca matemática de cada sistema operativo tiene sus propios algoritmos de aproximación, tablas de coeficientes y constantes, cuyo objetivo es mantener el error dentro de una «unidad de mínima precisión» (ULP) garantizando la velocidad.

Así pues, las minúsculas diferencias de Math.tanh entre sistemas operativos tras Chrome 148 son, en esencia, una manifestación de la diversidad de algoritmos de aproximación matemática. No es un bug que se pueda «arreglar» sin más: en realidad es un compromiso que existe desde hace décadas en el terreno de la computación de coma flotante, el de velocidad frente a precisión. Solo que, al quedar expuesto en la capa de interfaz de usuario que es el navegador, se convirtió inesperadamente en un canal de filtración de la privacidad.

No solo tanh: una superficie de filtración que recorre todo el navegador

Lo más preocupante es que Math.tanh es solo la punta del iceberg.

El blog de Scrapfly señala que cualquier API del navegador que calcule a través de la biblioteca matemática del sistema operativo anfitrión (libm) tiene, en teoría, el mismo riesgo de filtración. Esto incluye las funciones trigonométricas de CSS (sin(), cos(), tan(), etc.) y el compresor dinámico de la Web Audio API. Todas ellas dependen de la biblioteca matemática de bajo nivel del sistema operativo para realizar los cálculos de coma flotante.

Dicho de otro modo: aunque el equipo de Chrome arregle Math.tanh, mientras el navegador tenga una sola API que invoque las funciones matemáticas del sistema operativo anfitrión sin un tratamiento unificado, la ventana para la identificación por huella seguirá abierta.

Es una clásica carrera armamentística al estilo «golpea al topo». Los desarrolladores de navegadores se esfuerzan por tapar cada rendija que pueda filtrar la identidad del usuario, mientras los rastreadores y sistemas antiscraping buscan sin descanso nuevas señales. La historia de la huella digital es la historia de ambos bandos descubriendo continuamente nuevos campos de batalla: de Canvas a WebGL, de la lista de fuentes a la forma de onda del audio, y ahora a las diferencias en los resultados de las funciones matemáticas. Cada vez que los desarrolladores tapan un agujero, los rastreadores encuentran el siguiente indicador que parecía completamente imposible que se convirtiera en pista.

La reacción polarizada de la comunidad de HN

La discusión en HN presentó dos visiones diametralmente opuestas.

Una parte de los desarrolladores considera que el impacto real de este hallazgo para el usuario común es limitado. El usuario «Aurornis» señaló que la mayoría de los usuarios no falsifican su User-Agent, así que identificar el sistema operativo mediante tanh no aporta información adicional al rastreador: el propio User-Agent ya le dice al sitio web qué sistema operativo usas. En su opinión, esta vulnerabilidad tiene más sentido para la identificación de rangos de versión del navegador, pero incluso así es solo una piecita más entre las muchas señales de huella digital.

La visión de la otra parte es completamente distinta. El usuario «jeroenhd» señaló que este hallazgo es importante para una empresa antiscraping como Scrapfly precisamente porque necesitan que sus rastreadores se hagan pasar por navegadores reales. Un rastreador que se ejecuta en una máquina virtual Linux, si afirma ser Chrome sobre macOS pero el valor devuelto por tanh delata su verdadero sistema operativo, será fácilmente identificado como un bot por el sistema antiscraping.

Tiendo a pensar que ambos tienen razón. Para el usuario común y honesto de un navegador, la filtración de Math.tanh es efectivamente redundante: tu User-Agent ya le está diciendo activamente al sitio web qué sistema usas. Pero para el usuario que intenta ocultar su identidad (ya sea por protección de la privacidad o por scraping de datos), esta nueva señal significa que no solo tienes que falsear el User-Agent, sino también el valor devuelto por las funciones matemáticas.

Esto plantea una pregunta más profunda: en una arquitectura de internet, ¿cuánta de la infraestructura que creemos «neutral» y «estandarizada» transmite en realidad, de forma silenciosa, señales únicas sobre nuestros dispositivos? Una función matemática, una línea de CSS, un fragmento de procesamiento de audio: no deberían ser pistas de identidad, pero se han convertido, por la diversidad de sus implementaciones de bajo nivel, en marcadores de rastreo de facto.

¿Qué va a pasar a continuación?

Por ahora, este canal de filtración afecta a Chrome 148, 149 y 150. El equipo de Chrome todavía no se ha pronunciado públicamente sobre el asunto. El equipo de Scrapfly afirma que cerrar del todo este canal de filtración exigiría que el navegador usara una biblioteca matemática unificada en cada capa (V8, Blink, Web Audio), o al menos «alisara» la salida. Pero hacerlo podría acarrear pérdidas de rendimiento y plantea retos nada despreciables en compatibilidad y mantenimiento.

Al usuario común quiero decirle: no hay que entrar en pánico. Este hallazgo es más bien una señal nueva, interesante pero no urgente, en el campo de la investigación de la privacidad, y no una grave vulnerabilidad de seguridad que vaya a hacer que te roben la cuenta. Merece atención porque representa una tendencia: la huella digital del usuario es cada vez más difícil de ocultar por completo.

El verdadero significado de esta historia quizá resida en que revela una observación más general: en la compleja cadena de dependencias de un sistema de software, cualquier elección de bajo nivel aparentemente irrelevante puede producir consecuencias inesperadas para la privacidad en las capas superiores. Una limpieza de código del equipo de Chrome, pensada para reducir redundancia y mejorar el rendimiento, abrió inesperadamente una nueva ventana para la identificación del sistema operativo. En este sentido, la historia de Math.tanh es un caso clásico de «intención y efecto secundario».

Enlaces de referencia:

  • Scrapfly: Browser Math OS Fingerprint
  • Discusión en HN (item?id=48884853)