Um BIP (Proposta de melhoria do bitcoin) é um documento de design pattern que fornece/descreve informações à comunidade Bitcoin sobre seus processos e/ou ambiente.
O BIP-39 descreve a implementação de códigos mnemônicos ou declarações mnemônicas para geração de carteiras determinísticas.
Esse padrão é constituído em duas partes, a primeira gera a sequencia mnemônica e a segunda convertendo-a em uma semente binária.
Essa semente pode então ser usada para gerar uma carteira determinística usando BIP-32 ou métodos similares.
O BIP-39 serve como um meio termo entre as infinitas possibilidades de chaves aleatórias e a nossa capacidade de memorização, tornando esses infinitos caracteres legíveis para humanos e altamente fáceis de usar em comparação com representações binárias ou hexadecimais.
Substituindo assim as sequencias intermináveis de caracteres, por palavras, ajudando os usuários a lembrar suas chaves secretas com mais facilidade.
Os mnemônicos são gerados codificando a entropia em múltiplos de 32 bits e tem entre 128-256 bits. Chamamos o comprimento da entropia inicial de ENT.
Quanto maior o comprimento do bits, maior o nível de segurança, mas o comprimento do mnemônico também aumenta.
Depois que o ENT é gerado, uma soma de verificação é criada ao se pegar os primeiros “ENT/32” bits de seu hash SHA256.
HASH = soma de verificação SHA256(ENT)
CS = primeiros ENT/32 bits de HASH
A soma de verificação é então anexada à entropia inicial, resultando em ENT + CS.
Os bits combinados são então divididos em grupos de 11 bits, cada grupo codificando um número de 0 a 2047, que serve como um índice do vocabulário.
Esses números são convertidos em palavras, e as palavras conectadas são usadas como mnemônicos.
Vocabulário
As palavras do vocabulário correspondem aos índices 0 ao 2047, são padronizadas para interoperabilidade.
Suas características são:
- A lista de palavras é formada para que seja possível identificar claramente a palavra apenas digitando as primeiras quatro letras.
- É evitado usar pares de palavras semelhantes para facilitar a lembrança da frase.
- A classificação da lista é feita para tornar a pesquisa de palavras por código mais eficiente.
A conversão para mnemônico em seed é feito com PBKDF2
O PBKDF 2 é uma função simples de derivação de chave senha que é resistente a ataques de dicionário e ataques de rainbow table. É baseado na derivação de múltiplas iterações HMAC com algum preenchimento.
A frase mnemônica serve como senha, e a string “memory” + senha é usada como salt para a função PBKDF2.
A senha pode ser inserida pelo usuário, caso contrário, uma string vazia será usada.
É definido 2048 interações e HMAC-SHA512 é usado como uma função pseudo-aleatória para derivar uma chave de comprimento de 512 bits. Essa semente é então usada para gerar a carteira HD descrita no BIP 32.
Seja o primeiro a comentar