Hash de Imagen Perceptual (PIH)

Iniciado por Andrey, Marzo 21, 2018, 03:29:00 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.


Primero que nada decir que FB tiene una estrategia para intentar combatir el llamado "Porno venganza" el cual es básicamente publicar fotos de desnudos de una expareja o con el fin de dañar o desprestigiar a alguien. (Esto está en pruebas de FB)
La idea de Fb es ver primero las fotos antes de que sean propagadas, cargándolas a la plataforma antes de enviárselas a alguien más.

Primero se tienen que cargar a Fb ya sea en una conversación con uno mismo y marcarla como "Imagen intima no consensuada", para que se genere al hash de la imagen, creando una huella digital única para el archivo. La idea para no guardar la imagen en servidores de Fb es solo almacenan los hashes de estas después de procesarlas, cuando alguien intente cargar una imagen, Fb compara con la base de hashes antes de que esta sea publicada. Fácil de entender la idea.

A continuación intentare explicar esto

Su nombre es "Hash de Imagen Perceptual" (PIH) el cual es una cadena hexadecimal corta. Basado en la apariencia de una imagen. La idea de estos no es ser criptográficamente seguros. Ya que son invariablemente suaves a pequeños cambios en la imagen en cuestiones de rotación, recorte, ruidos, adición de borde y más.

Un hash de percepción es distinto a un hash de encriptación normal, ya que los de percepción se modifican ligeramente ante cambios pequeños, en cambio un hash como el md5 al generarse y tener una mínima alteración, se cambia por completo al original.

¿Cómo funciona el algoritmo?

Los algoritmos de hash de percepción generan una huella digital distinta (no única) generada de las características de una imagen y esta es comparable a cualquier otra.
Los hashes perceptuales tienen un concepto diferente a los hashes criptográficos (MD5, SHA1, etc.). En los hashes criptográficos los valores son aleatorios, ya que los valores utilizados para generar un hash actúan como semilla aleatoria, por lo que mismos datos generan el mismo resultado y evidentemente distintos datos crearan resultados diferentes.

La comparación de dos valores hash criptográficos nos dan a entender que si los hashes son diferentes entonces los datos son diferentes y si los datos son iguales entonces los datos quizá sean los mismos, ¿por qué dije "quizá"?, bueno por que como algunos ya sabrán existe la posibilidad de una colisión hash la cual hace que tener los mismos valores no garantice los mismos datos.

En cambio con hash de percepción, la similitud de hashes da idea de conjuntos de datos parecidos.
Los algoritmos de percepción tienen las mismas propiedades básicas: las imágenes se pueden escalar, tienen diferentes relaciones de aspecto, diferencia de colores y quizá combinar imágenes similares.

Imágenes prácticamente iguales:


Imagen 1 hash: (0011110000111110000011100001101000111010000111100001111000011110)
Imagen 2 hash: (0011110000111110000011100011111000111110000111100001111000011110)

Distancia de Hamming: 3


Imágenes distintas:


Imagen 1 hash: (0010100010101000101010001010100010101011001010110101011100110111)
Imagen 2 hash: (0111000011110000111100101101001101011011011101010011010101001111)

Distancia de Hamming: 32


¿Cómo se crea un Hash Perceptual?

Existen varios algoritmos, uno de los hashes más simples representa un promedio básico basado en las bajas frecuencias de una imagen.

En las imágenes las frecuencias altas dan detalles a esta, mientras que las bajas frecuencias muestran la estructura. Las imágenes grandes y detalladas tienen frecuencias muy altas. Una imagen pequeña casi no tiene detalles por lo cual tiene frecuencias bajas.

Hagamos un ejemplo:

Tome una imagen prestada del foro...



- Paso 1 Reducir el tamaño
Es la forma más rápida de eliminar las altas frecuencias.
En este caso se reduce a 8x8 para tener 64 pixeles en total. No es necesario mantener la relación de aspecto solo hay que dejarla a esa resolución. De esta manera el hash coincidirá con cualquier variación de la imagen sin importar escala o relación de aspecto.



- Paso 2 Reducir el color
La pequeña imagen de 8x8 se convierte a escala de grises para cambiar el hash de 64 pixeles ((RGB) 64 rojo, 64 verde, 64 azul) a 64 colores en total.



- Paso 3 Promedio de los colores
Calcule el valor medio de los 64 colores

- Paso 4 Calcule los bits
Cada bit se establece en función de si el valor del color está por encima o por debajo de la media

- Paso 5 Construye el hash
Establezca los 64 bits en un entero de 64 bits. El orden no importa siempre que lleve una secuencia.
(En mi caso los ordene de izquierda a derecha, de arriba abajo)



Hash = 00011000 00111100 01011010 01111110 11100111 10000001 00000000 00111100

El hash no cambiara si la imagen se escala o la relación de aspecto cambia. Aumentar o disminuir el brillo o el contraste hasta alterar los colores no cambia demasiado el valor.

Para comparar dos imágenes se construye el hash de cada una y se cuenta el número de posiciones de bits que son diferentes, Esto es llamado "Distancia de Hamming" (No tienes permitido ver los links. Registrarse o Entrar a mi cuenta) Una distancia de cero indica que es probable que sea una imagen muy similar o una variante de la misma. 5 significa que algunas cosas pueden ser diferentes pero quizá sean similares. Pero una distancia de 10 o más quiere decir una imagen probablemente diferente.

Vamos a compararla con la misma imagen, modificada muy caseramente y para fines prácticos con Paint (evidentemente se puede hacer con mejor software):





Hash: 0001000000110110010110100111111010001011100000010001000000111100

Comparación (resalto las alteraciones):
Original Hash= 00011000 00111100 01011010 01111110 11100111 10000001 00000000 00111100
Editada Hash= 00010000 00110110 01011010 01111110 10001011 10000001 00010000 00111100

Distancia de Hamming = 8


El promedio de hash es fácil y rápido, pero puede generar falsos errores si se realiza una corrección de gama o se aplica un histograma de color a la imagen. Esto es porque los colores se mueven a lo largo de una escala no lineal alterando donde se encuentra el promedio y haciendo que cambien los bits que se encuentran encima o por debajo de la media.

Existe un algoritmo más robusto en comparación con este que utiliza la idea de una Transformada de Coseno Discreta (DCT) para reducir las frecuencias.

A pesar de no ser criptográficamente sólidos, estos tienen aplicaciones en comparación de información sensible como el caso de Fb antes mencionado.

Si les interesa saber más de este tipo de temas pueden buscar "Análisis forense de imágenes digitales".




DMNTEL


"Es un mundo brutal y peligroso el que hay allá afuera... Pero encontré mi camino. El caos es mi hogar, y me aseguraré de que no escapes de el"...

"Solo se necesita una excusa para cambiar el mundo"