Pasar al contenido principal

SHA-1

En criptografía, se conoce como SHA-1 (Secure Hash Algorithm-1, traducido como Algoritmo de Hash Seguro) a la función de hash criptográfica que toma una entrada y produce un valor hash de 160 bits (equivalente a 20 bytes) como mensaje resumido.  Este hash (cadena de caracteres de longitud fija) se encuentra normalmente representado como un número hexadecimal de 40 dígitos de largo. SHA-1 está basado en principios similares a los usados por el profesor Ronald L. Rivest del MIT en el diseño de los algoritmos de resumen del mensaje MD4 y MD5.

Ejemplos:

  • SHA1("kaixo") = ca16ca7e8ac143e077d2c5e904a37726f1f565e3
  • SHA1("agur") = b19b2665f2d89534fb67e9ba1f2ae753f749b40f

La familia SHA (Algoritmo de Hash Seguro o Secure Hash Algorithm) es un sistema de funciones hash criptográficas desarrollado por la Agencia Nacional de Seguridad estadounidense y publicado por el National Institute of Standards and Technology (NIST). La primera de estas funciones fue publicada en 1993 bajo el título Secure Hash Standard, FIPS PUB 180, y se conoce oficialmente como SHA. Esta función se ha popularizado como SHA-0, para evitar confusiones con sus sucesoras. Dos años después del desarrollo de la primera función fue publicado el primer sucesor de SHA, que recibió el nombre de SHA-1. Desde entonces se han publicado cuatro variantes más bajo el nombre de SHA-2; las diferencias entre ellas se basan en un diseño algo modificado y en rangos de salida incrementados: se trata de SHA-224, SHA-256, SHA-384, y SHA-512. SHA-3 es el último miembro de la familia, publicado por NIST en agosto de 2015; su algoritmo genera hashes de la misma longitud que SHA-2 mediante la utilización de un método diferente basado en el algoritmo Keccak.

El procesamiento de SHA-1 consta de estos 5 pasos:

  1. Se incorporan bits de relleno al mensaje de entrada. Esta operación consiste en la adición de un "1" seguido de los "0" que sean necesarios hasta completar el bloque de 512 bits. Este relleno sirve para ocultar la estructura y longitud del contenido, dificultando al ciberdelincuente un posible ataque.
  2. Se le añade un bloque de 64 bits que represente la longitud del mensaje original antes de ser rellenado.
  3. Se inicializa la memoria temporal, que consta de 160 bits y cuya finalidad es almacenar los resultados intermedios y finales de la función de dispersión. Consta de 5 registros (A, B, C, D, E) de 32 bits cada uno.
  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.
  5. Una vez que se procesan todos los bloques de 512 bits, el resumen del mensaje son los 160 bits de salida del último bloque.

SHA-1 se diferencia de SHA-0 solo por una única rotación bit a bit en la programación de mensajes de su función de compresión. Esto se hizo para corregir una falla en el algoritmo original que redujo su seguridad criptográfica.

La resistencia del algoritmo SHA-1 fue comprometida a lo largo del año 2005, después de que algoritmos como MD5 quedaran seriamente comprometido en 2004 por parte de un equipo de investigadores chinos. Dicho equipo, compuesto por Xiaoyun Wang, Yiqun Lisa Yin y Hongbo Yu, demostró su capacidad de romper algoritmo SHA-1 en al menos 269 operaciones, cerca de 2.000 veces más rápido que un ataque de fuerza bruta, el cual requeriría 280 operaciones. Los ataques más recientes contra SHA-1 han logrado debilitarlo hasta 263, que, aunque aún es un número alto de operaciones, se encuentra dentro de los límites de las capacidades actuales de cálculo.