Learning-Bitcoin-from-the-C.../pt/15_1_i2p_service.md
2021-09-17 17:14:05 -03:00

7.5 KiB
Raw Blame History

15.1: Bitcoin Core como um Serviço I2P (Projeto Internet Invisível)

NOTA: Esta seção foi adicionada recentemente ao curso e ainda é um rascunho inicial que pode estar aguardando revisão. Proceda com cuidado, leitor.

Ao invés de utilizarmos o serviço baseado em proxy do Tor para garantir a privacidade das nossas comunicações no Bitcoin, podemos querer utilizar o I2P, que é projetado para agir como uma rede privada dentro da internet, ao invés de simplesmente oferecer acesso privado a serviços de internet.

Compreendendo as Diferenças

Tanto o Tor quanto o I2P oferecem acesso privado a serviços online, mas com roteamentos, bancos de dados e arquiteturas para retransmissões diferentes. Como serviços ocultos (como acesso ao Bitcoin) são centrais ao design do I2P, eles também foram otimizados:

Tor I2P
Roteamento Onion Garlic
Banco de Dados da Rede Servidores de Diretório Confiados Banco de Dados de Rede Distribuído
Retransmissão Conexões criptografadas de mão-dupla entre cada Retransmissor Conexões de mão-única entre todo servidor em seus túneis
Serviços Ocultos Devagar Rápido

Podemos encontrar uma comparação mais detalhada em geti2p.net.

Compreenda os Tradeoffs para Limitar Conexões de Saída

Existem tradeoffs caso escolhamos suportar apenas o I2P, apenas o Tor, ou ambos. Essas configurações, que limitam conexões de saída de clearnet, são feitas no Bitcoin Core usando o argumento onlynet em bitcoin.conf.

  • onlynet=onion, que limita conexões de saída ao Tor, pode expor um node a ataques "Sybil" e criar partições na rede, devido às conexões limitadas entre Tornet e clearnet.
  • onlynet=onion e onlynet=i2p, juntas, que executa serviço Onion com serviço I2P, é experimental por enquanto.

Instalando o I2P

Para instalar o I2P, devemos nos certificar de que configuramos as portas devidamente e apenas então continuar com o processo.

Preparando as Portas

Para usar o I2P, devemos abrir as seguintes portas, necessárias para o I2P:

  1. De saída (olhando para a internet): uma porta aleatória entre 9000 e 31000 é selecionada. É melhor se todas essas portas estiverem abertas para conexões de saída, o que não afeta nossa segurança.
    • Podemos checar o status do nosso firewall usando sudo ufw status verbose, o que não deve negar conexões de saída por padrão
  2. De entrada (olhando para a internet): opcional. A variedade de portas de entrada são listadas na documentação do I2P
    • Para maximizarmos privacidade, é preferível desabilitarmos conexões de entrada.

Executando o I2P

O seguinte irá executar serviços I2P no Bitcoin Core:

  1. Instalando i2pd no Ubuntu:

    sudo add-apt-repository ppa:purplei2p/i2pd
    sudo apt-get update
    sudo apt-get install i2pd
    

    Para instalarmos em outros sistemas operacionais, podemos ver estes documentos.

  2. Executando o serviço I2P:

    $ sudo systemctl start i2pd.service
    
  3. Verificando se o I2P está em execução, devemos vê-lo na porta 7656:

    $ ss -nlt
    
    State   Recv-Q   Send-Q     Local Address:Port      Peer Address:Port  Process
    
    LISTEN  0        4096           127.0.0.1:7656           0.0.0.0:*
    
  4. Devemos adicionar as seguintes linhas em bitcoin.conf:

    i2psam=127.0.0.1:7656
    debug=i2p
    

    A opção para os logs, debug=i2p, é utilizada para recordarmos informações adicionais no debug log sobre nossas configurações e conexões I2P. O lugar padrão para esse arquivo de debug no Linux é: ~/.bitcoin/debug.log

  5. Reiniciando o bitcoind

    $ bitcoind
    
  6. Devemos verificar se o I2P foi configurado corretamente olhando o debug.log, ou se algum erro apareceu nos logs.

    2021-06-15T20:36:16Z i2paccept thread start
    2021-06-15T20:36:16Z I2P: Creating SAM session with 127.0.0.1:7656
    
    2021-06-15T20:36:56Z I2P: SAM session created: session id=3e0f35228b, my address=bmwyyuzyqdc5dcx27s4baltbu6zw7rbqfl2nmclt45i7ng3ul4pa.b32.i2p:18333
    2021-06-15T20:36:56Z AddLocal(bmwyyuzyqdc5dcx27s4baltbu6zw7rbqfl2nmclt45i7ng3ul4pa.b32.i2p:18333,4)
    

    O nosso endereço I2P é mencionado nos logs, e termina com b32.i2p. Por exemplo bmwyyuzyqdc5dcx27s4baltbu6zw7rbqfl2nmclt45i7ng3ul4pa.b32.i2p:18333.

  7. Devemos confirmar que i2p_private_key foi criado no diretório do Bitcoin Core. A primeira vez que o Bitcoin Core conectar ao roteador I2P, o endereço I2P (e a chave privada correspondente) será automaticamente gerado e salvado em um arquivo chamado i2p_private_key:

    ~/.bitcoin/testnet3$ ls
    
    anchors.dat  chainstate         i2p_private_key  settings.json
    banlist.dat  debug.log          mempool.dat      wallets
    blocks       fee_estimates.dat  peers.dat
    
  8. Devemos verificar que bitcoin-cli -netinfo ou bitcoin-cli getnetworkinfo retorna o endereço I2P:

    Local addresses
    bmwyyuzyqdc5dcx27s4baltbu6zw7rbqfl2nmclt45i7ng3ul4pa.b32.i2p     port  18333    score      4
    

    Agora temos um servidor do Bitcoin acessível através da rede I2P no nosso novo endereço local.

Resumo: Bitcoin Core como um Serviço I2P (Projeto Internet Invisível)

É sempre positivo termos alternativas para privacidade e não dependermos exclusivamente do Tor para executarmos o Bitcoin Core como um serviço oculto. Como I2P foi adicionado recentemente ao Bitcoin Core, poucas pessoas o utilizam. Podemos experimentar com ele e reportar bugs se encontrarmos algum problema.

NOTA: Para a implementação oficial do I2P em Java, podemos visitar a página de download do I2P e seguirmos as instruções para nosso Sistema Operacional. Após instalado, podemos abrir uma janela do Terminal e escrever i2prouter start. Em seguida, podemos visitar o endereço 127.0.0.1:76571 em um navegador e permitirmos o SAM. Para fazermos isso, selecionamos: "Configure Homepage", então "Clients", e finalmente selecionar o "Play Button" ao lado da Bridge de aplicativo SAM. No lado esquerdo da página, devemos ver uma luz verde próximo a "Shared Clients".

Siga em frente para "Programando com RPC" no Capítulo Dezesseis: Conversando com o Bitcoind com C.

Ou, se não formos programadores, podemos pular para o Capítulo Dezenove: Compreendendo Sua Configuração Lightning para continuarmos nosso aprendizado da linha de comando com a rede Lightning.