डेवलपर टूल · SHA हैश कैलकुलेटर
लंबाई विस्तार हमले: क्यों SHA-256(गुप्त + संदेश) MAC नहीं है
· यह क्यों मायने रखती है
शा-256 क्रिप्टोग्राफी सुरक्षा
किसी संदेश में कोई रहस्य जोड़ना और उसे हैश करना प्रमाणीकरण की तरह दिखता है, लेकिन SHA-256 की संरचना एक हमलावर को रहस्य जाने बिना संदेश का विस्तार करने देती है। यह पोस्ट हमले और समाधान के बारे में बताती है।
घरेलू अनुरोध हस्ताक्षर - हैश (गुप्त + बॉडी) और यह सुरक्षित क्यों महसूस होता है
एक डेवलपर को संदेश प्रमाणीकरण की आवश्यकता होती है लेकिन उसके पास HMAC ज्ञान का अभाव होता है, इसलिए वे संदेश के साथ एक रहस्य जोड़ते हैं और परिणाम को हैश करते हैं। यह दृष्टिकोण पहली बार में सुरक्षित दिखता है: आउटपुट एक निश्चित आकार का फिंगरप्रिंट है जिसे किसी के द्वारा संदेश को संशोधित करने पर बदलना चाहिए। हालाँकि, SHA-256 में लेंथ एक्सटेंशन नामक एक वास्तुशिल्प दोष है जो एक हमलावर को संदेश में डेटा जोड़ने और रहस्य को जाने बिना एक वैध डाइजेस्ट की गणना करने देता है। ToolAcre SHA हैश कैलकुलेटर केवल सादे डाइजेस्ट की गणना करता है, कुंजी प्रमाणीकरण की नहीं, क्योंकि यह अंतर वास्तविक सुरक्षा के लिए मायने रखता है।
हैशिंग से पहले एक रहस्य तैयार करना सहज रूप से आकर्षक है क्योंकि केवल रहस्य धारक ही हैश की पुनः गणना कर सकता है। यदि संदेश बदलता है, तो हैश भी बदल जाता है, इसलिए यह प्रामाणिकता के प्रमाण जैसा दिखता है। एक API एक साझा रहस्य और अनुरोध निकाय को जोड़कर अनुरोधों पर हस्ताक्षर कर सकता है, फिर परिणाम को हैश कर सकता है और अनुरोध में उस हैश को शामिल कर सकता है। सर्वर बॉडी प्राप्त करता है, रहस्य की अपनी प्रतिलिपि के साथ हैश की पुन: गणना करता है, और जांच करता है कि यह मेल खाता है या नहीं। यदि कोई हमलावर बॉडी बदलता है, तो हैश मेल नहीं खाएगा—या ऐसा डेवलपर्स सोचते हैं।
मर्कल-डैमगार्ड अपनी स्थिति को लीक करता है - अंतिम डाइजेस्ट आंतरिक स्थिति है, इसलिए एक हमलावर वहीं से हैशिंग जारी रख सकता है जहां आप रुके थे
SHA-256 मर्कले-डैमगार्ड हैश फ़ंक्शन नामक परिवार से संबंधित है। ये फ़ंक्शन निश्चित आकार के ब्लॉकों में इनपुट की प्रक्रिया करते हैं, एक संपीड़न फ़ंक्शन को जोड़ते हैं जो पिछली स्थिति और वर्तमान ब्लॉक लेता है और एक नई स्थिति आउटपुट करता है। संपीड़न फ़ंक्शन अंदर एकमात्र क्रिप्टोग्राफ़िक आदिम है; चेनिंग रणनीति और पैडिंग योजना संपूर्ण निर्माण कार्य करती है। अंतिम डाइजेस्ट केवल हेक्साडेसिमल में मुद्रित अंतिम स्थिति है। यह आकस्मिक नहीं है: आउटपुट आंतरिक स्थिति है। जो कोई भी डाइजेस्ट देखता है उसके पास उस बिंदु से हैशिंग जारी रखने के लिए आवश्यक सटीक स्थिति होती है।
किसी संदेश को विस्तारित करने के लिए, एक हमलावर गुप्त + मूल_मैसेज के देखे गए डाइजेस्ट से शुरू करता है और इसे एक नए संपीड़न फ़ंक्शन कॉल के लिए राज्य चर के रूप में मानता है। वे उस डेटा को जोड़ते हैं जिसे वे जोड़ना चाहते हैं, उसे पूरी नई संदेश लंबाई के लिए सही ढंग से पैड करते हैं, और डाइजेस्ट की गणना करते हैं। जब सर्वर अपने स्वयं के रहस्य और हैशिंग को तैयार करके इस जाली डाइजेस्ट को मान्य करता है, तो प्रारंभिक रहस्य को अवशोषित करने के बाद गणना हमलावर की गणना के समान ही आगे बढ़ती है। सर्वर उसी डाइजेस्ट की गणना करता है, और हमलावर को रहस्य का पता चले बिना ही जाली संदेश स्वीकार कर लिया जाता है।
एक्सटेंशन कैसे काम करता है - लंबे संदेश के लिए वैध हैश बनाने के लिए पैडिंग और अतिरिक्त डेटा जोड़ना
लंबाई विस्तार से अलग-अलग एल्गोरिदम अलग-अलग तरीके से प्रभावित होते हैं। SHA-1 असुरक्षित है: एक हमलावर SHA-1 डाइजेस्ट को देख सकता है और संदेश को बढ़ा सकता है। SHA-256 बिल्कुल उसी तरह से असुरक्षित है। SHA-512 एक्सटेंशन हमलों के प्रति भी संवेदनशील है। SHA-384 लंबाई विस्तार का विरोध करता है क्योंकि इसका निर्माण SHA-512 के रूप में किया गया है जिसे 384 bits में काट दिया गया है। कम्प्रेशन फ़ंक्शन आउटपुट प्रकाशित डाइजेस्ट से अधिक लंबा है, इसलिए हमलावर के पास हैशिंग जारी रखने के लिए पर्याप्त जानकारी नहीं है। SHA-3 में प्रयुक्त स्पंज निर्माण भी प्रतिरोध करता है क्योंकि यह आंतरिक स्थिति को लीक नहीं करता है।
यह समझने के लिए कि कौन से एल्गोरिदम असुरक्षित हैं, संपीड़न फ़ंक्शन आकार बनाम प्रकाशित डाइजेस्ट आकार के बारे में कुछ जानने की आवश्यकता है। SHA-256 256 bits प्रकाशित करता है और संपीड़न फ़ंक्शन स्थिति भी 256 bits है, इसलिए डाइजेस्ट संपूर्ण स्थिति है। एक हमलावर के पास जारी रखने के लिए आवश्यक सभी चीजें हैं। SHA-384 384 bits प्रकाशित करता है, लेकिन अंतर्निहित संपीड़न फ़ंक्शन स्थिति 512 bits है क्योंकि SHA-384 SHA-512 के शीर्ष पर बनाया गया है। डाइजेस्ट केवल उन 512 bits में से 384 को प्रकट करता है, जिससे हमलावर के लिए 128 bits अज्ञात रह जाता है। यह SHA-384 की एक जानबूझकर डिज़ाइन संपत्ति है जो यह प्रतिरोध प्रदान करती है।
समर्थित SHA-1, SHA-256 और SHA-512 निर्माण पूर्ण स्थिति को उजागर करते हैं; SHA-384 कटाव विस्तार सीमा को बदल देता है
साझा रहस्य के साथ संदेशों को प्रमाणित करने का समाधान HMAC है, जो की-हैश संदेश प्रमाणीकरण कोड है। HMAC रहस्य और हैश को आगे नहीं जोड़ता है; इसके बजाय, यह आंतरिक और बाहरी पैड नामक विशिष्ट पैडिंग योजनाओं का उपयोग करके दो नेस्टेड हैश ऑपरेशनों में रहस्य को लागू करता है। निर्माण HMAC(गुप्त, संदेश) = SHA256(गुप्त_XOR_outer_pad, SHA256(गुप्त_XOR_inner_pad, संदेश)) है। यह नेस्टेड दृष्टिकोण लंबाई विस्तार अंतर को बंद कर देता है क्योंकि भले ही किसी हमलावर के पास आंतरिक हैश का डाइजेस्ट हो, वे रहस्य के बिना हैशिंग जारी नहीं रख सकते हैं।
डाइजेस्ट और HMAC संचालन को अलग रखने का कारण दोनों को एक दूसरे के स्थान पर मानने की सामान्य गलती से बचना है। एक डेवलपर जो एक टूल के माध्यम से हैशिंग के बारे में सीखता है जो दोनों काम करता है, वह कोड लिखते समय यह भूल सकता है कि वह किस टूल का उपयोग कर रहा है। डाइजेस्ट गणना को अलग रखने से विकल्प स्पष्ट हो जाता है और यह सीख मजबूत होती है कि प्रमाणीकरण के लिए HMAC या हस्ताक्षर की आवश्यकता होती है। ToolAcre SHA हैश कैलकुलेटर सादे डाइजेस्ट को स्पष्ट रूप से लेबल करता है, और दस्तावेज़ीकरण बताता है कि HMAC पूरी तरह से एक अलग ऑपरेशन है।
HMAC समाधान के रूप में - नेस्टेड निर्माण जो अंतर को बंद करता है और यह मानक उत्तर क्यों है
लंबाई विस्तार का एक वैचारिक उदाहरण परिचित परीक्षण वेक्टर एबीसी पर काम करता है। ASCII टेक्स्ट एबीसी पर SHA-256 की गणना करने से डाइजेस्ट ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad उत्पन्न होता है। मान लीजिए कि यह डाइजेस्ट 5-बाइट सीक्रेट के साथ सीक्रेट + एबीसी हैशेड का परिणाम है, जो कुल 8 bytes इनपुट देता है। SHA-256 इनपुट को 64-बाइट ब्लॉक में संसाधित करता है, इसलिए पहला और एकमात्र ब्लॉक संदेश की लंबाई और अन्य पैडिंग बाइट्स के साथ पैडेड था। एक हमलावर डाइजेस्ट देखता है और एबीसी से शुरू होकर अतिरिक्त डेटा के साथ एक संदेश बनाना चाहता है।
वे सीधे एबीसी से नहीं जुड़ सकते क्योंकि उन्हें हैश के अंदर जोड़ी गई सटीक पैडिंग का पता नहीं है। हालाँकि, वे गणना कर सकते हैं कि पूर्ण गद्देदार संदेश क्या रहा होगा: abc प्लस एक 8-बाइट इनपुट के लिए 64-बाइट ब्लॉक के लिए आवश्यक पैडिंग। फिर वे अपना अतिरिक्त डेटा जोड़ते हैं, नई कुल लंबाई के लिए पैडिंग की गणना करते हैं, और देखे गए डाइजेस्ट को प्रारंभिक अवस्था मानकर संयोजन को हैश करते हैं। परिणाम एक वैध SHA-256 डाइजेस्ट है जिसे सर्वर स्वीकार करेगा क्योंकि यह रहस्य को जोड़ता है और उसी हैश की गणना करता है।
कारगर उदाहरण - बिना किसी लाइव लक्ष्य के, एक हस्ताक्षरित संदेश को आगे बढ़ाने का एक वैचारिक पूर्वाभ्यास
वास्तविक सिस्टम में इस हमले को रोकने के लिए, डेवलपर को सादे हैश से प्रमाणीकरण बनाने का प्रयास नहीं करना चाहिए। HMAC मानक उत्तर है, और ToolAcre SHA हैश कैलकुलेटर अखंडता जांच, सामग्री हैशिंग और इसी तरह के गैर-प्रमाणीकरण उद्देश्यों के लिए सादे डाइजेस्ट की गणना करने के लिए एक टूल है। सादे SHA-256 डाइजेस्ट के सुरक्षित उपयोग के उदाहरणों में फ़ाइल चेकसम शामिल हैं, जहां एक हमलावर फ़ाइल और डाइजेस्ट दोनों को नियंत्रित नहीं कर सकता है; सामग्री-पता योग्य भंडारण, जहां हैश लुकअप कुंजी है; और डिजिटल हस्ताक्षर हस्ताक्षर के साथ संयुक्त होते हैं, जहां हस्ताक्षर प्रमाणीकरण प्रदान करता है।
इस मुद्दे के पूर्ण दायरे में ब्राउज़र द्वारा प्रदान किए जाने वाले अन्य एल्गोरिदम शामिल हैं। SHA-1 लंबाई विस्तार के प्रति संवेदनशील है और प्रासंगिक होने से पहले ही क्रिप्टोग्राफ़िक रूप से टूट चुका था। ToolAcre कैलकुलेटर SHA-1 को केवल विरासत के रूप में लेबल करता है और टकराव के हमलों की व्याख्या करता है जिसने इसे नए अनुप्रयोगों के लिए अनुपयुक्त बना दिया है। नए अनुप्रयोगों के लिए, SHA-256 सादे डाइजेस्ट के लिए समझदार विकल्प है, और यदि प्रमाणीकरण की आवश्यकता है, तो SHA-256 के साथ HMAC उत्तर है। SHA-384 और SHA-512 दोनों असुरक्षित हैं, लेकिन SHA-384 ट्रंकेशन द्वारा सुरक्षित हैं।
इसमें क्या शामिल नहीं है - ToolAcre कैलकुलेटर सादे डाइजेस्ट की गणना करता है, HMAC की नहीं; पोस्ट बताती है कि यह अंतर क्यों मायने रखता है
हैश फ़ंक्शंस के मानसिक मॉडल का निर्माण करते समय, मर्कले-डैमगार्ड निर्माण और लंबाई विस्तार प्रमुख अवधारणाएं बन जाते हैं। एक हैश फ़ंक्शन को मनमानी इनपुट लंबाई को संभालना चाहिए और निश्चित आउटपुट उत्पन्न करना चाहिए। जिस तरह से यह ऐसा करता है वह एक कंप्रेशन फ़ंक्शन को ब्लॉक दर ब्लॉक श्रृंखलाबद्ध करके होता है, और जिस तरह से अंतिम स्थिति को आउटपुट में परिवर्तित किया जाता है वह काफी मायने रखता है। यदि अंतिम स्थिति पूरी तरह से आउटपुट है, तो उस आउटपुट में हैशिंग जारी रखने के लिए आवश्यक सभी जानकारी शामिल है। यदि अंतिम स्थिति को छोटा कर दिया जाता है, तो भाग छिपा दिया जाता है।
पहली बार लंबाई विस्तार हमलों के बारे में पढ़ने वाले डेवलपर के लिए, सवाल यह है कि यह कैसे पता चलेगा कि यह उनके उपयोग के मामले को प्रभावित करता है या नहीं। यदि हैश का इनपुट एक सार्वजनिक स्थिरांक है और हैश का उपयोग लुकअप कुंजी या फ़िंगरप्रिंट के रूप में किया जाता है, तो लंबाई विस्तार अप्रासंगिक है। यदि हैश का उपयोग किसी संदेश को प्रमाणित करने के लिए किया जाता है जब दोनों पक्ष कोई रहस्य साझा करते हैं, तो लंबाई विस्तार एक गंभीर भेद्यता है, और HMAC इसका समाधान है। ToolAcre SHA हैश कैलकुलेटर डाइजेस्ट और बाइट गिनती प्रदर्शित करता है, जिससे यह स्पष्ट हो जाता है कि ये कम्प्यूटेशनल आउटपुट हैं, प्रमाणीकरण तंत्र नहीं।
टेकअवे: प्रमाणीकरण के लिए MAC का उपयोग करें - ToolAcre SHA हैश कैलकुलेटर अखंडता डाइजेस्ट के लिए है; प्रमाणीकरण के लिए HMAC या हस्ताक्षर की आवश्यकता है
इसे उत्पादन प्रणालियों पर लागू करने पर, सिद्धांत सीधा है: जब कोई रहस्य शामिल हो तो प्रमाणीकरण के लिए कभी भी नंगे हैश का उपयोग न करें। HMAC मानक निर्माण है जो लंबाई विस्तार आक्रमण वेक्टर को पूरी तरह से बंद कर देता है। सही ढंग से उपयोग किए जाने पर SHA-256 और SHA-384 दोनों अपने इच्छित उद्देश्यों के लिए सुरक्षित हैं। तीन प्रमुख बिंदुओं को समझना - कि मर्कले-डैमगार्ड डाइजेस्ट में अपनी स्थिति का खुलासा करता है, कि SHA-384 राज्य के हिस्से को छिपाने के लिए काट-छांट करता है, और वह HMAC विस्तार को रोकने के लिए एक नेस्टेड निर्माण का उपयोग करता है - एक डेवलपर को सही विकल्प बनाने के लिए टूल देता है।
ToolAcre SHA हैश कैलकुलेटर इस शिक्षण का प्रतीक है: यह सीखने के लिए और वैध गैर-प्रमाणीकरण उपयोगों के लिए सरल डाइजेस्ट प्रदान करता है, यह SHA-1 को विरासत के रूप में लेबल करता है, और यह HMAC को लागू नहीं करता है क्योंकि यह ऑपरेशन एक अलग संदर्भ में है। जब डेवलपर्स किसी अनुरोध को प्रमाणित करने के लिए एक सादे हैश कैलकुलेटर तक पहुंचते हैं, तो टूल की स्थिति और दस्तावेज़ीकरण उन्हें उचित टूल के रूप में HMAC और हस्ताक्षर की ओर मार्गदर्शन करते हैं। ToolAcre टूलकिट इस बात पर ध्यान केंद्रित करता है कि ब्राउज़र का Web Crypto सीधे क्या प्रदान करता है और उन सीमाओं की व्याख्या करता है जहां प्रत्येक आदिम उपयुक्त है।