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

  1. 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.
  2. Blocos. A mensagem preenchida é dividida em blocos de 512 bits.
  3. 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).
  4. 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

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

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

  1. Copie o valor SHA-256 esperado da página oficial de download ou do arquivo de checksums.
  2. Calcule o hash do arquivo que você baixou.
  3. 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.

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.