Blockchain/Nível II · Mecânica/2.1 Criptografia/Lição 1
Funções de hash e SHA-256
A impressão digital que serve de base para o livro-razão
MateriaisUm terminal com shasum ou openssl instaladoUma calculadora online de SHA-256Dois arquivos de texto que diferem por um único caractere
Curiosidade
- Por que mudar um único caractere em um arquivo altera metade do seu hash?
- Se entradas infinitas e possíveis compartilham um conjunto finito de saídas, por que ainda é inviável encontrar duas que colidam?
- O que tornou o SHA-256 seguro quando seu antecessor, o SHA-1, foi quebrado?
Explorar
- Uma função de hash criptográfica mapeia dados de comprimento arbitrário para um resumo de tamanho fixo. Ela é determinística: a mesma entrada sempre produz a saída idêntica. É rápida de calcular, mas inviável de reverter. Essa propriedade unidirecional define a resistência à pré-imagem. Se um atacante possuir apenas o hash, ele não poderá derivar a mensagem original. Essa irreversibilidade garante verificações de integridade e provas de identidade em sistemas distribuídos.
- O SHA-256 produz uma saída de 256 bits, independentemente do tamanho da entrada. Seja a entrada um único byte ou um arquivo de um gigabyte, o resumo permanece exatamente com 32 bytes. Esse comprimento fixo permite armazenamento e comparação consistentes. A função processa os dados em blocos de 512 bits por meio de 64 rodadas de operações lógicas. Seu design segue a construção Merkle–Damgård, encadeando uma função de compressão entre os blocos; é a mistura da função de compressão que embaralha a saída.
- O efeito avalanche é uma característica crucial: alterar um único bit na entrada faz com que aproximadamente metade dos bits no hash de saída também sejam alterados. Essa sensibilidade garante que até mesmo pequenas corrupções ou manipulações nos dados resultem em um digest completamente diferente. Isso torna as funções de hash ideais para verificar a integridade dos arquivos e detectar alterações. Qualquer modificação, por mais sutil que seja, quebra a correspondência entre os hashes esperados e os calculados.
- A resistência a colisões é a propriedade mais exigente. Encontrar duas entradas distintas que produzam o mesmo hash requer aproximadamente 2^128 operações devido ao limite do aniversário. Para o SHA-256, esse custo computacional torna os ataques por força bruta impraticáveis com o hardware atual. Em contraste, o SHA-1 sofreu um ataque prático de colisão demonstrado por pesquisadores do Google e do CWI em 2017, conhecido como SHAttered. Essa vulnerabilidade forçou a migração para longe do SHA-1 em aplicações críticas de segurança.
- O Bitcoin aplica o SHA-256 duas vezes, uma prática chamada double hashing. Os cabeçalhos dos blocos e os IDs das transações são hasheados com o SHA-256, e o resultado é novamente hasheado com o SHA-256. Satoshi nunca explicou a escolha; uma explicação comum é a proteção contra ataques de extensão de comprimento, uma propriedade conhecida dos hashes Merkle–Damgård como o SHA-256. Cada hash de bloco e ID de transação na cadeia é a saída dessa dupla aplicação.
- Abra qualquer terminal ou ferramenta online e calcule o hash SHA-256 da string ‘MSTR Cat’. Em seguida, calcule o hash de ‘MSTR cat’, alterando apenas a capitalização de uma letra. Compare as duas saídas hexadecimais de 64 caracteres. Elas serão completamente diferentes, sem nenhum padrão reconhecível. Essa divergência imediata ilustra o efeito avalanche em ação: uma única mudança de bit altera todo o resultado, confirmando que a função trata as entradas com extrema sensibilidade.
Fatos-chave
- SHA-256 produz uma saída fixa de 256 bits para qualquer tamanho de entrada.
- O efeito avalanche garante que uma alteração em um bit modifique cerca de metade dos bits do hash.
- Encontrar uma colisão SHA-256 por força bruta leva cerca de 2^128 operações.
- O SHA-1 foi quebrado por um ataque de colisão prático (SHAttered) em 2017.
- O Bitcoin usa duplo SHA-256 para os hashes de bloco e os IDs de transação.
- O SHA-256 processa dados em blocos de 512 bits por meio de 64 rodadas.
Exercício nove, seis, três, um
9ReunirListe 9 funções de hash ou algoritmos de checksum utilizados em computação. Indique seus tamanhos de saída e os principais casos de uso.
6AgruparAgrupe os 9 em 6 categorias com base na força de segurança: quebrado, obsoleto, padrão para uso geral, padrão para contextos de alta segurança, especializado para velocidade ou outro.
3DestilarReduza os 6 grupos para 3 razões principais pelas quais uma função de hash é selecionada para um aplicativo específico.
1CristalizarEscreva 1 frase explicando como resumos de comprimento fixo permitem a verificação de dados de tamanho variável.
Verificação de fatos
Datas, números e afirmações verificados com as fontes publicadas listadas abaixo.