Visão geral
O SHA-256 (Algoritmo de Hash Seguro de 256 bits) é a função hash criptográfica que sustenta a mineração de prova de trabalho do Bitcoin, a identificação de transações e muitas outras operações do protocolo. Projetado pela NSA e publicado pelo NIST em 2001, o SHA-256 recebe uma entrada de qualquer tamanho e produz uma saída fixa de 256 bits (32 bytes) chamada digest ou hash. É uma função unidirecional: dado um hash, é computacionalmente inviável determinar a entrada original.
Propriedades do SHA-256
Propriedades do SHA-256:
Entrada: "Hello"
Saída: 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969
Entrada: "hello" (diferente maiúscula/minúscula)
Saída: 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
Propriedades chave:
┌─────────────────────────────────────────────────┐
│ 1. Determinístico A mesma entrada sempre = │
│ mesma saída │
│ 2. Rápido Eficiente de calcular │
│ 3. Efeito avalanche Pequena mudança de entrada = │
│ saída completamente diferente│
│ 4. Resistente a Não é possível reverter o │
│ pré-imagem hash para encontrar a entrada │
│ 5. Resistente a É inviável encontrar duas │
│ colisões entradas com o mesmo hash │
│ 6. Tamanho fixo Sempre 256 bits (32 bytes) │
└─────────────────────────────────────────────────┘
SHA-256 no Bitcoin
O Bitcoin usa SHA-256 em múltiplas operações críticas:
- Mineração — Os cabeçalhos de bloco são hasheados com SHA-256 duplo (SHA-256 aplicado duas vezes). Os mineradores buscam um nonce que produza um hash abaixo do alvo de dificuldade.
- IDs de transação — Cada transação é identificada pelo hash SHA-256 duplo de seus dados serializados.
- Árvores Merkle — As transações dentro de um bloco são organizadas em uma árvore Merkle usando SHA-256 duplo, produzindo uma única raiz Merkle armazenada no cabeçalho do bloco.
- Geração de endereços — O SHA-256 é usado como parte da operação HASH160 (SHA-256 seguido de RIPEMD-160) para derivar endereços a partir de chaves públicas.
SHA-256 Duplo
O Bitcoin usa SHA-256 duas vezes em sucessão (frequentemente escrito como SHA-256d ou HASH256) para mineração e IDs de transação. Esse hash duplo fornece proteção contra certos ataques teóricos, incluindo ataques de extensão de comprimento, onde um atacante poderia anexar dados a uma mensagem e calcular um hash válido sem conhecer a mensagem original.
SHA-256 Duplo:
Dados de Entrada
│
▼
┌────────┐ ┌────────┐
│SHA-256 │────>│SHA-256 │────> Hash Final
│ Passo 1│ │ Passo 2│ (usado para mineração,
└────────┘ └────────┘ TXIDs, etc.)
Mineração e SHA-256
A mineração do Bitcoin é essencialmente uma computação SHA-256 massiva e paralela. Os mineradores hasheiam cabeçalhos de bloco bilhões de vezes por segundo, incrementando o nonce e outros campos, buscando um hash que comece com zeros suficientes para satisfazer o alvo de dificuldade atual. A rede global do Bitcoin realiza coletivamente na ordem de centenas de exahashes (10^18 hashes) por segundo.
Equívoco comum
O SHA-256 às vezes é confundido com criptografia, mas hashing e criptografia são fundamentalmente diferentes. A criptografia é reversível com uma chave (você pode descriptografar o texto cifrado de volta ao texto simples). O SHA-256 é uma função unidirecional — não há chave e nenhuma maneira de "des-hashear" a saída de volta à entrada. O SHA-256 produz uma impressão digital dos dados, não uma mensagem secreta.