NIST presentó en 1993 un algoritmo basado en las mismas técnicas que MD5 y denominado SHA (Secure Hash Algorithm).
El primer miembro de la familia fue publicado en 1993 es oficialmente llamado SHA. Sin embargo, hoy día, no oficialmente se le llama SHA‐0 para evitar confusiones con sus sucesores. Dos años más tarde el primer sucesor de SHA fue publicado con el nombre de SHA‐1.
Este algoritmo en 1995 la Agencia de Seguridad Nacional (NSA) lo sustituyó por una versión mejorada que actualmente se conoce como SHA-1 y que se considera más seguro que MD5. Produce un código hash de 160 bits para mensajes de longitud máxima 264 bits, aunque existen otras variantes poco utilizadas todavía que producen códigos de mayor longitud.
En general, SHA1 se considera el mejor algoritmo de la familia de Algoritmos HASH o de resumen y es el que se aplica en la mayoría de las aplicaciones de firma electrónica. Por lo tanto es muy habitual aplicar SHA1 seguido de RSA para realizar una firma electrónica de un documento, o bien el algoritmo DSA específico para firma electrónica que también utiliza SHA1 internamente.
Ejemplo de hashes
Estos son ejemplos de SHA-1 digiere. ASCII codificación se utiliza para todos los mensajes.
SHA1 (» El rápido zorro marrón salta sobre el perro perezoso «) = 2fd4e1c6 7a2d28fc ed849ee1 bb76e739 1b93eb12
Incluso un pequeño cambio en el mensaje, con una probabilidad abrumadora, resultando en un hash completamente diferente debido al efecto avalancha.
La codificación hash vacía para SHA‐1 corresponde a:
SHA1(«») = da39a3ee5e6b4b0d3255bfef95601890afd80709
- Es imposible encontrar un mensaje que se corresponde con un determinado mensaje.
- Es imposible encontrar dos diferentes mensajes que producen el mismo mensaje.
- Si un mensaje se cambia incluso de un solo carácter, el resultado será un mensaje totalmente diferente.
SHA‐0 y SHA‐1 producen una salida resumen de 160 bits (20 bytes) de un mensaje que puede tener un tamaño máximo de 264 bits, y se basa en principios similares a los usados por el profesor Ronald L. Rivest del MIT en el diseño de los algoritmos de resumen de mensaje MD4 y MD5.
El procesamiento consta de cinco pasos los cuales se explican a continuación:
- Se incorporan bits de relleno al mensaje de entrada de tal modo que cumpla:
El relleno consiste en un uno seguido de los ceros que sean necesarios. Aunque el mensaje ya tenga la longitud deseada, se debe efectuar el relleno, por lo que el número de bits de dicho relleno está en el rango de 1 a 512 bits.
- A la salida del paso 1, se le añade un bloque de 64 bits que represente la longitud del mensaje original antes de ser rellenado.
- Se inicializa la memoria temporal MD, la cual consta de 160 bits y su finalidad es almacenar los resultados intermedios y finales de la función de dispersión. La MD consta de 5 registros (A,B,C,D,E) de 32 bits cada uno, los valores con los que se inicializan son los siguientes (valores hexadecimales):
A=67452301
B=EFCDAB89
C=98BADCFE
D=10325476
E= C3D2E1F0
4.Se procesa el mensaje por bloques de 512 bits, cada uno pasa por un módulo que consta de 4 rondas de procesamiento de 20 pasos cada una. Las rondas tienen una estructura similar, con la excepción de que cada una ocupa una función lógica primitiva diferente (f1, f2, f3 y f4).
La entrada a cada ronda consta del bloque de 512 bits que se esté procesando (Yq) y los 160 bits de la memoria MD, nótese que cada bloque de 512 bits actualizará el valor de la memoria temporal. Cada ronda también hace uso de la constante aditiva Kt, donde 0<= t <= 79 indica uno de los 80 pasos a lo largo de las cuatro rondas.
5.- Una vez que se procesan los L bloques de 512 bits, el resumen del mensaje son los 160 bits de salida del último bloque.
SHA‐1 tiene estas propiedades y, por tanto, a que se refiere como seguro. Está diseñado para trabajar con el Algoritmo de Firma Digital (DSA). SHA‐1 es una forma de función de hash.
Funciones en un solo sentido se caracterizan por dos propiedades. La primera es que son de sentido único. Esto significa que usted puede tomar un mensaje y calcular un valor de hash, pero no se puede tomar un valor hash y recrear el mensaje original. También es libre de colisión y, por tanto, no hay dos mensajes hash con el mismo valor.
Aplicaciones de SHA‐1
SHA‐1 puede ser usado en una variedad de aplicaciones:
1. Aplicaciones de seguridad que requieren autenticación
2. E‐mail
3. Transferencia electrónica de fondos
4. Distribución de software
5. Almacenamiento de datos
SHA‐1 ha sido examinado muy de cerca por la comunidad criptográfica pública, y no se ha encontrado ningún ataque efectivo. No obstante, en el año 2004, un número de ataques significativos fueron divulgados sobre funciones criptográficas de hash con una estructura similar a SHA‐1; lo que ha planteado dudas sobre la seguridad a largo plazo de SHA‐1.