
# Cahier Jupyter pédagogique démontrant la porte dérobée cryptographique Dual_EC_DRBG (CVE-2014-8610) avec attaque de récupération d'état NIST P-256, contexte historique et mesures d'atténuation.
Pour les professionnels de la sécurité | À des fins éducatives uniquement
Ce dépôt contient une démonstration pédagogique de la porte dérobée cryptographique Dual_EC_DRBG (CVE-2014-8610), une vulnérabilité bien documentée révélée à la suite des divulgations de Snowden.
Ceci est UNIQUEMENT À DES FINS ÉDUCATIVES :
cd dual-ec-drbg
# One command to setup and run
./run.sh
Ce script va :
venv/cd dual-ec-drbg
# Set local Python version with pyenv
pyenv local 3.12.12
# Create virtual environment
python3 -m venv venv
source venv/bin/activate
# Install dependencies
pip install --upgrade pip
pip install -r requirements.txt
# Launch Jupyter
jupyter notebook dual_ec_drbg_backdoor_poc.ipynb
cd dual-ec-drbg
pip install --user -r requirements.txt
jupyter notebook dual_ec_drbg_backdoor_poc.ipynb
ecdsa>=0.18.0 - opérations sur la courbe NIST P-256jupyter>=1.0.0 - interface notebookipython>=7.0.0 - Python interactif| Section | Description |
|---|---|
| 1. Contexte historique | Chronologie de 1997 à 2024, acteurs clés, révélations Snowden |
| 2. Fondements mathématiques | Courbes elliptiques, ECDLP, les mathématiques de la porte dérobée |
| 3. Paramètres NIST P-256 | Paramètres réels de courbe FIPS 186-4 |
| 4. Spécification de l'algorithme | Spécification NIST SP 800-90 DRBG |
| 5. Implémentation | Classes DRBG honnêtes vs piégées |
| 6. Implémentation de l'attaque | Attaque de récupération d'état avec le secret d |
| 7. Démonstration en direct | Simulation d'attaque de type Juniper |
| 8. Mesures d'atténuation | Leçons apprises et bonnes pratiques |
Dual_EC_DRBG State Update: s_{i+1} = φ(s_i · P)
Dual_EC_DRBG Output: r_i = φ(s_i · Q) [truncated]
Backdoor Relationship: Q = d · P
Attack (knowing d):
1. Observe r_i (30+ bytes of output)
2. Reconstruct candidate R where x(R) ≈ r_i
3. Compute: s_{i+1} = φ(d⁻¹ · R) = φ(s_i · P)
4. Predict ALL future output!
Time Complexity: O(1) - milliseconds on a laptop
Data Required: 32 bytes of observed output
Ouvrez le notebook :
jupyter notebook dual_ec_drbg_backdoor_poc.ipynb
Exécutez les cellules séquentiellement (Shift+Enter)
Observez :
Extrayez et exécutez le code Python :
# Extract code cells to a Python script
jupyter nbconvert --to script dual_ec_drbg_backdoor_poc.ipynb
# Run the script
python dual_ec_drbg_backdoor_poc.py
[=== HONEST Dual_EC_DRBG ===]
[+] DRBG initialized
Mode: HONEST
P = (6b17d1f2e12c4247..., 4fe342e2fe1a7f9b...)
Q = (a53a7f9b2e1c4247..., 7fe342e2fe1a7f9b...)
[=== BACKDOORED Dual_EC_DRBG ===]
[+] DRBG initialized
Mode: BACKDOORED
P = (6b17d1f2e12c4247..., 4fe342e2fe1a7f9b...)
Q = (b23d7c9a3f8e5156..., 9ab456d3c7e2f1a8...)
Secret d = 0x4f3e2d1c0b9a8f7e...
[=== ATTACK EXECUTION ===]
[+] Observed output: a1b2c3d4e5f6...
[+] Found 2 candidate points on curve
...
[OK] PERFECT MATCH - All future output predicted!
| Événement | Date | Impact |
|---|---|---|
| Normalisation NIST | 2006 | Dual_EC devient officiel |
| Défaut RSA BSAFE | 2004-2013 | Paiement de 10 M$ pour utiliser un défaut faible |
| Révélations Snowden | 2013 | Prise de conscience publique |
| Porte dérobée Juniper | 2015 | Des attaquants ont exploité le Dual_EC faible |
| Retrait NIST | 2014 | Abandon officiel |
/dev/urandom ou getrandom() (Linux)BCryptGenRandom() (Windows)CryptoKit (Apple)Ceci est une ressource pédagogique. Les améliorations sont les bienvenues :
Licence MIT - Voir le fichier LICENSE pour plus de détails.
Utilisez de manière responsable et éthique. Ce code est fourni à des fins éducatives uniquement.
Ce notebook convient à :
Durée de présentation recommandée : 45-60 minutes
Créé à des fins éducatives pour comprendre et prévenir les vulnérabilités cryptographiques.