I2P

I2P - La rete anonima Descrizione dell'immagine I2PAndroid-console-0.9.20.png. Informazione
Prima versione 2003
Ultima versione 0.9.45 (25 febbraio 2020)
Depositare 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]
Garanzia di qualità Integrazione continua
Stato del progetto Attivo
Scritto in Giava
Sistema operativo Microsoft Windows , Linux , macOS , OpenBSD , FreeBSD e Android
Ambiente indipendente
Le lingue Francese, inglese, spagnolo e molti altri
genere Client P2P
Politica di distribuzione Gratuito
Licenza Licenza BSD , GNU General Public License , licenza MIT e rilasciata nel pubblico dominio dal detentore del copyright ( d )
Sito web geti2p.net

I2P ("  Invisible Internet Project  ") è una rete anonima , che fornisce un semplice livello di rete di tipo overlay di rete software , che le applicazioni possono utilizzare per inviare informazioni in modo anonimo e sicuro l'una all'altra. La comunicazione è crittografata end-to-end .

In totale, per inviare un messaggio vengono utilizzati quattro livelli di crittografia . L'anonimato è assicurato dal concetto di “  rete mista  ” che consiste nel rimuovere le connessioni dirette tra pari che desiderano scambiarsi informazioni. Invece, il traffico passa attraverso una serie di altri peer in modo che un osservatore non possa determinare chi è il mittente iniziale e chi è il destinatario finale delle informazioni. Ogni pari può, a sua difesa, affermare che i dati non erano destinati a loro.

In Internet, un destinatario viene identificato con un indirizzo IP e una porta . Questo indirizzo IP corrisponde a un'interfaccia fisica ( modem o router , server , ecc.). Ma, su I2P, identifichiamo un destinatario con una chiave crittografica .

A differenza dell'indirizzamento IP , non è possibile designare la macchina che possiede questa chiave. Poiché la chiave è pubblica , la relazione tra la chiave e l'interfaccia che la possiede non viene divulgata.

Concetto tecnico

Le "destinazioni" (esempi: server Web, IRC, gioco,  ecc. ) Sono identificatori crittografici (e non indirizzi IP) definiti da una coppia di chiavi asimmetriche (chiave privata / coppia di chiavi pubbliche). La destinazione è determinata dall'identificativo di un host e dal numero di porta a cui collegarsi. Può essere un server POP , un server SMTP , un server IRC , un server web , un server SVN , un server di newsgroup ,  ecc.

Il router costruisce tunnel per trasportare i messaggi in entrata e in uscita. Per creare un tunnel, il router chiede a uno dei peer a cui è connesso di formare questo tunnel. Questo pari a sua volta contatterà un altro pari chiedendo loro di essere il prossimo anello della catena di pari che formano il tunnel. Per raggiungere una destinazione crittografica - e quindi un peer - è necessario sapere quale tunnel "uscita" indirizzare, è per risolvere questo problema che è stata aggiunta alla rete una certa particolare classe di router. Questi sono i "  Floodfill  ". Questi mantengono un elenco di collegamenti tra tunnel e destinazioni. In questo modo, quando un router vuole raggiungere una destinazione, chiede a Floodfill in quale tunnel deve andare per contattare quella destinazione. Il numero di router Floodfill aumenterà quindi con la crescita della rete. Tutto è automatico, se la rete necessita di nuovi Floodfill , i router che soddisfano le condizioni di velocità, stabilità e numero di connessioni lo diventeranno automaticamente.

Tutti i router della rete partecipano al trasporto dei messaggi degli altri router e permettono così di rendere indistinguibile il traffico che si genera annegandolo nel flusso costante della rete. È molto complesso per un utente malintenzionato determinare se i dati erano davvero destinati a te o se ti stavano solo attraversando.

Il polmone I2P è I2PTunnel , gestisce i tunnel in entrata e in uscita. In particolare, puoi crearne uno tuo come un tunnel HTTP che punta alla porta 80 della tua macchina per ospitare il tuo eepsite e un altro al tuo server Jabber o POP3 .

Applicazioni

Come con le VPN o le darknet , I2P sfrutta il tunneling per fornire una "rete all'interno della rete". A differenza della maggior parte dei software di file sharing in peer to peer in anonimo p2p , I2P si concentra sulla gestione autonoma della rete e sulla fornitura di un livello di trasporto anonimo. Quando utilizzato da solo, I2P non fornisce i servizi che possono essere trovati su Internet ( e-mail , download , web ,  ecc .). Tuttavia, I2P viene fornito con alcune applicazioni per trovare alcuni servizi comuni mantenendo le qualità di riservatezza e anonimizzazione offerte dalla rete.

Lo sviluppo di applicazioni utilizzando la rete è quindi possibile senza dover modificare il progetto I2P. In questo modo, possiamo vedere applicazioni che utilizzano la rete I2P che utilizzano gli stessi protocolli di ciò che troviamo su Internet (es: iMule ).

IRC

I2P include originariamente una rete IRC anonima: puoi connetterti ad essa usando il software client IRC (non importa quale) puntando all'indirizzo del server 127.0.0.1 e sulla porta 6668.

Esempi dei canali più frequentati: # i2p-fr , # i2p-help , # i2p , #anonops ( Anonimo ).

Fornito originale

Opzionale

Condivisione di file in tempo reale

Per gli sviluppatori

Viene inoltre fornita un'API , per facilitare lo sviluppo di software come nuove applicazioni basate su I2P ( SDK , router , ecc.).

Il file I2PTunnel

Indiretto indiretto delle comunicazioni

I corrispondenti non si espongono direttamente. Ognuno di loro utilizza una serie di router I2P come intermediari per creare un I2PTunnel. Questi tunnel sono unidirezionali e utilizzati per mascherare il destinatario e il mittente. Possiamo quindi distinguere due categorie di I2PTunnel:

Per contattare un membro della rete è necessario trovare i router I2P che corrispondono agli ingressi dei tunnel messi a disposizione dal destinatario. Questa ricerca viene eseguita utilizzando il database di rete .

Anonimato all'interno dell'indirizzamento

Una crittografia , chiamata spicchio d'aglio per contrassegnare la sua differenza dalla crittografia a cipolla di TOR , viene utilizzata sui messaggi che passano attraverso I2PTunnels. Questa crittografia garantisce:

  1. la riservatezza del messaggio
  2. e che gli intermediari possono conoscere solo i router che precedono e seguono il tunnel .

Il punto 1 impedisce che le informazioni contenute nel messaggio vengano utilizzate per identificare i corrispondenti. Il punto 2 impedisce agli intermediari di conoscere la loro posizione nel tunnel e quindi impedisce a questi intermediari di distinguere tra corrispondenti e intermediari.

Dimensioni del tunnel e qualità dell'anonimato

La dimensione degli I2PTunnels è scelta da chi li crea. Ha un'influenza significativa su tutti i meccanismi che proteggono l'anonimato.

Un tunnel senza intermediario offre protezione poiché non è possibile distinguere corrispondenti e intermediari dall'interno della rete; un plausibile diniego li protegge. Tuttavia, un utente malintenzionato al di fuori della rete e che dispone delle risorse per controllare il traffico di un tale tunnel può lanciare un attacco mediante analisi statistica.

Quando intervengono gli intermediari, tutti gli intermediari devono essere compromessi prima di lanciare un attacco mediante analisi statistica. Il meccanismo di mixaggio del traffico risolve questo problema.

Limitazioni e vincoli dell'I2PTunnel

Se l'I2PTunnel è relativamente efficace nel preservare l'anonimato all'interno della rete, da solo non è più sufficiente per chi può avere una visione d'insieme della rete I2P. Basterebbe osservare il traffico per vedere dove inizia e dove si ferma.

Un tunnel , I2P o altro, provoca una limitazione della velocità e un aumento della latenza . La moltiplicazione dei tunnel consente di aumentare l'utilizzo del flusso inutilizzato.

Creazione di tunnel

Per comunicare, un corrispondente deve creare un tunnel senza dover revocare il suo anonimato (in modo da far passare il suo messaggio ai colleghi). Il creatore del tunnel deve prima selezionare i peer che potenzialmente parteciperanno al suo tunnel. Quindi crea una richiesta di richiesta (TunnelBuildMessage) che passerà attraverso i peer selezionati prima di tornare al creatore con le risposte di ciascuno.

Selezione tra pari

La selezione dei peer viene effettuata sulla base di determinati criteri. Questi criteri includono, tra gli altri, i tempi di risposta e le larghezze di banda. Questa selezione viene effettuata sulla base delle prestazioni, dell'affidabilità o del grado di anonimato ricercato dall'utente.

Creazione di TunnelBuildMessage

Il TunnelBuildMessage è un messaggio costruito dal tunnel creatore . Verrà utilizzato per elencare le risposte dei pari che accettano di partecipare o meno al tunnel. Se tutte le risposte sono positive, viene creato il tunnel. Questo messaggio è composto da otto fogli di registrazione. Un modulo di registrazione contiene la richiesta di partecipazione di un pari. Un tunnel può quindi avere un massimo di otto peer.

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

Descrizione di un modulo di registrazione

Chiave del livello del tunnel AES-256 e chiave IV del tunnel AES -256  : chiavi di crittografia che verranno utilizzate durante le transazioni nel tunnel, se costruito.

AES-256 reply IV e chiave di risposta AES-256  : chiave di crittografia della risposta e il suo vettore di inizializzazione , consente al peer di crittografare la sua risposta prima di inoltrare il messaggio.

ID messaggio successivo  : il peer successivo nel tunnel . Colui a cui inviare il messaggio dopo aver risposto.

Le altre opzioni consentono di verificare l'integrità del messaggio ma anche di aggiungere ulteriori informazioni alla risposta.

Prepararsi a inviare

Prima di inviare TunnelBuildMessage , il creatore del tunnel crittografa questo messaggio in due modi successivi. Tramite crittografia asimmetrica che mantiene riservate le informazioni sulla rete, quindi mediante crittografia simmetrica che garantisce che il messaggio sia passato nell'ordine stabilito dal creatore:

Crittografia asimmetrica  : ogni modulo di registrazione è crittografato con la chiave pubblica del peer corrispondente, in modo che ogni peer acceda solo al suo modulo di registrazione.

Crittografia simmetrica  : il messaggio viene quindi crittografato da più livelli in modo da esporre il file solo al momento opportuno. La crittografia avviene in modo tale che quando un peer crittografa il messaggio con la sua risposta, la scheda di registrazione del peer successivo può essere decrittografata da esso. Puoi pensarla come una cipolla a cui viene rimosso uno strato a ogni trasmissione dall'uno all'altro. Ad esempio, un tunnel con tre peer A, B e C:

Il record dell'ultimo peer del tunnel (C) è crittografato con la chiave di risposta del penultimo (B) in modo tale che quando B crittografa la sua risposta, il record di registrazione di C può essere decrittografato da C. i record di B e C sono crittografati con la chiave di A in modo che B possa essere letto solo dopo A.

Elaborazione peer di TunnelBuildMessage Recupero file

Quando un peer riceve un TunnelBuildMessage , c'è solo una scheda di registrazione che non è crittografata simmetricamente. Decifra questo file con la sua chiave privata per recuperare la richiesta di partecipazione al tunnel .

Scelta della partecipazione

Quando il file viene decifrato, sostituisce il contenuto del file con la sua risposta, o partecipa al tunnel o no. Se rifiuta, fornisce la sua ragione per il rifiuto.

Crittografia dei messaggi

Una volta che la risposta è stata creata e scritta nel modulo di registrazione, crittografa simmetricamente il modulo di registrazione con la chiave fornita nella richiesta. Quindi crittografa le altre schede di registrazione. La crittografia degli altri file ha come conseguenza la rimozione di un livello di crittografia simmetrica , quindi il file del destinatario successivo non ha più la crittografia simmetrica. È pronto per essere decifrato dal destinatario.

Vai al prossimo

L'ultima operazione eseguita dal peer durante la creazione del tunnel consiste nel passare TunnelBuildMessage al destinatario successivo. Il destinatario successivo viene menzionato nel modulo di registrazione durante la richiesta.

L'ultimo pari che partecipa alla creazione del tunnel è il creatore del tunnel. Decrittografa i moduli nell'ordine inverso della crittografia simmetrica, eseguita durante la creazione di TunnelBuildMessage , per recuperare le risposte.

Meccanismo di instradamento

L'I2P risponde al problema del routing cercando di non compromettere l'anonimato, la qualità della rete (latenza e throughput) e gli attacchi di negazione sull'intera rete.

NetdB

Il concetto è semplice ma importante, il NetdB (per database di rete ) è un database contenente gli identificatori dei router nella rete . Questo database è distribuito ed è simile a una tabella di routing in un router convenzionale (tranne che qui contiene le chiavi di identificazione dei router I2P). Ha usato il DHT di Kademlia alla base come soluzione di ripiego, ma questo è stato abbandonato.

Router Floodfill

Alla condivisione dei metadati dalla rete , viene inizializzato il peer floodfill (un piccolo numero di router I2P utilizza questo algoritmo, l'altro utilizza un derivato Kademlia ma che ora non viene più utilizzato). Quando un peer Floodfill immette una nuova chiave di crittografia nel database di rete, un altro peer Floodfill scelto a caso richiede di nuovo questa chiave, quindi se è valida il peer si avvicina alla prima e ripubblica la chiave. Alla fine i peer floodfill condividono la loro chiave interrogando costantemente il database e facendo una copia delle chiavi valide nella loro memoria locale, il che produce un effetto di cambio di prossimità tra i peer floodfill (i peer si avvicinano). Tutti i dati memorizzati nel database si auto-autenticano verificando la firma dell'elemento memorizzato. I dati vengono verificati con un timestamp , i router controllano regolarmente l'ora interrogando un server SNTP (pool.ntp.org) e rilevano incongruenze a livello di trasporto (per evitare attacchi). In parole povere , i router Floodfill assicurano la corrispondenza delle chiavi, l'instradamento delle informazioni e il trasporto dei dati nella rete (da 3 a 5 router Floodfill garantiscono teoricamente il corretto funzionamento di un set di 10.000 router sulla rete). L'algoritmo utilizzato non è un algoritmo completo ma è stato adattato per soddisfare la necessità di I2P senza gravare sull'implementazione .

Abbandono di Kademlia

Gli algoritmi di Kademlia sono stati utilizzati per lo scambio di metadati tra router . Questa soluzione è stata abbandonata , A causa delle difficoltà di impostazione dell'algoritmo. L'algoritmo richiedeva un minimo di risorse (pc e processore ) che i router non potevano assumere (buona idea sulla carta ma non in questa applicazione).

Informazioni sui router

Il router memorizza solo le informazioni essenziali per l'invio di messaggi sulla rete . Queste sono la sua identità (una chiave ElGamal pubblica a 2048 bit, una chiave DSA pubblica e quindi un certificato ) e gli indirizzi (un elenco di indirizzi IP , porte e set di opzioni di pubblicazione). La chiave di questa struttura è un SHA256 dell'identità dei router. Finché la versione di I2P non è nella sua versione 1.0, le opzioni di pubblicazione eseguono il debug dei dati .

Ricerca nella rete di un router specifico

In un sistema così distribuito , la ricerca di informazioni potrebbe sembrare una ricerca in un DHT tradizionale (come quello effettuato nelle reti in P2P ). Ma dato che la rete è volatile e in continua evoluzione (vista la durata di 10 minuti di validità del tunnel ), la ricerca iterativa è facilitata dal fatto che l'informazione non si trova sul router più vicino ma sui router aventi una chiave di identificazione vicina a SHA 256 (identità del router + un timestamp nel formato AAAAMMGG), che consente di avere un insieme di router con le informazioni richieste. Ce qui permet également un renouvellement de la place des informations sur le réseau et une protection contre les attaques (car pour attaquer une machine avec ce principe, l'emplacement des informations change tous les jours, obligeant l'attaquant à recréer son attaque à chaque ora). Poiché i dati di ricerca sono sensibili, passano attraverso tunnel di esplorazione diversi dai tunnel di dati.

Immersione del carico utile

L'immersione del payload permette di nascondere i dati effettivamente inviati o ricevuti dall'utente di un router I2P. L'immersione è molto importante poiché è questa che protegge l'anonimato nei confronti di un aggressore esterno che ha una visione d'insieme della rete.

Attacchi da un router di rete

Nella sua progettazione, gli sviluppatori tengono conto degli attacchi e li elencano per garantire la protezione degli utenti e della rete (per evitare, ad esempio, un sovraccarico di router floodfill ).

Note e riferimenti

  1. "  https://staas.home.xs4all.nl/t/swtr/documents/wt2015_i2p.pdf  "
  2. "  Confronto di reti anonime  " (accesso 20 dicembre 2009 )
  3. http://i2pbote.i2p.us
  4. http://wiki.vuze.com/w/I2P_HowTo
  5. (a) I2P squadra, "  Come Tunnel Routing Opere  " (accessibile 18 Dicembre 2009 )
  6. "  TOR, THE ENCRYPTED FACE OF THE INTERNET - CAMILLE BOSQUÉ  " , su www.camillebosque.com (visitato il 10 aprile 2016 )
  7. (in) I2P Team "  I2P's Threat Model - Predecessor attack  " (accesso 18 dicembre 2009 )
  8. (a) Matthew K. Wright , Micah Adler , Brian Neil Levine e Clay Shields , Attacchi di registrazione passiva contro sistemi di comunicazione anonimi ,giugno 2007, 34  p. ( leggi online )
  9. "  Implementazione del tunnel  "

Appendici

Articoli Correlati

  • Flood fill (in inglese: Floodfill ) termine che ispira I2P a qualificare alcuni nodi
  • P2P anonimo (contiene un elenco di software)
  • Freenet  : rete complementare.
  • GNUnet  : rete P2P e F2F anonima con condivisione di file. Software multifunzione e multipiattaforma. (Progetto GNU , scritto in C).

link esterno