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