Instruções

Internet secreta, parte 4: o que é o I2P e como ele funciona

  • 20 de set. de 2023, 21:48
  • 15 minutos

Internet secreta, parte 4: o que é o I2P e como ele funciona

Anteriormente nós falamos sobre a Freenet, o navegador Tor e o que é possível fazer com a ajuda deles na internet obscura.

Neste novo artigo, discutiremos o que é a rede I2P, como ela funciona e quais problemas ela resolve.

Nos outros artigos dessa série:

  • Internet secreta, parte 1: o que é Dark Web e por que a utilizam

  • Internet secreta, parte 2: como funcionam os sites .onion 

  • Internet secreta, parte 3: o que é a Freenet 

  • Internet secreta, parte 4: o que é o I2P e como ele funciona ← você está aqui

  • Internet secreta, parte 5: como acessar a Darknet através do Tor, I2P e Freenet


O que é I2P

O I2P é mais uma rede peer-to-peer anônima que opera sobre a Internet convencional. Por ser descentralizada, não possui servidores DNS, no lugar dos quais existem "livros de endereços" que se atualizam automaticamente. O papel dos endereços é desempenhado por chaves criptográficas que não são emitidas por computadores reais. Cada usuário do projeto recebe sua própria chave, sendo essa impossível de rastrear. 

Falamos em mais detalhes sobre como as redes peer-to-peer funcionam no artigo "Internet secreta, parte 1: O que é a Dark Web e por que a utilizam.”

A rede em si foi criada em 2003 como um projeto open source. Atualmente, continua sendo um projeto totalmente aberto, que segue sendo desenvolvido e apoiado por entusiastas de todo o mundo.

O I2P foi projetado com a suposição de que todos os nós intermediários são maliciosos. Portanto, todos os túneis na rede funcionam em uma direção: o tráfego de entrada segue uma cadeia de nós, enquanto o tráfego de saída segue outra. Além disso, todas as informações no I2P são criptografadas e sobrepostas em camadas nos túneis. Portanto, roubar uma solicitação específica é extremamente difícil.

Como funciona o I2P

No I2P, todas as solicitações são criptografadas no lado do remetente e descriptografadas no lado do destinatário usando os algoritmos NTCP2 e SSU. Eles são criptográficos análogos ao TCP e UDP, que criptografam todas as informações transmitidas ao roteador. 

Isso significa que ninguém pode interceptar as solicitações, nem mesmo um nó intermediário. Ele não saberá o que aconteceu com a solicitação após passar por ele: se foi processada pela solicitação seguinte ou encaminhada para outro lugar.

O I2P é composto por: 

  • Roteadores, que possuem endereços I2P e endereços IP comuns. Eles funcionam como nós de trânsito. Todos eles são iguais e em nada diferem uns dos outros.

  • Pontos finais, que são servidores ou clientes, cuja localização real é desconhecida.

  • Túneis, que são caminhos percorridos por solicitações e nos quais vários roteadores se reúnem.

Roteadores, nós de trânsito: são parte da cadeia de servidores que formam um túnel para a solicitação. Ninguém sabe qual solicitação está indo por qual túnel. Outra particularidade é que o usuário define o destino da solicitação, o comprimento dos túneis e também a quantidade deles.

Você pode imaginar um túnel como um caminhão que passa por vários postos de controle. Ele não para em nenhum deles, e portanto, ninguém sabe para onde o caminhão está indo ou o que está sendo transportado em sua carroceria. Apesar de que qualquer um pode observar o caminhão, apenas o posto de controle de destino pode pará-lo.

Fluxo de uma solicitação no I2P: os círculos vazios no diagrama são os roteadores, que estão espalhados por todo o mundo. A cor verde representa os túneis de saída, e a cor vermelha - os de entrada. Em seguida explicaremos a diferença entre eles


.Pontos finais ou endpoints são mais complexos. Essencialmente, os endpoints são algo como “servidores” para uma rede comum. Ou seja, as solicitações são encaminhadas para eles como se fosse para um roteador. No entanto, ninguém sabe que determinado ponto da rede é o ponto final. Da mesma forma, ninguém sabe para quem e quais dados estão sendo enviados. Apenas o ponto final de destino consegue entender que os dados são destinados para ele. Por isso, é impossível calcular a localização de um “ponto”. Para que fique mais claro, vamos introduzir dois conceitos: LeaseSet e Floodfill (ou Routerinfo).LeaseSet é um conjunto de informações no I2P que contém dados sobre túneis de entrada, chaves criptográficas e endereço final. 

Floodfill é um roteador que atua como um livro de referências, armazena LeaseSets e conhece os lugares que o usuário precisa e está procurando. Caso ele não saiba, encaminha para outro serviço de referências. 

Qualquer usuário no I2P pode se tornar um Floodfill. Basta marcar a respectiva opção nas configurações do software. Falaremos mais sobre as configurações em si nas partes seguintes.

Quando o usuário busca algo no I2P, ele solicita um LeaseSet específico de um Floodfill aleatório. 

Se o Floodfill não conhece o endereço solicitado, ele fornece o endereço de outros três Floodfills e a solicitação é encaminhada a eles. Esses, por sua vez, verificam os LeaseSets em seu banco de dados. E assim por diante até que o endereço solicitado seja encontrado. 

Estrutura condicional de como é feita uma solicitação do usuário para o Floodfill. O processo na realidade é mais complexo, mas ainda não falamos sobre alguns pontos importantes que serão discutidos abaixo. 

O Floodfill adequado é escolhido com base no endereço de destino e na data de hoje. A partir dessas informações é gerado o hash SHA256, resultando na obtenção de dados tão longos quanto um endereço comum.


Hash é uma função que realiza operações matemáticas ou lógicas nos dados. Como resultado, uma grande quantidade de informações se transforma em uma sequência de símbolos relativamente pequena que serve como um identificador de dados. Se duas imagens diferem em pelo menos um pixel, por exemplo, seus hashes serão diferentes.

Em seguida, o sistema procura o Floodfill em um banco de dados local do roteador e seleciona aquele que, quando aplicada a operação “OU EXCLUSIVO” com o bloco “endereço de destino + data”, retorna o menor número possível. 

Trata-se basicamente de uma função de consulta ao Floodfill que ajuda a encontrar o endereço desejado. No entanto, como o endereço é gerado aleatoriamente, o Floodfill informa o endereço de três vizinhos aos quais nos dirigimos em busca do endereço que desejamos. Já o algoritmo de escolha do Floodfill com a data é necessário para randomizar as consultas. Dessa forma, cada solicitação para um novo endereço passará por um novo Floodfill, e eles mudarão diariamente. 

Um nó ativo da rede possui em média 5000 roteadores ativos em seu banco de dados e recebe centenas, ou mesmo milhares, de conexões de trânsito totalmente aleatórias.

Através dos pontos finais sempre passam muitas informações, já que cada um deles geralmente contém por volta de três túneis de entrada. A quantidade de túneis pode ser maior ou menor, dependendo da escolha do remetente. O remetente pode inclusive optar por não usar túneis e se comunicar diretamente com o nó. Entretanto, embora o nó não saiba quem está se comunicando com ele sem túneis e tampouco saiba o comprimento real da cadeia, isso compromete o anonimato do remetente. Sem os túneis ainda é difícil interceptar a solicitação, mas é possível. Além disso, cada nó de trânsito consulta periodicamente um Floodfill aleatório e recebe dele como resposta três novos nós de trânsito. Isso aumenta a rede e encontra novos Floodfills. Cada nó ativo do I2P tem em média 5000 roteadores ativos em seu banco de dados e recebe centenas, ou mesmo milhares, de conexões de trânsito totalmente aleatórias. Graças a isso, há muito tráfego de trânsito passando pelos roteadores, o que gera um “ruído branco”. Portanto, é praticamente impossível extrair uma informação específica de um conjunto de informações.

Já como endereços dos pontos finais no I2P são usados identificadores, derivados da chave pública da assinatura. A soma de hash gera uma sequência única de determinado comprimento e no final adiciona o pseudo domínio “.b32.i2p”, resultando em um endereço interno familiar. 

Em seguida, um endereço legível comum é adicionado ao endereço interno. 

Túneis formam um caminho através de uma lista selecionada de roteadores. Eles são protegidos por criptografia de várias camadas, e cada roteador ao longo do caminho só pode descriptografar uma camada. As informações descriptografadas contêm o IP do próximo roteador e a camada de informações criptografadas seguinte, que seguirá para o próximo roteador.

As informações passam pelos túneis em uma única direção, e cada túnel possui um ponto inicial e um ponto final. Para obter uma resposta, um outro túnel é necessário. 

Cada túnel existe por 10 minutos. Para que a conexão não seja interrompida, as partes receptora e emissora antecipadamente criam novos túneis e trocam LeaseSets.

Os túneis funcionam da seguinte maneira: primeiro, é construído um túnel de saída que consiste em vários nós. Cada nó descriptografa parte das informações que contém instruções sobre para qual nó encaminhar as informações em seguida. 

No último ponto do túnel de saída, um nó descriptografa uma parte das informações que indica que a construção da cadeia está concluída. 

E como todas as cadeias são unidirecionais, o último nó recebe o roteamento do túnel de entrada. Como resultado, as informações são retornadas ao usuário. 

Como funcionam os túneis de entrada e de saída no I2P



Dependendo do tipo de túnel (de entrada ou de saída), o último ponto é chamado de Endpoint ou Gateway. Endpoint significa ponto final e Gateway - portão de entrada. A função do Endpoint é reunir partes de informações em um pacote de dados maior, e enviá-lo ao usuário correto através do Gateway.   

O Endpoint reúne informações em um bloco, enquanto o Gateway as envia ao usuário final.



Por exemplo, Bogdan está repassando dados para Ibrahim. Para repassar os dados, Bogdan constrói um túnel de saída com 4 nós. Já Ibrahim constrói um túnel de entrada com 5 nós. Quando Bogdan envia as informações, elas primeiramente passam pelo túnel de saída em direção ao Endpoint através dos 4 pontos, e depois a partir daí saem através do Gateway e vão pelos 5 nós de entrada de Ibrahim.

Caso Ibrahim resolva responder, será construído um novo caminho. A quantidade de nós vai depender do que Bogdan e Ibrahim desejam.

A própria rede I2P funciona com ajuda de roteamento de alho.


Como funciona o roteamento de alho

O roteamento de alho foi desenvolvido há cerca de 20 anos atrás. É um método de construção de túneis para transmissão de informações, no qual várias mensagens são criptografadas e agrupadas em uma única solicitação. 

O roteamento de alho é chamado de roteamento de cebola avançado usado pela rede Tor. Ele é usado quando é necessário enviar uma mensagem criptografada através de nós de trânsito, ocultando deles o conteúdo.

A principal diferença entre os dois métodos de roteamento é que o roteamento de alho pode criptografar simultaneamente várias mensagens em diferentes camadas, enquanto o roteamento de cebola só permite uma mensagem por camada.

Para mais informações sobre como funciona a criptografia em camada, leia o artigo «O que é a rede Tor e como ela funciona».


Durante a transmissão de uma mensagem com roteador de alho, ela é criptografada e descriptografada ao interagir com cada nó. Durante a etapa de criação do caminho, apenas instruções de roteamento para o próximo salto são fornecidas a cada nó.

Durante o trânsito da solicitação em si, a mensagem é transmitida através de um túnel e está disponível apenas para o ponto final desse túnel.

O alho no I2P é um bloco de informações que consiste em vários dentes. Alguns deles são mensagens relevantes para o usuário, enquanto outros são mensagens de trânsito.

Por exemplo, quando um usuário deseja enviar informações a outra pessoa, elas são encapsuladas em um dente, que é então adicionado a outros blocos de informações de outros participantes da rede - formando o alho. O alho é criptografado por algoritmos especiais e transmitido para diferentes nós da rede.

Exemplo de funcionamento da criptografia de alho, onde a solicitação foi feita por Amy



E assim funciona a transmissão de uma solicitação de alho desde o ponto de vista do computador que possui as informações necessárias


Cada alho contém informações para o criador de cada dente:

  • O número do túnel no roteador - 4 bytes de informação aleatória.

  • O endereço do próximo roteador e o número do túnel nele.

  • Chave de criptografia simétrica e chave de criptografia de vetor de inicialização. O vetor de inicialização é uma sequência de caracteres aleatória ou pseudo-aleatória que é adicionada à chave de criptografia e aumenta sua segurança.

  • O papel do nó na cadeia: de trânsito ou final.

Cada dente é identificado pelos primeiros bytes de informação que ele contém - é uma parte do hash de seu endereço. Quando o destinatário encontra o dente certo, ele descriptografa o conteúdo com ajuda da chave criptográfica. As informações de outros dentes não podem ser descriptografadas, pois são destinadas a outros destinatários e protegidas por outras chaves.

Quando na construção de um túnel estão envolvidos quatro participantes, um alho com 4 dentes é formado. Nas demais situações, o alho é composto por 8 partes e 8 participantes - um número maior de pessoas na construção do túnel não é permitido pelo sistema. Se restarem dentes vazios no alho, eles são preenchidos com informações aleatórias.

Resumo: como ocorre a interação entre a solicitação e a rede

Primeiro, o usuário cria a solicitação e formam-se túneis para ela. A solicitação segue pelo túnel de entrada, passando por vários pontos de trânsito e chegando aos pontos finais. Em seguida, solicita LeaseSets de Floodfills aleatórios.

Os pontos de trânsito são usados para que ninguém possa rastrear a localização do ponto final.

Junto com a solicitação, dados do túnel de entrada chegam ao ponto final. Eles são necessários para que a solicitação com a resposta possa voltar ao usuário.

Quando a solicitação chega ao servidor, ele gera a resposta e a envia de volta ao usuário. Como os túneis no I2P são unidirecionais, o servidor envia a resposta pelo seu túnel de saída. O endereço do destinatário é o túnel de entrada pelo qual a solicitação originalmente chegou ao servidor.

Aqui está uma visão geral do processo em um diagrama.


Acabou ficando confuso e complicado. Vamos analisar passo a passo.


Primeiro passo — o servidor publica seu LeaseSet em um Floodfill. Para isso, ele o envia pelo túnel de saída.

Segundo passo o usuário deseja conectar-se a esse servidor. Para isso, ele envia a solicitação  para o Floodfill por seu túnel de saída. 

Terceiro passo — o Floodfill envia a resposta para o computador do usuário através do túnel de entrada do usuário. 


Quarto passo — o usuário envia uma solicitação ao servidor. Inicialmente, a solicitação segue pelo túnel de saída do usuário e cai no túnel de entrada do usuário. 


Quinto passo — o servidor responde ao usuário. Ele envia a resposta pelo túnel de saída do servidor, que cai no túnel de entrada do usuário e chega ao seu computador. Em seguida, o recurso desejado é acessado pelo usuário.


Através de quais clientes funciona o I2P

A rede I2P é construída com duas tecnologias: Java n C++. Inicialmente, o projeto foi criado em Java e chamado de I2P. Mas em 2013, um entusiasta, cujo nickname era Original, criou um cliente I2P em C++ e o chamou de I2Pd, que resultou sendo muito melhor que seu antecessor. Vamos explicar por quê.

O I2Pd supera a versão em Java em termos de arquitetura. Isso ocorre porque o I2P envolve muita criptografia difícil de implementar eficientemente em Java devido a problemas de desempenho. Tentaram resolver esse problema adicionando bibliotecas escritas em C ao roteador Java. Entretanto, chamar cada uma dessas bibliotecas acarreta uma grande sobrecarga.

Por outro lado, toda a criptografia do C++ é incorporada à rede e funciona nativamente, sem acarretar cargas extras. 

Além da rapidez de operação da rede, os roteadores do I2Pd consomem menos recursos do sistema. Isso ocorre porque o programa em C++ interage diretamente com o sistema. Já na versão em Java, tudo funciona dentro de uma máquina virtual, que atua como uma camada intermediária entre o sistema operacional e o software.

Uma outra vantagem do I2Pd é sua velocidade rápida. No I2P convencional, a conexão passa por vários roteadores Java, fazendo com que a solicitação seja processada por mais tempo e a velocidade da internet não supere algumas dezenas de kilobytes. Em C++, as solicitações são processadas mais rapidamente, por isso a velocidade de conexão pode chegar a até 1 megabyte. 


Qual é a diferença entre I2P e Tor

Uma das principais diferenças entre as duas redes é que o Tor é uma rede de clientes, enquanto o I2P - de servidores. Acontece que a tarefa do Tor é ocultar o endereço IP do cliente que fez a solicitação. Já a tarefa do I2P é ocultar o servidor ao qual o usuário está enviando a solicitação. Mas existem ainda outras diferenças:

  1. Os túneis no I2P são unidirecionais, enquanto no Tor eles são bidirecionais. Isso significa que, no I2P, o tráfego segue por um túnel até o destinatário e retorna ao remetente por outro túnel.

  2. O Tor usa criptografia em camadas (roteamento de cebola), enquanto o I2P usa criptografia em blocos (roteamento de alho). Ambos os tipos de criptografia são confiáveis, mas no roteamento de cebola o tráfego é protegido por camadas, enquanto que no roteamento de alho ele é protegido ainda por blocos para cada destinatário. Isso significa que o nível final de proteção no roteamento de alho é maior.

  3. No I2P, nenhum dos participantes da rede sabe quem é o remetente e quem é o destinatário. Já no Tor, há um nó intermediário que sabe de onde o arquivo está vindo e para onde deve ser enviado.

  4. Se o Tor for banido em seu país, conectar-se a ele pode ser um problema. Ele não será capaz de encontrar nós de entrada para construir a rede e entender para quem enviar a mensagem.

Por outro lado, no I2P, mesmo se um Floodfill for banido, é possível criar outro por conta própria e obter dessa forma a lista de nós de entrada da rede. Na segunda vez já não será necessário criar nada - os pontos de entrada da rede já serão conhecidos e o software irá usá-los. No final das contas, a tolerância a falhas do I2P é superior à do Tor

  1. O Tor serve não apenas para acessar a darknet, mas também para usar a internet convencional. Por exemplo, através do Tor é possível acessar redes sociais comuns ou utilizar serviços de streaming. O I2P, por outro lado, destina-se apenas à troca de mensagens em sua própria rede, embora o I2Pd tenha quase todas as capacidades da internet convencional.

  2. O I2P era inicialmente um projeto de código aberto, desenvolvido por entusiastas com o objetivo de criar uma internet anônima e segura. Já a rede Tor foi originalmente criada pelo governo e agora ele pode identificar usuários específicos.

Por exemplo, em 2016, os Estados Unidos adicionaram correções à Regra 41. Isso deu ao FBI o direito de hackear em massa qualquer número de computadores em qualquer lugar do mundo com apenas um mandado. Portanto, as agências de aplicação da lei têm o direito de hackear um nó e obter suas informações confidenciais. Um caso assim ocorreu em 2016, quando o FBI hackeou 8.000 computadores em 120 países.


No final das contas, o I2P é melhor que o Tor porque sua rede foi construída desde o início para desconfiar de todos e não confiar em ninguém. As ações de cada participante permanecem ocultas. Já no Tor é possível tirar o anonimato do usuário, e histórias do tipo já ocorreram.