O Alicerce da Descentralização
A criptografia é o "cripto" em criptomoeda. Ela fornece as garantias matemáticas de segurança, propriedade e imutabilidade que permitem que redes descentralizadas funcionem sem uma autoridade central.
Neste guia, exploraremos os algoritmos criptográficos específicos usados por grandes blockchains como Bitcoin e Ethereum. Examinaremos por que certas escolhas foram feitas, como elas diferem da criptografia web padrão e como trabalham juntas para proteger bilhões de dólares em ativos.
1. Estratégias de Hashing: O Hash Duplo do Bitcoin e HASH160
O Bitcoin usa hashing para tudo, desde mineração até geração de endereços. No entanto, raramente usa um único hash SHA-256.
SHA-256 Duplo (SHA-256d)
A maioria das operações no Bitcoin, incluindo o Proof of Work e a construção de IDs de bloco, usa o SHA-256 duas vezes.
- Fórmula:
SHA256(SHA256(Dados)) - Raciocínio: Satoshi Nakamoto implementou isso principalmente como uma defesa contra ataques de extensão de comprimento, que eram uma preocupação teórica para a construção Merkle-Damgård na época.
HASH160: Eficiência de Espaço
Para gerar endereços, o Bitcoin usa o HASH160.
- Fórmula:
RIPEMD160(SHA256(ChavePública)) - Raciocínio: O RIPEMD-160 produz um hash de 20 bytes (160 bits), que é mais curto que o SHA-256 (32 bytes). Isso economiza espaço crítico no conjunto UTXO e na blockchain, mantendo um nível de segurança adequado para identificação de endereços.
2. Keccak-256 do Ethereum: O SHA-3 "Real"
O Ethereum escolheu o Keccak-256 como sua função de hash primária. Isso é frequentemente uma fonte de confusão porque o Keccak-256 é o vencedor do concurso NIST SHA-3, mas não é exatamente o mesmo que o padrão final FIPS 202 SHA-3-256.
Keccak-256 vs. NIST SHA-3-256
Durante o processo de padronização, o NIST fez pequenas alterações no preenchimento (padding) do Keccak.
- Keccak-256: Usa preenchimento
0x01. - NIST SHA-3-256: Usa preenchimento
0x06.
Como o Ethereum foi construído enquanto o Keccak ainda estava em processo de padronização, ele usa o Keccak-256 original. Isso significa que um gerador de hash SHA-3-256 padrão produzirá um resultado diferente de um gerador de hash Keccak-256. Para desenvolvedores Ethereum, usar a versão correta é vital para calcular assinaturas de função e raízes Merkle.
3. A Curva secp256k1 e Assinaturas ECDSA
Tanto o Bitcoin quanto o Ethereum usam o Algoritmo de Assinatura Digital de Curva Elíptica (ECDSA) para assinar transações, especificamente na curva secp256k1.
Por que secp256k1?
Enquanto a maioria dos padrões web (como TLS) usa curvas NIST (ex: P-256), a comunidade blockchain prefere a secp256k1.
- Curva Koblitz: É uma curva "Koblitz", que permite uma computação mais eficiente (multiplicação escalar) do que curvas não-Koblitz.
- Sem "Backdoors": Há preocupações de que as curvas NIST possam conter "backdoors" ocultos devido à maneira como seus parâmetros foram escolhidos. Os parâmetros da secp256k1 foram escolhidos de uma forma mais transparente e determinística.
Quando você assina uma transação, usa sua chave privada e o ECDSA para produzir uma assinatura $(r, s)$. A rede usa a curva secp256k1 e sua chave pública para verificar se a assinatura é válida.
4. Árvores Merkle e Raízes Merkle
Uma Árvore Merkle (ou árvore de hash) é uma estrutura usada para resumir e verificar com eficiência a integridade de grandes conjuntos de dados.
Como Funciona
- Folhas: Cada transação em um bloco é hashada.
- Nós: Os hashes são pareados e hashados juntos recursivamente.
- Raiz: O hash único final no topo é a Raiz Merkle (Merkle Root).
A Raiz Merkle no Cabeçalho do Bloco
A Raiz Merkle é incluída no cabeçalho do bloco. Se até mesmo um único bit em uma única transação for alterado, toda a Árvore Merkle muda, resultando em uma Raiz Merkle diferente. Isso permite que clientes de "Verificação de Pagamento Simplificada" (SPV) verifiquem se uma transação faz parte de um bloco sem baixar toda a blockchain.
Um calculador de árvore Merkle é essencial para validar cabeçalhos de bloco e provar a inclusão de transações.
5. Comparação: Algoritmos de Hash e Assinatura
| Protocolo | Hash Primário | Curva de Assinatura | Hash de Endereço |
|---|---|---|---|
| Bitcoin | SHA-256d | secp256k1 | HASH160 |
| Ethereum | Keccak-256 | secp256k1 | Keccak-256 (últimos 20 bytes) |
| Solana | SHA-256 | Ed25519 | Chave Pública Base58 |
| Polkadot | Blake2b | Ed25519/sr25519 | SS58 |
FAQ: Criptografia Blockchain
P: O Keccak-256 é mais seguro que o SHA-256?
R: Ambos são considerados criptograficamente seguros. O Keccak (construção Sponge) é naturalmente resistente a ataques de extensão de comprimento, enquanto o SHA-256 (Merkle-Damgård) requer o truque do "hashing duplo" para obter resistência semelhante.
P: Por que não usar Ed25519 para tudo?
R: O Ed25519 é mais rápido e seguro que o ECDSA/secp256k1. No entanto, quando o Bitcoin e o Ethereum foram criados, o Ed25519 era relativamente novo e não era tão amplamente testado ou suportado em hardware quanto o ECDSA. Chains mais novas como Solana e Cardano usam Ed25519.
P: O que é uma "Colisão"?
R: Uma colisão ocorre quando duas entradas diferentes produzem a mesma saída de hash. Para Keccak-256 ou SHA-256, encontrar uma colisão é computacionalmente impossível com a tecnologia atual.
P: Como um hash de transação é calculado?
R: Geralmente hashando os dados da transação serializados. No Bitcoin, é SHA256d(tx_data). No Ethereum, é Keccak256(rlp_encoded_tx).
Conclusão
A criptografia blockchain é um conjunto cuidadosamente selecionado de algoritmos projetados para alta segurança, eficiência e transparência. Da eficiência da secp256k1 à construção Sponge única do Keccak-256, essas primitivas são o que tornam a confiança descentralizada possível. Para qualquer desenvolvedor que trabalhe na área, entender esses fundamentos não é apenas um exercício acadêmico — é a chave para construir aplicações descentralizadas seguras e compatíveis.