En la práctica, sí, un hash criptográfico idéntico significa que los archivos son iguales, siempre que los archivos no hayan sido creados por un atacante u otra entidad maliciosa. Las probabilidades de colisiones aleatorias con cualquier función hash criptográfica bien diseñada son tan pequeñas que pueden ser insignificantes en la práctica y en ausencia de un atacante activo.
En general, sin embargo, no, no podemos decir que dos archivos arbitrarios que tienen el mismo hash definitivamente significan que son idénticos.
La forma en que funciona una función de cifrado hash es tomar una entrada de longitud arbitraria y generar un valor de longitud fija calculado a partir de la entrada. Algunas funciones hash tienen múltiples longitudes de salida para elegir, pero la salida sigue siendo hasta cierto punto un valor de longitud fija. Este valor tendrá una longitud de unas pocas docenas de bytes; Los algoritmos hash con el valor de salida más largo de uso común en la actualidad tienen una salida de 512 bits y una salida de 512 bits es de 64 bytes.
Si una entrada a una función hash es más larga que la salida de la función hash, se debe eliminar cierta fidelidad para que la entrada encaje en la salida. En consecuencia, deben existir múltiples entradas de longitudes mayores que la longitud de la salida, que generan la misma salida.
Tomemos el caballo de batalla actual, SHA-256, como ejemplo. Produce un hash de 256 bits o 32 bytes. Si tiene dos archivos que tienen exactamente 32 bytes de longitud, pero diferentes, estos deberían (suponiendo que no haya fallas en el algoritmo) hash a valores diferentes, sin importar el contenido de los archivos; en términos matemáticos, el hash es una función que asigna un espacio de entrada de 2 256 a un espacio de salida de 2 256 , que debería ser posible sin colisiones. Sin embargo, si tiene dos archivos que son cada 33 bytes de longitud, debe existir alguna combinación de entradas que dan el mismo valor hash de salida de 32 bytes para los archivos, ya que estamos ahora la asignación de un 2 264 espacio de entrada en un 2 256espacio de salida; aquí, podemos ver fácilmente que, en promedio, deberían existir 2 8 entradas para cada salida individual. Lleve esto más lejos, y con archivos de 64 bytes, ¡debe haber 2 256 entradas para cada salida!
Las funciones hash criptográficas están diseñadas de tal manera que es computacionalmente difícil componer una entrada que da una salida particular, o componer dos entradas que dan la misma salida. Esto se conoce como resistencia al ataque de preimagen o resistencia al ataque de colisión . No es imposible encontrar estas colisiones; solo pretende ser muy, muy, muy, muy difícil. (Un caso especial de un ataque de colisión es un ataque de cumpleaños ).
Algunos algoritmos son mejores que otros para resistir a los atacantes. El MD5 generalmente se considera completamente roto en estos días, pero la última vez que miré, todavía tenía una buena resistencia a la preimagen . SHA-1 también está efectivamente roto; Se han demostrado ataques previos a la imagen, pero requieren condiciones específicas, aunque no hay razón para creer que ese será el caso indefinidamente; Como dice el refrán, los ataques siempre mejoran, nunca empeoran. SHA-256/384/512 actualmente todavía se cree seguro para la mayoría de los propósitos. Sin embargo , si solo está interesado en ver si dos , válidos y no maliciososlos archivos son los mismos, entonces cualquiera de estos debería ser suficiente, porque el espacio de entrada ya está lo suficientemente limitado como para que le interesen principalmente las colisiones aleatorias. Si tiene alguna razón para creer que los archivos fueron creados de manera maliciosa, entonces necesita al menos usar una función de cifrado hash que actualmente se considera segura, lo que pone la barra inferior en SHA-256.
La primera imagen previa es encontrar una entrada que produzca un valor hash de salida específico; la segunda preimagen es encontrar una entrada que proporcione la misma salida que otra entrada especificada; colisión es encontrar dos entradas que produzcan la misma salida, sin tener en cuenta lo que es y, a veces, sin tener en cuenta cuáles son las entradas.
Dicho todo esto, es importante tener en cuenta que los archivos pueden tener representaciones de datos muy diferentes y aún mostrar exactamente lo mismo. Por lo tanto, pueden parecer iguales a pesar de que sus hashes criptográficos no coinciden, pero si los hashes coinciden, es muy probable que aparezcan igual.
cmp
en Unix ofc
(comparar archivos) en Windows.