MD5, SHA-1 e SHA-256 aparecem em downloads, em sistemas de versionamento, em APIs e, infelizmente, em muito código que guarda senhas. Todos são funções de hash, mas seus usos adequados são bem diferentes hoje. Este guia explica o que um hash faz, compara os três algoritmos e mostra por que nenhum deles, sozinho, é a forma certa de armazenar uma senha.
O que é uma função de hash
Uma função de hash recebe uma entrada de qualquer tamanho e devolve uma saída de tamanho fixo, chamada hash ou resumo. Uma boa função criptográfica tem as seguintes propriedades:
- Determinística: a mesma entrada sempre gera o mesmo hash.
- Efeito avalanche: mudar um único caractere da entrada muda o hash inteiro.
- Sem volta: a partir do hash não se recupera a entrada de forma prática.
- Resistente a colisões: deve ser inviável encontrar duas entradas diferentes com o mesmo hash.
Veja o efeito avalanche no SHA-256: o hash de hello é
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824,
e o de hellp (uma letra diferente) começa com
fdd7585e08c4e2afd71d e não se parece em nada com o anterior.
Comparando os três
MD5
Gera 128 bits, exibidos como 32 caracteres hexadecimais. O hash de
hello é 5d41402abc4b2a76b9719d911017c592. Está
quebrado para uso em segurança: colisões práticas são conhecidas desde
2004, o que permite fabricar dois arquivos diferentes com o mesmo MD5.
Ainda é usado como checksum não adversarial (conferir se um download
veio íntegro contra corrupção acidental) e como chave de cache, mas não
deve servir para assinaturas, certificados ou qualquer contexto em que
alguém possa querer forjar dados.
SHA-1
Gera 160 bits (40 caracteres hexadecimais); o hash de hello
é aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d. Em 2017,
pesquisadores do Google e do CWI publicaram a primeira colisão real
(o ataque "SHAttered"), e navegadores e autoridades certificadoras
abandonaram o SHA-1 em certificados. Sobrevive em sistemas legados; o
Git, por exemplo, identifica objetos por SHA-1 (com proteções extras
contra colisões conhecidas) e caminha para o SHA-256.
SHA-256
Faz parte da família SHA-2 e gera 256 bits (64 caracteres hexadecimais). Não há colisão prática conhecida, e é a escolha padrão atual para verificação de integridade, assinaturas digitais, certificados e blockchains. Seus irmãos maiores, como o SHA-512, oferecem saídas mais longas com o mesmo desenho.
Qual usar para cada tarefa
- Conferir integridade de arquivos: SHA-256. MD5 e SHA-1 só se o outro lado não oferecer nada melhor e não houver risco de adulteração.
- Assinaturas e certificados: SHA-256 ou superior.
- Detectar erro de transmissão: um CRC como o CRC32 é rápido e suficiente, mas não protege contra adulteração intencional.
- Autenticar mensagens: HMAC (um hash combinado com uma chave secreta), e não o hash puro.
- Chaves de cache e deduplicação sem risco de segurança: qualquer um serve, e o mais rápido costuma ganhar.
Por que não usar esses hashes para senhas
Aqui está o erro mais comum. Guardar SHA-256(senha) parece
seguro, mas não é, e o motivo é a velocidade: esses algoritmos foram
feitos para ser rápidos. Uma placa de vídeo moderna calcula bilhões de
hashes por segundo, o que torna viável testar listas gigantes de
senhas prováveis contra um banco vazado. Além disso, sem um
salt (um valor aleatório único por usuário), duas pessoas com a
mesma senha teriam o mesmo hash e tabelas pré-calculadas (as "rainbow
tables") quebrariam tudo de uma vez.
Para senhas, use algoritmos projetados para serem lentos e caros de propósito: Argon2id, bcrypt, scrypt ou PBKDF2 com muitas iterações, sempre com salt individual. As bibliotecas de autenticação modernas já fazem isso corretamente; o papel do desenvolvedor é usar a função certa, e não montar a sua. Para entender o quanto o comprimento e a aleatoriedade da senha importam, veja Senhas fortes: comprimento, entropia e o que o NIST recomenda.
Hash não é criptografia nem codificação
Um hash não pode ser "desfeito", enquanto a criptografia é reversível com a chave e a codificação (como o Base64) é reversível por qualquer um. A diferença entre os três conceitos está no guia Base64 não é criptografia.
Uma observação sobre ferramentas online
Ao usar qualquer gerador de hash na internet, evite colar segredos reais, como senhas de produção ou chaves de API. Use textos de teste. Nas ferramentas deste site, você pode gerar o MD5, o SHA-1, o SHA-256 e o SHA-512 de um texto para comparar os resultados com os exemplos deste guia.