एक लाइन में कहें तो
पासवर्ड-आधारित AES एन्क्रिप्शन आपके चुने हुए पासवर्ड से बनी एक सीक्रेट की (key) का उपयोग करके डेटा को स्क्रैम्बल (उलझाने) और अनस्क्रैम्बल (सुलझाने) का एक स्टैंडर्ड तरीका है।
यह किस समस्या को हल करता है
जब से इंसानों ने लिखना शुरू किया है, हम हमेशा से ऐसी चीजें लिखना चाहते थे जिन्हें दूसरे लोग पढ़ न सकें। रोमन जनरलों के संदेशों में अक्षरों को बदलने (सीज़र सिफर) से लेकर शीत युद्ध में जासूसों द्वारा वन-टाइम पैड का उपयोग करने तक, लक्ष्य हमेशा एक ही रहा है: गोपनीयता। अगर संदेश गलत हाथों में पड़ जाए, तो वह बकवास लगना चाहिए।
डिजिटल युग में, यह समस्या हर जगह है। आपका डेटा अविश्वसनीय पब्लिक वाई-फाई पर उड़ता है, विशाल कॉर्पोरेशनों के सर्वरों पर पड़ा रहता है, और ऐसी हार्ड ड्राइव पर बैकअप होता है जो शायद किसी कबाड़खाने में खत्म हो सकती हैं। आप यह कैसे सुनिश्चित करते हैं कि आपका निजी संदेश, आपकी API कीज़ की लिस्ट, या आपकी सीक्रेट कुकी रेसिपी सीक्रेट ही रहे?
पुराने ज़माने के सिफर को क्रैक करना आसान था, खासकर उन कंप्यूटरों के साथ जो प्रति सेकंड अरबों कॉम्बिनेशन आज़मा सकते हैं। हमें कुछ बेहतर चाहिए था। बहुत बेहतर। और यहीं एंट्री होती है एडवांस्ड एन्क्रिप्शन स्टैंडर्ड, या AES की।
1990 के दशक के अंत में, U.S. नेशनल इंस्टीट्यूट ऑफ स्टैंडर्ड्स एंड टेक्नोलॉजी (NIST) ने पुराने डेटा एन्क्रिप्शन स्टैंडर्ड (DES) का विकल्प खोजने के लिए एक सार्वजनिक प्रतियोगिता आयोजित की। वे किसी सरकारी तहखाने में बनाए गए गुप्त एल्गोरिथ्म की तलाश में नहीं थे; वे एक पारदर्शी, सार्वजनिक और बेरहमी से परखा गया सिफर चाहते थे जिस पर पूरी दुनिया भरोसा कर सके। सालों के क्रिप्टोग्राफ़िक दंगल के बाद, 2001 में "Rijndael" नामक एक बेल्जियम एल्गोरिथ्म (इसके आविष्कारकों, Rijmen और Daemen के नामों का एक मिश्रण) को विजेता का ताज पहनाया गया।
यह तेज़, कुशल था, और सबसे महत्वपूर्ण बात, इसने इसे तोड़ने की वैश्विक कोशिशों का डटकर सामना किया था। यह AES बन गया, वह स्टैंडर्ड जिसे आज हम सुरक्षित वेबसाइटों (HTTPS) से लेकर एन्क्रिप्टेड हार्ड ड्राइव और सेंसिटिव फाइलों तक सब कुछ लॉक करने के लिए उपयोग करते हैं। यह आधुनिक गणितीय कठोरता के साथ राज़ रखने की सदियों पुरानी समस्या को हल करता है।
पर्दे के पीछे यह कैसे काम करता है
AES जादू जैसा लगता है: आप एक सीक्रेट फ्रेज बोलते हैं, और आपका टेक्स्ट एक न पढ़े जा सकने वाले कचरे में बदल जाता है। इसे फिर से बोलें, और यह वापस आ जाता है। लेकिन पर्दे के पीछे, यह बस चालाक, दोहराए जा सकने वाले गणितीय स्टेप्स की एक सीरीज़ है।
सिमेट्रिक बनाम एसिमेट्रिक
पहले, एक मुख्य कॉन्सेप्ट। एन्क्रिप्शन मुख्य रूप से दो तरह का होता है। AES सिमेट्रिक है, जिसका मतलब है कि डेटा को लॉक (एन्क्रिप्ट) और अनलॉक (डिक्रिप्ट) दोनों करने के लिए एक ही की (key) का उपयोग किया जाता है। यह आपके घर की चाबी की तरह है—यह दरवाज़ा बंद करती है, और वही चाबी उसे खोलती है। यह तेज़ और कुशल है।
दूसरा प्रकार एसिमेट्रिक (या पब्लिक-की) क्रिप्टोग्राफी है। इसमें दो अलग-अलग कीज़ का उपयोग होता है: डेटा को लॉक करने के लिए एक पब्लिक की और उसे अनलॉक करने के लिए एक प्राइवेट की। यह एक मेलबॉक्स की तरह है: कोई भी इसमें एक पत्र डाल सकता है (पब्लिक स्लॉट का उपयोग करके), लेकिन केवल आपके पास इसे खोलने और मेल पढ़ने के लिए प्राइवेट की होती है। यह तब बहुत अच्छा होता है जब आप पहले से एक सीक्रेट की को सुरक्षित रूप से साझा नहीं कर सकते, लेकिन यह सिमेट्रिक एन्क्रिप्शन की तुलना में बहुत धीमा है।
पासवर्ड-आधारित एन्क्रिप्शन सिमेट्रिक मॉडल का उपयोग करता है क्योंकि आप और जिसे भी डेटा डिक्रिप्ट करने की आवश्यकता है, वे एक ही पासवर्ड साझा करेंगे।
पासवर्ड से की तक: KDF
यहाँ एक महत्वपूर्ण डिटेल है: आपका पासवर्ड, "SuperSecretP@ssw0rd123", एन्क्रिप्शन की (key) नहीं है। इंसानों को याद रहने वाले पासवर्ड इतने रैंडम या इतने लंबे नहीं होते कि वे सुरक्षित क्रिप्टोग्राफ़िक कीज़ बन सकें।
इसके बजाय, आपके पासवर्ड को एक की डेरिवेशन फंक्शन (Key Derivation Function - KDF) में डाला जाता है। एक KDF को एक खास मकसद वाले एल्गोरिथ्म के रूप में सोचें जो पासवर्ड को एक मजबूत, फिक्स्ड-साइज़ क्रिप्टोग्राफ़िक की (key) में बदलने के लिए डिज़ाइन किया गया है। PBKDF2 (पासवर्ड-बेस्ड की डेरिवेशन फंक्शन 2) या Argon2 जैसे आधुनिक KDF तीन महत्वपूर्ण काम करते हैं:
- एक साल्ट (Salt) जोड़ना: साल्ट हर नए एन्क्रिप्शन के लिए जेनरेट किया गया एक रैंडम डेटा का टुकड़ा होता है। इसे प्रोसेस करने से पहले आपके पासवर्ड के साथ मिलाया जाता है। इसका मतलब है कि भले ही दो यूज़र्स का पासवर्ड एक ही हो, परिणामी एन्क्रिप्शन कीज़ पूरी तरह से अलग होंगी। यह अकेले ही "रेनबो टेबल" हमलों को हरा देता है, जहाँ हैकर्स आम पासवर्ड और उनके परिणामी हैश की पहले से गणना की गई तालिकाओं का उपयोग करते हैं। साल्ट को एन्क्रिप्टेड डेटा के साथ स्टोर किया जाता है; यह कोई सीक्रेट नहीं है, बस एक अनोखा घटक है।
- की (Key) को स्ट्रेच करना: KDF पासवर्ड और साल्ट को एक हैशिंग एल्गोरिथ्म (जैसे SHA-256) के माध्यम से एक बार नहीं, बल्कि हज़ारों, या लाखों बार चलाता है। इसे "इटरेशन्स" या "वर्क फैक्टर" कहा जाता है। यह प्रक्रिया को जानबूझकर धीमा बना देता है। आपके लिए, कुछ सौ मिलीसेकंड का इंतज़ार कोई बड़ी बात नहीं है। लेकिन एक हमलावर के लिए जो आपके पासवर्ड को ब्रूट-फोर्स करने की कोशिश कर रहा है, यह एक बुरा सपना है, जिससे अरबों अनुमानों को आज़माना कम्प्यूटेशनली महंगा हो जाता है।
- की (Key) बनाना: इतनी सारी मेहनत के बाद, KDF वांछित लंबाई (जैसे, 256 बिट्स) की एक की निकालता है जो पूरी तरह से रैंडम नॉइज़ की तरह दिखती है। यह असली की है जिसका उपयोग AES द्वारा किया जाता है।
Your Password + Random Salt + Many Iterations -> Strong Encryption Key
("hunter2" + "a3f9d..." + 100,000 rounds) -> 256-bit AES Key
AES सिफर खुद: एक स्टेट और राउंड्स
अब आते हैं मुख्य इवेंट पर। AES डेटा के फिक्स्ड-साइज़ ब्लॉक्स पर काम करता है—हमेशा 128 बिट्स (16 बाइट्स) एक बार में। आपके प्लेनटेक्स्ट संदेश को इन 16-बाइट ब्लॉक्स में काटा जाता है। प्रत्येक ब्लॉक को स्टेट मैट्रिक्स नामक 4x4 बाइट्स के ग्रिड में लोड किया जाता है।
यह स्टेट फिर राउंड्स नामक समान परिवर्तनों की एक श्रृंखला से गुज़रता है। राउंड्स की संख्या की (key) के साइज़ पर निर्भर करती है:
- AES-128: 10 राउंड्स
- AES-192: 12 राउंड्स
- AES-256: 14 राउंड्स
प्रत्येक राउंड (आखिरी को छोड़कर) में चार स्टेप्स होते हैं:
- SubBytes: स्टेट मैट्रिक्स में प्रत्येक बाइट को एक स्टैंडर्ड लुकअप टेबल ("Rijndael S-box") का उपयोग करके एक अलग बाइट से बदल दिया जाता है। यह मुख्य नॉन-लीनियर स्टेप है जो कन्फ्यूजन पैदा करता है।
- ShiftRows: मैट्रिक्स की प्रत्येक पंक्ति में बाइट्स को चक्रीय रूप से शिफ्ट किया जाता है। पहली पंक्ति को शिफ्ट नहीं किया जाता, दूसरी को एक से, तीसरी को दो से, और चौथी को तीन से शिफ्ट किया जाता है। यह डेटा को इधर-उधर फेंट देता है।
- MixColumns: प्रत्येक कॉलम पर एक गणितीय ऑपरेशन किया जाता है, जिससे बाइट्स आपस में मिक्स हो जाते हैं। यह डिफ्यूजन प्रदान करता है, जिससे एक सिंगल प्लेनटेक्स्ट बाइट का प्रभाव पूरे ब्लॉक पर फैल जाता है।
- AddRoundKey: मुख्य एन्क्रिप्शन की का एक हिस्सा (इस राउंड के लिए एक विशिष्ट "राउंड की") को स्टेट के साथ XOR किया जाता है। यहीं पर सीक्रेट की असल में आपके डेटा में मिक्स होती है।
यह SubBytes -> ShiftRows -> MixColumns -> AddRoundKey क्रम बार-बार दोहराया जाता है। प्रत्येक राउंड डेटा को और भी अधिक स्क्रैम्बल करता है जब तक कि, अंतिम राउंड के बाद, स्टेट मैट्रिक्स पूरी तरह से गड़बड़ सिफरटेक्स्ट का एक ब्लॉक न बन जाए। डिक्रिप्ट करने के लिए, आप बस उन्हीं स्टेप्स को उसी की (key) के साथ उल्टे क्रम में चलाते हैं।
सब कुछ एक साथ लाना: सिफर मोड्स और पैडिंग
AES केवल एक 16-बाइट ब्लॉक को एन्क्रिप्ट करना जानता है। आपके 500-बाइट के संदेश का क्या? यहीं पर मोड्स ऑफ़ ऑपरेशन काम आते हैं। एक मोड ऑफ़ ऑपरेशन किसी भी लम्बाई के डेटा स्ट्रीम को एन्क्रिप्ट करने के लिए ब्लॉक सिफर का उपयोग करने की एक रेसिपी है।
CBC (साइफर ब्लॉक चेनिंग) जैसे पुराने मोड्स में कुछ सुरक्षा खामियां थीं। आधुनिक, अनुशंसित मोड GCM (गैलोज़/काउंटर मोड) है। GCM एक "ऑथेंटिकेटेड एन्क्रिप्शन" मोड है, जिसे कहने का एक फैंसी तरीका यह है कि यह एक की कीमत पर दो चीजें प्रदान करता है:
- गोपनीयता (Confidentiality): यह आपके डेटा को एन्क्रिप्ट करता है ताकि कोई इसे पढ़ न सके।
- प्रामाणिकता (Authenticity): यह एक छोटा "ऑथेंटिकेशन टैग" बनाता है। यदि सिफरटेक्स्ट का एक भी बिट ट्रांज़िट के दौरान फ़्लिप या छेड़छाड़ किया जाता है, तो डिक्रिप्ट करते समय टैग मेल नहीं खाएगा, और प्रक्रिया विफल हो जाएगी। यह आपको न केवल यह बताता है कि डेटा गुप्त था, बल्कि यह भी कि इसके साथ छेड़छाड़ नहीं की गई थी।
वास्तविक दुनिया की कहानियाँ
फ्रीलांसर का क्लाइंट सीक्रेट
एक UX डिज़ाइनर, अन्या को अपनी क्लाइंट को एक नए, अघोषित उत्पाद का मॉकअप भेजना था। मॉकअप फ़ाइल में संवेदनशील ब्रांडिंग और रणनीतिक जानकारी थी। इसे ईमेल करना जोखिम भरा लगा—ईमेल कुख्यात रूप से असुरक्षित है। एक बार की डिलीवरी के लिए एक सुरक्षित फ़ाइल ट्रांसफर पोर्टल स्थापित करना ज़रूरत से ज़्यादा था। इसके बजाय, अन्या ने अपने काम वाली ZIP फ़ाइल को एक पासवर्ड का उपयोग करके एन्क्रिप्ट किया। फिर उसने क्लाइंट को फोन किया और उन्हें फोन पर पासवर्ड बताया। अब वह एन्क्रिप्टेड फ़ाइल को सुरक्षित रूप से ईमेल कर सकती थी, यह जानते हुए कि केवल क्लाइंट ही इसे खोल सकता है।
सबक: पासवर्ड-आधारित एन्क्रिप्शन दो लोगों के बीच जटिल इंफ्रास्ट्रक्चर के बिना संवेदनशील फाइलों को एड-हॉक, सुरक्षित साझा करने के लिए एक शानदार टूल है।
डेवलपर की कॉन्फ़िग फ़ाइल
बेन एक वेब एप्लिकेशन बना रहा था जो एक डेटाबेस से जुड़ता था और एक थर्ड-पार्टी पेमेंट API का उपयोग करता था। डेटाबेस पासवर्ड और API की एक config.json फ़ाइल में संग्रहीत थे। उसे अपने कोड को एक साझा Git रिपॉजिटरी में कमिट करने की आवश्यकता थी, लेकिन config.json को प्लेन-टेक्स्ट सीक्रेट्स के साथ कमिट करना एक विनाशकारी सुरक्षा उल्लंघन होगा। इसलिए, उसने config.json को एन्क्रिप्ट करके config.json.enc बनाया। डिक्रिप्शन के लिए पासवर्ड कोड में संग्रहीत नहीं था। डेवलपमेंट में, वह बस फ़ाइल को स्थानीय रूप से डिक्रिप्ट कर लेता। प्रोडक्शन में, पासवर्ड को एक एनवायरनमेंट वेरिएबल के रूप में एप्लिकेशन को सुरक्षित रूप से पास किया जाता था, जिसका उपयोग ऐप स्टार्टअप पर कॉन्फ़िग को डिक्रिप्ट करने के लिए करता था।
सबक: कॉन्फ़िगरेशन फ़ाइलों को एन्क्रिप्ट करने से आप "सीक्रेट्स एट रेस्ट" को अपने कोड के साथ सुरक्षित रूप से स्टोर कर सकते हैं, जिससे सीक्रेट डेटा को उसे अनलॉक करने के लिए आवश्यक सीक्रेट की से अलग किया जा सकता है।
क्लाउड में पत्रकार के नोट्स
मारिया, एक खोजी पत्रकार, एक संवेदनशील कहानी पर काम कर रही थी। वह अपने इंटरव्यू नोट्स और रिसर्च को एक फोल्डर में रखती थी जो एक लोकप्रिय क्लाउड स्टोरेज सेवा से सिंक होता था। हालाँकि उसे सेवा की सुरक्षा पर भरोसा था, लेकिन वह संभावित खतरों के बारे में चिंतित थी: क्लाउड कंपनी में कोई बदमाश कर्मचारी, कोई सरकारी समन, या कोई बड़ा डेटा ब्रीच। अपने स्रोतों की रक्षा के लिए, उसने सिंक किए गए फोल्डर में सहेजने से पहले प्रत्येक दस्तावेज़ को एक मजबूत, यूनिक पासवर्ड से एन्क्रिप्ट किया। अब, भले ही उसका पूरा क्लाउड अकाउंट कॉम्प्रोमाइज हो जाए, उसके नोट्स बस न पढ़े जा सकने वाली बकवास होंगे।
सबक: एन्क्रिप्शन "ज़ीरो-ट्रस्ट" सुरक्षा की एक व्यक्तिगत परत प्रदान करता है, यह सुनिश्चित करता है कि आपका डेटा निजी बना रहे, भले ही वह उन सिस्टम पर संग्रहीत हो जिन्हें आप नियंत्रित नहीं करते हैं।
आम गलतियाँ और जाल
- कमज़ोर पासवर्ड का उपयोग करना। AES-256 को ब्रूट फोर्स द्वारा तोड़ना व्यावहारिक रूप से असंभव है। लेकिन KDF जो आपके पासवर्ड से की (key) बनाता है, वह असुरक्षित है अगर पासवर्ड "12345" या "password" है। पूरे सिस्टम की सुरक्षा आपके पासवर्ड की ताकत पर निर्भर करती है। एक लंबा, रैंडम और यूनिक पासफ़्रेज़ का उपयोग करें।
- पासवर्ड भूल जाना। पासवर्ड-आधारित एन्क्रिप्शन में, कोई "अपना पासवर्ड भूल गए?" लिंक नहीं होता है। पासवर्ड ही की (key) है। यदि आप इसे खो देते हैं, तो डेटा हमेशा के लिए चला जाता है। यह सिर्फ लॉक नहीं हुआ है; की (key) भाप बनकर उड़ चुकी है। अपने पासवर्ड को पासवर्ड मैनेजर में सुरक्षित रूप से स्टोर करें।
- अपना खुद का क्रिप्टो बनाना। यह सॉफ्टवेयर सुरक्षा का सबसे बड़ा पाप है। आप शायद जानते हों कि AES, GCM, और PBKDF2 क्या हैं, लेकिन उन्हें सुरक्षित रूप से संयोजित करना मुश्किलों से भरा है। क्या आपने साल्ट (salt) के लिए क्रिप्टोग्राफ़िक रूप से सुरक्षित रैंडम नंबर जनरेटर का उपयोग किया? क्या आपका ऑथेंटिकेशन टैग ठीक से संभाला गया है? हमेशा अपनी प्रोग्रामिंग भाषा के लिए एक प्रतिष्ठित, पीयर-रिव्यूड क्रिप्टोग्राफ़िक लाइब्रेरी का उपयोग करें। ताला खुद न बनाएं; इसे किसी माहिर ताला बनाने वाले से खरीदें।
- साल्ट (salt) या IV का दोबारा उपयोग करना। साल्ट (KDF के लिए) और IV/नॉन्स (सिफर मोड के लिए) हर एक एन्क्रिप्शन ऑपरेशन के लिए रैंडम और यूनिक होना चाहिए जो एक ही की (key) के साथ किया जाता है। उनका दोबारा उपयोग सिफर की सुरक्षा को विनाशकारी रूप से तोड़ सकता है। अच्छी लाइब्रेरियां इसे आपके लिए संभालती हैं, लेकिन यह एक जाल है जिससे अवगत रहना चाहिए।
यह आपके रडार पर क्यों होना चाहिए
अगर आप एक डेवलपर हैं, तो आपको सीक्रेट्स को संभालना ही होगा। यह तय है। चाहे वह डेटाबेस कनेक्शन स्ट्रिंग हो, API की हो, उपयोगकर्ता की व्यक्तिगत जानकारी हो, या सिर्फ एक संवेदनशील लॉग फ़ाइल हो, आपके पास ऐसा डेटा होगा जिसे उजागर नहीं किया जाना चाहिए।
पासवर्ड-आधारित AES डेटा 'एट रेस्ट' की गोपनीयता सुनिश्चित करने के लिए आपका पसंदीदा टूल है। यह इन कामों के लिए स्टैंडर्ड, युद्ध-परीक्षित समाधान है:
- आपके कोडबेस में एप्लिकेशन सीक्रेट्स को एन्क्रिप्ट करना।
- क्लाउड स्टोरेज में भेजने से पहले बैकअप को सुरक्षित करना।
- डेटाबेस में संवेदनशील डेटा फ़ील्ड्स की सुरक्षा करना (जैसे, स्टोर करने से पहले सोशल सिक्योरिटी नंबर को एन्क्रिप्ट करना)।
- एक उपयोगकर्ता के लिए आपको एक संवेदनशील फ़ाइल भेजने का एक सरल, सुरक्षित तरीका बनाना।
यह एक ऐसी दुनिया में राज़ को राज़ रखने के लिए मूलभूत बिल्डिंग ब्लॉक है जहाँ डेटा कॉपी, साझा और इतनी जगहों पर संग्रहीत किया जाता है कि हम गिन भी नहीं सकते।
और गहराई में जाएं
- FIPS PUB 197: NIST का आधिकारिक स्टैंडर्ड जो AES (Rijndael) को परिभाषित करता है। यह समझने में थोड़ा मुश्किल है, लेकिन यही सत्य का स्रोत है।
- Wikipedia: Advanced Encryption Standard: AES के इतिहास, डिज़ाइन और सुरक्षा विश्लेषण का एक व्यापक और अत्यधिक पठनीय अवलोकन।
- Wikipedia: PBKDF2: पासवर्ड के साथ उपयोग किए जाने वाले सबसे आम की डेरिवेशन फंक्शन (Key Derivation Function) में एक गहरा गोता।
- NIST Special Publication 800-38D: GCM मोड ऑफ़ ऑपरेशन के लिए आधिकारिक विनिर्देश।
- Cryptography I (Coursera/Stanford): डैन बोनेह द्वारा एक मुफ्त विश्वविद्यालय-स्तरीय कोर्स जो एप्लाइड क्रिप्टोग्राफी में एक ठोस नींव प्रदान करता है।