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.

Criando seed BIP39 usando Poema SHA-256 no Tails offline airgap

: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#

  1. Desconecte da internet: Certifique-se de que a máquina esteja completamente desconectada da internet, fisicamente

  2. 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 o Modo Offline (sem conexão)

  3. Abra o Terminal: Aperte o botão "Windows" no seu teclado, digite Terminal e abra uma janela do terminal no Tails

  4. Crie um arquivo de texto no editor de texto GNU nano contendo o poema:

    nano poema.txt  

    Escreva 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+S e CTRL+X para salvar e sair do nano

  5. Calcule o hash SHA-256 do poema salvo:

    sha256sum poema.txt

    O comando retornará uma combinação HEX de 64 caracteres como a do seguinte exemplo:

    d5f2c35d18c6c317c2670de9be9ef552ebd65beac791bdac0820b45ab291ac4b  poema.txt

    Anote 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.

  6. 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ção

    Precisaremos 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.py

    E 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+S para salvar + CTRL+X para sair

  7. Execute o script:

    python3 seed.py

    O 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 gui

O comando inicializará a carteira Electrum incluída no pacote Tails para que você importe a seed BIP39 e utilize a mesma.

  1. Dê um nome para sua nova carteira. Aperte Próximo
  2. Selecione Carteira padrão. Aperte Próximo
  3. Selecione Eu já possuo uma semente. Aperte Próximo
  4. Copie e cole a sua semente gerada no espaço em branco. Aperte em Opções e marque Semente BIP39 Você pode adicionar uma passphrase (palavra adicional - opcional) apertando em Estenda esta semente com palavras personalizadas
  5. IMPORTANTE: Certifique-se de ver “BIP39 (checksum: ok)” ao lado do botão Opções antes de seguir para o Próximo passo
  6. Selecione native segwit (p2wpkh) com o caminho de derivação padrão m/84h/0h/0h e aperte Próximo
  7. 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
  8. 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)#

  1. Na sua Electrum, você irá na aba Carteira e logo em Informações
  2. Você verá informações da sua carteira e no centro da atenção, o campo Chave mestra pública
  3. Aperte o botão de código QR para exibir o código QR da chave pública estendida (XPUB) da sua carteira
  4. Abra a Electrum no celular online e aperte em Abrir/Criar carteira
  5. Ao final da página, aperte em Criar carteira
  6. Insira um nome para a sua carteira
  7. Selecione Carteira padrão. Aperte Próximo
  8. Selecione Usar uma chave-mestra. Aperte Próximo
  9. Aperte o botão de código QR para inicializar sua câmera e escanear o código QR da XPUB no PC offline
  10. Insira uma senha para garantir privacidade da sua carteira caso alguém tenha acesso ao seu celular
  11. Aperte o ícone da carteira no canto superior e em Endereços para exibir os endereços da sua carteira
  12. Compare os endereços com os endereços na sua carteira Electrum offline para ver se todos batem
  13. 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)
  14. 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#

TAILS OFFLINE AIRGAP

ELECTRUM OFFLINE NO PENDRIVE E ONLINE NO CELULAR

CRIE SUA CHAVE BIP39 NA MOEDA

:neckbeard: Resumo dos comandos, inputs e outputs do vídeo de exemplo#

  1. Criar novo arquivo de texto
nano poema.txt
  1. 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.
  1. Calcular o sha256 da sua fonte de entropia única
sha256sum poema.txt
  1. Copiar o string HEX de resultado do cálculo (sem o nome do arquivo calculado)
d5f2c35d18c6c317c2670de9be9ef552ebd65beac791bdac0820b45ab291ac4b  poema.txt
  1. Criar novo arquivo de script python
nano seed.py
  1. 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)
  1. Executar o script python
python3 seed.py
  1. 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