Ir para conteúdo principal

O que é BIP39?

U
Escrito por UKey Wallet

A especificação BIP-39 descreve principalmente o algoritmo e o processo para gerar carteiras determinísticas baseadas em mnemônicos (um conjunto de palavras fáceis de lembrar).

A especificação consiste em duas partes principais:

  1. Como gerar o mnemônico.

  2. Como transformar o mnemônico gerado em uma semente binária.

A seguir, veremos como gerar carteiras determinísticas, descrevendo primeiro cada uma dessas duas partes.

Gerando um mnemônico

O processo algorítmico para gerar um mnemônico é o seguinte:

O processo é o seguinte:

  1. Crie uma sequência aleatória (entropia) de 128 a 256 bits (tamanho do passo 32 bits)

  2. Execute SHA256 na sequência aleatória gerada na etapa anterior para gerar um valor Hash e tome os primeiros N bits do valor Hash (comprimento de entropia / 32, por exemplo, 128 bits, então N = 4) como a soma de verificação da sequência aleatória.

  3. Adicione Checksum ao final da sequência aleatória gerada na primeira etapa, de modo que para o exemplo da figura a sequência aleatória com Checksum seja 128 + 4 = 132 bits.

  4. Separe a sequência aleatória da etapa anterior por segmentos de 11 bits (divisão), de modo que para uma sequência de comprimento de entropia de 128 bits, sejam gerados 12 segmentos (132/11 = 12).

  5. Neste ponto, mapeie cada valor contendo um segmento de 11 bits para um dicionário predefinido de 2.048 palavras.

  6. O último grupo de palavras gerado na ordem de corte é o mnemônico.

Geração de sementes a partir de mnemônicos

Após a geração do mnemônico podemos gerar a semente usando o algoritmo da função de geração de chave PBKDF2.

PBKDF2 requer dois parâmetros: um mnemônico e um salt. O objetivo do sal é dificultar o cracking, e no BIP-39 podemos introduzir a senha como um fator de segurança adicional para proteger as sementes.

“PBKDF2 faz parte da série Public-Key Cryptography Standards (PKCS) da RSA Laboratories, especificamente PKCS #5 v2.0, também publicado como RFC 2898 da Internet Engineering Task Force.”

Seguindo a geração mnemônica acima, o diagrama a seguir mostra o algoritmo para geração de sementes.

  • O primeiro parâmetro do PBKDF2 é o mnemônico gerado acima.

  • O segundo parâmetro do PBKDF2 é o salt, que geralmente consiste em uma string e uma concatenação opcional de strings de cifra fornecidas pelo usuário.

  • PBKDF2 usa o algoritmo HMAC-SHA512, que usa 2.048 hashes para produzir um valor de 512 bits como semente.

Gerando carteira HD a partir de sementes

A semente gerada acima será usada como Root Seed da carteira HD, e a Root Seed de qualquer carteira HD pode recriar toda a carteira HD.

Inserir a semente raiz no algoritmo HMAC-SHA512 produz um hash de 512 bits, dos quais os 256 bits da esquerda são usados ​​como chave privada mestra e os 256 bits da direita como código de cadeia mestre. Depois disso, a Chave Pública Mestra (264 bits) pode ser gerada pela Chave Privada Mestra m.

Como você pode ver na figura acima, a chave HD é gerada com os seguintes parâmetros.

  • Chave Privada Pai ou Chave Pública Pai; (ambas são chaves ECDSA descompactadas de 256 bits).

  • Código de cadeia pai de 256 bits.

  • Um número de índice inteiro de 32 bits.

Além disso, o processo acima é recursivo e a Chave Privada Filho no diagrama pode ser usada como a Chave Privada Pai no próximo nível.

Ao inserir (chave pública pai, código da cadeia pai, número de índice) no algoritmo HMAC-SHA512, podemos gerar suas subchaves e ajustar o número de índice para gerar várias subchaves no mesmo nível.

Sobre a chave estendida

Como esta função de derivação de chave é unidirecional, todas as subchaves não podem ser usadas para derivar suas chaves pai ou chaves irmãs no mesmo nível, apenas a chave pai e o código da cadeia pai (que são gerados a partir da chave e código da cadeia do nível pai do pai) podem ser usados ​​para derivar todas as subchaves e códigos de subcadeia e, subsequentemente, gerar as chaves subpúblicas e endereços correspondentes para assinar transações.

A combinação da chave e do código da corrente é chamada de chave estendida, e a chave estendida pode ser usada para gerar todas as ramificações a partir daí.

A chave fornecida na chave estendida pode ser uma chave privada ou uma chave pública, combinada com o código de cadeia denominado Chave Privada Estendida e Chave Pública Estendida, respectivamente, e anotada como (k, c) e (K, c), respectivamente, onde a chave pública K = ponto(k).

Podemos derivar a chave pública estendida da chave privada estendida e não vice-versa, portanto, para alguns cenários de transação (por exemplo, comércio eletrônico), uma nova chave pública e endereço podem ser gerados para cada transação para receber o pagamento, enquanto a chave privada estendida pode ser armazenada em uma carteira de papel ou em uma carteira de hardware para assinatura offline segura de transações. Como podemos ver, a segurança da chave pública estendida é relativamente alta, e o diagrama a seguir mostra o mecanismo de transmissão da chave pública pai estendida para derivar a chave privada filha e gerar a chave pública filha:

Isto respondeu à sua pergunta?