Conserver son anonymat sur Internet : routage et oignons

Publié Par Frédéric Prost, le dans Internet, Sciences et technologies

Conserver son anonymat sur Internet, pour surfer ou envoyer des emails, devient de plus en plus important pour chacun. Mais comment cela marche-t-il pratiquement ?

Par Frédéric Prost.

Surfer en paix

Je suis sûr que comme tout un chacun cela vous ennuie quand quelqu’un lit par dessus votre épaule. Tant que ce n’est qu’agaçant ça va, mais supposons que vous habitiez en Corée du Nord et que vous vouliez consulter, au hasard, Contrepoints. Le fait que le commissaire politique soit au courant peut se révéler, comment dire, problématique. Plus sérieusement, on l’a vu dernièrement avec le printemps arabe, les affaires relatives à wikileaks etc., le fait de pouvoir naviguer, ou échanger, de manière anonyme sur internet n’est pas juste une question théorique ou un symptôme de paranoïaques en mal de sensations fortes.

Le problème est différent de celui de la sûreté des communications. Il est bien plus compliqué : ce qui est important est en plus que d’assurer le secret des messages échangés (ce qui est bien assuré par la cryptographie), de permettre aux correspondants de rester anonymes : le simple fait de consulter un site ou de savoir qu’untel échange avec untel peut faire courir des risques vitaux. L’objectif est donc de rendre impossible les liens entre messages envoyés et messages reçus. Ce que vous voulez est que personne en dehors de vous ne soit capable de dire à qui vous envoyez un mail. Cela paraît paradoxal : si personne ne connait le destinataire comment va-t on bien pouvoir lui acheminer le message ? Pourtant comme nous allons le voir c’est non seulement tout à fait possible mais c’est utilisé quotidiennement par des centaines de milliers de personnes à travers le monde.

Le paradoxe de la cryptographie

D’un point de vue pratique la cryptographie repose sur un paradoxe : un des buts des cryptosystèmes est de pouvoir communiquer de manière confidentielle à travers des canaux de communications non sûrs. Le paradoxe intervient quand on se rend compte que pour utiliser une solution cryptographique il faut posséder la clef de décryptage et donc que d’une manière ou d’une autre l’émetteur et le receveur ont du se mettre d’accord sur cette clef. Il faut donc posséder une communication sûre pour se mettre d’accord sur les clefs mais c’est justement quand on n’a pas de communications sûres qu’on cherche à utiliser la cryptographie ! Nous sommes devant un bel exemple de serpent qui se mord la queue.

Cependant en y réfléchissant de plus près il n’y a pas de raison fondamentale pour que la clef de codage soit la même que la clef de décodage. On parle alors de fonctions non-inversibles ou à sens unique. Un exemple intuitif d’une telle fonction pourrait être donné de façon suivante : si on vous demande de trouver le numéro de téléphone de quelqu’un dans un annuaire c’est très facile. Par contre si on vous donne un numéro de téléphone et que vous devez retrouver le nom de la personne qui lui correspond, et que votre seul outil est un annuaire, vous aurez un peu plus de mal (c’est d’ailleurs sur cette difficulté que s’est construit le business model de nombreuses entreprises d’annuaires inversés).

Un exemple mathématique connu est celui tout bête de la multiplication (très simple à réaliser) par rapport à celui de la factorisation. Savoir que 5 x 7 fait 35 est simple, mais retrouver 5 et 7 à partir de 35 est beaucoup moins évident. Bien sûr il faut imaginer ce problème pour des nombres comportant quelques centaines de chiffres : s’il est quasi immédiat de multiplier deux tels nombres il est très difficile de les factoriser. Le système RSA proposé par Rivest, Shamir et Adleman en 1977 repose sur cette difficulté à factoriser les nombres et est le premier cryptosystème asymétrique à clef publique.

De manière imagée on pourrait présenter les choses de la façon suivante. La cryptographie standard ressemble à un coffre-fort. Si vous voulez cacher une information il suffit d’enfermez le document dans le coffre-fort. Pour bien fermer la porte vous avez besoin d’une clef, d’où l’expression fermer à double-tour. Si vous voulez que quelqu’un d’autre ait accès aux informations il suffit de lui donner la même clef. La cryptographie à clef publique s’apparente plutôt à une boite munie d’un cadenas~: n’importe qui peut mettre un document dans la boite et refermer le cadenas, par contre seul celui qui possède la clef du cadenas peut l’ouvrir.

Ainsi pour utiliser un système à clef publique il faut commencer par produire une paire de clefs, d’une part la clef publique Kpub et la clef secrète qui lui correspond Kpriv. Nous noterons E(Kpub,m) l’encodage d’un message clair m, et D(Kpriv,mc) le décodage d’un message codé mc. Le système nous assure que décoder un message codé avec les bonnes clefs redonne bien le message original. Mathématiquement cela correspond à l’équation suivante :

D(Kpriv,E(Kpub,m))=m.

Ce système résout le paradoxe de la cryptographie car quand Alice veut communiquer de manière secrète avec Bob il lui suffit de demander à Bob de générer une paire de clefs et de lui fournir la clef publique. Comme il est très difficile (voir impossible) de déterminer la clef privée en ne connaissant que la clef publique, si un espion, disons Charlie, écoute les communications entre Alice et Bob il ne pourra que connaitre la clef publique. Or une fois encodé il faut connaître la clef privée pour décoder le message ainsi encrypté. C’est à dire qu’Alice peut crypter des messages mais elle sera incapable de décrypter ses propres messages (de la même manière que si on ferme un cadenas dont on ne possède pas la clef on ne peut pas l’ouvrir) ! En fait il n’y a que celui qui connait la clef privée qui peut le faire.

Les couches d’oignons

Le problème de l’anonymat dans un réseau de télécommunication est basique et semble incontournable. Supposons qu’Alice veuille communiquer avec Bob : il faut bien que d’une manière ou une autre Alice envoie à Bob son adresse pour que ce dernier puisse lui répondre. Dans le cas du surf sur internet Alice est votre navigateur dans lequel vous entrez une adresse web et Bob est l’ordinateur sur lequel se trouve le site que vous interrogez. Il faut bien que Bob sache où renvoyer les informations, donc, pour simplifier, votre adresse IP.

L’idée du routage en oignons est de faire transiter les messages à travers de multiples serveurs de tels manières à ce que chaque serveur sur le chemin n’ait connaissance que de l’adresse du prochain serveur sur le chemin. Ainsi si le premier serveur sait qui envoie la requête (l’adresse d’Alice), les serveurs suivants ne connaissent pas l’identité d’Alice. Inversement à la fin de la chaîne le dernier serveur du chemin est le seul à connaître l’identité de Bob. On peut résumer cela par le schéma suivant :

Les relais du réseaux (les ordinateurs marqués par un signe « + » vert sur le schéma) sont des serveurs spéciaux, ils servent à masquer les chemins par les messages pour aller d’Alice à Bob. Il faut imaginer des milliers de messages qui s’échangent entre eux. Ces messages étant cryptés on ne sait pas à qui ils appartiennent et au final même si notre espion Charlie à la possibilité de regarder tous les messages il sera incapable de savoir ceux qui correspondent à Alice et in fine il ne pourra pas savoir qu’Alice consulte le site web de Bob.

Reprenons notre présentation imagée avec les coffre-forts et les cadenas. L’idée du routage par oignons est d’utiliser plusieurs intermédiaires et de s’assurer que chacun des intermédiaires ne connaisse qu’une petite partie du chemin que votre lettre va suivre. Pour cela il faut commencer par récupérer une boîte munie d’un cadenas pour chaque coursier. Supposons qu’Alice en ait trois pour communiquer avec Bob et que les noms de ces coursiers sont Ulrich qui devra passer la lettre à Denis qui devra la passer Tristan, qui finalement délivrera la lettre à Bob.

Alice va procéder de la manière suivante : elle va enfermer la lettre avec l’adresse de Bob dans la boîte de Tristan, sur cette boîte elle va poser une feuille de papier contenant l’adresse de Tristan et enfermer le tout dans la boîte de Denis. Alice va répéter encore une fois cette méthode et ajouter l’adresse de Denis sur la boîte et enfermer le tout dans la boîte d’Ulrich.

Ensuite Alice va apporter le tout à Ulrich. Ce dernier ne peut ouvrir que sa boîte il va y trouver l’adresse de denis et une boîte fermée par un cadenas (celui de Denis), qu’il ne peut pas ouvrir, il ne sait donc pas où va aller la lettre en fin de compte. Une fois qu’il a donné le paquet à Denis ce dernier ouvre la boîte et ne peut que donner une boîte fermée à Tristan. Enfin, Tristan en ouvrant la dernière boîte sait qu’il doit donner la lettre à Bob, mais, si on suppose que les intermédiaires ne communiquent pas entre eux, il n’a aucun moyen de savoir que la lettre vient d’Alice, il sait juste que c’est une boîte qui lui vient de Denis.

Vu de l’extérieur quand on assiste au ballet des coursiers on ne peut pas suivre qui envoie qui à qui car Ulrich ne va pas sortir immédiatement pour sa tournée de distribution quand Alice lui apporte la première boîte. Ulrich va attendre d’avoir beaucoup de paquets, tous les ouvrir et ensuite les distribuer. Encore une fois si on suppose que le coursier est honnête la seule chose qu’on pourra observer c’est un ensemble de boîtes qui iront chez d’autres coursiers.

Rentrons un peu plus dans le détail pour voir comment Alice envoie son message à Bob dans un réseau informatique cette fois-ci. Avant d’envoyer sa requête Alice doit avoir une liste des serveurs spéciaux. Pour assurer l’anonymat il en faut au moins trois (on peut en avoir plus pour plus de sécurité mais ça rallonge les temps acheminement : comme toujours la sécurité est une affaire de compromis) appelons les S1, S2 et S3. Chaque serveur est équipé d’une clef publique que nous noterons KpubS1, KpubS2, KpubS3, la clef publique de Bob sera notée KpubB. Nous notons AdS1, AdS2, AdS3, AdB les adresses respectives de S1, S2, S3 et Bob.

Pour envoyer un message m à Bob, Alice choisit le chemin que va suivre le message : par exemple le premier serveur du chemin sera S1, le deuxième S2 et le dernier relais S3. Elle prépare alors le message suivant (nous notons m1;m2 la concaténation des messages m1 et m2) :

E(KpubS1,(AdS2;E(KpubS2,(AdS3;E(KpubS3,(AdB;E(KpubB,m)))))))

Remarquons que dans ce message n’apparaissent que des informations publiques (clefs publiques et adresses de différents serveurs) ou connues d’Alice (m). Ce message est constitué de plusieurs couches successives de cryptage, à la manière d’un oignon (d’où le nom du protocole).

Alice commence par envoyer ce message à S1. Quand S1 reçoit ce message il le décrypte en utilisant sa clef privée. Le message qu’il trouve après décryptage est

AdS2;E(KpubS2,(AdS3;E(KpubS3,(AdB;E(KpubB,m)))))

Autrement dit il a l’adresse du serveur suivant sur le chemin, AdS2, par contre il ne sait rien d’autre car l’autre partie du message est cryptée par la clef publique KpubS2 qui n’est connue que de S2. C’est la première couche de l’oignon qui vient d’être enlevée. Ensuite, S1 envoie à S2 le message :

E(KpubS2,(AdS3;E(KpubS3,(AdB;E(KpubB,m)))))

S2 peut décoder ce message, donc enlever une couche de plus à l’oignon et va trouver l’adresse du serveur suivant dans la chaîne, S3et lui envoyer la fin du message, c’est à dire :

E(KpubS3,(AdB;E(KpubB,m)))

Enfin quand S3 reçoit le message, à son tour il peut le décoder et obtient AdB;E(KpubB,m) et finalement envoyer le message d’Alice à Bob (ce dernier peut décrypter le message grâce à sa clef privée). C’est tout à fait similaire à ce qui se passe avec les coursiers et les boîtes fermées avec des cadenas.

On notera que durant le trajet ni S1 ni S2 ne peuvent savoir qui est le réel destinataire du message, il n’y a que S3 qui connait l’adresse de Bob. Symétriquement il n’y a que S1 qui connait l’émetteur, ni S2 ni S3 ne peuvent le connaître. Un observateur extérieur verra juste un message partir de chez Alice et un message arriver chez Bob. Si à un instant donné des milliers de messages sont échangés entre les serveurs il est impossible de faire le lien (sauf si tous les serveurs dans le relais sont compromis et communiquent entre eux) ces deux messages.

La technique que nous venons de décrire est suffisante pour envoyer un message de manière anonyme. Elle ne permet pas à Bob de répondre à Alice. Rajouter cette possibilité n’est pas très compliqué. Il faut juste qu’Alice intègre dans son message une adresse de retour. La solution est de reconstituer le chemin inverse en empilant des couches d’oignons de manière tout à fait similaire à ce qui a été fait pour le chemin allé. Le lecteur pourra vérifier qu’une adresse de retour de la
forme suivante :

AdS3;E(KpubS3,AdS2;E(KpubS2,(AdS2;E(KpubS1,AdA))))

permet bien de respecter la confidentialité et de renvoyer une réponse sans que Bob ait accès à l’adresse d’Alice. En effet, une fois que Bob décode son message initial il sait qu’il doit renvoyer sa réponse et l’adresse de retour à S3 (d’ailleurs Alice aurait pu prévoir un chemin de retour passant par d’autres serveurs). S3 pourra retirer une couche d’oignon pour trouver l’adresse suivante, celle de S2 où envoyer la réponse etc. On notera qu’il n’y a que S1 qui au final pourra savoir que l’adresse de retour indique Alice (mais il ne saura pas que la réponse vient de Bob pour des raisons symétriques à celles exposées à l’allé).

Les systèmes basés sur l’Onion routing

Il existe une quantité de systèmes mettant en œuvre des variantes plus ou moins sophistiquées de ce type de protocole. L’idée reste toujours la même : empiler les couches de cryptages de manière à ce que dans un chemin de communication chaque serveur ne connaisse que le nœud précédent et le nœud suivant. Le plus connu pour surfer anonymement est Tor. Ce système est utilisé quotidiennement par des centaines de milliers d’internautes et possède autour de 3000 serveurs-relais répartis autour du globe. Une version de ce protocole pour le peer-to-peer anonyme est également populaire, il s’agit du projet One Swarm, ce dernier permet d’échanger de manière anonyme des fichiers (à l’image de BitTorrent qui lui n’est pas du tout anonyme).

Laisser un commentaire

  1. une question: est ce qu’il est possible pour quelqu’un d’exterieur de savoir qu’un personne utilise tor par exemple? autrement dit pas de savoir avec qui je communique, ni même le contenu, mais de savoir que je communique de façon criptée tout simplement (q$ou que je browse l’internet de façon criptée).

    1. En ce qui concerne Tor oui : quelqu’un qui scrute votre connexion pourra savoir que vous utilisez ce système (par exemple en regardant la destination de votre premier message qui sera un relais du réseau Tor).

      Il existe des systèmes permettant de masquer le fait même qu’on communique, mais ils sont beaucoup plus complexes et coûteux, car par définition pour masquer le fait qu’on communique … il faut communiquer en permanence (faire du bruit presque tout le temps et dire des choses intéressantes seulement quand on en a besoin). Un système assez simple à imager est celui du bus scolaire : n personnes partagent un bus (un gros message à n places) : chaque si la personne i veut communiquer avec la personne j il suffit que i écrive dans la place réservée à j un message crypté par la clef publique de j (il faut aussi modifier tous les autres messages tout en les laissant décryptables). Ensuite le bus fait le tour des abonnés, à chaque abonné tous les messages changent mais seuls ceux qui ont les clefs privées peuvent savoir si quelque chose de cohérent a été transmis ou bien si c’est un processus automatique qui n’a fait que d’écrire des messages aléatoires pour brouiller les pistes.

  2. Félicitations pour cet article très clair et très intéressant.
    J’ai regardé Tor — ce système a été développé pour la Navy US , et est utilisé par des agences policières pour faire des provocations ( undercover sting ) !!!
    Je m’interroge donc sur la sécurité de ce système face aux gens de l’Etat… qui ont peut-être les moyens de le casser…

    1. Il existe tout un pan de recherche dédiés aux attaques contre Tor. Vous pourrez trouver les références les plus marquantes ici :

      http://freehaven.net/anonbib/

      Tor est un projet open source : chacun peut vérifier qu’il ne contient pas de backdoor technologiques.

      L’attaque la plus connue contre les mix-nets est de saturer le réseau avec ses propres messages de manière à pouvoir tracer les messages qui ne sont pas de nous.

      Concrètement plus il y a de personnes qui vont utiliser des méthodes cryptos, maintenir des relais etc., plus il sera difficile de casser les systèmes ne serait-ce que par les coûts que ça engendre.

    2. Une des façons de contourner Tor, et qui est utilisée de plus en plus par les agences gouvernementales derenseignement, c’est de « posséder » les noeuds d’entrée et de sortie de routage, ce qui est fait de deux manières:
      - en montant ses propres noeuds en nombre
      - en « désactivant » les noeuds indépendants, par exemple par attaque de type déni-de-service (les calculs cryptographiques nécessaires au routage en oignon étant relativement lourds, il est possible de surcharger un noeud avec un nombre de demandes de routage plutôt faible, mais je m’avance peut-être un peu trop là-dessus ?)

      Quand on tient une proportion suffisante de ces noeuds, on peut corréler le trafic entrant et sortant et donc retracer les échanges d’un bout à l’autre. Je ne sais pas s’il est possible de tenter des attaque « man in the middle » dans cette configuration, ce qui permettrait de casser le cryptage des messages eux-mêmes, mais cela a été évoqué par le passé.

      1. merci Frederic. Si tous le monde utilisait Tor ce ne serait plus aussi significatif d’être le seul à l’utiliser et donc cela passerait complètement la question. Mais bon … est ce que cela risque d’arriver.

        En tout cas vu la dégradation des libertés publiques c’est toujours bon d’avoir queqlues outils. Merci encore pour cet article aussi clair qu’intelligent

  3. Méfiez vous de TOR, c’est ce que les agences de renseignement appellent un « honey pot », c’est à dire un attrape-mouches. Tous ceux qui ont quelque chose à cacher l’utilisent et cela permet :
    1) de repérer facilement ceux qui l’utilisent (sans savoir pourquoi dans un premier temps) et de cibler une population « à risques ».
    2) avec de très gros noeuds Tor, les agences attrapent une part importante du trafic, font des corrélations entre entrées et sorties et peuvent repérer certaines communications.

    1. Espérons que tout le monde considère que l’on a tout à cacher, que nos entretiens n’ont pas à être espionner. Penser que « c’est pas grave, je n’ai rien à cacher » est la porte ouverte sur le goulag.

        1. Marrant, ca fait une heure que j’essaie de contourner une censure sur un post de l’Institut Coppet sur Contrepoints : impossibl d’y poster par Tor, mais j’y arrive par un autre proxy.
          Donc contrepoints est Tor Friendly… sauf quand c’est l’institut Coppet qui parle. Il est vrai que ces grands fans de H. H. Hoppe n’aiment pas beaucoup la liberté d’expression.