Funções hash criptográficas explicadas

O que são funções hash criptográficas?
Uma função hash criptográfica (cryptographic hash function) é uma fórmula matemática que transforma uma informação (por exemplo, um texto, arquivo ou senha) em uma curta “impressão digital” de comprimento fixo. Essa impressão é chamada valor hash.
Um valor hash geralmente se parece com uma longa sequência de números e letras. Por exemplo, se você inserir a palavra "Olá" na função hash SHA-256 (uma função hash bastante conhecida usada pelo Bitcoin), você obterá:
185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969
Não importa quantas vezes ou em qual computador você faça isso: enquanto a entrada for “Olá”, o valor hash será sempre exatamente o mesmo. O hash, portanto, está ligado a uma informação específica. Isso o torna um método confiável para verificar se os dados foram alterados.
Pontos principais
-
As funções hash criam uma impressão digital dos dados: a mesma entrada sempre produz o mesmo hash, mas pequenas alterações geram um resultado totalmente diferente.
-
Os hashes não são reversíveis: a partir do hash não é possível reconstruir os dados originais, o que os torna adequados para segurança e blockchains.
-
As aplicações são amplas: armazenamento seguro de senhas, verificação de integridade, assinaturas digitais e transações em blockchain.
-
A segurança varia de acordo com o algoritmo: MD5 e SHA-1 estão comprometidos e são inseguros, enquanto SHA-2 e SHA-3 ainda são considerados seguros.
-
Nas blockchains os hashes são cruciais: conectam blocos entre si, protegem transações e possibilitam a mineração por Proof of Work.
Aplicações de uma função hash
Um valor hash é frequentemente usado na segurança digital de dados, comunicações e sistemas. Você os encontra, por exemplo, em:
- Armazenamento de senhas: em vez de armazenar senhas em texto simples, um sistema guarda apenas o valor hash.
- Verificação de integridade: em downloads ou atualizações de software, um hash é fornecido para que os usuários possam verificar se o arquivo não foi alterado.
- Assinaturas e certificados digitais: as funções hash garantem que um documento assinado não possa ser alterado sem ser detectado.
- Blockchains: cada transação e cada bloco são protegidos por hashing, garantindo a imutabilidade da cadeia.
Propriedades de uma função hash
Propriedades importantes de uma função hash são:
-
Mesma entrada, mesma saída
Se você inserir os mesmos dados, sempre obterá exatamente o mesmo hash. Exemplo: uma senha. O sistema guarda apenas o hash da sua senha. Quando você tenta fazer login novamente, o sistema verifica se o novo hash corresponde ao armazenado. Só assim o acesso é concedido. -
Não reversível
Um hash não pode ser revertido para recuperar a entrada original. Isso o torna particularmente adequado para uma blockchain. Cada bloco na blockchain contém um hash único (e às vezes vários) com as transações incluídas. Ele também contém o hash do bloco anterior. Se alguém tentar manipular uma transação, o hash muda imediatamente. Como esse hash também aparece no próximo bloco, toda a cadeia é alterada. Isso é detectado imediatamente pelos validadores ou mineradores. Um invasor teria que recalcular todos os blocos seguintes, o que é praticamente impossível. Isso torna a manipulação inviável. -
Sensível a pequenas mudanças
Se você alterar apenas uma letra ou até mesmo um único bit, o hash resultante será completamente diferente. Exemplo: "Mundo" tem um hash totalmente diferente de "Mundp", mesmo que as palavras sejam muito parecidas. -
Evitar colisões
Uma colisão significa que duas entradas diferentes produzem o mesmo hash. Isso é teoricamente possível, mas na prática, com funções hash seguras, é quase impossível. Exemplo: com SHA-256 seriam necessários bilhões de anos para gerar hashes suficientes até encontrar dois iguais por acaso. As variantes mais antigas como MD5 e SHA-1 são vulneráveis e, por isso, não são mais utilizadas.
Como funcionam as funções hash?
O processo realizado pelas funções hash é chamado de hashing. Uma função hash é o algoritmo que faz o cálculo, enquanto o hashing é o processo de aplicar essa função aos dados.
Processamento da entrada
Os dados (texto, arquivo, senha, etc.) são divididos em blocos de tamanho fixo.
Exemplo: “Olá” é dividido em blocos de, por exemplo, 512 bits. Como é mais curto, é adicionado um padding extra.
Transformações matemáticas
Cada bloco passa por operações como deslocamentos de bits, permutações e somas modulares.
Exemplo: “Olá” resulta, após o SHA-256, em:
185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969
Combinação (compressão ou sponge)
Os resultados são combinados em um estado interno.
- No SHA-2 através de uma função de compressão
- No SHA-3 através de uma construção sponge
Saída
Após o cálculo final, resta um valor hash.
Exemplo:
“Olá” → 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969
“Olá!” → 334d74c95ed3ceec833219cd94ef7a8320b9c9d98c14b622d0535fbe7bb3f3a4
O que é o efeito Avalanche?
O efeito avalanche garante que seja impossível deduzir relações entre hashes, pois até pequenas diferenças na entrada produzem um valor hash completamente diferente. Mesmo que as entradas sejam muito semelhantes, o resultado é uma sequência de números e letras totalmente diferente. Isso torna impossível deduzir dos hashes como eram os dados originais ou quão semelhantes são duas entradas.
Quais funções hash existem?
Ao longo dos anos, várias funções hash criptográficas foram desenvolvidas ou aprimoradas. Algumas das mais conhecidas são:
-
MD5
Desenvolvido nos anos 1990 como sucessor de algoritmos MD anteriores. Este algoritmo gera um hash de 128 bits e foi usado por muitos anos para verificação de arquivos e certificados digitais. Hoje, o MD5 é considerado inseguro, pois desde 2004 foram documentados casos em que duas entradas diferentes produziram o mesmo valor hash. Isso é chamado de colisão. Por isso, o MD5 hoje é usado apenas em aplicações simples, mas não mais em segurança. -
SHA-1
O SHA-1 foi por muito tempo o padrão para assinaturas digitais e certificados SSL. É um algoritmo que gera um hash de 160 bits. Em 2017, o Google e o CWI Amsterdã demonstraram uma colisão: eles criaram dois arquivos PDF diferentes com exatamente o mesmo hash SHA-1. Isso provou que era possível falsificar um hash na prática. Desde então, o SHA-1 é considerado comprometido e inseguro. Os principais navegadores e autoridades certificadoras não o suportam mais. -
SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512)
O sucessor do SHA-1 é o SHA-2. Esse algoritmo usa blocos de 512 ou 1024 bits e gera saídas de 224, 256, 384 ou 512 bits. Um sistema SHA-2 bastante conhecido é o SHA-256, usado para proteger a blockchain do Bitcoin. O SHA-512 é mais eficiente em sistemas de 64 bits. Até hoje, não se conhecem ataques bem-sucedidos contra o SHA-2, o que o torna uma das funções hash criptográficas mais usadas. -
SHA-3 (Keccak)
Desenvolvido em 2007 por Guido Bertoni, Joan Daemen, Michaël Peeters e Gilles Van Assche, o algoritmo Keccak foi adotado em 2015 pelo NIST como o novo padrão de hash sob o nome SHA-3. Foi introduzido como uma alternativa ao SHA-2, caso vulnerabilidades fossem encontradas nele no futuro. O SHA-3 ainda não é amplamente usado na prática, pois o SHA-2 continua seguro, amplamente suportado em hardware e profundamente integrado em protocolos como TLS e certificados SSL.
Funções hash em criptomoedas e blockchain
As funções hash desempenham um papel crucial nas blockchains. O hashing é usado para proteger transações, conectar blocos e constitui o núcleo das blockchains que validam transações através da mineração. As blockchains que utilizam o Proof of Work mecanismo de consenso usam o poder computacional dos computadores para resolver puzzles de hash.
Alguns exemplos de projetos populares:
- Bitcoin → SHA-256 (para mineração e hashing de blocos).
- Litecoin → scrypt (mais rápido e menos sensível a ASIC do que o SHA-256).
- Zcash → Equihash (intensivo em memória, projetado para uma mineração mais justa).
- Dogecoin → scrypt (mesmo algoritmo que o Litecoin, com merge-mining).
- Ripple (XRP Ledger) → SHA-512/256 (uma variante reduzida do SHA-512).
- Algorand → SHA-512/256 (para geração de chaves e assinaturas digitais).
Considerações finais
As funções hash criptográficas são um componente essencial no mundo digital. Elas oferecem uma maneira confiável de proteger dados, garantir a integridade e possibilitar sistemas complexos como as blockchains. Embora algoritmos mais antigos como MD5 e SHA-1 já não sejam seguros devido a vulnerabilidades comprovadas, variantes modernas como SHA-2 e SHA-3 continuam robustas e essenciais para as aplicações atuais.
A força das funções hash está na sua simplicidade e eficácia: funções unidirecionais que transformam pequenas diferenças na entrada em resultados completamente diferentes, sem que os dados originais possam ser recuperados. Isso as torna cruciais não apenas para a segurança de senhas e assinaturas digitais, mas também para o funcionamento das criptomoedas e da internet em geral.
As funções hash continuarão a desempenhar um papel fundamental no futuro, tanto em aplicações existentes quanto em novas inovações nos campos da blockchain, da segurança digital e da criptografia.