NeonCripto
Por dentro da carteira · 2 de 11

Da frase de recuperação à seed de 512 bits

A seed não é um hash simples da frase. O BIP-39 usa PBKDF2 com HMAC-SHA512: a frase normalizada é a “senha”, o texto “mnemonic” (mais a passphrase opcional) é o salt, e o processo repete 2048 vezes.

O resultado são 64 bytes (512 bits). Essa seed é o ponto de partida da hierarquia de chaves, mas não é a entropia original, nem uma chave privada, nem um endereço.

Laboratório educativo. Todo o cálculo roda no seu navegador, nada é enviado nem salvo. Nunca digite aqui sua frase de recuperação, chave privada ou passphrase reais: os exemplos usam apenas vetores de teste públicos.

Exemplo educativo

A frase abaixo é um vetor de teste público do BIP-39. Qualquer pessoa pode derivar suas chaves: nunca a use para guardar fundos.

frase / entropiaseedchave privada (segredo)chave pública / endereço (público)

Use só texto de exemplo. Nunca digite uma passphrase real aqui.

Passo 6 de 6: Chave mestra BIP-32

1. Frase + passphrase opcional

Frase (vetor de teste)

abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about

Passphrase

(vazia)

2. Normalização NFKD

Acentos e caracteres compostos são decompostos para que o mesmo texto gere sempre os mesmos bytes, em qualquer teclado ou sistema.

Senha do PBKDF2 (frase normalizada)

abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about

3. Parâmetros do PBKDF2

Senha
a frase normalizada
Salt
“mnemonic”
Função pseudoaleatória
HMAC-SHA512
Iterações
2048
Saída
512 bits (64 bytes)

A passphrase entra no salt, depois de “mnemonic”. Ela nunca é colada na frase.

4. As rodadas do PBKDF2

Cada rodada reaplica o HMAC sobre o resultado da anterior; a seed é o XOR de todas as 2048 saídas. Estes são valores reais das duas primeiras:

U1 = HMAC-SHA512(senha, salt ‖ 00 00 00 01)

64 d8 27 9a 38 94 fe d8 d8 84 7f 5c 3c 9a 42 67 8d c8 46 25 3f cd a3 31 57 df 5c 14 8a b9 df 4a…

U2 = HMAC-SHA512(senha, U1)

de 89 a5 70 42 b9 5e 27 23 c3 d4 90 4d 43 2d 31 c0 b0 a7 79 de da d7 dc 42 2f 15 b6 4b 87 b5 0f…

… até U2048. Seed = U1 ⊕ U2 ⊕ … ⊕ U2048

5. Seed de 512 bits

Seed (64 bytes)

5e b0 0b bd dc f0 69 08 48 89 a8 ab 91 55 56 81 65 f5 c4 53 cc b8 5e 70 81 1a ae d6 f6 da 5f c1 9a 5a c4 0b 38 9c d3 70 d0 86 20 6d ec 8a a6 c4 3d ae a6 69 0f 20 ad 3d 8d 48 b2 d2 ce 9e 38 e4

A seed não é a entropia, nem a frase, nem uma chave privada, nem um endereço.

6. Chave mestra BIP-32

Impressão digital da chave mestra

73c5da0a

Chave pública estendida (xpub) de exemplo

xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8

A chave privada estendida (xprv) fica oculta por padrão: é segredo mesmo num exemplo, para criar o hábito certo.

Teste o que aprendeu

1. A seed é simplesmente o SHA-256 das palavras?
2. Onde entra a passphrase opcional?
3. A seed já é um endereço de carteira?
0 de 3 respondidas.

Experimente

  • Avance pelo pipeline e leia os parâmetros reais de cada etapa.
  • Compare U1 e U2: são as duas primeiras de 2048 rodadas do PBKDF2.
  • Digite uma passphrase de exemplo e veja a seed mudar por completo.
Detalhes técnicos
  • Senha: a frase em NFKD UTF-8. Salt: “mnemonic” + passphrase em NFKD. PRF: HMAC-SHA512. Iterações: 2048. Saída: 64 bytes.
  • U1 = HMAC(senha, salt ‖ INT₃₂(1)); Uᵢ = HMAC(senha, Uᵢ₋₁); seed = U1 ⊕ U2 ⊕ … ⊕ U2048.
  • A passphrase entra no salt, nunca é concatenada à frase.
  • As 2048 rodadas encarecem tentativas de força bruta sobre frases fracas, mas não substituem entropia alta.
Próxima lição →Passphrase

Termos desta lição

Contas feitas com bibliotecas auditadas (@scure/bip39, @scure/bip32, @noble/curves, @noble/hashes) e conferidas contra os vetores de teste oficiais dos BIP-32, BIP-39 e BIP-84. Conteúdo educativo, não é um gerador nem um serviço de recuperação de carteiras.