हिन्दी

डेवलपर टूल · Base64 एनकोडर और डिकोडर

Base64 एन्क्रिप्शन नहीं है: क्यों एक एन्कोडेड रहस्य किसी के द्वारा पढ़ने योग्य है

· यह क्यों मायने रखती है

Base64 सुरक्षा एन्कोडिंग

Base64 एन्कोडेड टेक्स्ट को बिना किसी कुंजी के तुरंत डिकोड किया जाता है, जो प्लेनटेक्स्ट सामग्री दिखाता है
मूल ToolAcre वेक्टर चित्रण

Base64 कुछ भी नहीं छुपाता: स्ट्रिंग वाला कोई भी व्यक्ति इसे बिना किसी कुंजी के तुरंत डिकोड कर सकता है। यह पोस्ट एन्कोडिंग, एन्क्रिप्शन और हैशिंग के बीच अंतर बताती है, और जब आपको किसी रिपॉजिटरी में Base64 रहस्य मिलते हैं तो क्या करना चाहिए।

कॉन्फ़िगरेशन मान जो डेटाबेस पासवर्ड में स्क्रैम्बल और डीकोड किया गया दिखता है - एक ठोस खोज और यह कितनी जल्दी उलट जाता है

कॉन्फ़िगरेशन फ़ाइल में Base64 ढूँढने से सुरक्षा की गलत भावना पैदा होती है। एक डेवलपर एक डेटाबेस पासवर्ड खोजता है जो dGlnZXJfZGF0YWJhc2VfYWRtaW4 जैसे एक क्रमबद्ध अनुक्रम के रूप में प्रकट होता है, मान लेता है कि यह एन्क्रिप्टेड है, और इसे एप्लिकेशन कोड के साथ रिपॉजिटरी में भेज देता है। कुछ सप्ताह बाद एक सुरक्षा समीक्षा से वास्तविक सादे टेक्स्ट का पता चलता है: Tiger_database_admin.

Base64 कुछ नहीं छुपाता; यह एक एन्कोडिंग है, एन्क्रिप्शन नहीं। उलटा किया गया वही पासवर्ड ब्राउज़र में बिना किसी कुंजी, बिना गणना, बिना किसी देरी के तुरंत फिर से कच्चा हो जाता है। यह पोस्ट बताती है कि एन्कोडिंग आखिर क्यों मौजूद है, यह एन्क्रिप्शन और हैशिंग से मौलिक रूप से कैसे भिन्न है, और जब किसी को प्रतिबद्ध इतिहास में Base64 रहस्य मिलते हैं तो वास्तव में क्या होता है।

एन्कोडिंग, एन्क्रिप्शन और हैशिंग: तीन अलग-अलग नौकरियां - प्रत्येक क्या गारंटी देता है, और किसे कुंजी की आवश्यकता है

भ्रम इसलिए पैदा होता है क्योंकि Base64 सुरक्षा जैसा दिखता है। कोई मनुष्य dGlnZXJfZGF0YWJhc2VfYWRtaW4 पर नज़र नहीं डाल सकता और Tiger_database_admin नहीं पढ़ सकता। यह तब तक अस्पष्ट दिखाई देता है जब तक आप इसे डिकोडर के माध्यम से नहीं चलाते। वह सतही स्तर का भ्रम सुरक्षा जैसा लगता है, लेकिन ऐसा नहीं है। Base64 को पूरी तरह से एक अलग समस्या को हल करने के लिए डिज़ाइन किया गया था: केवल-पाठ चैनलों के माध्यम से मनमाने ढंग से बाइनरी डेटा को स्थानांतरित करना। ईमेल, पुराने वेब फॉर्म और लाइन-प्रोटोकॉल सिस्टम कच्चे बाइट्स नहीं ले जा सकते थे। Base64 बाइट्स को प्रिंट करने योग्य ASCII वर्णों में परिवर्तित करता है ताकि डेटा उन चैनलों से होकर गुजर सके।

एक बार डेटा आने के बाद, प्राप्तकर्ता ने इसे वापस बाइट्स में डिकोड कर दिया। एन्कोडिंग और डिकोडिंग समान रूप से सरल हैं; उन्हें किसी कुंजी, किCAन्ट्रॉपी, किसी क्रिप्टोग्राफ़िक लाइब्रेरी की आवश्यकता नहीं है। एन्कोडिंग, एन्क्रिप्शन और हैशिंग तीन अलग-अलग उद्देश्यों को पूरा करते हैं और तीन अलग-अलग गारंटी प्रदान करते हैं। एन्कोडिंग डेटा को एक अलग प्रतिनिधित्व में बदल देती है ताकि यह एक विशिष्ट चैनल से गुजर सके या किसी विशिष्ट संदर्भ में उपयोग किया जा सके। Base64, URL-एन्कोडिंग, हेक्स प्रतिनिधित्व और यहां तक ​​कि JSON में एस्केपिंग कोट्स सभी एन्कोडिंग हैं। इन्हें कोई भी उलट सकता है और इसके लिए किसी गुप्त कुंजी की आवश्यकता नहीं होती।

Base64 आख़िर क्यों मौजूद है - टेक्स्ट चैनलों के माध्यम से बाइट्स का सुरक्षित परिवहन, गोपनीयता कभी नहीं

लक्ष्य प्रारूप अनुकूलता है, गोपनीयता नहीं। इसके विपरीत, एन्क्रिप्शन के लिए एक कुंजी की आवश्यकता होती है जो केवल अधिकृत पक्षों को ज्ञात होती है। केवल सही कुंजी वाला कोई व्यक्ति ही सिफरटेक्स्ट को वापस प्लेनटेक्स्ट में बदल सकता है। कुंजी के बिना संदेश उस पर हमला करने के लिए पर्याप्त परिष्कृत व्यक्ति के लिए भी अपारदर्शी रहता है। डिज़ाइन के अनुसार हैशिंग एकतरफ़ा है: किसी पासवर्ड के क्रिप्टोग्राफ़िक हैश को बिल्कुल भी उलटा नहीं किया जा सकता है। इसका उपयोग यह सत्यापित करने के लिए किया जाता है कि कोई पासवर्ड पासवर्ड को संग्रहीत किए बिना संग्रहीत हैश से मेल खाता है।

कुबेरनेट्स सीक्रेट नामक डेटाबेस-पासवर्ड जिसमें Base64 शामिल है: dGlnZXJfZGF0YWJhc2VfYWRtaW4 वास्तव में गुप्त नहीं है। Base64 डिफ़ॉल्ट एन्कोडिंग है जिसका उपयोग कुबेरनेट्स भंडारण के लिए करता है, सुरक्षा के लिए नहीं। YAML या आदि डेटाबेस तक पहुंच रखने वाला कोई भी व्यक्ति सेकंड में मूल्य को डिकोड कर सकता है। स्टार्टअप स्क्रिप्ट में Base64-एन्कोडेड API कुंजियों वाले पर्यावरण चर को समान समस्या का सामना करना पड़ता है। एक बेसिक ऑथेंटिकेशन हेडर जो सर्वर पर ऑथराइजेशन: बेसिक Base64_यूजरनेम:पासवर्ड भेजता है, उसे क्लाइंट और सर्वर के बीच किसी भी प्रॉक्सी, मॉनिटरिंग टूल या नेटवर्क ऑब्जर्वर द्वारा डिकोड किया जा सकता है।

कारगर उदाहरण: ब्राउज़र में एक 'गुप्त' स्ट्रिंग को डिकोड करना - एक पेस्ट, एक डिकोड और प्लेनटेक्स्ट, जिसमें कोई सर्वर शामिल नहीं है

यदि चैनल HTTPS के बजाय HTTP है, तो एक्सपोज़र और भी अधिक है। इन संदर्भों में Base64 एक खतरे की घंटी है: वास्तविक रहस्य को पुनर्प्राप्त करने योग्य रूप में संग्रहीत या प्रसारित करके पहले ही समझौता किया जा चुका है। एक कार्यान्वित उदाहरण समस्या को ठोस बनाता है। मान लीजिए कि किसी तृतीय-पक्ष सेवा के लिए API कुंजी कॉन्फ़िगरेशन फ़ाइल में YXBpa2V5XzEyMzQ1Njc4OTAx के रूप में दिखाई देती है। इस स्ट्रिंग को अपने ब्राउज़र में Base64 एनकोडर और डिकोडर में कॉपी करें, इसे इनपुट फ़ील्ड में पेस्ट करें और डिकोड पर क्लिक करें।

टूल apikey_1234567890 लौटाता है। यह आपके ब्राउज़र में तुरंत हुआ, बिना किसी सर्वर से संपर्क किए, किसी कुंजी की आवश्यकता नहीं और कोई प्रमाणीकरण नहीं किया गया। पूरे ऑपरेशन में एक सेकंड से भी कम समय लगता है। अब मान लीजिए कि यही कुंजी किसी दुर्भावनापूर्ण अभिनेता द्वारा सार्वजनिक GitHub रिपॉजिटरी में पाई जाती है। वे इसे समान रूप से आसानी से डिकोड करते हैं, चाहे जो भी टूल उन्हें पसंद हो, और सेवा तक पहुंचने के लिए इसका उपयोग करते हैं। क्या स्ट्रिंग रिपॉजिटरी में अस्पष्ट रहती है, नेटवर्क पर यात्रा करती है या एप्लिकेशन लॉग में दिखाई देती है, इसे हर प्रोग्रामिंग भाषा और इस तरह के ब्राउज़र टूल में उपलब्ध एक तुच्छ ऑपरेशन के साथ प्रकट किया जा सकता है।

यह गलती कहां दिखाई देती है - कुबेरनेट्स सीक्रेट्स, .env फ़ाइलें, बेसिक ऑथ हेडर और मोबाइल ऐप संसाधन

गलती हर जगह दिखाई देती है क्योंकि Base64 इतना सामान्य है कि यह निकटता से अस्पष्टता से जुड़ा हुआ हो जाता है। डेवलपर्स Base64-एन्कोडेड डेटा देखते हैं, अनुमान लगाते हैं कि किसी ने सोचा कि यह मायने रखता है, और उसी रूप में रहस्य छोड़ देते हैं। एक .env फ़ाइल जिसमें API_KEY=VGhpcyBpcyBub3QgcmVhbGx5IGEgc2VjcmV0 है, एक जूनियर इंजीनियर को API_KEY से अधिक सुरक्षित लगती है=यह वास्तव में एक रहस्य नहीं है, भले ही डिकोडिंग में एक ऑपरेशन लगता है। मोबाइल एप्लिकेशन Base64-एनकोडेड टोकन को संसाधनों में बंडल करते हैं जिन्हें कोई भी डिकंपाइलर निकाल और डिकोड कर सकता है। डेटाबेस बैकअप में फ़ील्ड में Base64-एन्कोडेड पासवर्ड होते हैं जो खोजे जाने के लिए होते हैं, संरक्षित नहीं होते हैं।

प्रत्येक मामले में किसी ने एन्कोडिंग को एन्क्रिप्शन समझ लिया है और प्लेनटेक्स्ट रहस्यों का एक संग्रह बनाया है जिसे इस तरह से स्वरूपित किया गया है कि पढ़ने के लिए एक अतिरिक्त चरण की आवश्यकता होती है। Base64 रहस्यों का पता चलने पर क्या करना है यह संदर्भ पर निर्भर करता है।

इसके बजाय क्या करें - गुप्त प्रबंधक, बाकी पर वास्तविक एन्क्रिप्शन, और पहले से ही प्रतिबद्ध किसी भी चीज़ को घुमाना

यदि रहस्य एक टोकन, API कुंजी या पासवर्ड है और यह पहले से ही संस्करण नियंत्रण के लिए प्रतिबद्ध है, तो इसे समझौता के रूप में मानें। इसे निरस्त करें, एक नया जनरेट करें और उन सभी स्थानों को अपडेट करें जहां इसका उपयोग किया गया था। ऐतिहासिक प्रतिबद्धता भंडार स्थायी रिकॉर्ड का हिस्सा है, भले ही रहस्य को बाद में एक नई प्रतिबद्धता में हटा दिया गया हो; रिपॉजिटरी इतिहास तक पहुंच रखने वाला कोई भी व्यक्ति इसे पा सकता है।

Base64-एन्कोडेड मानों के लिए रिपॉजिटरी खोजना अब एक मानक टोही रणनीति है, इसलिए यह तथ्य कि कुछ Base64 था, इसे गुप्त नहीं बनाता है। किसी भी चल रहे ऑपरेशन के लिए, कभी भी Base64 के साथ रहस्यों को एन्कोड न करें और मान लें कि वे सुरक्षित हैं। एक रहस्य प्रबंधक का उपयोग करें जो एन्क्रिप्टेड, एक्सेस-नियंत्रित और ऑडिट योग्य मूल्यों को संग्रहीत करता है। एप्लिकेशन कोड और कॉन्फ़िगरेशन में केवल संदर्भ या व्युत्पत्ति को संग्रहित करें, रहस्य को नहीं। बाकी पर वास्तविक एन्क्रिप्शन का मतलब है कि डेटा को अलग से संग्रहीत कुंजी के साथ एन्क्रिप्ट किया गया है और यह उन लोगों के लिए बेकार है जिनके पास वह कुंजी नहीं है।

इसमें क्या शामिल नहीं है - एक एन्क्रिप्शन एल्गोरिदम या कुंजी-प्रबंधन डिज़ाइन चुनना

एक डेटाबेस जो संवेदनशील कॉलमों को एन्क्रिप्ट करता है, एक रहस्य प्रबंधक जो हार्डवेयर सुरक्षा मॉड्यूल में कुंजियों के साथ लिफाफा एन्क्रिप्शन का उपयोग करता है, या एक पासवर्ड मैनेजर जो उपयोगकर्ता पासवर्ड से एन्क्रिप्शन कुंजी प्राप्त करता है, सभी वास्तविक गोपनीयता प्रदान करते हैं। रहस्यों को कहीं भी संग्रहीत करने से पहले बनाए गए बिंदु पर एप्लिकेशन-स्तरीय एन्क्रिप्शन अभी भी अधिक मजबूत है। उजागर किए गए रहस्यों को घुमाने से, भले ही वे केवल Base64-एन्कोडेड हों, दुरुपयोग के अवसर की खिड़की को हटा देते हैं। यदि कोई रहस्य रिपॉजिटरी में था, तो यह देखने के लिए लॉग की जाँच करें कि इसे कब एक्सेस किया गया था और एक्सपोज़र विंडो के दौरान इसका उपयोग किस लिए किया गया था।

निरंतर सुरक्षा के लिए, प्राधिकरण सेवा द्वारा जारी किए गए अल्पकालिक टोकन का उपयोग करें, कॉन्फ़िगरेशन में संग्रहीत स्थिर रहस्यों का नहीं। एक घंटे में समाप्त होने वाला टोकन किसी हमलावर के लिए कम मूल्यवान होता है, भले ही उससे छेड़छाड़ की गई हो। यह आलेख एन्क्रिप्शन एल्गोरिथ्म, कुंजी-प्रबंधन डिज़ाइन या प्रमाणीकरण आर्किटेक्चर को चुनने पर चर्चा नहीं करता है। वे अपने स्वयं के मानकों और व्यापार-बंदों के साथ गहन इंजीनियरिंग प्रश्न हैं। बात सरल है: Base64 उन समस्याओं में से किसी के लिए एक टूल नहीं है। यह परिवहन और भंडारण के लिए एक प्रारूप रूपांतरण है।

टेकअवे: Base64 को प्लेनटेक्स्ट के रूप में मानें - कैसे Base64 एनकोडर और डिकोडर एक क्लिक में बिंदु बना देता है, बिना आपके टैब को छोड़े रहस्य

किसी रिपॉजिटरी, कॉन्फ़िगरेशन फ़ाइल या लॉग में Base64 की उपस्थिति से आपको यह तसल्ली न होने दें कि डेटा सुरक्षित है। कोई भी टूल जो पाठ पढ़ सकता है, Base64 को डीकोड कर सकता है, और ऑपरेशन तत्काल और नियतात्मक है। Base64-एन्कोडेड स्ट्रिंग को सिफरटेक्स्ट के रूप में पढ़ना एक आम गलतफहमी है, और यह वास्तविक रहस्यों को स्पष्ट दृष्टि में छोड़ देता है। डेवलपर्स को अक्सर इसका एहसास उत्पादन में या ऑडिट में Base64 रहस्य मिलने के बाद ही होता है। एक नया परिप्रेक्ष्य तब आता है जब एक इंजीनियर एक नमूना स्ट्रिंग को स्थानीय रूप से डिकोड करता है और मूल प्लेनटेक्स्ट को तुरंत दिखाई देता है।

टूल इस बात को अपरिहार्य बनाता है: एन्कोडिंग एन्क्रिप्शन नहीं है। एक बार जब यह अंतर स्पष्ट हो जाता है, तो अनुवर्ती कार्रवाई स्वचालित हो जाती है। कोडबेस में प्रत्येक Base64 रहस्य को घुमाया जाना चाहिए। जिस भी स्थान पर रहस्य का उपयोग किया जाता है उसे अद्यतन किया जाना चाहिए। एक्सपोज़र विंडो का मूल्यांकन किया जाना चाहिए। भविष्य के लिए, गुप्त प्रबंधकों और वास्तविक एन्क्रिप्शन को इस भूमिका में एन्कोडिंग का स्थान लेना होगा। Base64 एनकोडर और डिकोडर दिखाता है कि रिवर्सल कितना तेज़ और आसान है, आपके रहस्य को ब्राउज़र से बाहर निकले बिना। उस सहजता को वास्तविक सुरक्षा मुद्रा मानें: यदि आप इसे एक सेकंड में डिकोड कर सकते हैं, तो कोई भी ऐसा कर सकता है।