Muitos utilizadores de Bitcoin estão familiarizados com a sequência de 12 ou 24 palavras utilizada para recuperar uma carteira digital através da BIP39. Contudo, para compreender como essas palavras permitem recuperar as chaves e os endereços de uma carteira, é importante conhecer a BIP32 (Bitcoin Improvement Proposal 32).
Inspirado na aula técnica de Tiago Salem, intitulada “A Magia da Multiplicação de Chaves — BIP32”, este artigo explora como a matemática das curvas elípticas permite criar carteiras determinísticas hierárquicas (Hierarchical Deterministic Wallets ou HD Wallets), eliminando a necessidade de gerir milhares de chaves privadas independentes.
Uma Bitcoin Improvement Proposal (BIP) é um documento que descreve uma proposta de padrão, processo ou melhoria relacionada com o Bitcoin.
O desenvolvimento do Bitcoin privilegia uma análise cuidadosa e a discussão comunitária. As BIPs permitem documentar ideias técnicas, discutir as suas implicações e coordenar as respetivas implementações.
Proposta em 2012, a BIP32 estabeleceu um padrão para derivar uma hierarquia de chaves criptográficas a partir de uma única semente mestre, tornando a gestão e a recuperação de carteiras muito mais práticas.
O Bitcoin utiliza criptografia de curvas elípticas baseada na curva secp256k1 para gerar chaves públicas e privadas.
A chave pública é calculada a partir da chave privada através da multiplicação de pontos na curva elíptica:
[ P = kG ]
Em que:
Calcular (P) a partir de (k) é computacionalmente viável. Recuperar (k) a partir de (P), por outro lado, é considerado computacionalmente inviável com os métodos clássicos atuais, quando são utilizados parâmetros seguros. Este problema é conhecido como o problema do logaritmo discreto em curvas elípticas.
Os utilizadores de Bitcoin são incentivados a evitar a reutilização de endereços para melhorar a privacidade financeira.
Antes da popularização das carteiras determinísticas hierárquicas, os programas de carteira podiam gerar chaves privadas aleatórias e independentes para novos endereços. A gestão dessas chaves apresentava vários desafios:
A BIP32 resolveu estes problemas ao introduzir um padrão para derivar chaves relacionadas de forma hierárquica.
A BIP32 introduziu um sistema em que uma chave mestre e um código de cadeia (chain code) permitem derivar uma hierarquia de chaves filhas.
Em vez de gerar e guardar uma cópia de segurança independente para cada chave privada, uma carteira pode derivar muitas chaves relacionadas a partir de uma única semente mestre.
Esta estrutura pode ser representada como uma árvore:
O processo de derivação é determinístico: utilizando a mesma semente mestre e o mesmo caminho de derivação, uma carteira consegue reproduzir as mesmas chaves.
A propriedade matemática central resulta das operações de grupo das curvas elípticas.
Uma chave pública é calculada através da expressão:
[ P = kG ]
Suponhamos que uma nova chave privada é calculada adicionando um escalar (t) à chave privada original:
[ k’ = (k+t)\bmod n ]
A chave pública correspondente é:
[ P’ = k’G ]
Substituindo a expressão da chave privada:
[ P’ = (k+t)G ]
Aplicando as propriedades das operações de grupo das curvas elípticas:
[ P’ = kG+tG ]
Como (P=kG), obtemos:
[ \boxed{P’=P+tG} ]
Isto significa que a nova chave pública pode ser calculada utilizando a chave pública original e os dados correspondentes da derivação, sem revelar a chave privada original.
Uma distinção importante: a BIP32 não consiste simplesmente em multiplicar uma chave privada por um fator arbitrário. Utiliza uma função criptográfica baseada em HMAC-SHA512, juntamente com operações de curvas elípticas e um código de cadeia.
Para uma chave filha não endurecida (non-hardened), a relação matemática simplificada é:
[ k_i=(\operatorname{parse}{256}(I_L)+k{\text{par}})\bmod n ]
A chave pública correspondente é:
[ K_i=\operatorname{parse}{256}(I_L)G+K{\text{par}} ]
Neste contexto:
O código de cadeia e o índice de derivação determinam os dados utilizados no processo. É isto que torna a derivação BIP32 estruturada e reproduzível, em vez de uma simples multiplicação arbitrária.
Uma demonstração matemática pode ajudar a compreender a relação entre chaves privadas e públicas.
Utilizando uma biblioteca apropriada para secp256k1, a experiência pode seguir estes passos:
As duas chaves públicas devem coincidir, desde que os valores sejam válidos e as operações estejam corretamente implementadas.
Esta experiência demonstra a propriedade matemática que permite a derivação pública não endurecida. Contudo, não constitui, por si só, uma implementação completa da BIP32, porque a derivação real também exige HMAC-SHA512, códigos de cadeia, serialização e índices de derivação.
Para carteiras Bitcoin reais, utiliza implementações estabelecidas em vez de código experimental para gerar ou gerir chaves privadas.
xprv e xpubA BIP32 define chaves estendidas serializadas que combinam material criptográfico com um código de cadeia e metadados necessários à derivação.
xprv — Chave privada estendidaUma chave privada estendida contém uma chave privada e o respetivo código de cadeia, juntamente com metadados de derivação.
Permite derivar chaves privadas e públicas descendentes, respeitando as regras de derivação.
Quem obtiver uma chave privada estendida pode, em geral, derivar as chaves privadas da subárvore correspondente e movimentar os fundos associados.
xpub — Chave pública estendidaUma chave pública estendida contém uma chave pública e o respetivo código de cadeia, além dos metadados de derivação.
Permite derivar chaves públicas descendentes não endurecidas sem acesso às chaves privadas. Esta funcionalidade é útil para carteiras de consulta (watch-only), sistemas de pagamento e servidores online que precisam de gerar endereços de recebimento sem poder assinar transações.
No entanto, uma xpub não deve ser considerada informação pública inofensiva.
Aviso de privacidade e segurança:
xpub pode expor uma parte significativa da estrutura de endereços e da atividade financeira de uma carteira.xpub, por si só, normalmente não permite movimentar fundos.Por estes motivos, as chaves públicas estendidas devem ser partilhadas apenas quando necessário e com plena compreensão das implicações para a privacidade.
A BIP32 e a BIP39 resolvem problemas relacionados, mas diferentes.
A BIP32 define a derivação hierárquica determinística de chaves: como uma chave mestre pode produzir uma árvore estruturada de chaves filhas.
A BIP39 define um sistema mnemónico que converte entropia gerada por computador numa sequência de palavras e utiliza essa sequência, juntamente com uma eventual frase-passe, para derivar uma semente.
A relação entre ambas pode ser resumida da seguinte forma:
Uma frase de recuperação não é simplesmente uma versão legível de uma xprv. É uma entrada utilizada para reconstruir a semente a partir da qual a hierarquia de chaves da carteira pode ser derivada.
A BIP32 é um padrão fundamental para as carteiras determinísticas modernas de Bitcoin. Ao combinar derivação criptográfica com as propriedades matemáticas das curvas elípticas, torna a gestão de chaves mais escalável e permite separar a geração de endereços públicos da assinatura privada de transações.
Compreender a relação entre chaves privadas, chaves públicas, códigos de cadeia, xprv e xpub é essencial para quem estuda desenvolvimento Bitcoin, arquitetura de carteiras ou segurança criptográfica.
A principal lição é que a BIP32 não é apenas um truque de multiplicação de chaves. É um sistema de derivação cuidadosamente especificado que permite recuperar carteiras determinísticas e derivar chaves públicas não endurecidas, preservando o segredo das chaves privadas sob as condições de segurança previstas.