I2P

I2P
I2P - Le Réseau Anonyme
Importez le logo de ce logiciel
Développeur https://www.i2p2.de/team.html
Dernière version 0.8.10 (20 octobre 2011) [+/-]
Licence Disponible sous plusieurs licences libres
Site web www.i2p2.de

I2P (« Invisible Internet Project ») est un réseau anonyme, offrant une simple couche logicielle que les applications peuvent employer pour envoyer de façon anonyme et sécurisée des messages entre elles. La communication est chiffrée de bout en bout.

Au total il y a quatre couches de chiffrement utilisées pour envoyer un message. L'anonymat est assuré par le concept de « mixed 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 à ce qu'un observateur ne puisse déterminer qui est l'expéditeur initial et qui est le destinataire final de l'information. Chaque pair peut, à sa décharge, dire que les données ne lui étaient pas destinées.

Sur Internet on identifie un destinataire avec une adresse IP et un port. Cette adresse IP correspond à une interface physique (modem ou routeur, serveur, etc.). Mais sur I2P on identifie un destinataire avec 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 soit publique, la relation entre la clef et l'interface qui en est propriétaire n'est pas divulguée.

Sommaire

Concept technique

Les "destinations" (serveur Web, IRC, jeu, etc) sont des identifiants cryptographiques (et non des adresses IP) définis par une paire de clefs asymétriques (couple clef privé:clef publique). Une destination est l'identifiant d'un hôte et le numéro de port à joindre. Cela peut être un serveur POP, un serveur SMTP, un serveur IRC, un serveur Web, un serveur SVN, un serveur newsgroup, etc...

Le routeur construit des tunnels pour véhiculer les messages entrants et sortants. 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 particulier a été ajoutée au réseau. Il s'agit des « Floodfill ». Ces derniers 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 est le tunnel auquel il doit s'adresser pour contacter cette destination. Le nombre de routeur Floodfill augmentera donc au fur et à mesure que le réseau grandira. Heureusement 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 elle ne faisaient que transiter par vous.

Le poumon d'I2P est I2PTunnel, il permet de gérer les tunnels entrants et sortants. On peut notamment y créer les siens comme par exemple 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.

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 réseaux anonymes, I2P se concentre sur une gestion autonome du réseau et à la fourniture d'une couche de transport anonyme[1]. Quand il est utilisé seul, I2P ne fournit pas les services que l'on peut trouver sur Internet (courriel, téléchargement, web, etc.). I2P est toutefois livré avec quelques applications pour retrouver quelques services courant 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 peut se faire sans avoir à modifier le projet. 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.

IRC

I2P fourni un reseau IRC anonyme : On peut se connecter de manière anonyme sur ce reseau en utilisant un client IRC (peu importe lequel) pointant vers le serveur 127.0.0.1 sur le port 6668. Cet IRC est anonyme. Il y a #i2p-fr, #i2p-help et #i2p.

Fournies d'origine

  • I2PSnark : Client BitTorrent pour le téléchargement anonyme.
  • Susimail : Client webmail de messagerie anonyme.
  • SusiDNS : Permet de gérer les adresses de « eepsites » (sites Web anonymes) par syndication (gestion décentralisée).

Optionnelles

  • Vuze (anciennement Azureus) : Client BitTorrent. Contient un plugin lui permettant de fonctionner sur I2P.
  • iMule : Logiciel de partage de fichiers de la famille *Mule (ex: eMule, aMule). Peut fonctionner en stand alone, c'est-à-dire sans le routeur i2p externe mais en utilisant un routeur interne i2p propre à imule, néanmoins cela est déconseillé : La version du routeur interne se fait un peu vieille et vous gagnerez en stabilité et en rapidité en utilisant imule avec le vrai routeur i2p, en externe donc.
  • I2Phex : Client Gnutella (partage de fichiers anonyme) dérivé de Phex.
  • Syndie : Gestionnaire de blog sécurisé qui permet la publication de contenu (syndication).
  • 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.

Pour les developpeurs

Il est fourni également une API, pour faciliter le développement de nouvelles applications se reposant sur I2P (SDK, routeur, ...).

L'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[2]. 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, appelé 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 :

  1. la confidentialité du message
  2. 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[2].

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[3],[4].

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 s'arrête.

Un tunnel, I2P ou autre, entraine une limitation du débit et une augmentation de la latence. La multiplication des tunnels permet d'augmenter l'utilisation du débit inutilisé.

La 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 certain critères. Parmi ces critères figure entre autres, leurs temps de réponse et leurs bandes passante. Cette sélection se fait en fonction du rendement, de la fiabilité ou du degré d'anonymat recherché par l'utilisateur[5].

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.

AES-256 reply IV et AES-256 reply key : clé de chiffrement de la réponse et son vecteur d'initialisation, il permet au pair de chiffrer sa réponse avant de faire suivre le message.

next message ID : le pair suivant dans le tunnel. Celui à qui doit être envoyé le message après avoir répondu.

Les autres options permettent de vérifier l'intégrité du message mais aussi d'ajouter des informations supplémentaires à la réponse.

Préparation à l'envoi

Avant d'envoyer le TunnelBuildMessage, le créateur du tunnel chiffre ce message de deux façons successives. Par le chiffrement asymétrique qui permet de garder la confidentialité de l'information sur le réseau, puis par le chiffrement symétrique qui permet de s'assurer que le message a transité dans l'ordre établi par le créateur :

Chiffrement asymétrique : Chaque fiche d'enregistrement est chiffrée avec la clé publique du pair correspondant, de façon à ce que chaque pair n'accède qu'à sa fiche d'enregistrement.

Chiffrement symétrique : Le message est ensuite chiffré par plusieurs couches de façon à n'exposer la fiche qu'au moment opportun. Le chiffrement a lieu de tel manière que lorsque un pair chiffre le message avec sa réponse, alors la fiche d'enregistrement du pair suivant peut être déchiffrée par celui-ci. On peut voir cela comme un oignon auquel on enlève une couche à chaque transmission de l'un à l'autre. Par exemple, un tunnel avec trois pairs A, B et C :

La fiche du dernier pair du tunnel (C) est chiffrée avec la clé de réponse de l'avant dernier (B) de telle manière que lorsque B chiffre sa réponse alors la fiche d'enregistrement de C peut être déchiffrée par C. De même les fiches d'enregistrements de B et C sont chiffrées avec la clé de A afin que B ne puisse être lu qu'après A.

Traitement du TunnelBuildMessage par un pair

Récupération de la fiche

Lorsqu'un pair reçoit un TunnelBuildMessage, il n'y a qu'une seule fiche d'enregistrement n'étant pas chiffré symétriquement. Il déchiffre cette fiche avec sa clé privé afin de récupérer la demande de participation au tunnel.

Choix de participation

Lorsque la fiche est déchiffrée, il remplace le contenu de la fiche par sa réponse, soit il participe au tunnel, soit non. S'il refuse, il donne son motif de rejet.

Chiffrement du message

Une fois la réponse créée et écrite dans la fiche d'enregistrement, il chiffre symétriquement la fiche d'enregistrement avec la clé fournie dans la demande. Il chiffre ensuite les autres fiches d'enregistrements. Le chiffrement des autres fiches a pour conséquence de retirer une couche de chiffrement symétrique, ainsi la fiche du destinataire suivant n'a plus de chiffrement symétrique. Elle est prête à être déchiffré par le destinataire.

Passer au suivant

La dernière opération exécuté par le pair lors de la création du tunnel et de faire passer le TunnelBuildMessage au destinataire suivant. Le destinataire suivant est mentionné dans la fiche d'enregistrement lors de la requête.

Le dernier pair participant à la création du tunnel est le créateur du tunnel. Il déchiffre les fiches dans l'ordre inverse du chiffrement symétrique, effectué lors de la création du TunnelBuildMessage, pour récupérer les réponses.

Mécanisme de routage

L'I2P réponds à la problématique du routage en essayant de ne pas compromettre l'anonymat, la qualité du réseau (latence et débit) et aux attaques de déni sur l'ensemble du réseau.

Le NetdB

La notion est simple mais importante, la NetdB(pour network database)est une base de donnée contenant les identifiants des routeurs dans le réseau. Cette base est distribuée et s'apparente à une table de routage dans un routeur conventionnel(sauf qu'ici elle contient les clés d'identification des routeur I2P). Elle utilisait le DHT de Kademlia à la base comme solution de repli mais cette solution a été abandonnée.

Les routeurs floodfills

Pour effectuer le partage des metadonnées du réseau, il est initialisé des pairs floodfill (un petit nombre des routeurs I2P utilise cet algorithme, les autres utilisaient un dérivé de kademlia mais qui n'est plus utilisé maintenant). Quand un pairs floodfill entre une nouvelle clé de cryptage dans la base de donnée du réseau, un autre pair floodfill choisi aléatoirement redemande cette clé, puis si elle est valide le pair se rapproche du premier et republie la clé. A la fin les pairs floodfill partage leur clé en interrogeant sans cesse la base et en faisant une copie des clés valides dans leur mémoire locale, ce qui produit un effet de changement de proximité des pairs floodfill entre eux(les pairs se rapprochent). Toutes les données stockées dans la base s'auto-authentifient en vérifiant la signature de l'élément stocké. Les données sont vérifiées avec un horodatage, les routeurs vérifient régulierement l'heure en interrogeant un serveur SNTP(pool.ntp.org) et détectent les incohérences au niveau de la couche transport(pour éviter les attaques). Pour faire simple les routeurs floodfill assurent la correspondance des clés, le routage des informations et le transport des données dans le réseau(3-5 routeurs floodfill assurent en théorie le bon fonctionnement d'un ensemble de 10.000 routeurs sur le réseau). L'algorithme utilisé n'est pas un algorithme complet mais a été ajusté pour correspondre au besoin d'I2P sans alourdir l'implémentation.

Abandon de Kademlia

Les algorithmes de kademlia était utilisées pour les échanges de metadonnées entre les routeurs. Cette solution fût abandonnée dû aux difficultés de mis en place de l'algorithme. L'algorithme demande un minimum de ressources(pc et cpu) que les routeurs ne pourront pas assumer(bonne idée sur le papier mais pas dans cette application).

Les infos routeurs

Les routeurs stockent uniquement les informations qui lui sont primordiales pour envoyer des messages sur le réseau. Il contient son identité (une clé ElGamal de 2048bits public, une clé DSA public puis un certificat), les adresses(une liste d'adresse IP, de port, et des ensembles d'options de publication). La clé de cette structure est un SHA256 de l'identité du routeurs. Tant que la version de l'I2P n'est pas en sa version 1.0 les options de publication sont des données de debogage

Recherche dans le réseau d'un routeur précis

Dans un tel système distribué, la recherche d'une information pourrait ressembler à une recherche dans une DHT traditionnelle(comme celle réalisée dans les réseaux en P2P). Mais étant donné que le réseau est volatil et en constante évolution (vue la durée de 10 minutes de validité des tunnels), la recherche itérative est facilitée du fait que l'information n'est pas sur le routeur le plus proche mais sur les routeurs ayant une clé d'identification proche du SHA256(identité_du_routeur+un_horodatage_sous_la_forme_AAAAMMJJ), permettant d'avoir un ensemble de routeurs ayant l'information demandée. 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, la place des informations change tous les jours, et oblige l'attaquant à recréer son attaque à chaque fois). Les données de recherche étant sensibles, elles transitent dans des tunnels d'exploration différents des tunnels de données.

Immersion de la charge utile

L'immersion de la charge utile permet de cacher les données effectivement envoyées ou reçues par l'utilisateur d'un routeur I2P. L'immersion est très importante puisque c'est elle qui protège l'anonymat face à un attaquant extérieur qui dispose d'une vue d'ensemble du réseau.

Attaques d'un routeur du réseau

Dans sa conception, les développeurs prennent en compte les attaques et les répertorient pour assurer une protection des utilisateurs et le réseau (pour éviter par exemple une surcharge des routeurs foodfills).

Voir aussi

Articles connexes

Sources externes

Notes et références

  1. Comparatif des réseaux anonymes. Consulté le 20/12/2009
  2. a et b (en)I2P Team, « How Tunnel Routing Works ». Consulté le 18/12/2009
  3. (en)I2P Team, « I2P's Threat Model - Predecessor attacks ». Consulté le 18/12/2009
  4. (en) Matthew K. Wright, Micah Adler, Brian Neil Levine et Clay Shields, Passive-Logging Attacks Against Anonymous Communications Systems, juin 2007, 34 p. [lire en ligne] 
  5. Tunnel Implementation

Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article I2P de Wikipédia en français (auteurs)

Поможем сделать НИР

Regardez d'autres dictionnaires:

  • I2P — Das Anonyme Netzwerk Basisdaten Aktuelle Version 0.8.11 (8. November 2011) …   Deutsch Wikipedia

  • I2p — Aktuelle Version: 0.7.2 (19. April 2009) Betriebssystem: Plattformunabhängig Kategorie: Overlay Netzwerk, Sicherheitssoftware Lizenz …   Deutsch Wikipedia

  • I2P — La Red Anónima I2P router console 0.7.7 Desarrollador Comunidad I2P …   Wikipedia Español

  • I2p — Développeur http://www.i2p2.de/team.html …   Wikipédia en Français

  • .i2p — Введение 2004 Тип домена псевдо домен верхнего уровня Статус действующий Регистратор I2P Назначение Обеспечение доступа к ресурсам сети i2p …   Википедия

  • I2P — Проверить нейтральность. На странице обсуждения должны быть подробности …   Википедия

  • I2P — Infobox Software name = I2P logo= caption = developer = I2P developers latest release version = 0.6.4 latest release date = release date|2008|10|6 operating system = Cross platform genre = Overlay network license = Free/Open Source… …   Wikipedia

  • Imule — Ein ed2k Client für das anonyme I2P Netzwerk. Basisdaten Aktuelle Version: 1.3.5 (10.12.2008) …   Deutsch Wikipedia

  • IMule — Ein ed2k Client für das anonyme I2P Netzwerk. Basisdaten Aktuelle Version 1.4.6 (4. November 20 …   Deutsch Wikipedia

  • IMule — Développeur iMule Team Dernière version …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”