Visão Geral
Uma função hash é um dos blocos de construção mais fundamentais do modelo de segurança do Bitcoin. Ela transforma quaisquer dados de entrada em uma saída de tamanho fixo (chamada de hash ou digest) de uma forma que é rápida de calcular, determinística e praticamente impossível de reverter. O Bitcoin depende de funções hash criptográficas em todo o seu design — da mineração e vinculação de blocos à geração de endereços e árvores de Merkle.
Propriedades Requeridas
Uma função hash criptográfica deve satisfazer várias propriedades para ser adequada ao uso no Bitcoin:
┌────────────────────────────────────────────────────────────┐
│ │
│ 1. DETERMINÍSTICA │
│ Mesma entrada → sempre mesma saída │
│ │
│ 2. COMPUTAÇÃO RÁPIDA │
│ O hash pode ser calculado rapidamente para qualquer │
│ entrada │
│ │
│ 3. RESISTÊNCIA A PRÉ-IMAGEM (sentido único) │
│ Dado hash H, não é possível encontrar entrada M tal │
│ que hash(M)=H │
│ │
│ 4. RESISTÊNCIA À SEGUNDA PRÉ-IMAGEM │
│ Dada entrada M1, não é possível encontrar M2≠M1 com │
│ o mesmo hash │
│ │
│ 5. RESISTÊNCIA A COLISÕES │
│ Não é possível encontrar nenhum M1≠M2 onde │
│ hash(M1) = hash(M2) │
│ │
│ 6. EFEITO AVALANCHE │
│ Pequena mudança na entrada → saída drasticamente │
│ diferente │
│ │
└────────────────────────────────────────────────────────────┘
Funções Hash no Bitcoin
SHA-256 (Algoritmo de Hash Seguro de 256 bits):
- Saída: 256 bits (32 bytes)
- Usado para: Mineração (SHA-256 duplo), IDs de transação, árvores de Merkle, hashes de bloco
- O Bitcoin usa SHA-256 duplo (aplicando SHA-256 duas vezes) em muitos contextos para segurança adicional
RIPEMD-160:
- Saída: 160 bits (20 bytes)
- Usado para: Geração de endereços via HASH160 = RIPEMD-160(SHA-256(dados))
- A saída mais curta produz endereços mais compactos
HMAC-SHA512:
- Usado para: Derivação de chaves de carteira HD (BIP32)
- Fornece tanto hashing quanto autenticação de mensagem
Exemplo: SHA-256 Duplo
Entrada: "bitcoin"
Passo 1: SHA-256("bitcoin")
→ 6b88c087247aa2f07ee1c5956b8e1a9f4c7f892a70e324f1bb3d161e05ca107b
Passo 2: SHA-256(resultado do passo 1)
→ 5765a933a24a2c2c3ba710586e0cff3d0dfeb53c42e58b7e8e5f9a073e42a327
Este padrão de hash duplo é usado para TXIDs e hashes de bloco.
Por Que SHA-256 Foi Escolhido
Satoshi Nakamoto escolheu SHA-256 por várias razões:
- Bem analisado pela comunidade criptográfica na época da criação do Bitcoin
- Parte da família SHA-2 projetada pela NSA, sem fraquezas práticas conhecidas
- Saída de 256 bits fornece um nível de segurança de 128 bits contra ataques de colisão
- Eficiente de implementar tanto em software quanto em hardware
Conceitos Equivocados Comuns
- Funções hash não são algoritmos de criptografia. Elas não usam chaves, e não há maneira de "descriptografar" um hash para recuperar a entrada original.
- "SHA-256 foi projetado pela NSA" não significa que tem uma backdoor. Ele foi extensivamente analisado por criptógrafos independentes em todo o mundo e continua sendo considerado seguro.
- Embora SHA-256 seja computacionalmente rápido, isso é uma característica para mineração. A dificuldade da mineração vem de encontrar uma saída de hash específica, não do custo de calcular um único hash.