
Educational Proof-of-Concept for the Dual_EC_DRBG backdoor (CVE-2014-8610) - NIST P-256 state recovery attack demonstration
Для специалистов по безопасности | Только в образовательных целях
Этот репозиторий содержит образовательную демонстрацию криптографической закладки Dual_EC_DRBG (CVE-2014-8610) — хорошо документированной уязвимости, раскрытой после разоблачений Сноудена.
Только в образовательных целях:
cd dual-ec-drbg
# Одна команда для настройки и запуска
./run.sh
Этот скрипт:
venv/cd dual-ec-drbg
# Установите локальную версию Python через pyenv
pyenv local 3.12.12
# Создайте виртуальное окружение
python3 -m venv venv
source venv/bin/activate
# Установите зависимости
pip install --upgrade pip
pip install -r requirements.txt
# Запустите 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 — операции с кривой NIST P-256jupyter>=1.0.0 — интерфейс ноутбукаipython>=7.0.0 — интерактивный PythonDual_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
Откройте ноутбук:
jupyter notebook dual_ec_drbg_backdoor_poc.ipynb
Запускайте ячейки последовательно (Shift+Enter)
Наблюдайте:
Извлеките и запустите код Python:
# Извлечение ячеек с кодом в скрипт Python
jupyter nbconvert --to script dual_ec_drbg_backdoor_poc.ipynb
# Запуск скрипта
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 или getrandom() (Linux)BCryptGenRandom() (Windows)CryptoKit (Apple)Это образовательный ресурс. Приветствуются улучшения:
Лицензия MIT — подробности в файле LICENSE.
Используйте ответственно и этично. Этот код предназначен только для образовательных целей.
Этот ноутбук подходит для:
Рекомендуемое время презентации: 45–60 минут
Создано в образовательных целях для понимания и предотвращения криптографических уязвимостей.
| Раздел | Описание |
|---|
| 1. Исторический контекст | Хронология 1997–2024, ключевые участники, разоблачения Сноудена |
| 2. Математические основы | Эллиптические кривые, ECDLP, математика закладки |
| 3. Параметры NIST P-256 | Реальные параметры кривой из FIPS 186-4 |
| 4. Спецификация алгоритма | Спецификация DRBG из NIST SP 800-90 |
| 5. Реализация | Классы честного и закладочного DRBG |
| 6. Реализация атаки | Атака восстановления состояния с секретным d |
| 7. Демонстрация в реальном времени | Симуляция атаки в стиле Juniper |
| 8. Методы защиты | Извлечённые уроки и лучшие практики |
| Событие | Дата | Влияние |
|---|
| Стандартизация NIST | 2006 | Dual_EC становится официальным |
| По умолчанию в RSA BSAFE | 2004–2013 | $10 млн за использование слабого значения по умолчанию |
| Разоблачения Сноудена | 2013 | Общественная осведомлённость |
| Закладка в Juniper | 2015 | Злоумышленники использовали слабый Dual_EC |
| Отзыв NIST | 2014 | Официальное объявление устаревшим |