हॅश फंक्शन — ETH.BUILD
ETH.BUILD शैक्षणिक टूल वापरून क्रिप्टोग्राफिक हॅश फंक्शन्सचे प्रात्यक्षिक. हॅश फंक्शन्स कसे कार्य करतात आणि ते इथेरियमच्या अकाउंट आणि डेटा इंटिग्रिटी मॉडेलसाठी मूलभूत का आहेत ते जाणून घ्या.
Date published: 14 जानेवारी, 2021
ऑस्टिन ग्रिफिथ यांचे एक ट्युटोरियल जे ETH.BUILD व्हिज्युअल प्रोग्रामिंग टूल वापरून क्रिप्टोग्राफिक हॅश फंक्शन्स कसे कार्य करतात हे दाखवते, ज्यामध्ये डिटरमिनिझम (निश्चितता), फिक्स्ड-लेंथ आउटपुट (निश्चित-लांबीचे आउटपुट), वन-डायरेक्शनल प्रॉपर्टीज (एक-दिशात्मक गुणधर्म) आणि मर्कल ट्री समाविष्ट आहेत.
ही ट्रान्सक्रिप्ट ऑस्टिन ग्रिफिथ यांनी प्रकाशित केलेल्या मूळ व्हिडिओ ट्रान्सक्रिप्टची (opens in a new tab) एक सुलभ प्रत आहे. वाचनीयतेसाठी यात थोडे संपादन केले आहे.
हॅश फंक्शन्सची ओळख (0:00)
ETH.BUILD नावाच्या मालिकेतील हा पहिला व्हिडिओ आहे. हे टूलिंग वापरण्यासाठी तुम्ही eth.build वर जाऊ शकता, परंतु इथेरियमवर तयार करताना गोष्टी कशा कार्य करतात याची कल्पना मिळवण्यासाठी आणि फक्त प्रयोग करण्यासाठी हे आहे.
आपण पाहणार असलेले पहिले मॉड्यूल म्हणजे हॅश फंक्शन. हॅश फंक्शन म्हणजे नक्की काय? बरं, हे एका फिंगरप्रिंटसारखे (बोटाच्या ठशासारखे) आहे. तुमच्याकडे एक इनपुट असते — ते काहीही असू शकते — पण सध्या आपण फक्त "hello world" या मजकुराचा वापर करू. दुसऱ्या बाजूला तुम्हाला एक आउटपुट मिळेल, आणि ते आउटपुट 64-कॅरेक्टरची हेक्साडेसिमल स्ट्रिंग असते. "0x" प्रीफिक्समुळे ते 66 कॅरेक्टर्स दाखवते, पण ती खरोखर 64-कॅरेक्टरची हेक्स स्ट्रिंग असते.
हॅशला रंगांच्या स्वरूपात पाहणे (0:50)
जर तुम्ही हेक्सकडे पाहत असाल, तर ते एका रंगासारखे दिसते, आणि जर आपण त्याला रंग बनवले तर आपण येथे काय पाहत आहोत हे वर्णन करणे सोपे होऊ शकते. त्यामुळे आपण काय करणार आहोत, स्ट्रिंग काहीही असली तरी तिचे पहिले सहा कॅरेक्टर्स घेणार आहोत आणि ते रंग म्हणून प्रदर्शित करणार आहोत. जर आपण त्याकडे पाहिले, तर आपल्याला दिसेल की तो एक छान जांभळा रंग आहे.
माझ्या नावाचा रंग कोणता आहे ते पाहूया — हे पहा, एक छान फॉरेस्ट ग्रीन (गडद हिरवा). आता पुन्हा "hello world" कडे जाऊया — तो पुन्हा जांभळा रंग आहे.
डिटरमिनिझम आणि फिक्स्ड-लेंथ आउटपुट (1:38)
आपण आत्ताच जे शोधले ते म्हणजे हे डिटरमिनिस्टिक (निश्चित) आहे. मुळात, आपण इनपुट म्हणून जे काही देऊ, आपल्याला दुसऱ्या बाजूला नेहमी तीच गोष्ट आउटपुट म्हणून मिळेल.
दुसरा गुणधर्म असा आहे की तुम्ही कोणत्याही आकाराची कोणतीही गोष्ट यात टाकू शकता. मी कीबोर्डवर काहीही टाईप करू शकतो आणि रंग बदलताना पाहू शकतो, परंतु ती स्ट्रिंग 66-कॅरेक्टरच्या लांबीवरच राहते. तुम्ही यात काहीही टाकले तरी — अगदी एखादी फाईल असली तरी — मी माझा मुलगा लिओची ही फाईल टाकू शकतो आणि ती हॅश म्हणून टाकून एक छान केशरी रंग मिळवू शकतो. त्यानंतर मी BIP वर्ड लिस्ट टेक्स्ट डॉक्युमेंट टाकू शकतो आणि तो हा छान फिकट निळा रंग आहे. जर मी लिओला परत आणले, तर ओळखा कोणता रंग असेल? आपल्याला माहित आहे की तो केशरी रंग असेल. तुम्ही जी गोष्ट टाकता तिचा तुम्हाला हा डिटरमिनिस्टिक फिंगरप्रिंट मिळतो.
वन-डायरेक्शनल प्रॉपर्टी (एक-दिशात्मक गुणधर्म) (2:37)
पुढचा सर्वात महत्त्वाचा गुणधर्म म्हणजे हे वन-डायरेक्शनल (एक-दिशात्मक) आहे. जर मी पुन्हा "hello world" टाकले, तर आपल्याला हा "4717" हॅश मिळेल. जर आपण तो हॅश घेतला आणि कोणालातरी पाठवला आणि म्हटले "हा माझ्या गुपिताचा हॅश आहे — जर तू माझे गुपित ओळखू शकलास, तर मी तुला शंभर रुपये देईन," तर ते त्याच्या जवळपासही पोहोचू शकणार नाहीत.
समजा हॅश "4717" ने सुरू होतो आणि ते मॅच शोधण्यासाठी प्रयत्न करू लागतात. तुम्ही फक्त थोडे कॅरेक्टर्स बदलून जवळ पोहोचू शकत नाही — एकतर तुम्हाला ते मिळते किंवा मिळत नाही. तुम्हाला मुळात ब्रूट-फोर्स (brute-force) करून त्याचा अंदाज लावावा लागतो. जर त्यांनी चुकून "hello world" असा अंदाज लावला, तर त्यांना उत्तर मिळेल, पण जर त्यांनी अंदाज लावला नाही, तर त्यांना ते कधीच मिळणार नाही. तुम्ही जवळ पोहोचत आहात की नाही हे सांगण्याचा कोणताही मार्ग नाही.
तुम्हाला गूढलेखन (cryptography) मध्ये असे आढळेल की डेव्हलपर म्हणून हे कधीकधी निराशाजनक असते कारण ते एकतर काम करते किंवा करत नाही — तुम्ही जवळ पोहोचत आहात की नाही याबद्दल तुम्हाला कोणतीही हिंट मिळत नाही. पण ही एक चांगली गोष्ट आहे. हॅश फंक्शनचा आपल्याला हाच गुणधर्म हवा असतो.
हॅश फंक्शनच्या गुणधर्मांचा सारांश (3:43)
तर आपल्याला हे समजले: कोणत्याही आकाराची कोणतीही गोष्ट हॅश फंक्शनमध्ये दिली जाऊ शकते, आणि ते त्या डेटाचा अचूक 64-कॅरेक्टरचा हेक्साडेसिमल फिंगरप्रिंट बाहेर काढेल. हे डिटरमिनिस्टिक आहे. हे वन-डायरेक्शनल आहे — तुम्ही उलट्या दिशेने जाऊ शकत नाही. हॅश बनवणे खरोखर सोपे आहे, परंतु हॅशचे गुपित ओळखणे खरोखर कठीण आहे.
मर्कल ट्री आणि हॅश एकत्र करणे (4:06)
आपण याच्या मदतीने काही खरोखर छान गोष्टी करू शकतो, जसे की मर्कल ट्री. आपल्याकडे आपले तीन इनपुट्स आहेत, आणि आपण ते एकत्र जोडू शकतो. आपण ते सर्व हॅश एकत्र करू शकतो आणि नंतर त्या कॉम्बिनेशनला हॅश करू शकतो.
हा रंग जो इथे आहे — तो जांभळा — या सर्व हॅशच्या हॅशचे प्रतिनिधित्व करतो. जर मी "hello world" बदलून "hello world one" केले, तर तो जांभळा रंग बदलेल. यापैकी कोणत्याही इनपुटमधील कोणताही छोटासा बदल अंतिम हॅश बदलण्यास कारणीभूत ठरेल. तुम्ही सर्व प्रकारचा डेटा सर्व प्रकारच्या वेगवेगळ्या मार्गांनी आणू शकता — अगदी हॅशचे ट्री, मर्कल ट्री देखील असू शकते — किंवा एका रांगेत अनेक ब्लॉक्स असू शकतात, आणि हा अंतिम हॅश या सर्व गोष्टींवर आधारित असेल. जर वाटेत कुठेही कोणतीही छोटीशी गोष्ट बदलली, तर अंतिम हॅश बदलणार आहे.
मुख्य निष्कर्ष (5:53)
मुख्य निष्कर्ष असा आहे की हॅश फंक्शन मुळात एका फिंगरप्रिंटसारखे असते. जर मी काही टाईप केले, तर ते मला डिटरमिनिस्टिकपणे अपेक्षित असलेले आउटपुट देईल. हे आहे हॅश फंक्शन — ETH.BUILD मध्ये आपले स्वागत आहे. चला काही छान गोष्टी बनवूया आणि या प्रवासात खूप काही शिकूया.