Skip to main content

Hash | Bitcoin Glossary | Mapping Bitcoin

Hash

Criptografia

Also known as: digest

Saída de tamanho fixo gerada por uma função hash. No Bitcoin, hashes identificam blocos e transações, formam a prova de trabalho e ligam a blockchain.

Visão Geral

Um hash é a saída de uma função hash — uma cadeia de caracteres de tamanho fixo que representa de forma única uma entrada de qualquer tamanho. No Bitcoin, os hashes são usados de forma generalizada: para identificar transações, para vincular blocos entre si, para criar o puzzle de prova de trabalho, e para derivar endereços a partir de chaves públicas. O hash é frequentemente descrito como uma "impressão digital digital" porque mesmo uma pequena mudança na entrada produz uma saída completamente diferente.

Propriedades de um Bom Hash

Entrada: "Hello"        → SHA-256 → 185f8db32271fe25f561a6fc938b2e26...
Entrada: "Hello."       → SHA-256 → 2d8bd7d9bb5f85ba643f0110d50cb506...
Entrada: "hello"        → SHA-256 → 2cf24dba5fb0a30e26e83b2ac5b9e29e...

Observações-chave:
1. Comprimento fixo: Sempre 256 bits (64 caracteres hexadecimais) independente do tamanho da entrada
2. Determinístico: A mesma entrada sempre produz o mesmo hash
3. Efeito avalanche: Pequena mudança na entrada → hash completamente diferente
4. Sentido único: Não é possível recuperar a entrada a partir do hash
5. Resistente a colisões: Praticamente impossível encontrar duas entradas diferentes
   que produzam o mesmo hash

Como o Bitcoin Usa os Hashes

IDs de transação (TXIDs): Cada transação é identificada pelo hash SHA-256 duplo de seus dados serializados. Isso fornece um identificador compacto e único para cada transação.

Hashes de bloco: Cada bloco é identificado pelo hash SHA-256 duplo de seu cabeçalho de 80 bytes. Esse hash deve estar abaixo do alvo atual para que o bloco seja válido (prova de trabalho).

Vinculação da blockchain: Cada cabeçalho de bloco contém o hash do bloco anterior, criando uma cadeia inquebrável:

┌──────────┐    ┌──────────┐    ┌──────────┐
│ Bloco N  │    │ Bloco N+1│    │ Bloco N+2│
│          │    │          │    │          │
│ Prev: ◄──┼────│ Prev: ◄──┼────│ Prev:    │
│ Hash     │    │ Hash     │    │ Hash     │
│          │    │          │    │          │
│ Merkle   │    │ Merkle   │    │ Merkle   │
│ Root     │    │ Root     │    │ Root     │
└──────────┘    └──────────┘    └──────────┘

Árvores de Merkle: Os hashes de transação são emparelhados e hasheados repetidamente para formar uma árvore de Merkle, com o hash raiz incluído no cabeçalho do bloco.

Geração de endereços: Os endereços de Bitcoin são derivados hasheando as chaves públicas através de SHA-256 e RIPEMD-160.

Funções Hash Usadas no Bitcoin

  • SHA-256: Usado para mineração (SHA-256 duplo), IDs de transação e árvores de Merkle
  • RIPEMD-160: Usado em combinação com SHA-256 para gerar hashes de endereço mais curtos (HASH160)
  • SHA-512: Usado em HMAC-SHA512 para derivação de chaves de carteira HD
  • SipHash: Usado internamente para operações de tabela hash para prevenir ataques DoS

Conceitos Equivocados Comuns

  • Um hash não é criptografia. A criptografia é reversível com a chave correta; o hashing é um processo de sentido único.
  • Embora colisões (duas entradas com o mesmo hash) sejam teoricamente possíveis, encontrar uma para SHA-256 é computacionalmente inviável com a tecnologia atual.
  • O termo "hash" na mineração de Bitcoin refere-se a uma única tentativa de calcular o hash do cabeçalho de um bloco com um valor de nonce específico.