Tu lista de fuentes tardó años en formarse. El sistema operativo puso ahí unos cientos de fuentes, Office añadió las suyas, Adobe sumó más con cada aplicación, y aquella fuente display que instalaste para un proyecto en 2021 nunca se marchó. Cualquier sitio web puede leer el resultado en unos cientos de milisegundos, sin diálogo de permisos, y cuanto más ha crecido esa lista, menos probable es que la de cualquier otra persona coincida con ella.
Los navegadores nunca han dado a las webs una forma de pedir la lista de fuentes sin más, precisamente porque identifica demasiado. Resultó que daba igual. Un script puede medir las fuentes en lugar de pedirlas, sin más herramientas que una línea de texto invisible y dos lecturas de anchura. El widget de esta página ejecuta esa medición contra 175 fuentes candidatas y te enseña lo que tu navegador entrega, además de lo común que es tu conjunto concreto entre todos los que han ejecutado el análisis.
Cómo funciona el fingerprinting de fuentes: el truco de medir
Aquí va la técnica entera. El script crea un <span> invisible con una cadena sin sentido, mmmmmmmmmmlli, a 72 píxeles, y le pregunta al navegador qué anchura ha salido en una familia genérica como monospace. Luego cambia la familia a "Segoe UI", monospace y vuelve a leer la anchura. Si Segoe UI está instalada, el navegador la renderiza y la anchura se mueve. Si no lo está, entra en juego la fuente de respaldo y el número se queda quieto. Una fuente candidata, dos lecturas de anchura, ninguna API de por medio.
La cadena tampoco es casual: las emes y las eles son, en la mayoría de las tipografías, la minúscula más ancha y la más estrecha, así que sustituir una fuente por otra desplaza la anchura total todo lo posible. Míralo ocurrir en tu propia máquina:
font-family: monospace …font-family: "Segoe UI", monospace …Hay formas más pulcras de obtener la misma respuesta. document.fonts.check() la devuelve como un booleano en una sola llamada —en los navegadores Chromium, gracias a una peculiaridad que incumple la especificación; Firefox y Safari contestan que sí a cualquier fuente que les nombres— y medir texto en un canvas evita tocar el DOM por completo. La plataforma web tiene exactamente una API educada en este terreno, queryLocalFonts(), que devuelve nombres reales de fuentes e incluso los propios archivos, previa aprobación de un diálogo de permisos por parte del usuario. Ningún rastreador te ha enseñado jamás ese diálogo.
Toda esta familia de técnicas responde al nombre de enumeración de fuentes (font enumeration), y los rastreadores no son sus únicos clientes. Los sistemas antifraude y de detección de bots ejecutan el mismo sondeo para comprobar que un dispositivo es lo que dice ser, y por eso el resultado te sigue hasta sitios a los que un simple anunciante nunca llegaría: procesos de pago, puntuación de riesgo al iniciar sesión, revisiones de cuenta.
Qué revelan tus fuentes instaladas
Lo que hace valiosa la lista no es lo larga que sea, sino lo que confiesa cada entrada. Las fuentes llegan a tu máquina como efectos secundarios de todo lo demás que instalas. Segoe UI significa Windows. Helvetica Neue significa Apple. DejaVu Sans significa Linux. Bahnschrift acota Windows a la versión 10 o posterior, y Segoe UI Variable dice 11. Minion Pro o Myriad Pro significan que por esta máquina ha pasado software de Adobe. Un Windows configurado para chino lleva fuentes que uno estadounidense no tiene ningún motivo para tener. Tus fuentes son un registro de lo que usas y de, más o menos, cuándo lo montaste:
Segoe UI viene con WindowsHelvetica Neue viene con macOS e iOSDejaVu Sans viene con los escritorios LinuxBahnschrift añadida en Windows 10, ausente antesSegoe UI Variable añadida en Windows 11Minion Pro la instalan las aplicaciones de AdobeMyriad Pro la instalan las aplicaciones de AdobeEs la misma clase de fuga que recorrimos en Un navegador, cinco declaraciones de sistema operativo: las etiquetas que reporta un navegador se pueden editar, pero la máquina que hay detrás sigue comportándose como ella misma. Un User-Agent de macOS falsificado sentado sobre una lista de fuentes llena de Segoe y Calibri es una contradicción que cualquier script detecta en milisegundos.
En el estudio Panopticlick de la EFF, la lista de fuentes —recogida entonces mediante Flash y Java— aportaba 13,9 bits de información identificativa, más que cualquier otra señal de fingerprinting del navegador medida, salvo la lista de plugins. Desde entonces los navegadores han neutralizado los plugins —navigator.plugins reporta en todas partes la misma lista corta de visores de PDF, o directamente nada—, mientras que las fuentes siguen siendo exactamente igual de medibles que en 2010. Además, la lista se filtra dos veces: una como lista y otra a través del fingerprinting de canvas, donde las fuentes disponibles para el renderizador ayudan a decidir los píxeles exactos que produce un dibujo en canvas.
Y la lista es paciente. No cambia cuando borras las cookies, no cambia en una ventana de incógnito y tu VPN le trae absolutamente sin cuidado. Cambia cuando instalas o desinstalas software, algo que para la mayoría de la gente ocurre unas pocas veces al año. Para lo que suele durar un identificador de rastreo, eso es mucha vida útil.
¿Se puede evitar el fingerprinting de fuentes? La trampa del bloqueo
Hay extensiones que prometen frenar la medición, ya sea bloqueando los sondeos o alimentándolos con ruido. El problema es el mismo que caza las falsificaciones a medias en todo este sitio: la defensa es más rara que aquello que esconde.
Un Chrome de escritorio en Windows que no reporta más que un puñado de fuentes «web-safe» no es anónimo; es peculiar, y de lo peculiar vive el fingerprinting. Los aleatorizadores son peores. Una lista de fuentes real se mantiene estable durante meses, así que una lista que muta entre visitas te señala como una de las pocas personas que usan exactamente esa extensión. Y las extensiones que falsean los números lo hacen sobrescribiendo justo las funciones con las que una página mide. Eso fabrica un segundo problema: una función nativa sobrescrita deja de reportar [native code] cuando la inspeccionan, el mismo delator que expone a los plugins de sigilo.
Los navegadores que se defienden de esto en serio lo hacen por entero. Tor Browser incluye sus propias fuentes y restringe a las webs a esa lista fija, de modo que todos los usuarios de Tor presentan más o menos el mismo conjunto reducido. Funciona, y le dice a cada sitio que usas Tor. Brave, en cambio, difumina la lista («farbling», lo llaman): por sitio y por sesión enseña a los rastreadores las fuentes de tu sistema operativo más una selección aleatoria de las que tienes instaladas, de modo que la lista que un rastreador recoge hoy discrepa discretamente de la de mañana sin parecer nunca imposible. Ambos enfoques funcionan porque el navegador entero se construyó alrededor de ellos, y no como un parche que pelea contra el navegador en el que vive.
Qué hacer en la práctica
- Mira primero tu propia lista. El widget de esta página ya ha medido tu navegador. Despliega la lista de fuentes para ver lo que ve cualquier web y comprueba lo común que es tu conjunto exacto entre todos los análisis que ha ejecutado este sitio. Un conjunto único en el mundo conviene conocerlo antes de que importe.
- No lo parchees por piezas. Una extensión que bloquea fuentes sobre un navegador por lo demás normal te hace más raro, no más seguro. Si quieres esta defensa en tu navegación diaria, usa un navegador diseñado alrededor de ella, Brave o Tor, y asume sus contrapartidas a sabiendas.
- Si gestionas varias identidades, la lista de fuentes es parte de la identidad. Cada perfil necesita fuentes que concuerden con el sistema operativo que afirma tener, sesión tras sesión. Incogniton da a cada perfil su propia lista de fuentes y la mantiene estable de una sesión a otra, de modo que la biografía que lee un sitio pertenece al perfil, no a tu máquina.
Tus fuentes llevan respondiendo preguntas sobre ti desde que tienes esta máquina. El widget de arriba muestra lo que han estado contando, y el análisis completo del navegador muestra lo que el resto de tu navegador añade junto a ellas.