
Proof-of-Concept didattico per il backdoor Dual_EC_DRBG (CVE-2014-8610) - dimostrazione dell'attacco di recupero dello stato NIST P-256
Per Professionisti della Sicurezza | Solo a Scopo Educativo
Questo repository contiene una dimostrazione educativa della backdoor crittografica Dual_EC_DRBG (CVE-2014-8610), una vulnerabilità ben documentata resa nota dopo le rivelazioni di Snowden.
Questo è SOLO A SCOPO EDUCATIVO:
cd dual-ec-drbg
# One command to setup and run
./run.sh
Questo script:
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 - Operazioni sulla curva NIST P-256jupyter>=1.0.0 - Interfaccia notebookipython>=7.0.0 - Python interattivoDual_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
Apri il notebook:
jupyter notebook dual_ec_drbg_backdoor_poc.ipynb
Esegui le celle in sequenza (Shift+Enter)
Osserva:
Estrai ed esegui il codice 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!
/dev/urandom o getrandom() (Linux)BCryptGenRandom() (Windows)CryptoKit (Apple)Questa è una risorsa educativa. Miglioramenti benvenuti:
Licenza MIT - Vedi il file LICENSE per i dettagli.
Usa in modo responsabile ed etico. Questo codice è solo a scopo educativo.
Questo notebook è adatto per:
Tempo di presentazione consigliato: 45-60 minuti
Creato a scopo educativo per comprendere e prevenire vulnerabilità crittografiche.
| Sezione | Descrizione |
|---|
| 1. Contesto Storico | Cronologia dal 1997-2024, attori chiave, rivelazioni di Snowden |
| 2. Fondamenti Matematici | Curve ellittiche, ECDLP, la matematica della backdoor |
| 3. Parametri NIST P-256 | Parametri reali della curva FIPS 186-4 |
| 4. Specifica dell'Algoritmo | Specifica NIST SP 800-90 DRBG |
| 5. Implementazione | Classi DRBG oneste vs backdoored |
| 6. Implementazione dell'Attacco | Attacco di recupero dello stato con segreto d |
| 7. Dimostrazione dal Vivo | Simulazione di attacco stile Juniper |
| 8. Mitigazioni | Lezioni apprese e migliori pratiche |
| Evento | Data | Impatto |
|---|
| Standardizzazione NIST | 2006 | Dual_EC diventa ufficiale |
| Predefinito RSA BSAFE | 2004-2013 | Pagamento di $10M per usare default debole |
| Rivelazioni Snowden | 2013 | Consapevolezza pubblica |
| Backdoor Juniper | 2015 | Attaccanti hanno sfruttato la debolezza di Dual_EC |
| Ritiro NIST | 2014 | Deprecazione ufficiale |