¿El hashing criptográfico es una buena manera de identificar imágenes de forma exclusiva?

Sería un buen primer paso, suponiendo que solo intente encontrar coincidencias * EXACT * hasta el nivel de píxeles. Si hago un hash de un archivo una vez, y luego lo hago un poco por cada copia, obtendré el mismo hash cada vez. Si los archivos realmente son idénticos, puedo comparar los hashes mucho más rápido que los archivos.

El método tiene un inconveniente: el archivo en sí mismo puede considerarse como un entero entero; de hecho, así es como lo ve el algoritmo hash. El hash (en sí) es casi siempre más pequeño que el archivo. Las colisiones son una posibilidad; dos archivos diferentes producirán el mismo hash.

Con un algoritmo de hashing decente, esto es poco probable, pero sigue siendo un problema potencial, por lo que debe ser lo más pequeño posible. La pequeñez es uno de los principales objetivos de diseño de los hashes de criptografía. Por ejemplo, SHA-3 [vea mi biografía] es / era necesario debido a un equipo chino que publicó un artículo teórico sobre cómo forzar colisiones (SHA-2 / SHA-256 / SHA-512).

La prueba matemática es un subconjunto contable y adecuado de un conjunto contable en el que los miembros incluyen: los enteros y el valor hash de todos los enteros. Esto no puede ser biyectivo [1] (existe un mapeo uno a uno en ambas direcciones entre todas las versiones posibles de ambos conjuntos). Hay otro inconveniente: si los archivos difieren, un hash no me dirá en qué se diferencian, solo que lo hacen.

Notas al pie

[1] Biyección

No, porque no necesita hashing criptográfico, el hashing regular está bien.

Si usa hashing criptográfico como la familia SHA-2, está perdiendo eficiencia computando el hash a cambio de nada.

Una buena función hash regular como Jenkins, FNV, Murmur, etc. funcionará tan bien como SHA-2 solo más rápido, lo que probablemente sea algo importante si tiene imágenes grandes.

Las funciones hash criptográficas no producen menos colisiones que una buena función hash regular, eso es un error común.

Tenga en cuenta que dos versiones de la misma imagen (como un jpg y png) tendrán un hash diferente si solo tiene el hash completo del archivo.

Una buena función hash regular es un buen método para identificar objetos de forma única, no tiene nada especial para las imágenes y ciertamente no tiene que usar un hash criptográfico.

No. El hash también será exclusivo de la codificación y los metadatos. Incluso el más mínimo cambio sin imagen pasará en cascada a través de los resultados hash.

En este punto, no hay una forma establecida de obtener la garantía estadística equivalente como un hash criptográfico para una imagen. Hay formas de generar un hash basado en características y estructuras visuales, pero el hash resultante tiene una probabilidad mucho mayor de colisión. Lo mejor que puede hacer es una secuencia de bits repetible que minimiza la distancia de hamming entre 2 resultados cuando un humano percibe que las imágenes son similares.

Esto significa que si las imágenes se escalan, se recortan o giran ligeramente, o se ajustan los colores, los bits resultantes entre el hash de la imagen original y el modificado serán casi los mismos. Al establecer una distancia de hamming aceptable como el criterio para hacer coincidir los hashes, obtenemos un rango más amplio de golpes perceptivos mientras aumentamos ligeramente las colisiones. A medida que aumenta la distancia de golpeo aceptable, esto cambiará.

Neal Krawetz tiene una excelente redacción sobre este tema y ha descrito un algoritmo que hace exactamente esto. [1]

Notas al pie

[1] El Blog del Factor Hacker