Glossário / Endereços e chaves
Derivação BIP-86
- O que é a derivação BIP-86?
- A derivação BIP-86 coloca contas Taproot de chave única em m/86'/0'/0', depois ajusta cada chave derivada com seu próprio hash, para que o endereço comprometa um caminho de script impossível de gastar.
Especificação no BIP-86.
O BIP-86 abrange carteiras que guardam saídas Taproot para um único signatário, reutilizando o layout de conta do BIP-44 com 86' no nível de propósito. O BIP-49 e o BIP-84 também definem um segundo passo de endereço, mas apenas o BIP-86 altera a própria chave: o valor de 32 bytes no seu endereço é a chave que você derivou, ajustada por um hash dela mesma. Restaure suas palavras em um software que examina apenas o BIP-84 e seu saldo em bc1p aparece zerado.
Como funciona
A derivação BIP-86 acontece em dois passos, e apenas o primeiro é o conhecido percurso descendente por uma árvore de chaves.
O passo um é o caminho. O modelo é m / purpose' / coin_type' / account' / change / address_index, com 86' na posição de propósito e todos os níveis abaixo dele usados sem alteração, de modo que uma primeira conta bitcoin fica em m/86'/0'/0' e sua primeira chave de recebimento em m/86'/0'/0'/0/0.
O passo dois é onde o BIP-86 se separa de seus antecessores. O BIP-49 e o BIP-84 também definem um segundo passo, mas o deles envolve a chave derivada em um script, e a testemunha ainda revela a chave que o caminho produziu. O BIP-86 substitui a chave. Ele cita o BIP-341 sobre a regra que precisa satisfazer: "If the spending conditions do not require a script path, the output key should commit to an unspendable script path instead of having no script path." Assim, a chave derivada é lida como chave interna por meio de lift_x, e o que chega à cadeia é essa chave interna mais int(HashTapTweak(bytes(internal_key)))G. O resultado é um único push de 32 bytes atrás de OP_1, escrito 0x5120 seguido da chave ajustada, e gastá-lo exige apenas uma assinatura na testemunha com um scriptSig vazio.
Os vetores de teste publicados mostram a diferença. Em m/86'/0'/0'/0/0, a chave interna derivada da frase de recuperação é cc8a4bc64d897bddc5fbc2f670f7a8ba0b386779106cf1223c6fc5d7cd6fc115, enquanto a chave que a rede vê é a60869f0dbcf1dc659c9cecbaf8050135ea9e8cdc487053f1dc6880949dc684c, codificada como bc1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr. Uma implementação que pula o passo dois publica o primeiro valor em vez disso, então entrega a você endereços de aparência plausível que uma carteira em conformidade, ao restaurar a mesma frase de recuperação, nunca encontrará.
Ava Chow escreveu o documento, que foi atribuído em 22 de junho de 2021 e agora tem o status Deployed.
Onde você o encontra
A derivação BIP-86 está por trás da maioria das carteiras de assinatura única que entregam a você um endereço bc1p sem perguntar qual formato deseja. O Bitcoin Core tornou as carteiras de descritores o padrão na versão 23.0, e as notas de lançamento dessa versão dizem que uma carteira de descritores recém-criada contém um descritor tr() gerado automaticamente "which allows for creating single key Taproot receiving addresses".
O hardware se atualizou em ritmos muito diferentes. Nossa análise da KeepKey data o suporte a saídas Taproot desse dispositivo para o firmware 7.10.0, em fevereiro de 2025, então um signatário barato pode guardar uma frase cujo ramo 86' ele não mostrará a você, enquanto outro software que lê as mesmas palavras gasta essas criptomoedas normalmente.
A especificação é incomumente franca sobre por que um caminho fixo ainda é necessário. Sua seção de motivação reconhece que "there are now solutions which obviate the need for fixed derivation paths for specific script types", referindo-se aos descritores, e depois nomeia por que eles não resolvem a questão: muitas carteiras de software e signatários de hardware ainda fazem backup apenas de uma frase de recuperação, sem registro do caminho ou do tipo de script ao lado dela. Um descritor carrega essa informação; uma lista de palavras não, então o número 86 a carrega em seu lugar.
Derivação BIP-86 vs P2TR
A derivação BIP-86 é uma receita para preencher uma saída P2TR, não a definição de uma. P2TR é a versão de testemunha 1 e aceita qualquer chave de saída de 32 bytes, incluindo uma chave agregada de vários signatários sob MuSig2 e uma chave que compromete uma árvore de scripts genuinamente utilizáveis. O BIP-86 abrange o caso mais estreito desse espaço: um signatário, uma frase de recuperação e um caminho de script deliberadamente deixado impossível de gastar, para que nada se esconda atrás da chave. Todo endereço que o BIP-86 produz é uma saída P2TR, e a maior parte do que o P2TR pode expressar está inteiramente fora de seu escopo, então uma carteira que anuncia suporte a Taproot pode mesmo assim recusar um ramo de multiassinatura ou com timelock que use o mesmo formato de endereço.