Développement d'une architecture distribuée en Python simulant le routage en oignon (type Tor), intégrant un chiffrement RSA asymétrique manuel et des interfaces graphiques (PyQt6) pour garantir l'anonymat des échanges.

L'objectif de ce projet était de concevoir un système client-serveur distribué permettant à plusieurs utilisateurs d'échanger des messages de manière totalement anonyme.
Pour ce faire, j'ai recréé les principes fondamentaux d'un réseau de type "Tor". Le système repose sur des routeurs virtuels interconnectés qui font transiter les données, et un serveur central (Master) chargé de superviser l'annuaire des nœuds et de distribuer les clés cryptographiques. Le but était de comprendre et d'implémenter concrètement les mécanismes de chiffrement par couches successives (routage en oignon) garantissant la confidentialité du parcours de la donnée.
La contrainte majeure concernait la limitation mathématique de l'algorithme RSA : il est impossible de chiffrer un message dont la taille dépasse celle du module de la clé. Or, le chiffrement en oignon ajoute énormément de données à chaque couche. Pour contourner cela, j'ai dû concevoir un système de "chunking" (fragmentation) : le message est découpé en petits blocs chiffrés individuellement puis concaténés avec un séparateur.
De plus, lors de l'envoi de ces paquets fragmentés et volumineux à travers le réseau, le protocole TCP coupait parfois les flux (problème de buffer). J'ai résolu ce problème en implémentant une boucle de réception asynchrone sur les sockets, garantissant la reconstruction parfaite de l'intégralité des données avant de lancer le déchiffrement.
Ce projet en autonomie totale m'a permis de maîtriser l'architecture d'un code de bout en bout. J'ai considérablement renforcé mes compétences en programmation réseau bas niveau (gestion des sockets TCP, buffers, multi-threading).
Surtout, coder un algorithme de cryptographie (RSA) sans faire appel à des bibliothèques toutes faites m'a fait prendre conscience de la complexité mathématique et des défis d'optimisation (taille des clés, temps de calcul, fragmentation) qui se cachent derrière la sécurisation des données sur Internet.