El sistema de identificación de TRACIO genera un identificador de visitante estable a partir de más de 130 señales de navegador. El identificador persiste entre sesiones, en modo incógnito, ante cambios de VPN y al borrar cookies. Esta página explica el pipeline de identificación completo.
El cliente recopila más de 130 señales de navegador distintas en 10 categorías. Cada señal sondea un aspecto diferente del navegador y el dispositivo, desde las características de hardware hasta el comportamiento de renderizado.
| Grupo | Señales | Estabilidad | Ejemplos |
|---|---|---|---|
| Hardware | 12 | Muy alta | Resolución de pantalla, memoria del dispositivo, concurrencia de hardware, soporte táctil |
| Renderizado | 9 | Alta | Huella de canvas (texto + geometría), renderizador WebGL, procesamiento de audio |
| Fuentes | 5 | Alta | Fuentes del sistema disponibles (69 familias probadas), preferencias de fuentes, renderizado MathML |
| Plataforma | 25 | Media | User-Agent, propiedades de navigator, zona horaria, idioma, vendor |
| Motor CSS | 10 | Media | Respuestas de media query (esquema de color, HDR, movimiento reducido, colores forzados) |
| Almacenamiento | 10 | Media | Soporte de cookies, localStorage, sessionStorage, cuota de almacenamiento |
| WebGL | 9 | Alta | Vendor de GPU, renderizador (unmasked), precisión de shaders, soporte de extensiones |
| Red | 3 | Baja | RTT de conexión, sonda TURN, versión de la app |
| Indicadores de bot | 15 | N/A | Flag de webdriver, frameworks de automatización, eval length, marcadores headless |
| Personalizadas | 14 | Varía | Huella matemática, features de WASM, detección de arquitectura |
No todas las señales son igual de útiles para la identificación. Las señales se clasifican por estabilidad:
Nivel 1 (Congelado): señales de hardware y renderizado que casi nunca cambian. Huella de canvas, renderizador WebGL, huella de audio, parámetros de GPU, enumeración de fuentes, operaciones matemáticas, byte de arquitectura.
Nivel 2 (Semiestable): señales que cambian con las actualizaciones del navegador o los cambios de configuración. User-Agent, Client Hints, plugins, media queries de CSS, capacidades de almacenamiento.
Nivel 3 (Volátil): señales que cambian con frecuencia. Resolución de pantalla (cambios de monitor), zona horaria (viajes), preferencias de idioma, propiedades de conexión.
El ID de visitante se calcula usando un sistema de hashing de tres niveles que equilibra la estabilidad con la extensibilidad:
Visitor ID = [Tier1Hash][Tier2Hash][Tier3Hash] 20 chars 10 chars 10 chars ──────── ──────── ──────── base62 base62 base62El Nivel 1 usa solo señales congeladas que son inherentes al hardware y al motor de renderizado. Estas señales cambian únicamente cuando el usuario cambia a un dispositivo físico distinto o realiza cambios significativos de hardware.
Señales incluidas: hash de la huella de canvas, renderizador WebGL (unmasked), vendor WebGL (unmasked), huella de audio, hash de enumeración de fuentes, hash de parámetros WebGL, hash de operaciones matemáticas, byte de arquitectura (ARM frente a x86).
Algoritmo:
key1=value1|key2=value2|... (claves ordenadas alfabéticamente)El Nivel 1 está congelado intencionadamente. Nunca se añaden nuevas señales al Nivel 1, garantizando que el núcleo de identidad permanezca estable entre actualizaciones del servidor.
El Nivel 2 captura el entorno del navegador y el sistema operativo. Estas señales cambian cuando el usuario actualiza su navegador, instala extensiones o modifica los ajustes del sistema.
Señales incluidas: datos de User-Agent, Client Hints (brands, plataforma, arquitectura), propiedades de navigator (vendor, plataforma, languages), lista de plugins, profundidad de color de pantalla, memoria del dispositivo, concurrencia de hardware.
El Nivel 3 captura señales volátiles que pueden cambiar entre sesiones. Se usan para la puntuación de confianza y la coincidencia difusa, pero no afectan al núcleo de identidad.
Señales incluidas: resolución de pantalla, zona horaria, idioma, bloqueadores del DOM, capacidades de almacenamiento, respuestas de media query de CSS, propiedades de conexión.
Cada nivel se hashea usando MurmurHash3-x64-128, una función de hash rápida y no criptográfica que produce una salida de 128 bits. El algoritmo:
MurmurHash3 ofrece una distribución excelente (cada bit de la entrada afecta a cada bit de la salida) y es lo bastante rápido para el cálculo en tiempo real. No es criptográficamente seguro, pero eso no es necesario para el hashing de huellas digitales.
Input: "canvas=abc123|webgl_renderer=ANGLE|audio=0.04852" ↓ MurmurHash3-x64-128Output: 0x7f4a8c2d1e3b5f6a 0x9d8c7b6a5e4f3d2c ↓ base62 encodeResult: "X7fh2Hg9LkMn3pQr5tBv"La puntuación de confianza (0.0 a 1.0) representa cuán segura está el sistema sobre la identificación del visitante:
Cuando la cookie _vid_t coincide con un visitante conocido, la confianza se establece en 1.0. La cookie contiene el UID del visitante, que el servidor valida frente a sus registros. Esta es la vía de identificación más rápida y fiable.
Los nuevos visitantes sin registro previo reciben una puntuación de confianza de 0.90. No hay riesgo de coincidencia falsa, ya que no existen registros previos con los que comparar.
Para los visitantes que regresan sin coincidencia de cookie, el sistema calcula la confianza a partir de:
Ponderación por frecuencia de señal (IDF): las señales más únicas en la población global reciben mayor peso. Un renderizador WebGL raro identifica más que una resolución de pantalla común.
Coincidencia difusa: el sistema compara la huella actual frente a las huellas almacenadas usando la distancia de Hamming a nivel de bit. Las señales se agrupan por nivel, y la puntuación de coincidencia de cada nivel se pondera de forma independiente.
Consistencia histórica: si las señales de un visitante han sido estables a lo largo de múltiples visitas, la confianza aumenta. Si las señales fluctúan con frecuencia, la confianza disminuye.
| Escenario | Puntuación típica | Explicación |
|---|---|---|
| Coincidencia de cookie | 1.000 | UID de la cookie _vid_t verificado en el servidor |
| Primera visita | 0.900 | Sin registros previos con los que comparar |
| Coincidencia fuerte de huella | 0.990-0.999 | Coinciden todas las señales de Nivel 1, la mayoría de Nivel 2 |
| Coincidencia parcial (actualización del navegador) | 0.950-0.989 | Coincide el Nivel 1, cambió el Nivel 2 (nuevo UA) |
| Coincidencia débil (cambios significativos) | 0.850-0.949 | Cambiaron algunas señales de Nivel 1 |
| Ambigua | 0.500-0.849 | Múltiples coincidencias posibles en la base de datos |
TRACIO usa una cookie de origen (first-party) (_vid_t) para mantener la identidad del visitante entre sesiones:
_vid_tSameSite=Lax, y Secure en HTTPS (no HttpOnly — el agente la lee en el cliente)La cookie se emite tanto en el servidor (mediante la cabecera de respuesta Set-Cookie) como en el cliente por el agente, y el UID también se replica en localStorage como reserva cuando las cookies están bloqueadas.
El servidor intenta establecer la cookie en ámbitos de dominio progresivamente más amplios:
app.example.com → example.com → comSe usa el dominio más amplio que consiga establecer la cookie. Esto garantiza que la cookie persista entre subdominios.
TRACIO puede identificar a la misma persona a través de distintos navegadores en el mismo dispositivo cuando las señales de Nivel 1 producen hashes coincidentes. Como el Nivel 1 se basa en características de hardware y renderizado (canvas, WebGL, audio, fuentes), estas señales suelen ser idénticas entre navegadores basados en Chromium en la misma máquina y se degradan entre motores (Chromium frente a Firefox frente a Safari). No se espera hacer coincidir a un visitante de escritorio con uno de móvil: las superficies de hardware y renderizado difieren.
La coincidencia entre navegadores es intrínsecamente una operación de menor confianza y se trata como tal en la puntuación.