Explicação detalhada do algoritmo HMAC

1. Algoritmo HMAC

1.1 Introdução ao Algoritmo HMAC

HMAC (Hash-based Message Authentication Code, Hash Message Authentication Code) é um código de autenticação de mensagem (MAC) gerado após um método de cálculo especial usando uma função hash criptográfica combinada com uma chave de criptografia. Ele pode ser usado para garantir a integridade dos dados e, ao mesmo tempo, pode ser usado para autenticar uma mensagem.
O algoritmo HMAC é um método para verificar a integridade da mensagem com base em uma chave. O algoritmo HMAC usa uma operação de hash, recebe uma chave e uma mensagem como entrada e gera um resumo da mensagem como saída. Sua segurança é baseada no algoritmo de criptografia Hash. Requer que as partes da comunicação compartilhem uma chave, concordem com um algoritmo e executem operações de hash na mensagem para formar um código de autenticação de comprimento fixo. Ambas as partes na comunicação determinam a legitimidade da mensagem através da verificação do código de autenticação. O algoritmo HMAC pode ser usado para criptografia, assinatura digital, verificação de mensagens, etc.

1.2 Definição do algoritmo HMAC

A fórmula matemática do algoritmo HMAC é:
HMAC(k,m)=H(k'⊕opad,H(k'⊕ipad,m))
onde:
H é uma função hash de senha (como MD5 ou SHA-2) , que pode realizar compressão de loop de grupo;
k é a chave (chave secreta);
m é a mensagem a ser autenticada;
k' é outra chave derivada da chave original k (se k for menor que o tamanho do bloco de entrada do hash função, então para o teclado direito com zeros; hash k se for maior que o tamanho do bloco)
preenchimento interno do ipad (0x5C5C5C…5C5C, uma constante hexadecimal);
preenchimento externo opad (0x363636…3636, uma constante hexadecimal)

1.3 Etapas do algoritmo HMAC

As etapas de criptografia do algoritmo HMAC são mostradas na Figura 1:
insira a descrição da imagem aqui

a) Adicione 0 após a chave k, ou processe a chave k com H (função Hash) para criar uma cadeia de caracteres com um comprimento de palavra de B (B é o comprimento do pacote de texto simples da função Hash); b) Gerar no anterior
step A operação XOR é executada no ipad com uma string de caracteres de comprimento de palavra B;
c) Preencha o fluxo de dados m na string de resultado da segunda etapa;
d) Use H para atuar no fluxo de dados gerado na terceira etapa;
e) Coloque o fluxo de dados m na primeira etapa Execute a operação XOR com a string de comprimento de palavra B gerada e opad;
f) preencha o resultado da quarta etapa no resultado da quinta etapa;
g) use H para atuar nos dados fluxo gerado na sexta etapa e emita o resultado final.

2. Algoritmo SHA-256

2.1 Introdução ao Algoritmo SHA-256

SHA-256 (Secure Hash Algorithm 256, Secure Hash Algorithm 256) é um tipo de função hash (ou função hash), que pode calcular uma string de 32 bytes (também conhecida como message digest, message digest). Função hash É considerada uma função unidirecional - com base na saída da função, é extremamente difícil enviar os dados de entrada. A função hash embaralha e mistura os dados da mensagem e os compacta em um valor hash (resumo), tornando a quantidade de dados menor.
O SHA-256, desenvolvido pela National Security Agency dos Estados Unidos, é um algoritmo subdividido em SHA-2, pertence a um dos algoritmos SHA e é o sucessor do SHA-1. Para mensagens de qualquer tamanho, o SHA256 gera um valor de hash de 256 bits (array de 32 bytes) chamado resumo de mensagem. O resumo geralmente é expresso como uma string hexadecimal de 64 bits. Quando a mensagem é recebida, esse resumo da mensagem pode ser usado para verificar se os dados foram alterados, ou seja, para verificar sua integridade.

2.2 Descrição do Algoritmo SHA-256

Primeiramente, é realizado o pré-processamento das informações, conforme mostra a Figura 2, a mensagem original (Message) é desmontada em blocos de mensagens de 512 bits. O último bloco de mensagem precisa completar as informações e anexar as informações de comprimento da mensagem original. Depois que a mensagem é dividida em n blocos, são necessárias n iterações e o resultado final é o valor de hash final, que é um resumo digital de 256 bits.

insira a descrição da imagem aqui

A unidade de computação mínima do algoritmo SHA256 é uma "palavra" (palavra de 32 bits). O estado intermediário Hi de 256 bits na Fig. 3 é descrito como 8 palavras. O bloco de mensagem de 512 bits Mi será expandido de 16 palavras para 64 palavras, misturado com Hi e compactado em um novo valor de hash Hi+1. O resultado do i-ésimo bloco de dados mapeado pela função Map será utilizado como entrada do i+1-ésimo bloco, ou seja, Map(H_(i-1))=H_i. H0 é o valor inicial de hash predefinido (a parte fracionária da raiz quadrada dos primeiros 8 números primos no número natural, considerando os primeiros 32 bits). O mapeamento de hash é realizado nos dados por sua vez e o estado final Hn obtido é o resumo digital final.

insira a descrição da imagem aqui

A operação mais crítica é a função de mapeamento Map, que equivale a um processo de criptografia cíclica, que embaralha constantemente as informações originais.

2.3 Etapas do algoritmo SHA-256

Conforme mostrado na Tabela 1, as operações envolvidas na função de hash SHA256 são todas operações lógicas bit a bit.
insira a descrição da imagem aqui

Suponha que a mensagem original seja M, o comprimento da mensagem original LM, o bloco de mensagem Mi, o valor inicial do hash H0, a constante SHA-256 K[0]~K[63] (a parte fracionária da raiz cúbica dos primeiros 64 números primos no número natural, pegue os primeiros 32 bits). As etapas de criptografia do algoritmo SHA-256 são as seguintes:
a) Pré-processamento de mensagem (M). Adicione um bit "1" e t bit "0" no final da mensagem, de modo que:
(L_M+t+1) mod 512=448,0≤t<512
represente LM como um armazenamento big-endian de 64 bits formatar e adicionar ao final de M, formar uma nova mensagem M^';
b) decompor. Decompor M^' em Mi de acordo com o tamanho de cada bloco de 512 bits;
c) Expandir Mi para 64 palavras: W[0]~W[63]. Decomponha Mi em 16 palavras big-endian de 32 bits (palavras), que são armazenadas como W[0], …, W[15], e as palavras restantes são obtidas pela seguinte fórmula: W_t=σ_1 (W_(t- 2
) )+W_(t-7)+σ_0 (W_(t-15))+W_(t-16)
d) iterações. São necessários 64 ciclos de criptografia para concluir uma iteração. O processo de criptografia é mostrado na Figura 4: as 8 palavras ABCDEFGH são inicialmente 8 valores iniciais de hash e depois atualizados de acordo com as regras ilustradas; o quadrado azul escuro é uma função lógica não linear pré-definida; o quadrado vermelho representa a adição ( Se o resultado for maior que 232, execute uma operação mod 232); Kt é uma constante SHA-256, Wt gera a t-ésima palavra para este bloco, 0≤t<64; as strings de oito segmentos geradas no último ciclo são combinadas para obter é a string hash correspondente a este bloco;
5) Se a mensagem original contiver vários blocos, as strings hash geradas por esses blocos devem ser adicionadas à iteração para gerar a string hash final.

insira a descrição da imagem aqui

3. Definição do algoritmo HAMAC-SHA256

3.1 Descrição do algoritmo HMAC-SHA256

Algoritmo HMAC-SHA256, ou seja, o algoritmo HMAC que usa SHA-256 para gerar valores de hash. De acordo com o conteúdo do algoritmo HMAC e do algoritmo SHA-256, pode-se ver que o comprimento do pacote de texto simples B do algoritmo HMAC-SHA256 é de 512 bits e o comprimento pode ser obtido usando a chave K de qualquer comprimento (o comprimento mínimo recomendado é de 256 bits, que geralmente deve ser maior que B.) É um valor de hash de 256 bits (resumo). Definido como:
〖HMAC〗_SHA256 (k,m)=□SHA256(k'⊕opad∥SHA256(k'⊕ipad∥m))
onde:
SHA256 é o algoritmo de criptografia SHA-256 e seu comprimento de valor hash de saída é 256 -bit ;
∥ operação de emenda, juntando duas strings;
B Tamanho do pacote de texto simples da função hash, algoritmo SHA-256 é de 512 bits;
k é a chave (chave secreta);
m é a mensagem a ser autenticada;
k' é outra chave derivado da chave original k (se k for menor que B, preencha com zeros à direita até que seja igual a B; se k for maior que B, execute um cálculo de hash SHA256 em k) preenchimento interno do ipad (0x5C5C5C… 5C5C
, constante de 512 bits);
padding externo opad (0x363636…3636, constante de 512 bits)

3.2 Etapas do algoritmo HMAC-SHA256

As etapas de criptografia do algoritmo HMAC-SHA256 são mostradas na Figura 5:
①. Preenchimento de teclas. Se a chave for menor que o comprimento do bloco B (512 bits) do algoritmo SHA-256, ela precisará ser preenchida com 0 no final até que seu comprimento atinja o comprimento do bloco da função de hash unidirecional. Se a chave for maior que o comprimento do pacote, use o algoritmo SHA-256 para encontrar o valor de hash da chave e, em seguida, use esse valor de hash como uma nova chave; ②. Preenchimento interno
. A tecla preenchida é XORed com a sequência chamada ipad, e o valor resultante é ipadkey. O ipad repete a sequência de 00110110 até que o tamanho do pacote seja atingido;
③. Combinando com a mensagem. Combine o ipadkey com a mensagem, ou seja, anexe o ipadkey no início da mensagem.
④. Calcule o valor do hash. Insira o resultado de 3 na função SHA-256 e calcule o valor do hash.
⑤. Enchimento externo. A tecla preenchida é submetida a XOR com uma sequência chamada opad e o valor resultante é opadkey. Opad repete a sequência de 01011100 até que o comprimento do pacote seja alcançado.
⑥. Combinação com valor hash. Coloque o valor de hash de 4 atrás da opadkey.
⑦ Calcule o valor do hash. Insira o resultado de 6 na função SHA-256 e calcule o valor de hash, que é o conteúdo do resumo final.

insira a descrição da imagem aqui

O entendimento simples do HMAC-SHA256 é o seguinte:

  • Processamento de chave: Se o comprimento da chave exceder o comprimento do bloco do algoritmo SHA256 (64 bytes), a chave precisa primeiro passar pelo algoritmo SHA256 e, em seguida, o resultado do hash é usado como uma nova chave, para que o comprimento final da chave Menor ou igual ao comprimento do bloco do algoritmo SHA256.
  • Mensagem de preenchimento: de acordo com os requisitos do algoritmo SHA256, a mensagem precisa ser preenchida para que seu comprimento seja um múltiplo inteiro de 512 bits.
  • Operação HMAC: a operação XOR é executada na mensagem preenchida e na chave, e o valor do hash é calculado pelo algoritmo SHA256. Entre eles, os resultados XOR da mensagem e a chave são usados ​​respectivamente como entrada do algoritmo SHA256.
  • Saída do resultado: use o resultado do hash do algoritmo SHA256 como saída do algoritmo HMAC-SHA256.
    A segurança do algoritmo HMAC-SHA256 depende principalmente da segurança do algoritmo SHA256 e do comprimento e aleatoriedade da chave. Como o algoritmo SHA256 é uma função de hash relativamente segura, o algoritmo HMAC-SHA256 também é amplamente utilizado em campos de segurança, como assinaturas digitais e autenticação de mensagens.

Acho que você gosta

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