Pular para o conteúdo
buybitcoinsmart

Glossário / Endereços e chaves

Chave estendida

Outros nomes: xpub, xprv, Chave pública estendida, Chave privada estendida.

O que é uma chave estendida?
Uma chave estendida combina uma chave de bitcoin comum com um código de cadeia de 32 bytes, e é esse par que permite ao software derivar toda uma ramificação de chaves abaixo dela.

Especificação no BIP-32.

Uma xpub não é uma chave pública. É uma estrutura de 78 bytes: versão, profundidade, impressão digital da chave pai, índice da chave filha, o código de cadeia de 32 bytes e a própria chave, envolta em Base58Check para produzir uma string de 111 caracteres. Entregue uma a um contador e ele poderá ler cada endereço daquele ramo e cada satoshi que ele já recebeu, sem poder gastar nada.

Como funciona

Uma chave estendida existe porque uma chave isolada não consegue produzir chaves filhas. A derivação no BIP-32 calcula o hash do código de cadeia da chave pai junto com o material de chave e um índice, e o código de cadeia fornece a entropia extra que mantém as chaves irmãs sem relação entre si. Remova-o e não sobra nada de onde derivar.

A serialização tem tamanho fixo de 78 bytes em uma ordem estrita: 4 bytes de versão, 1 byte de profundidade, 4 bytes de impressão digital da chave pai, 4 bytes de índice da chave filha, 32 bytes de código de cadeia e 33 bytes de dados de chave. Uma chave privada estendida preenche seu segredo de 32 bytes com um zero à esquerda para que as duas formas ocupem a mesma largura. Os bytes de versão criam o prefixo legível: 0x0488B21E escreve xpub, 0x0488ADE4 escreve xprv, e os equivalentes da testnet escrevem tpub e tprv.

Duas funções de derivação operam sobre elas. A pública calcula chaves filhas não endurecidas apenas a partir de uma xpub, e é assim que um processador de pagamentos gera milhares de endereços de fatura em um servidor web que não guarda nada gastável. A privada calcula qualquer coisa, índices endurecidos incluídos, e precisa da xprv.

Você também vai encontrar ypub, zpub e vpub. Elas vêm do SLIP-0132, uma convenção que reutiliza o mesmo layout de 78 bytes com bytes de versão diferentes para sinalizar um tipo de script. O Bitcoin Core nunca a adotou, e os descritores de script de saída do BIP-380 substituíram a ideia adequadamente ao nomear o tipo de script por extenso, como em wpkh([1a2b3c4d/84h/0h/0h]xpub.../0/*).

Por que isso importa quando você compra bitcoin

Uma chave pública estendida é a coisa mais sensível que você já será solicitado a compartilhar sem que seja tecnicamente um segredo, e o pedido costuma parecer rotineiro.

Existem três razões legítimas para exportar uma. Configurar uma carteira de observação para que um celular possa exibir o saldo de uma carteira de hardware. Entregar a um processador de pagamentos auto-hospedado o ramo de onde ele deve tirar os endereços de fatura. Montar uma multiassinatura, em que cada coassinante contribui com uma xpub e todas elas são necessárias para reconstruir a carteira depois, mesmo que todas as frases de recuperação sobrevivam.

Todo o resto merece suspeita. Nenhuma corretora analisada neste site precisa de uma chave estendida para enviar um saque a você; ela precisa de um endereço. Um agente de suporte que pede uma xpub para verificar sua carteira está, na melhor das hipóteses, fazendo um trabalho de criação de perfil. Quem pede uma xprv está pedindo os bitcoins, e a resposta correta é encerrar a conversa.

A divulgação também é permanente de um modo que as pessoas subestimam. Uma xpub revela não só o saldo de hoje mas cada pagamento daquele ramo, passado e futuro, porque quem a tem pode continuar derivando novos endereços muito depois de você parar de falar com ele. Não há revogação. Desfazer isso significa gerar uma frase de recuperação nova e mover cada bitcoin, pagando uma taxa em cada entrada que você possui.

Uma armadilha pertence especificamente a este ponto. Se alguém tem sua chave pública estendida e também obtém uma única chave privada filha não endurecida, pode reconstruir a chave privada estendida pai e gastar todo o ramo. O BIP-32 afirma isso em suas próprias notas de segurança. É por isso que os níveis de conta são endurecidos, e por isso exportar uma chave individual de uma carteira moderna, algo que algumas ferramentas ainda oferecem, é uma conveniência perigosa e não uma conveniência prática.

O que um contador pode e não pode fazer com sua xpub

Ao entregar uma chave pública estendida, a fronteira é nítida. Suponha que você exporte a chave pública estendida da conta para m/84'/0'/0' de uma carteira de hardware e a envie por e-mail a quem prepara seus impostos.

Ele pode derivar cada endereço de recebimento e cada endereço de troco daquela conta, consultar cada um em qualquer explorador e reconstruir um histórico completo e datado dos valores que entram e saem. Ele pode somar seu saldo atual até o último satoshi e continuar observando-o mudar. Ele pode derivar endereços que você ainda não usou e ver o momento em que você os usar.

Ele não pode assinar nada. As chaves filhas endurecidas são inalcançáveis pelo lado público, então uma conta irmã como m/84'/0'/1' permanece invisível para ele, assim como a chave mestra. Ele não pode recuperar uma chave privada a partir de nada disso, a menos que você entregue separadamente uma das chaves individuais abaixo dela, que é o caso de falha descrito acima.

Chave estendida vs chave pública

Uma chave pública é um ponto na curva secp256k1, com 33 bytes quando comprimida, e verifica assinaturas. Uma chave pública estendida é esse mesmo ponto mais um código de cadeia de 32 bytes e quatro campos que descrevem sua posição, e pode produzir bilhões de outras chaves públicas. Publicar uma chave pública divulga a informação de uma saída. Publicar uma chave pública estendida divulga uma carteira.

Chave estendida vs Wallet Import Format

Uma xprv e uma string em Wallet Import Format codificam ambas o material de chave em Base58, e a semelhança termina aí. Uma string WIF contém uma chave privada com um byte de rede e um checksum, útil para mover uma única chave legada, e importá-la recupera exatamente os bitcoins presos àquela chave. Uma xprv contém uma chave mais o código de cadeia e a posição que permitem regenerar um ramo ilimitado. A assimetria é o que pega as pessoas: varrer uma WIF para uma carteira moderna é uma tarefa de manutenção rotineira, enquanto colar uma xprv em um software desconhecido entrega de uma vez tudo o que está abaixo dela.

Não confundir com

Perguntas frequentes

É seguro compartilhar minha xpub?

Ninguém pode gastar com ela, mas quem a tiver consegue ver tudo. Uma chave pública estendida expõe cada endereço daquele ramo e todo o seu histórico de pagamentos, de forma permanente e sem maneira de revogar o acesso, então compartilhe-a apenas com uma carteira de observação, um processador de pagamentos ou um coassinante de multiassinatura que você tenha escolhido.

Qual é a diferença entre xpub, ypub e zpub?

Apenas os bytes de versão, que indicam o tipo de script: xpub para caminhos legados, ypub para SegWit encapsulado sob o BIP-49, zpub para SegWit nativo sob o BIP-84. Eles vêm do SLIP-0132, não do BIP-32, e os descritores de script de saída são o substituto moderno.

Alguém pode descobrir minha chave privada a partir da minha xpub?

Não, não a partir da xpub sozinha. Pode, se também obtiver qualquer chave privada filha não endurecida abaixo dela, porque as duas juntas reconstroem a chave privada estendida pai. Por isso você nunca deve exportar chaves individuais de uma carteira HD.

Uma corretora alguma vez precisa da minha chave estendida?

Não. Um saque precisa de um único endereço, então uma plataforma ou um agente de suporte que pede uma xpub está coletando mais do que precisa, e qualquer coisa que peça uma xprv está tentando levar os bitcoins.

Leia a seguir

Termos relacionados

Mais em Endereços e chaves

Ler esta página em inglês