SHA-1 es una función hash (dispersión) de las más usadas en criptografía y firmas digitales.
Simplificando, una función hash te genera un número a partir de unos datos de entrada. Idealmente, dos datos diferentes no pueden tener el mismo hash.
En la práctica lo que se intenta es que estos casos (llamados colisiones) sean lo menos posibles.
Además, encontrar el dato original a partir del hash es complicado.
Estas ideas son las que se usan en firmas digitales, Tenéis un ejemplo al final.
Un código se considera seguro mientras no haya una forma "rápida" de invertirlo/descifrarlo/averiguarlo. Cuando no existen esos métodos, la única forma es a base de probar (fuerza bruta). Hasta ahora, se necesitaban 2^80 (2 elevado a 80) operaciones para poder encontrar la colisión.
Según Bruce Schneier, una universidad china ha logrado hacerlo con 2^69. Siguen siendo muchas, pero son muchas menos que antes.
El principal problema podría estar en la falsificación de firmas digitales.
En cualquier caso, sigue siendo muy costoso (en tiempo) realizar acciones de estas. ¿Alguien se atreve a calcular cuando nos llevaría? ;)
Leído en Kriptópolis.
Como anexo para los que tengan un poco más de curiosidad:
Las funciones hash también se pueden usar para ordenar elementos de forma que sean fácilmente localizable (tipo de dato diccionario si no recuerdo mal) y para comprobar errores en un fichero.
MD5 es otra función hash muy conocida y se usa bastante en detección de errores. Muchas veces cuando bajas ficheros grandes, te muestran el md5sum, que es el hash generado a partir del fichero y MD5.
Por ejemplo, si ejecutamos: md5sum free_software.pdf
b799f0f3c60cd4456e6ed0288118c781 free_software.pdf
Dos datos diferentes dan dos hash diferentes:
echo "1234" | md5sum
e7df7cd2ca07f4f1ab415d457a6e1c13 -
echo "4567" | md5sum
f1d1d471045542b64f3fff665b42035a -
Otro ejemplo, con el problema de SHA-1 (o similares) alguien podría colgar ficheros en los P2P con el mismo nombre que otros y hacerlos pasar por verdaderos, pues podría conseguir una firma idéntica.
Espero no haberme enrollado demasiado.