Seguramente todos vieron en la televisión y en Internet fotografías de personas, especialmente borrosas para ocultar sus rostros. Por ejemplo, Bill Gates:
En su mayor parte, esto funciona porque no hay una forma conveniente de revertir el desenfoque en una foto suficientemente detallada para reconocer una cara. Entonces con caras todo está bien. Sin embargo, muchos recurren a difuminar
números y
textos confidenciales. Mostraré por qué es una mala idea.
Supongamos que alguien publica una foto de su cheque o tarjeta de crédito en Internet por alguna razón terrible (demostrando en el foro que ganó un millón de dólares o mostrando algo gracioso, o comparando el tamaño de algo con una tarjeta de crédito, etc. .), desenfocó la imagen usando un efecto de mosaico demasiado común para ocultar los números:
Parece seguro porque nadie leerá los números? RESPUESTA INCORRECTA Hay un ataque a este esquema:
Paso 1. Obtenga una imagen de cheque limpia
Hay dos formas de hacer esto. Puede eliminar los números en un editor gráfico o abrir una cuenta en el mismo banco y fotografiar su propia tarjeta desde el mismo ángulo, combinar el balance de blancos y el contraste. Luego, elimine los números en un editor gráfico (en una foto de alta resolución, esto es más fácil de hacer).
En nuestros ejemplos, por supuesto, esto se hace fácilmente:
Paso 2. iteraciones
Use un script para iterar sobre todos los números de cuenta posibles y cree un cheque para cada uno, separando grupos de números. Por ejemplo, en las tarjetas VISA, los números se agrupan por 4, por lo que puede procesar individualmente cada sección. Esto requiere solo 4 × 10,000 = 40,000 imágenes, lo cual es fácilmente generado por el script.
Paso 3. Desenfoque cada imagen de manera idéntica al original
Determine el tamaño exacto y el desplazamiento de píxeles de los mosaicos utilizados para desenfocar la imagen original (fácil), y luego haga lo mismo con cada una de sus imágenes borrosas. En este caso, vemos que la imagen borrosa consiste en un mosaico de 8x8 píxeles, y el desplazamiento se determina contando desde el borde superior de la imagen (no se muestra):
Ahora clasificamos todas las imágenes, las desenfocamos de la misma manera que la original, y obtenemos algo como esto:
Paso 4. Determine el vector de brillo de mosaico de cada imagen borrosa.
¿Qué significa esto? Bueno, tomemos la versión de mosaico 0000001 (aumentada):
... y determine el nivel de brillo (0-255) de cada área del mosaico, nombrándolos de una manera consistente como
:
En este caso, el número de cuenta 0000001 crea un vector de brillo de mosaico
. Encontramos el vector de brillo de mosaico para cada número de cuenta de la misma manera, usando un script para desenfocar cada imagen y leer el brillo. Dejar
- función de número de cuenta
. Entonces
denota el i-ésimo valor vectorial del vector de brillo de mosaico
obtenido del número de cuenta
. Por encima
.
Ahora hacemos lo mismo para la imagen de referencia original que encontramos en Internet o en cualquier lugar, obteniendo un vector que llamaremos aquí
:
Paso 5. Encuentra el más cercano a la imagen original.
Defina el vector de brillo del mosaico de la imagen original, llamémoslo
y luego simplemente calcule la distancia desde cada número de cuenta (indicado por
) al vector de brillo del mosaico (después de la normalización):
donde
N(a(x))
y
N(z)
son las constantes de normalización dadas
Ahora solo encuentra el más pequeño
. Para las tarjetas de crédito, solo una pequeña parte de los números posibles confirma los números hipotéticamente posibles de las tarjetas de crédito, por lo que tampoco hay nada complicado aquí.
Por ejemplo, en nuestro caso, calculamos
y luego proceder a calcular las distancias:
¿Quizás el número de cuenta corresponde al mosaico 1124588?
"¡Pero usaste tu propia imagen, que es fácil de descifrar!"
En el mundo real, fotos reales, no ejemplos ficticios tomados en Photoshop. Tenemos distorsión de texto debido al ángulo de la cámara, la alineación imperfecta, etc. ¡Pero esto no impide que una persona determine con precisión el tipo de distorsión y cree un guión apropiado! En cualquier caso, algunas distancias mínimas definidas se pueden considerar como candidatos, y especialmente en el mundo de las tarjetas de crédito, donde los números están bellamente divididos en grupos de 4, y solo 1 de cada 10 números es en realidad un número válido, lo que hace que sea más fácil elegir entre varios. candidatos
Para darse cuenta de esto en fotografías reales, se debe mejorar el algoritmo de distancia. Por ejemplo, puede reescribir la fórmula de distancia anterior para normalizar las desviaciones estándar además del promedio. También puede procesar de forma independiente los valores RGB o HSV para cada área del mosaico, así como utilizar secuencias de comandos para distorsionar el texto en varios píxeles en cada dirección y comparar (lo que aún le deja un número completamente limitado de comparaciones en una PC rápida). Puede usar algoritmos similares a los algoritmos vecinos más cercanos existentes para aumentar la confiabilidad del trabajo en fotografías reales.
Entonces sí, usé mi imagen y la adapté para este caso. Pero el algoritmo ciertamente puede mejorarse para el uso en el mundo real. Pero no tengo el tiempo ni el deseo de mejorar nada, porque no busco su información. Pero una cosa es segura: esta es una situación muy simple. No use mosaicos simples para desenfocar la imagen. Todo lo que debe hacer es reducir la cantidad de información en la imagen que contiene todo
bits efectivos de datos de la cuenta. Cuando distribuye tales imágenes, desea
eliminar la información personal en lugar de obstaculizar el acceso a ella al reducir la cantidad de información visual.
Imagine una imagen gráfica de 100 × 100. Supongamos que acabo de promediar los píxeles y reemplacé cada uno de ellos con un valor promedio (es decir, convertí la imagen en un "mosaico" de un solo píxel). Acaba de crear una función que, a partir de 256 ^ (10000) variantes, hash hasta 256 variantes. Obviamente, con los 8 bits recibidos, no podrá restaurar la imagen original. Pero si sabe que en total hay 10 opciones para la imagen original, entonces usando estos 8 bits puede determinar fácilmente cuál se usó.
Analogía de ataque de diccionario
La mayoría de los administradores de sistemas UNIX / Linux saben que las contraseñas en / etc / passwd o / etc / shadow están encriptadas con una función unidireccional, como Salt o MD5. Esto es bastante seguro, ya que nadie puede descifrar la contraseña mirando su texto cifrado. La autenticación se realiza al realizar el mismo cifrado unidireccional de la contraseña ingresada por el usuario al ingresar al sistema, y comparar este resultado con el hash guardado. Si coinciden, el usuario ha pasado con éxito la prueba.
Es bien sabido que un esquema de cifrado unidireccional se rompe fácilmente cuando un usuario selecciona una palabra del diccionario como contraseña. Todo lo que el atacante debe hacer es cifrar todo el diccionario de inglés, comparar el texto cifrado de cada palabra con el texto cifrado almacenado en / etc / passwd y seleccionar la palabra correcta como contraseña. Por lo tanto, generalmente se aconseja a los usuarios que elijan contraseñas más complejas que no sean palabras. Un ataque de diccionario se puede ilustrar de la siguiente manera:

Del mismo modo, el desenfoque de imagen es un esquema de cifrado unidireccional. Convertirás la imagen que tienes en otra imagen destinada a publicación. Pero como los números de cuenta generalmente no superan los millones, podemos compilar un "diccionario" de números posibles. Por ejemplo, todos los números son de 0000001 a 9999999. Luego, inicie el procesamiento automático, que coloca cada una de estas imágenes en una foto de un fondo vacío, y difumina cada imagen. Luego queda solo comparar los píxeles borrosos y ver qué opciones se ajustan más al original.
Solución
La solución es simple: ¡no desenfoque las imágenes! En cambio, simplemente pinta sobre ellos:
Recuerde que desea eliminar completamente la información y no reducir su cantidad, como en una foto borrosa.