I2P (« ») est un réseau anonyme offrant une simple couche réseau logicielle de type réseau overlay, que les applications peuvent employer pour envoyer de façon anonyme et sécurisée des informations entre elles. La communication est chiffrée de bout en bout.
Au total, quatre couches de chiffrement sont utilisées pour envoyer un message. L'anonymat est assuré par le concept de « mix network », qui consiste à supprimer les connexions directes entre les pairs qui souhaitent échanger de l'information. À la place, le trafic passe par une série d'autres pairs de façon qu'un observateur ne puisse identifier l'expéditeur ni le destinataire de l'information. Chaque pair peut, à sa décharge, dire que les données ne lui étaient pas destinées (déni plausible).
Sur Internet, on identifie un destinataire par une adresse IP et un port. Cette adresse IP correspond à une interface physique (modem ou routeur, serveur). Mais, sur I2P, on identifie un destinataire par une clef cryptographique.
Contrairement à l'adressage IP, on ne peut pas désigner la machine propriétaire de cette clef. Du fait que la clef est publique, la relation entre la clef et l'interface qui en est propriétaire n'est pas divulguée.
Concept technique Les « destinations » (exemples : serveur Web, IRC, jeu) sont des identifiants cryptographiques (et non des adresses IP) définis par une paire de clefs asymétriques (couple clef privé/clef publique). La destination est déterminée par l'identifiant d'un hôte et le numéro de port à joindre. Ça peut être un serveur POP, un serveur SMTP, un serveur IRC, un serveur Web, un serveur SVN ou Git (Gitea), un serveur newsgroup
Le routeur construit des tunnels pour véhiculer les messages entrant et sortant. Pour créer un tunnel, le routeur demande à l'un des pairs auquel il est connecté de former ce tunnel. Ce pair va ensuite contacter à son tour un autre pair en lui demandant d'être le maillon suivant de la chaîne de pairs formant le tunnel. Pour joindre une destination cryptographique — et donc un pair — il faut savoir à quelle « sortie » de tunnel s'adresser, c'est pour résoudre ce problème qu'une certaine classe de routeurs particulière a été ajoutée au réseau. Il s'agit des Floodfill. Ceux-ci tiennent à jour une liste des correspondances entre les tunnels et les destinations. De cette façon, quand un routeur souhaite joindre une destination, il demande au Floodfill à quel tunnel il doit s'adresser pour contacter cette destination. Le nombre de routeurs Floodfill augmentera donc au fur et à mesure que le réseau grandira. Tout est automatique, si le réseau a besoin de nouveaux Floodfill, les routeurs remplissant les conditions de vitesse, stabilité et nombre de connexions le deviendront automatiquement.
Tous les routeurs du réseau participent au transport des messages des autres routeurs et permettent ainsi de rendre non distinguable le trafic que vous générez en le noyant dans le flux constant du réseau. Il est très complexe pour un attaquant de déterminer si les données vous étaient vraiment destinées ou si elles ne faisaient que transiter par vous.
Le poumon d'I2P est I2PTunnel, qui permet de gérer les tunnels entrants et sortants. On peut notamment y créer les siens comme un tunnel HTTP qui pointe vers le port 80 de votre machine pour héberger votre propre eepsite et un autre vers votre serveur Jabber ou POP3.
Il existe une implémentation du protocole en C++ nommée i2pd, .
Applications Comme pour les VPN ou les darknet, I2P exploite la tunnelisation pour fournir un « réseau dans le réseau ». Contrairement à la majeure partie des logiciels de partage de fichiers en pair à pair en P2P anonyme, I2P se concentre sur une gestion autonome du réseau et sur la fourniture d'une couche de transport anonyme.. Quand il est utilisé seul, I2P ne fournit pas les services que l'on peut trouver sur Internet (courriel, téléchargement, web). I2P est toutefois livré avec quelques applications pour retrouver quelques services courants tout en conservant les qualités de confidentialité et d'anonymisation offertes par le réseau.
Le développement d'applications exploitant le réseau est donc réalisable sans avoir à modifier le projet I2P. De cette façon, on peut voir des applications exploitant le réseau I2P qui utilisent les mêmes protocoles que ce que l'on trouve sur Internet (ex : iMule).
IRC I2P inclut d'origine un réseau IRC anonyme : on peut s'y connecter en utilisant un logiciel client IRC (peu importe lequel) pointant vers l'adresse serveur 127.0.0.1 et sur le port 6668.
Exemples de canaux les plus fréquentés : #i2p-fr, #i2p-help, #i2p, #anonops (Anonymous).
Fournies d'origine I2PSnark : client BitTorrent pour le téléchargement anonyme. I2PSnark supporte les liens au standard Magnet, ce qui simplifie le partage de fichiers. Susimail : client webmail de courrier électronique anonyme. SusiDNS : permet de gérer les adresses de « eepsites » (sites Web anonymes) par syndication (gestion décentralisée).
Optionnelles I2P-Bote : c'est un système de courrier électronique entièrement décentralisé et distribué.. Il permet des identités différentes et n'expose pas d'en-têtes de courrier électronique. Actuellement (), il est toujours en version bêta et peut seulement être accédé via son interface d'application web, mais le support de POP est planifié. Tous les comptes courrier Bote sont d'une manière transparente cryptés de bout en bout et, facultativement, signés par la clé privée de l'expéditeur, enlevant ainsi le besoin de PGP ou d'un autre logiciel de vie privée. I2P-Bote apporte de l'anonymat supplémentaire en autorisant l'utilisation de relais de courrier qui ajoutent des délais variables. Comme il est décentralisé, il n'y a aucun serveur de courrier électronique qui pourrait lier des identités de courrier électronique différentes comme communiquant avec l'une avec l'autre (par profilage) : même les nœuds retransmettant les courriers ne connaissent pas l'expéditeur et en dehors de l'expéditeur et du destinataire, seule la fin du parcours de courrier à haute latence et les nœuds de stockage savent à qui (à quel nœud I2P - l'adresse IP de l'utilisateur restant cachée par I2P) le courrier est destiné. L'expéditeur original pouvant être parti hors connexion depuis longtemps avant que le courrier ne devienne disponible de l'autre côté. I2P-Messenger : I2P possède son système de messagerie instantanée anonyme, chiffrée de bout en bout. I2P-Messenger fonctionne de manière décentralisée. Syndie : gestionnaire sécurisé de blogs et forums, qui permet la publication de contenu (par syndication de contenu) et l'échange de messages entre utilisateurs.
Partage de fichiers en direct iMule : logiciel de partage de fichiers en pair à pair de la famille *Mule (ex: eMule, aMule). Ne fonctionne plus car non-maintenu. NachtBlitz : logiciel compatible avec le réseau iMule. Ne fonctionne plus car non-maintenu. : dérivé du logiciel qui est à l'origine un client Gnutella. Ne fonctionne plus car non-maintenu. Vuze (anciennement nommé Azureus) : client BitTorrent. Il contient un plugin lui permettant de fonctionner avec I2P., il est plutôt recommandé d'utiliser BiglyBT ou I2PSnark car Vuze ne respecte pas la vie privée. BiglyBT : dérivé actif et maintenu de Vuze, il est plutôt recommandé d'utiliser BiglyBT aulieu de Vuze..
Pour les développeurs Sont également fournies des API, comme SAM ou I2CP, pour faciliter le développement de logiciels tels que de nouvelles applications reposant sur I2P (SDK, routeur...).
I2PTunnel Indirection des communications Les correspondants ne s'exposent pas directement. Ils utilisent chacun une série de routeurs I2P comme intermédiaires pour créer un I2PTunnel. Ces tunnels sont unidirectionnels et utilisés pour masquer le destinataire comme l'expéditeur . On peut donc distinguer deux catégories d'I2PTunnel : les tunnels sortants pour masquer les expéditeurs ; les tunnels entrants pour masquer les destinataires.
Pour contacter un membre du réseau, il faut trouver les routeurs I2P qui correspondent aux entrées des tunnels mis à disposition par le destinataire. Cette recherche se fait à l'aide du Network Database.
Anonymat au sein de l'indirection Un chiffrement, dit « en gousse d'ail » pour marquer sa différence avec le chiffrement en oignon de TOR., est utilisé sur les messages qui transitent par les I2PTunnel. Ce chiffrement assure : la confidentialité du message ; et que les intermédiaires ne puissent connaître que les routeurs précédant et suivant du tunnel.
Le point 1 empêche de pouvoir utiliser les informations contenues dans le message pour identifier les correspondants. Le point 2 empêche les intermédiaires de connaître leur position dans le tunnel et donc que ces intermédiaires puissent différencier correspondants et intermédiaires.
Taille d'un tunnel et qualité d'anonymat La taille des I2PTunnels est choisie par celui qui le crée. Elle influe de façon conséquente sur l'ensemble des mécanismes qui protège l'anonymat.
Un tunnel sans intermédiaire offre une protection puisqu'on ne peut pas distinguer correspondants et intermédiaires depuis l'intérieur du réseau ; un déni plausible les protège. Cependant un attaquant extérieur au réseau et possédant les ressources pour superviser le trafic d'un tel tunnel peut monter une attaque par analyse statistique...
Lorsque des intermédiaires interviennent il faut compromettre l'ensemble des intermédiaires avant de monter une attaque par analyse statistique. Le mécanisme de mélange de trafic s'attaque à ce problème.
Limitations et contraintes de l'I2PTunnel Si l'I2PTunnel est relativement efficace pour préserver l'anonymat à l'intérieur du réseau, seul il n'est plus suffisant pour qui peut avoir une vue globale du réseau I2P. Il suffirait d'observer le trafic pour constater où il commence et où il s'arrête.
Un tunnel, I2P ou autre, entraîne une limitation du débit et une augmentation de la latence. La multiplication des tunnels permet d'augmenter l'utilisation du débit inutilisé.
Création de tunnel Pour communiquer, un correspondant doit créer un tunnel sans avoir à lever son anonymat (afin de faire transiter son message par des pairs). Le créateur du tunnel doit tout d'abord sélectionner les pairs qui participeront potentiellement à son tunnel. Ensuite il crée une requête de demande (TunnelBuildMessage) qui transitera par les pairs sélectionnés avant de revenir au créateur avec les réponses de chacun.
Sélection des pairs La sélection des pairs s'effectue sur la base de certains critères. Parmi ces critères figure entre autres, leurs temps de réponse et leurs bandes passantes. Cette sélection se fait en fonction du rendement, de la fiabilité ou du degré d'anonymat recherché par l'utilisateur..
Création du TunnelBuildMessage Le TunnelBuildMessage est un message construit par le créateur du tunnel. Il va servir à recenser les réponses des pairs acceptant de participer ou non au tunnel. Si toutes les réponses sont positives alors le tunnel est créé. Ce message est composé de huit fiches d'enregistrement. Une fiche d'enregistrement contient la requête de participation d'un pair. Un tunnel peut donc avoir huit pairs maximum.
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 Description d'une fiche d'enregistrement
AES-256 tunnel layer key et AES-256 tunnel IV key : clés de chiffrement qui seront utilisés lors des transactions dans le tunnel si celui-ci est construit.