
Educational Proof-of-Concept for the Dual_EC_DRBG backdoor (CVE-2014-8610) - NIST P-256 state recovery attack demonstration
Para Profissionais de Segurança | Apenas para Fins Educacionais
Este repositório contém uma demonstração educacional do backdoor criptográfico Dual_EC_DRBG (CVE-2014-8610), uma vulnerabilidade bem documentada divulgada após as revelações de Snowden.
Isto é APENAS para FINS EDUCACIONAIS:
cd dual-ec-drbg
# Um comando para configurar e executar
./run.sh
Este script irá:
venv/cd dual-ec-drbg
# Definir versão local do Python com pyenv
pyenv local 3.12.12
# Criar ambiente virtual
python3 -m venv venv
source venv/bin/activate
# Instalar dependências
pip install --upgrade pip
pip install -r requirements.txt
# Iniciar 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 - Operações de curva NIST P-256jupyter>=1.0.0 - Interface do notebookipython>=7.0.0 - Python interativoAtualização de Estado do Dual_EC_DRBG: s_{i+1} = φ(s_i · P)
Saída do Dual_EC_DRBG: r_i = φ(s_i · Q) [truncado]
Relação do Backdoor: Q = d · P
Ataque (conhecendo d):
1. Observe r_i (30+ bytes de saída)
2. Reconstrua candidatos R onde x(R) ≈ r_i
3. Calcule: s_{i+1} = φ(d⁻¹ · R) = φ(s_i · P)
4. Preveja TODA a saída futura!
Complexidade de Tempo: O(1) - milissegundos em um laptop
Dados Necessários: 32 bytes de saída observada
Abra o notebook:
jupyter notebook dual_ec_drbg_backdoor_poc.ipynb
Execute as células sequencialmente (Shift+Enter)
Observe:
Extraia e execute o código Python:
# Extrair células de código para um script Python
jupyter nbconvert --to script dual_ec_drbg_backdoor_poc.ipynb
# Executar o script
python dual_ec_drbg_backdoor_poc.py
[=== DUAL_EC_DRBG HONESTO ===]
[+] DRBG inicializado
Modo: HONESTO
P = (6b17d1f2e12c4247..., 4fe342e2fe1a7f9b...)
Q = (a53a7f9b2e1c4247..., 7fe342e2fe1a7f9b...)
[=== DUAL_EC_DRBG COM BACKDOOR ===]
[+] DRBG inicializado
Modo: COM BACKDOOR
P = (6b17d1f2e12c4247..., 4fe342e2fe1a7f9b...)
Q = (b23d7c9a3f8e5156..., 9ab456d3c7e2f1a8...)
d secreto = 0x4f3e2d1c0b9a8f7e...
[=== EXECUÇÃO DO ATAQUE ===]
[+] Saída observada: a1b2c3d4e5f6...
[+] Encontrados 2 pontos candidatos na curva
...
[OK] CORRESPONDÊNCIA PERFEITA - Toda a saída futura prevista!
/dev/urandom ou getrandom() (Linux)BCryptGenRandom() (Windows)CryptoKit (Apple)Este é um recurso educacional. Melhorias são bem-vindas:
Licença MIT - Consulte o arquivo LICENSE para detalhes.
Use com responsabilidade e ética. Este código é apenas para fins educacionais.
Este notebook é adequado para:
Tempo de apresentação recomendado: 45-60 minutos
Criado para fins educacionais, a fim de entender e prevenir vulnerabilidades criptográficas.
| Seção | Descrição |
|---|
| 1. Contexto Histórico | Linha do tempo de 1997 a 2024, principais envolvidos, revelações de Snowden |
| 2. Fundamentos Matemáticos | Curvas elípticas, ECDLP, a matemática do backdoor |
| 3. Parâmetros da NIST P-256 | Parâmetros reais da curva FIPS 186-4 |
| 4. Especificação do Algoritmo | Especificação NIST SP 800-90 DRBG |
| 5. Implementação | Classes DRBG honesta vs. com backdoor |
| 6. Implementação do Ataque | Ataque de recuperação de estado com d secreto |
| 7. Demonstração ao Vivo | Simulação de ataque estilo Juniper |
| 8. Mitigações | Lições aprendidas e melhores práticas |
| Evento | Data | Impacto |
|---|
| Padronização NIST | 2006 | Dual_EC torna-se oficial |
| Padrão RSA BSAFE | 2004-2013 | Pagamento de $10M para usar padrão fraco |
| Revelações Snowden | 2013 | Conscientização pública |
| Backdoor Juniper | 2015 | Atacantes exploraram Dual_EC fraco |
| Retirada pela NIST | 2014 | Depreciação oficial |