I2P

I2P - A Rede Anônima Descrição da imagem I2PAndroid-console-0.9.20.png. Em formação
Primeira versão 2003
Última versão 0.9.45 (25 de fevereiro de 2020)
Depósito github.com/i2p/i2p.i2p , [cvs: //cvs.i2p.net/cvsroot/ cvs: //cvs.i2p.net/cvsroot] e [cvs: //cvs.invisiblenet.net: / cvsroot / freeweb cvs: //cvs.invisiblenet.net: / cvsroot / freeweb]
Garantia da Qualidade Integração contínua
Status do projeto Ativo
Escrito em Java
Sistema operacional Microsoft Windows , Linux , macOS , OpenBSD , FreeBSD e Android
Meio Ambiente independente
línguas Francês, inglês, espanhol e muitos outros
Modelo Cliente P2P
Política de distribuição Livre
Licença Licença BSD , GNU General Public License , licença MIT e lançada no domínio público pelo detentor dos direitos autorais ( d )
Local na rede Internet geti2p.net

I2P ("  Invisible Internet Project  ") é uma rede anônima que fornece uma camada de rede simples do tipo de sobreposição de rede de software , que os aplicativos podem usar para enviar informações de forma anônima e segura entre si. A comunicação é criptografada de ponta a ponta .

No total, quatro camadas de criptografia são usadas para enviar uma mensagem. O anonimato é garantido pelo conceito de “  rede mix  ” que consiste em remover conexões diretas entre pares que desejam trocar informações. Em vez disso, o tráfego passa por uma série de outros pares, de modo que um observador não pode determinar quem é o remetente inicial e quem é o destinatário final da informação. Cada par pode, em sua defesa, dizer que os dados não se destinam a eles.

Na Internet, um destinatário é identificado com um endereço IP e uma porta . Este endereço IP corresponde a uma interface física ( modem ou roteador , servidor , etc.). Mas, no I2P, identificamos um destinatário com uma chave criptográfica .

Ao contrário do endereçamento IP , você não pode designar a máquina que possui esta chave. Como a chave é pública , a relação entre a chave e a interface que a possui não é divulgada.

Conceito técnico

Os “destinos” (exemplos: servidor Web, IRC, jogo,  etc. ) são identificadores criptográficos (e não endereços IP) definidos por um par de chaves assimétricas (par chave privada / chave pública). O destino é determinado pelo identificador de um host e o número da porta para ingressar. Pode ser um servidor POP , um servidor SMTP , um servidor IRC , um servidor web , um servidor SVN , um servidor de newsgroup ,  etc.

O roteador constrói túneis para transportar mensagens de entrada e saída. Para criar um túnel, o roteador pede a um dos pares aos quais está conectado que forme esse túnel. Este par então entrará em contato com outro par, pedindo-lhe para ser o próximo elo na cadeia de pares que forma o túnel. Para chegar a um destino criptográfico - e portanto a um par - é necessário saber a qual "saída" do túnel abordar, é para resolver esse problema que uma determinada classe de roteadores foi adicionada à rede. Estes são o “  Floodfill  ”. Eles mantêm uma lista de conexões entre túneis e destinos. Dessa forma, quando um roteador deseja chegar a um destino, ele pergunta ao Floodfill em qual túnel ele deve ir para entrar em contato com aquele destino. O número de roteadores Floodfill aumentará, portanto, à medida que a rede crescer. Tudo é automático, caso a rede precise de novos Floodfills , os roteadores que atendam às condições de velocidade, estabilidade e número de conexões passarão a sê-lo automaticamente.

Todos os roteadores da rede participam do transporte das mensagens dos demais roteadores e assim possibilitam indistinguir o tráfego que você gera afogando-o no fluxo constante da rede. É muito complexo para um invasor determinar se os dados realmente se destinavam a você ou se estavam apenas passando por você.

O pulmão I2P é I2PTunnel , ele gerencia os túneis de entrada e saída. Em particular, você pode criar o seu próprio túnel HTTP que aponta para a porta 80 de sua máquina para hospedar seu próprio eepsite e outro para seu servidor Jabber ou POP3 .

Formulários

Tal como acontece com VPNs ou darknets , o I2P explora o encapsulamento para fornecer uma “rede dentro da rede”. Ao contrário da maioria do software de compartilhamento de arquivos em peer to peer em p2p anônimo , I2P centra-se na gestão autónoma da rede e o fornecimento de uma camada de transporte anônimo. Quando usado sozinho, o I2P não fornece os serviços que podem ser encontrados na Internet ( e-mail , download , web ,  etc. ). No entanto, o I2P vem com alguns aplicativos para encontrar alguns serviços comuns, mantendo as qualidades de confidencialidade e anonimato oferecidas pela rede.

O desenvolvimento de aplicações utilizando a rede é, portanto, possível sem a necessidade de modificar o projeto I2P. Desta forma, podemos ver aplicações utilizando a rede I2P que utilizam os mesmos protocolos que encontramos na Internet (ex: iMule ).

IRC

O I2P originalmente inclui uma rede IRC anônima: você pode se conectar a ela usando o software cliente IRC (não importa qual) apontando para o endereço do servidor 127.0.0.1 e na porta 6668.

Exemplos dos canais mais freqüentados: # i2p-fr , # i2p-help , # i2p , #anonops ( anônimo ).

Original fornecido

Opcional

Compartilhamento de arquivos ao vivo

Para desenvolvedores

Também é fornecida uma API para facilitar o desenvolvimento de software , como novos aplicativos baseados em I2P ( SDK , roteador , etc.).

O I2PTunnel

Comunicação indireta

Os correspondentes não se expõem diretamente. Cada um deles usa uma série de roteadores I2P como intermediários para criar um I2PTunnel. Esses túneis são unilaterais e usados ​​para mascarar tanto o destinatário quanto o remetente. Podemos, portanto, distinguir duas categorias de I2PTunnel:

Para contactar um membro da rede, é necessário encontrar os routers I2P que correspondem às entradas dos túneis disponibilizados pelo destinatário. Esta pesquisa é feita usando o banco de dados da rede .

Anonimato indireto

Uma criptografia , chamada dente de alho para marcar sua diferença da criptografia cebola do TOR , é usada em mensagens que passam pelos túneis I2PT. Essa criptografia garante:

  1. a confidencialidade da mensagem
  2. e que os intermediários só podem conhecer os roteadores que precedem e seguem o túnel .

O ponto 1 impede que as informações contidas na mensagem sejam utilizadas para identificar os correspondentes. O ponto 2 impede que os intermediários conheçam a sua posição no túnel e, portanto, impede que esses intermediários distingam entre correspondentes e intermediários.

Tamanho do túnel e qualidade de anonimato

O tamanho dos I2PTunnels é escolhido por quem os cria. Tem uma influência significativa em todos os mecanismos que protegem o anonimato.

Um túnel sem intermediário oferece proteção, pois não é possível distinguir correspondentes e intermediários de dentro da rede; uma negação plausível os protege. No entanto, um invasor fora da rede e com os recursos para supervisionar o tráfego de tal túnel pode montar um ataque por meio de análise estatística.

Quando os intermediários intervêm, todos os intermediários devem ser comprometidos antes de montar um ataque por análise estatística. O mecanismo de mistura de tráfego resolve esse problema.

Limitações e restrições do I2PTunnel

Se o I2PTunnel é relativamente eficaz na preservação do anonimato dentro da rede, sozinho não é mais suficiente para aqueles que podem ter uma visão global da rede I2P. Bastaria observar o tráfego para ver onde começa e onde pára.

Um túnel , I2P ou outro, causa um estrangulamento da taxa e um aumento da latência . A multiplicação de túneis permite aumentar o aproveitamento da vazão não utilizada.

Criação de túnel

Para se comunicar, um correspondente deve criar um túnel sem ter que sair do anonimato (para passar sua mensagem pelos pares). O criador do túnel deve primeiro selecionar os pares que potencialmente participarão de seu túnel. Em seguida, ele cria uma solicitação de solicitação (TunnelBuildMessage) que passará pelos pares selecionados antes de retornar ao criador com as respostas de cada um.

Seleção de pares

A seleção dos pares é feita com base em determinados critérios. Esses critérios incluem, entre outros, seus tempos de resposta e larguras de banda. Essa seleção é feita com base no desempenho, confiabilidade ou grau de anonimato buscado pelo usuário.

Criação do TunnelBuildMessage

O TunnelBuildMessage é uma mensagem construída pelo criador do túnel . Ele será usado para listar as respostas dos pares que concordam em participar ou não no túnel. Se todas as respostas forem positivas, o túnel é criado. Esta mensagem é composta por oito fichas de registro. Um formulário de registro contém o pedido de participação de um colega. Portanto, um túnel pode ter no máximo oito pares.

bytes 0-3: tunnel ID to receive messages as bytes 4-35: local router identity hash bytes 36-39: next tunnel ID bytes 40-71: next router identity hash bytes 72-103: AES-256 tunnel layer key bytes 104-135: AES-256 tunnel IV key bytes 136-167: AES-256 reply key bytes 168-183: reply IV byte 184: flags bytes 185-188: request time (in hours since the epoch) bytes 189-192: next message ID bytes 193-222: uninterpreted / random padding

Descrição de um formulário de registro

Chave da camada de túnel AES-256 e chave IV do túnel AES -256  : chaves de criptografia que serão usadas durante as transações no túnel, se ele for construído.

Resposta AES-256 IV e chave de resposta AES-256  : chave de criptografia de resposta e seu vetor de inicialização , permite ao peer criptografar sua resposta antes de encaminhar a mensagem.

ID da próxima mensagem  : o próximo par no túnel . Aquele para quem a mensagem deve ser enviada após a resposta.

As outras opções permitem verificar a integridade da mensagem, mas também adicionar informações adicionais à resposta.

Preparando para enviar

Antes de enviar o TunnelBuildMessage , o criador do túnel criptografa essa mensagem de duas maneiras sucessivas. Por criptografia assimétrica que mantém as informações confidenciais na rede, depois por criptografia simétrica que garante que a mensagem foi passada na ordem estabelecida pelo criador:

Criptografia assimétrica  : cada formulário de registro é criptografado com a chave pública do par correspondente, de forma que cada par acesse apenas seu formulário de registro.

Criptografia simétrica  : a mensagem é então criptografada por várias camadas de modo a expor o arquivo apenas no momento apropriado. A criptografia ocorre de tal forma que, quando um par criptografa a mensagem com sua resposta, o cartão de registro do próximo par pode ser descriptografado por ele. Você pode pensar nela como uma cebola que tem uma camada removida a cada transmissão de uma para a outra. Por exemplo, um túnel com três pares A, B e C:

O registro do último par do túnel (C) é criptografado com a chave de resposta do penúltimo (B) de tal forma que quando B criptografa sua resposta, o registro de registro de C pode ser descriptografado por C. Da mesma forma, os registros de B e C são criptografados com a chave de A para que B só possa ser lido depois de A.

De pares de processamento do TunnelBuildMessage Recuperação de arquivos

Quando um par recebe um TunnelBuildMessage , há apenas um cartão de registro que não é criptografado simetricamente. Ele descriptografa esse arquivo com sua chave privada para recuperar a solicitação de participação no túnel .

Escolha de participação

Quando o arquivo é decifrado, ele substitui o conteúdo do arquivo por sua resposta, participando ou não do túnel . Se ele se recusar, ele dá o motivo da rejeição.

Criptografia de mensagem

Depois de criar e escrever a resposta no formulário de registro, ele criptografa simetricamente o formulário de registro com a chave fornecida na solicitação. Em seguida, ele criptografa os outros cartões de registro. A criptografia dos outros arquivos tem como consequência a remoção de uma camada de criptografia simétrica , de modo que o arquivo do próximo destinatário não tem mais criptografia simétrica. Ele está pronto para ser decifrado pelo destinatário.

Ir para a próxima

A última operação executada pelo par ao criar o túnel é passar o TunnelBuildMessage para o próximo destinatário. O próximo destinatário é mencionado no formulário de registro durante a solicitação.

O último par participando da criação do túnel é o criador do túnel. Ele descriptografa os formulários na ordem inversa da criptografia simétrica, executada ao criar o TunnelBuildMessage , para recuperar as respostas.

Mecanismo de roteamento

O I2P responde ao problema de roteamento tentando não comprometer o anonimato, a qualidade da rede (latência e taxa de transferência) e ataques de negação em toda a rede.

NetdB

O conceito é simples, mas importante, o NetdB (para banco de dados de rede ) é um banco de dados que contém os identificadores dos roteadores da rede . Este banco de dados é distribuído e é semelhante a uma tabela de roteamento em um roteador convencional (exceto que aqui contém as chaves de identificação dos roteadores I2P). Ela usou o DHT de Kademlia na base como uma solução alternativa, mas foi abandonado.

Roteadores Floodfill

Para o compartilhamento de metadados da rede , é inicializado o peer floodfill (um pequeno número de roteadores I2P usa este algoritmo, o outro usa um Kademlia derivado mas que não é mais usado agora). Quando um par de floodfill insere uma nova chave de criptografia no banco de dados da rede, outro par de floodfill escolhido aleatoriamente solicita essa chave novamente e, se for válida, o par se aproxima do primeiro e publica novamente a chave. No final do floodfill, os pares compartilham sua chave, consultando continuamente o banco de dados e fazendo uma cópia das chaves válidas em sua memória local, o que produz um efeito de alteração da proximidade dos pares de floodfill entre si (os pares se aproximam). Todos os dados armazenados no banco de dados são auto-autenticados, verificando a assinatura do elemento armazenado. Os dados são verificados com um carimbo de data / hora , os roteadores verificam regularmente a hora consultando um servidor SNTP (pool.ntp.org) e detectam inconsistências na camada de transporte (para evitar ataques). Simplificando, os roteadores Floodfill garantem a correspondência de chaves, o roteamento de informações e o transporte de dados na rede (de 3 a 5 roteadores Floodfill teoricamente garantem o funcionamento adequado de um conjunto de 10.000 roteadores na rede). O algoritmo usado não é um algoritmo completo, mas foi ajustado para corresponder à necessidade de I2P sem sobrecarregar a implementação .

Abandono de Kademlia

Os algoritmos de Kademlia foram usados ​​para a troca de metadados entre roteadores . Esta solução foi abandonada , Devido às dificuldades de configuração do algoritmo. O algoritmo exigia um mínimo de recursos (pc e processador ) que os roteadores não podiam assumir (boa ideia no papel, mas não neste aplicativo).

Informação de roteadores

O roteador armazena apenas informações essenciais para o envio de mensagens pela rede . Estes são sua identidade (uma chave ElGamal pública de 2048 bits, uma chave DSA pública e um certificado ) e endereços (uma lista de endereços IP , portas e conjuntos de opções de publicação). A chave para essa estrutura é um SHA256 da identidade dos roteadores. Desde que a versão do I2P não esteja em sua versão 1.0, as opções de publicação são dados de depuração .

Procurando na rede por um roteador específico

Nesse sistema distribuído , a busca por informações pode parecer uma busca em um DHT tradicional (como aquele realizado nas redes em P2P ). Mas dado que a rede é volátil e em constante evolução (dada a duração de 10 minutos de validade do túnel ), a pesquisa iterativa é facilitada pelo fato de que as informações não estão no roteador mais próximo, mas nos roteadores. Tendo uma chave de identificação próxima ao SHA 256 (identidade do roteador + carimbo de data / hora no formato AAAAMMDD), possibilitando ter um conjunto de roteadores com as informações solicitadas. Isso também permite uma renovação do lugar das informações na rede e proteção contra ataques (pois para atacar uma máquina com este princípio, a localização das informações muda a cada dia, obrigando o atacante a recriar seu ataque a cada vez.). Como os dados de pesquisa são confidenciais, eles passam por túneis de exploração que são diferentes dos túneis de dados.

Imersão da carga útil

A imersão da carga útil torna possível ocultar os dados realmente enviados ou recebidos pelo usuário de um roteador I2P. A imersão é muito importante, pois é ela que protege o anonimato em relação a um invasor externo que tem uma visão geral da rede.

Ataques de um roteador de rede

Em seu design, os desenvolvedores levam em consideração os ataques e os listam para garantir a proteção dos usuários e da rede (para evitar, por exemplo, uma sobrecarga de roteadores de inundação ).

Notas e referências

  1. "  https://staas.home.xs4all.nl/t/swtr/documents/wt2015_i2p.pdf  "
  2. "  Comparação de redes anônimas  " (acessado em 20 de dezembro de 2009 )
  3. http://i2pbote.i2p.us
  4. http://wiki.vuze.com/w/I2P_HowTo
  5. (in) I2P Team, "  Como Túnel roteamento Works  " (acessado em 18 de dezembro de 2009 )
  6. "  TOR, A FACE ENCRIPTADA DA INTERNET - CAMILLE BOSQUÉ  " , em www.camillebosque.com (acessado em 10 de abril de 2016 )
  7. (in) I2P Team "  I2P's Threat Model - Predecessor attack  " (acessado em 18 de dezembro de 2009 )
  8. (em) Matthew K. Wright , Micah Adler , Brian Neil Levine e Clay Shields , Passive-Logging Attacks Against Anonymous Communications Systems ,junho de 2007, 34  p. ( leia online )
  9. "  Implementação de Túnel  "

Apêndices

Artigos relacionados

  • Termo de preenchimento (em inglês: Floodfill ) que inspira I2P a qualificar alguns nós
  • P2P anônimo (contém uma lista de software)
  • Freenet  : rede complementar.
  • GNUnet  : rede P2P e F2F anônima com compartilhamento de arquivos. Software multifuncional e multiplataforma. (Projeto GNU , escrito em C).

links externos