पब्लिक/प्राइवेट की पेयर (Asymmetric Cryptography) क्या है?
पब्लिक की क्रिप्टोग्राफी (Asymmetric Cryptography) में दो गणितीय रूप से संबंधित कुंजियों का उपयोग होता है:
- Public Key (सार्वजनिक कुंजी): सभी के साथ साझा की जाती है — डेटा एन्क्रिप्ट करने या हस्ताक्षर सत्यापित करने के लिए
- Private Key (निजी कुंजी): केवल मालिक के पास रहती है — डेटा डिक्रिप्ट करने या हस्ताक्षर बनाने के लिए
मूल नियम: पब्लिक की से एन्क्रिप्ट किया गया डेटा केवल संबंधित प्राइवेट की से डिक्रिप्ट हो सकता है, और इसके विपरीत। प्राइवेट की को पब्लिक की से निकालना गणनात्मक रूप से असंभव है (बड़े अभाज्य संख्याओं पर आधारित)।
की पेयर जनरेशन की प्रक्रिया
- यादृच्छिक संख्या उत्पन्न करें: क्रिप्टोग्राफिकली सिक्योर RNG (Random Number Generator) से
- दो बड़ी अभाज्य संख्याएं (p, q) चुनें: RSA के लिए आमतौर पर 1024-4096 बिट
- मॉड्यूलस (n) गणना करें: n = p × q
- टोटिएंट φ(n) = (p-1)(q-1) गणना करें
- पब्लिक एक्सपोनेंट (e) चुनें: आमतौर पर 65537 (0x10001)
- प्राइवेट एक्सपोनेंट (d) गणना करें: d ≡ e⁻¹ mod φ(n)
- की पेयर आउटपुट:
- Public Key: (n, e)
- Private Key: (n, d) — p, q भी स्टोर किए जा सकते हैं दक्षता के लिए
आम एल्गोरिदम और की साइज
| एल्गोरिदम | उपयोग | अनुशंसित की साइज (2024) | स्थिति |
|---|---|---|---|
| RSA | हस्ताक्षर, की एक्सचेंज, एन्क्रिप्शन | 3072 या 4096 बिट | व्यापक उपयोग, धीमा |
| ECDSA / EdDSA (Ed25519) | डिजिटल हस्ताक्षर | 256 बिट (Curve25519) | तेज, छोटी की, आधुनिक मानक |
| ECDH / X25519 | की एक्सचेंज (TLS, SSH, WireGuard) | 256 बिट | फॉरवर्ड सेक्रेसी के लिए आवश्यक |
| DSA | हस्ताक्षर (पुराना) | 2048-3072 बिट | ❌ अप्रचलित |
SSH की पेयर जनरेट करना (व्यावहारिक)
लिनक्स/मैक/WSL/विंडोज़ (OpenSSH)
# Ed25519 (अनुशंसित — तेज, छोटा, सुरक्षित)
ssh-keygen -t ed25519 -C "your_email@example.com"
# RSA (अगर लीगेसी सिस्टम के लिए चाहिए)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# आउटपुट:
# ~/.ssh/id_ed25519 (प्राइवेट की — गोपनीय रखें!)
# ~/.ssh/id_ed25519.pub (पब्लिक की — सर्वर पर डालें)
PuTTYgen (विंडोज़ GUI)
- PuTTYgen खोलें
- Key type: EdDSA (Ed25519) या RSA (3072/4096 बिट)
- Generate क्लिक करें → माउस घुमाएं (एन्ट्रॉपी)
- Key passphrase डालें (अनिवार्य — प्राइवेट की एन्क्रिप्ट करता है)
- Save private key (.ppk फॉर्मेट) → सुरक्षित स्थान पर
- Save public key → OpenSSH फॉर्मेट में कॉपी करें
पब्लिक/प्राइवेट की कैसे काम करती हैं?
एन्क्रिप्शन (गोपनीयता)
- Alice को Bob को गुप्त संदेश भेजना है
- Alice Bob की पब्लिक की से संदेश एन्क्रिप्ट करती है
- केवल Bob (जिसके पास प्राइवेट की है) डिक्रिप्ट कर सकता है
डिजिटल हस्ताक्षर (प्रामाणिकता/अखंडता/गैर-अस्वीकृति)
- Alice अपनी प्राइवेट की से दस्तावेज़ हस्ताक्षर करती है
- कोई भी Alice की पब्लिक की से हस्ताक्षर सत्यापित कर सकता है
- यह साबित करता है: Alice ने हस्ताक्षर किया, दस्तावेज़ बदला नहीं गया
TLS/HTTPS में उपयोग
- सर्वर के पास सर्टिफिकेट होता है जिसमें पब्लिक की होती है (CA द्वारा हस्ताक्षरित)
- क्लाइंट सर्वर की पब्लिक की वेरिफाई करता है
- क्लाइंट प्री-मास्टर सीक्रेट पब्लिक की से एन्क्रिप्ट कर भेजता है
- सर्वर प्राइवेट की से डिक्रिप्ट करता है
- दोनों सेशन की (सिमेट्रिक) व्युत्पन्न करते हैं — तेज एन्क्रिप्शन के लिए
की पेयर फाइल फॉर्मेट
| फॉर्मेट | विवरण | उपयोग |
|---|---|---|
| PEM | Base64 एन्कोडेड, -----BEGIN/END----- हेडर | OpenSSL, OpenSSH, वेब सर्वर |
| DER | बाइनरी एन्कोडिंग | Java, Windows सर्टिफिकेट स्टोर |
| PKCS#12 (.pfx/.p12) | प्राइवेट की + सर्टिफिकेट + चेन, पासवर्ड प्रोटेक्टेड | IIS, Windows, Java कीस्टोर |
| OpenSSH | ssh-keygen आउटपुट फॉर्मेट | SSH सर्वर/क्लाइंट |
| PPK | PuTTY प्राइवेट की फॉर्मेट | PuTTY, WinSCP, FileZilla |
सुरक्षा बेस्ट प्रैक्टिस
- 🔒 Ed25519 या RSA 4096 उपयोग करें
- 🔒 पासफ्रेज के साथ प्राइवेट की एन्क्रिप्ट करें
- 🔒 प्राइवेट की कभी साझा न करें (गिटहब, ईमेल, चैट, पेस्टबिन)
- 🔒 ssh-agent उपयोग करें पासफ्रेज कैशिंग के लिए
- 🔒 हार्डवेयर सिक्योरिटी की (YubiKey, Nitrokey) से प्राइवेट की सुरक्षित करें — FIDO2/U2F, PIV, OpenPGP सपोर्ट
- 🔒 नियमित की रोटेशन (वार्षिक या नीति अनुसार)
- 🔒 known_hosts वेरिफाई करें MITM रोकने के लिए
पब्लिक की सुरक्षित रूप से साझा करना
पब्लिक की साझा करना सुरक्षित है — यह इसके लिए ही बनी है। इसे सर्वर पर ~/.ssh/authorized_keys में डालें, गिटहब/गिटलैब पर अपलोड करें, सहकर्मियों को ईमेल करें। लेकिन प्राइवेट की कभी साझा न करें।