Public key cryptography (जिसे asymmetric cryptography भी कहा जाता है) SSL/TLS की foundation है। यह mathematically related keys की एक pair use करती है — एक public, एक private — data encrypt करने, identity verify करने, और secure connections establish करने के लिए। हर HTTPS connection इस पर depend करता है।
Key pair concept
| Public key | Private key | |
|---|---|---|
| किसके पास है | सभी के पास (यह certificate में है) | सिर्फ server owner के पास |
| Encrypt कर सकता है | Yes | Yes |
| Decrypt कर सकता है | सिर्फ वह जो private key ने encrypt किया | सिर्फ वह जो public key ने encrypt किया |
| Share करें? | हाँ — यही इसका purpose है | कभी नहीं |
Magic: public key से encrypted data सिर्फ matching private key से decrypt किया जा सकता है। और vice versa। दोनों keys mathematically linked हैं, लेकिन आप public key से private key derive नहीं कर सकते।
SSL/TLS में इसका use कैसे होता है
Public key cryptography हर HTTPS connection में तीन purposes serve करती है:
1. Key exchange — एक shared secret establish करना
TLS handshake के दौरान, server और browser को traffic encrypt करने के लिए एक shared session key पर agree होना होता है। वे इस key को plaintext में नहीं भेज सकते — कोई इसे intercept कर सकता है।
Solution: Diffie-Hellman key exchange (specifically modern TLS में ECDHE)। दोनों sides random values contribute करते हैं, और math उन्हें बिना कभी इसे transmit किए same shared secret calculate करने देता है। Server की private key उसके contribution पर sign करती है, जो server की identity prove करता है।
2. Authentication — identity prove करना
Server के SSL certificate में उसकी public key होती है। Certificate पर एक Certificate Authority ने sign किया है। Handshake के दौरान, server prove करता है कि उसके पास matching private key है। यह prove करता है कि server वही है जो certificate claim करता है।
इस step के बिना, कोई भी google.com होने का claim कर सकता था।
3. Digital signatures — data integrity prove करना
Private key एक digital signature create कर सकती है — एक mathematical proof कि एक specific data पर key holder ने sign किया था और इसे modify नहीं किया गया है। TLS handshake messages पर tampering prevent करने के लिए sign किया जाता है।
Symmetric vs asymmetric encryption
| Asymmetric (public key) | Symmetric (session key) | |
|---|---|---|
| Keys | दो (public + private) | एक (shared secret) |
| Speed | Slower (~1000x slower) | Fast |
| Used for | Key exchange + authentication | Actual data encrypt करना |
| Algorithms | RSA, ECDSA, ECDHE | AES-GCM, ChaCha20 |
| TLS में | सिर्फ handshake के दौरान | Handshake के बाद (सारा traffic) |
HTTPS दोनों use करता है: handshake के लिए asymmetric encryption (identity prove करना, keys exchange), फिर actual data transfer के लिए symmetric encryption (क्योंकि यह बहुत fast है)।
SSL के पीछे के algorithms
RSA
अभी भी use में सबसे पुराना public key algorithm (1977)। Large prime numbers factor करने की difficulty पर based। Signatures और key exchange दोनों के लिए use किया जाता है, हालाँकि RSA key exchange (बिना Diffie-Hellman) forward secrecy provide नहीं करता और TLS 1.3 से remove हो चुका है।
ECDSA (Elliptic Curve Digital Signature Algorithm)
Elliptic curve math use करने वाला modern signature algorithm। एक 256-bit ECC key 3072-bit RSA key के equal security provide करती है — smaller keys, faster signatures। GetHTTPS default रूप से ECDSA P-256 use करता है।
ECDHE (Elliptic Curve Diffie-Hellman Ephemeral)
Modern TLS में use किया जाने वाला key exchange mechanism। “Ephemeral” का मतलब है कि हर connection के लिए एक new key pair generate की जाती है — जो forward secrecy provide करती है। TLS 1.2 और 1.3 दोनों में use किया जाता है।
AES-GCM
Handshake के बाद actual traffic encrypt करने के लिए use किया जाने वाला symmetric cipher। AES (Advanced Encryption Standard) GCM (Galois/Counter Mode) के साथ encryption और authentication दोनों provide करता है। AES-NI instructions के through modern CPUs पर hardware-accelerated है।
GetHTTPS public key cryptography कैसे use करता है
जब आप GetHTTPS use करते हैं:
- आपका browser Web Crypto API use करके एक key pair generate करता है — same cryptographic primitives जो TLS खुद use करता है
- Public key एक CSR में जाती है जो Let’s Encrypt को send की जाती है
- Private key आपके browser memory में रहती है — कभी transmit नहीं होती
- Let’s Encrypt public key पर sign करता है और आपका certificate return करता है
- आप certificate (public) और private key दोनों अपने server पर download करते हैं
Private key का सिर्फ browser memory में exist करना ही reason है कि GetHTTPS उन tools से ज़्यादा private है जो remote server पर keys generate करते हैं।
FAQ
क्या quantum computers public key cryptography break कर सकते हैं?
Current quantum computers नहीं कर सकते। लेकिन Shor’s algorithm run करने वाला sufficiently powerful quantum computer RSA और ECC break कर सकता है। Industry post-quantum cryptography के साथ prepare कर रही है — quantum attacks के against resistant new algorithms (ML-KEM, ML-DSA)। TLS इन्हें hybrid mode (classical + post-quantum) में adopt करेगा बिना certificates के काम करने के तरीके बदले।
सब कुछ के लिए asymmetric encryption क्यों नहीं use करते?
Speed। Asymmetric operations symmetric से roughly 1000x slower हैं। RSA से एक webpage encrypt करना impractically slow होगा। इसकी जगह, TLS asymmetric crypto सिर्फ handshake (~1ms) के लिए use करता है, फिर data के लिए symmetric (AES) पर switch करता है — जो hardware speed पर run करता है।
क्या 256-bit ECC key really enough secure है?
256-bit ECC ~128 bits की security provide करता है — जिसका मतलब है कि एक attacker को इसे break करने के लिए roughly 2^128 operations चाहिए। यह observable universe में atoms से ज़्यादा operations है। यह near future के लिए safe है (quantum computers को छोड़कर, जिनके लिए completely different algorithms चाहिए)।
Encryption और signing में क्या difference है?
Encryption: Confidentiality protect करें। Recipient की public key से encrypt करें → सिर्फ उनकी private key decrypt कर सकती है। Signing: Authenticity prove करें। अपनी private key से sign करें → आपकी public key वाला कोई भी verify कर सकता है कि यह आपकी तरफ से आया और modify नहीं किया गया। TLS certificates signatures use करते हैं; TLS data transfer encryption use करता है।