हिन्दी

डेवलपर टूल · SHA हैश कैलकुलेटर

SHA-256 चरण दर चरण: पैडिंग, संदेश शेड्यूल और 64 राउंड

· यह काम किस प्रकार करता है

शा-256 क्रिप्टोग्राफी ब्राउज़र-एपिस जावास्क्रिप्ट

संदेश पैडिंग, ब्लॉक डिवीजन, 64-राउंड प्रोसेसिंग लूप और अंतिम हैश संयोजन दिखाने वाला आरेख
मूल ToolAcre वेक्टर चित्रण

SHA-256 आपके इनपुट को पैड करता है, इसे 512-बिट ब्लॉक में विभाजित करता है और प्रत्येक को मिश्रण के 64 राउंड के माध्यम से चलाता है। यह पोस्ट क्रिप्टोग्राफी पेजभूमि की आवश्यकता के बिना हर चरण को सरल भाषा में समझाती है।

वास्तव में आपके बाइट्स का क्या होता है - वह ब्लैक बॉक्स जिसे अधिकांश डेवलपर कभी नहीं खोलते हैं

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

एल्गोरिदम 512-बिट ब्लॉक पर काम करता है। यदि आपका इनपुट छोटा है, तो यह गद्देदार हो जाता है। यदि यह लंबा है, तो यह कई ब्लॉकों में विभाजित हो जाता है, प्रत्येक को क्रम में संसाधित किया जाता है, प्रत्येक ब्लॉक का आउटपुट अगले में फीड किया जाता है। सभी ब्लॉक संसाधित होने के बाद, आपके पास आठ 32-बिट संख्याएँ होती हैं, जो एक साथ जुड़कर अंतिम 256-बिट डाइजेस्ट बनाती हैं।

पैडिंग - 512 bits के गुणक तक पहुंचने के लिए 1 bit, शून्य और 64-बिट संदेश लंबाई जोड़ना

पैडिंग चरण नियतात्मक और औपचारिक है। अपने वास्तविक इनपुट के बाद, एक 1 bit जोड़ें (व्यवहार में, बाइट 0x80 यदि आपका इनपुट बाइट सीमा पर समाप्त होता है)। तब तक शून्य बिट्स जोड़ें जब तक कि आप 512 bits के गुणक से 64 bits कम न हो जाएं। अंत में, बिट्स में इनपुट लंबाई की 64-बिट बिग-एंडियन एन्कोडिंग जोड़ें। यह पैडिंग सुनिश्चित करती है कि प्रत्येक संदेश 512 bits का गुणज है और मूल लंबाई को एन्कोड करता है ताकि विभिन्न लंबाई के समान इनपुट समान डाइजेस्ट उत्पन्न न कर सकें।

इनपुट एबीसी (3 bytes = 24 bits) के लिए, पैडेड संदेश 512 bits (एक ब्लॉक) है: तीन बाइट्स 61 62 63, उसके बाद 0x80, उसके बाद शून्य, उसके बाद 64-बिट 24 की एन्कोडिंग (जो 64-बिट बिग-एंडियन फ़ील्ड में 0x00...0x18 है)। संदेश अब ठीक एक 512-बिट ब्लॉक भरता है। एक खाली स्ट्रिंग के लिए, पैडिंग 0x80 जोड़ती है, उसके बाद शून्य, उसके बाद 0x00...0x00 (इनपुट के 0 bits को दर्शाता है)। 100-बाइट फ़ाइल जैसे लंबे इनपुट के लिए, पैडिंग अंतिम ब्लॉक को 512 bits तक भर देगी और मूल लंबाई 800 bits को इंगित करेगी।

प्रारंभिक मान और स्थिरांक एल्गोरिथम द्वारा तय किए जाते हैं; उनकी ऐतिहासिक व्युत्पत्ति भंडार साक्ष्य के बाहर है

एल्गोरिथ्म आठ 32-बिट कार्यशील चर के साथ शुरू होता है, जो पहले आठ अभाज्य संख्याओं के वर्गमूलों के भिन्नात्मक भागों के पहले 32 bits से प्रारंभ होता है। ये हार्ड-कोडित स्थिरांक हैं, जो किसी भी संदर्भ कार्यान्वयन और क्रिप्टोग्राफ़िक पुस्तकालयों के स्रोत कोड में दिखाई देते हैं। वे मौजूद हैं क्योंकि गणित से निश्चित स्थिरांक का उपयोग करने से छिपे हुए पिछले दरवाजे के संदेह से बचा जा सकता है। ToolAcre टूल ब्राउज़र के Web Crypto कार्यान्वयन का उपयोग करता है, जो इन्हीं स्थिरांकों को लागू करता है।

एल्गोरिथ्म 64 राउंड स्थिरांक का भी उपयोग करता है, जो पहले 64 अभाज्य संख्याओं के घनमूलों के भिन्नात्मक भागों के पहले 32 bits से प्राप्त होता है। ये भी स्थिर और सार्वजनिक हैं। स्थिरांक अतिरिक्त मिश्रण सामग्री के रूप में कार्य करते हैं; उन्हें बदलने से एल्गोरिदम टूट जाएगा और अलग-अलग डाइजेस्ट उत्पन्न होंगे।

संदेश शेड्यूल - बदलाव और घुमाव के साथ 16 शब्दों को 64 में विस्तारित करना

संदेश शेड्यूल एक विशिष्ट सूत्र के माध्यम से 16 शब्द (512 bits) को 64 शब्द (2048 bits) में विस्तारित करता है। राउंड 0-15 के लिए, शब्द सीधे इनपुट ब्लॉक से आते हैं। राउंड 16-63 के लिए, प्रत्येक नए शब्द की गणना दो पुराने शब्दों को लेकर (विशिष्ट ऑफसेट पर), एक रोटेशन और शिफ्ट लागू करके, दूसरे शब्द में XORing करके और परिणाम को संग्रहीत करके की जाती है। सूत्र एक ब्लॉक के संदर्भ में नियतात्मक और प्रतिवर्ती है, लेकिन विस्तार सभी 64 राउंड में इनपुट के प्रभाव को फैलाता है।

विस्तार सूत्र रोटेट-राइट (एक गोलाकार बिट शिफ्ट जहां एक छोर से गिरे हुए बिट्स दूसरे छोर पर फिर से दिखाई देते हैं) और राइट-शिफ्ट संचालन का उपयोग करता है। रोटेशन सभी बिट्स को सुरक्षित रखता है लेकिन उनकी स्थिति बदल देता है; राइट-शिफ्ट बिट्स को त्याग देता है। रोटेशन, शिफ्ट और XOR संचालन का संयोजन यह सुनिश्चित करता है कि इनपुट का प्रत्येक बिट शेड्यूल में कई शब्दों को प्रभावित करता है।

एक दौर - CAच, मेजर और सिग्मा फ़ंक्शंस को बिट-मिक्सिंग ऑपरेशंस के रूप में वर्णित किया गया है, और आठ कार्यशील चर कैसे अपडेट होते हैं

प्रत्येक 64 राउंड संदेश शेड्यूल के एक शब्द को संसाधित करता है और आठ कार्यशील चर को अद्यतन करता है। मुख्य फ़ंक्शन में छह ऑपरेशन शामिल होते हैं: एक सशर्त मिश्रण (जिसे अक्सर "चुनें" के लिए Ch कहा जाता है) जो एक नियंत्रण चर के आधार पर बिट्स का चयन करता है, एक बहुमत फ़ंक्शन (Maj) जो तीन चर के बीच सबसे सामान्य मान चुनता है, दो विशेष मिश्रण फ़ंक्शन (Sigma_0 और Sigma_1) जो कार्यशील चर को घुमाते और स्थानांतरित करते हैं, और अतिरिक्त मॉड्यूलो 2^32। सारा अंकगणित 32-बिट शब्दों पर किया जाता है, इसलिए अतिप्रवाह चारों ओर लपेटता है।

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

ब्लॉकों को चेन करना और आउटपुट तैयार करना - प्रत्येक ब्लॉक के परिणाम को चालू स्थिति में जोड़ना

हर राउंड मौजूदा राउंड कॉन्स्टेंट, मैसेज शेड्यूल वर्ड और पिछली स्थिति से नया मान निकालकर सभी आठ वर्किंग वेरिएबल घुमाता और अपडेट करता है। पहले सात वेरिएबल खिसकते हैं: 8th मान 1st बनता है, 1st मान 2nd बनता है, और यही क्रम आगे चलता है। नया 8th मान पुराने वेरिएबल से मिक्सिंग फ़ंक्शन द्वारा निकलता है। 64 राउंड के बाद आठ नए 32-bit मान मिलते हैं। इन्हें शुरुआती कॉन्स्टेंट में (modulo 2^32) जोड़ने पर इस ब्लॉक की अंतिम हैश स्थिति बनती है।

मल्टी-ब्लॉक संदेश के लिए, एक ब्लॉक से आठ मान अगले ब्लॉक के लिए प्रारंभिक स्थिति बन जाते हैं। श्रृंखला यह सुनिश्चित करती है कि इनपुट में कहीं भी परिवर्तन बाद के सभी ब्लॉकों को प्रभावित करता है। जब तक आप अंतिम ब्लॉक तक पहुंचते हैं, इनपुट का प्रत्येक बिट अंतिम आउटपुट को प्रभावित कर चुका होता है।

कार्यान्वित उदाहरण और इसमें क्या शामिल नहीं है - एक संक्षिप्त संदेश के लिए पैडिंग और ब्लॉक गिनती का पता लगाना; सुरक्षा प्रमाण दायरे से बाहर हैं

इनपुट एबीसी के लिए, संदेश पैडिंग के बाद एक 512-बिट ब्लॉक में फिट बैठता है। पैडिंग 424 bits जोड़ती है, जिससे कुल 512 bits बनता है। संदेश शेड्यूल इसे 64 शब्दों तक विस्तारित करता है। प्रत्येक दौर एक शब्द का उपभोग करता है और मिश्रण कार्यों के माध्यम से आठ कार्यशील चर को अद्यतन करता है। 64 राउंड के बाद, राज्य को प्रारंभिक स्थिरांक के साथ XORed किया जाता है, जिससे अंतिम डाइजेस्ट ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad तैयार होता है।

यह एक प्रकाशित परीक्षण वेक्टर है: एक ही इनपुट पर एक ही गणना हमेशा एक ही आउटपुट उत्पन्न करती है। ToolAcre टूल ब्राउज़र के Web Crypto कार्यान्वयन के माध्यम से यह सटीक गणना करता है। आप एबीसी को हैश करके और ज्ञात वेक्टर से परिणाम की तुलना करके इसे सत्यापित कर सकते हैं। कोई भी ब्राउज़र जो Web Crypto को सही ढंग से लागू करता है, वही आउटपुट देगा; एल्गोरिदम कोई शॉर्टकट या वैकल्पिक पथ स्वीकार नहीं करता है।

टेकअवे: Web Crypto किसी रहस्य को उजागर किए बिना नियतात्मक SHA-256 मिश्रण करता है

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

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