Glossário / Endereços e chaves
Código de cadeia mestre
Outros nomes: Master chain code.
- O que é o código de cadeia mestre?
- O código de cadeia mestre é a metade direita do hash de 64 bytes da sua seed, o complemento da chave privada mestre que fica na profundidade zero da árvore de uma carteira HD.
Especificação no BIP-32.
Toda chave que você vier a usar descende desse único par. Uma única passada de HMAC-SHA512 sobre a seed, tendo como chave a string ASCII Bitcoin seed, devolve 64 bytes: os primeiros 32 se tornam a chave privada mestre e os últimos 32 se tornam o código de cadeia mestre. Copiar a seed equivale a copiar tudo o que está abaixo dela, e é exatamente por isso que um backup é uma frase e não um armário de arquivos.
Como funciona
A geração do par mestre é executada exatamente uma vez, na criação da carteira. O BIP-32 aceita uma seed entre 128 e 512 bits, recomenda 256 e a passa pelo hash com chave descrito acima. O par resultante é o nó escrito como m no início de cada caminho de derivação, e nada fica acima dele.
Um teste de validade se esconde nessa etapa. Se os 32 bytes da esquerda saírem como zero, ou como um número maior ou igual à ordem da curva secp256k1, o BIP-32 declara a seed inválida e a implementação deve rejeitá-la. A probabilidade de ocorrer qualquer um dos dois casos é menor que 1 em 2 elevado a 127, então nenhuma carteira já relatou um, mas a regra é o que torna toda seed aceita inequivocamente utilizável.
Serializada, a raiz se identifica sozinha. As chaves estendidas privadas da mainnet carregam os bytes de versão 0x0488ADE4 e aparecem como xprv; as públicas carregam 0x0488B21E e aparecem como xpub. Na raiz, o byte de profundidade é 0x00 e tanto a impressão digital da chave pai quanto o número da chave filha são quatro bytes zero, porque não há chave pai alguma para apontar.
O número que você de fato manuseia é a impressão digital, não os bytes brutos. Calcular o hash da chave pública mestre com SHA-256 e depois com RIPEMD-160 e guardar os quatro primeiros bytes produz uma string hexadecimal de oito caracteres que identifica uma carteira sem revelar nada derivável dela.
Onde você vê isso
O software de consumo esconde o par mestre por completo e mostra a impressão digital em seu lugar. A Sparrow a imprime ao lado de cada keystore, o Bitcoin Core abre com ela, entre colchetes, cada linha da saída de listdescriptors, e uma Coldcard a exibe na tela inicial para que você confirme qual seed o dispositivo guarda no momento. Quando um PSBT chega, um dispositivo de assinatura compara a impressão digital do campo de origem da chave com a sua antes de decidir se o pedido é sequer dirigido a ele.
É na multiassinatura que a identidade da raiz deixa de ser curiosidade. Uma carteira 2 de 3 não é recuperável apenas com três frases de recuperação, porque reconstruí-la exige conhecer também a impressão digital e o caminho de cada cosignatário. É por isso que toda ferramenta séria de multiassinatura orienta guardar o descritor da carteira junto das palavras, e por isso perder o descritor pode deixar bitcoins inacessíveis que nenhuma frase isolada consegue alcançar.
O único momento em que você toca diretamente a chave privada mestre é uma importação. Colar uma xprv em um programa entrega a árvore inteira: cada propósito, cada conta, cada endereço futuro, sem forma de limitar a concessão a um único ramo. Não existe versão parcial de uma raiz, e é por isso que as carteiras de hardware se recusam a exportá-la de forma alguma.
Código de cadeia mestre vs frase de recuperação
A frase vem primeiro e o par mestre vem depois, e eles pertencem a padrões diferentes. O BIP-39 transforma 12 ou 24 palavras em uma seed de 512 bits executando PBKDF2 por 2.048 rodadas; o BIP-32 então transforma essa seed na chave privada mestre e no código de cadeia mestre. As camadas permanecem independentes o bastante para que acrescentar uma frase secreta mude a seed e, portanto, mude o par mestre e todos os endereços abaixo dele, enquanto as palavras do seu cartão permanecem exatamente iguais. A Electrum demonstra isso pelo outro lado: as frases de recuperação dela não são BIP-39 de forma alguma, e ainda assim produzem uma raiz BIP-32 comum.