Rapport de stage (1ère année)

Simulation de réseaux et protocole Diffie-Hellman avec OMNeT++ et NS-3

Présentation du stage

Stage de première année réalisé à la Faculté des Sciences et Techniques de l'Université de Limoges. Ce stage a porté sur l'installation et la prise en main de simulateurs de réseaux (OMNeT++ et NS-3), puis sur la simulation d'un échange de clé Diffie-Hellman entre deux nœuds en présence d'un attaquant passif.

L'objectif principal était de démontrer qu'un attaquant peut observer les messages échangés sans pouvoir déduire la clé secrète partagée entre les deux parties.

Schéma du protocole Diffie-Hellman

Schéma Diffie-Hellman

Semaine 1 : Découverte des simulateurs

Lundi 2 et Mardi 3 Juin 2025

I - Découverte du simulateur OMNeT++

  • Familiarisation avec l'interface : éditeur de code NED/C++, gestionnaire de projets, console de simulation
  • Navigation dans les exemples fournis
  • Compréhension de la structure d'un projet OMNeT++
  • Initiation aux langages NED (Network Description Language) et C++ dans un contexte de simulation réseau
Mercredi 4 et Jeudi 5 Juin 2025

II - Découverte du simulateur NS-3

  • Exploration du fonctionnement de ns-3 pour en comprendre les bases
  • Découverte des scripts d'exemples (first.cc) : création de nœuds, configuration des liens, applications réseau
  • Lecture de la documentation officielle
  • Apprentissage de la compilation et exécution des simulations avec waf
  • Utilisation des helpers et consultation des logs
  • Exploration des applications de base (UdpEchoServer / UdpEchoClient)
  • Modification de paramètres (débit, délai, nombre de nœuds) pour expérimenter
Vendredi 6 Juin 2025

III - Choix du simulateur pour le projet

Après avoir exploré les deux simulateurs OMNeT++ et ns-3, j'ai choisi OMNeT++ pour le projet de simulation d'échange de clé Diffie-Hellman.

Raisons du choix :
  • Interface graphique facilitant la visualisation des échanges entre les nœuds
  • Adapté aux simulations de protocoles de communication
  • Permet de concevoir des modèles réseau pour l'analyse du protocole Diffie-Hellman
  • NS-3 est plus complexe à prendre en main et moins visuel

Semaines 2 et 3 : Projet Diffie-Hellman

IV - Création du projet Diffie-Hellman OMNeT++

  • Création d'un nouveau projet nommé DHS (Diffie-Hellman Simulation)
  • Organisation du projet en deux dossiers : src pour les fichiers C++, simulation pour les fichiers .ned et omnetpp.ini
Difficultés :

Au départ, les fichiers .ned étaient dans src, ce qui provoquait des erreurs de compilation (make: *** [Makefile:checkmakefiles] error 1).

Solution :

Configuration correcte des NED Source Folders dans les propriétés du projet : src décoché, simulation coché.

V - Implémentation des nœuds A et B

  • Initialisation du fichier .ned avec trois modules : A, B, E, connectés par des liens simples
  • Écriture du fichier omnetpp.ini pour définir les connexions et les paramètres de simulation
  • Création des modules A et B en C++
  • Implémentation de l'échange de clé : clé publique générée (g^a, g^b), puis échange
  • Clé secrète commune calculée : key = (g^b)^a

VI - Ajout de l'attaquant E

  • Création d'un module E qui intercepte tous les messages entre A et B
  • E affiche les clés publiques échangées mais ne peut déduire la clé secrète (manque a ou b)
Problème de topologie :

Initialement, E ne recevait pas les messages.

Solution :

Modification du .ned pour faire transiter tous les messages via E.

Déroulement de la simulation

  1. A envoie sa clé publique g^a → E → B
  2. B envoie sa clé publique g^b → E → A
  3. A et B calculent la même clé secrète
  4. E affiche les deux clés publiques reçues, mais reste incapable de calculer la clé finale

Résultat : Bien qu'E puisse intercepter les valeurs g^a et g^b, il est incapable de retrouver la clé finale partagée, car il lui manque les exposants secrets a et b.

Structure du projet

Projet DHS/

├── src/ --> Contient les fichiers C++ des modules A, B, E
│ ├── A.cc
│ ├── B.cc
│ └── E.cc

├── simulation/ --> Contient les fichiers de description réseau
│ ├── DiffieHellman.ned
│ └── omnetpp.ini

└── Makefile --> Généré automatiquement par OMNeT++

Semaine 4 : Chiffrement symétrique

VII - Simulation d'échange symétrique chiffré avec clé Diffie-Hellman

Extension de la simulation existante pour intégrer un échange de messages chiffrés symétriquement, en présence d'un attaquant passif E.

  • Reprise du projet DHS : les nœuds A et B génèrent une clé commune via Diffie-Hellman
  • Implémentation d'un chiffrement simplifié de type AES
  • A chiffre le message M avec la clé key : C = Es(M) (Es = chiffrement avec la clé s = key)
  • B reçoit C et déchiffre avec la même clé : M = Es⁻¹(C)
Résultats :
  • Le message est correctement chiffré, transmis, puis déchiffré
  • E ne peut lire le message → la confidentialité est assurée
  • Simulation réussie d'un échange sécurisé sur un canal non sécurisé

Technologies utilisées

Debian 12

Système d'exploitation

OMNeT++

Simulateur de réseaux

NS-3

Simulateur de réseaux

C++ / NED

Langages de programmation

Diffie-Hellman

Protocole d'échange de clés

AES

Chiffrement symétrique

Documentation Technique

Télécharger la documentation
Retour aux projets