Cualquier función de hash criptográfica n -bit ininterrumpida tiene una resistencia de colisión de 2 n / 2 . Esto significa que, si desea tener una resistencia de colisión 2 128 , debe utilizar, como mínimo, una función hash de 256 bits. Como se pueden realizar 2 operaciones 64 , no querrá usar un hash de 128 bits. Un hash de 160 bits (es decir, un nivel de seguridad de 2 80 ) está en el límite. El uso de un hash de 256 bits le dará un nivel de seguridad de 2 128 , que debería estar completamente bien en el futuro inmediato. A veces, las debilidades en la función hash en sí misma hacen que sea más fácil de romper que lo que sugiere el resumen de salida. La familia de hashes SHA-2 es un ejemplo que actualmente no está roto. SHA-1, por otra parte, está roto . Tiene una salida de 160 bits pero "solo" un nivel de seguridad 2 63 contra colisiones, en lugar de 2 80 .
Sospecho que puedes estar mezclando ataques de colisión con otros tipos de ataques. Un ataque de colisión no permitirá que un atacante encuentre información que haga hashes a un valor arbitrario. Las definiciones formales:
Ataque Preimage : dado h donde f (m) = h , encuentra cualquier m ' tal que f (m ') = h .
"Busque información que haga hashes a un valor arbitrario".
2do ataque de preimagen - Dado f (m) = h , encuentra cualquier m ' tal que m ≠ m ' y f (m') = h .
"Modificar una entrada sin cambiar el hash resultante".
Ataque de colisión : encuentre cualquier par de m y m ' de manera que m ≠ m' y f (m) = f (m ') .
"Encuentra dos entradas que tengan el mismo hash".
Cada ataque tiene diferentes implicaciones. Un ataque de colisión es problemático para los certificados, ya que se pueden usar en firmas que son válidas para versiones benignas y maliciosas del mismo software. Un ataque de preimagen es problemático para la verificación. Imagínese si un atacante pudiera modificar un ejecutable sin cambiar su hash. Claramente, un ataque de pre-imagen es mucho más severo que un ataque de colisión, pero afortunadamente también es mucho más difícil de lograr. El infame algoritmo MD4 inseguro, por ejemplo, es tan malo en la resistencia a la colisión que es más barato encontrar una colisión que ejecutar la función hash dos veces. Sin embargo, por más roto que esté, los ataques de preimagen contra él son altamente teóricos.
Si, por otro lado, simplemente desea verificar la corrupción accidental y no tiene la intención de proteger contra un atacante activo, entonces lo ideal sería un CRC con un polinomio correctamente seleccionado. Un CRC puede en realidad garantizar la detección de errores hasta cierto punto.