Ce projet a été réalisé dans le cadre d'un module de sécurité informatique dédié aux générateurs de nombres aléatoires. Il vise à implémenter, analyser et attaquer différents Générateurs de Nombres Pseudo-Aléatoires (PRNG) pour comprendre leurs faiblesses et démontrer l'importance des générateurs cryptographiquement sûrs (CSPRNG).
L'ensemble du projet a été développé en Python en suivant le paradigme de la Programmation Orientée Objet (POO) et les standards PEP 8.
Il se divise en trois axes majeurs :
Implémentation : Développement de générateurs standards (LCG, Mersenne Twister) et de générateurs sécurisés (Blum-Blum-Shub, Wrapper Système) et d'une construction Hybride maison.
Analyse de Sécurité : Évaluation de la qualité statistique via des batteries de tests avec calcul de scores normalisés.
Attaques Cryptographiques : Réalisation d'attaques cryptographiques concrètes (prédiction, reconstruction d'état) sur les PRNG et sur des protocoles de chiffrement (AES) mal implémentés à cause d'une mauvaise gestion de l'aléatoire.
Langage : Python 3.8+
pip install numpy scipy matplotlib pandas cryptography notebook
python main_comparison.py
Chaque générateur possède sa propre suite de tests unitaires pour valider son bon fonctionnement mathématique et logique.
Tester un générateur spécifique :
python mt19937/test_unit_mt19937.py
python gcl/test_unit_gcl.py
# etc...
Les attaques sont présentées sous forme de Jupyter Notebooks.
Pour ouvrir les notebooks :
jupyter notebook
Ouvrez ensuite les fichiers .ipynb correspondants :
| Fichier | Cible | Type | Description de l'attaque |
|---|---|---|---|
ATK_GCL.ipynb |
GCL | PRNG |
Reconstruction de paramètres ( |
ATK_MT19937.ipynb |
MT19937 | PRNG | Clonage d'état (Untempering) après observation de 624 valeurs, permettant la prédiction totale du futur. |
ATK_NONCE_REUSE.ipynb |
AES-CTR | Protocole | Réutilisation de Nonce. Démonstration de la fuite du XOR des messages clairs lorsque le PRNG pour l'IV/Nonce est mal utilisé (fixe). |
ATK_IV_PREDICTABLE.ipynb |
AES-CBC | Protocole | IV Prévisible. Attaque à texte clair choisi (CPA) permettant de vérifier le contenu d'un message si l'IV est déterministe (Ex: compteur). |
-
gcl/gcl.py : Générateur Congruentiel Linéaire (LCG). Rapide mais statistiquement biaisé et cryptographiquement faible.
-
mt19937/mt19937.py : Mersenne Twister. Le standard pour la simulation (Monte Carlo), très performant mais insécurisé (état reconstructible).
-
bbs/bbs.py : Blum-Blum-Shub (BBS). CSPRNG dont la sécurité repose sur la difficulté de la factorisation. Très lent.
-
os_urandom/os_urandom.py : Wrapper pour le CSPRNG du système d'exploitation.
-
box_muller/box_muller.py : Transformation mathématique pour générer une distribution normale
$\mathcal{N}(0,1)$ à partir d'une source uniforme. -
nrbg/nrbg.py : HybridNRBG. Générateur maison combinant os.urandom et SHA-256 avec reseeding périodique.
Chaque test produit un score normalisé sur [0, 1] :
-
Entropie de Shannon (par octet).
-
Test du Chi-carré (
$\chi^2$ ) : Vérification de l'uniformité. -
Autocorrélation : Détection de motifs répétitifs.
-
Test de Kolmogorov-Smirnov : Comparaison de la fonction de répartition.
Projet réalisé en 2025 par DonovanVB.
Attention : Ce code est fourni à des fins strictement pédagogiques dans le cadre d'un cursus académique. Toute tentative d'utilisation de ces techniques d'attaque sur des systèmes tiers sans autorisation explicite est illégale et passible de sanctions pénales (Articles 323-1 à 323-8 du Code pénal).