Descripción del algoritmo SHA1
En el algoritmo SHA1 tenemos que convertir la información original (cadena, archivo, etc.) en una cadena de bits. Supongamos que generamos un resumen de mensaje para la cadena "abc". Primero, lo convertimos en una cadena de bits como esta:
01100001 01100010 01100011
----- --------
' a '=97 'b'=98 'c'=99
La longitud de esta cadena de bits es 24. A continuación necesitamos 5 pasos para calcular el MAC de resumen de mensajes. El mensaje debe estar completado en bits para que el resto del módulo de longitud del mensaje 512 sea 448, es decir (longitud del mensaje rellenada) 512 = 448. El relleno es necesario incluso si la longitud ya cumple con el requisito de un resto de 448 módulo 512.
"Sap" funciona así: primero 1, luego 0, hasta que la longitud sea 448 módulo 512. En definitiva, el Sap es como mínimo uno y como máximo 512. Tomemos el "abc" anterior como ejemplo para ilustrar este proceso.
Información original: 01100001 01100010 01100011
El primer paso: 01100001 01100010 01100011 1
El primer paso es agregar 1
El segundo paso Pasos: 01100001 01100010 01100011 10.... .0
Luego completamos 423 "0"
Los datos finales completados se pueden escribir en hexadecimal de la siguiente manera 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
000000 00000000 0000000 0 00000000
000000 00000000 00000000
Después del procesamiento anterior, la longitud de los datos es 448, podemos continuar con el siguiente paso. La llamada longitud suplementaria sirve para complementar la longitud de los datos originales con la información complementada. Normalmente, la longitud del mensaje original está representada por un número de 64 bits. Si la longitud del mensaje no es mayor que 2^64, la primera palabra es 0. Después de la operación de llenado, toda la información queda de la siguiente manera (formato hexadecimal)
61626380 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00 000000 00000000 00000000
Esta es la primera vez que la información se llena de datos. 00000000
00000000000000000000000000 00000000
000000000000000000000000018
Si la longitud de la información original excede 512, debemos aumentarla al múltiplo de 512. Luego, descomponemos el mensaje completo en fragmentos de 512 bits y procesamos cada fragmento por separado para obtener el resumen del mensaje. Una serie de constantes K(0), K(1), ..., K(79), expresadas en hexadecimal.
Son los siguientes:
Kt = 0x5A827999 (0 lt; = t lt; = 19)
Kt = 0x6ED9EBA1 (20 lt; = t lt; = 39)
Kt = 0x8F1BBCDC (40 lt; = t lt; = 59)
Kt = 0xCA62C1D6 (60 lt; = t lt; = 79). En SHA1 necesitamos una serie de funciones. Cada función ft (0 lt; = t lt; = 79) opera en palabras B, C y D de 32 bits y produce una palabra de 32 bits como salida. ft(B, C, D) se puede definir de la siguiente manera
ft(B, C, D) = (B AND C) o ((NOT B) AND D) (0 lt; = t lt ; = 19)
ft(B, C, D) = B XOR C X D) = B C, D) = (B AND C) o (B AND D) o (C AND D) (40 lt; = t lt; = 59)
pies(B, C, D) = B XOR C XOR D (60 lt; = t lt; = 79). Después de aplicar el complemento a dos y la longitud, el resumen del mensaje debe calcularse utilizando el mensaje. El cálculo requiere dos buffers, cada uno de los cuales consta de 5 palabras de 32 bits y un buffer de 80 palabras de 32 bits. El primer búfer de palabras de 5 bits se identifica como A, B, C, D, E; el segundo búfer de palabras de 5 bits se identifica como H0, H1, H2, H3, H4
. Los buffers de 80 palabras se identifican como W0, W1, ..., W79
requiere otro buffer TEMP textual.
Para generar el resumen del mensaje, se utilizan los bloques de datos de 512 bits (16 palabras) M1, M2, ..., Mn definidos en la Sección 3.2
. Mn se procesa secuencialmente y el procesamiento de cada bloque de datos Mi consta de 80 pasos.
El búfer {Hi} se inicializa con el siguiente valor (hexadecimal) antes de procesar todos los bloques de datos
H0 = 0x67452301
H1 = 0xEFCDAB89
H2 = 0x98BADCFE
H3 = 0x10325476
H4 = 0xC3D2E1F0.
Ahora comience a procesar M1, M2,..., Mn. Para procesar Mi, se requieren los siguientes pasos
(1). Divida Mi en 16 palabras W0, W1,..., W15, W0 es la palabra más a la izquierda
(2). .Para t = 16 a 79, sea
W[t] = S1 (W[t-3] XOR W[t-8] XOR W[t-14] XOR W[t-16] ).
(3). Sea A = H0, B = H1, C = H2, D = H3, E = H4.
(4) Para t = 0 a 79, ejecute el siguiente bucle
TEMP = S5(A) ft(B, C, D) E Wt Kt;
E = D; D = C; C = S30(B); B = A = TEMP;
(5). Sea H0 = H0 A, H1 = H1 B, H2 = H2 C, H3 = H3 D, H4 = H4 E.
Después de procesar todos los Mn, el resumen del mensaje es una cadena de 160 bits identificada en el siguiente orden
H0 H1 H2 H3 H4.
Para SHA256, SHA384 y SHA512, puede calcular SHA256, SHA384 y SHA512.
Puede calcular el resumen del mensaje de forma similar para SHA256, SHA384 y SHA512. El algoritmo para la información complementaria es exactamente el mismo.
SHA1 se utiliza ampliamente en muchos protocolos de seguridad, incluidos TLS y SSL, PGP, SSH, S/MIME e IPsec.