SHA-2 एल्गोरिथम क्या है?
यदि आपने हमारा अन्य लेख पढ़ा है, तो संभवतः आपको इस बात का अच्छा अंदाज़ा होगा कि हम SHA-2 का उपयोग क्यों करते हैं और यह बड़े पैमाने पर क्या करता है। लेकिनजब हम ज़ूम इन करते हैं तो वास्तव में क्या हो रहा है?हम 'हैशिंग जटिल है' जैसे वाक्य को कैसे ले सकते हैं, इसे ऑनलाइन माध्यम से बताएं SHA-256 कैलकुलेटर , और इस तरह एक हैश के साथ समाप्त होता है:
d6320decc80c83e4c17915ee5de8587bb8118258759b2453fce812d47d3df56a
एक साधारण अक्षर 'ए' हमें समान रूप से जटिल चीज़ कैसे देता है?
559aead08264d5795d3909718cdd05abd49572e84fe55590eef31a88a08fdffd
स्वतंत्रता की संपूर्ण घोषणा का परिणाम एक ही पत्र के समान, लेकिन इतने व्यापक रूप से भिन्न मूल्यों के साथ कैसे हो सकता है?
639505bee7bdae68f224b0d5bcb1c324d0e33011d2302839b7bedfab4515a1bb
SHA-2 एल्गोरिथम के अंदर वास्तव में क्या चल रहा है?
SHA-2 एल्गोरिदम कैसे काम करता है?
हम जांच करेंगेएक उदाहरण के माध्यम से SHA-2 एल्गोरिदम कैसे काम करता है, प्रत्येक चरण से गुजरते हुए हमारा संदेश मिलता है, 'हैशिंग जटिल है', और किसी तरह हमें इसका जटिल आउटपुट देता है:
d6320decc80c83e4c17915ee5de8587bb8118258759b2453fce812d47d3df56a
हम SHA-256 का प्रदर्शन करेंगे क्योंकि यह सबसे अधिक इस्तेमाल किया जाने वाला पुनरावृत्ति है। SHA-224, SHA-384, SHA-512, SHA-512/224 और SHA-512/256 सभी समान तरीके से काम करते हैं, सिवाय इसके किदो पूर्व एल्गोरिदम का ब्लॉक आकार 512 बिट्स है, जबकि बाद वाले चार का ब्लॉक आकार 1024-बिट है।ध्यान दें कि SHA-384, SHA-512, SHA-512/224 और SHA-512/256 में भी 64 के बजाय 80 राउंड शामिल हैं जिनका हम वर्णन करेंगे।
वे एल्गोरिथम के विभिन्न बिंदुओं पर कुछ भिन्न इनपुट संख्याओं का भी उपयोग करते हैं। SHA-512/224 और SHA-512/256 SHA-512 के संक्षिप्त संस्करण हैं, जिसका अर्थ है कि अंतिम हैश क्रमशः सबसे बाईं ओर 224 या 256 बिट है।आप उल्लेख कर सकते हैं FIPS 180-4 विशिष्टताओं के लिए.
बाइनरी में कनवर्ट करना
जब हम SHA-256 हैश फ़ंक्शन में 'हैशिंग जटिल है' दर्ज करते हैं, तो पहली चीज़ जो होती है वह यह है कि डेटा बाइनरी में परिवर्तित हो जाता है। स्पष्टीकरण को सरल बनाने के लिए, यह अनिवार्य रूप से इसलिए हैमनुष्य और मशीनें अलग-अलग भाषाएँ बोलते, समझते और काम करते हैं. हालाँकि हमारे लिए शब्दों में सोचना आसान है, कंप्यूटर यह सब शून्य और एक में करता है। जब भी हम उनका उपयोग करते हैं, वे हमारे अक्षरों और शब्दों को उनकी समझ में आने वाली बाइनरी भाषा में परिवर्तित कर रहे होते हैं ताकि वे गणनाएँ चला सकें। हालाँकि, यह सब आम तौर पर हमारे ध्यान में आए बिना किया जाता है, जिससे हमें एक सहज उपयोगकर्ता अनुभव मिलता है।
हम अक्षरों, संख्याओं और प्रतीकों को बाइनरी में परिवर्तित करते हैं सूचना इंटरचेंज के लिए अमेरिकी मानक कोड (एएससीआईआई) , जो मूल रूप से सिर्फ एक प्रणाली है जिस पर स्मार्ट लोगों की एक समिति दो भाषाओं के बीच अनुवाद करने के लिए सहमत हुई थी।
अगर हम एक की ओर मुड़ें एएससीआईआई तालिका , हम देख सकते हैं कि हमारे वाक्यांश का पहला अक्षर, एक छोटा अक्षर 'h', बाइनरी में '01101000' के रूप में लिखा गया है। उसी तालिका के अनुसार, एक निचला अक्षर 'ए' '01100001' है, जबकि एक 'एस' '01110011' है और एक 'एच' '01101000' है। अक्षर 'i' '01101001' है, जबकि 'n' '01101110' है और 'g' '01100111' है। किसी स्थान के लिए बाइनरी कोड तालिका में दूसरे कॉलम के शीर्ष पर ASCII वर्ण 'SP' के रूप में दशमलव संख्या 32 के समान पंक्ति में सूचीबद्ध है। यह '00100000' है।
हमारे उदाहरण वाक्यांश के हर एक अक्षर को पढ़ने के बजाय, हम इसे बस एक में दर्ज करेंगे ASCII से बाइनरी कनवर्टर . इसे टाइप करने पर हमें यह मिलता है:
01101000 01100001 01110011 01101000 01101001 01101110 01100111 00100000 01101001 01110011 00100000 01100011 01101111 0110 1101 01110000 01101100 01101001 01100011 01100001 01110100 0110010
मनुष्य के रूप में हमारे लिए उपरोक्त का कोई मतलब नहीं है, लेकिन मशीनों के लिए, यह कहता है, 'हैशिंग जटिल है'।
SHA-2 और पैडिंग
एक बार जब हम अपने वाक्यांश को बाइनरी में दोबारा लिख लेते हैं, तो अगला कदम पैडिंग जोड़ना होता है, जो अनिवार्य रूप से अतिरिक्त डेटा का एक समूह होता है जिसे हम इसे एक निश्चित लंबाई बनाने के लिए अपने इनपुट में जोड़ते हैं। यह रोकने में भी मदद करता है लंबाई विस्तार हमले . SHA-2 के विभिन्न संस्करणों में निम्नलिखित ब्लॉक आकार हैं:
- SHA-224 - 512 बिट्स
- SHA-256 - 512 बिट्स
- SHA-384 - 1024 बिट्स
- SHA-512 - 1024 बिट्स
- SHA-512/224 - 1024 बिट्स
- SHA-512/256 - 1024 बिट्स
ये ब्लॉक आकार डेटा की वह मात्रा है जिसे SHA-2 एल्गोरिदम एक बार में संसाधित करता है। हमने दिखाया है कि हैश फ़ंक्शंस इनपुट को संसाधित करने में सक्षम हैं जब तक कि स्वतंत्रता की घोषणा (SHA-256 वास्तव में इनपुट ले सकती है) परिमाण का क्रम बड़ा , 2 तक64-1, जो इतनी बड़ी संख्या है कि आपको वास्तव में एल्गोरिदम की ऊपरी सीमा के बारे में चिंता करने की ज़रूरत नहीं है)। हालाँकि, यह इस जानकारी को एक बार में संसाधित नहीं करता है।
इसके बजाय, SHA-256 के मामले में, यह डेटा के 512-बिट ब्लॉक में जानकारी संसाधित करता है। हमारे उदाहरण में, चीजें अपेक्षाकृत सीधी हैं, क्योंकिहमारा इनपुट 'हैशिंग जटिल है' 512 बिट डेटा से कम है–यह 176 बिट्स है. आप इसकी गणना प्रत्येक बाइनरी अंक को गिनकर, या प्रत्येक अक्षर और दो स्थानों को गिनकर, और फिर 8 से गुणा करके कर सकते हैं, क्योंकि प्रत्येक वर्ण लंबाई में एक बाइट है।
हालाँकि, हमें अक्सर ऐसे हैश इनपुट की आवश्यकता होती है जिनकी लंबाई 512 बिट से कहीं अधिक हो। इन मामलों में, संदेश को केवल ब्लॉकों में विभाजित किया जाता है। यदि हमें 10,000-बिट संदेश को हैश करने की आवश्यकता है, तो इसे बस कई 512-बिट ब्लॉकों में विभाजित करने की आवश्यकता होगी।
हमारे उदाहरण में, हमारे पास केवल 176 बिट डेटा है, लेकिन 512-बिट ब्लॉक भरने की आवश्यकता है। इस का मतलब है किहमें 336 बिट पैडिंग जोड़ने की आवश्यकता होगीइसे पूरा करने के लिए. SHA-2 निम्नलिखित पैडिंग योजना का उपयोग करता है:
- एक 'एक' जोड़ा गया हैबाइनरी संदेश डेटा के बाद जिसे हैश किया जा रहा है।
- फिर, शून्य तब तक जोड़े जाते हैं जब तक कि इनपुट डेटा की लंबाई और पिछले चरण का अतिरिक्त जोड़ 448 बिट्स तक न हो जाए। हमारे उदाहरण में, हमारे पास 176 बिट्स की इनपुट लंबाई है, साथ ही पिछले चरण की लंबाई, हमें 177 बिट्स तक लाती है। इसलिए, हमें 448 घटा 177 शून्य चाहिए। यदि हम गणित करते हैं, तो हमें करना होगा271 शून्य जोड़ें.
- अंतिम 64 बिट्स की अंतिम ब्लॉक (512 बिट्स घटाकर 448 बिट्स जो हम पहले ही चरणों में भर चुके हैं) संदेश की लंबाई को बाइनरी में प्रदर्शित करने के लिए अलग रखा गया है . चूँकि हम डेटा के केवल एक ब्लॉक के साथ काम कर रहे हैं, इसके अंत में इस 64-बिट संदेश की लंबाई को शामिल करना आवश्यक है। बिट्स में हमारे संदेश की लंबाई 176 है, जो 10110000 है बाइनरी में . यह ब्लॉक के बिल्कुल अंत में जाएगा, और पूर्ववर्ती संख्याएँ अधिक शून्य से भरी हुई हैं (ऐसे मामलों में जहां हमारे पास बहुत बड़ा इनपुट है, इन शून्यों को बाइनरी में लिखी गई लंबी संदेश लंबाई से बदल दिया जाएगा)।
यदि हम यह सब एक साथ रखते हैं, तो हम 'हैशिंग जटिल है' संदेश के लिए निम्नलिखित गद्देदार 512-बिट ब्लॉक के साथ समाप्त होते हैं:
01101000 01100001 01110011 01101000 01101001 01101110 01100111 00100000 01101001 01110011 00100000 01100011 01101111 0110 1101 01110000 01101100 01101001 01100011 01100001 01110100 0110010 1 000000000 000000 000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 000000000 0 0 000000 00000000 00000000 00000000 00000000 00000000 000000000 000000000 000000000 000000000 000000000 000000000 10110000
यदि आप इकाई और शून्य की गिनती करते हैं, तो आप देखेंगे कि उपरोक्त ब्लॉक में 512 बिट डेटा हैं। पहले 176 बिट्स बाइनरी में इनपुट संदेश हैं, 'हैशिंग जटिल है'। इसके बाद 1 है, जिसे हमने देखने में आसान बनाने के लिए बोल्ड और रेखांकित किया है। फिर हमारे पास 271 शून्य हैं, उसके बाद 64-बिट संदेश की लंबाई है, जिसे बोल्ड और रेखांकित भी किया गया है। इस संदेश की लंबाई के पहले शून्य है, जैसा कि हमने पहले बताया था।
SHA-384, SHA-512, SHA-512/224 और SHA-512/256 में, पैडिंग योजना अनिवार्य रूप से समान है, सिवाय इसके कि प्रत्येक ब्लॉक को 1024 बिट डेटा से भरना होगा औरअंतिम ब्लॉक में निम्नलिखित अंतर हैं:
- दूसरे चरण में, 448 बिट्स के बजाय 896 बिट्स की लंबाई तक पहुंचने तक शून्य जोड़े जाते हैं।
- अंतिम चरण में, संदेश की लंबाई जोड़ने के लिए ब्लॉक के 128 बिट्स अलग रखे गए हैं।
यदि हम SHA-384, SHA-512, SHA-512/224 या SHA-512/256 के साथ अपना उदाहरण चला रहे थे, तो गद्देदार ब्लॉक लगभग वैसा ही दिखेगा, सिवाय इसके कि इसमें दूसरे चरण से अतिरिक्त 448 शून्य होंगे , और अंतिम चरण से अन्य 64 शून्य।
से अधिक इनपुट 448 बिट्स (SHA-224 और SHA-256 के लिए) और 896 बिट्स (SHA-384, SHA-512, SHA-512/224 और SHA-512/256 के लिए)
हमें अक्सर हैश संदेश इनपुट की आवश्यकता होती है जो 512 बिट्स या 1024 बिट्स के ब्लॉक आकार से अधिक हो, जिसका अर्थ है कि हमें डेटा को कई ब्लॉकों में विभाजित करने की आवश्यकता है। विभाजन ब्लॉकों के लिए कट-ऑफ बिंदु वास्तव में या तो 447 बिट्स या 895 बिट्स है, क्योंकि कम से कम एक बिट पैडिंग, साथ ही 64-बिट या 128-बिट संदेश लंबाई शामिल होनी चाहिए।
इस का मतलब है कियदि आपके पास ठीक 448 बिट्स (या 896 बिट्स) डेटा है जिसे आपको हैश करने की आवश्यकता है, तो इसे दो ब्लॉकों में विभाजित करना होगा. पहले ब्लॉक में संपूर्ण डेटा, प्लस 64 (या 128) बिट्स पैडिंग (जिसके बाद 63 या 127 शून्य होंगे) शामिल होंगे। दूसरे ब्लॉक में अन्य 448 (या 896) शून्य होंगे, जिसके अंत में 64-बिट (या 128-बिट) संदेश लंबाई टैग की जाएगी, जैसा कि हमने पिछले अनुभाग में दिखाया था।
449 बिट्स (या 897 बिट्स) डेटा भी डेटा के दो ब्लॉक लेगा, और इसके बजाय संदेश की लंबाई से पहले एक प्लस 62 (या 126) शून्य पैडिंग होगी।
वहीं दूसरी ओर,447 बिट्स (या 895 बिट्स) डेटा बस एक ही ब्लॉक में फिट हो जाएगा. इसमें 447 (या 895) बिट्स, फिर सिंगल की पैडिंग शामिल होगी एक , इसके बाद संदेश की लंबाई 64 या 128 बिट्स होती है।
सिस्टम बड़े डेटा इनपुट के लिए समान कार्य करता है। सभी डेटा को शामिल करने के लिए डेटा को उतने ब्लॉकों में विभाजित किया जाता है जितने की आवश्यकता होती है, साथ ही पैडिंग का कम से कम एक अंक और अंतिम ब्लॉक के अंत में 64-बिट संदेश लंबाई संलग्न की गई है। 5,000 बिट इनपुट डेटा और SHA-224 या SHA-256 के 512-बिट ब्लॉक आकार के मामले में, इनपुट को 10 ब्लॉक में विभाजित किया जाएगा। पहले नौ में केवल इनपुट डेटा शामिल होगा, जबकि दसवें में इनपुट डेटा के अंतिम 392 बिट्स शामिल होंगे, एक एक , 55 शून्य और फिर अंत में 64-बिट संदेश की लंबाई। इसका कुल डेटा 5,120 बिट्स है, जो 10 को 512 से गुणा किया जाता है।
SHA-384, SHA-512, SHA-512/224 या SHA-512/256 के मामले में, उन्हीं 5,000 बिट डेटा को छह 1024-बिट ब्लॉक में विभाजित किया जाएगा। पहले चार में केवल इनपुट डेटा शामिल होगा। पांचवें ब्लॉक में डेटा के अंतिम 904 बिट्स शामिल होंगे, a एक , और फिर 119 शून्य गद्दी के रूप में. 5,000 बिट डेटा पांच ब्लॉक के भीतर बिल्कुल फिट नहीं होता है क्योंकि अंतिम 904 बिट डेटा अंतिम ब्लॉक के लिए कटऑफ से अधिक है, जो कि 896 बिट है। छठे ब्लॉक में 896 शून्य और फिर अंत में 128-बिट संदेश की लंबाई शामिल होगी।
मुख्य SHA-2 एल्गोरिथम
नीचे, हमारे पास SHA-2 एल्गोरिथम का एक चित्रमय प्रतिनिधित्व है:
SHA-2 एल्गोरिथ्म
जब तक आपने पहले इसी तरह के एल्गोरिदम से निपटा नहीं है, तब तक शायद इसका कोई खास मतलब नहीं बनता है। चिंता न करें, क्योंकि हम इसे विस्तार से समझाने में बहुत समय व्यतीत करने जा रहे हैं।
पहली बात जो ध्यान देने योग्य है वह यह है कि चित्र दिखाता है राउंड 0, राउंड टी, और राउंड 63। राउंड 0 पहला राउंड है, जबकि राउंड टी अनिवार्य रूप से एक प्लेसहोल्डर है जो बीच में किसी भी राउंड का प्रतिनिधित्व करता है, क्योंकि दर्जनों राउंड ड्रा करना बोझिल होगा। राउंड 63 अंतिम राउंड है, जो हमें 0 से शुरू करने पर कुल 64 राउंड देता है।ध्यान दें कि SHA-384, SHA-512, SHA-512/224 और SHA-512/256 में 64 के बजाय 80 राउंड शामिल हैं, इसलिए जिस प्रक्रिया का हम वर्णन करने जा रहे हैं वह SHA-2 एल्गोरिथ्म के इन संस्करणों में कुछ अलग है।
इनमें से प्रत्येक राउंड में अपने स्वयं के इनपुट और गणनाएं होती हैं, कुछ गणनाओं के आउटपुट बाद की गणनाओं के लिए इनपुट बन जाते हैं। जैसा कि आप शायद समझना शुरू कर रहे हैं, SHA-2 एल्गोरिथ्म जटिल है और इसमें चरणों और गणनाओं का एक पूरा समूह शामिल है।
संदेश इनपुट एम
इस उदाहरण में हम लंबे और अधिक जटिल इनपुट के बजाय केवल अपने एकल 512-बिट इनपुट ब्लॉक का उपयोग करके चीजों को सरल रखेंगे, जिसके लिए ब्लॉक की एक श्रृंखला की आवश्यकता होती है। यदि हमें लंबे डेटा इनपुट के लिए प्रक्रिया का वर्णन करना है, तो हमें इनपुट डेटा के विभिन्न ब्लॉकों में से प्रत्येक के साथ, लंबी, जटिल प्रक्रिया को पूरी तरह से दोहराने की आवश्यकता होगी।
यदि आप ऊपर दिए गए चित्र के ऊपर बाईं ओर देखें, तो आप देखेंगेसंदेश इनपुट (एम). यह हमारे संदेश 'हैशिंग जटिल है' का 512-बिट पैडेड ब्लॉक है:
01101000 01100001 01110011 01101000 01101001 01101110 01100111 00100000 01101001 01110011 00100000 01100011 01101111 0110 1101 01110000 01101100 01101001 01100011 01100001 01110100 01100101 01100100 10000000 00000000 00000000 00000000 0000000 0 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 00 0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 10110000
हमारे संदेश इनपुट को सबसे पहले W लेबल वाले सोलह 32-बिट शब्दों में विभाजित किया गया है0डब्ल्यू है.पंद्रह:
- में0- 01101000 01100001 01110011 01101000
- में1– 0110100 01101110 01100111 00100000
- मेंदो– 01101001 01110011 00100000 01100011
- में3– 01101111 01101101 01110000 01101100
- में4– 01101001 01100011 01100001 01110100
- में5– 01100101 01100100 10000000 00000000
- में6– 000000000 000000000 000000000
- में7– 000000000 000000000 000000000
- में8– 000000000 000000000 000000000
- में9– 000000000 000000000 000000000
- में10– 000000000 000000000 000000000
- मेंग्यारह– 000000000 000000000 000000000
- में12– 000000000 000000000 000000000
- में13– 000000000 000000000 000000000
- में14– 000000000 000000000 000000000
- मेंपंद्रह– 00000000 00000000 00000000 10110000
हेक्साडेसिमल में कनवर्ट करना
इससे पहले कि हम आगे बढ़ें, हम उपरोक्त बाइनरी अंकों को हेक्साडेसिमल नामक एक अन्य संख्या प्रणाली में बदल देंगे। यदि आप बारीकी से ध्यान दे रहे हैं, तो आपने देखा होगा कि हमारे हैश में अक्षरों का एक समूह शामिल है:
d6320decc80c83e4c17915ee5de8587bb8118258759b2453fce812d47d3df56a
ऐसा इसलिए है क्योंकि हैश आम तौर पर हेक्साडेसिमल में लिखे जाते हैं, जो गिनती करने का एक अलग तरीका है, ठीक उसी तरह जैसे कि बाइनरी और दशमलव प्रणाली जिसके हम सभी आदी हैं, अलग-अलग हैं।
बाइनरी एक बेस-2 प्रणाली है, जिसका मूल रूप से मतलब है कि आपके पास दो विकल्प हैं, एक 1 और एक 0, इससे पहले कि आपको बड़ी संख्या में अंकों के साथ जानकारी प्रस्तुत करना शुरू करना पड़े।
हमारी नियमित दशमलव प्रणाली आधार-10 है, जिसका अर्थ है कि हमारे पास 10 विकल्प हैं, 0, 1, 2, 3, 4, 5, 6, 7, 8, और 9, इससे पहले कि हम समाप्त हो जाएं और बड़ी संख्याओं को दर्शाने के लिए संख्याओं का संयोजन शुरू करना होगा। डेटा की मात्रा, जैसे कि जब हम 1 और 0 को मिलाकर 10 बनाते हैं।
हेक्साडेसिमल एक बेस-16 प्रणाली है, जिसका अर्थ है कि हमारे पास 16 विकल्प हैं:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ए, बी, सी, डी, ई, एफ
जब हम आधार-16 का उपयोग करते हैं, तो 10 का मान वही आरामदायक मान नहीं होता जिसके साथ हम बड़े हुए हैं। इसके बजाय, आधार-16 में 10 वास्तव में वह संख्या 16 है जिसके हम दशमलव में आदी हैं। आधार-10 में, हमारी परिचित, दशमलव संख्या 10 को एक के साथ दर्शाया गया हैए, 11 हैबी, 12 हैसी,13 हैडी, 14 हैऔरऔर 15 हैएफ.
हेक्साडेसिमल पर बहुत अधिक गहराई में जाने से मुख्य विषय से ध्यान भटक जाएगा, लेकिन आप कुछ और जानकारी पा सकते हैं यहाँ .
आपको बस इतना जानना है कि हम अपने इनपुट को बाइनरी से हेक्साडेसिमल में बदल रहे हैं, और हम अपने बाइनरी मानों को एक में दर्ज करके ऐसा करेंगे सरल ऑनलाइन कनवर्टर (यदि आप इसे स्वयं आज़मा रहे हैं और ऊपर से बाइनरी संख्याओं की प्रतिलिपि बना रहे हैं, तो रिक्त स्थान हटा दें)। यह आपको देना चाहिए:
- में0- 68617368
- में1- 346ई6720
- मेंदो- 69732063
- में3- 6F6D706C
- में4- 69636174
- में5- 65648000
- में6– 00000000
- में7– 00000000
- में8– 00000000
- में9– 00000000
- में10– 00000000
- मेंग्यारह– 00000000
- में12– 00000000
- में13– 00000000
- में14– 00000000
- मेंपंद्रह- 0000000बी0
संदेश शेड्यूल: अन्य W मान ढूँढना
SHA-2 एल्गोरिथ्म
यदि आप आरेख की बारीकी से जांच करते हैं, तो आप देखेंगे कि राउंड 63 के लिए इनपुट में से एक डब्ल्यू है63. हमारे पास केवल डब्लू है0डब्ल्यू है.पंद्रहअब तक, इसका तात्पर्य यह है कि हमारे सभी W इनपुट प्राप्त करने से पहले हमें अन्य 48 मानों की आवश्यकता है। एल्गोरिथ्म के SHA-384, SHA-512, SHA-512/224 और SHA-512/256 संस्करणों में, हमें कुल 80 मानों की आवश्यकता होगी, इसलिए हमें अतिरिक्त 64 प्राप्त करने की आवश्यकता होगी।
इन इनपुटों की गणना चिह्नित बॉक्स में की जाती हैसंदेश अनुसूचीआरेख में. दोनों ही मामलों में, हम उन्हें निम्नलिखित सूत्र का उपयोग करके प्राप्त करते हैं:
मेंटी= पी1(मेंटी 2) + डब्ल्यूटी 7+ पी0(मेंटी 15) + डब्ल्यूटी 16
अस्पष्ट? हमें दोष न दें, इसे डिज़ाइन करने वाले क्रिप्टोग्राफर्स को दोष दें। आइए उपरोक्त समीकरण में कुछ मानों को समझाने का प्रयास करके शुरुआत करें।
टीहम जिस भी दौर में हैं उसके लिए अनिवार्य रूप से एक स्टैंड-इन है।यदि हम पहले दौर में हैं, जिसे इंजीनियर शालीनता से राउंड 0 कहते हैं,टी0 है. तोयदि आप डब्ल्यू देखते हैं0, इसका मतलब राउंड 0 में W का मान है. हम इस नोटेशन का उपयोग करते हैं, क्योंकि हम एल्गोरिथम के विभिन्न चरणों में W के लिए बड़ी संख्या में विभिन्न मानों का उपयोग करेंगे। कई अन्य चर भी एल्गोरिथम के चरणों में बदलते मूल्यों का उपयोग करते हैं।
अगला मान जिसके बारे में आप संभवतः भ्रमित हैं वह है:
पी1(एक्स)
प्रतीक को a के रूप में जाना जाता हैसिग्मा, और संख्या 1 के साथ यह निम्नलिखित फ़ंक्शन के लिए है:
पी1(एक्स) = आरओटीआर17(एक्स) ⊕ ROTR19(एक्स) ⊕ एसएचआर10(एक्स)
इससे पहले कि हम पूरी तरह से समझ सकें कि संदेश शेड्यूल कैसे काम करता है, हमें इस फ़ंक्शन को समझाने की आवश्यकता होगी।
शिफ्ट संचालन
पिछले समीकरण से आरओटीआर संकेत देता है कि हमें प्रदर्शन करने की आवश्यकता हैवृत्ताकार दाएँ-शिफ़्टइसके बाद आने वाले मान पर, x. इसे सुपरस्क्रिप्ट में दिखाए गए बिट्स की संख्या के अनुसार स्थानांतरित किया जाता है। आइए पहला खंड लें:
ROTR17(एक्स)
उपरोक्त वास्तव में केवल मूल्य को स्थानांतरित करने के लिए कह रहा हैएक्स 17 बिट्सतकसही. यह कैसे काम करता है इसका एक उदाहरण आपको देता हूँ, यदि x का मान 1000 1001 है और हम बस एक गोलाकार दायाँ-शिफ्ट करना चाहते हैं1 बिट, हम अनिवार्य रूप से केवल सबसे दाहिने कॉलम में मान लेंगे:
1000 1001
और इसे बाईं ओर ले जाएं:
1100 0100
अवधारणा को फिर से प्रदर्शित करने के लिए, इस बार 3 बिट्स के दाईं ओर एक गोलाकार बदलाव के साथ, हम वही संख्या लेते हैं:
1000 1001
इस बार, हम तीन सबसे दाएं अंकों में से प्रत्येक को लेते हैं और उन्हें बाईं ओर ले जाते हैं:
0011 0001
इस प्रकार का ऑपरेशन समीकरण के पहले खंड के साथ-साथ मध्य भाग में भी बदलाव के साथ शामिल होता है17और19क्रमशः बिट्स.
समीकरण का अंतिम भाग कहता है:
एसएचआर10(एक्स)
SHR हमें एक समान, फिर भी थोड़ा अलग ऑपरेशन करने के लिए कहता है, जिसे a के रूप में जाना जाता हैतार्किक वाम-शिफ्ट. इस मामले में, हम सुपरस्क्रिप्ट में बिट्स की संख्या के आधार पर मान x को लेफ्ट-शिफ्ट करते हैं,10, और फिर दाहिनी ओर शून्य लगा दें। यह कैसे काम करता है यह प्रदर्शित करने के लिए आइए पहले वाली ही संख्या लें:
1000 1001
हम 10 चरणों में 10 बिट्स को बाईं ओर शिफ्ट करेंगे, अंतिम अंक को किसी अन्य कारण से बोल्ड नहीं किया जाएगा, बल्कि आपको इसकी प्रगति पर नज़र रखने में मदद मिलेगी:
0001 0010
0010 0100
01001000
10010000
0010 0000
0100 0000
1000 0000
0000 0000
0000 0000
0000 0000
पहली सात चालों में, हमने देखा कि डेटा धीरे-धीरे बाईं ओर जा रहा है और दाईं ओर शून्य से प्रतिस्थापित हो रहा है। आठवीं चाल तक, सारा मूल डेटा पूरी तरह से ख़त्म हो गया था और उसकी जगह शून्य ने ले ली थी।
इसके बीच के अंतर पर ध्यान देंतार्किक वाम-शिफ्टसंचालन और पहले चर्चा की गईवृत्ताकार दाएँ-शिफ़्ट. न केवल गति अलग-अलग दिशाओं में होती है, बल्कि सर्कुलर राइट-शिफ्ट डेटा को दूसरी तरफ रीसायकल करता है, जबकि तार्किक लेफ्ट-शिफ्ट इसे त्याग देता है और खुलने वाली जगह को शून्य से भर देता है।
इन बदलावों पर बहुत अधिक विस्तार से चर्चा करने से हम उलझ जाएंगे, लेकिन आप इस बारे में अधिक जान सकते हैं कि वे इस पर कैसे काम करते हैं संसाधन .
एक्सओआर संचालन
हमारे ऑपरेशन का अंतिम भाग जिसे हमें समझाने की आवश्यकता है वह है⊕ प्रतीक, जो इनमें से प्रत्येक घटक को एक साथ जोड़ता है। ⊕ XOR ऑपरेशन के लिए खड़ा है, जो एक तार्किक ऑपरेशन है जिसका मूल रूप से अर्थ हैयदि दोनों में से कोई भी इनपुट सत्य है तो इसका आउटपुट सत्य है, लेकिन यदि दोनों इनपुट या कोई भी इनपुट सत्य नहीं है तो गलत है.
बूलियन बीजगणित और तार्किक संक्रियाओं पर संपूर्ण व्याख्यान के बिना इसे समझाना कठिन है। इस लिंक आपको थोड़ी सी जानकारी देता है, लेकिन बाकी एल्गोरिदम कैसे काम करता है इसका एक अच्छा अवलोकन प्राप्त करने के लिए आपको वास्तव में इसे गहराई से समझने की आवश्यकता नहीं है। आपको बस इतना जानना है कि हम मूल रूप से कुछ संख्याओं को एक साथ जोड़ेंगे, लेकिन कुछ अजीब गणित का उपयोग करेंगे जो आपने शायद स्कूल में नहीं सीखा होगा।
हमारे समीकरण के पहले भाग को हल करना
अब जब हमने ऑपरेशन के कुछ विवरण कवर कर लिए हैं, तो आइए उस समीकरण पर एक और नज़र डालें जिस पर हम अटक गए थे:
मेंटी= पी1(मेंटी 2) + डब्ल्यूटी 7+ पी0(मेंटी 15) + डब्ल्यूटी 16
कहाँ:
पी1(एक्स) = आरओटीआर17(एक्स) ⊕ ROTR19(एक्स) ⊕ एसएचआर10(एक्स)
और:
पी0(एक्स) = आरओटीआर7(एक्स) ⊕ ROTR18(एक्स) ⊕ एसएचआर3(एक्स)
अब, आइए W का मान जानने का प्रयास करें16, क्योंकि यह पहली संख्या है जिसे हमें इस समीकरण का उपयोग करके निकालने की आवश्यकता है। आइए अपना मूल्य जोड़ें:
में16= पी1(में16-2) + डब्ल्यू16-7+ पी0(में16-15) + डब्ल्यू16-16
इसलिए:
में16= पी1(में14) + डब्ल्यू9+ पी0(में1) + डब्ल्यू0
हम समीकरण के दाहिनी ओर के सभी W मानों को जानते हैं क्योंकि वे W शब्द हैं जिन्हें हमने अपने गद्देदार संदेश ब्लॉक को विभाजित करके निकाला है। बाइनरी और हेक्साडेसिमल दोनों में मान हैं:
- में0–68617368या01101000 01100001 01110011 01101000
- में1–346ई6720या0110100 01101110 01100111 00100000
- में9–00000000या00000000 00000000 00000000 00000000
- में14–00000000या00000000 00000000 00000000 00000000
इससे पहले कि हम सभी नंबरों को प्लग इन करें, आइए जानें कि मूल्य क्या हैपी1(में14), जिस समीकरण की हमने ऊपर चर्चा की है उसका उपयोग करते हुए:
पी1(में14) = ROTR17(में14) ⊕ ROTR19(में14) ⊕ एसएचआर10(में14)
डब्ल्यू के साथ14हेक्साडेसिमल में मान, समीकरण इस प्रकार दिखता है:
पी1(00000000) = ROTR17(00000000) ⊕ ROTR19(00000000) ⊕ एसएचआर10(00000000)
पहला कदम उन बदलावों को करना है जिनका हमने समीकरण के प्रत्येक अनुभाग के लिए पहले वर्णन किया था। हम W के लिए बाइनरी मान पर स्विच करेंगे14हेक्साडेसिमल के बजाय, क्योंकि इससे हमारे द्वारा किए जाने वाले बदलावों को देखना आसान हो जाता है। ध्यान दें कि बाइनरी और हेक्साडेसिमल संस्करण एक ही मान के अलग-अलग प्रतिनिधित्व हैं, इसलिए सुविधाजनक होने पर उन्हें स्विच करने से कोई समस्या नहीं होती है:
ROTR17(00000000 00000000 00000000 00000000)
उपरोक्त ऑपरेशन का नतीजा बेहद अनुमानित होगा क्योंकि यह सभी शून्य है, लेकिन हम इसे वैसे भी चलाएंगे, ताकि आपको पता चल सके कि क्या हो रहा है। निम्नलिखित पर जाएँ ऑनलाइन उपकरण और W के लिए बाइनरी मान दर्ज करें14, 32 शून्य, इनपुट फ़ील्ड में चिह्नितकीमत. रिक्त स्थान हटाना सुनिश्चित करें. प्रवेश करना32मेंआकार, क्योंकि इनपुट मान 32 बिट लंबा है। प्रकार17मेंबदलावफ़ील्ड, यह सुनिश्चित करने के लिए कि यह मान को 17 स्थानों पर स्थानांतरित करता है। सुनिश्चित करें कि दिशा निर्धारित हैसही. का चयन करेंवृत्ताकार शिफ्टबॉक्स और फिर क्लिक करेंबिट शिफ्ट ऑपरेशन करें. यह वृत्ताकार दाएँ-शिफ्ट निष्पादित करता है।
आश्चर्य की बात नहीं, इससे आपको इसका मूल्य मिलेगा:
00000000 00000000 00000000 00000000
ऐसा लगता है कि कुछ नहीं हुआ, लेकिन शून्य इधर-उधर हो गए। हम बता ही नहीं सकते और यह निरर्थक लगता है, क्योंकि वे सभी शून्य हैं।
अब, ऑपरेशन के मध्य भाग को निष्पादित करने का समय आ गया है:
ROTR19(00000000 00000000 00000000 00000000)
इस मामले में, को छोड़कर, सब कुछ वैसा ही हैबदलावमूल्य अब है19. इससे हमें आउटपुट मिलता है:
00000000 00000000 00000000 00000000
अब अंतिम भाग के लिए:
एसएचआर10(00000000 00000000 00000000 00000000)
याद रखें, SHR एक का प्रतिनिधित्व करता हैतार्किक वाम-शिफ्ट, इसलिए इस बार, हमें सेटिंग्स में बदलाव करने की आवश्यकता है।कीमतऔरआकारवही रहें, लेकिन हमें यह सुनिश्चित करना होगा कि:
बदलावइसके लिए सेट है10
दिशाइसके लिए सेट हैबाएं
तार्किक बदलावचयनित है।
फिर, हमें वही आउटपुट मिलता है:
00000000 00000000 00000000 00000000
हालाँकि यह एक निरर्थक प्रयास प्रतीत हो सकता है, यह केवल इसलिए था क्योंकि हमारी शुरुआती संख्या शून्य थी। जब आप इन परिचालनों को अन्य नंबरों के साथ निष्पादित करते हैं, तो वास्तव में परिवर्तन घटित होंगे।
शून्य की बाइनरी और हेक्साडेसिमल स्ट्रिंग्स समान हैं, इसलिए जब हम अपनी गणना के अगले भाग पर आगे बढ़ेंगे तो हम इन मानों को वापस हेक्साडेसिमल में बदल देंगे, ताकि यह पृष्ठ पर बेहतर ढंग से फिट हो सके:
पी1(में14) = 000000000 ⊕ 00000000 ⊕ 00000000
इसमें हम इस समीकरण को हल कर सकते हैं ऑनलाइन कैलकुलेटर प्रवेश करके:
00000000मेंफ़ील्ड ए.
चुननामुक्तइसके नीचे ड्रॉपडाउन मेनू से।
00000000मेंफ़ील्ड बी.
चुननामुक्तइसके नीचे ड्रॉपडाउन मेनू से।
00000000मेंफ़ील्ड सी.
यदि आपने इसे सही किया है, तो यह दिखना चाहिएए एक्सओआर बी एक्सओआर सीचिह्नित बॉक्स मेंतार्किक अभिव्यक्ति. यह आपको चिन्हित बॉक्स में उत्तर देगाऑपरेशन परिणाम. इस मामले में, यह है:
0या00000000या00000000 00000000 00000000 00000000.
यह एक उबाऊ उत्तर है, लेकिन यह हमें अपने समीकरण को हल करने के एक कदम और करीब ले जाता है, क्योंकि अब हम जानते हैं कि:
पी1(में14) = 000000000
यदि आप पीछे स्क्रॉल करते हैं, तो आप देखेंगे कि हमें बस एक और घटक ढूंढने की आवश्यकता है, और फिर हम समीकरण को हल करने में सक्षम होंगे। हमें σ का मान ज्ञात करना होगा0(में1), जो निम्नलिखित समीकरण का उपयोग करता है:
पी0(एक्स) = आरओटीआर7(एक्स) ⊕ ROTR18(एक्स) ⊕ एसएचआर3(एक्स)
जैसा कि हमने ऊपर कहा, हम जानते हैं कि डब्ल्यू1है :
346ई6720
इसलिए:
पी0(346ई6720) = ROTR7(346ई6720) ⊕ ROTR18(346ई6720) ⊕ एसएचआर3(346ई6720)
यह समीकरण लगभग वैसा ही है जैसा हमने अभी हल किया है। संक्षिप्तता के लिए, हम इसमें नहीं जाएंगे, लेकिन यदि आप स्वयं इसमें जाना चाहते हैं, तो ऊपर दिए गए हमारे द्वारा अपनाए गए प्रत्येक चरण का पालन करें, लेकिन इसे बदल देंबदलावहर बार करने के लिए7,18और3, क्रमश।
पी0(346ई6720)=4068DCCE ⊕ 99C80D1B ⊕ A3733901
एक बार जब आप इसे हल कर लेंगे, तो आप पाएंगे कि उत्तर है:
पी0(346ई6720)=7AD3E8D4
मॉड्यूलर जोड़
अब चूँकि हम दोनों के मूल्यों को जानते हैंपी1(में14)औरपी0(में1), हम अंततः W का मान निकालने के लिए तैयार हैं16:
में16= पी1(में14) + डब्ल्यू9+ पी0(में1) + डब्ल्यू0
में16= 000000000 + 0000000 + 7AD3E8D4 + 68617368
उपरोक्त समीकरण अपेक्षाकृत सीधा दिखता है। केवल एक चीज जिस पर हमें ध्यान देने की आवश्यकता है वह यह है कि इसमें प्लस चिह्न सामान्य जोड़ के बजाय मॉड्यूलर जोड़ का प्रतिनिधित्व करते हैं।
8-अंकीय दशमलव संख्या के साथ अवधारणा को प्रदर्शित करने के लिए, यदि हम 99,999,999 में 1 जोड़ने के लिए मॉड्यूलर जोड़ का उपयोग कर रहे थे, तो उत्तर 100,000,000 नहीं है जैसा कि आप उम्मीद करेंगे। इसके बजाय, यह बस उसी तरह शुरुआत में वापस आ जाता है जैसे घड़ी में 1 के बाद 12 आता है। उत्तर 0 या 00,000,000 है। चेक आउट यह प्राइमर यदि आपको मॉड्यूलर अंकगणित का संक्षिप्त परिचय चाहिए।
संक्षेप में, मॉड्यूलर जोड़ आपको आपके उत्तर को लंबा किए बिना संख्याएँ जोड़ने की अनुमति देता है। निम्नलिखित को दूसरे दशमलव उदाहरण के रूप में लें:
76,487,639 + 98,094,034
सामान्य जोड़ के तहत, उत्तर होगा:
76,487,639 + 98,094,034 =174,581,673
मॉड्यूलर जोड़ के साथ, हम आसानी से इसे फेंक सकते हैं1, और हमारा उत्तर है:
76,487,639 + 98,094,034 =74,581,673
हम अपने समीकरण में हेक्साडेसिमल संख्याओं के साथ वही गणना कर सकते हैं:
में16= 000000000 + 0000000 + 7AD3E8D4 + 68617368
हम इसका उपयोग करके इसका समाधान निकालेंगे ऑनलाइन कैलकुलेटर . हमारे उदाहरण में, हमें शून्य जोड़ने की जहमत उठाने की ज़रूरत नहीं है क्योंकि वे मान नहीं बदलेंगे, और हम बस जोड़ सकते हैं7AD3E8D4और68617368. यदि आपको भविष्य में अधिक संख्याएँ जोड़ने के लिए उसी टूल का उपयोग करने की आवश्यकता है, तो आप पिछले समीकरण के परिणाम में अगली संख्या जोड़कर, बस कई बार ऑपरेशन कर सकते हैं।
हम टाइप करके अपना समीकरण हल कर सकते हैं7AD3E8D4ऑनलाइन कैलकुलेटर के पहले बॉक्स में और68617368दूसरे में. इससे हमें परिणाम मिलता है:
में16= e3355c3c
याद रखें, यह मॉड्यूलर जोड़ माना जाता है, इसलिए यदि परिणाम आठ अंकों से अधिक हो गया है, तो हमें सबसे बाएं अंक को हटाने की आवश्यकता होगी। हमारा परिणाम केवल 8 अंक लंबा है, इसलिए हमें इस मामले में चिंता करने की ज़रूरत नहीं है।
यह एक लंबी और जटिल प्रक्रिया रही है, लेकिन अंततः हमारे पास डब्ल्यू का उत्तर है16. इसकाe3355c3c. डब्ल्यू से सभी डब्ल्यू मानों के लिए गणना का एक ही सेट निष्पादित करने की आवश्यकता है17डब्ल्यू है.63.
हमने प्रदर्शित किया है कि ये गणनाएँ कैसे काम करती हैं, इसलिए SHA-2 एल्गोरिथ्म के अन्य पहलुओं पर आगे बढ़ने का समय आ गया है।
आरंभीकरण चर
अब जब हमने चर्चा कर ली है कि सभी W इनपुट कहाँ से आते हैं, तो आइए अपने आरेख पर वापस जाएँ:
SHA-2 एल्गोरिथ्म
शीर्ष पर, आप देखेंगे कि यह H कहता हैमैं -1. यह कार्यशील चर का प्रतिनिधित्व करता है, जो प्रत्येक दौर में इनपुट के रूप में कार्य करता है। इनमें से आठ चर हैं, और उन्हें प्रत्येक दौर के अंत में अद्यतन किया जाता है। शुरू करने के लिए, आरंभीकरण चर, एच(0)हैं:
- एच(0)ए= 6a09e667
- एच(0)बी= bb67ae85
- एच(0)सी= 3c6ef372
- एच(0)डी= a54ff53a
- एच(0) और= 510e527f
- एच(0)एफ= 9बी05688सी
- एच(0)जी= 1f83d9ab
- एच(0)ज= 5be0cd19
उपरोक्त संख्याएँ पहले आठ अभाज्य संख्याओं के वर्गमूलों से प्राप्त हुई हैं, लेकिन वे कहाँ से आती हैं यह वास्तव में हमारे उद्देश्यों के लिए मायने नहीं रखता। आपको बस इतना जानना है कि हमें ऊपर सूचीबद्ध विशिष्ट संख्याओं से शुरुआत करनी होगी।
बाद के दौर में, ये मान भिन्न होंगे। सरलता और उनके बदलते मूल्यों को दर्शाने के लिए, आरेख इन इनपुटों को इस प्रकार प्रदर्शित करता हैए, बी, सी, डी, ई, एफ, जी, और एच, के बजायएच(0)ए, एच(0)बी, आदि, या एच(1)ए, एच(1)बी, वगैरह..
स्थिरांक, के
प्रत्येक राउंड में, हम कार्यशील चर लेते हैं और उन्हें राउंड-उपयुक्त डब्ल्यू मान के साथ जोड़ते हैं जिसका हमने पिछले अनुभाग में वर्णन किया था। यदि आप आरेख में गोलों के दाईं ओर देखते हैं, तो आपको एक और इनपुट दिखाई देगा,क. K के लिए 64 अलग-अलग 32-बिट मान हैं, 64 राउंड में से प्रत्येक के लिए एक। वे पहले 64 अभाज्य संख्याओं के घन-मूलों से प्राप्त होते हैं। हेक्साडेसिमल में, प्रत्येक दौर के लिए ये आठ-वर्ण स्थिरांक इस प्रकार हैं, अगली पंक्ति पर जाने से पहले बाएं से दाएं पढ़ें:
|_+_|ध्यान दें कि SHA-384, SHA-512, SHA-512/224 और SHA-512/256 में K के मान 64 बिट लंबे हैं। इनमें से 64 के बजाय 80 मान भी हैं। आप इन्हें देख सकते हैं FIPS 180-4 यदि ज़रूरत हो तो।
मेजर ऑपरेशन
अंततः, हमारे पास हमारे सभी इनपुट हैं। अब यह पता लगाने का समय आ गया है कि SHA-2 का प्रत्येक दौर उनका उपयोग कैसे करता है। निम्नलिखित चित्र इस बात का अच्छा विवरण देता है कि SHA-2 इन सभी इनपुटों का उपयोग कैसे करता है:
SHA-2 गणना एक ही दौर में शामिल है।
यदि आप शीर्ष की ओर देखें, तो हमारे पास कार्यशील चर हैं,एच(मैं एक, एच(मैं)बी, एच(मैं सी, एच(पहचान, एच(अर्थात, एच(अगर, एच(मैं) जी, और वह(आई)एच. ये कार्यशील चर के समान हैंए, बी, सी, डी, ई, एफ, जी, और एचसंपूर्ण SHA-2 एल्गोरिथम के आरेख में। पहले दौर में, वे संबंधित आरंभीकरण चर होंगे जिन्हें हमने पिछले अनुभाग में सूचीबद्ध किया था। यदि आप एच को देखें(मैं एक, एच(मैं)बी, एच(मैं सी, ऊपर बाईं ओर, आप देखेंगे कि तीनों इनपुट में एक बॉक्स की ओर इशारा करते हुए तीर हैं,मेजर. यह निम्नलिखित समीकरण को दर्शाता है:
मेजर (ए,बी,सी) = (ए और बी) ⊕ (ए और सी) ⊕ (बी और सी)
समीकरण को पढ़ना आसान बनाने के लिए, हमने H को हटा दिया है(मैं)प्रत्येक चर से और उन्हें वैसे ही छोड़ दियाए,बी, औरसी. जब तक आपको वह मूल्य याद हैए,बीऔरसीप्रत्येक दौर के साथ बदलें, इससे इसका पालन करना आसान हो जाएगा।
हम पहले ही निपट चुके हैं ⊕ प्रतीक, लेकिनऔरइस सन्दर्भ में यह हमारे लिए नया है। यह बूलियन बीजगणित में एक और ऑपरेशन है। यह तार्किक संयोजन को संदर्भित करता है, जिसका मूल रूप से मतलब है कि आउटपुट तभी सत्य है जब दोनों इनपुट सत्य हैं। तुम कर सकते हो यहां और जानें , लेकिन हम आगे बढ़ेंगे और बस एक का उपयोग करेंगे ऑनलाइन कैलकुलेटर इस ऑपरेशन को करने के लिए.
सबसे पहले, आइए इनिशियलाइज़ेशन वेरिएबल्स को डालें जिन्हें हमने सूचीबद्ध किया हैआरंभीकरण चरअनुभाग:
मेजर (6a09e667, bb67ae85, 3c6ef372) = (6a09e667 और bb67ae85) ⊕ (6a09e667 और 3c6ef372) ⊕ (bb67ae85 और 3c6ef372)
हम जिस कैलकुलेटर का उपयोग कर रहे हैं वह काफी सीमित है, इसलिए हमें गणना कई चरणों में करनी होगी।
प्रवेश करना6a09e667इनपुट मेंए.
चुननाऔरनीचे दी गई ड्रॉप डाउन सूची से.
प्रवेश करनाbb67ae85इनपुट मेंबी.
यह आपको इसका परिणाम देता है:
2A01A605
अगला:
प्रवेश करना6a09e667इनपुट मेंए.
चुननाऔरनीचे दी गई ड्रॉप डाउन सूची से.
प्रवेश करना3c6ef372इनपुट मेंबी.
यह आपको इसका परिणाम देता है:
2808ई262
तब:
प्रवेश करनाbb67ae85इनपुट मेंए.
चुननाऔरनीचे दी गई ड्रॉप डाउन सूची से.
प्रवेश करना3c6ef372इनपुट मेंबी.
यह आपको इसका परिणाम देता है:
3866ए200
आइए इन सभी उत्तरों को समीकरण में रखें:
मेजर (6a09e667, bb67ae85, 3c6ef372) = 2A01A605 2808E262 3866A200
अब, हमें बस अपने ऑनलाइन कैलकुलेटर में इनपुट को एक बार और बदलना है:
प्रवेश करना2A01A605इनपुट मेंए.
चुननामुक्तनीचे दी गई ड्रॉप डाउन सूची से.
प्रवेश करना2808ई262इनपुट मेंबी.
चुननामुक्तनीचे दी गई ड्रॉप डाउन सूची से.
प्रवेश करना3866ए200इनपुट मेंसी.
यह हमें देता है:
मेजर(ए,बी,सी)=3ए6एफई667
∑0संचालन
अब हमारे पास इसका उत्तर हैमेजर(ए,बी,सी)आइए आरेख को वापस देखें और देखें कि आगे क्या है:
SHA-2 गणना एक ही दौर में शामिल है।
आप देखेंगे कि तीर सेएच(मैं एककी ओर भी इशारा करता है∑ प्रतीक. यह इंगित करता है कि हमें एच लेने की आवश्यकता है(मैं एकइनपुट करें और इसे निम्नलिखित गणना के माध्यम से डालें:
∑0(ए) = आरओटीआरदो(ए) ⊕ ROTR13(ए) ⊕ ROTR22(ए)
एक बार फिर, हमने एच को छोड़ दिया है(मैं)विस्तृत जानकारी के लिए। हम पहले ही इनसे निपट चुके हैंवृत्ताकार दाएँ-शिफ़्ट, इसके साथ हीएक्सओआर संचालन. इस बार, हमें क्रमशः 2, 13 और 22 बिट्स द्वारा गोलाकार राइट-शिफ्ट करने की आवश्यकता है। चलिए वापस आते हैं हमारा कैलकुलेटर , हमारे मूल्य के साथए,6a09e667.
इस गणना के पहले खंड के लिए, दर्ज करें:
6a09e667मेंकीमतसुनिश्चित करनाहेक्साडेसिमलड्रॉपडाउन मेनू से दाईं ओर चुना गया है।
32 मेंआकार।
2 मेंबदलाव।
सुनिश्चित करेंसहीके लिए चुना गया हैदिशा.
क्लिक करेंवृत्ताकार शिफ्टडिब्बा।
क्लिक करेंबिट शिफ्ट ऑपरेशन करेंबटन।
इससे आपको परिणाम मिलेगा:
डीए827999
यदि आप इस बारे में अधिक जानकारी चाहते हैं कि यह परिणाम कैसे प्राप्त किया गया, तो कैलकुलेटर ऑपरेशन को पूरा करने में शामिल चरणों को दिखाता है। आप इसे वापस भी देख सकते हैंशिफ्ट संचालनअधिक विवरण के लिए अनुभाग.
शेष दो मानों के लिए हमें यह पता लगाने की आवश्यकता है, हमें केवल मान को बदलने की आवश्यकता हैबदलावफ़ील्ड और फिर क्लिक करेंबिट शिफ्ट ऑपरेशन करेंफिर से बटन.
इसे बदल रहा हूँ13हमें इसका उत्तर देता है:
333बी504एफ
इसे बदल रहा हूँ22हमें इसका उत्तर देता है:
27999डीए8
अब हमारे पास समीकरण को पूरा करने के लिए आवश्यक सभी मान हैं:
∑0(6a09e667)=डीए827999⊕333बी504एफ⊕27999डीए8
चलिए वापस आते हैं कैलकुलेटर हम XOR संचालन के लिए उपयोग कर रहे हैं और:
प्रवेश करनाडीए827999इनपुट मेंए.
चुननामुक्तनीचे दी गई ड्रॉप डाउन सूची से.
प्रवेश करना333बी504एफइनपुट मेंबी.
चुननामुक्तनीचे दी गई ड्रॉप डाउन सूची से.
प्रवेश करना27999डीए8इनपुट मेंसी.
इससे हमें परिणाम मिलता है:
∑0(6a09e667) = CE20B47E
परिणामों का मॉड्यूलर जोड़
यदि हम तीरों का अनुसरण करते हैंमेजरबॉक्स और∑बॉक्स, हम देखते हैं कि आउटपुट को इनपुट के रूप में एक बॉक्स में भेजा जाता है+उस पर प्रतीक. यह दर्शाता हैमॉड्यूलर जोड़, जैसा कि हमने पहले ही वर्णित किया है, काफी हद तक सामान्य जोड़ की तरह है, सिवाय इसके कि संख्याएँ बड़ी होने के बजाय बस एक निश्चित बिंदु पर शुरू में वापस आ जाती हैं। यदि आप अधिक विवरण वाला पुनश्चर्या चाहते हैं, तो पूर्व मॉड्यूलर जोड़ अनुभाग को वापस देखें।
आरेख को निम्नलिखित सूत्र के माध्यम से दर्शाया जा सकता है:
माज(ए,बी,सी) + ∑0(ए) =3ए6एफई667+CE20B47E
हम इसका उपयोग करेंगे वही कैलकुलेटर दोबारा।
प्रवेश करना3ए6एफई667पहले क्षेत्र में औरCE20B47Eदूसरे में, फिर क्लिक करेंगणना. इससे आपको इसका उत्तर मिलना चाहिए:
108909ae5
यदि आप बारीकी से ध्यान दे रहे हैं, तो आप देख सकते हैं कि उपरोक्त उत्तर नौ अंकों का है, जबकि पिछले प्रत्येक उत्तर में केवल आठ अंक थे। यदि आपको वह समय याद हो जब हमने मॉड्यूलर जोड़ की अवधारणा पेश की थी, तो हमने उल्लेख किया था कि यह नियमित जोड़ की तरह है, लेकिन जब संख्याएं एक निश्चित बिंदु से आगे निकल जाती हैं तो यह वापस शुरुआत में आ जाती है।
ठीक है, हम जिस कैलकुलेटर का उपयोग कर रहे हैं वह विशेष रूप से मॉड्यूलर जोड़ के लिए नहीं है - यह केवल सामान्य जोड़ का प्रदर्शन कर रहा है जो आपने प्राथमिक विद्यालय में सीखा था (लेकिन हेक्साडेसिमल संख्याओं के साथ)। इसका मतलब यह है कि सीमा तक पहुंचने के बाद यह संख्याओं को रोल ओवर नहीं करेगा। इस बिंदु तक, हम भाग्यशाली थे कि हमारी पिछली किसी भी गणना में नौ अंकों की संख्या नहीं निकली।
इस बार हम नौ अंकों के साथ समाप्त हो गए हैं, जबकि हमें वास्तव में इसकी केवल आठ की आवश्यकता है। अच्छी खबर यह है कि हमारी समस्या का समाधान करना आसान है। हमें बस सबसे बाएँ अंक को हटाना है1. इसलिए, हमारा उत्तर वास्तव में नहीं है108909ae5. इसके बजाय, यह है:
08909एई5
यदि आप आरेख पर वापस लौटते हैं और उस रेखा का पता लगाते हैं जो इसे छोड़ती है+आउटपुट के रूप में बॉक्स, आप देखेंगे कि यह एक अन्य लाइन से जुड़ता है जिसमें ऐसे इनपुट शामिल हैं जिन पर हमने अभी तक चर्चा नहीं की है।इस बिंदु पर लौटने से पहले हमें कुछ अन्य गणनाएँ करनी होंगी.
सशर्त कार्य
इस बार, आइए एच पर नजर डालें(अर्थात, एच(अगर, एच(मैं)जीआरेख में. वे सभी लेबल वाले बॉक्स की ओर इशारा करते हैंचौधरी, जो इंगित करता है कि ये मान निम्नलिखित फ़ंक्शन में इनपुट के रूप में कार्य करते हैं:
Ch(e, f, g) = (e और f) ⊕ (e और g नहीं)
हम इनमें से प्रत्येक ऑपरेशन को छोड़कर पहले ही निपट चुके हैंनहीं. यह दर्शाता है नकार , जिसे तार्किक पूरक के रूप में भी जाना जाता है। हम इस बात के विवरण में नहीं जाएंगे कि यह हमें बहुत अधिक उलझन में पड़ने से बचाने के लिए कैसे काम करता है, लेकिन आप या तो लिंक का संदर्भ ले सकते हैं या ऑनलाइन कैलकुलेटर पर अपना भरोसा रख सकते हैं।
एक बार फिर, हमने एच को हटा दिया है(मैं)ई, एफ और जी से, इसे पढ़ना आसान बनाने के लिए। हम अभी भी राउंड 0 पर काम कर रहे हैं, इसलिए ये मान प्रारंभिक चर होंगे जिन्हें हमने पहले सूचीबद्ध किया था:
एच(0) और–510e527f
एच(0)एफ–9b05688c
एच(0)जी–1f83d9ab
ध्यान दें कि भविष्य के दौर में ई, एफ और जी के चर अलग-अलग होंगे। अभी के लिए, आइए इन आरंभीकरण चर को हमारे समीकरण में डालें:
Ch (510e527f, 9b05688c, 1f83d9ab) = (510e527f और 9b05688c) ⊕ (510e527f और 1f83d9ab नहीं)
इसे पूरा करने के लिए हमें इस समीकरण को भागों में तोड़ना होगा हमारा कैलकुलेटर . पहले भाग के लिए:
प्रवेश करना510e527fइनपुट मेंए.
चुननाऔरनीचे दी गई ड्रॉप डाउन सूची से.
प्रवेश करना9b05688cइनपुट मेंबी.
इससे आपको इसका उत्तर मिलना चाहिए:
1104400सी
समीकरण के दूसरे भाग के लिए:
का चयन करेंनहींइनपुट के बाईं ओर बटनएक।
इनपुट में 510e527f दर्ज करेंए.
चुननाऔरनीचे दी गई ड्रॉप डाउन सूची से.
इनपुट में 1f83d9ab दर्ज करेंबी.
इससे आपको परिणाम मिलना चाहिए:
E818980
आइए इन उत्तरों को वापस समीकरण में जोड़ें:
Ch(510e527f, 9b05688c, 1f83d9ab) = (1104400सी) ⊕ (E818980)
इसे हल करके समाप्त करें:
यह सुनिश्चित कर रहे हैंनहींअब चयनित नहीं है.
प्रवेश करना1104400सीइनपुट मेंए.
चुननामुक्तनीचे दी गई ड्रॉप डाउन सूची से.
प्रवेश करनाE818980इनपुट मेंबी.
इससे आपको इसका उत्तर मिलना चाहिए:
Ch(e, f, g) = 1F85C98C
∑1: वृत्ताकार दाएँ-शिफ़्ट
SHA-2 गणना एक ही दौर में शामिल है।
यदि आप आरेख पर वापस लौटते हैं, तो आप देखेंगे कि H(अर्थात, केवल एक इनपुट नहीं हैचौधरीसमीकरण जो हमने अभी प्रदर्शित किया है।यह ∑ से चिह्नित दूसरे बॉक्स में भी एक इनपुट बन जाता है. यह बॉक्स निम्नलिखित गणना को दर्शाता है:
∑1(ई) = आरओटीआर6(और) ⊕ ROTRग्यारह(और) ⊕ ROTR25(और)
ध्यान दें कि यह∑1(और)फ़ंक्शन लगभग वैसा ही है∑0(ए)वह कार्य जो हमने किया∑0संचालनअनुभाग। हालाँकि, वृत्ताकार दाएँ-शिफ़्ट के लिए दोनों के अलग-अलग मान हैं।
हमने एच को छोड़ दिया है(मैं)सरलता के लिए समीकरण के कुछ हिस्सों को एक बार फिर से देखें। आइए प्लग इन करेंएच(0) औरके लिए मूल्यऔरमूल्य, क्योंकि हम अभी भी काम कर रहे हैंराउंड 0. जैसा कि हमने चर्चा की थीआरंभीकरण चरअनुभाग, के लिए मूल्यएच(0) औरहै510e527f. इसलिए:
∑1(510e527f) = आरओटीआर6(510e527f) ⊕ ROTRग्यारह(510e527f) ⊕ ROTR25(510e527f)
हमने कई बार समझाया है कि ये सही सर्कुलर-शिफ्ट कैसे काम करते हैं, तो आइए हमारे पास जाएं ऑनलाइन कैलकुलेटर और दर्ज करें:
510e527f मेंकीमतसुनिश्चित करनाहेक्साडेसिमलड्रॉपडाउन मेनू से दाईं ओर चुना गया है।
32 मेंआकार।
6 मेंबदलाव।
सुनिश्चित करेंसहीके लिए चुना गया हैदिशा.
क्लिक करेंवृत्ताकार शिफ्टडिब्बा।
क्लिक करेंबिट शिफ्ट ऑपरेशन करेंबटन।
इसका हमें उत्तर देना चाहिए:
एफडी443949
परिवर्तन को छोड़कर सभी विवरण वही रखेंबदलावको मूल्यग्यारहऔर क्लिक करेंबिट शिफ्ट ऑपरेशन करेंएक बार फिर बटन. इससे आपको इसका उत्तर मिलना चाहिए:
4FEA21CA
इस प्रक्रिया को दोहराएँ, इस बार बस बदल रहा हैबदलावमान 25 तक। हमारा उत्तर होना चाहिए:
87293FA8
अब हमारे पास समीकरण को हल करने के लिए आवश्यक प्रत्येक परिणाम है। आइए उन सभी मूल्यों को सूत्र में रखें जिन्हें हमने अभी-अभी निकाला है:
∑1(510e527f) = एफडी443949⊕ 4FEA21CA⊕ 87293FA8
अब, आइए अपने कैलकुलेटर पर वापस लौटकर इसे हल करें एक्सओआर संचालन:
प्रवेश करना एफडी443949 इनपुट मेंए.
चुननामुक्तनीचे दी गई ड्रॉप डाउन सूची से.
प्रवेश करना 4FEA21CA इनपुट मेंबी.
चुननामुक्तनीचे दी गई ड्रॉप डाउन सूची से.
प्रवेश करना87293FA8इनपुट मेंसी.
इससे हमें परिणाम मिलता है:
∑1(510e527f) = 3587272बी
मॉड्यूलर जोड़
आइए यह देखने के लिए आरेख पर वापस जाएँ कि आगे कहाँ जाना है:
SHA-2 गणना एक ही दौर में शामिल है।
यदि हम शीर्ष दाईं ओर देखें, तो हम देखेंगे कि कार्यशील चर H(आई)एचइसमें एक तीर है जो एक बॉक्स की ओर ले जाता हैपलस हसताक्षरइस पर। से आउटपुटचौधरीजो ऑपरेशन हमने पहले ही पूरा कर लिया है वह उसी बॉक्स में ले जाता है, जिसका अर्थ है कि हमें इन दो मानों के साथ मॉड्यूलर जोड़ करने की आवश्यकता है। हम अभी भी राउंड 0 के मध्य में हैं, इसलिए हमें इनिशियलाइज़ेशन वेरिएबल, एच का उपयोग करने की आवश्यकता है(0)ज, हमारे मूल्य के रूप मेंएच. जैसा कि हमने चर्चा की थीआरंभीकरण चरअनुभाग।
एच(0)ज= 5be0cd19
Ch ऑपरेशन का उत्तर था:
Ch(e, f, g) = 1F85C98C
इसलिए हमें इसका समाधान खोजने की जरूरत है:
5be0cd19+1F85C98C
आइए हमारी ओर चलें ऑनलाइन कैलकुलेटर हेक्साडेसिमल जोड़ के लिए.
प्रवेश करना5be0cd19पहले क्षेत्र में, और1F85C98Cदूसरे फ़ील्ड में, फिर गणना पर क्लिक करें। इससे हमें परिणाम मिलता है:
7बी6696ए5
अधिक मॉड्यूलर जोड़
यदि आप इस बॉक्स से बाहर की ओर इशारा करते हुए तीर का पता लगाते हैं+प्रतीक, आप देखेंगे कि यह एक अन्य समान बॉक्स में एक इनपुट बन जाता है, जो अधिक मॉड्यूलर जोड़ का संकेत देता है। इस बार, दूसरा इनपुट वह परिणाम है जो हमें ∑ पर वृत्ताकार दाएँ प्रदर्शन करने से प्राप्त हुआ है1(ई)अंत में∑1: वृत्ताकार दाएँ-शिफ़्टअनुभाग। उत्तर था:
∑1(510e527f) = 3587272बी
तो आइए अंतिम अनुभाग से परिणाम लें और इसे परिणाम में जोड़ें∑1(और). समीकरण है:
7बी6696ए5+3587272बी
के पास जाओ ऑनलाइन कैलकुलेटर जिसे हमने अभी पिछले अनुभाग में उपयोग किया था, और दर्ज करें7बी6696ए5पहले क्षेत्र में, और3587272बीदूसरे फ़ील्ड में, फिर गणना पर क्लिक करें। इससे हमें परिणाम मिलता है:
b0edbdd0
W मान जोड़ना... और भी अधिक मॉड्यूलर जोड़ के साथ
यदि आप आरेख को फिर से देखते हैं, तो आप देखेंगे कि पिछले ऑपरेशन से आउटपुट दूसरे में चला जाता हैमॉड्यूलर अतिरिक्त बक्सेद्वारा दर्शाया गया है+संकेत। इस बार, इसे W मानों में से एक में जोड़ा जाता है, जो हमारे गद्देदार संदेश के भाग हैं, 'हैशिंग जटिल है' (मान W के मामले में)16-में63, वे इसके भाग होने के बजाय गद्देदार संदेश से प्राप्त हुए हैं)।
हम अभी भी अंदर हैंराउंड 0, इसलिए हमें उपयोग करने की आवश्यकता हैमें0, जिस पर, जैसा कि हमने चर्चा की थीहेक्साडेसिमल में कनवर्ट करनाप्रारंभ की ओर अनुभाग, है:
में0- 68617368
यदि हम इसे अपने पिछले अनुभाग के समाधान के साथ एक मॉड्यूलर जोड़ समीकरण में जोड़ते हैं, तो हमें मिलता है:
68617368+b0edbdd0
उसी पर लौटें ऑनलाइन कैलकुलेटर हेक्साडेसिमल संख्याएँ और इनपुट जोड़ने के लिए68617368पहले क्षेत्र में,फिर b0edbdd0दूसरे में. क्लिकगणना, जो आपको इसका उत्तर देगा:
1194f3138
जैसा कि हमने नोट किया हैपरिणामों का मॉड्यूलर जोड़अनुभाग, जब भी हमारा कोई परिणाम आठ के बजाय नौ अंकों तक पहुंचता है, तो हमें सबसे बाएं अंक को हटाकर इसे वापस रोल करना होगा।1. इसलिए, हमें जिस परिणाम की आवश्यकता है वह वास्तव में नहीं है1194f3138. इसके बजाय, यह है:
194f3138
सदैव-विश्वसनीय मॉड्यूलर जोड़ के माध्यम से स्थिरांक K… को जोड़ना
उपरोक्त उत्तर हाथ में होने पर, बॉक्स से आउटपुट दूसरे उत्तर की ओर इंगित करता है जिसके पास है+ प्रतीक, एक बार फिर मॉड्यूलर जोड़ का संकेत। इस बार, दूसरा तीर जो उसकी ओर इशारा करता है वह कहता है Kमैं, जिसका अर्थ है कि अब स्थिरांक K को जोड़ने का समय आ गया है। हमने K के लिए 64 मानों में से प्रत्येक को सूचीबद्ध किया हैस्थिरांक, केअनुभाग। पहले दौर के लिए हमें जो मान चाहिए, K0है:
428a2f98
इसलिए हमारे मॉड्यूलर जोड़ ऑपरेशन में इस मान को शामिल करने की आवश्यकता है, साथ ही पिछले दौर के परिणाम भी:
428a2f98+194f3138
अब, हमें अपने पास लौटने की जरूरत है ऑनलाइन कैलकुलेटर हेक्साडेसिमल जोड़ने और दर्ज करने के लिए428a2f98पहले क्षेत्र में, के साथ194f3138क्षण में। क्लिक करनाcalculateहमें इसका परिणाम देता है:
5bd960d0
मॉड्यूलर जोड़ कभी ख़त्म नहीं होता
आरेख पर वापस लौटें और पिछले ऑपरेशन के आउटपुट का अनुसरण करें। यह एक और खतरनाक मॉड्यूलर एडिशन बॉक्स से मिलता है, इस बार मूल्य एच के साथ(पहचानइसके अन्य इनपुट के रूप में। हम अभी भी राउंड 0 में हैं, इसलिए हमें इनिशियलाइज़ेशन वेरिएबल एच का उपयोग करने की आवश्यकता है(0)डी, जो है:
a54ff53a
इसलिए हमें इसका उत्तर खोजने की आवश्यकता है:
a54ff53a+5bd960d0
जब हम इन मूल्यों को एक में डालते हैं ऑनलाइन कैलकुलेटर , हम इसके साथ समाप्त होते हैं:
10129560a
एक बार फिर, हम नौ अंकों में पहुंच गए हैं, इसलिए हमें बस सबसे बाईं ओर को छोड़ने की जरूरत है1, जैसा कि चर्चा में हैपरिणामों का मॉड्यूलर जोड़अनुभाग। इसलिए, हमारा उत्तर वास्तव में है:
0129560ए
कार्यशील चर कहाँ से आते हैं?
यदि आप + प्रतीक बॉक्स से बाहर की पंक्ति का अनुसरण करते हैं, आप देखेंगे कि यह नीचे बक्सों की एक पंक्ति में समाप्त होता है, जिसमें यह विशेष बॉक्स अंकित हैएच(अर्थात. हमने इसका उल्लेख किया हैराउंड 0 इनिशियलाइज़ेशन वेरिएबल्स के साथ शुरू होता है, लेकिन उसनिम्नलिखित राउंड इसके बजाय विभिन्न चर का उपयोग करते हैं.
आप सोच रहे होंगे कि ये कहाँ से आने वाले थे, और अब आपके पास उत्तर का कम से कम एक हिस्सा है।नीचे बक्सों की इस पंक्ति के मान अगले दौर में उपयोग किए जाने वाले कार्यशील चर बन जाएंगे।
इस मामले में, आरंभीकरण चरएच(0)डीइसमें जोड़ा गया था जो अनिवार्य रूप से अन्य प्रारंभिक चर एच का मिश्रण है(0) और, एच(0)एफ, एच(0)जी, और वह(0)ज, हमारे इनपुट संदेश के एक भाग के साथ, डब्ल्यू0,और स्थिरांक, K0. परिणामी मिश्रण,0129560ए, फिर कार्यशील चर बन जाता हैएच(1 औरराउंड 1 के लिए.
अन्य आरंभीकरण चर समान प्रक्रियाओं का पालन करते हैं, जिन्हें संशोधित किया जाता है और अगले दौर में नए कार्यशील चर बनने के लिए अजीब तरीकों से एक-दूसरे में जोड़ा जाता है। आप यह देखने के लिए नीचे की पंक्ति की ओर इशारा करते हुए तीरों को देख सकते हैं कि अगले दौर के प्रत्येक कार्यशील चर कहाँ से आते हैं।
यह उतना महत्वपूर्ण नहीं लग सकता है, लेकिन यह संरचना का एक प्रमुख घटक है जो प्रत्येक SHA-2 हैश को मौलिक रूप से अलग दिखने की अनुमति देता है, तब भी जब इनपुट का केवल एक अक्षर बदला जाता है। याद रखें, हम अभी भी राउंड 0 के रास्ते का केवल एक हिस्सा हैं, और अभी 63 राउंड बाकी हैं, इसलिए इन मूल्यों को मिलाने का बहुत अधिक अवसर है।
दोनों पक्षों को एकजुट करना... अधिक मॉड्यूलर जोड़ के साथ
वापस याद रखेंपरिणामों का मॉड्यूलर जोड़अनुभाग जहां हमने निम्नलिखित मानों पर मॉड्यूलर जोड़ प्रदर्शन किया:
माज(ए,बी,सी) + ∑0(ए) =08909एई5
समाधान ढूंढने के बाद, हमें अन्य घटकों का पता लगाने के दौरान आरेख के उस धागे पर रुकना पड़ा। अब, हमने वह सब कुछ कर लिया है जो हमें करने की आवश्यकता है और हम इस पर वापस जाने के लिए तैयार हैं।
बस यह सुनिश्चित करने के लिए कि आप ठीक से अनुसरण कर रहे हैं, हम वर्तमान में हैंआरेख के बाईं ओर सबसे निचला + बॉक्स, जो ऊपर चर्चा किए गए समीकरण से प्राप्त होता है। इस मॉड्यूलर जोड़ समीकरण में हमारा अन्य इनपुट इसका समाधान हैमॉड्यूलर जोड़ कभी ख़त्म नहीं होताअनुभाग, जो था:
0129560ए
इसलिए, हम इसका समाधान ढूंढने का प्रयास कर रहे हैं:
08909एई5+0129560ए
आइए अपने पास वापस चलें ऑनलाइन कैलकुलेटर और टाइप करें08909एई5पहले क्षेत्र में, के साथ0129560एक्षण में। जब हम मारते हैंcalculate, यह हमें देता है:
9b9f0ef
हम इसे 8 अंकों पर स्थिर रखने के लिए सामने एक शून्य जोड़ सकते हैं:
09b9f0ef
यह उत्तर फिर H में रखा जाता है(मैं एकनिचली पंक्ति में स्लॉट, जिसका अर्थ हैयह कार्यशील चर H बन जाएगा(1)एअगले राउंड में, राउंड 1.
अब जब हमारे पास यह समाधान है, तो हमने अंततः इसमें शामिल सभी गणनाओं को पूरा कर लिया हैराउंड 0.
अन्य कार्यशील चर
हमने पहले ही कार्यशील चर पर चर्चा की हैएच(अर्थात, और अब कार्यशील चरएच(मैं एक भी। अब यह कवर करने का समय है कि बाकी कामकाजी चर कहां से आते हैं ताकि हम उन्हें राउंड 1 और उसके बाद के प्रत्येक राउंड में उपयोग कर सकें।
जैसा कि हमने चर्चा की, राउंड 0 में, कार्यशील चर पूर्वनिर्धारित संख्याओं का एक सेट थे जिन्हें हमने आरंभीकरण चर कहा था:
- एच(0)ए= 6a09e667
- एच(0)बी= bb67ae85
- एच(0)सी= 3c6ef372
- एच(0)डी= a54ff53a
- एच(0) और= 510e527f
- एच(0)एफ= 9बी05688सी
- एच(0)जी= 1f83d9ab
- एच(0)ज= 5be0cd19
अब यह पता लगाने का समय आ गया है कि राउंड 1 की शुरुआत के लिए इनमें से शेष कार्यशील चर क्या होंगे। शुक्र है, आरेख इसे बहुत आसान बनाता है:
SHA-2 गणना एक ही दौर में शामिल है।
यदि हम नीचे की पंक्ति को देखें जहां यह लिखा हैएच(मैं)बी, हम यह देखने के लिए तीर का पता लगा सकते हैं कि मान सरल हैएच(मैं एक. जैसाएच(0)एहै6a09e667, इसका मतलब है कि राउंड 1 के लिए हमारा कार्यशील चर,एच(1)बी, यह भी होगा6a09e667.
साथ चल रहा हैएच(मैं सीनिचली पंक्ति में, हम देखते हैं कि तीर की उत्पत्ति होती हैएच(मैं)बीशीर्ष पंक्ति में बॉक्स. इसलिएएच(0)बीकीमत,bb67ae85, कार्यशील चर बन जाएगाएच(1)सीराउंड 1 में.
जब हम मुड़ते हैंएच(पहचाननिचली पंक्ति में, हम देखते हैं कि तीर इसे जोड़ता हैएच(मैं सीशीर्ष पर। इसलिए,एच(1)डीके समान ही मूल्य हैएच(0)सी, जो है3c6ef372.
आगे बढ़ते हुए, नीचे के लिए तीरएच(अर्थातके मॉड्यूलर जोड़ से आता हैएच(पहचानऔर जब हमने व्यंजन जोड़ा तो हमें जो परिणाम मिला। हमने इस मान का पता लगायामॉड्यूलर जोड़ कभी ख़त्म नहीं होताअनुभाग, इसलिए इसके लिए मूल्यएच(1 औरहै0129560ए.
के लिए मानएच(अगर,एच(मैं)जीऔरएच(आई)एचपता लगाना आसान है। यदि हम निचली पंक्ति में इन मानों से तीरों का अनुसरण करते हैं, तो हम देखते हैं कि तीरों की उत्पत्ति यहीं से हुई हैएच(अर्थात,एच(अगरऔरएच(मैं) जी, क्रमश।
इसलिए:
एच(0) और, जो 510e527f था, बन जाता हैएच(1)एफ.
एच(0)एफ, जो 9b05688c था, बन जाता हैएच(1)जी.
एच(0)जी, जो 1f83d9ab था, बन जाता हैएच(1)ज.
संक्षेप में कहें तो, राउंड 1 के लिए हम अपने कुछ इनपुट के रूप में जिन कार्यशील चरों का उपयोग करेंगे, वे हैं:
- एच(1)ए= 09b9f0ef
- एच(1)बी= 6a09e667
- एच(1)सी= bb67ae85
- एच(1)डी= 3c6ef372
- एच(1 और= 0129560ए
- एच(1)एफ= 510e527f
- एच(1)जी= 9बी05688सी
- एच(1)ज= 1f83d9ab
राउंड 1 (और उसके बाद के राउंड)
हमने राउंड 0 समाप्त कर लिया है और हम जानते हैं कि राउंड 1 के लिए कार्यशील चर क्या हैं। यदि आप वापस देखेंहेक्साडेसिमल में कनवर्ट करनाअनुभाग में, हम उस W मान को भी जानते हैं जिसे हमें राउंड 1 में उपयोग करने की आवश्यकता है:
में1= 346ई6720
आप वह K मान भी पा सकते हैं जिसकी हमें आवश्यकता हैस्थिरांक, के, अनुभाग। इस बार, हमें शीर्ष पंक्ति के दूसरे कॉलम में मान की आवश्यकता है:
क1=71374491
अब हमारे पास राउंड 1 शुरू करने के लिए आवश्यक सभी जानकारी है। सबसे पहले, आइए संपूर्ण एल्गोरिदम के आरेख को देखें:
SHA-2 एल्गोरिथ्म
यदि हम नीचे से निकलने वाले तीरों का अनुसरण करते हैंराउंड 0, आप देखेंगे कि वे इशारा करते हैंगोल टी. राउंड टी में डब्ल्यू के इनपुट भी हैंटीऔर केटी.गोल टीबीच के 62 राउंड में से प्रत्येक के लिए बस एक स्टैंड-इन हैराउंड 0औरराउंड 63, क्योंकि 64 राउंड निकालना अव्यावहारिक होता।
इसके बजाय, कल्पना करें कि राउंड 0 से तीर वास्तव में राउंड 1 की ओर जा रहे हैं, और अन्य इनपुट वास्तव में डब्ल्यू हैं1और के1.
अब, आइए SHA-2 के एकल दौर के आरेख को देखें:
SHA-2 गणना एक ही दौर में शामिल है।
जैसा कि दो आरेखों से संकेत मिलता है, राउंड 1 को पूरा करने के लिए, हमें बस राउंड 0 में किए गए प्रत्येक ऑपरेशन को दोहराना होगा। एकमात्र अंतर यह है कि हम विभिन्न मूल्यों के साथ शुरू कर रहे हैं। डब्ल्यू के बजाय0हम डब्ल्यू का उपयोग करते हैं1. के बजाय0हम K का उपयोग करते हैं1. सभी के बजाय एच0आरंभीकरण चर, हम एच का उपयोग करते हैं1कार्यशील चर. हमने इनमें से प्रत्येक इनपुट को सूचीबद्ध किया है जिसकी हमें राउंड 1 शुरू करने के लिए आवश्यकता है, ताकि आपके पास आरंभ करने के लिए आवश्यक सभी जानकारी हो।
आपका पहला कदम यह पता लगाना हैमेजर (ए,बी,सी). इस बार, आपको नया उपयोग करने की आवश्यकता हैराउंड 1के इनपुट:
- एच(1)ए= 09b9f0ef
- एच(1)बी= 6a09e667
- एच(1)सी= bb67ae85
हमने इस प्रक्रिया का वर्णन किया हैमेजर ऑपरेशनअनुभाग। इसमें AND संचालन और XOR संचालन दोनों शामिल थे, और हमने इसे ऑनलाइन कैलकुलेटर का उपयोग करके कई चरणों के माध्यम से पूरा किया। एक बार जब आप नए इनपुट मानों के साथ प्रक्रिया को दोहराते हैं, तो आप आरेख या पर लौटकर यह पता लगा सकते हैं कि आगे क्या करना है∑0संचालनहमारे लेख का अनुभाग.
इस अनुभाग में, हमने सर्कुलर राइट शिफ्ट के साथ-साथ एक्सओआर संचालन की एक श्रृंखला का प्रदर्शन किया। इस बार, आपको नया उपयोग करने की आवश्यकता हैएमूल्य, एच(1)ए, जो है:
09b9f0ef
बाकी ऑपरेशन समान हैं, जिसमें आपको शिफ्ट करने के लिए आवश्यक बिट्स की संख्या भी शामिल है। एक बार जब आपके पास परिणाम हो, तो अगले चरण पर आगे बढ़ने का समय है, जिसे आप या तो आरेख से परामर्श करके या लेख के माध्यम से वापस देखकर पा सकते हैं। एक बार जब आपको यह परिणाम मिल जाए, तो आपको आगे बढ़ना जारी रखना होगा, हर बार समान संचालन करना होगा, लेकिन जहां भी उपयुक्त हो नए इनपुट मानों के साथ।
सारांश के रूप में,राउंड 1 पूरा करने के लिए आपके पास यह होना चाहिए:
- प्रदर्शन कियामेजर ऑपरेशन.
- को पूरा किया∑0संचालन।
- इन दो पूर्व परिणामों पर मॉड्यूलर जोड़ का उपयोग किया गया।
तब:
- को पूरा कियासशर्त कार्य.
- ख़त्म कर दिया∑1संचालन.
- सशर्त फ़ंक्शन के परिणाम और एच के मान पर मॉड्यूलर जोड़ निष्पादित किया गया(1)ज
- अंतिम चरण का परिणाम लिया और इसे ∑ के परिणाम में जोड़ा1मॉड्यूलर जोड़ के माध्यम से संचालन
- इस परिणाम को W में जोड़ा गया1मॉड्यूलर जोड़ के माध्यम से
- अंतिम चरण से परिणाम लेने और K जोड़ने के लिए मॉड्यूलर जोड़ का उपयोग किया गया1
- पिछले चरण के परिणाम को H में जोड़ा गया(1)डीमॉड्यूलर जोड़ के साथ
इन चरणों का पालन करते हुए, आपको यह करना होगा:
- K जोड़ने पर आपको जो परिणाम मिला, उसे लीजिए1(दो कदम पहले), और इसे उस समाधान में जोड़ें जो आपको मॉड्यूलर जोड़ का उपयोग करके परिणामों को संयोजित करने से मिला थामेजर ऑपरेशनऔर यह∑0संचालन(आपको यह उत्तर तीसरे चरण में, बुलेट पॉइंट के पहले सेट के नीचे मिला)
- में आरेख और हमारे विवरण का उपयोग करेंअन्य कार्यशील चरयह पता लगाने के लिए अनुभाग कि कौन से मान H बन जाएंगे(दो)कार्यशील वेरिएबल जिनकी आपको राउंड 2 के लिए आवश्यकता होगी
एक बार जब आप इस बिंदु पर हों, तो यह आपके लिए समय हैराउंड 2 शुरू करें, इस बार एच का उपयोग करते हुए(दो)कार्यशील वेरिएबल जिन्हें आपने अभी-अभी समझा है, डब्ल्यू के साथदोऔर केदो. राउंड 2 बिल्कुल उसी तरीके से आगे बढ़ता है, सिवाय इसके कि यह जहां उपयुक्त हो वहां इन नए इनपुट का उपयोग करता है।
जब आप राउंड 2 समाप्त कर लेंगे, तो आपके पास राउंड 3 के लिए आवश्यक कार्यशील चर होंगे, और आपको केवल डब्ल्यू की आवश्यकता होगी3और के3वे मान जिन्हें हमने संचालन को पूरा करने के लिए लेख में पहले सूचीबद्ध किया था।
यह प्रक्रिया राउंड 4 और 5 इत्यादि में दोहराई जाती है, जिसके परिणाम अगले राउंड के लिए कार्यशील चर बन जाते हैं। एकमात्र जटिलता राउंड 16 में आती है, जहां आपको डब्ल्यू का उपयोग करना होगा16वह मान जिसकी गणना हम पहले ही कर चुके हैंमॉड्यूलर जोड़अनुभाग, जो लेख की शुरुआत में था।
राउंड 17 से 63 के लिए कार्य और भी जटिल हो जाता है, क्योंकि आपको इसमें वर्णित विधि का उपयोग करके, डब्ल्यू मानों की गणना स्वयं करनी होगी।अन्य W मानलेख का अनुभाग और उसके बाद के भाग।
यह मानते हुए कि आप कठिन परीक्षा से बच गए और राउंड 63 के अंत तक पहुंचने में कामयाब रहे, आपके पास आठ एच बचे रहेंगे(मैं)पूरे दौर में आपके द्वारा पूरी की गई प्रत्येक गणना से आपके आउटपुट के रूप में मान।
अंतिम XOR
यदि आप SHA-2 फ़ंक्शन के समग्र आरेख पर वापस लौटते हैं, तो आप अंतिम चरण देखेंगे:
SHA-2 एल्गोरिथ्म
आप देखेंगे कि राउंड 63 के आउटपुट, जो आठ अंतिम एच मान हैं जिन्हें आपने इस चरण तक समझ लिया होगा, सभी मॉड्यूलर जोड़ बक्से की एक श्रृंखला में जाते हैं। इन बक्सों में अन्य इनपुट तीर भी हैं जो H पर वापस आते हैं(आई-1). यह दर्शाता है कि इनमें से प्रत्येक मॉड्यूलर जोड़ संचालन में अन्य इनपुट आरंभीकरण चर हैं।
इसलिए, आपको निम्नलिखित मॉड्यूलर जोड़ गणनाओं को पूरा करना होगा:
- अंतिम एचएमान + एच(0)ए= d6320dec
- अंतिम एचबीमान + एच(0)बी= c80c83e4
- अंतिम एचसीमान + एच(0)सी= c17915ee
- अंतिम एचडीमान + एच(0)डी= 5de8587बी
- अंतिम एचऔरमान + एच(0) और= बी8118258
- अंतिम एचएफमान + एच(0)एफ= 759बी2453
- अंतिम एचजीमान + एच(0)जी= fce812d4
- अंतिम एचएचमान + एच(0)ज= 7d3df56a
केवल एक ही काम करना बाकी है, वह है इन परिणामों को संयोजित करना। क्रम में एक के अंत में दूसरा जोड़ने के लिए यह सिर्फ एक फैंसी शब्द है। जब आप ऐसा करेंगे, तो आपके पास बचेगा:
d6320decc80c83e4c17915ee5de8587bb8118258759b2453fce812d47d3df56a
उपरोक्त परिणाम 'हैशिंग जटिल है' के लिए हमारा SHA-2 हैश है।आरेख में, इसे द्वारा दर्शाया गया हैएचमैंतल पर।
बड़ा संदेश इनपुट
यदि प्रारंभिक संदेश डेटा 448 बिट्स से बड़ा होता, तो हम अभी तक काम पूरा नहीं कर पाते। हमें अभी भी शेष प्रत्येक ब्लॉक को संसाधित करने की आवश्यकता होगी जब तक कि संपूर्ण इनपुट डेटा SHA-2 एल्गोरिथ्म के माध्यम से चक्रित न हो जाए।
यदि ऐसा होता, तो हम हैश बनाने के लिए अपने अंतिम परिणामों को संयोजित नहीं करते। इसके बजाय, इन आठों में से प्रत्येकएचमैंमान अगले ब्लॉक के लिए आरंभीकरण चर बन गए होंगे।
कदम ऊपर बताए अनुसार ही आगे बढ़े होंगे, सिवाय इसके कि इस बार हमारे पहले 16 डब्लू मान इनपुट डेटा के दूसरे ब्लॉक के हिस्से होंगे। हमारे द्वारा उपयोग किए गए सूत्र के अनुसार अगले 48 W मान इन 16 मानों से प्राप्त किए गए होंगेसंदेश शेड्यूल: अन्य W मान ढूँढनाअनुभाग।
यदि कुल इनपुट डेटा के केवल दो ब्लॉक हैं जिन्हें संसाधित करने की आवश्यकता है, तो दूसरे ब्लॉक के राउंड 63 के बाद, अंतिम एच मान दूसरे ब्लॉक के प्रारंभिक चर में उसी तरह जोड़े जाते हैं जैसे हमने पहले ब्लॉक के लिए प्रदर्शित किया था। . फिर इन परिणामों को SHA-2 हैश बनाने के लिए संयोजित किया जाएगा।
यदि अधिक ब्लॉक हैं, तो दूसरे ब्लॉक से राउंड 63 आउटपुट तीसरे ब्लॉक के लिए आरंभीकरण चर बन जाएंगे। यह प्रक्रिया तब तक जारी रहेगी जब तक कि इनपुट डेटा के सभी ब्लॉक संसाधित नहीं हो जाते। अंतिम ब्लॉक के आठ आउटपुट को SHA-2 हैश में संयोजित किया जाएगा, उसी तरह जैसे हमने इनपुट डेटा के एक ब्लॉक के लिए हैश की गणना की थी।