Le réseau tor
Sommaire
Qu'est-ce que le réseau tor ?
Le réseau tor (The Onion Router) est un réseau superposé à Internet. Celui-ci permet d'établir des connexions anonymes, c'est à dire que personne sur le réseau ne connait la destination d'une requête et sa source en même temps.Pour garantir une connexion anonyme, le client utilise le routage en oignon (Onion routing) : la requête du client sera chiffrée plusieurs fois et passera par plusieurs routeurs appelés "onion routers" avant d'arriver au serveur[1].
Fonctionnement
On décrit ici le fonctionnement de tor comme il est décrit par les fondateurs du projet[1].Lorsqu'il utilise tor, le client ne va pas envoyer sa requête directement au serveur. Le client va établir un circuit (un chemin) à travers les "onion routers" (généralement 3) jusqu'au serveur.
Le client chiffre alors sa requête avec des clés de chiffrement symétriques partagées avec chaque routeur, en commençant par le dernier routeur. La requête sera donc chiffrée autant de fois qu'il y a de routeurs, avec des clés différentes. On appelle cette requête "onion" car elle possède plusieurs couches de chiffrement.
Ensuite, la requête est envoyée au premier noeud. À chaque routeur, une couche de l'oignon est déchiffrée par le routeur grâce à la clé qu'il partage avec le client. Le routeur peut alors transmettre l'oignon au noeud suivant grâce à l'adresse qui vient d'être déchiffrée. Après déchiffrement par le dernier noeud, les données ne sont plus chiffrées. Le dernier routeur communique alors le message à la destination, qui a accès uniquement à l'adresse IP de ce dernier routeur. Les connexions entre les routeurs et les connexions avec le client et la destination se font toutes via TCP.
Lorsque la destination souhaite répondre au client, le paquet fait le chemin dans le sens inverse. Il est cette fois-ci chiffré à chaque noeud avec des clés symétriques également partagées avec le client (les clés utilisées à l'aller et au retour sont différentes mais sont dérivées d'une même clé partagée entre le routeur et le client) et communiqué de noeud en noeud jusqu'au client.
Pour savoir où rediriger un paquer reçu, les routeurs utilisent un identifiant de circuit (circID) qui identifie leurs connexions avec les autres routeurs dans le cadre d'un circuit, ainsi qu'une table qui lie ces différents circID entre eux (car le même circID n'est pas utilisé par tous les routeurs pour un même circuit). Ainsi, lorsqu'il reçoit un message, le routeur lit son identifiant de circuit, regarde dans sa table à quelle autre identifiant de circuit celui-ci correspond, et peut finalement diriger le message vers la connexion qui correspond à cet identifiant de circuit, en remplaçant le circID reçu par le circID vers lequel le message est renvoyé. Une fois arrivé au client, le paquet est déchiffré grâce aux clés symétriques qui sont connues du client.
Grâce à ce système de chiffrement et de routage, aucun des routeurs ne connait ET le client ET la destination, ce qui permet de préserver l'anonymat du client.
Circuit emprunté
Pour établir le circuit qui va être utilisé pour communiquer avec la destination, le client choisit les noeuds selon des règles qui permettent d'assurer la fiabilité de la connexion :- Un noeud ne peut être utilisé plusieurs fois pour un même chemin[2]
- Deux noeuds ne doivent pas appartenir au même réseau ou être régits par le même opérateur[2]
- Un noeud choisi ne peut être hors-ligne ou invalide (mal configuré)[1]
Guard Nodes
Le premier noeud, celui qui communique directement avec le client, est particulier : il s'agit d'un "guard node".Pour garantir l'anonymat sur tor, il est important que les noeuds d'entrée et de sortie ne puissent pas être controlés par un même personne. En effet, si un attaquant contrôle ces deux noeuds, il peut connaitre la source et la destination de la requête et donc contrer tor.
Pour parer à cela, on peut réduire le nombre de guard nodes utilisés pour qu'il y ait moins de chances que l'un d'entre eux soit compromis. Pour cette raison tor, utilise seulement 3 guard nodes à la fois et en change rarement (tous les 120 jours)[3].
Ainsi, si le noeud de sortie est compromis mais pas le guard node, l'attaquant ne peut connaitre l'utilisateur tor. Cependant, si un guard node choisi est compromis, alors le client l'utilisera longtemps et pour beaucoup de ses requêtes. Mais même avec ce risque, il est préférable d'utiliser peu de guard nodes. En effet, si le guard node change à chaque requête, la probabilité d'en utiliser au moins une fois un qui soit compromis est très élevée, et il vaut mieux n'être jamais traqué, en prenant le faible risque de l'être pour un grand nombre de fois avec un guard node compromis, que d'être sûr d'être traqué au moins une fois. Ce choix est justifié par Tor : que l'attaquant vous observe une fois est aussi mauvais que l'attaquant vous observe plus souvent [4].
Directory Authorities
Les "Directory Authorities" (ou autorités responsables des répertoires), sont des relais controllés chacun par une organisation différente. Ceux-ci sont actuellement au nombre de 9[5].Les autorités de répertoire sont chargées de tenir une liste des noeuds tor disponibles. Lorsqu'un utilisateur souhaite utiliser un noeud tor, il doit se référer à ces listes et donc communiquer avec les autorités de répertoire. Les autorités de répertoire sont spécifiées dans le client tor, ainsi que leurs clés. Pour récupérer les listes, le client se connecte directement aux serveurs via http, sans passer par tor[6].
Lorsque l'état d'un relais est modifié, les autorités de répertoire en sont averties et mettent à jour leurs listes. Toutes les 30 minutes, celle-ci comparent leurs listes pour former un consensus[7].
Bridge Nodes
Tor permet d'accéder à Internet de manière anonyme et permet en cela la libre utilisation d'Internet dans des états autoritaires. Cependant, ces mêmes états pourraient bloquer tor en empêchant ses utilisateurs de se connecter à des noeuds tor. Il leur suffirait pour cela d'utiliser les listes produites par les noeuds répertoire, qui sont publiques.Pour parer à cela, il existe des noeuds appelés "bridge nodes" (pont), qui remplacent le guard node, et dont aucune liste n'est publiée, ce qui rend impossible la tâche d'en bloquer l'accès. Pour obtenir un pont, comme il n'en existe pas de liste, Tor met à disposition plusieurs moyens, comme visiter https://bridges.torproject.org ou entrer en contact avec une instance chargée de fournir des ponts[8].
Services Cachés
Les services cachés sont des services auxquels on peut accéder sans en connaitre l'adresse.Pour qu'un service soit accessible, il utilise des points d'introduction : il se connecte via tor à des relais et les avertis qu'il propose un service. Il doit également publier ses points d'introduction et sa clé publique sur un service de référencement ("lookup service"). Les services sont référencés selon un hash de leur clé publique.
Ainsi, lorsqu'un utilisateur veut se connecter à un service caché :
- L'utilisateur utilise le service de référencement pour connaître les points d'introduction du service : il se sert pour cela d'une URL en .onion qui contient en réalité la clé publique du service[9].
- Il choisit ensuite un "onion router" qui servira de point de rendez-vous, crée un circuit jusqu'à ce routeur, et lui communique un "cookie de rendez-vous" qui servira à identifier ce rendez-vous.
- L'utilisateur se connecte ensuite à un des points d'introduction du service caché via tor et communique le point de rendez-vous ainsi que le cookie de rendez-vous, le tout chiffré grâce à la clé publique du service, récupérée sur le service de référencement.
- Le point d'introduction communique ces informations au service caché qui crée alors un circuit jusqu'au point de rendez-vous et envoie le cookie de rendez-vous.
- Le point de rendez-vous connecte alors les deux circuits : l'utilisateur peut communiquer avec le service caché.
On pourrait en théorie utiliser les points d'introduction comme points de rendez-vous. Mais cette idée n'est pas développée par Tor, car regrouper ces points rendrait les attaques sur les points d'introduction plus efficaces (puisqu'elles influenceraient directement les connexions en cours avec le service caché) et forcerait le service caché à avoir un nombre de points d'introduction proportionnel à ses connexions puisque ceux-ci en seraient directement responsables[10].
Tor et les VPNs
Tor, tout comme les VPNs, permet une communication anonyme. Cependant, une différence majeure entre les VPNs et tor est que les VPNs centralisent les connections alors que tor est un réseau décentralisé. Lorsqu'une communication utilise un VPN, elle est entièrement sous son contrôle et doit faire confiance au VPN, tandis qu'en utilisant tor, aucune authorité ne régit la communication et il n'est besoin d'aucune confiance dans les noeuds utilisés puisque le design de tor permet justement cela.