Projet 07 · sur 09
Routeur virtuel anonymisant
Cette SAÉ (couplée au module de programmation événementielle) demande de concevoir et d'implémenter de zéro un système de communication anonyme entre plusieurs clients, à l'aide de routeurs virtuels distribués. Le principe est l'anonymat par le routage en oignon : des chaînes de routeurs où chaque routeur ne connaît que son voisin direct (précédent et suivant), sans jamais voir l'origine complète du message. C'est le fonctionnement de Tor (The Onion Router) reproduit à l'échelle d'un projet étudiant.
L'architecture repose sur trois rôles. Un serveur maître définit la topologie et distribue les clés : il reçoit de chaque routeur son port d'écoute et sa clé publique, puis distribue les clés publiques aux clients. Les clients construisent des messages « en oignon » : ils choisissent un chemin aléatoire (par exemple trois routeurs) et empilent plusieurs couches de chiffrement (la couche 3, chiffrée avec la clé du routeur 3, contient le message final ; la couche 2, chiffrée avec la clé du routeur 2, contient l'adresse du routeur 3 et la couche 3 ; etc.). Les routeurs déchiffrent une seule couche, découvrent l'adresse du saut suivant et transmettent le reste.
Concrètement, le système est multi-routeurs et déployé sur au moins deux machines (VM Linux et Windows pour les tests). La communication s'appuie sur des sockets TCP/UDP en Python, la gestion simultanée des connexions se fait par threads (serveur multi-clients, ports dynamiques), et un chiffrement asymétrique simplifié (paire clé publique / clé privée par routeur) doit être codé manuellement, sans aucune bibliothèque de cryptographie. Les tables de routage, les clés et les logs anonymisés sont stockés dans une base MariaDB. Le client et le maître sont des interfaces graphiques Qt : le client gère la connexion et l'envoi de message en mode non bloquant, le maître visualise le réseau, les routes, les logs et la distribution des clés.
Le projet impose un développement intégralement manuel (aucun code généré automatiquement), une structure de code claire et commentée, un dépôt Git obligatoire, et une démonstration vidéo montrant l'anonymisation des flux. Par sa nature (anonymisation, chiffrement par couches, routage type Tor), il a une forte dimension cybersécurité.
Concevoir et implémenter un système de communication anonyme entre plusieurs clients à l'aide de routeurs virtuels, en garantissant l'anonymat par le routage en oignon (chaînes de routeurs où chaque routeur ne connaît que son voisin direct), sur un réseau distribué.
- Architecture distribuée : un serveur maître (superviseur, générateur de routes), plusieurs routeurs virtuels et plusieurs clients.
- Communication client-serveur multi-routeurs par sockets Python sur au moins deux machines (VM Linux + Windows).
- Gestion des connexions simultanées par threads (serveur multi-clients, ports dynamiques).
- Conception manuelle d'un chiffrement asymétrique simplifié (clé publique / clé privée), sans bibliothèque de crypto.
- Système de couches de chiffrement (routage en oignon) : le client empile les couches, chaque routeur en déchiffre une seule.
- Distribution des clés publiques par le maître (chaque routeur lui envoie sa clé publique, redistribuée aux clients).
- Stockage des tables de routage, clés et logs anonymisés dans MariaDB.
- Interfaces graphiques Qt : client (connexion + envoi non bloquant) et maître (visualisation réseau, routes, logs).
- Gestion de projet (planning, suivi Git, journal de bord) et vidéo de démonstration de l'anonymisation.
- Coder un chiffrement asymétrique entièrement à la main, sans recourir à aucune bibliothèque de cryptographie.
- Empiler et déchiffrer correctement les couches successives pour qu'un routeur ne voie jamais l'origine complète du message.
- Gérer les connexions simultanées et les ports dynamiques par threads dans un serveur multi-clients.
- Faire fonctionner le routage multi-sauts de bout en bout sur un environnement distribué de plusieurs machines.
- AC23.01 — Automatiser l'administration système avec des scripts.
- AC23.02 — Développer une application à partir d'un cahier des charges donné.
- AC23.03 — Utiliser un protocole réseau pour programmer une application client/serveur.
- AC23.04 — Installer, administrer un système de gestion de données.
- AC23.05 — Accéder à un ensemble de données depuis une application et/ou un site web.
- Code source complet via le dépôt Git (rendu obligatoire).
- Documentation de réponse au cahier des charges (structure, protocole, algorithme de chiffrement avec forces/faiblesses).
- Documentation d'installation et d'utilisation.
- Rapport de gestion de projet et vidéo de démonstration de l'anonymisation des flux.
Documents & fichiers