Intentamos recuperar texto difuminado, pixelado y tachado. Esto es lo que volvió.

Respuesta corta: si una captura de pantalla le da a un atacante lo que las capturas suelen dar (una fuente de interfaz conocida, un tamaño de texto conocido, un filtro fácil de adivinar), entonces el desenfoque gaussiano ligero y la pixelación con bloques pequeños no son tachado. En nuestra prueba de 480 casos, el desenfoque con un radio de 2 a 4 px devolvió el texto original de forma exacta entre el 92 y el 100 % de las veces. La pixelación de cuatro píxeles lo devolvió el 71 % de las veces. Una superposición "transparente" con un 20 % de opacidad lo devolvió absolutamente siempre. Guardar después el resultado como JPEG, como hace una app de chat, apenas ayudó. El único tratamiento que no filtró nada fue un recuadro sólido y plano sobre el texto.
La regla que se desprende de los datos es simple. Si el radio del desenfoque o el bloque de píxeles es menor que unas 0,3 veces el tamaño de la fuente en píxeles, hay que asumir que el texto se puede leer de vuelta. Entre 0,4 y 0,6 veces todavía se filtra de un tercio a la mitad de los caracteres, y para un número de tarjeta o una clave de API eso es una brecha, no un desenfoque. La recuperación solo cayó al nivel del azar a partir de 0,8 veces. Para entonces el desenfoque es tan fuerte que un recuadro sólido queda mejor de todos modos.
Todo lo que aparece aquí es reproducible. El código, las 480 imágenes tratadas y la tabla de resultados están publicados bajo CC-BY; el enlace está al final.
Por qué hicimos esta prueba
"No difumines, tacha" es un consejo antiguo. dheera.net lo argumentó en 2014, Depix mostró en 2020 cómo se leían de vuelta contraseñas pixeladas y security.stackexchange lleva una década repitiéndolo. Lo que no encontramos fue una respuesta paramétrica: cuánto desenfoque es suficiente, con qué tamaño de texto y qué pasa cuando la imagen pasa por un mensajero que la recomprime. La gente elige el radio de desenfoque a ojo. Nosotros queríamos números.
Método
Muestras. Seis campos del tipo que de verdad se filtra en pantallas compartidas: una dirección de correo, un número de tarjeta, un IBAN, un número de teléfono, una clave de API (sk_live_...) y el nombre de una persona. Cada uno renderizado en dos fuentes, Arial (proporcional) y Menlo (monoespaciada), a 14 px y 20 px, sobre un fondo de interfaz oscuro, con una relación de píxeles de dispositivo de 2x, es decir, una captura Retina. En total, 24 imágenes de origen.
Tratamientos, diez en total. Desenfoque gaussiano con sigma 2, 4, 8 y 12 px. Pixelación con bloques de 4, 8, 12 y 16 px. "Transparente": texto dibujado con un 20 % de opacidad sobre el fondo, lo que algunas herramientas llaman máscara suave. Y un recuadro sólido del color del primer plano, que llamamos tachado. Cada imagen tratada se guardó además una vez más como JPEG con calidad 80. 24 x 10 x 2 = 480 casos.
El atacante. Asumimos lo que una captura de un producto conocido regala gratis: la fuente, el tamaño, la posición del campo y su conjunto de caracteres (dígitos para una tarjeta, [a-z0-9._@-] para un correo). El atacante conoce o adivina el tratamiento y su intensidad. La recuperación es una búsqueda en haz (beam search) sobre caracteres: renderizar una cadena candidata con la misma fuente, aplicar el mismo tratamiento, comparar con el objetivo, conservar los seis mejores prefijos, extender un carácter, repetir. Es la versión rigurosa de lo que hace Depix con la pixelación, y funciona igual para el desenfoque y para la transparencia. Sin aprendizaje automático, sin GPU. Una ejecución completa tarda unos 25 minutos en un portátil.
Puntuación. Tasa de error de caracteres (CER; 0 es recuperación perfecta, 1 es ningún acierto) y si la cadena recuperada coincidía exactamente. El tachado se puntúa como CER 1,0 por construcción: todos los candidatos se renderizan como el mismo recuadro plano, así que no hay nada que comparar.
Resultados
Por tratamiento

- Transparente (20 % de opacidad): CER medio 0,00 · Recuperación exacta 100 % · Tras JPEG q80 0,00 / 100 %
- Desenfoque sigma 2 px: CER medio 0,00 · Recuperación exacta 100 % · Tras JPEG q80 0,00 / 100 %
- Desenfoque sigma 4 px: CER medio 0,03 · Recuperación exacta 92 % · Tras JPEG q80 0,10 / 88 %
- Pixelado 4 px: CER medio 0,11 · Recuperación exacta 71 % · Tras JPEG q80 0,11 / 71 %
- Pixelado 8 px: CER medio 0,49 · Recuperación exacta 8 % · Tras JPEG q80 0,49 / 8 %
- Desenfoque sigma 8 px: CER medio 0,57 · Recuperación exacta 21 % · Tras JPEG q80 0,64 / 17 %
- Pixelado 12 px: CER medio 0,63 · Recuperación exacta 21 % · Tras JPEG q80 0,63 / 21 %
- Pixelado 16 px: CER medio 0,83 · Recuperación exacta 0 % · Tras JPEG q80 0,84 / 0 %
- Desenfoque sigma 12 px: CER medio 0,84 · Recuperación exacta 4 % · Tras JPEG q80 0,87 / 0 %
- Tachado sólido: CER medio 1,00 · Recuperación exacta 0 % · Tras JPEG q80 1,00 / 0 %
La superposición transparente es la que menos nos sorprendió y la que más nos preocupa. Dibujar texto con un 20 % de opacidad es simplemente dibujarlo con menos contraste. Un ajuste de niveles lo devuelve, y nuestra búsqueda acertó los 48 casos. Algunas herramientas de captura ofrecen esto como modo de privacidad. No lo es.
El desenfoque ligero y los píxeles pequeños son totalmente reversibles. El desenfoque con sigma 2 y sigma 4, y la pixelación de 4 px, devolvieron el texto la mayoría de las veces. No de forma aproximada. Exacta.
JPEG no te salva. La recompresión añadió algunos errores al caso de sigma 4 y no cambió nada en la pixelación: los bloques son grandes y planos, que es precisamente lo que JPEG conserva bien.
Por intensidad relativa al tamaño del texto

Las cifras absolutas dependen del tamaño de la fuente, así que la forma útil de leerlas es como la razón entre el sigma del desenfoque (o el bloque de píxeles) y el tamaño de la fuente en píxeles:
- hasta 0,2: Desenfoque: CER medio / exacto 0,00 / 100 % · Pixelado: CER medio / exacto 0,01 / 92 %
- en torno a 0,3: Desenfoque: CER medio / exacto 0,07 / 83 % · Pixelado: CER medio / exacto 0,20 / 50 %
- en torno a 0,4: Desenfoque: CER medio / exacto 0,37 / 33 % · Pixelado: CER medio / exacto 0,42 / 8 %
- en torno a 0,6: Desenfoque: CER medio / exacto 0,80 / 8 % · Pixelado: CER medio / exacto 0,40-0,56 / 8-42 %
- 0,8 o más: Desenfoque: CER medio / exacto 0,87 / 0 % · Pixelado: CER medio / exacto 0,80-0,87 / 0 %
Por debajo de unos 0,3 el texto vuelve. Entre 0,4 y 0,6 vuelve en parte, y esa parte es la región peligrosa: en el 46 % de las ejecuciones con pixelación de 8 px y el 33 % de las de desenfoque con sigma 8, al menos la mitad de los caracteres eran correctos. La mitad de un número de tarjeta, o los primeros doce caracteres de una clave de API activa, no es privacidad. Solo a partir de 0,8 los resultados se quedaron cerca del azar (para un campo solo de dígitos, el azar es un CER en torno a 0,9).
El texto monoespaciado y grande es más fácil de recuperar

Menlo a 20 px con pixelación de 12 px, bloques de más de la mitad de la altura del texto, volvió aun así con un CER de 0,02. Las fuentes de paso fijo le dan a la búsqueda una cuadrícula; el texto más grande da a cada carácter más píxeles donde dejar su firma. Esto importa porque los terminales, los IDE, los visores de logs y la mayoría de las tablas de administración usan exactamente esa combinación.
Por campo
Los números de tarjeta fueron el objetivo más fácil (CER medio 0,22, 64 % exacto en los tratamientos de desenfoque, pixelado y transparente, sin JPEG): un alfabeto de diez símbolos y una longitud fija. Las direcciones de correo y las claves de API fueron las más difíciles, con un CER en torno a 0,47, porque el espacio de búsqueda por carácter es mayor. "Más difícil" seguía significando que el 36 % de ellas volvieron de forma exacta.
Qué significa esto en la práctica
Tacha, no difumines, cuando el contenido es lo que importa. Un recuadro sólido fue el único tratamiento de esta prueba que no filtró nada, en todas las fuentes, tamaños y compresiones. También es el único cuya seguridad no depende de un parámetro que hay que acertar.
Si hay que difuminar, que sea fuerte y ajustado al texto: un sigma de al menos 0,8 veces el tamaño de la fuente, o bloques de píxeles de al menos 0,8 veces el tamaño de la fuente. Lo que importa es la razón, no el número absoluto de píxeles; hay que medir ambos en las mismas unidades. Para una fuente de interfaz de 14 px eso es un sigma de 11 px o más, mucho más fuerte que cualquier valor por defecto.
Nunca hay que confiar en la opacidad. Una superposición transparente es un cambio de color, no una eliminación.
No hay que contar con que el mensajero termine el trabajo. La recompresión JPEG dejó la pixelación intacta y el desenfoque casi intacto.
El desenfoque más seguro es el que nunca llega a la pantalla. Todo lo que se ofusca después de la captura puede atacarse a partir de los píxeles capturados. Ocultar el valor antes de que se dibuje, en la propia página, antes de que empiece la compartición o la grabación, elimina los píxeles que el ataque necesita. Ese es el enfoque de DataBlur, y es la razón por la que hicimos este estudio.
Limitaciones
Se trata de un atacante que conoce la fuente y el tratamiento. Eso es realista para capturas de interfaces habituales, donde la fuente y el tamaño son públicos, pero una fuente poco común sube el listón. No lo elimina; el atacante aún puede probar los candidatos más probables.
Dos fuentes, dos tamaños, un fondo. Los temas claros, las diferencias de suavizado y el renderizado subpíxel moverán las cifras. No esperamos que muevan mucho los umbrales, pero no lo hemos medido.
Sin ruido del mundo real más allá de JPEG q80. Sin fotos de pantalla con el móvil, sin compresión de vídeo. Los códecs de vídeo son un estudio aparte.
El ataque es una búsqueda en haz simple. Existen ataques mejores (priors aprendidos, haces más amplios, restricciones de diccionario en correos y nombres). Nuestras cifras son un suelo de lo que un atacante puede hacer, no un techo.
Puntuamos la recuperación de texto que el atacante espera encontrar. El texto oculto de longitud desconocida es más difícil de localizar, aunque el recuadro del campo suele verse de todos modos en la imagen difuminada.
Datos y código
Las 480 imágenes tratadas, la tabla de resultados (results.csv) y el script del experimento (experiment.py, Python con Pillow y NumPy) están publicados en github.com/yochef17/blur-recovery-study bajo licencia CC BY 4.0. Volver a ejecutar la matriz completa tarda unos 25 minutos en un portátil. Si la amplías con más fuentes, temas claros o vídeo, cuéntanoslo: support@datablur.app.
Publicado por DataBlur. DataBlur es una extensión de navegador que difumina o tacha datos sensibles en una página antes de que se comparta o se grabe. Hicimos este estudio para averiguar cuánto protege realmente la palabra "blur" de esa frase. Ninguna de las conclusiones depende del producto.