Glossário / Carteiras e custódia
Derivação da semente
- O que é a derivação da semente?
- A derivação da semente é a função unidirecional que converte uma frase mnemônica mais uma frase secreta opcional na semente de 512 bits a partir da qual uma carteira realmente constrói as chaves.
Especificação no BIP-39.
A função é PBKDF2 com HMAC-SHA512, executada sobre as próprias palavras em vez da aleatoriedade por trás delas. O BIP-39 fixa a contagem de iterações em 2.048 e a saída em 64 bytes, com sua frase secreta anexada à palavra fixa "mnemonic" para formar o salt. Nada nessa etapa verifica se as palavras algum dia foram válidas, então uma frase digitada incorretamente ainda gera uma semente bem-formada e uma carteira vazia.
Como funciona
A derivação da semente recebe duas entradas e devolve uma saída, em uma única chamada sem estado e sem memória do que produziu as palavras. A frase mnemônica é a senha. O salt é o texto "mnemonic" com qualquer frase secreta colada no final, e uma string vazia o substitui quando nenhuma frase secreta foi definida. Ambos passam primeiro pela normalização Unicode NFKD, de modo que caracteres acentuados em uma frase em francês ou espanhol geram o mesmo hash independentemente de qual teclado os digitou.
O BIP-39 afirma que esta metade do padrão é "completely independent" da metade que gera uma frase, e o diz em tom de aprovação: não há restrições sobre a estrutura da frase, e os clientes podem escrever suas próprias listas de palavras ou até geradores de frases completos. A leitura prática é mais direta. Se você fornecer à função doze palavras sem sentido, ela devolve 64 bytes perfeitamente utilizáveis. O BIP-39 exige que o software calcule a soma de verificação fora desta etapa e "issue a warning if it is invalid", um aviso em vez de uma recusa, razão pela qual algumas ferramentas restauram uma frase que acabaram de lhe dizer que está quebrada.
Duas consequências decorrem de calcular o hash da frase em vez da entropia por trás dela. Traduzir uma frase palavra por palavra para outro idioma produz uma semente completamente diferente, porque os bytes de entrada mudaram embora a aleatoriedade subjacente não tenha mudado. E a direção nunca se inverte: uma semente BIP-32 arbitrária não pode ser reescrita como uma frase BIP-39, razão pela qual “exportar a semente” e “exportar as palavras” são solicitações diferentes.
Onde você vê isso
A derivação da semente vem à tona no momento em que dois programas discordam sobre qual função executar. O backup de múltiplas partes na Trezor Safe 3 e na Safe 5, ambas analisadas aqui, é SLIP-39 em vez de BIP-39: uma lista de 1.024 palavras lida 10 bits por vez, o que dá 20 palavras por parte para um segredo de 128 bits e 33 palavras para um de 256 bits. Essas partes nunca passam pela etapa PBKDF2 do BIP-39. O SLIP-39 foi publicado pelos próprios autores do BIP-39 como substituto, e culpa "the overly coupled design of BIP-0039 and its use of a one-way derivation function" pelo fato de as partes não poderem ser convertidas de volta; ir na outra direção funciona, mas força cada parte resultante a 59 palavras, qualquer que tenha sido a extensão com que você começou.
A análise da Coldcard neste site mostra o que a derivação não pode fazer por você. Uma migração de firmware em março de 2021 deixou a geração da semente puxando de um gerador de números pseudoaleatórios de software em vez do de hardware, e a Coinkite atualizou seu aviso em 1º de agosto de 2026. A derivação em si nunca falhou. Ela transformou um segredo fraco em uma semente de 64 bytes bem-formada, atrás de uma soma de verificação válida, e nenhuma carteira adiante tinha como perceber.
Para observar a função em execução sem arriscar nada, o BIP-39 publica vetores de teste que alinham entropia, mnemônica e semente resultante, com a frase secreta "TREZOR" usada para cada vetor.
Derivação da semente vs caminho de derivação
A derivação da semente acontece uma vez, antes de existir uma única chave; um caminho de derivação é consultado depois, toda vez que um endereço é necessário. Essa diferença decide o quão grave é uma restauração que parece vazia. Um caminho errado é uma configuração: mude o tipo de script, faça uma nova varredura, e o saldo aparece. Uma frase secreta errada muda a semente, o que muda toda a árvore abaixo dela, e nenhuma configuração em lugar algum traz a antiga de volta.