paint-brush
मर्केल ट्री का परिचय: यह क्या है और यह कैसे काम करता है?द्वारा@0xkishan
1,403 रीडिंग
1,403 रीडिंग

मर्केल ट्री का परिचय: यह क्या है और यह कैसे काम करता है?

द्वारा Kishan Kumar5m2023/07/03
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

मर्कल ट्री हैश मानों का एक बाइनरी ट्री है, जहां प्रत्येक लीफ नोड डेटा के एक टुकड़े का प्रतिनिधित्व करता है। इसका उपयोग बड़ी मात्रा में डेटा की अखंडता को कुशलतापूर्वक सत्यापित करने के लिए किया जाता है। हैश फ़ंक्शन एक फिंगरप्रिंट मशीन की तरह है। यह कोई भी इनपुट लेता है और एक अद्वितीय आउटपुट उत्पन्न करता है, जिसे हैश कहा जाता है, जो इनपुट से बहुत छोटा होता है।
featured image - मर्केल ट्री का परिचय: यह क्या है और यह कैसे काम करता है?
Kishan Kumar HackerNoon profile picture
0-item
1-item
2-item

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


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


उदाहरण के लिए, यदि आपके पास " किशन.जेपीजी " नामक फ़ाइल है जिसका आकार 1 एमबी है, तो आप केवल 64 अक्षर लंबा हैश प्राप्त करने के लिए हैश फ़ंक्शन का उपयोग कर सकते हैं, जैसे 0A6DF48A27EF7DB48B213DF3DBA84FAD1BB4FD9B47568DA1F570C067D9A4867F


यदि आप फ़ाइल में एक पिक्सेल भी बदलते हैं, तो हैश पूरी तरह से अलग होगा, जैसे C69E60E932F3D0C6C2363B68301E202551C09123A71F639E6AB3BC8F847BE4AF


तो आप यह सत्यापित करने के लिए हैश का उपयोग कर सकते हैं कि फ़ाइल पहले जैसी ही है।


लेकिन अगर आपके पास बहुत सारी फ़ाइलें हों तो क्या होगा? प्रत्येक फ़ाइल के लिए हैश की अलग से गणना करना और संग्रहीत करना कठिन होगा। यहीं पर मर्कल के पेड़ काम आते हैं।


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


मर्कल रूट पेड़ की सभी फाइलों के फिंगरप्रिंट की तरह है। यदि कोई फ़ाइल बदलती है, तो उसका हैश बदल जाएगा, और उसके ऊपर के सभी हैश भी बदल जाएंगे जब तक कि मर्कल रूट नहीं बदल जाता। तो आप यह सत्यापित करने के लिए मर्कल रूट का उपयोग कर सकते हैं कि सभी फ़ाइलें पहले जैसी ही हैं।


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

किशन कुमार द्वारा मर्कल ट्री चित्रण

उदाहरण के लिए, मान लीजिए कि आप सत्यापित करना चाहते हैं कि फ़ाइल "cat.jpg" सही है या नहीं। आपको केवल इसका हैश HA डाउनलोड करना होगा जो 0a6df4 है, इसके भाई-बहन का हैश HB (ea12e7) , उनके माता-पिता का भाई-बहन का हैश H CD (b582ae) और मर्कल रूट H ABCD (7bd24f)


फिर आप HA और HB मिलाकर H AB गणना कर सकते हैं और H AB और H CD को मिलाकर H ABCD गणना कर सकते हैं। यदि एच एबीसीडी मर्कल रूट से मेल खाता है, तो आप निश्चिंत हो सकते हैं कि।" cat.jpg " सही है।


आप यह सत्यापित करने के लिए उसी सादृश्य का उपयोग कर सकते हैं कि ब्लॉक में मौजूद लेनदेन cat.jpg या डॉग.txt के बजाय मर्कल रूट को सत्यापित करके नियंत्रित किया गया है या नहीं। यह लीफ नोड्स पर लेनदेन का एक समूह होगा।


कृपया ध्यान दें: आरेख को साफ़ दिखाने के लिए मैंने उपरोक्त उदाहरण में हैश मान को 6 वर्णों तक छोटा कर दिया है।

यदि मेरे पास केवल तीन पत्ती वाले नोड हों तो क्या होगा? मैं मर्कल ट्री कैसे बनाऊंगा?

इस परिदृश्य को एक नोड को डुप्लिकेट करके जल्दी से संबोधित किया जा सकता है, इस प्रकार नोड्स की कुल संख्या चार हो जाती है।


उदाहरण के लिए, मान लीजिए कि आपने लेनदेन किया है। TA , TB और TC । आप उनके हैश की गणना कर सकते हैं. HA , HB , और HCफिर आप H C' प्राप्त करने के लिए HC की नकल कर सकते हैं । बाद में; आप H AB , H CC' , और H ABCC' प्राप्त करने के लिए हैश को जोड़ और संयोजित कर सकते हैं। मर्कल रूट H ABCC' है।


संक्षेप में, मर्कल पेड़ ब्लॉकचेन और अन्य वितरित प्रणालियों को लाभ पहुंचाते हैं, जहां कई कंप्यूटरों को बड़ी मात्रा में डेटा साझा करना और सत्यापित करना होता है। मर्कल पेड़ों का उपयोग करके, वे बैंडविड्थ, भंडारण और गणना समय बचा सकते हैं।


यह दिखाने के लिए यहां एक त्वरित जावा उदाहरण दिया गया है कि आप अपना खुद का मर्कल ट्री कैसे बना सकते हैं:

 import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; class MerkleTree{ static class Node { String content; public Node(String content) { this.content = content; } public String getHash() throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance("SHA-256"); byte[] hash = md.digest(content.getBytes(StandardCharsets.UTF_8)); StringBuilder buffer = new StringBuilder(); for (byte b : hash) { buffer.append(String.format("%02x", b)); } return buffer.toString(); } } public static void main(String[] args) throws NoSuchAlgorithmException{ Node cat = new Node("I am a cat, this is a cat file called cat.jpg"); Node dog = new Node("I am a dog, this is a dog file called dog.txt"); // we have two leaf nodes, in order to create a merkle root, // we simple need to get their individual hashes // and then combine those hashes and hash them again String HA = cat.getHash(); String HB = dog.getHash(); Node merkleRoot = new Node(HA + HB); String HAB = merkleRoot.getHash(); System.out.println("Merkle Root: " + merkleRoot.getHash()); // let's say we altered the cat file cat = new Node("I am a cat, this is a cat file called dog.jpg"); // notice we have changed the cat.jpg to dog.jpg String HA_MODIFIED = cat.getHash(); Node modifiedMerkleRoot = new Node(HA_MODIFIED + HB); String HAB_MODIFIED = modifiedMerkleRoot.getHash(); System.out.println("Merkle Root: " + HAB_MODIFIED); } }


आउटपुट:

 Merkle Root: d1da3503d679f032134b4330768d31e67813fcfe2824fceed93f8185a405bdf9 Merkle Root: 1a898c7fee0e46647e55d5f9874f090e5ed76726acf39308527a0bba22a34b3e

मेरे लेख को पढ़ने के लिए समय निकालने के लिए मैं आपको धन्यवाद देता हूं। हैकरनून पर मुझे फॉलो करके मेरा समर्थन करें ताकि जब भी मैं कोई लेख प्रकाशित करूं तो आपको सूचित किया जा सके।


बहुत-बहुत धन्यवाद।


विकेंद्रीकृत सिस्टम, तकनीक और एआई रुझानों पर व्यावहारिक लेखों में गोता लगाएँ: https://www.0xkisan.com . अपना समर्थन दिखाने के लिए अवश्य जाएँ।


यहाँ भी प्रकाशित किया गया।