
듀얼_EC_DRBG 암호학적 백도어(CVE-2014-8610)를 NIST P-256 상태 복구 공격, 역사적 맥락 및 완화 조치와 함께 시연하는 교육용 Jupyter 노트북입니다.
보안 전문가용 | 교육 목적으로만 사용
이 저장소에는 Dual_EC_DRBG 암호화 백도어(CVE-2014-8610)의 교육용 데모가 포함되어 있습니다. 이는 스노든 폭로 이후 공개된 잘 문서화된 취약점입니다.
이는 교육 목적으로만 제공됩니다:
cd dual-ec-drbg
# 설정 및 실행을 위한 단일 명령
./run.sh
이 스크립트는 다음을 수행합니다:
venv/에 가상 환경 생성cd dual-ec-drbg
# pyenv로 로컬 Python 버전 설정
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-256 곡선 연산jupyter>=1.0.0 - 노트북 인터페이스ipython>=7.0.0 - 대화형 PythonDual_EC_DRBG 상태 업데이트: s_{i+1} = φ(s_i · P)
Dual_EC_DRBG 출력: r_i = φ(s_i · Q) [절단됨]
백도어 관계: Q = d · P
공격 (d를 알 때):
1. r_i 관찰 (출력 30바이트 이상)
2. x(R) ≈ r_i 인 후보 R 재구성
3. 계산: s_{i+1} = φ(d⁻¹ · R) = φ(s_i · P)
4. 모든 미래 출력 예측!
시간 복잡도: O(1) - 랩탑에서 밀리초
필요 데이터: 32바이트의 관찰된 출력
노트북 열기:
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
[=== 정직한 Dual_EC_DRBG ===]
[+] DRBG 초기화됨
모드: HONEST
P = (6b17d1f2e12c4247..., 4fe342e2fe1a7f9b...)
Q = (a53a7f9b2e1c4247..., 7fe342e2fe1a7f9b...)
[=== 백도어된 Dual_EC_DRBG ===]
[+] DRBG 초기화됨
모드: BACKDOORED
P = (6b17d1f2e12c4247..., 4fe342e2fe1a7f9b...)
Q = (b23d7c9a3f8e5156..., 9ab456d3c7e2f1a8...)
비밀 d = 0x4f3e2d1c0b9a8f7e...
[=== 공격 실행 ===]
[+] 관찰된 출력: a1b2c3d4e5f6...
[+] 곡선 위의 후보 점 2개 발견됨
...
[OK] 완벽 일치 - 모든 미래 출력 예측됨!
/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. 알고리즘 명세 | NIST SP 800-90 DRBG 명세 |
| 5. 구현 | 정직한 DRBG vs 백도어된 DRBG 클래스 |
| 6. 공격 구현 | 비밀 d를 이용한 상태 복구 공격 |
| 7. 실시간 데모 | Juniper 스타일 공격 시뮬레이션 |
| 8. 방어 대책 | 교훈과 모범 사례 |
| 사건 | 날짜 | 영향 |
|---|
| NIST 표준화 | 2006 | Dual_EC가 공식 표준이 됨 |
| RSA BSAFE 기본값 | 2004-2013 | 약한 기본값을 사용하기 위해 1천만 달러 지불 |
| 스노든 폭로 | 2013 | 대중 인식 제고 |
| Juniper 백도어 | 2015 | 공격자가 약한 Dual_EC를 악용함 |
| NIST 철회 | 2014 | 공식적으로 폐기됨 |