¿Es seguro ignorar la posibilidad de colisiones SHA en la práctica?

210

Digamos que tenemos mil millones de imágenes únicas, un megabyte cada una. Calculamos el hash SHA-256 para el contenido de cada archivo. La posibilidad de colisión depende de:

  • la cantidad de archivos
  • el tamaño del archivo único

¿Hasta dónde podemos llegar ignorando esta posibilidad, suponiendo que sea cero?

Hristo Hristov
fuente
1
Depende de para qué esté usando las teclas hash. Si se trata de algún tipo de identificación de archivo, una colisión también puede significar que los archivos son idénticos y, por lo tanto, también debe comparar los archivos en caso de colisión. Yo diría que sería bastante seguro comparar los tamaños de archivo.
mojuba
Sí, en este caso, si compara los tamaños de archivo, la posibilidad disminuye drásticamente. También puede usar dos algoritmos de hash y concatenar los resultados. Entonces, la posibilidad de una colisión de ambos al mismo tiempo disminuye más. Pero, la pregunta es, ¿cuánto es "bastante" seguro? Tal vez necesitamos una fórmula y números.
Hristo Hristov
2
@Hristo Hristov: si suponemos que la clave hash es un número pseudoaleatorio (que en teoría es correcto), mil millones de claves de 128 bits dan una probabilidad de colisión de 2.9 * 10 ^ -30. Ni siquiera puede llamarlo "minúsculo", es menos que eso;)
mojuba
3
@mojuba: aún mejor, está preguntando por un hash de 256 bits.
Michael Borgwardt
FWIW: el sistema de control de versiones GIT identifica los archivos por su contenido SHA.
snemarch

Respuestas:

385

La respuesta habitual es la siguiente: ¿cuál es la probabilidad de que un asteroide deshonesto se estrelle en la Tierra en el próximo segundo, destruyendo la civilización tal como la conocemos y matando a unos pocos miles de millones de personas? Se puede argumentar que cualquier evento desafortunado con una probabilidad menor que eso no es realmente muy importante.

Si tenemos una función hash "perfecto" con tamaño de salida n , y tenemos p mensajes en Hash (longitud del mensaje individual no es importante), entonces la probabilidad de colisión es de aproximadamente p 2 /2 n + 1 (esto es una aproximación que es válido para "pequeño" p , es decir, sustancialmente más pequeño que 2 n / 2 ). Por ejemplo, con SHA-256 ( n = 256 ) y mil millones de mensajes ( p = 10 9 ), entonces la probabilidad es de aproximadamente 4.3 * 10 -60 .

Una roca espacial de asesino en masa ocurre aproximadamente una vez cada 30 millones de años en promedio. Esto conduce a una probabilidad del evento un tales que ocurre en el siguiente segundo a alrededor de 10 -15 . Son 45 órdenes de magnitud más probables que la colisión SHA-256. En pocas palabras, si las colisiones SHA-256 dan miedo, sus prioridades son incorrectas.

En una configuración de seguridad, donde un atacante puede elegir los mensajes que serán procesados, entonces el atacante puede usar sustancialmente más de mil millones de mensajes; sin embargo, encontrará que la probabilidad de éxito del atacante seguirá siendo muy pequeña. Ese es el objetivo de usar una función hash con una salida de 256 bits: para que se puedan ignorar los riesgos de colisión.

Por supuesto, todo lo anterior supone que SHA-256 es una función hash "perfecta", que está lejos de ser probada. Aún así, SHA-256 parece bastante robusto.

Thomas Pornin
fuente
12
Esta es una muy buena respuesta, gracias! Pero, en caso de colisión, una planta de energía nuclear explotará y depende de usted, ¿correrá ese riesgo? Si tiene toda la razón, entonces podemos correr el riesgo, porque es 45 órdenes de magnitud más probable que la civilización sea destruida. ¿Correcto?
Hristo Hristov
46
@Hristo Creo que sí, uno tomaría ese riesgo. Una planta de energía nuclear ya tiene muchas más posibilidades de explotar debido a otras cosas, como fallas mecánicas, errores humanos en su construcción o errores del operador mientras la está ejecutando, y ya estamos aprovechando esas oportunidades. Si las colisiones SHA-256 fueran las únicas causas de incidentes nucleares, casi con certeza habríamos tenido hasta el momento cero.
Roman Starkov
27
foxnews.com/science/2013/02/11/… Empezaría a pensar en SHA512.
Dustin Oprea
37
Ahora puedo descansar tranquilo sabiendo que es probable que un asteroide me elimine mucho antes de vivir para experimentar una colisión SHA-256.
AaronLS
10
Lo sentimos, te falta la llamada "paradoja del cumpleaños". Observe mejor la "buena mesa", no funciona como usted piensa. Para las cifras que doy, en esa tabla, sería un valor "10 ^ 9" en una columna etiquetada "4.3 * 10 ^ -60" y la fila "128 bits" (pero la tabla no va por debajo de 10 ^ -18 )
Thomas Pornin
47

La posibilidad de una colisión no depende del tamaño de los archivos, solo de su número.

Este es un ejemplo de la paradoja del cumpleaños. . La página de Wikipedia ofrece una estimación de la probabilidad de una colisión. Si ejecuta los números, verá que todos los discos duros jamás producidos en la Tierra no pueden contener suficientes archivos de 1 MB para tener una probabilidad de una colisión de incluso 0.01% para SHA-256.

Básicamente, simplemente puede ignorar la posibilidad.

Michael Borgwardt
fuente
55
No puedo estar de acuerdo con la conclusión. Sí, ningún disco duro puede almacenar esa cantidad de archivos, pero IMO malinterpreta la situación. Solo se necesitan dos archivos para producir una colisión. Aunque la posibilidad es muy baja, aún puede suceder.
Sharptooth
11
@sharptooth: no, no estoy tergiversando la situación. La posibilidad de que usted y todos sus conocidos mueran por un accidente de tráfico el mismo día es muy baja, pero aún puede suceder (y es mucho mayor que la de una colisión SHA-256). Sin embargo, estás ignorando esa posibilidad.
Michael Borgwardt
11
@Sharptooth: estaba hablando de accidentes de tráfico simultáneos y separados de unos cientos de personas específicas. Realmente no puedes dar ningún paso para reducirlo. Sería inútil, ya que es extrañamente bajo. Pero aún es mucho más probable que una colisión SHA-256 que ni siquiera puedas imaginar cuánto. Es el mismo argumento que hizo Thomas.
Michael Borgwardt
12
@sharptooth: No, las posibilidades no crecen significativamente, porque el número todavía está eclipsado por el tamaño del espacio hash SHA-256. Esto es lo único que no está tomando en cuenta correctamente: todos los factores tienen que ser ponderados por su magnitud real, no por igual. Si generaras mil millones de hashes por segundo por cada persona en la Tierra, y lo hiciste durante mil años, aún tendrías menos del 1% de posibilidades de colisión.
Michael Borgwardt
3
Si no verifica la posibilidad de un error no corregido en cada búsqueda de la memoria o lectura del disco (que tienen una probabilidad mucho mayor que una colisión SHA-256), es posible que no comprenda completamente las probabilidades.
Christophe
17

En primer lugar, no es cero, sino muy cercano a cero .

La pregunta clave es ¿qué sucede si realmente ocurre una colisión ? Si la respuesta es "una planta de energía nuclear explotará", entonces probablemente no debería ignorar la posibilidad de colisión. En la mayoría de los casos, las consecuencias no son tan graves, por lo que puede ignorar la posibilidad de colisión.

Además, no olvide que su software (o una pequeña parte de él) podría implementarse y utilizarse simultáneamente en una gran cantidad de computadoras (algunas microcomputadoras pequeñas incrustadas que se incluyen en casi todas partes hoy en día). En tal caso, debe multiplicar la estimación que tiene por el mayor número posible de copias.

diente filoso
fuente
... no por el número de copias, sino por el número de conjuntos de datos que resumen todas las copias.
Andreas Spindler
1
Esto está mal, el número de copias de software en ejecución es irrelevante. Lo único que importa es la cantidad de archivos únicos que se procesan y la paradoja del cumpleaños es la matemática para el cálculo.
Dirk Bester
1
Escuché a alguien mencionar que la probabilidad de falla del hardware, es decir, un poco de volteo en algún lugar debido a la radiación, etc., es más probable que una colisión de hash y, por lo tanto, preocuparse por la colisión de hash es una tontería. Personalmente, trataría de cubrir ambos casos, para estar seguro (cuanto mayor sea la seguridad en una planta de energía nuclear, mejor), pero las colisiones de hash probablemente serían muy bajas en la lista de peligros potenciales (suponiendo que el espacio de hash sea lo suficientemente grande) . Sin embargo, todo esto supone que no hay un comportamiento oculto en la función hash que causa colisiones con mayor frecuencia.
Chris Middleton
'0' tiene su área
Green Tree
@GreenTree Lo que vinculaste es crear deliberadamente colisiones.
Sharptooth