Pular para o conteúdo
buybitcoinsmart

Glossário / Referência do desenvolvedor

OP_HASH160

O que é OP_HASH160?
OP_HASH160 aplica SHA-256 sobre o item do topo da pilha e depois RIPEMD-160 sobre esse resultado, deixando um resumo de 20 bytes, a mesma impressão digital presente em todo endereço que começa com 1 ou 3.

Um byte, 0xa9, que representa duas das funções de hash mais estudadas da criptografia. O emparelhamento reduz uma saída de 32 bytes para 20 e protege contra uma fraqueza em qualquer um dos dois algoritmos, ao custo de cerca de 80 bits de resistência a colisões em vez de 128. É a razão de um endereço de bitcoin ser curto o bastante para ser lido em voz alta por telefone.

Como funciona

OP_HASH160 retira um item de qualquer comprimento e coloca exatamente 20 bytes, e a mesma entrada sempre produz o mesmo resumo.

As duas funções vêm de linhagens de projeto sem relação entre si. O RIPEMD-160 foi publicado em 1996 por uma equipe acadêmica europeia que trabalhava de forma aberta; o SHA-256 saiu da NSA e foi padronizado pelo NIST em 2001. Encadeá-las foi uma escolha conservadora. Uma ruptura estrutural em uma delas ainda deixaria a outra entre um atacante e uma falsificação útil, e em três décadas nenhuma das duas foi quebrada de um modo que ameace essa construção.

A redução de tamanho não é cosmética. Doze bytes economizados em cada saída importavam quando o objetivo era manter pequeno um registro global e permanente, e é por isso que o script de bloqueio clássico tem 25 bytes em vez de 37.

Vinte bytes têm, sim, um teto. Encontrar duas entradas que compartilhem um resumo de 160 bits exige da ordem de 2 elevado a 80 operações em vez de 2 elevado a 128, o que é confortável quando só você escolhe a chave cujo hash é calculado e bem menos confortável quando uma contraparte ajuda a escolher o script que está sendo fixado. Esse raciocínio é exatamente a razão pela qual a segregated witness transferiu os compromissos de script para um único SHA-256 de 32 bytes no P2WSH, mantendo a forma mais curta para saídas de chave única.

Onde você o vê

OP_HASH160 vive em dois modelos de script, e sua saída vive dentro de quase todo endereço que você já copiou.

As saídas legadas o executam sobre uma chave pública. As saídas pay-to-script-hash o executam sobre um script de resgate. Nos dois casos, o endereço que você vê é aquele resumo de 20 bytes com um byte de versão na frente, 0x00 para os endereços que começam com 1 e 0x05 para os que começam com 3, envolto em uma soma de verificação Base58Check. As saídas segwit nativas de chave única carregam os mesmos 20 bytes sem nenhum opcode presente, porque as regras desse tipo de saída estão incorporadas no validador em vez de escritas como script.

O Taproot quebrou o hábito. Uma saída bc1p fixa uma chave pública de 32 bytes sem nenhuma etapa de hash no meio, então um endereço Taproot não contém nenhum hash160 em lugar algum.

É também a razão prática de funcionar a verificação de um endereço na tela de uma carteira de hardware. Dois endereços que diferem em qualquer ponto produzem dois resumos sem relação entre si, então um endereço substituído não pode parecer quase certo; comparar os primeiros e os últimos caracteres no dispositivo com o que seu computador mostra basta para detectar malware de área de transferência.

OP_HASH160 vs SHA-256

O SHA-256 é uma função de hash; o OP_HASH160 é uma instrução que por acaso a chama uma vez. A função aparece em todo o bitcoin sem nenhum script envolvido: a prova de trabalho calcula com ela o hash de um cabeçalho de bloco duas vezes, os identificadores de transação são uma aplicação dupla dela, e as árvores de Merkle são construídas com ela. O opcode existe apenas dentro do Bitcoin Script, é executado apenas enquanto uma saída está sendo gasta, e sempre produz 20 bytes em vez de 32. A composição que ele realiza, RIPEMD-160 de SHA-256, é comum o bastante para ter nome próprio no código das carteiras, hash160, que vale a pena reconhecer ao ler a lista de funções de uma biblioteca.

Não confundir com

Perguntas frequentes

Por que o bitcoin calcula o hash duas vezes com dois algoritmos diferentes?

Dois motivos. O segundo hash reduz o resumo de 32 bytes para 20, o que encurta cada endereço e cada script de saída, e usar dois projetos sem relação entre si significa que uma ruptura em um único algoritmo não bastaria para forjar uma correspondência.

Um hash de 20 bytes ainda é seguro?

Para um endereço comum de chave única, sim. O caso mais fraco é um script em que outra pessoa escolhe parte do conteúdo cujo hash é calculado, e é por isso que a segregated witness fixa os scripts com um SHA-256 completo de 32 bytes.

Leia a seguir

Termos relacionados

Mais em Referência do desenvolvedor

Ler esta página em inglês