Explicación detallada del algoritmo HMAC

1. Algoritmo HMAC

1.1 Introducción al algoritmo HMAC

HMAC (Código de autenticación de mensajes basado en hash, Código de autenticación de mensajes hash) es un código de autenticación de mensajes (MAC) generado después de un método de cálculo especial que utiliza una función hash criptográfica combinada con una clave de cifrado. Se puede usar para garantizar la integridad de los datos y, al mismo tiempo, se puede usar para autenticar un mensaje.
El algoritmo HMAC es un método para verificar la integridad del mensaje basado en una clave. El algoritmo HMAC utiliza una operación hash, toma una clave y un mensaje como entrada y genera un resumen de mensaje como salida. Su seguridad se basa en el algoritmo de cifrado Hash. Requiere que las partes de la comunicación compartan una clave, acuerden un algoritmo y realicen operaciones Hash en el mensaje para formar un código de autenticación de longitud fija. Ambas partes en la comunicación determinan la legitimidad del mensaje a través de la verificación del código de autenticación. El algoritmo HMAC se puede utilizar para encriptación, firma digital, verificación de mensajes, etc.

1.2 Definición del algoritmo HMAC

La fórmula matemática del algoritmo HMAC es:
HMAC(k,m)=H(k'⊕opad,H(k'⊕ipad,m))
donde:
H es una función Hash de contraseña (como MD5 o SHA-2) , que puede llevar a cabo la compresión de bucle de grupo;
k es la clave (clave secreta);
m es el mensaje a autenticar;
k' es otra clave derivada de la clave original k (si k es más corta que el tamaño del bloque de entrada del hash función, luego al relleno derecho con ceros; hash k si es más largo que ese tamaño de bloque)
relleno interno de ipad (0x5C5C5C…5C5C, una constante hexadecimal);
relleno externo de opad (0x363636…3636, una constante hexadecimal)

1.3 Pasos del algoritmo HMAC

Los pasos de cifrado del algoritmo HMAC se muestran en la Figura 1:
inserte la descripción de la imagen aquí

a) Agregue 0 después de la clave k, o procese la clave k con H (función Hash) para crear una cadena de caracteres con una longitud de palabra de B (B es la longitud del paquete de texto sin formato de la función Hash); b) Generar en el anterior
paso La operación XOR se realiza en el ipad con una cadena de caracteres de longitud de palabra B
c) Llene el flujo de datos m en la cadena de resultados del segundo paso
d) Use H para actuar sobre el flujo de datos generado en el tercer paso
e) Coloque el flujo de datos m en el primer paso Realice la operación XOR con la cadena de longitud de palabra B generada y opad;
f) complete el resultado del cuarto paso en el resultado del quinto paso;
g) use H para actuar sobre los datos stream generado en el sexto paso y mostrar el resultado final.

2. Algoritmo SHA-256

2.1 Introducción al algoritmo SHA-256

SHA-256 (Secure Hash Algorithm 256, Secure Hash Algorithm 256) es un tipo de función hash (o función hash), que puede calcular una cadena de 32 bytes de longitud (también conocida como resumen de mensaje, resumen de mensaje). Función hash Se considera una función unidireccional: en función de la salida de la función, es extremadamente difícil hacer retroceder los datos de entrada. La función hash codifica y mezcla los datos del mensaje y los comprime en un valor hash (resumen), lo que reduce la cantidad de datos.
SHA-256, desarrollado por la Agencia de Seguridad Nacional de los Estados Unidos, es un algoritmo subdividido en SHA-2, pertenece a uno de los algoritmos SHA y es el sucesor de SHA-1. Para mensajes de cualquier longitud, SHA256 genera un valor hash de 256 bits (matriz de 32 bytes) llamado resumen de mensaje. El resumen generalmente se expresa como una cadena hexadecimal de 64 bits. Cuando se recibe el mensaje, este resumen del mensaje se puede utilizar para verificar si los datos han cambiado, es decir, para verificar su integridad.

2.2 Descripción del algoritmo SHA-256

En primer lugar, se realiza el preprocesamiento de la información, como se muestra en la Figura 2, el mensaje original (Message) se desmonta en bloques de mensajes de 512 bits. El último bloque de mensajes debe completar la información y adjuntar la información de longitud del mensaje original. Después de dividir el mensaje en n bloques, se requieren n iteraciones y el resultado final es el valor hash final, que es un resumen digital de 256 bits.

inserte la descripción de la imagen aquí

La unidad de cálculo mínima del algoritmo SHA256 es una "palabra" (palabra, 32 bits). El estado intermedio Hi de 256 bits en la Fig. 3 se describe como 8 palabras. El bloque de mensajes de 512 bits Mi se ampliará de 16 a 64 palabras, se mezclará con Hi y se comprimirá en un nuevo valor hash Hi+1. El resultado del i-ésimo bloque de datos asignado por la función Map se utilizará como entrada del i+1-ésimo bloque, es decir, Map(H_(i-1))=H_i. H0 es el valor inicial de hash preestablecido (la parte fraccionaria de la raíz cuadrada de los primeros 8 números primos en el número natural, tomando los primeros 32 bits). El mapeo de hash se realiza en los datos a su vez, y se obtiene el estado final Hn es el resumen digital final.

inserte la descripción de la imagen aquí

La operación más crítica es la función de mapeo Map, que es equivalente a un proceso de cifrado cíclico, que codifica constantemente la información original.

2.3 Pasos del algoritmo SHA-256

Como se muestra en la Tabla 1, las operaciones involucradas en la función hash SHA256 son todas operaciones lógicas bit a bit.
inserte la descripción de la imagen aquí

Supongamos que el mensaje original es M, la longitud del mensaje original es LM, el bloque de mensajes Mi, el valor hash inicial H0, las constantes SHA-256 K[0]~K[63] (la parte fraccionaria de la raíz cúbica de los primeros 64 números primos en números naturales, tome los primeros 32 bits). Los pasos de cifrado del algoritmo SHA-256 son los siguientes:
a) Preprocesamiento del mensaje (M). Agregue un bit "1" y un bit "0" al final del mensaje, de modo que:
(L_M+t+1) mod 512=448,0≤t<512
Express LM como almacenamiento big-endian de 64 bits formatear y agregar al final de M, formar un nuevo mensaje M^';
b) descomponer. Descomponga M^' en Mi según el tamaño de cada bloque de 512 bits;
c) Expanda Mi a 64 palabras: W[0]~W[63]. Descomponga Mi en 16 palabras big-endian de 32 bits (palabras), que se almacenan como W[0], …, W[15], y las palabras restantes se obtienen mediante la siguiente fórmula: W_t=σ_1 (W_(t- 2
) )+W_(t-7)+σ_0 (W_(t-15))+W_(t-16)
d) iteraciones. Se necesitan 64 ciclos de cifrado para completar una iteración. El proceso de cifrado se muestra en la Figura 4: las 8 palabras ABCDEFGH son inicialmente 8 valores iniciales hash y luego se actualizan de acuerdo con las reglas ilustradas; el cuadrado azul oscuro es una función lógica no lineal predefinida; el cuadrado rojo representa la suma (si el resultado es mayor que 232, realice una operación mod 232); Kt es una constante SHA-256, Wt genera la t-ésima palabra para este bloque, 0≤t<64; las cadenas de ocho segmentos generadas en el último ciclo se combinan para obtener es la cadena hash correspondiente a este bloque;
5) Si el mensaje original contiene varios bloques, las cadenas hash generadas por estos bloques deben agregarse a la iteración para generar la cadena hash final.

inserte la descripción de la imagen aquí

3. Definición del algoritmo HAMAC-SHA256

3.1 Descripción del algoritmo HMAC-SHA256

Algoritmo HMAC-SHA256, es decir, el algoritmo HMAC que utiliza SHA-256 para generar valores hash. De acuerdo con el contenido del algoritmo HMAC y el algoritmo SHA-256, se puede ver que la longitud B del paquete de texto sin formato del algoritmo HMAC-SHA256 es de 512 bits, y la longitud se puede obtener utilizando la clave K de cualquier longitud. (La longitud mínima recomendada es de 256 bits, que generalmente debería ser mayor que B). Es un valor hash de 256 bits (resumen). Definido como:
〖HMAC〗_SHA256 (k,m)=□SHA256(k'⊕opad∥SHA256(k'⊕ipad∥m))
donde:
SHA256 es el algoritmo de cifrado SHA-256, y la longitud del valor hash de salida es 256 -bit ;
∥ operación de empalme, empalmando dos cadenas juntas;
B Función hash longitud del paquete de texto sin formato, el algoritmo SHA-256 es de 512 bits;
k es la clave (clave secreta);
m es el mensaje a autenticar;
k' es otra clave derivada de la clave original k (si k es más corta que B, rellene con ceros a la derecha hasta que sea igual a B; si k es más larga que B, realice un cálculo hash SHA256 en k) ipad internal padding (0x5C5C5C… 5C5C
, constante de 512 bits);
relleno externo de opad (0x363636…3636, constante de 512 bits)

3.2 Pasos del algoritmo HMAC-SHA256

Los pasos de cifrado del algoritmo HMAC-SHA256 se muestran en la Figura 5:
① Relleno de teclas. Si la clave es más corta que la longitud de bloque B (512 bits) del algoritmo SHA-256, debe completarse con 0 al final hasta que su longitud alcance la longitud de bloque de la función hash unidireccional. Si la clave es más larga que la longitud del paquete, use el algoritmo SHA-256 para encontrar el valor hash de la clave y luego use este valor hash como una nueva clave; ② Relleno interno
. La tecla rellenada se somete a XOR con la secuencia denominada ipad, y el valor resultante es ipadkey. El ipad repite la secuencia de 00110110 hasta que se alcanza la longitud del paquete
③ Combinando con el mensaje. Combine la clave del ipad con el mensaje, es decir, agregue la clave del ipad al comienzo del mensaje.
④ Calcular el valor hash. Ingrese el resultado de 3 en la función SHA-256 y calcule el valor hash.
⑤ Relleno externo. La tecla rellenada se somete a XOR con una secuencia llamada opad, y el valor resultante es opadkey. Opad repite la secuencia de 01011100 hasta que se alcanza la longitud del paquete.
⑥ Combinación con valor hash. Ponga el valor hash de 4 detrás de la tecla opad.
⑦ Calcular el valor hash. Ingrese el resultado de 6 en la función SHA-256 y calcule el valor hash, que es el contenido del resumen final.

inserte la descripción de la imagen aquí

La comprensión simple de HMAC-SHA256 es la siguiente:

  • Procesamiento de claves: si la longitud de la clave excede la longitud del bloque del algoritmo SHA256 (64 bytes), primero se debe codificar la clave a través del algoritmo SHA256, y luego el resultado del hash se usa como una nueva clave, de modo que la longitud final de la clave Menor o igual que la longitud del bloque del algoritmo SHA256.
  • Mensaje de relleno: según los requisitos del algoritmo SHA256, el mensaje debe rellenarse para que su longitud sea un múltiplo entero de 512 bits.
  • Operación HMAC: la operación XOR se realiza en el mensaje completo y la clave, y el valor hash se calcula mediante el algoritmo SHA256. Entre ellos, los resultados XOR del mensaje y la clave se utilizan respectivamente como entrada del algoritmo SHA256.
  • Salida de resultado: utilice el resultado hash del algoritmo SHA256 como salida del algoritmo HMAC-SHA256.
    La seguridad del algoritmo HMAC-SHA256 depende principalmente de la seguridad del algoritmo SHA256 y de la longitud y aleatoriedad de la clave. Dado que el algoritmo SHA256 es una función hash relativamente segura, el algoritmo HMAC-SHA256 también se usa ampliamente en campos de seguridad, como firmas digitales y autenticación de mensajes.

Supongo que te gusta

Origin blog.csdn.net/qq_32907491/article/details/131524420
Recomendado
Clasificación