ALGORITMOS
SHA
Algoritmo desarrollado por el NIST y publicado como estándar
federal para el procesamiento de la información (FIBS PUB 180); en 1995 se
publicó una versión revisada como FIBS PUB 180-1 conocida como SHA-1.
El algoritmo toma como entrada mensajes de longitud máxima
de 264 bits que son procesados en bloques de 512 bits; el resultado que produce
es de 160 bits. La figura 5.5.1 muestra de manera general el algoritmo.
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: longitud. 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
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 t indica uno de los 80 pasos a lo largo de las cuatro rondas.
MD5
MD5
(Message Digest Algorithm)
El algoritmo MD5 fue desarrollado por Ron Rivest en 1992 en
el MIT con la finalidad de robustecer el MD4 y a la fecha se trata del
algoritmo hash más seguro y de mayor uso en el mundo (ampliamente documentado
en el RFC 1321), entre las aplicaciones más recurrentes están la autenticación
en el protocolo SSL y la firma digital en PGP.
MD5 procesa mensajes de cualquier longitud (longitud
variable) y procesa bloques uniformes de 512 bits a la vez, hasta concluir con
el mensaje total a fin de entregar a la salida un bloque "resumen" de
128 bits (longitud fija). El procesamiento consta de cinco pasos:
Paso 1: En principio, para que el mensaje sea procesado en
bloques de tamaño fijo se requiere que su longitud en bits sea: longitud de
manera que su longitud sea de no menos de 64 bits de diferencia para completar
un múltiplo de 512, así, de ser necesario se aplica un relleno, el cual varía
en longitud en cada caso, esto es, el número de bits adicionados está en un
rango de 1 a 512 bits con el formato 10000…0.
Paso 2: Una representación de 64 bits de la longitud del
mensaje original (antes de aplicar el relleno) se añade al resultado del paso
1. Estos dos pasos permiten hacer coincidir la longitud del mensaje en un
múltiplo exacto de 512 bits de longitud (requerido para el resto del
algoritmo), en tanto adicionalmente se garantiza que mensajes distintos no
serán iguales después del complemento de los bits.
Paso 3: Es hasta este paso que da inicio el proceso de
reducción, para ello se utiliza un registro de 128 bits que permite almacenar y
mantener los resultados intermedios y final de la función hash. El registro se divide
en cuatro secciones de 32 bits cada una, las cuales corresponden a las
variables A, B, C, y D que son inicializadas con los valores hexadecimales:
A = 67 45
23 01
B = EF CD
AB 89
C = 98 BA
DC FE
D = 10 32 54 76
Estas variables son llamadas variables de concatenación o
variables de encadenamiento y se almacenan en formato little-endian de manera
que aparecen:
A = 01 23
45 67
B = 89 AB
CD EF
C = FE DC
BA 98
D = 76 54 32 10
Paso 4: El mensaje se procesa en bloques de 512 bits a la
vez a través de 16 bloques de 32 bits cada uno, para lo cual las cuatro
variables de concatenación se copian en variables distintas:
a = A
b = B
c = C
d = D
La parte medular del algoritmo es una función de compresión
que consta de cuatro rondas, las cuales tienen una estructura similar; pero
cada una utiliza operaciones distintas durante 16 iteraciones; cada operación
realiza una función no lineal sobre tres de las variables a, b, c y d, y el
resultado es sumado a la cuarta variable que no fue elegida, un sub-bloque del
texto y una constante.
No hay comentarios:
Publicar un comentario