Skip to content

Repository files navigation

Évaluation de la Fiabilité Cryptographique des PRNGs

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).

Description du Projet

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.

Installation, prérequis

Langage : Python 3.8+

pip install numpy scipy matplotlib pandas cryptography notebook

Utilisation

Comparaison globale des générateurs

python main_comparison.py

Lancer les Tests Unitaires

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...

Lancer les Attaques

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 ($a, c$) à partir de 3 sorties via résolution de système linéaire.
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).

Fonctionnalités Implémentées

Générateurs (Packages)

  • 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.

Tests Statistiques

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.

Auteurs

Projet réalisé en 2025 par DonovanVB.

⚠️ Avertissement Légal

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).

About

Implémentation de plusieurs méthodes de PRNG et CSPRNG, et évaluation de leur qualité par des tests statistiques et des expériences cryptographiques.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages