1 Principe

Lorsqu’un client veut se connecter à un serveur, celui-ci envoie sur le réseau des paquets contenant l’adresse du serveur ainsi que son adresse personnelle (ce qui lui permet de recevoir les paquets de retour). De plus toute personne écoutant la ligne peut savoir à qui se connecte le client et savoir ce qu’ils se disent. Nottament, la loi française oblige les fournisseurs d’accès à conserver les logs de connexions pendant deux ans. Ces logs doivent contenir au moins l’adresse source et de destination de chaque connexion. Allez vérifier sur le site de la CNIL (http://www.cnil.fr) les informations qui sont disponibles pour le serveur.

Pour de multiples raisons (voir le site de TOR) on peut souhaiter être anonyme, ou au moins qu’il soit plus difficile d’écouter la conversation entre un client et un serveur.

Pour cela, on peut utiliser un protocole qui va transférer tous les paquets sur un proxy intermédiaire qui se fera passer pour le client. Mais ce niveau de confidentialité est souvent trop faible. En effet, même si les connexions entre le client et le proxy sont chiffrées, il est toujours possible de retrouver votre chemin. Un tiers peu se faire passer pour le proxy de confiance, un tiers peut attaquer le proxy et écouter tout ce qui se passe. Il est facile en étudiant la quantité de débit de ce qui entre et qui sort du proxy de savoir quel client est connecté à quel serveur.

Il semble naturel de vouloir améliorer ce système en combinant plusieurs routeurs intermédiaires. Chacun de ces routeurs ne connaissant que son prédécesseur et son successeur. Seul le dernier des routeur pouvant avoir une version non chiffrée des données transmise (mais ignorant qui est le vrai client). Cette fois-ci l’analyse du réseau se révèlera beaucoup plus délicate.

La création d’un tel réseaux augmentant sensiblement l’anonymat se fera, dans ce projet, en plusieurs étapes :

  1. Création d’un contrôleur et d’un routeur n’utilisant pas de chiffrement des données : Le programme de contrôle s’occupant de créer un chemin, le programme de routage se contentant de faire l’intermédiaire.
  2. Ajout du chiffrement symétrique : ajout d’un service de la part des routeurs (envoi de la clé symétrique), le contrôleur chiffre plusieurs fois les données.
  3. Protocole de transfert de clé sécurisé : utilisation de clés publiques pour le transfert des clés symétriques.
  4. Ajout d’un système publication des routeurs : il faut que les contrôleurs puissent avoir accès aux adresses des routeurs.

Pour entrer plus en détail voilà comment tout doit fonctionner :

Le contrôleur possède la liste des routeurs disponibles sur le réseau. Soit il l’obtient d’un serveur centralisé, soit il l’obtient de manière décentralisée en entrant en contact avec les routeurs déjà connus. Dans un premier temps, on considèrera un moyen statique d’obtention de la liste des routeurs par exemple celle-ci sera contenue dans un fichier auquel le contrôleur aura accès.

Dans l’exemple que nous considérons, A est un client standart.

Lorsque A veut parler à B, le contrôleur établi un chemin chiffré entre les routeurs de manière à ce que le dernier routeur se comporte comme le client A.

exemple de routage en onion 1

Lorsque A veut se connecter à D, le chemin de routeur ne change pas nécessairement :

exemple de routage en onion 2

Au bout d’un certain temps, un nouveau chemin est établi par le contrôleur :

exemple de routage en onion 3

De plus le contrôlleur et les routeurs doivent pouvoir gérer plusieurs connexions simultanées.