AntiDetect
Funciones Tecnología Precios Para quién
Docs Blog FAQ
Idioma
EnglishItalianoDeutschEspañolРусский
Descargar

Fingerprinting del navegador explicado: cómo te identifican las webs sin cookies

Canvas, WebGL, AudioContext, fuentes, resolución de pantalla -- cómo decenas de señales se combinan en una huella única. Qué buscan los sistemas de detección y por qué casi ninguna herramienta de «privacidad» resuelve el problema.

En este artículo
  1. ¿Qué es el fingerprinting del navegador?
  2. Las señales del fingerprint
  3. Cómo se calcula un fingerprint
  4. Entropía: por qué unas señales pesan más que otras
  5. Fingerprinting activo y pasivo
  6. Cómo usan los fingerprints los sistemas de detección
  7. Por qué no funcionan las herramientas de privacidad habituales
  8. Cómo abordan el fingerprinting los navegadores antidetect
  9. La carrera armamentística

¿Qué es el fingerprinting del navegador?

El fingerprinting del navegador es una técnica de rastreo que identifica a los usuarios recogiendo información sobre la configuración de su navegador y su dispositivo. A diferencia de las cookies, que se guardan en tu equipo y se pueden borrar, un fingerprint se calcula a partir de datos que tu navegador expone por defecto -- información que existe porque las webs la necesitan para funcionar bien.

Tu navegador revela el sistema operativo, la resolución de pantalla, la zona horaria, el idioma, las fuentes instaladas, el modelo de GPU, las características del procesamiento de audio y mucho más. Por separado, ninguno de esos datos te identifica. Combinados, crean una firma que, con una probabilidad abrumadora, es única para tu navegador concreto en tu dispositivo concreto.

Un estudio de 2020 de investigadores de INRIA encontró que más del 94 % de los navegadores con JavaScript activado tenían un fingerprint único. Desde entonces la cosa solo se ha vuelto más precisa: las empresas de detección han añadido nuevas señales y mejorado sus algoritmos de hash.

Las señales del fingerprint

Hay más de 50 señales individuales que alimentan un fingerprint de navegador. Estas son las más importantes:

Entropía alta
Fingerprint del canvas

El navegador dibuja texto y formas invisibles en un elemento canvas de HTML5 y luego lee los datos de los píxeles. GPUs, controladores, motores de renderizado de fuentes y ajustes de suavizado del sistema operativo distintos producen resultados ligeramente diferentes -- suficiente para generar un hash casi único.

Entropía alta
Fingerprint de WebGL

Parecido al canvas, pero con renderizado 3D. El navegador dibuja una escena 3D y el resultado varía según el hardware de la GPU, la versión del controlador y la implementación de OpenGL. También expone las cadenas de fabricante y renderizador de la GPU (por ejemplo, «ANGLE (NVIDIA GeForce RTX 3080)»).

Entropía alta
Fingerprint de AudioContext

El navegador genera una señal de audio con la Web Audio API y mide cómo se procesa. Hardware y controladores de audio distintos producen valores en coma flotante distintos, y de ahí sale un hash de audio único sin que suene nada.

Entropía alta
Enumeración de fuentes

El navegador mide el ancho y el alto del texto renderizado en varias fuentes. Comprobando qué fuentes están instaladas (y cómo se dibujan), un script de fingerprinting puede identificar tu conjunto concreto de fuentes -- que varía mucho de una máquina a otra.

Entropía media
Métricas de pantalla y ventana

Resolución de pantalla, espacio disponible (descontando la barra de tareas), profundidad de color, device pixel ratio, dimensiones interiores de la ventana y si está maximizada. La combinación de estos valores estrecha bastante la identificación.

Entropía media
Propiedades de navigator

Cadena del user agent, plataforma, idioma(s), número de núcleos de CPU (hardwareConcurrency), memoria del dispositivo, puntos de toque máximos, tipo de conexión y si «Do Not Track» está activado. Cada uno aporta unos pocos bits de entropía.

Más allá de estas señales principales, los scripts de fingerprinting también recogen:

Cuatro capas que muestran qué señales de fingerprinting vienen del hardware, el sistema operativo, el navegador y la red
Cuatro fuentes, un fingerprint. A la capa de abajo no llega ningún ajuste del navegador.

Cómo se calcula un fingerprint

Un script de fingerprinting recoge todos estos valores, los serializa en una cadena o un objeto estructurado y los pasa por una función de hash (normalmente MurmurHash3 o SHA-256) para producir un identificador compacto. Un ejemplo simplificado:

const signals = {
  canvas: getCanvasHash(),
  webgl: getWebGLHash(),
  audio: getAudioHash(),
  fonts: getInstalledFonts(),
  screen: `${screen.width}x${screen.height}x${screen.colorDepth}`,
  timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
  language: navigator.language,
  cores: navigator.hardwareConcurrency,
  memory: navigator.deviceMemory,
  platform: navigator.platform,
  userAgent: navigator.userAgent,
  touchPoints: navigator.maxTouchPoints,
  // ... 30+ more signals
};

const fingerprint = murmurhash3(JSON.stringify(signals));

El hash resultante es una cadena corta -- algo como a3f8c91b -- que hace de ID único de tu navegador. Ese hash se guarda en el servidor y se compara con visitas posteriores.

Entropía: por qué unas señales pesan más que otras

No todas las señales aportan lo mismo a la unicidad. El concepto de entropía mide cuánta información identificativa lleva una señal. Más entropía significa más bits de información, es decir, una señal que acota más tu identidad.

SeñalEntropía aproximadaImpacto en la unicidad
Hash del canvas~14 bitsMuy alto -- diferencias de GPU y de renderizado
Renderizador WebGL + hash~12 bitsMuy alto -- identifica el modelo de GPU
Fuentes instaladas~11 bitsMuy alto -- varía de una máquina a otra
Hash de AudioContext~10 bitsAlto -- depende del hardware
Resolución de pantalla~5 bitsMedio -- muchas resoluciones son comunes
Zona horaria~4 bitsMedio -- unos 24 grandes grupos horarios
User agent~6 bitsMedio -- la versión del navegador añade detalle
Idioma~3 bitsBajo -- conjunto limitado de idiomas comunes
Plataforma~2 bitsBajo -- Win/Mac/Linux/móvil
Profundidad de color~1 bitMuy bajo -- casi todo el mundo va a 24 bits

La entropía total de todas las señales de un script de fingerprinting moderno suele superar los 40 bits. Con 40 bits de entropía hay más de un billón de combinaciones posibles -- de sobra para identificar de forma única a cada navegador del planeta.

Fingerprinting activo y pasivo

Las técnicas de fingerprinting se dividen en dos categorías:

El fingerprinting pasivo usa los datos que el navegador manda automáticamente en cada petición HTTP: la cabecera del user agent, los idiomas aceptados, las codificaciones aceptadas y las características de la conexión. El servidor no necesita ejecutar JavaScript. Es más discreto pero da menos señales.

El fingerprinting activo ejecuta JavaScript en la página para sondear el navegador: renderiza imágenes en canvas, consulta WebGL, mide la salida de audio, enumera fuentes y comprueba comportamientos concretos de las APIs. Es mucho más potente y es en lo que se apoya la mayoría de sistemas de detección.

En la práctica, los sistemas de detección usan ambos. El fingerprint pasivo de las cabeceras HTTP se calcula en el servidor, mientras que el activo se calcula en el cliente con JavaScript y se envía de vuelta como señal. Los dos se combinan y se contrastan para ver si cuadran.

Cómo usan los fingerprints los sistemas de detección

Los fingerprints de navegador no se usan aislados. Las plataformas de detección modernas los combinan con otras señales para construir una puntuación de riesgo:

El fingerprint por sí solo es apenas una entrada. Lo que de verdad importa es la coherencia y la verosimilitud de todo el paquete de señales. Un fingerprint perfecto con una IP de centro de datos y movimientos de ratón robóticos se marca igualmente.

Por qué no funcionan las herramientas de privacidad habituales

La gente suele recurrir a herramientas de privacidad que no sirven contra el fingerprinting:

Incógnito / navegación privada

El modo incógnito borra cookies e historial al cerrar la ventana. Al fingerprint no le hace nada. El hash del canvas, la salida WebGL, las fuentes, la resolución de pantalla y todas las demás señales siguen siendo idénticas a tu sesión normal. El mismo fingerprint, solo que sin cookies.

VPN / Tor

Las VPN cambian tu dirección IP. Tor además uniformiza algunas propiedades del navegador a través del Tor Browser. Pero las VPN corrientes no tocan el fingerprint del navegador -- el hash del canvas y el renderizador WebGL siguen igual. Y el Tor Browser, aunque resiste el fingerprinting, es reconocible como Tor Browser, algo que muchas plataformas bloquean de plano.

Extensiones del navegador

Extensiones como Canvas Blocker o los complementos de spoofing de fingerprint intentan interceptar las APIs de fingerprinting. El problema es triple: (1) las extensiones se detectan por sus efectos secundarios en el DOM y en el comportamiento de las APIs, (2) no pueden falsear de forma coherente las señales que nacen por debajo de la capa de JavaScript, y (3) la presencia de determinadas extensiones de privacidad es en sí misma una señal de fingerprint -- muy pocos usuarios reales las tienen instaladas.

Varios perfiles del navegador (Chrome/Firefox)

Chrome y Firefox permiten varios perfiles de usuario, cada uno con sus cookies y su historial. Pero todos comparten el mismo fingerprint, porque son el mismo navegador sobre el mismo hardware. Perfiles distintos, el mismo hash de canvas, el mismo WebGL, las mismas fuentes. Los sistemas de detección los relacionan al instante.

Cómo abordan el fingerprinting los navegadores antidetect

Los navegadores antidetect están hechos precisamente para atacar el fingerprinting en su origen. Esto es lo que hace distinto uno bien construido:

Configuración de fingerprint por perfil. Cada perfil de navegador recibe su propia configuración completa: una semilla concreta para el ruido del canvas, un renderizador WebGL falseado que corresponde a una GPU real, un conjunto de fuentes coherente con el sistema operativo elegido, métricas de pantalla propias de un dispositivo real, etcétera. La clave es que todos esos valores sean coherentes entre sí.

Modificación a nivel de motor. En un navegador antidetect bien hecho, las modificaciones del fingerprint ocurren dentro del motor del navegador -- en el nivel de C++ dentro de Chromium. Cuando una web llama a canvas.toDataURL(), es el propio motor el que devuelve datos de píxeles modificados. No hay ningún override de JavaScript que detectar, porque la modificación pasa antes de que los datos lleguen a la capa de JavaScript.

Inyección de ruido con semillas estables. En lugar de devolver valores aleatorios (que cambiarían en cada carga de página y harían saltar las alarmas), los buenos navegadores antidetect usan ruido determinista basado en una semilla por perfil. La misma prueba de canvas produce siempre el mismo hash dentro de un perfil, pero perfiles distintos dan hashes distintos. Así es como se comportan los navegadores reales: tu fingerprint es estable entre sesiones.

Validación de verosimilitud del hardware. Antes de generar un perfil, el sistema comprueba que la combinación de señales sea verosímil. Un perfil que dijera ser Windows 10 con una GPU Apple M2 resultaría sospechoso de inmediato. El generador de fingerprints se asegura de que sistema operativo, GPU, fuentes, user agent y demás señales formen una identidad coherente.

El objetivo no es hacer un navegador que parezca «anónimo». Es hacer uno que parezca una persona corriente usando un ordenador corriente -- solo que una persona corriente distinta en cada perfil.

La carrera armamentística

El fingerprinting del navegador es una carrera armamentística entre las empresas de detección y las herramientas antidetect, y va cada vez más rápido.

Los sistemas de detección son cada vez más sofisticados. Añaden señales nuevas (como mediciones de getClientRects() y el comportamiento de la WebCodecs API), cruzan biometría del comportamiento con datos del fingerprint y usan aprendizaje automático para detectar configuraciones «imposibles» o «improbables» que ningún navegador real produciría.

A la vez, los navegadores antidetect responden modificando capas más profundas del motor, mejorando las comprobaciones de coherencia y construyendo bases de datos más completas de configuraciones de dispositivos reales para usarlas como plantillas.

Dos cosas están claras: el fingerprinting no va a desaparecer (es demasiado valioso para la prevención del fraude y la segmentación publicitaria), y las herramientas pasivas como VPN y extensiones no bastan. Si el aislamiento a nivel de fingerprint importa en tu trabajo, necesitas una herramienta hecha justo para eso.

Construido a nivel de motor

El motor Chromium propio de P8 genera el fingerprint a nivel de código fuente -- no con parches en JS. Cada perfil produce un fingerprint coherente y verosímil.

Empieza gratis
Todos los artículos Anterior: ¿qué es un navegador antidetect?