Português (Brasil)

Ferramentas para desenvolvedores · SHA calculadora de hash

Ataques de extensão de comprimento: Por que SHA-256(segredo + mensagem) não é um MAC

· Por que é importante

sha-256 criptografia segurança

Um bloco de estado SHA-256 sendo estendido com bytes adicionais para forjar um hash válido
Ilustração vetorial original ToolAcre

Anexar um segredo a uma mensagem e fazer hash parece autenticação, mas a estrutura de SHA-256 permite que um invasor estenda a mensagem sem conhecer o segredo. Esta postagem explica o ataque e a correção.

A assinatura de solicitação caseira — hash(secret + body) e por que parece segura

Um desenvolvedor precisa de autenticação de mensagem, mas não tem o conhecimento HMAC, então ele concatena um segredo com a mensagem e faz o hash do resultado. Esta abordagem parece segura à primeira vista: a saída é uma impressão digital de tamanho fixo que deve mudar se alguém modificar a mensagem. No entanto, SHA-256 possui uma falha arquitetônica chamada extensão de comprimento que permite que um invasor anexe dados à mensagem e calcule um resumo válido sem conhecer o segredo. A calculadora de hash ToolAcre SHA calcula apenas resumos simples, não autenticação com chave, porque essa distinção é importante para a segurança real.

Acrescentar um segredo antes do hash é intuitivamente atraente porque somente o detentor do segredo pode recalcular o hash. Se a mensagem mudar, o hash também muda, então parece uma prova de autenticidade. Um API pode assinar solicitações concatenando um segredo compartilhado e o corpo da solicitação, depois fazendo hash do resultado e incluindo esse hash na solicitação. O servidor recebe o corpo, recalcula o hash com sua cópia do segredo e verifica se ele corresponde. Se um invasor alterar o corpo, o hash não corresponderá – ou assim pensam os desenvolvedores.

Merkle–Damgård vaza seu estado – o resumo final é o estado interno, para que um invasor possa continuar fazendo hash de onde você parou

SHA-256 pertence a uma família chamada funções hash Merkle – Damgård. Essas funções processam a entrada em blocos de tamanho fixo, encadeando uma função de compressão que pega o estado anterior e o bloco atual e gera um novo estado. A função de compressão é a única primitiva criptográfica interna; a estratégia de encadeamento e o esquema de preenchimento fazem todo o trabalho de construção. O resumo final é simplesmente o estado final impresso em hexadecimal. Isto não é acidental: a saída é o estado interno. Qualquer pessoa que veja o resumo terá o estado exato necessário para continuar o hash a partir desse ponto.

Para estender uma mensagem, um invasor começa com o resumo observado de secret + original_message e o trata como a variável de estado para uma nova chamada de função de compactação. Eles acrescentam os dados que desejam adicionar, preenchem-nos corretamente para todo o comprimento da nova mensagem e calculam o resumo. Quando o servidor valida esse resumo forjado acrescentando seu próprio segredo e hash, o cálculo prossegue de forma idêntica ao cálculo do invasor depois que o segredo inicial foi absorvido. O servidor calcula o mesmo resumo e a mensagem forjada é aceita sem que o invasor conheça o segredo.

Como a extensão funciona — acrescentando preenchimento e dados extras para forjar um hash válido para uma mensagem mais longa

Algoritmos diferentes são afetados de maneira diferente pela extensão do comprimento. SHA-1 é vulnerável: um invasor pode observar um resumo de SHA-1 e estender a mensagem. SHA-256 é vulnerável exatamente da mesma maneira. SHA-512 também é vulnerável a ataques de extensão. SHA-384 resiste à extensão de comprimento porque é construído como SHA-512 truncado para 384 bits. A saída da função de compactação é mais longa que o resumo publicado, portanto, o invasor não tem informações suficientes para continuar o hash. A construção em esponja usada em SHA-3 também resiste porque não vaza o estado interno.

Compreender quais algoritmos são vulneráveis ​​requer saber algo sobre o tamanho da função de compactação versus o tamanho do resumo publicado. SHA-256 publica 256 bits e o estado da função de compactação também é 256 bits, portanto, o resumo é o estado inteiro. Um invasor tem tudo o que é necessário para continuar. SHA-384 publica 384 bits, mas o estado da função de compactação subjacente é 512 bits porque SHA-384 é construído sobre SHA-512. O resumo revela apenas 384 daqueles 512 bits, deixando 128 bits desconhecido para um invasor. Esta é uma propriedade de projeto intencional de SHA-384 que fornece essa resistência.

As construções SHA-1, SHA-256 e SHA-512 suportadas expõem o estado completo; O truncamento SHA-384 altera o limite da extensão

A correção para autenticar mensagens com um segredo compartilhado é HMAC, o código de autenticação de mensagem com chave hash. HMAC não precede o segredo e o hash; em vez disso, ele aplica o segredo em duas operações de hash aninhadas usando esquemas de preenchimento específicos chamados de preenchimentos internos e externos. A construção é HMAC(secret, message) = SHA256(secret_XOR_outer_pad, SHA256(secret_XOR_inner_pad, message)). Essa abordagem aninhada fecha a lacuna de extensão de comprimento porque mesmo que um invasor tenha o resumo do hash interno, ele não poderá continuar o hash sem o segredo.

A razão para manter as operações digest e HMAC separadas é evitar o erro comum de tratar as duas de forma intercambiável. Um desenvolvedor que aprende sobre hash por meio de uma ferramenta que faz as duas coisas pode esquecer qual delas está usando ao escrever o código. Manter a computação de resumo separada torna a escolha explícita e reforça o aprendizado de que a autenticação precisa de HMAC ou assinaturas. A calculadora de hash ToolAcre SHA rotula os resumos simples com clareza e a documentação explica que HMAC é uma operação totalmente diferente.

HMAC como correção — a construção aninhada que fecha a lacuna e por que é a resposta padrão

Um exemplo conceitual de extensão de comprimento funciona no conhecido vetor de teste abc. Calcular SHA-256 no texto ASCII abc produz o resumo ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad. Suponha que este resumo seja o resultado de segredo + hash abc com um segredo de 5 bytes, dando um total de 8 bytes de entrada. SHA-256 processa a entrada em blocos de 64 bytes, portanto, o primeiro e único bloco foi preenchido com o comprimento da mensagem e outros bytes de preenchimento. Um invasor vê o resumo e deseja falsificar uma mensagem começando com abc seguida de dados extras.

Eles não podem anexar diretamente a abc porque não sabem o preenchimento exato que foi adicionado dentro do hash. No entanto, eles podem calcular qual deve ter sido a mensagem completa preenchida: abc mais o preenchimento necessário para uma entrada de 8 bytes para um bloco de 64 bytes. Eles então acrescentam seus dados extras, calculam o preenchimento para o novo comprimento total e fazem hash da combinação tratando o resumo observado como o estado inicial. O resultado é um resumo SHA-256 válido que o servidor aceitará porque precede o segredo e calcula o mesmo hash.

Exemplo resolvido - um passo a passo conceitual para estender uma mensagem assinada, sem um alvo ativo

Para evitar esse ataque em um sistema real, o desenvolvedor não deve tentar construir autenticação a partir de um hash simples. HMAC é a resposta padrão, e a calculadora de hash ToolAcre SHA é uma ferramenta para calcular resumos simples para verificações de integridade, hash de conteúdo e fins semelhantes de não autenticação. Exemplos de usos seguros de resumos SHA-256 simples incluem somas de verificação de arquivo, onde um invasor não pode controlar o arquivo e o resumo; armazenamento endereçável por conteúdo, onde o hash é a chave de pesquisa; e assinaturas digitais combinadas com assinaturas, onde a assinatura fornece autenticação.

O escopo completo deste problema inclui os outros algoritmos que o navegador fornece. SHA-1 é vulnerável à extensão de comprimento e já estava criptograficamente quebrado antes de isso se tornar relevante. A calculadora ToolAcre rotula SHA-1 como somente legado e explica os ataques de colisão que a tornaram inadequada para novos aplicativos. Para novos aplicativos, SHA-256 é a escolha sensata para resumos simples e, se for necessária autenticação, HMAC com SHA-256 é a resposta. SHA-384 e SHA-512 são vulneráveis, mas SHA-384 está protegido por truncamento.

O que isso não cobre — a calculadora ToolAcre calcula resumos simples, não HMAC; a postagem explica por que essa distinção é importante

Ao construir o modelo mental de funções hash, a construção de Merkle-Damgård e a extensão de comprimento tornam-se os conceitos-chave. Uma função hash deve lidar com comprimentos de entrada arbitrários e produzir uma saída fixa. A maneira como isso é feito é encadeando uma função de compactação bloco por bloco, e a maneira como o estado final é convertido em saída é extremamente importante. Se o estado final for gerado inteiramente, essa saída conterá todas as informações necessárias para continuar o hash. Se o estado final for truncado, parte ficará oculta.

Para um desenvolvedor que está lendo sobre ataques de extensão de comprimento pela primeira vez, a questão é como saber se isso afeta seu caso de uso. Se a entrada para o hash for uma constante pública e o hash for usado como chave de pesquisa ou impressão digital, a extensão do comprimento é irrelevante. Se o hash for usado para autenticar uma mensagem quando ambas as partes compartilham um segredo, a extensão de comprimento é uma vulnerabilidade crítica e HMAC é a solução. A calculadora de hash ToolAcre SHA exibe resumos e contagens de bytes, deixando claro que estas são saídas computacionais, não mecanismos de autenticação.

Conclusão: use um MAC para autenticação - a calculadora de hash ToolAcre SHA é para resumos de integridade; a autenticação precisa de HMAC ou uma assinatura

Aplicando isso a sistemas de produção, o princípio é simples: nunca use um hash simples para autenticação quando um segredo estiver envolvido. HMAC é a construção padrão que fecha totalmente o vetor de ataque de extensão de comprimento. SHA-256 e SHA-384 são seguros para os fins pretendidos quando usados ​​corretamente. Compreender os três pontos principais – que Merkle–Damgård revela seu estado no resumo, que SHA-384 trunca para ocultar parte do estado e que HMAC usa uma construção aninhada para evitar extensão – dá ao desenvolvedor as ferramentas para fazer a escolha certa.

A calculadora de hash ToolAcre SHA incorpora este ensinamento: ela fornece resumos simples para aprendizado e para usos legítimos sem autenticação, rotula SHA-1 como legado e não implementa HMAC porque essa operação pertence a um contexto diferente. Quando os desenvolvedores recorrem a uma calculadora de hash simples para autenticar uma solicitação, o posicionamento e a documentação da ferramenta os orientam em direção a HMAC e assinaturas como as ferramentas adequadas. O kit de ferramentas ToolAcre concentra-se no que o Web Crypto do navegador fornece diretamente e explica os limites onde cada primitivo é apropriado.