Ir para o conteúdo principal

Padrão BIP-39 Explicado: Como Funcionam as Frases Mnemônicas de Seed

BIP-39 (Bitcoin Improvement Proposal 39) define o padrão para gerar frases mnemônicas — as conhecidas sequências de 12 ou 24 palavras — que codificam a entropia usada para derivar chaves de carteiras de criptomoedas. Publicado em 2013 por Marek Palatinus, Pavol Rusnak, Aaron Voisine e Sean Bowe, o BIP-39 tornou-se o padrão dominante para backup de carteiras em praticamente todas as principais criptomoedas.

Entender o BIP-39 em nível técnico dá confiança de que o backup da sua frase seed é confiável e ajuda você a avaliar as propriedades de segurança de diferentes implementações de carteira.

Visão geral do BIP-39

O BIP-39 especifica dois processos:

  1. Geração de mnemônico — Conversão de entropia aleatória em uma sequência de palavras legíveis por humanos.
  2. Derivação de seed — Conversão das palavras mnemônicas (mais uma passphrase opcional) em uma seed binária de 512 bits que pode ser usada com BIP-32 para geração hierárquica determinística de chaves.

Esses dois processos são deliberadamente separados. O mnemônico é a representação amigável para humanos; a seed é a entrada criptográfica para derivação de chaves.

Etapa 1: Geração de Entropia

O processo começa com um bloco de dados aleatórios criptograficamente seguros (entropia). O BIP-39 suporta cinco tamanhos de entropia:

Entropia (bits)Checksum (bits)Total (bits)Palavras
128413212
160516515
192619818
224723121
256826424

Na prática, quase todas as carteiras usam 128 bits (12 palavras) ou 256 bits (24 palavras). Os outros tamanhos são válidos pela especificação, mas raramente implementados.

A qualidade da fonte de entropia é fundamental. Se o gerador de números aleatórios for enviesado, previsível ou tiver entropia insuficiente, a frase seed resultante pode ser adivinhada por um atacante. Veja nosso guia de Entropia e Aleatoriedade para um tratamento detalhado desse tema.

Fontes de Entropia

  • Geradores de números aleatórios por hardware (HRNG) — Usados por hardware wallets como Ledger e Trezor. Eles amostram fenômenos físicos (ruído térmico, shot noise) para produzir aleatoriedade real.
  • CSPRNG do sistema operacional/dev/urandom no Linux/macOS, CryptGenRandom no Windows, ou crypto.getRandomValues() em navegadores. Esses são geradores pseudoaleatórios criptograficamente seguros (CSPRNGs) semeados por fontes de entropia de hardware.
  • Lançamentos de dados — Alguns usuários geram entropia manualmente usando dados de padrão cassino, mapeando resultados para índices binários ou de palavras. Isso elimina a confiança em qualquer RNG de software ou hardware.

Etapa 2: Cálculo do Checksum

Depois que a entropia é gerada, um checksum é anexado:

  1. Calcule o hash SHA-256 dos bytes de entropia.
  2. Pegue os primeiros ENT / 32 bits do hash (onde ENT é o comprimento da entropia em bits).
  3. Anexe esses bits de checksum à entropia.

Para entropia de 256 bits, isso produz 8 bits de checksum, totalizando 264 bits.

O checksum funciona como um mecanismo de detecção de erros: quando você insere sua frase seed em uma carteira para recuperação, a carteira recalcula o checksum. Se qualquer palavra estiver errada ou as palavras estiverem em ordem incorreta, o checksum falha e a carteira rejeita o mnemônico. Isso protege contra erros de transcrição, mas não os corrige — apenas detecta que algo está errado.

Implicações do Checksum

Como a última palavra do mnemônico codifica bits de checksum, nem todas as palavras são válidas como palavra final para uma sequência específica. Para um mnemônico de 24 palavras, a última palavra codifica 3 bits de entropia e 8 bits de checksum, então apenas 8 das 2.048 palavras possíveis são válidas para qualquer conjunto das primeiras 23 palavras. Por isso você não pode escolher livremente a última palavra.

Etapa 3: Mapeamento para Palavras

Os bits combinados de entropia + checksum são divididos em grupos de 11 bits. Cada grupo de 11 bits representa um índice de 0 a 2.047, correspondente a uma palavra na lista de palavras BIP-39.

264 bits / 11 bits per word = 24 words
132 bits / 11 bits per word = 12 words

A Lista de Palavras em Inglês

A lista de palavras em inglês do BIP-39 contém exatamente 2.048 palavras. A lista foi cuidadosamente selecionada com estas propriedades:

  • Prefixos únicos de quatro letras — Nenhuma palavra compartilha os mesmos quatro primeiros caracteres. Isso significa que abandon pode ser identificado sem ambiguidade como aban, o que é útil para backups metálicos compactos.
  • Vocabulário comum — As palavras são simples e amplamente conhecidas em inglês. Sem jargões, nomes próprios ou termos obscuros.
  • Evita palavras semelhantes — Palavras que podem ser facilmente confundidas (ex.: "woman" e "women") são excluídas sempre que possível.
  • Comprimento dos caracteres — Todas as palavras têm entre 3 e 8 caracteres.

Listas de Palavras em Outros Idiomas

O BIP-39 define listas de palavras em nove idiomas:

IdiomaStatusObservações
InglêsPadrão de referênciaMais amplamente suportado
JaponêsPadronizadoUsa katakana; os espaços são ideográficos (U+3000)
CoreanoPadronizado
EspanholPadronizado
Chinês (Simplificado)Padronizado
Chinês (Tradicional)Padronizado
FrancêsPadronizado
ItalianoPadronizado
TchecoPadronizado
PortuguêsPadronizado

Observação importante de compatibilidade: Um mnemônico gerado com uma lista de palavras não pode ser restaurado usando uma lista de outro idioma. Os índices de palavras são diferentes entre idiomas. Sempre registre qual idioma foi usado ao criar seu backup.

Etapa 4: Derivação de Seed (PBKDF2)

A frase mnemônica não é usada diretamente como chave criptográfica. Em vez disso, ela passa por key stretching com PBKDF2-HMAC-SHA512:

PBKDF2(
password = mnemonic sentence (words joined by spaces, normalized to UTF-8 NFKD),
salt = "mnemonic" + optional_passphrase,
iterations = 2048,
key_length = 512 bits
)

Isso produz uma seed de 512 bits que serve como entrada para a derivação hierárquica determinística de chaves do BIP-32.

Propriedades-Chave do PBKDF2 no BIP-39

Key stretching — As 2.048 iterações do PBKDF2 adicionam custo computacional a ataques de força bruta. Embora 2.048 iterações sejam modestas pelos padrões modernos de hash de senha, a segurança principal vem da entropia do próprio mnemônico (128 ou 256 bits), não do fator de key stretching.

Suporte a passphrase — O salt inclui uma passphrase opcional (a "25ª palavra"). Se nenhuma passphrase for fornecida, o salt é simplesmente a string "mnemonic". Se uma passphrase for fornecida, o salt se torna "mnemonic" + passphrase. Isso significa que cada passphrase diferente produz uma seed completamente diferente — e, portanto, um conjunto completamente diferente de chaves e endereços — a partir do mesmo mnemônico.

Sem validação de passphrase — Diferentemente do checksum do mnemônico, não há checksum para a passphrase. Qualquer passphrase é válida. Inserir a passphrase errada não gera erro; ela gera silenciosamente uma carteira diferente (vazia). Isso é um recurso para negabilidade plausível, mas um risco para usuários que esquecem a passphrase.

Normalização Unicode — O mnemônico e a passphrase são normalizados usando UTF-8 NFKD (Normalization Form Compatibility Decomposition) antes de serem passados ao PBKDF2. Isso garante derivação de seed consistente entre implementações, independentemente de como o sistema operacional representa internamente os caracteres.

Etapa 5: Da Seed para as Chaves (BIP-32)

A seed de 512 bits do PBKDF2 é usada como entrada para o BIP-32 (Hierarchical Deterministic Wallets):

  1. A seed passa por HMAC-SHA512 com a chave "Bitcoin seed".
  2. Os 256 bits à esquerda tornam-se a chave privada mestra.
  3. Os 256 bits à direita tornam-se o chain code mestre.
  4. Juntos, eles formam a chave privada estendida mestra (xprv).

A partir daqui, os caminhos de derivação BIP-44 definem uma estrutura em árvore padronizada para derivar chaves e endereços específicos por moeda.

Exemplo Prático

Vamos percorrer o BIP-39 com um exemplo simplificado usando 128 bits de entropia (mnemônico de 12 palavras):

1. Gerar 128 bits de entropia

00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000

(Isto é entropia toda em zero — apenas para ilustração. Nunca use na prática.)

2. Calcular hash SHA-256

SHA256(0x00000000000000000000000000000000) = 374708fff7719dd5979ec875d56cd2286f6d3cf7ec317a3b25632aab28ec37bb

3. Pegar os primeiros 4 bits do hash como checksum

Primeiro byte: 0x37 = 00110111. Primeiros 4 bits: 0011.

4. Anexar checksum à entropia

128 bits de zeros + 0011 = 132 bits no total.

5. Dividir em grupos de 11 bits

00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000011 → 3 → "about"

Resultado: abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about

Este é o conhecido vetor de teste para entropia toda em zero. A última palavra é "about" (não "abandon") por causa dos bits de checksum.

6. Derivar seed com PBKDF2

PBKDF2("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about", "mnemonic", 2048, 64)

Isso produz uma seed de 512 bits usada para derivação BIP-32.

Ferramenta SafeSeed

Use o Gerador de Frase Seed do SafeSeed para ver o BIP-39 em ação. Gere uma frase seed e veja a entropia, o checksum e o mapeamento de palavras em tempo real. Execute a ferramenta offline para máxima segurança.

Análise de Segurança do BIP-39

Segurança da Entropia

Para um mnemônico de 24 palavras (256 bits de entropia):

  • O espaço de busca é 2^256, aproximadamente 1,16 x 10^77 possibilidades.
  • Mesmo a uma taxa de um trilhão (10^12) de tentativas por segundo, a busca exaustiva levaria aproximadamente 3,67 x 10^57 anos — muito mais que a idade do universo (1,38 x 10^10 anos).

Para um mnemônico de 12 palavras (128 bits de entropia):

  • O espaço de busca é 2^128, aproximadamente 3,4 x 10^38 possibilidades.
  • A um trilhão de tentativas por segundo, a busca exaustiva levaria aproximadamente 10^19 anos.

Ambos são computacionalmente inviáveis com computação clássica.

Considerações sobre PBKDF2

O PBKDF2 com 2.048 iterações adiciona um fator constante a ataques de força bruta, mas não é a principal barreira de segurança. Alguns pesquisadores de segurança observam que 2.048 iterações é baixo em comparação com funções modernas de derivação de chave como Argon2 ou bcrypt. No entanto, como a entropia do mnemônico (128 ou 256 bits) é o fator dominante, isso é uma preocupação menor na prática.

Limitações do Checksum

O checksum detecta a maioria dos erros de transcrição, mas:

  • Ele detecta, mas não corrige erros.
  • Para mnemônicos de 12 palavras, existem apenas 4 bits de checksum, o que significa que aproximadamente 1 em 16 modificações aleatórias passará no checksum.
  • O checksum não protege contra reordenação de palavras que, por acaso, produza um checksum válido.

Riscos da Passphrase

O recurso de passphrase é poderoso, mas introduz riscos:

  • Se você esquecer a passphrase, os fundos são irrecuperáveis (não há mecanismo de "reset").
  • A passphrase não é validada — qualquer string produz uma carteira válida.
  • Um atacante que obtém o mnemônico, mas não a passphrase, precisa quebrar a passphrase por força bruta, o que fornece segurança adicional proporcional à entropia da passphrase.

Críticas ao BIP-39

O BIP-39 não está livre de críticos na comunidade de desenvolvimento do Bitcoin.

Sem Versionamento

O BIP-39 não inclui um byte de versão, o que significa que o processo de derivação fica fixo para sempre. Se uma melhoria futura exigir uma função de derivação de chave diferente ou parâmetros diferentes, isso não pode ser sinalizado dentro do formato mnemônico. Por isso algumas carteiras (notavelmente Electrum) usam seu próprio esquema mnemônico com versionamento.

Acoplamento Forte à Lista de Palavras

O mnemônico depende da lista de palavras exata. Se a lista de palavras fosse modificada algum dia, mnemônicos existentes não poderiam ser recuperados. As listas de palavras foram congeladas desde a padronização, mas essa inflexibilidade é vista por alguns como limitação de design.

Key Stretching Fraco

Como observado, 2.048 iterações de PBKDF2 são consideradas fracas pelos padrões modernos. Embora isso não afete materialmente a segurança de mnemônicos de alta entropia, oferece menos proteção para passphrases curtas ou escolhidas pelo usuário.

Alternativa do Electrum

A carteira Electrum usa seu próprio esquema mnemônico que inclui versionamento e não depende de uma lista fixa de palavras. Mnemônicos do Electrum não são compatíveis com BIP-39. Isso significa que uma frase seed do Electrum não pode ser restaurada em uma carteira BIP-39 e vice-versa. Sempre saiba qual padrão sua carteira usa.

Implementações do BIP-39

O BIP-39 é implementado em praticamente todas as principais carteiras:

CarteiraBIP-39Contagem de PalavrasObservações
LedgerYes24Hardware, secure element
TrezorYes12/24Also supports SLIP-39 (Shamir)
ColdcardYes24Bitcoin-only hardware
MetaMaskYes12Browser extension
Trust WalletYes12Mobile
ExodusYes12Desktop/mobile
ElectrumNo12Uses own scheme
BlueWalletYes12/24Bitcoin-focused mobile

Testes e Verificação

Vetores de Teste Oficiais

A especificação BIP-39 inclui vetores de teste — valores de entropia conhecidos com suas palavras mnemônicas e seeds derivadas correspondentes. Eles são usados para verificar se as implementações estão corretas.

Você pode verificar a implementação BIP-39 da sua carteira comparando com os vetores de teste oficiais publicados em:

Verificando Sua Frase Seed

Para verificar que você registrou corretamente sua frase seed:

  1. Gere a frase seed na sua hardware wallet.
  2. Anote-a com cuidado.
  3. Redefina a hardware wallet para as configurações de fábrica.
  4. Restaure usando a frase seed que você anotou.
  5. Verifique se os mesmos endereços são gerados.
  6. Confirme que a carteira consegue assinar transações.

Esse processo confirma tanto que seu backup está correto quanto que a implementação BIP-39 da carteira funciona como esperado.

FAQ

O que significa BIP-39?

BIP significa Bitcoin Improvement Proposal. BIP-39 é a proposta número 39, que define o padrão para criar representações mnemônicas (legíveis por humanos) de entropia criptográfica. Foi introduzida em 2013 e adotada por praticamente todas as principais carteiras de criptomoedas.

Todas as frases seed de 12 palavras são BIP-39?

Não. Algumas carteiras (notavelmente Electrum) usam seu próprio esquema mnemônico, distinto do BIP-39. Embora ambos gerem frases de 12 palavras a partir de listas de palavras, os processos de codificação, listas de palavras e derivação são diferentes. Uma frase BIP-39 não pode ser usada com o esquema do Electrum e vice-versa. Sempre consulte a documentação da sua carteira.

Posso criar minha própria frase seed BIP-39 escolhendo palavras?

Você não deve. Embora seja tecnicamente possível selecionar 23 palavras e calcular uma 24ª palavra válida (para satisfazer o checksum), a escolha humana de palavras não produz entropia suficiente. A segurança do BIP-39 depende de as palavras serem derivadas de dados aleatórios de alta qualidade, não de escolha humana. Deixe um CSPRNG gerar a entropia.

Por que a palavra "mnemonic" é usada como salt do PBKDF2?

A string "mnemonic" é um salt fixo especificado pelo BIP-39. Quando uma passphrase é usada, ela é anexada a esse salt (ex.: "mnemonicMyPassphrase"). Usar um salt fixo conhecido garante derivação de seed consistente em todas as implementações sem exigir nenhuma informação adicional além do mnemônico e da passphrase opcional.

O BIP-39 é usado apenas para Bitcoin?

Não. O BIP-39 é usado em praticamente todas as principais criptomoedas, incluindo Ethereum, Litecoin, Cardano, Solana e muitas outras. O processo de geração do mnemônico e derivação da seed é idêntico; apenas os caminhos de derivação de chave subsequentes (definidos pelos tipos de moeda do BIP-44) diferem entre as redes.

Qual é a diferença entre BIP-39 e SLIP-39?

O BIP-39 produz um único mnemônico que representa o segredo completo. O SLIP-39 (Satoshi Labs Improvement Proposal 39) implementa o compartilhamento de segredo de Shamir, dividindo o segredo em múltiplas partes (ex.: 3-de-5). Qualquer número mínimo de partes pode reconstruir o segredo, mas menos partes não revelam informação alguma. O SLIP-39 usa lista de palavras e codificação diferentes do BIP-39.

Quantos mnemônicos BIP-39 válidos existem?

Para mnemônicos de 24 palavras: 2^256 (aproximadamente 1,16 x 10^77). Para mnemônicos de 12 palavras: 2^128 (aproximadamente 3,4 x 10^38). Esses números representam o espaço de entropia. O checksum restringe as combinações de palavras, mas não reduz a entropia — significa apenas que nem toda sequência aleatória de 24 palavras BIP-39 forma um mnemônico válido.

Guias Relacionados