मुख्य सामग्री पर जाएं

हैश फ़ंक्शन — ETH.BUILD

ETH.BUILD शैक्षिक टूल का उपयोग करके क्रिप्टोग्राफ़िक हैश फ़ंक्शन का प्रदर्शन। जानें कि हैश फ़ंक्शन कैसे काम करते हैं और वे इथेरियम के अकाउंट और डेटा अखंडता मॉडल के लिए मौलिक क्यों हैं।

Date published: 14 जनवरी 2021

ऑस्टिन ग्रिफिथ द्वारा एक ट्यूटोरियल जो प्रदर्शित करता है कि ETH.BUILD विज़ुअल प्रोग्रामिंग टूल का उपयोग करके क्रिप्टोग्राफ़िक हैश फ़ंक्शन कैसे काम करते हैं, जिसमें नियतत्ववाद (determinism), निश्चित-लंबाई आउटपुट, एक-दिशात्मक गुण और मर्कल ट्री शामिल हैं।

यह ट्रांसक्रिप्ट ऑस्टिन ग्रिफिथ द्वारा प्रकाशित मूल वीडियो ट्रांसक्रिप्ट (opens in a new tab) की एक सुलभ प्रति है। इसे पठनीयता के लिए थोड़ा संपादित किया गया है।

हैश फ़ंक्शन का परिचय (0:00)

यह ETH.BUILD नामक श्रृंखला का पहला वीडियो है। आप इस टूलिंग का उपयोग करने के लिए eth.build पर जा सकते हैं, लेकिन यह केवल अभ्यास करने और यह समझने के लिए है कि इथेरियम पर निर्माण करते समय चीजें कैसे काम करती हैं।

पहला मॉड्यूल जिसे हम देखने जा रहे हैं वह हैश फ़ंक्शन है। आखिर यह हैश फ़ंक्शन क्या है? खैर, यह एक फिंगरप्रिंट की तरह है। आपके पास एक इनपुट है — यह कुछ भी हो सकता है — लेकिन अभी के लिए हम केवल "hello world" टेक्स्ट का उपयोग करेंगे। दूसरी तरफ आपको एक आउटपुट मिलेगा, और वह आउटपुट 64-कैरेक्टर की हेक्साडेसिमल स्ट्रिंग है। यह "0x" उपसर्ग के कारण 66 कैरेक्टर दिखाता है, लेकिन यह वास्तव में 64-कैरेक्टर की हेक्स स्ट्रिंग है।

हैश को रंगों के रूप में देखना (0:50)

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

आइए देखें कि मेरे नाम का रंग क्या है — यह लीजिए, एक सुंदर फॉरेस्ट ग्रीन (गहरा हरा)। अब वापस "hello world" पर चलते हैं — यह फिर से वही बैंगनी रंग है।

नियतत्ववाद (Determinism) और निश्चित-लंबाई आउटपुट (1:38)

हमने अभी जो खोजा वह यह है कि यह नियतात्मक (deterministic) है। मूल रूप से, हम अपने इनपुट के रूप में जो कुछ भी डालते हैं, हमें हमेशा दूसरी तरफ वही चीज़ मिलने वाली है।

दूसरी विशेषता यह है कि आप किसी भी मनमाने आकार की कोई भी चीज़ डाल सकते हैं। मैं कीबोर्ड पर कुछ भी टाइप कर सकता हूं और रंग बदलते हुए देख सकता हूं, लेकिन वह स्ट्रिंग उसी 66-कैरेक्टर की लंबाई पर रहती है। कोई फर्क नहीं पड़ता कि आप इसमें क्या डालते हैं — यहां तक कि एक फ़ाइल भी — मैं अपने बेटे लियो की इस फ़ाइल को डाल सकता हूं, और इसे हैश के रूप में डालकर एक सुंदर नारंगी रंग प्राप्त कर सकता हूं। फिर मैं एक BIP वर्ड लिस्ट टेक्स्ट दस्तावेज़ डाल सकता हूं और यह एक सुंदर हल्का नीला रंग है। अगर मैं लियो को वापस लाऊं, तो अनुमान लगाएं कि यह कौन सा रंग होने वाला है? हम जानते हैं कि यह वही नारंगी रंग होगा। आप जो चीज़ डालते हैं, उसका आपको यह नियतात्मक फिंगरप्रिंट मिलता है।

एक-दिशात्मक गुण (2:37)

अगली सबसे महत्वपूर्ण विशेषता यह है कि यह एक-दिशात्मक है। अगर मैं फिर से "hello world" डालता हूं, तो हमें यह "4717" हैश मिलेगा। यदि हम उस हैश को लेते हैं और किसी को भेजते हैं और कहते हैं "यह मेरे रहस्य का हैश है — यदि आप मेरे रहस्य का अनुमान लगा सकते हैं, तो मैं आपको सौ डॉलर दूंगा," तो वे इसके करीब भी नहीं पहुंच पाएंगे।

मान लीजिए कि हैश "4717" से शुरू होता है और वे मैच खोजने की कोशिश करने लगते हैं। आप केवल छोटे कैरेक्टर बदलकर करीब नहीं पहुंच सकते — या तो आपको यह मिल जाता है या नहीं मिलता। आपको मूल रूप से ब्रूट-फोर्स (brute-force) के जरिए इसका अनुमान लगाना होगा। यदि वे संयोग से "hello world" का अनुमान लगा लेते हैं, तो उन्हें उत्तर मिल जाएगा, लेकिन यदि वे इसका अनुमान नहीं लगाते हैं, तो उन्हें यह कभी नहीं मिलने वाला है। यह बताने का कोई तरीका नहीं है कि आप करीब पहुंच रहे हैं या नहीं।

आप पाएंगे कि क्रिप्टोग्राफी के साथ एक डेवलपर के रूप में यह कभी-कभी निराशाजनक होता है क्योंकि यह या तो काम करता है या नहीं करता — आपको इस बारे में कोई संकेत नहीं मिलता कि आप करीब पहुंच रहे हैं या नहीं। लेकिन यह एक अच्छी बात है। यही वह गुण है जो हम एक हैश फ़ंक्शन से चाहते हैं।

हैश फ़ंक्शन के गुणों का सारांश (3:43)

तो हमने समझा: किसी भी आकार की कोई भी चीज़ हैश फ़ंक्शन में डाली जा सकती है, और यह उस डेटा का सटीक 64-कैरेक्टर का हेक्साडेसिमल फिंगरप्रिंट बाहर निकालेगा। यह नियतात्मक है। यह एक-दिशात्मक है — आप वापस दूसरे तरीके से नहीं जा सकते। हैश बनाना वास्तव में आसान है, लेकिन हैश के रहस्य का अनुमान लगाना वास्तव में कठिन है।

मर्कल ट्री और हैश को मिलाना (4:06)

हम इसके साथ कुछ वास्तव में बेहतरीन चीजें कर सकते हैं, जैसे कि मर्कल ट्री। हमारे पास हमारे तीन इनपुट हैं, और हम उन्हें एक साथ जोड़ सकते हैं। हम उन सभी हैश को मिला सकते हैं और फिर उस संयोजन को हैश कर सकते हैं।

यह रंग जो यहां है — वह बैंगनी — इन सभी हैश के हैश का प्रतिनिधित्व करता है। अगर मैं "hello world" को "hello world one" में बदल दूं, तो वह बैंगनी रंग बदल जाएगा। इनमें से किसी भी इनपुट में कोई भी छोटा सा बदलाव अंतिम हैश को बदल देगा। आप सभी प्रकार के डेटा को सभी प्रकार के विभिन्न तरीकों से ला सकते हैं — यहां तक कि हैश का एक ट्री, एक मर्कल ट्री भी बना सकते हैं — या एक पंक्ति में कई ब्लॉक रख सकते हैं, और यह अंतिम हैश इन सभी चीजों पर आधारित होने वाला है। यदि रास्ते में कहीं भी कोई छोटी सी चीज़ बदलती है, तो अंतिम हैश बदल जाएगा।

मुख्य निष्कर्ष (5:53)

मुख्य निष्कर्ष यह है कि एक हैश फ़ंक्शन मूल रूप से एक फिंगरप्रिंट की तरह है। अगर मैं कुछ टाइप करता हूं, तो यह मुझे नियतात्मक रूप से वह आउटपुट देगा जिसकी मुझे उम्मीद है। यह एक हैश फ़ंक्शन है — ETH.BUILD में आपका स्वागत है। आइए कुछ शानदार चीजें बनाएं और इस सफर में बहुत कुछ सीखें।

क्या यह पेज उपयोगी था?