Supongo que "usa sha1sum
" en el siguiente contexto: distribuye algunos paquetes de software y desea que los usuarios puedan verificar que lo que descargaron es el paquete correcto, hasta el último bit. Esto supone que tiene una forma de transmitir el valor de hash (calculado con SHA-1) de manera "inalterable" (por ejemplo, como parte de una página web que se sirve a través de HTTPS).
También supongo que estamos hablando de ataques , es decir, algunas personas malintencionadas que de alguna manera pueden alterar el paquete a medida que se descarga, y querrán inyectar alguna modificación que no se detectará.
La propiedad de seguridad que la función hash utilizada debería ofrecer aquí es resistencia a las segundas imágenes previas . Lo más importante es que no es lo mismo que la resistencia a las colisiones. Una colisión es cuando el atacante puede crear dos mensajes distintos m y m ' que contienen el mismo valor; una segunda imagen previa es cuando al atacante se le da un m fijo y se lo desafía a encontrar un m ' distinto que haga hashes al mismo valor.
Las segundas preimágenes son mucho más difíciles de obtener que las colisiones. Para una función hash "perfecta" con bits de tamaño de salida n , el esfuerzo computacional para encontrar una colisión es de aproximadamente 2 n / 2 invocaciones de función hash; para una segunda imagen previa, esto es 2 n . Además, las debilidades estructurales que permiten un ataque de colisión más rápido no se aplican necesariamente a un ataque de segunda preimagen. Esto es cierto, en particular, para las debilidades conocidas de SHA-1: en este momento (septiembre de 2015), existen algunas debilidades teóricas conocidas de SHA-1 que deberían permitir el cálculo de una colisión en menos del ideal 2 Esfuerzo de 80 (esto sigue siendo un gran esfuerzo, aproximadamente 2 61 , por lo que aún no se ha demostrado); pero estas debilidades son caminos diferenciales que requieren intrínsecamente que el atacante diseñe tanto m como m ', por lo tanto, no se transfieren a las segundas preimágenes.
Por el momento, no se conoce un ataque de segunda imagen en SHA-1 que sea teórica o académicamente más rápido que el ataque genérico, con un costo de 2 160 que va mucho más allá de lo tecnológico. viabilidad, por un toma larga .
Conclusión: dentro del contexto de lo que está tratando de hacer, el SHA-1 es seguro y es probable que permanezca seguro durante algún tiempo (incluso MD5 aún sería apropiado).
Otra razón para usar sha1sum
es la disponibilidad de las herramientas del lado del cliente: en particular, la herramienta de hashing de línea de comandos proporcionada por Microsoft para Windows (llamada FCIV ) conoce MD5 y SHA-1, pero no SHA-256 (al menos así lo dice la documentación) (*).
Windows 7 y versiones posteriores también contienen una herramienta de línea de comandos llamada "certutil" que puede calcular los hashes SHA-256 con el subcomando "-hashfile". Esto no se conoce ampliamente, pero a veces puede ser conveniente.
Dicho esto, una poderosa razón contra que usa SHA-1 es la de imagen : actualmente está muy de moda abuchear y burlarse de cualquier uso de SHA-1; las multitudes claman por su remoción, anatema, arresto y ejecución pública. Al usar SHA-1, le estás diciendo al mundo que, definitivamente, no eres un hipster. Desde un punto de vista empresarial, rara vez es bueno no ceder a la moda du jour , por lo que debería usar una de las funciones SHA-2, por ejemplo. SHA-256 o SHA-512.
No hay una razón sólida para preferir SHA-256 a SHA-512 o al revés; algunas arquitecturas pequeñas de solo 32 bits se sienten más cómodas con SHA-256, pero esto rara vez es importante en la práctica (incluso una implementación de SHA-512 de 32 bits aún podrá contener tres docenas de megabytes de datos por segundo en una anemia) una computadora portátil, e incluso en modo de 32 bits, una CPU x86 no muy antigua tiene algunas capacidades en los cálculos de 64 bits con SSE2, lo que proporciona un buen impulso para SHA-512). Cualquier experto en marketing le diría que use SHA-512 sobre la única base de que 512 es mayor que 256, por lo que "debe ser mejor" de alguna manera (mágica).