Por qué me importa este tema ahora
En los primeros años casi todos a mi alrededor hablaban de «huella». Un digest — y parecía que la persona estaba atrapada. En una diapositiva se ve victorioso. En el laboratorio el digest traiciona demasiado a menudo tanto al detector como al investigador.
La ventana cambió de tamaño — la suma de campos es otra. El navegador se actualizó — otra. La persona concedió el acceso a datos de otra forma — otra. Mientras tanto la historia de coherencia podía seguir siendo honesta: la declaración «soy tal navegador en tal clase de dispositivo» seguía encajando con lo que sabe hacer la superficie. O al revés: el digest sigue «bonito», pero las capas dentro ya se pelean entre sí.
Estoy reaprendiendo el lenguaje. No «atrapa la huella». Sino «encuentra la contradicción de capas». Suena más humilde y es más honesto como ingeniería.
El tercer texto de la serie hace falta como vocabulario. Sin él, los dos espejos y el diario igual se deslizan hacia la magia cómoda de una sola cadena.
De dónde salió el culto al hash único

El hash promete tres cosas que a todos gustan.
Promete compresión: muchas señales → una cadena. Promete comparación: iguales / no iguales. Promete escala: se puede meter en una base y buscar «a los mismos».
En demos didácticas y en el marketing de huellas suena a destino. En la vida del navegador hay demasiadas razones legítimas por las que la cadena se mueve: actualización, fuentes, tamaño de ventana, modo privacy, política de Client Hints, otra red, otro conjunto de permisos.
El culto al hash no es peligroso porque los hashes sean inútiles. Son útiles como herramienta de experimento y como una de las señales. Es peligroso porque sustituye la pregunta. En lugar de «¿están coherentes las capas?» suena «¿coincidió la cadena?».
Marco público

En textos públicos de detect.expert me resulta cercana la crítica de un único SHA sobre un gran conjunto de campos: cómodo de guardar y comparar, pero frágil ante cambios cotidianos. Es más útil mirar la coherencia del perfil declarado con el comportamiento medido y las ramas de la superficie — un ensamble de señales débiles en lugar de una cadena «mágica». No necesito su liturgia de precisión; necesito el principio.
Herramientas abiertas de consistency como x-bot version1 hablan un lenguaje parecido: desajuste de versión de API y UA, desajuste de motor y declaración, divergencia de contextos. Allí el riesgo es sobre contradicciones. No sobre «calculamos el alma».
Incluso Client Hints en la documentación de Chrome conviene leerlos como lección de humildad: las hints pueden estar recortadas, limitadas por política, y no están obligadas a ser prueba completa. La declaración del navegador es una hipótesis. La hipótesis se comprueba.
El calendario de features en Chrome release notes, Firefox Releases y el blog de WebKit muestra otra idea útil: la superficie de API tiene historia. La historia permite hablar de un «piso de capacidades» sin reducir a toda la persona a un solo digest. Textos aparte de la serie irán más al detalle; aquí basta el principio.
Cuatro capas de las que hablo en voz alta
Para no ahogarme en la abstracción, mantengo un mapa simple.
1. Declaración. Lo que el navegador (o su envoltorio) dice de sí: UA, hints, a veces campos explícitos de perfil. 2. Superficie de capacidades. Lo que realmente está disponible en JS/CSS/Web API en esta versión y en este contexto. 3. Comportamiento en el tiempo. Cómo se usa el dispositivo: sensores, gesto, ritmo. En palabras simples, sin umbrales biométricos en un texto público. 4. Red como contexto. De dónde llegó el tráfico, cómo se ve la capa de transporte, qué dice el zoológico de candidatos WebRTC. El contexto no es automáticamente «bot».
La coherencia es si estas capas no cuentan cuentos distintos. El hash a menudo mezcla las capas en una papilla y luego se sorprende de que la papilla esté salada.
Lo que observo en el laboratorio, en palabras simples
Falsa alarma
Cuando pego demasiado en un solo digest, obtengo una falsa alarma sobre una persona viva. La vida cotidiana es ruidosa. La red hace ruido. La privacidad corta las hints. Locale, fuentes, tamaño de ventana, un bump menor de versión — todo eso mueve el hash. La persona es la misma; la etiqueta ya es otra. El detector enamorado del digest empieza a odiar la vida.
Falsa calma
A veces al revés: el digest es estable y dentro hay conflicto. La declaración de SO y la superficie de capacidades pelean. La declaración de versión y el piso de API pelean. Un contexto de ejecución y otro cuentan cosas distintas. El aspecto estático es «uniforme», el comportamiento en el tiempo es raro. Estabilidad sin coherencia es decoración.
Lenguaje del equipo
Si en el lab dicen «disparó la huella», todos piensan en una etiqueta. Si dicen «encontramos la contradicción A vs B», todos piensan en comprobar una hipótesis. La segunda conversación es más productiva. Exige nombrar las capas. Las capas nombradas son más difíciles de esconder bajo magia.
El checker público vuelve a aparecer
Un checker en verde puede significar «el alfabeto de la superficie está en orden». No significa «la historia de coherencia está cerrada». Un checker en rojo puede significar ruido cotidiano. No significa «automatización demostrada». El género diario del texto anterior enseña a no convertir el color de la pantalla en cosmovisión.
Mini-escenarios (didácticos, sin recetas)
Escenario A. Una persona abrió una ventana privada. Parte de la historia de storage desapareció, parte de las hints se recortó. El hash es «otro». La coherencia de la declaración «soy un Chrome normal» con la superficie de API puede seguir siendo normal. Si grito al hash, estoy peleando con la privacy.
Escenario B. El perfil declara una época de navegador, y el conjunto de API disponibles parece de otra época. Eso ya es lenguaje de contradicción entre declaración y superficie. Se puede discutir a través de release notes y feature-detectors abiertos — sin convertir el texto en guía de sustitución.
Escenario C. En un contexto una cosa, en uno aislado — otra. Las herramientas públicas llevan tiempo sugiriendo comparar las «habitaciones» del navegador. Aquí importa el principio: una verdad debería sonar parecida en habitaciones distintas. Los detalles de implementación los dejo fuera de cámara.
Estos escenarios no son para copiar un ataque. Son para entrenar la pregunta: ¿qué capa no encajó con cuál?
Qué cambia esto en el detect y en el build
En el detect formulo la conclusión con más cuidado. «Hay contradicción entre declaración y medición» es una frase de trabajo. «Esto es un bot» es una frase rara sin contexto, historia y comprensión del coste del error. Quiero que el ruido cotidiano suave no se convierta automáticamente en sentencia — de eso habrá un texto aparte de la serie. Aquí basta el principio: no todo lo que cambió en el hash es automatización; no todo lo estable en el hash es coherente.
En el build dejo de celebrar el «fingerprint estable» como métrica principal. La estabilidad es útil para el experimento (menos ruido aleatorio entre corridas). Pero el objetivo de la investigación es una historia coherente de capas, no una constante bonita en el log. Si las habitaciones del navegador cuentan cuentos distintos, un digest estable no me consuela.
El vínculo con los dos espejos aquí es directo. El detect enamorado del hash exige al build «coincide con la cadena etalón». El detect enamorado de la coherencia exige al build «no mientas entre capas». El segundo objetivo es más difícil y más honesto.
El vínculo con el diario también es directo. El género bélico ama el hash: da un marcador. El género de laboratorio ama la contradicción: da una pregunta.
Cómo tomo notas para no volver al culto del hash
En el diario del experimento intento escribir cuatro campos incluso cuando me apetece mucho una sola línea:
- Qué *declaración* compruebo.
- Qué *medición* de superficie/comportamiento/red hay al lado.
- En qué está la *contradicción* (o por qué no la hay).
- ¿Esto parece *vida cotidiana* o *romper la integridad del entorno*?
Si no puedo rellenar el tercer campo, aún no tengo conclusión — solo inquietud. La inquietud es combustible de investigación, no un veredicto.
Lo que no diré y por qué
No publico fórmulas de scoring, pesos, umbrales ni catálogos de señales internas. La idea de capas y la crítica del hash único son alfabetización pública. La receta de un production concreto — no.
Tampoco convierto este texto en una instrucción de «cómo estabilizar la huella». La estabilización para eludir es otro género, y el estatuto de la serie lo prohíbe.
No doy un «conjunto universal de campos para el hash ideal». La universalidad aquí es parte del problema.
Conclusión breve
Un gran hash es cómodo en una diapositiva y frágil en la vida. Me enseño el lenguaje de la coherencia: declaración del navegador, superficie de API, comportamiento, red como contexto. La contradicción es más honesta que la etiqueta. Junto con los dos espejos y el género diario, este es el tercer pilar de la serie.
Después se puede bajar a los detalles — empezando por la declaración más habitual: User-Agent. No para aprender a falsificarlo, sino para dejar de confundir de una vez declaración con prueba.
