PBKDF2 significa Password-Based Key Derivation Function 2. O procedimento transforma uma entrada de senha e um parâmetro adicional chamado salt em uma chave derivada. O resultado também depende do número de repetições, da função de cálculo e do comprimento solicitado. Entradas e configurações idênticas produzem o mesmo resultado. O BIP39 usa a variante específica PBKDF2-HMAC-SHA512; outros usos podem escolher parâmetros diferentes.
As palavras de recuperação formam a entrada chamada password. Salt é uma segunda entrada: o texto literal "mnemonic" seguido da passphrase, uma senha adicional opcional. Não se coloca entre eles um separador nem outra cópia das palavras. Sem passphrase, salt continua sendo "mnemonic", não um texto vazio. As duas entradas passam por NFKD, que uniformiza certas representações de caracteres, e pela codificação UTF-8. O BIP39 usa HMAC-SHA512, 2048 repetições e uma saída de 64 bytes, ou 512 bits. Essa saída é a seed; salt não é outro backup que você precisa criar. [1]
Internamente, o HMAC combina uma chave com uma mensagem. A mesma entrada de senha permanece como chave em cada rodada. O primeiro resultado intermediário usa salt e o número do bloco de saída; as rodadas seguintes processam o resultado intermediário anterior. Os resultados são combinados por XOR, uma operação entre os bits correspondentes. O HMAC-SHA512 retorna 64 bytes, portanto o BIP39 precisa de apenas um desses blocos. Aplicar somente SHA-512 ao texto 2048 vezes seria um cálculo diferente, com outro resultado. [2] [1]
Imagine recuperar os fundos em outra carteira. Para obter a mesma seed, ela precisa dos mesmos dados normalizados e das mesmas configurações. Aumentar as 2048 repetições prescritas não melhora a recuperação: isso se afasta do BIP39 e produz outro resultado. Traduzir as palavras para outra lista também não é uma alteração neutra. Recuperar exige correspondência, não uma adaptação própria do algoritmo. [1]
Repetir o cálculo torna cada tentativa mais cara, mas não cria nova aleatoriedade independente. Um atacante que conhece suas palavras e tem dados para reconhecer a carteira correta pode testar passphrases fracas offline, no próprio computador. Uma seed longa, de 512 bits, portanto não implica 512 bits de imprevisibilidade. O número 2048 também não é uma recomendação geral para sistemas novos; aqui ele faz parte de um padrão específico de recuperação. [2] [1]
O checksum do BIP39 ajuda a detectar palavras copiadas incorretamente. O PBKDF2 responde a outra pergunta: como calcular a seed a partir das entradas fornecidas? Esse cálculo não confirma que a passphrase corresponde à sua carteira original. Depois, a seed pode ser processada pelo BIP32, um método para derivar uma família inteira de chaves. Conferir o registro, convertê-lo em seed e criar as chaves são etapas relacionadas, mas não intercambiáveis. [1]
Um desenvolvedor pode comparar os resultados com vetores de teste públicos: entradas conhecidas e saídas esperadas. O BIP39 publica os dados aleatórios originais, as palavras e a seed completa para a passphrase de teste TREZOR. Uma implementação correta precisa reproduzir o resultado, incluindo as regras NFKD. Seu backup real é desnecessário para esse teste. Nunca use os exemplos públicos para guardar dinheiro: todos os conhecem. Passar no teste do cálculo também não comprova a segurança de toda a aplicação. [1]
Para ter uma visão mais completa, leia este verbete junto com BIP 39, BIP39 passphrase, Seed Generation, HD Wallet. Também há referências a este verbete em BIP39 passphrase.