
Prueba de concepto educativa para la puerta trasera Dual_EC_DRBG (CVE-2014-8610) - demostración del ataque de recuperación de estado NIST P-256
Para profesionales de la seguridad | Solo con fines educativos
Este repositorio contiene una demostración educativa de la puerta trasera criptográfica Dual_EC_DRBG (CVE-2014-8610), una vulnerabilidad bien documentada revelada tras las filtraciones de Snowden.
Esto es SOLO CON FINES EDUCATIVOS:
cd dual-ec-drbg
# One command to setup and run
./run.sh
Este script hará lo siguiente:
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 - Operaciones con la curva NIST P-256jupyter>=1.0.0 - Interfaz de notebookipython>=7.0.0 - Python interactivoDual_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
Abre el notebook:
jupyter notebook dual_ec_drbg_backdoor_poc.ipynb
Ejecuta las celdas secuencialmente (Shift+Enter)
Observa:
Extrae y ejecuta el código 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)Este es un recurso educativo. Se aceptan mejoras:
Licencia MIT: consulta el archivo LICENSE para obtener más detalles.
Úsalo de forma responsable y ética. Este código es solo para fines educativos.
Este notebook es adecuado para:
Tiempo de presentación recomendado: 45-60 minutos
Creado con fines educativos para comprender y prevenir vulnerabilidades criptográficas.
| Sección | Descripción |
|---|
| 1. Contexto histórico | Cronología de 1997 a 2024, actores clave, filtraciones de Snowden |
| 2. Fundamentos matemáticos | Curvas elípticas, ECDLP, las matemáticas de la puerta trasera |
| 3. Parámetros NIST P-256 | Parámetros reales de la curva FIPS 186-4 |
| 4. Especificación del algoritmo | Especificación del DRBG NIST SP 800-90 |
| 5. Implementación | Clases DRBG honesto vs. con puerta trasera |
| 6. Implementación del ataque | Ataque de recuperación del estado con el secreto d |
| 7. Demostración en vivo | Simulación de ataque estilo Juniper |
| 8. Mitigaciones | Lecciones aprendidas y mejores prácticas |
| Evento | Fecha | Impacto |
|---|
| Estandarización NIST | 2006 | Dual_EC se vuelve oficial |
| RSA BSAFE como predeterminado | 2004-2013 | Pago de $10M por usar un valor predeterminado débil |
| Filtraciones de Snowden | 2013 | Concienciación pública |
| Puerta trasera de Juniper | 2015 | Atacantes explotaron la debilidad de Dual_EC |
| Retirada por NIST | 2014 | Desaprobación oficial |