Bitcoinheiros: do Hash à wallet BIP39#
Git Bitcoinheiros#
Protocolo Bitpoema de Bitversos Entropiados :black_nib:#
O protocolo se resume a ideia de que um hash SHA-256 oferece 256 bits de entropia. Uma seed de Bitcoin de 24 palavras necessita 256 bits de entropia. Portanto, um hash SHA-256 é suficiente para gerar uma seed segura de Bitcoin se o input utilizado para derivar os 256 bits de entropia tiver qualidade, ser realmente aleatório, original e extenso o suficiente. Vamos utilizar um poema para aproveitar a licença artística que este meio nos traz, proporcionando maior aleatoriedade à escrita. É recomendável assistir o vídeo sobre o protocolo antes de ler este repositório e gerar a sua seed seguindo os passos descritos abaixo.
:warning: Considerações de segurança ao utilizar um poema como fonte de entropia#
Poema desconhecido: Se o poema é conhecido ou facilmente adivinhável, a segurança pode ser comprometida. Certifique-se de escolher um poema único e desconhecido para garantir segurança. Para um poema, a entropia não é um cálculo direto de bits por caractere devido à estrutura do texto e ao uso comum de palavras. Para garantir segurança extra e minimizar a previsibilidade, é recomendado que o poema tenha pelo menos 150 caracteres (aproximadamente três linhas de texto de um poema típico), com boa variação de palavras e estrutura, para assegurar uma quantidade mais alta de entropia. Libere o poeta modernista mais absurdo que habita dentro de você - Vale tudo, as regras gramaticais não importam!
Preservação: Para recuperar a seed, você precisa conhecer o poema exato e calcular novamente o hash SHA-256 dele. Isso significa que você deve preservar o poema original de forma segura, offline. Além disso, o poema deve ser reproduzido com exatidão (mesmos espaços, maiúsculas, pontuação, quebras de linha, acentuação, etc.) para gerar o mesmo hash. Anote muito bem o seu poema.
Backup seguro: É essencial armazenar o poema (de onde se deriva a seed) de forma segura. Se o seu poema for comprometido, é possível que quem teve acesso ao mesmo tenha também acesso indevido ao seu bitcoin. Mantenha o mesmo sempre em formato físico e isolado, fora da internet. Também é importante ter cuidado com os “olhos de outras máquinas” em seu ambiente ao expor o mesmo para recuperação na máquina offline.
Use uma máquina dedicada offline: Escolha um computador que possa ser desconectado da internet durante todo o processo, de preferência um que possa ser dedicado exclusivamente para esse tipo de operação offline airgap (que nunca se conectará à internet). Utilize uma distribuição Linux que seja conhecida por sua segurança, como Tails (tails.net) ou Qubes OS (mais complexa e com suporte limitado - para usuários avançados). Vamos usar o Tails para o nosso protocolo, pois até mesmo usuários de Qubes OS podem rodar Tails com um pendrive ou leitor de DVD.
:seedling: Geração da Seed no Tails#
Desconecte da internet: Certifique-se de que a máquina esteja completamente desconectada da internet, fisicamente
Inicialize a máquina: Inicie a sua máquina com o sistema operacional Tails.
Configure para Português do Brasil e acesse o menu avançado clicando no + no canto inferior esquerdo para marcar oModo Offline (sem conexão)Abra o Terminal: Aperte o botão
"Windows"no seu teclado, digiteTerminale abra uma janela do terminal no TailsCrie um arquivo de texto no editor de texto GNU nano contendo o poema:
nano poema.txtEscreva o seu poema no editor de texto. É muito importante que você já a tenha escrito em papel anteriormente e só esteja passando a mesma para o computador na hora da geração da seed - e jamais mantenha uma cópia digital do poema.
O seu poema deve ser tratado como uma seed mnemônica. Muita atenção ao escrever, verifique bem cada caractere sendo inserido, incluindo espaços. Qualquer caractere adicional ou errado irá alterar completamente o hash calculado e a seed final derivada.
Após escrever, aperte
CTRL+SeCTRL+Xpara salvar e sair do nanoCalcule o hash SHA-256 do poema salvo:
sha256sum poema.txtO comando retornará uma combinação HEX de 64 caracteres como a do seguinte exemplo:
d5f2c35d18c6c317c2670de9be9ef552ebd65beac791bdac0820b45ab291ac4b poema.txtAnote o string hexadecimal único do seu poema, esses 64 caracteres serão a entropia da sua seed de Bitcoin.
Para estar seguro de que fez tudo direito, crie um arquivo
poema2.txt, digite novamente seu poema e calcule o hash sha256 seguindo os passos acima.
Se o cálculo sha256sum retornar o mesmo string, você terá certeza de que digitou tudo corretamente para seguir para o próximo passo.Para gerar a seed mnemônica BIP39 a partir da entropia do string hexadecimal de 256 bits, vamos usar a implementação mnemonic para python3.
Essa implementação desenvolvida pela SatoshiLabs (Trezor) já vem com o Tails e é de alta reputaçãoPrecisaremos escrever um pequeno script python para gerar a seed BIP39.
Você deve substituir o hash de exemplo na variável
bitpoema = "hash SHA256"pelo seu hash!Para isso, você deve criar um novo arquivo:
nano seed.pyE escrever o script abaixo, sem os comentários (#):
from mnemonic import Mnemonic # hash SHA-256 do seu poema (substitua pelo seu hash específico) bitpoema = "d5f2c35d18c6c317c2670de9be9ef552ebd65beac791bdac0820b45ab291ac4b" # Instancie o objeto Mnemonic para o idioma desejado (em inglês neste caso) mnemo = Mnemonic("english") # Gerar a seed BIP39 a partir da entropia hexadecimal seed = mnemo.to_mnemonic(bytes.fromhex(bitpoema)) print("Sua seed BIP39 poética é:", seed)Aperte
CTRL+Spara salvar +CTRL+Xpara sairExecute o script:
python3 seed.pyO script deve imprimir uma seed BIP39 gerada a partir da entropia derivada do poema. No exemplo:
$ Sua seed BIP39 poética é: sting noodle struggle cover history message another ticket trust visual run place runway combine prison vendor sad gate amused hamster private emotion raise laundry`
Parabéns, você acabou de gerar uma seed BIP39 com entropia derivada de um poema. Você pode armazenar essa seed BIP39 como backup (palavras de recuperação). Se não quiser armazenar a seed gerada como backup e preferir guardar o poema, poderá repetir os passos acima para recuperar a sua seed sempre que precisar importar para uma carteira para utilizar, tendo apenas o poema original como base!
:snowflake: Usando a seed no Tails offline (fria)#
Para usar sua seed, você pode digitar na linha de comando:
electrum guiO comando inicializará a carteira Electrum incluída no pacote Tails para que você importe a seed BIP39 e utilize a mesma.
- Dê um nome para sua nova carteira. Aperte
Próximo - Selecione
Carteira padrão. ApertePróximo - Selecione
Eu já possuo uma semente. ApertePróximo - Copie e cole a sua semente gerada no espaço em branco. Aperte em
Opçõese marqueSemente BIP39Você pode adicionar uma passphrase (palavra adicional - opcional) apertando emEstenda esta semente com palavras personalizadas - IMPORTANTE: Certifique-se de ver “BIP39 (checksum: ok)” ao lado do botão Opções antes de seguir para o
Próximopasso - Selecione
native segwit (p2wpkh)com o caminho de derivação padrãom/84h/0h/0he apertePróximo - Não é necessário colocar uma senha porque você não irá armazenar sua carteira no sistema Tails, ela será usada apenas nesta sessão
- Pronto. Agora você terá uma visão da sua carteira e endereços. Chegou a hora de exportar a XPUB para uma carteira online de observação
:fire: Importando a XPUB na Electrum para Android online (quente)#
- Na sua Electrum, você irá na aba
Carteirae logo emInformações - Você verá informações da sua carteira e no centro da atenção, o campo
Chave mestra pública - Aperte o botão de código QR para exibir o código QR da chave pública estendida (XPUB) da sua carteira
- Abra a Electrum no celular online e aperte em
Abrir/Criar carteira - Ao final da página, aperte em
Criar carteira - Insira um nome para a sua carteira
- Selecione
Carteira padrão. ApertePróximo - Selecione
Usar uma chave-mestra. ApertePróximo - Aperte o botão de código QR para inicializar sua câmera e escanear o código QR da XPUB no PC offline
- Insira uma senha para garantir privacidade da sua carteira caso alguém tenha acesso ao seu celular
- Aperte o ícone da carteira no canto superior e em
Endereçospara exibir os endereços da sua carteira - Compare os endereços com os endereços na sua carteira Electrum offline para ver se todos batem
- Antes de compartilhar algum endereço para receber satoshinhos em sua carteira, faça novamente todo o processo na Tails até chegar na lista de endereços da carteira offline recuperada e repita a verificação de endereços com a sua carteira de observação online (passos 11 e 12)
- Agora você pode enviar alguns satoshis para um dos endereços na carteira confirmada para depois testar a recuperação novamente, dessa vez para assinar uma transação e enviar alguns satoshinhos de gorjeta para o Dov no consultorio.bitcoinheiros.com ;) Waka waka!
:tv: Vídeos sobre uso da chave no pendrive Tails offline + Bitcinto#
:neckbeard: Resumo dos comandos, inputs e outputs do vídeo de exemplo#
- Criar novo arquivo de texto
nano poema.txt- Digitar sua entropia forte única (diferente da do exemplo abaixo)
Bitcoin em Versos Entropiados
Nos becos quânticos de internautas cósmicos,
Pululam bits em dançarina espiral,
Criptografias meticulosas insondáveis,
Envolvem a relíquia digital, monumental.
Sibilam as cifras, silente ouro virtual,
Transações ocultas em fórmulas cabalísticas,
Mineradores de bits, heróis metafísicos,
Lapidam a liberdade no ciberespaço imortal.- Calcular o sha256 da sua fonte de entropia única
sha256sum poema.txt- Copiar o string HEX de resultado do cálculo (sem o nome do arquivo calculado)
d5f2c35d18c6c317c2670de9be9ef552ebd65beac791bdac0820b45ab291ac4b poema.txt- Criar novo arquivo de script python
nano seed.py- Digitar o código (sem os comentários #) e inserindo o seu HEX sha256 único (resultado do passo 4)
from mnemonic import Mnemonic
# hash SHA-256 do seu poema (substitua pelo seu hash específico)
bitpoema = "d5f2c35d18c6c317c2670de9be9ef552ebd65beac791bdac0820b45ab291ac4b"
# Instancie o objeto Mnemonic para o idioma desejado (em inglês neste caso)
mnemo = Mnemonic("english")
# Gerar a seed BIP39 a partir da entropia hexadecimal
seed = mnemo.to_mnemonic(bytes.fromhex(bitpoema))
print("Sua seed BIP39 poética é:", seed)- Executar o script python
python3 seed.py- Aparecerá sua seed BIP39 única (não a do exemplo abaixo) para importar em qualquer carteira compatível
$ Sua seed BIP39 poética é: sting noodle struggle cover history message another ticket trust visual run place runway combine prison vendor sad gate amused hamster private emotion raise laundry:scroll: Licença e contato#
Waka waka, bitcoinheiros!
Este repositório é livre para ser reproduzido, alterado, forkado e melhorado, só peço que cite a fonte original (este arquivo) e o vídeo onde explico o mesmo.
Dov Bitcoinheiro @bitdov / dov@bitcoinheiro.com no NOSTR (npub16s7exzaa4le983mjvnw7jfatum0jfxqtpfk2uqdel3c4q97uqznst6hyar)
Para doar: consultorio.bitcoinheiros.com



