¿Pueden dos funciones hash criptográficas diferentes generar el mismo hash para la misma entrada?

Si dos hashes nunca generaron la misma salida en ninguna entrada, eso probablemente sería una forma de ataque Distinguir. Se supone que la salida hash criptográfica parece aleatoria, y la salida aleatoria ocasionalmente tendrá colisiones.

Es fácil demostrar tales colisiones para funciones criptográficas donde reducimos su tamaño de salida artificialmente a través del truncamiento.

Por ejemplo,

sha1 (“14119798”) es 03c199549da76d8a111f4c231d622e69d90bf49d

y

ripemd160 (“14119798”) es ffac287e01cafb666ac4ec81b3ab0870830bf49d

Tenga en cuenta que ambos terminan en 0bf49d, por lo que las versiones de estos hashes que se truncan a los últimos 24 bits tendrían la misma salida en la misma entrada. (En realidad, 25 bits, ya que los siguientes dígitos hexadecimales son 9 y 3.)

Desafortunadamente, toma exponencialmente más tiempo encontrar colisiones parciales más largas.

Sí, suponiendo que tengan el mismo grupo de salidas o incluso una salida común.

Veamos qué hace una función hash:

Una función hash toma una entrada, de todas las entradas posibles, que es un grupo muy grande, y devuelve una salida de longitud fija de todas las salidas posibles (un grupo significativamente más pequeño).

La razón por la cual una función hash es irreversible es porque por cada salida o , hay múltiples entradas i , que generarían el mismo valor.

Entonces, si dos funciones tienen el mismo grupo de salidas, digamos números hexadecimales de 20 dígitos, es seguro que habrá varias colisiones entre diferentes entradas e incluso las diferentes funciones hash.

Ahora para la “captura”:

Es muy difícil encontrar estas colisiones. Una función de seguridad de funciones hash depende de que sea extremadamente poco práctico encontrarlas, incluso con una gran cantidad de recursos computacionales.

Entonces, por diseño, estas colisiones serían extremadamente difíciles de encontrar. Especialmente dada otra especificación de seguridad de la función hash, para cualquier cambio dado a i , el cambio a o , debería ser impredecible.

Definitivamente es una posibilidad. No tanto por las funciones, sino por la idea misma de un hash. Pero también podría decir que definitivamente es una posibilidad que un meteorito pueda golpearlo mañana, probablemente incluso una mejor posibilidad.

Piénsalo. Un hash es un valor pequeño calculado a partir de una gran cantidad de elementos de datos. Por lo general, algo así como un entero de 32 bits (4 bytes) derivado de (digamos) 1 MB de datos. Obviamente habrá enfrentamientos en alguna parte, estás mapeando un conjunto lager de posibles permutaciones en uno más pequeño, por lo que tiene que haber duplicados para hacerlo.

Y dependiendo del tamaño de su hash, la proporción de las probabilidades cambia. Si ambas funciones son igualmente buenas para producir hashes criptográficos, entonces la relación varía casi igual al número de posibles hashes. Por ejemplo, con un hash de 32 bits, significa que hay una probabilidad cercana a 1 en 4000 millones de que esto ocurra entre dos conjuntos de datos que usan la misma función. Pero el uso de dos funciones diferentes está más cerca de una posibilidad de 1 pulgada (4000 millones al cuadrado) de que los mismos datos se calcularían con el mismo valor hash en ambos.

Entonces, en realidad, hay una probabilidad mucho mayor de que una función hash calcule el mismo hash a partir de dos entradas de datos diferentes que dos hash separados de los mismos datos. De hecho, esto se usa en algunas tablas hash donde si ocurre un choque, se usa una segunda función hash para derivar un segundo índice posible en la matriz de almacenamiento.