Blockchain/Nível II · Mecânica/2.1 Criptografia/Lição 2
HASH160: SHA-256 e depois RIPEMD-160
Um duplo hash que encurta chaves, e a fraqueza que ele esconde
MateriaisUm explorador de blocos como blockstream.info ou blockchain.comUm conjunto de amostra de endereços BitcoinUm editor de texto ou planilha
Curiosidade
- Por que o Bitcoin usaria duas funções de hash diferentes em sequência?
- O que um hash de 160 bits oferece que um de 256 bits não oferece?
- Como um hash de 20 bytes pode ser ao mesmo tempo seguro e vulnerável?
Explorar
- A chave pública bruta no Bitcoin tem 33 bytes quando comprimida. Isso é muito longo para uso eficiente em transações. Para reduzi-la sem perder a integridade criptográfica, o Bitcoin aplica um processo de duas etapas: SHA-256 seguido por RIPEMD-160. Essa combinação é chamada de HASH160 e resulta em uma saída de 160 bits (20 bytes), compacta o suficiente para a codificação de endereços.
- O RIPEMD-160, desenvolvido em 1996 por Hans Dobbertin, Antoon Bosselaers e Bart Preneel, fornece uma saída mais curta que o SHA-256 e surgiu de um processo de design acadêmico aberto. Primeiro, o SHA-256 é aplicado à chave pública (ou, no caso do P2SH, ao script), e então o RIPEMD-160 é aplicado à saída gerada pelo SHA-256. Essa sequência oferece um equilíbrio entre segurança e eficiência, sendo utilizada nas estruturas de pagamento Pay-to-PubKey-Hash (P2PKH), Pay-to-Script-Hash (P2SH) e Pay-to-Witness-PubKey-Hash (P2WPKH).
- O uso de duas funções de hash distintas adiciona uma camada de defesa em profundidade. O aninhamento ajuda principalmente contra ataques de pré-imagem, já que encontrar uma chave que corresponda a um determinado hash significaria superar ambas as funções; ele não ajuda contra colisões, pois qualquer colisão no SHA-256 também é uma colisão no HASH160. No entanto, 160 bits de saída implicam uma resistência a colisões de aproximadamente 80 bits, o que é aceitável para saídas de endereços com chave única. Isso se torna problemático em scripts compartilhados nos quais várias partes contribuem, e por isso o SegWit e o Taproot utilizam valores de 32 bytes para scripts nativos.
- Uma afirmação comum é que o hashing da chave protege as moedas contra futuros computadores quânticos. A proteção é parcial: o gasto revela a chave pública, portanto cobre apenas saídas cujas chaves nunca foram exibidas; a reutilização de endereços elimina essa proteção; e as saídas Taproot colocam uma chave pública diretamente na cadeia. Um computador quântico capaz ameaçaria qualquer chave exposta.
- Para construir um endereço Bitcoin a partir de uma chave pública, aplica-se o HASH160; em seguida, o resultado é precedido por um identificador de rede (0x00 para a mainnet P2PKH), seguido por um checksum de 4 bytes derivado do SHA-256 duplo. Essa sequência de 25 bytes é então codificada em Base58 para criar um endereço legível por humanos. Essa codificação remove caracteres ambíguos e inclui um checksum para detectar erros de transcrição.
- Para ver isso na prática, abra um explorador de blocos e procure por uma transação P2PKH. Localize o campo scriptPubKey, que deve conter o hash de 20 bytes. Compare-o com a chave pública revelada quando o valor foi gasto. Você verá que a chave pública é mais longa, e o hash é a versão encurtada e codificada utilizada no endereço.
Fatos-chave
- HASH160 é a combinação de SHA-256 seguida por RIPEMD-160.
- A saída do HASH160 é de 160 bits (20 bytes).
- O RIPEMD-160 foi desenvolvido em 1996 por Hans Dobbertin, Antoon Bosselaers e Bart Preneel.
- O HASH160 é usado nos scripts de saída P2PKH, P2SH e P2WPKH.
- Saídas de hash de 160 bits oferecem resistência a colisões de aproximadamente 80 bits.
- O hashing esconde uma chave pública apenas até que ela seja utilizada; as saídas do Taproot exibem a chave diretamente.
Exercício nove, seis, três, um
9ReunirListe 9 endereços Bitcoin. Observe o formato (começando com 1, 3, bc1q, bc1p, etc.) e seu comprimento em caracteres.
6AgruparAgrupe os 9 endereços em 6 com base no tipo de codificação e no tipo de script (por exemplo, Base58, Bech32, SegWit, etc.).
3DestilarReduza os 6 grupos a 3 princípios que explicam por que o Bitcoin usa formatos de endereço diferentes.
1CristalizarEscreva uma frase explicando por que o Bitcoin usa duas funções de hash para criar um endereço.
Verificação de fatos
Datas, números e afirmações verificados com as fontes publicadas listadas abaixo.