
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
# 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. उम्मीदवार R का पुनर्निर्माण करें जहाँ x(R) ≈ r_i
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 प्रारंभ किया गया
मोड: ईमानदार
P = (6b17d1f2e12c4247..., 4fe342e2fe1a7f9b...)
Q = (a53a7f9b2e1c4247..., 7fe342e2fe1a7f9b...)
[=== बैकडोर्ड Dual_EC_DRBG ===]
[+] DRBG प्रारंभ किया गया
मोड: बैकडोर्ड
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 वर्ग |
| 6. आक्रमण कार्यान्वयन | गुप्त d के साथ स्थिति पुनर्प्राप्ति आक्रमण |
| 7. लाइव प्रदर्शन | Juniper-शैली आक्रमण सिमुलेशन |
| 8. शमन उपाय | सीखे गए सबक और सर्वोत्तम प्रथाएँ |
| घटना | तिथि | प्रभाव |
|---|
| NIST मानकीकरण | 2006 | Dual_EC आधिकारिक हो जाता है |
| RSA BSAFE डिफ़ॉल्ट | 2004-2013 | कमजोर डिफ़ॉल्ट का उपयोग करने के लिए $10M भुगतान |
| स्नोडेन खुलासे | 2013 | सार्वजनिक जागरूकता |
| Juniper बैकडोर | 2015 | हमलावरों ने कमजोर Dual_EC का शोषण किया |
| NIST वापसी | 2014 | आधिकारिक अप्रचलन |