Este post es la continuación técnica de «64 bits deciden qué puedes subir a internet». Si no has leído ese, léelo primero. Aquí asumimos que entiendes qué es un hash perceptual y por qué PhotoDNA, PDQ y NeuralHash son primas cercanas.
El 5 de agosto de 2021, Apple anunció NeuralHash. El 18 de agosto —trece días después— un investigador bajo pseudónimo Asuhariet Ygvar publicó en GitHub la ingeniería inversa completa del modelo extraído de binarios de iOS. A los pocos días, dos investigadores independientes —Brad Dwyer y otros— publicaron colisiones: dos imágenes visualmente distintas con el mismo hash. El sistema que Apple prometía con tasa de falso positivo de «uno por billón de cuentas por año» resultó ser atacable con hardware de consumo.
La reacción pública se centró en «Apple metió la pata». El análisis técnico posterior demostró lo contrario: Apple no metió la pata. La fragilidad adversarial es una propiedad estructural de la familia de hashes perceptuales. NeuralHash era, si acaso, de los diseños más sofisticados del mercado.
Cinco años después, la UE está legislando sobre el despliegue obligatorio de esta misma tecnología en WhatsApp, Signal y Telegram. La regulación asume que el algoritmo es una primitiva invariante, como si fuera SHA-256. No lo es.
Colisión accidental versus colisión adversarial
El lector familiar con hashes criptográficos tiene un modelo mental: una colisión es un evento raro, accidental, cuya probabilidad se puede calcular como 2^(-n) donde n es el número de bits. Para SHA-256, son 2^128 operaciones para encontrar una colisión —computacionalmente inviable con infraestructura conocida.
Los hashes perceptuales son otra clase de objeto. La distinción importa.
Colisión accidental. Dos imágenes legítimas que, por azar, producen el mismo hash. Con un hash perceptual de 64 bits, la probabilidad no es 2^(-64): es mucho mayor porque el espacio de imágenes «razonables» (las que un humano genera, no ruido aleatorio) tiene regularidades estadísticas. La probabilidad real depende de la distribución del dataset, pero órdenes de magnitud por encima del límite teórico.
Colisión adversarial. Dos imágenes generadas deliberadamente para producir el mismo hash. Aquí la diferencia es cualitativa. En un hash perceptual:
- El espacio de hashes es pequeño (64-96 bits).
- La función de hash es «suave» —pequeñas perturbaciones de píxeles producen pequeñas perturbaciones del hash. Esta es la propiedad que queremos (tolerancia a reencoding) y también la que nos hunde (atacabilidad).
- Los hashes basados en CNN (NeuralHash) son diferenciables. Un atacante puede usar descenso por gradiente para encontrar la colisión directamente.
- Los hashes clásicos (pHash, PDQ) no son diferenciables en el mismo sentido, pero son atacables con búsqueda local y heurísticas estándar de ML.
En términos prácticos: encontrar una colisión adversarial en un hash perceptual es un problema de optimización que un estudiante de máster de ML resuelve en una tarde con PyTorch y una GPU de consumo.
Tres tipos de ataque, tres consecuencias distintas
La literatura de 2021-2023 distingue tres modalidades de ataque, cada una con implicaciones operativas diferentes.
Colisión arbitraria
Dado el algoritmo de hash H, encontrar dos imágenes x₁ y x₂ visualmente distintas tales que H(x₁) = H(x₂). Es el ataque más fácil: se cumple por construcción si el espacio de hashes es pequeño. Las colisiones de Ygvar publicadas en agosto de 2021 son de este tipo: un perro y un paisaje gris, visualmente no tienen nada que ver, producen idéntico NeuralHash.
Uso operativo: degradar la credibilidad del sistema. Si se pueden demostrar colisiones públicamente, la premisa «el hash es un identificador fiable» se derrumba.
Pre-imagen dirigida
Dado un hash objetivo h₀ (por ejemplo, uno extraído de la base de NCMEC o adivinado), generar una imagen x visualmente inocente tal que H(x) = h₀. Este es el ataque que preocupa operativamente.
Uso operativo: enviar imágenes a víctimas. Un atacante genera una foto de gatos que tiene el hash de un material conocido de CSAM. La envía por WhatsApp. El sistema de escaneo dispara la alerta. Aunque haya revisión humana después y la foto se confirme inocente, el proceso ha costado tiempo, recursos legales en algunos casos, y estigma para la víctima. Al escala —miles de víctimas simultáneas— el sistema se vuelve inoperable.
Apple argumentó en 2021 que este ataque no era factible porque la base de NCMEC es cerrada y el atacante no conoce los hashes objetivo. Prokos et al. (USENIX Security 2023) demostraron que el argumento era insuficiente: el atacante no necesita los hashes individuales, basta con acceso a una imagen de referencia del conjunto objetivo, que en el mundo real es trivial de obtener para actores sofisticados.
Evasión
Dada una imagen x conocida (por ejemplo, material de CSAM presente en la base de hashes), generar una modificación x’ que sea visualmente idéntica pero produzca un hash distinto. Este es el ataque que rompe la utilidad del sistema para su propósito declarado.
Uso operativo: distribuidores reales de CSAM aplican el ataque a su material. El sistema de escaneo no detecta las copias modificadas aunque sean píxel a píxel indistinguibles para un humano. La cantidad de material nuevo que se añade a las bases de NCMEC crece más lento que las variaciones adversariales, y la cobertura se deteriora con el tiempo.
El caso NeuralHash en detalle
La cronología del colapso de NeuralHash es pedagógica.
5 de agosto de 2021. Apple anuncia el paquete de CSAM Detection. La documentación técnica publicada incluye la afirmación de 1 falso positivo por billón de cuentas por año, basada en tests internos contra un dataset de referencia.
18 de agosto de 2021. Asuhariet Ygvar publica AppleNeuralHash2ONNX en GitHub. El proyecto extrae el modelo NeuralHash del binario de iOS 14.7 y lo convierte a formato ONNX, permitiendo ejecutarlo en cualquier máquina. El código no requiere acceso privilegiado: los modelos CoreML son extraíbles por cualquier usuario con un iPhone jailbroken o un análisis estático del kernel.
19 de agosto de 2021. Usuarios del repo publican la primera colisión: dos imágenes distintas (collision1.png, collision2.png) que producen el mismo hash de 96 bits bajo NeuralHash. La técnica era búsqueda por gradiente sobre el modelo extraído, aproximadamente 50 líneas de PyTorch.
20-27 de agosto de 2021. Apple confirma que las colisiones demostradas son reales, pero argumenta que no son operativamente preocupantes por dos razones: (a) la base de NCMEC es secreta, (b) hay un umbral de 30 coincidencias antes de dispararse alerta. Los críticos responden: (a) la base no necesita ser conocida en detalle, basta con acceso a imágenes de referencia del set, (b) el umbral de 30 se vuelve trivial de superar cuando el atacante puede crear N colisiones a voluntad.
Septiembre 2021. Apple anuncia retraso. Entre bastidores, la decisión se relaciona con la imposibilidad de defender técnicamente el sistema sin reconocer públicamente que la arquitectura tenía un fallo de diseño.
2023. Prokos, Fendley, Green, Jois y Cao publican «Squint Hard Enough: Attacking Perceptual Hashing with Adversarial Machine Learning» en USENIX Security. El paper formaliza los tres tipos de ataque contra NeuralHash, PhotoDNA (black-box) y PDQ. Demuestra que los tres son atacables con tasas de éxito superiores al 80% usando herramientas estándar de adversarial ML. El trabajo cierra el debate académico: la fragilidad no es un bug de NeuralHash; es una propiedad estructural de la familia.
¿Y PhotoDNA? ¿Y PDQ?
El argumento que se oye ocasionalmente es «NeuralHash era CNN-based y por eso diferenciable; PhotoDNA es clásico y por tanto seguro». Es incorrecto.
PhotoDNA es propietario de Microsoft. No podemos auditar su implementación exacta. Sin embargo, Prokos et al. demostraron ataques black-box: el atacante no necesita acceso al algoritmo, solo al comportamiento de entrada/salida a través de servicios que lo consumen. En condiciones experimentales, los ataques black-box contra PhotoDNA tuvieron tasas de éxito del 75-80% para generación de colisiones.
PDQ de Meta es open-source. Cualquiera puede estudiar el código y atacarlo con gradiente. Prokos et al. lo rompieron con las mismas técnicas usadas contra NeuralHash, con tasas ligeramente distintas pero comparables.
La razón subyacente: todo hash perceptual necesita ser «suave» para ser útil. Si no es suave, no tolera reencoding ni pequeñas alteraciones, y pierde su propósito. Si es suave, es atacable. La suavidad y la invulnerabilidad son incompatibles por construcción.
PhotoDNA, PDQ, pHash, dHash, aHash, NeuralHash: todos son atacables. Con niveles de dificultad distintos, con tasas de éxito distintas, pero todos. No existe en la literatura un hash perceptual que combine tolerancia operativa con robustez adversarial. El problema está abierto y probablemente sea teóricamente imposible sin renunciar a una de las dos propiedades.
Implicaciones para la regulación
Esto es lo que debería pesar en cualquier debate sobre Chat Control.
La CSA Regulation propuesta por la Comisión Europea obliga a proveedores de servicios de comunicación a detectar CSAM en mensajes cifrados mediante client-side scanning. La propuesta técnicamente-neutra habla de «perceptual hash matching» como una de las técnicas aceptables. El asunto crítico: la regulación trata el algoritmo como una primitiva invariante, como si fuera criptográficamente estable.
No lo es. Y las consecuencias operativas son predecibles.
Los actores sofisticados evaden. Distribuidores reales de CSAM con un mínimo conocimiento técnico aplican las evasiones publicadas en la literatura académica. Su material pasa sin disparar alertas. La detección que la regulación promete no alcanza al objetivo real.
Los usuarios normales son vulnerables a bombardeo. Un atacante genera imágenes con hashes de CSAM conocido, las envía masivamente a víctimas (adversarios políticos, ex-parejas, periodistas, disidentes). Las alertas se disparan, los procesos legales se activan, la carga de prueba recae en la víctima. El sistema permite un nuevo vector de acoso legal difícil de desmontar.
El sistema captura a los usuarios intermedios. Usuarios que reciben o distribuyen material sin sofisticación técnica —y sin intención maliciosa explícita, en muchos casos— son los que efectivamente caen. El perfil estadístico del capturado se deforma hacia usuarios menos sofisticados, no hacia los criminales que la regulación dice perseguir.
Estos tres efectos combinados producen una métrica fundamental: el coste por caso real detectado del sistema crece con el despliegue, mientras el ratio verdadero positivo / falso positivo se deteriora. A partir de un umbral de escala, el sistema genera más ruido que señal. Los estudios de NCMEC sobre eficacia real de PhotoDNA en escenarios heterogéneos sugieren que ya estamos cerca de ese umbral, pero la evidencia pública está sesgada por los incentivos del proveedor.
Las organizaciones civiles que firmaron contra la regulación —Access Now, EFF, EDRi, CCC— no argumentan desde el purismo de «privacidad sobre todo». Argumentan desde la ineficacia esperada: un sistema adversarialmente frágil no cumple su mandato, mientras abre vectores de abuso políticos que la regulación no anticipa.
Qué significa esto para ti
No es un argumento contra perseguir CSAM. Ningún investigador serio en criptografía o seguridad lo plantea así. Es un argumento contra confiar el peso operativo del sistema en un algoritmo cuya fragilidad adversarial es conocida desde hace cuatro años y documentada en literatura académica top-tier.
Los sistemas serios —NCMEC, Meta, Microsoft— combinan hashes perceptuales con clasificadores CNN entrenados contra ataques adversariales, revisión humana en cadena de escalado, análisis de red y metadata, y cooperación policial tradicional. El hash es una primera línea barata, no la defensa completa.
La regulación europea está escribiendo «usa hash perceptual» en ley. La ley dura décadas. Los algoritmos cambian en meses. El mismatch temporal es la trampa más difícil de corregir una vez escrita.
Acciones concretas para el lector técnico:
- Lee el paper de Prokos et al. (2023). Cuarenta páginas. La sección de resultados experimentales —las tablas de tasas de éxito por tipo de ataque y tipo de hash— es citable en cualquier debate público. No requiere especialización previa en adversarial ML.
- Reproduce un ataque en local. El repo de Ygvar (
AppleNeuralHash2ONNX) sigue disponible en GitHub. Requiere una GPU modesta y dos horas. Ver el modelo colisionar con tus propios ojos hace el argumento imposible de ignorar. - Opina con base. Cuando te toque comentar la CSA Regulation —en conversaciones profesionales, en redes, ante un representante político—, el argumento «es adversarialmente frágil y la literatura lo documenta» es más útil que «es una violación de la privacidad». El primero es verificable y no polariza. El segundo es cierto pero cae en el casillero ideológico.
El algoritmo del que depende la regulación se puede romper en una tarde con PyTorch. Todos los hashes perceptuales actuales lo son. La pregunta no es si esto es un fallo del algoritmo. Es si construir infraestructura política sobre una base tecnológica conocidamente frágil es una decisión que un Parlamento informado tomaría.
Referencias
- Prokos, J.; Fendley, N.; Green, M.; Jois, T. M.; Cao, Y. «Squint Hard Enough: Attacking Perceptual Hashing with Adversarial Machine Learning». USENIX Security Symposium, 2023 (arXiv:2112.09283).
- Ygvar, A. «AppleNeuralHash2ONNX». GitHub, agosto 2021. Ingeniería inversa de NeuralHash y generador de colisiones.
- Struppek, L.; Hintersdorf, D.; Neider, D.; Kersting, K. «Learning to Break Deep Perceptual Hashing: The Use Case NeuralHash». ACM FAccT, 2022 (arXiv:2111.06628).
- Jain, S.; Crețu, A.-M.; de Montjoye, Y.-A. «Adversarial Detection Avoidance Attacks: Evaluating the Robustness of Perceptual Hashing-Based Client-Side Scanning». USENIX Security, 2022.
- Abelson, H.; Anderson, R.; Bellovin, S. M.; et al. «Bugs in Our Pockets: The Risks of Client-Side Scanning». arXiv:2110.07450, 2021.
- Meta. PDQ Whitepaper. GitHub:
facebook/ThreatExchange, 2019. - Apple. «CSAM Detection Technical Summary», agosto 2021. Archivado; ya no publicado oficialmente.
Read this article in English.



