एन्क्रिप्शन की मूल बातें - सममित बनाम असममित कुंजी: डेवलपर्स के लिए आवश्यक जानकारी
अगर आप नहीं जानते कि AES, RSA और HTTPS कैसे काम करते हैं, तो यह लेख पढ़ें। व्यावहारिक उदाहरणों के साथ एन्क्रिप्शन की मुख्य अवधारणाओं की व्याख्या।
Toolypet Team
Development Team
एन्क्रिप्शन की मूल बातें: सममित बनाम असममित कुंजी
"कृपया इस डेटा को एन्क्रिप्ट करके भेजें।"
जब आप यह सुनते हैं, क्या आप जानते हैं कि वास्तव में क्या करना है और कैसे?
एन्क्रिप्शन के दो मुख्य प्रकार हैं। अगर आप नहीं जानते कि कब किसका उपयोग करना है, तो आपका सुरक्षा डिज़ाइन गलत हो सकता है।
एन्क्रिप्शन बनाम हैशिंग
पहले, इन अक्सर भ्रमित होने वाली अवधारणाओं को स्पष्ट करें।
| एन्क्रिप्शन | हैशिंग | |
|---|---|---|
| दिशा | द्विदिशात्मक (डिक्रिप्ट करने योग्य) | एकदिशात्मक (अपरिवर्तनीय) |
| उद्देश्य | डेटा सुरक्षा | अखंडता सत्यापन, पासवर्ड स्टोरेज |
| कुंजी आवश्यक | हाँ | नहीं |
| उदाहरण | AES, RSA | SHA-256, bcrypt |
एन्क्रिप्शन: मूल डेटा को पुनर्प्राप्त किया जा सकता है हैशिंग: मूल डेटा को पुनर्प्राप्त नहीं किया जा सकता
पासवर्ड स्टोरेज के लिए हैशिंग, डेटा ट्रांसमिशन के लिए एन्क्रिप्शन का उपयोग करें।
सममित कुंजी एन्क्रिप्शन
अवधारणा
एक कुंजी से एन्क्रिप्ट करें, उसी कुंजी से डिक्रिप्ट करें।
प्लेनटेक्स्ट + कुंजी → एन्क्रिप्ट → सिफरटेक्स्ट
सिफरटेक्स्ट + कुंजी → डिक्रिप्ट → प्लेनटेक्स्ट
उदाहरण: एक ताला
अपने घर की चाबी के बारे में सोचें। आप उसी चाबी से ताला लगाते और खोलते हैं।
सामान्य एल्गोरिदम
| एल्गोरिदम | कुंजी की लंबाई | स्थिति |
|---|---|---|
| AES-256 | 256bit | वर्तमान मानक |
| AES-128 | 128bit | सुरक्षित |
| 3DES | 168bit | लीगेसी |
| DES | 56bit | कमजोर |
कोड उदाहरण (Node.js)
const crypto = require('crypto');
// कुंजी जनरेट करें (उत्पादन में सुरक्षित रूप से स्टोर करें)
const key = crypto.randomBytes(32); // AES-256
const iv = crypto.randomBytes(16); // इनिशियलाइज़ेशन वेक्टर
// एन्क्रिप्ट
function encrypt(text) {
const cipher = crypto.createCipheriv('aes-256-cbc', key, iv);
let encrypted = cipher.update(text, 'utf8', 'hex');
encrypted += cipher.final('hex');
return encrypted;
}
// डिक्रिप्ट
function decrypt(encrypted) {
const decipher = crypto.createDecipheriv('aes-256-cbc', key, iv);
let decrypted = decipher.update(encrypted, 'hex', 'utf8');
decrypted += decipher.final('utf8');
return decrypted;
}
const secret = "संवेदनशील डेटा";
const encrypted = encrypt(secret);
const decrypted = decrypt(encrypted);
console.log(encrypted); // "a3f8b2c1..."
console.log(decrypted); // "संवेदनशील डेटा"
फायदे और नुकसान
| फायदे | नुकसान |
|---|---|
| तेज़ | कुंजी साझा करने की समस्या |
| बड़े डेटा के लिए उपयुक्त | कुंजी लीक हुई तो खेल खत्म |
| सरल कार्यान्वयन | जटिल कुंजी प्रबंधन |
कुंजी साझा करने की समस्या
अगर A को B को एन्क्रिप्टेड संदेश भेजना है, तो A को पहले B को कुंजी देनी होगी।
लेकिन उस कुंजी को सुरक्षित रूप से कैसे भेजें?
असममित कुंजी एन्क्रिप्शन इस समस्या को हल करता है।
असममित कुंजी एन्क्रिप्शन
अवधारणा
दो कुंजियों का उपयोग करता है:
- पब्लिक की (Public Key): कोई भी जान सकता है
- प्राइवेट की (Private Key): कभी साझा नहीं करनी चाहिए
पब्लिक की से एन्क्रिप्ट → केवल प्राइवेट की डिक्रिप्ट कर सकती है
प्राइवेट की से साइन → पब्लिक की से वेरिफाई
उदाहरण: एक मेलबॉक्स
- पब्लिक की = मेलबॉक्स (कोई भी पत्र डाल सकता है)
- प्राइवेट की = मेलबॉक्स की चाबी (केवल मालिक पत्र निकाल सकता है)
सामान्य एल्गोरिदम
| एल्गोरिदम | उपयोग | कुंजी की लंबाई |
|---|---|---|
| RSA | एन्क्रिप्शन, साइनिंग | 2048+ bit |
| ECDSA | साइनिंग | 256+ bit |
| Ed25519 | साइनिंग | 256bit |
कोड उदाहरण (Node.js RSA)
const crypto = require('crypto');
// कुंजी जोड़ी जनरेट करें
const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
modulusLength: 2048,
});
// पब्लिक की से एन्क्रिप्ट
function encryptWithPublic(text) {
return crypto.publicEncrypt(publicKey, Buffer.from(text)).toString('base64');
}
// प्राइवेट की से डिक्रिप्ट
function decryptWithPrivate(encrypted) {
return crypto.privateDecrypt(privateKey, Buffer.from(encrypted, 'base64')).toString();
}
const secret = "संवेदनशील डेटा";
const encrypted = encryptWithPublic(secret);
const decrypted = decryptWithPrivate(encrypted);
console.log(decrypted); // "संवेदनशील डेटा"
डिजिटल हस्ताक्षर
जब आप प्राइवेट की से साइन करते हैं, कोई भी पब्लिक की का उपयोग करके किसने साइन किया यह वेरिफाई कर सकता है।
// प्राइवेट की से साइन करें
const sign = crypto.createSign('SHA256');
sign.update('संदेश');
const signature = sign.sign(privateKey, 'base64');
// पब्लिक की से वेरिफाई करें
const verify = crypto.createVerify('SHA256');
verify.update('संदेश');
const isValid = verify.verify(publicKey, signature, 'base64');
console.log(isValid); // true
फायदे और नुकसान
| फायदे | नुकसान |
|---|---|
| कुंजी साझा करने की समस्या हल | धीमा (सममित से 1000 गुना धीमा) |
| डिजिटल हस्ताक्षर संभव | बड़े डेटा के लिए उपयुक्त नहीं |
| पब्लिक की स्वतंत्र रूप से वितरित की जा सकती है | लंबी कुंजी लंबाई |
व्यावहारिक: दोनों को एक साथ उपयोग करना (हाइब्रिड एन्क्रिप्शन)
HTTPS इसी तरह काम करता है।
प्रक्रिया
1. सर्वर: RSA पब्लिक/प्राइवेट की जोड़ी जनरेट करता है
2. क्लाइंट: सर्वर की पब्लिक की प्राप्त करता है
3. क्लाइंट: AES सेशन की जनरेट करता है
4. क्लाइंट: सेशन की को RSA पब्लिक से एन्क्रिप्ट → सर्वर को भेजता है
5. सर्वर: RSA प्राइवेट से सेशन की डिक्रिप्ट करता है
6. दोनों: AES सेशन की का उपयोग करके संवाद करते हैं
ऐसा क्यों करें
- RSA: केवल कुंजी विनिमय के लिए (धीमा लेकिन सुरक्षित)
- AES: वास्तविक डेटा एन्क्रिप्शन के लिए (तेज़)
दोनों दुनिया का सर्वश्रेष्ठ उपयोग।
व्यावहारिक चेकलिस्ट
सममित कुंजी (AES) उपयोग करते समय
- AES-256 या AES-128 का उपयोग करें
- प्रत्येक एन्क्रिप्शन के लिए नया IV जनरेट करें
- कुंजियों को एनवायरनमेंट वेरिएबल्स या KMS में स्टोर करें
- ECB मोड का उपयोग न करें (CBC, GCM का उपयोग करें)
असममित कुंजी (RSA) उपयोग करते समय
- कम से कम 2048bit कुंजियों का उपयोग करें
- प्राइवेट कुंजियों को कभी उजागर न करें
- OAEP पैडिंग का उपयोग करें (PKCS#1 v1.5 से बचें)
- कुंजी रोटेशन नीति स्थापित करें
अक्सर पूछे जाने वाले प्रश्न
प्रश्न: क्या मुझे API कुंजियों को स्टोरेज के लिए एन्क्रिप्ट करना चाहिए?
उत्तर: एन्क्रिप्शन के बजाय एनवायरनमेंट वेरिएबल्स या सीक्रेट मैनेजमेंट टूल्स (AWS Secrets Manager, HashiCorp Vault) का उपयोग करें। एन्क्रिप्शन के साथ भी, आपके पास डिक्रिप्शन कुंजी प्रबंधन की समस्या रहती है।
प्रश्न: क्या क्लाइंट-साइड पर एन्क्रिप्ट करना सुरक्षित है?
उत्तर: नहीं। क्लाइंट-साइड कोड सभी को दिखाई देता है, कुंजी उजागर हो जाती है। संवेदनशील एन्क्रिप्शन सर्वर-साइड पर होना चाहिए।
प्रश्न: क्या SHA-256 एन्क्रिप्शन है?
उत्तर: नहीं। SHA-256 हैशिंग है। इसे डिक्रिप्ट नहीं किया जा सकता। अगर आपको डेटा पुनर्प्राप्त करना है, तो AES जैसे एन्क्रिप्शन का उपयोग करें।
सारांश
| परिदृश्य | एल्गोरिदम |
|---|---|
| बड़े डेटा एन्क्रिप्शन | AES-256 |
| कुंजी विनिमय | RSA, ECDH |
| डिजिटल हस्ताक्षर | RSA, ECDSA, Ed25519 |
| पासवर्ड स्टोरेज | bcrypt, Argon2 (हैशिंग) |
| HTTPS संचार | हाइब्रिड (RSA + AES) |
संबंधित उपकरण
| उपकरण | उद्देश्य |
|---|---|
| एन्क्रिप्शन/डिक्रिप्शन | AES एन्क्रिप्शन |
| RSA कुंजी जनरेटर | RSA कुंजी जोड़ी जनरेशन |
| हैश जनरेटर | SHA, MD5 हैशिंग |
लेखक के बारे में
Toolypet Team
Development Team
The Toolypet Team creates free, privacy-focused web tools for developers and designers. All tools run entirely in your browser with no data sent to servers.