Informática

Hash e integridade: SHA-256, sal, HMAC e senhas com testes

A função hash é a ferramenta que garante a integridade na segurança da informação, mas a confusão sobre o que ela garante é grande: hash não é criptografia, não cifra nada e, sozinha, não prova quem enviou o arquivo. Este guia detalha o que o guia de criptografia e assinatura digital apenas apresenta, e os resultados mostrados foram obtidos executando os cálculos em um teste.

O que é uma função hash

Uma função hash recebe dados de qualquer tamanho e produz uma sequência de tamanho fixo, o resumo (digest, ou valor hash). Propriedades esperadas de uma função hash criptográfica:

Propriedade Significado
Determinística a mesma entrada sempre dá o mesmo resumo
Tamanho fixo a saída tem sempre o mesmo número de bits
Unidirecional (resistência à pré-imagem) dado o resumo, é inviável recuperar a entrada
Resistente a colisões é inviável achar duas entradas diferentes com o mesmo resumo
Efeito avalanche uma pequena mudança na entrada muda o resumo por completo

Tamanhos conferidos

Calculando o resumo do texto “abc”:

Algoritmo Bits do resumo Caracteres hexadecimais
MD5 128 32
SHA-1 160 40
SHA-256 256 64
SHA-512 512 128

O SHA-256 de “abc” começa por ba7816bf8f01cfea e termina em ...f20015ad; o utilitário sha256sum, do Linux, confirmou o mesmo valor. Os resumos de MD5 e SHA-1 existem e são calculados com facilidade, mas esses dois algoritmos são considerados inadequados para fins de segurança, por já terem sido encontradas colisões práticas. Para integridade com requisito de segurança, usam-se algoritmos da família SHA-2 ou SHA-3; confira o que a norma ou o edital adota.

Efeito avalanche: o teste

Duas entradas que diferem em uma letra, “concurso” e “Concurso” (maiúscula inicial), geraram resumos SHA-256 completamente diferentes. Comparando os 256 bits dos dois resumos, 141 bits eram diferentes, ou seja, cerca da metade, o que é esperado de uma boa função hash. Não existe “resumo parecido para entrada parecida”; por isso o hash serve para detectar qualquer alteração, mesmo mínima.

Outro teste: o resumo do texto vazio também tem tamanho fixo (64 caracteres hexadecimais), começando por e3b0c44298fc1c14. Mesmo “nada” tem hash.

Hash para verificar integridade de arquivo

O uso mais comum: o provedor publica o hash do arquivo; você calcula o hash do que baixou e compara. Em um teste, um arquivo com o texto “Oficio 1” teve o resumo iniciado em b5ee2b3c35b2; ao trocar para “Oficio 2”, o resumo passou a 6a9e143cc705. Mudou um caractere, mudou o hash. Se os valores batem, o arquivo está íntegro.

Limite importante: se o atacante consegue alterar o arquivo e o hash publicado juntos, a verificação não protege. O hash garante integridade em relação ao valor de referência, não a origem desse valor. É por isso que o hash vira assinatura digital: o resumo é cifrado com a chave privada do signatário, o que acrescenta autenticidade e não repúdio (veja ICP-Brasil e assinatura eletrônica).

Hash x HMAC

O HMAC é um código de autenticação de mensagem: combina uma função hash com uma chave secreta compartilhada. Só quem conhece a chave consegue gerar ou conferir o código correto. No teste, a mesma mensagem com a chave “chave” e com a chave “outra” produziu códigos completamente diferentes (79fed46c713c93a3... e 3986db45c5729df6...).

Mecanismo Chave? Garante integridade? Garante autenticidade da origem?
Hash simples não sim, contra o valor de referência não
HMAC chave secreta compartilhada sim sim, entre quem tem a chave
Assinatura digital par de chaves (privada assina) sim sim, e dá não repúdio

Detalhe cobrado: o HMAC não oferece não repúdio, porque as duas partes conhecem a chave; qualquer uma poderia ter gerado o código. Já a assinatura digital, feita com a chave privada que só o signatário possui, oferece.

Senhas: por que o hash simples não basta

Sistemas bem projetados não guardam a senha; guardam seu hash. Na autenticação, calcula-se o hash da senha digitada e compara-se com o armazenado. Assim, um vazamento da base não expõe diretamente as senhas.

Mas o hash simples é determinístico: duas contas com a mesma senha terão o mesmo hash, e um atacante pode pré-calcular hashes das senhas mais comuns (tabelas pré-computadas) e comparar. A defesa é o sal (salt): um valor aleatório, único por usuário, concatenado à senha antes do hash. No teste, a mesma senha com dois sais diferentes gerou resumos totalmente diferentes (242b71a741cfdf72... e 7060f23a5f52fae0...). O sal não é segredo; fica guardado ao lado do hash. Ele impede tabelas pré-computadas e esconde senhas repetidas.

O segundo reforço é usar um hash lento e configurável, como funções de derivação de chave de senha, que repetem o cálculo muitas vezes para encarecer o ataque por tentativa. No teste, a derivação com 100 mil repetições produziu uma chave de 256 bits. Funções rápidas como SHA-256 puro são boas para arquivos, mas ruins para senhas, justamente por serem rápidas. Sobre controle de acesso, veja controle de acesso e medidas de segurança.

Onde o hash aparece em provas

  • Assinatura digital: calcula-se o hash do documento e cifra-se o resumo com a chave privada.
  • Verificação de integridade de arquivos e de cópias de segurança.
  • Armazenamento de senhas.
  • Blockchain, em que cada bloco guarda o hash do anterior.
  • Identificação de arquivos duplicados, comparando resumos.

Erros comuns

  • Dizer que o hash “criptografa” o arquivo: ele não é reversível e não protege o sigilo.
  • Achar que o hash garante a origem do arquivo.
  • Achar que o tamanho do resumo depende do tamanho do arquivo.
  • Dizer que é possível “descriptografar” um hash: o que existe é adivinhar entradas e comparar.
  • Usar MD5 ou SHA-1 como exemplo de algoritmo seguro em provas atuais.
  • Confundir sal (público, único por usuário) com chave secreta.

Fontes e atualização

Não há norma oficial brasileira específica sobre funções hash neste guia; o conteúdo segue a literatura de segurança da informação, e os valores citados foram calculados em testes executados. Recomendações sobre algoritmos mudam com o tempo: confira a norma e o edital vigentes.

Próximos passos

Leia também

Para continuar no site

Viu algo errado, desatualizado ou confuso? Relatar erro nesta página