O SHA-256 é, hoje, a função de hash criptográfica mais usada do mundo. Sustenta os certificados que protegem os sites, confirma que o software descarregado não foi adulterado e está no coração da rede Bitcoin. Quando se fala de “o hash de um ficheiro” num contexto moderno e seguro, é quase sempre SHA-256 que está em causa. Este artigo explica onde se situa, como se comporta e onde aparece no dia a dia.

Onde o SHA-256 se encaixa na família SHA-2

A sigla SHA significa Secure Hash Algorithm, e existem várias gerações. O SHA-1, com 160 bits de saída, foi o cavalo de batalha da web durante anos, até a nossa investigação SHAttered demonstrar a primeira colisão prática de SHA-1 em 2017. O SHA-256 pertence à geração seguinte, conhecida como SHA-2, normalizada pelo NIST em 2001.

A família SHA-2 não é uma única função, mas um conjunto que partilha a mesma estrutura base e difere sobretudo no tamanho do resumo. Os membros mais comuns são o SHA-224, o SHA-256, o SHA-384 e o SHA-512, sendo o número o comprimento da saída em bits. O SHA-256 é o ponto de equilíbrio que a maioria dos sistemas escolheu: um resumo suficientemente largo para ser seguro a longo prazo, sem o peso de cálculo dos membros maiores.

É importante não confundir o SHA-2 com o SHA-3. Apesar do nome sequencial, o SHA-3 não é uma versão melhorada do SHA-2, mas um desenho interno completamente diferente, normalizado mais tarde como reserva. Os dois coexistem deliberadamente, para que uma eventual fraqueza num não comprometa o outro.

O resumo de 256 bits

Independentemente do tamanho da entrada, o SHA-256 devolve sempre 256 bits. Isso traduz-se, em representação hexadecimal, em exatamente 64 caracteres. Tanto o hash de uma única letra como o de um ficheiro de vídeo de vários gigabytes ocupam o mesmo comprimento fixo.

O espaço de 256 bits é difícil de apreender por intuição. O número de resumos possíveis é 2 elevado a 256, um valor tão grande que excede largamente qualquer contagem física com sentido no universo observável. É esta escala que torna inviável, na prática, percorrer todas as saídas possíveis à procura de uma correspondência. A segurança do SHA-256 não vem de algum segredo escondido na função, que é pública e bem conhecida, mas precisamente da dimensão deste espaço e da forma como mistura a entrada.

Como o SHA-256 se comporta

Mais útil do que decorar a mecânica interna é compreender as propriedades observáveis da função. São estas que importam quando se decide onde a usar.

Determinística

A mesma entrada produz sempre a mesma saída, em qualquer máquina, em qualquer momento. Esta previsibilidade é o que permite usar um hash como identificador estável: se o resumo bate certo, os dados são os mesmos; se não bate, algo mudou.

Efeito de avalanche

Alterar um único bit da entrada faz mudar cerca de metade dos bits da saída. O resultado é que duas entradas quase iguais produzem resumos sem qualquer semelhança aparente. Esta propriedade garante que o hash não revela pistas sobre o grau de parecença entre duas entradas, e é também o que torna inútil tentar “aproximar-se” de um resumo por tentativa e erro.

Resistência à pré-imagem

A partir de um resumo, não há forma viável de descobrir uma entrada que o produza. O cálculo é fácil num sentido, da entrada para a saída, e impraticável no sentido inverso. É por isto que os sistemas de palavras-passe podem guardar hashes em vez das palavras-passe em claro, embora, nesse caso específico, se prefiram funções desenhadas para serem lentas.

Resistência a colisões

Uma colisão são duas entradas diferentes com o mesmo resumo. Como as saídas têm tamanho fixo e as entradas são ilimitadas, as colisões existem por força matemática. A promessa de segurança é apenas que ninguém as consiga encontrar dentro de um tempo de cálculo razoável. Para o SHA-256, não se conhece qualquer ataque prático que produza uma colisão, e é por isso que continua a ser considerado seguro, ao contrário do SHA-1.

Como o resumo é formado, em traços gerais

O SHA-256 não processa a entrada de uma só vez, mas por blocos. Primeiro, a mensagem é preenchida até atingir um múltiplo do tamanho de bloco. Depois, a função percorre um bloco de cada vez, misturando cada um num estado interno de tamanho fixo através de várias rondas de operações aritméticas e ao nível dos bits. Quando o último bloco é processado, esse estado interno passa a ser o resumo final. Esta abordagem de preencher, misturar bloco a bloco e produzir uma saída final é comum às funções da linhagem MD5, SHA-1 e SHA-2. Os detalhes exatos do número de rondas e das constantes envolvidas fazem parte da especificação pública, mas, para decidir onde usar a função, basta reter este padrão geral.

Onde o SHA-256 é usado

O SHA-256 não é um exercício abstrato. Corre, discretamente, por baixo de grande parte da computação do dia a dia.

Certificados TLS e HTTPS

Quando um navegador estabelece uma ligação segura, valida o certificado do servidor, e esse certificado é assinado sobre um resumo SHA-256 dos seus dados. A migração de certificados SHA-1 para SHA-256, acelerada após o SHAttered, foi uma das mudanças mais visíveis na infraestrutura da web na última década. Hoje, praticamente todos os certificados de confiança usam SHA-256 ou mais forte.

Assinatura de software

Os sistemas operativos e os gestores de pacotes verificam se um programa vem de quem diz vir e se não foi alterado. Esse processo combina o SHA-256 com chaves assimétricas, num esquema descrito no artigo sobre assinaturas digitais. O hash reduz o ficheiro a um resumo, e a assinatura cobre esse resumo.

Prova de trabalho da Bitcoin

A rede Bitcoin usa o SHA-256 de forma intensiva. A mineração consiste, na prática, em procurar uma entrada cujo resumo SHA-256 cumpra uma certa condição numérica, uma tarefa que só se resolve por tentativa repetida. O efeito de avalanche e a resistência da função são o que torna essa procura genuinamente custosa, e é esse custo que protege a rede.

Integridade de ficheiros

Muitas páginas de descarga publicam o resumo SHA-256 ao lado do ficheiro. Depois de descarregar, qualquer pessoa pode calcular o hash localmente e compará-lo com o valor publicado. Se coincidirem, o ficheiro chegou intacto; se não, foi corrompido ou trocado pelo caminho. É a forma mais simples de verificar integridade sem precisar de uma assinatura completa.

Por que o SHA-256 continua a resistir

A pergunta natural, depois de ver o SHA-1 cair, é se o SHA-256 terá o mesmo destino. Por agora, a resposta é que não há qualquer ataque prático conhecido. O resumo mais largo, de 256 bits, e um desenho interno mais forte colocam-no muito além do que as técnicas que quebraram o SHA-1 conseguem alcançar.

Ainda assim, a história do SHA-1 ensina prudência. As primitivas criptográficas envelhecem, e um ataque hoje teórico pode aproximar-se da prática à medida que a análise avança e o equipamento fica mais barato. É por isso que o SHA-3 foi normalizado como alternativa de reserva e por que a orientação responsável é manter os sistemas capazes de mudar de função quando for preciso. Para situar o SHA-256 no conjunto maior das ferramentas criptográficas, veja o artigo central de criptografia e o texto geral sobre funções de hash.

Perguntas frequentes

Qual a diferença entre SHA-256 e SHA-2?

O SHA-2 é a família, e o SHA-256 é um dos seus membros, aquele que produz um resumo de 256 bits. Outros membros, como o SHA-512, partilham a mesma estrutura e diferem sobretudo no tamanho da saída.

O SHA-256 pode ser invertido para recuperar os dados originais?

Não. O SHA-256 é uma função de sentido único. A partir do resumo não há forma viável de reconstruir a entrada. Quem afirma “desencriptar” um hash SHA-256 está, na verdade, a comparar o resumo com uma lista de valores já calculados, não a inverter a função.

O SHA-256 é seguro para guardar palavras-passe?

Por si só, não é a melhor escolha. É rápido demais, o que ajuda quem tenta adivinhar palavras-passe por tentativa. Para esse fim, usam-se funções propositadamente lentas e com sal, como bcrypt, scrypt ou Argon2. O SHA-256 é excelente para integridade e assinaturas, não para armazenar segredos de utilizadores diretamente.