← Mes projets

Travaux pratiques · ESILV · 2024

Routage en oignon

Comment faire passer un message par trois inconnus sans qu'aucun ne sache à la fois qui parle et à qui ? En TP, j'ai implémenté en TypeScript un petit réseau de type Tor. Ici, le même protocole tourne dans votre navigateur, avec un vrai chiffrement : chaque clé est générée à l'instant et ne quitte jamais cette page.

Portage web réalisé avec une assistance d'IA, à partir de mon code du TP.

Envoyer un message

Réseau de 10 nœuds entre Alice et Bob
Génération des clés RSA des nœuds…

L'oignon

Alice chiffre d'abord pour le dernier nœud, puis emballe le tout pour le deuxième, puis pour le premier.

    Le trajet

      Ce que chacun peut savoir

      Sait qu'Alice écritSait que c'est pour BobLit le message
      Nœud d'entréeouinonnon
      Nœud du milieunonnonnon
      Nœud de sortienonouioui, faute de chiffrement de bout en bout
      Observateur d'un lienselon le lienselon le liennon

      Aucun nœud ne connaît à la fois l'expéditeur et le destinataire : c'est tout l'intérêt de l'oignon. Il suffit en revanche que l'entrée et la sortie soient tenues par la même personne pour que l'anonymat tombe.

      Les limites du TP, et ce que fait Tor

      La taille trahit la position

      Chaque couche retirée raccourcit le paquet, comme le montre le trajet ci-dessus : un observateur peut deviner à quel saut il se trouve. Tor découpe tout en cellules de taille fixe.

      Chiffrer n'est pas authentifier

      AES-CBC sans code d'authentification : un nœud malveillant peut modifier des octets sans que le suivant s'en aperçoive. Tor vérifie l'intégrité de chaque cellule.

      Des clés trop bavardes

      Pour que les tests automatiques puissent tout vérifier, chaque nœud exposait sa clé privée sur une route HTTP. Acceptable dans un TP, jamais en vrai : le code le signalait en commentaire.

      Le TP portait sur le routage, pas sur la production : ces choix sont ceux de l'énoncé et de ses tests, gardés ici pour être fidèle au code.

      Du TP au navigateur

      Le TP

      • TypeScript et Express : un registre, des nœuds et des utilisateurs, chacun sur son port
      • Énoncé et tests unitaires fournis ; implémentation personnelle
      • Primitives WebCrypto de Node : RSA-OAEP 2048 / SHA-256, AES-256-CBC

      Le même protocole

      • Circuit de 3 nœuds distincts tirés au hasard dans le registre
      • Par couche : une clé AES neuve, chiffrée en RSA pour le nœud
      • Adresse du saut suivant sur 10 chiffres en tête de chaque couche

      Ce que la page ajoute

      • Le réseau entier simulé dans une page, sans serveur
      • Chaque couche et chaque saut rendus visibles
      • Les limites de sécurité expliquées