O que é SHA-256? Como funciona, MD5 vs SHA-256 e checksums
SHA-256 é uma função hash criptográfica que transforma qualquer entrada, de uma única letra a um arquivo de vários gigabytes, em um valor fixo de 256 bits, normalmente escrito como 64 caracteres hexadecimais. Ela faz parte da família SHA-2, que o NIST publicou na FIPS 180-2 em 2002. A mesma entrada sempre gera o mesmo hash, e não é possível recuperar a entrada a partir do hash.
Experimente grátis: Hash de Texto Online Gratuito e sem necessidade de conta.
Então, o que é SHA-256 na prática e para que serve? Principalmente para provar que dados não foram alterados: checksums de downloads, certificados TLS, Git, Bitcoin e requisições de API assinadas dependem dele. Este guia explica como o SHA-256 funciona, como MD5 vs SHA-256 se comparam, o que é um checksum e como verificar um checksum SHA-256 no Windows, macOS e Linux. Cada hash abaixo foi calculado com código e conferido duas vezes. Para testar os exemplos, cole-os no gerador de hash gratuito.
O que é SHA-256?
SHA significa Secure Hash Algorithm (algoritmo de hash seguro). O SHA-2 foi projetado pela NSA e padronizado pelo NIST, primeiro na FIPS 180-2 (2002) e hoje na FIPS 180-4. A família tem vários membros, nomeados pelo tamanho da saída: SHA-224, SHA-256, SHA-384 e SHA-512, além de SHA-512/224 e SHA-512/256. O SHA-256 é o mais usado deles.
Um hash funciona como uma impressão digital dos dados. Veja um exemplo de hash SHA-256 para a palavra "hello" e para uma entrada vazia:
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
SHA-256("") = e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Os dois resultados têm o mesmo comprimento, porque a saída tem sempre 256 bits. São 32 bytes e, como um dígito hexadecimal guarda 4 bits, são necessários 256 ÷ 4 = 64 caracteres hexadecimais.
Como o SHA-256 funciona, em resumo
- Preenchimento. A mensagem recebe um bit 1, depois zeros e, por fim, seu comprimento original como número de 64 bits, para que o total seja múltiplo de 512 bits.
- Blocos. A mensagem preenchida é dividida em blocos de 512 bits.
- Compressão. Cada bloco passa por 64 rodadas de operações simples sobre palavras de 32 bits: rotações de bits, XOR, AND e adição módulo 2³². Essas rodadas misturam o bloco em um estado interno de oito palavras de 32 bits (8 × 32 = 256 bits).
- Saída. Depois do último bloco, o estado é o hash.
Cada bloco altera o estado com que o bloco seguinte começa, então uma mudança em qualquer ponto da entrada afeta o resultado.
Principais propriedades do SHA-256
- Determinístico. Os mesmos bytes sempre geram o mesmo hash, em qualquer computador.
- Tamanho fixo. Uma palavra de 5 bytes e um arquivo de 5 GB geram 64 caracteres hexadecimais.
- Efeito avalanche. Uma mudança mínima na entrada muda a saída por completo.
- Resistência a pré-imagem. Dado um hash, não há forma conhecida de encontrar uma entrada correspondente a não ser tentando adivinhar.
- Resistência a colisões. Ninguém jamais encontrou duas entradas diferentes com o mesmo hash SHA-256.
O efeito avalanche é fácil de ver. "hello" e "Hello" diferem em uma letra, e as letras h (01101000) e H (01001000) diferem em apenas um bit:
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
SHA-256("Hello") = 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969
Os dois hashes diferem em 125 dos seus 256 bits, perto da metade esperada de uma saída aleatória, e em 61 dos 64 caracteres hexadecimais.
Um limite: a resistência a pré-imagem protege dados imprevisíveis, não sequências curtas e fáceis de adivinhar. O hash de "hello" está em qualquer tabela de consulta on-line, porque qualquer pessoa pode calcular o hash de palavras comuns e guardar os resultados.
O que é um checksum?
Um checksum (soma de verificação) é um valor curto calculado a partir de dados para que você possa saber depois se eles mudaram. Checksums simples como o CRC32, usados em arquivos ZIP e pacotes de rede, detectam erros acidentais, como um download corrompido ou um disco com defeito, mas são fáceis de falsificar de propósito.
O SHA-256 usado como checksum também protege contra adulteração intencional, porque ninguém consegue criar um arquivo modificado que corresponda ao valor original. Há uma condição: o hash esperado precisa vir de uma fonte confiável, como o site HTTPS oficial do projeto ou um arquivo de checksums assinado. Um atacante que controla a página de download pode trocar o arquivo e o hash publicado ao mesmo tempo.
Onde o SHA-256 é usado
- Downloads de software. Distribuições Linux e muitos aplicativos publicam checksums SHA-256 dos seus instaladores, muitas vezes em um arquivo
SHA256SUMS. - Certificados TLS. O certificado que protege um site HTTPS é, na maioria dos casos, assinado sobre um hash SHA-256, exibido como "sha256WithRSAEncryption" ou "ecdsa-with-SHA256". Os principais navegadores deixaram de confiar em certificados assinados com SHA-1 em 2017.
- Bitcoin. Os mineradores calculam o hash dos cabeçalhos de bloco aplicando o SHA-256 duas vezes (SHA-256 duplo) e mudam um número chamado nonce até o resultado ficar abaixo de um alvo. Essa busca é a prova de trabalho.
- Git. O Git tradicionalmente identifica commits e arquivos pelo hash SHA-1. Desde a versão 2.29 (2020),
git init --object-format=sha256cria um repositório que usa SHA-256 no lugar. - HMAC-SHA256 e JWT. O HMAC mistura uma chave secreta ao hash, de modo que só quem tem a chave consegue gerar um valor válido. Webhooks e requisições de API costumam ser assinados assim, e o algoritmo JWT HS256 é HMAC com SHA-256; o gerador de HMAC calcula esse valor. Não use no lugar um simples
SHA-256(key + message): ele é vulnerável a ataques de extensão de comprimento, que o HMAC impede.
MD5 vs SHA-256 (e SHA-1, SHA-512)
| Algoritmo | Saída | Caracteres hex | Publicado | Situação de segurança |
|---|---|---|---|---|
| MD5 | 128 bits | 32 | 1992 (RFC 1321) | Quebrado: colisões práticas desde 2004 |
| SHA-1 | 160 bits | 40 | 1995 (FIPS 180-1) | Quebrado: primeira colisão pública em 2017 |
| SHA-256 | 256 bits | 64 | 2002 (FIPS 180-2) | Seguro: nenhuma colisão conhecida |
| SHA-512 | 512 bits | 128 | 2002 (FIPS 180-2) | Seguro: nenhuma colisão conhecida |
A mesma entrada nos quatro:
MD5("hello") = 5d41402abc4b2a76b9719d911017c592
SHA-1("hello") = aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
SHA-512("hello") = 9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043
O que é MD5? O MD5 é um hash mais antigo, de 128 bits, de 1992. Em 2004, pesquisadores liderados por Xiaoyun Wang mostraram como construir duas entradas diferentes com o mesmo hash MD5, e trabalhos posteriores tornaram essas colisões rápidas de calcular. O MD5 não deve ser usado onde alguém possa criar de propósito um arquivo correspondente.
O SHA-1 durou mais. Em fevereiro de 2017, o CWI de Amsterdã e o Google anunciaram o SHAttered: dois arquivos PDF diferentes com o mesmo hash SHA-1. O NIST recomenda substituir o SHA-1 por completo até 31 de dezembro de 2030.
O SHA-256 não tem nenhum ataque prático conhecido. Uma busca de colisões por força bruta exigiria cerca de 2¹²⁸ tentativas, muito além do alcance de qualquer computador existente.
Portanto, na escolha entre MD5 vs SHA-256, use SHA-256 para tudo o que envolve segurança. O MD5 ainda serve quando ninguém está tentando enganar você, por exemplo para detectar corrupção acidental ou encontrar arquivos duplicados no seu próprio disco.
SHA-256 e SHA-512 são ambos seguros; o SHA-256 é o padrão com suporte mais amplo. O SHA-3 (FIPS 202, 2015) é um projeto diferente, padronizado como alternativa e não porque o SHA-2 tenha sido quebrado.
Hash não é criptografia
A criptografia, como o AES, é reversível: com a chave certa, você recupera os dados originais. Um hash não tem chave nem caminho de volta; ele sempre tem 256 bits, por maior que seja a entrada, então os dados originais não estão na saída. Sites que dizem "descriptografar SHA-256" apenas consultam hashes de palavras e senhas comuns calculados com antecedência.
Por que SHA-256 puro é errado para senhas
O SHA-256 foi feito para ser rápido, e esse é justamente o problema para senhas. Se um banco de dados com hashes SHA-256 de senhas vazar, os atacantes podem testar bilhões de tentativas por segundo em placas de vídeo. Sem salt, dois usuários com a mesma senha também recebem o mesmo hash.
Senhas exigem uma função de hash lenta e com salt: Argon2id, scrypt ou bcrypt (ou PBKDF2 com muitas iterações). Elas tornam cada tentativa cara. Para entender o salt e o que acontece quando senhas com hash vazam, leia o que acontece quando uma senha passa por hash.
Como verificar um checksum SHA-256
- Copie o valor SHA-256 esperado da página oficial de download ou do arquivo de checksums.
- Calcule o hash do arquivo que você baixou.
- Compare os 64 caracteres, não só os primeiros. Maiúsculas e minúsculas não importam em hexadecimal.
Se os valores forem diferentes, apague o arquivo e baixe-o de novo da fonte oficial.
Windows
No Prompt de Comando:
certutil -hashfile ubuntu.iso SHA256
Sempre inclua SHA256: sem ele, o certutil usa SHA-1. No PowerShell, o Get-FileHash usa SHA-256 por padrão e pode fazer a comparação por você:
Get-FileHash .\ubuntu.iso
(Get-FileHash .\ubuntu.iso).Hash -eq "paste-the-expected-hash-here"
A segunda linha exibe True ou False; o -eq ignora maiúsculas e minúsculas, então a saída em maiúsculas corresponde a um checksum em minúsculas.
macOS
shasum -a 256 ubuntu.iso
shasum -a 256 -c ubuntu.iso.sha256
A primeira linha exibe o hash. A segunda o confere com um arquivo de checksums, que contém o hash, dois espaços e o nome do arquivo.
Linux
sha256sum ubuntu.iso
sha256sum -c SHA256SUMS --ignore-missing
Com -c, o sha256sum lê o arquivo de checksums e exibe ubuntu.iso: OK ou FAILED. --ignore-missing ignora as entradas de arquivos que você não baixou.
Uma armadilha comum ao calcular o hash de um texto no terminal: echo "hello" | sha256sum retorna 5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03, e não o valor 2cf24d… acima, porque o echo acrescenta uma quebra de linha. Use printf 'hello' | sha256sum para calcular o hash de exatamente cinco bytes.
No navegador
O gerador de hash MD5 e SHA-256 calcula MD5, SHA1, SHA224, SHA256, SHA384, SHA512, Keccak-256 e RIPEMD160 de uma vez, a partir de um texto ou de um arquivo.
- Texto: calcula o hash exatamente do que você digita, em UTF-8, e um contador mostra o número de bytes, então um espaço ou uma quebra de linha a mais é fácil de notar.
- Arquivo: o arquivo é lido e processado localmente com a biblioteca crypto-js, sem ser enviado.
- Verificar: cole o valor publicado no campo "Hash esperado" e o algoritmo correspondente é marcado com "Corresponde". A comparação hexadecimal ignora maiúsculas, espaços e o prefixo
0x. - Saída: hexadecimal (minúsculas ou maiúsculas), Base64, Base64url ou binário.
Dois limites: o arquivo inteiro é carregado primeiro na memória, então para ISOs de vários gigabytes as ferramentas de linha de comando acima são a melhor opção. E a linha chamada SHA3 é o Keccak-512 com o preenchimento original, que difere do NIST SHA3-512.
Perguntas frequentes
É possível descriptografar ou reverter o SHA-256?
Não. O SHA-256 é uma função de mão única, sem chave. Os "descriptografadores de SHA-256" só encontram entradas que já estavam nas suas tabelas de consulta, o que funciona com palavras comuns e senhas fracas, mas não com dados aleatórios.
O SHA-256 ainda é seguro?
Sim. Não há nenhum ataque prático conhecido de colisão ou de pré-imagem contra o SHA-256, e o NIST continua a aprová-lo. Mesmo um grande computador quântico com o algoritmo de Grover, pelo que se sabe hoje, só reduziria o esforço de pré-imagem de cerca de 2²⁵⁶ para cerca de 2¹²⁸ operações.
Por que um hash SHA-256 tem 64 caracteres?
O hash tem 256 bits. Em hexadecimal, cada caractere representa 4 bits, então 256 ÷ 4 = 64 caracteres. O mesmo valor tem 32 bytes, ou 44 caracteres em Base64.
Qual é a diferença entre SHA-2 e SHA-256?
SHA-2 é a família de funções hash definida na FIPS 180-4. O SHA-256 é um de seus membros, ao lado de SHA-224, SHA-384 e SHA-512. Quando um software diz "SHA-2" sem indicar o tamanho, geralmente se refere ao SHA-256.
Dois arquivos podem ter o mesmo hash SHA-256?
Em teoria, sim, porque existem infinitos arquivos possíveis e apenas 2²⁵⁶ hashes possíveis. Na prática, ninguém jamais encontrou duas entradas diferentes com o mesmo hash SHA-256, então hashes iguais são considerados prova de que os arquivos são idênticos.
Experimente grátis: Hash de Texto Online Gratuito e sem necessidade de conta.