मर्कल ट्री

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

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

हैश ट्री की अवधारणा का नाम राल्फ मर्कले के नाम पर रखा गया है, जिन्होंने 1979 में इसका पेटेंट कराया था।

उपयोग
हैश ट्री का उपयोग कंप्यूटर में और उसके बीच संग्रहीत, संभाले और स्थानांतरित किए गए किसी भी प्रकार के डेटा को सत्यापित करने के लिए किया जा सकता है। वे यह सुनिश्चित करने में मदद कर सकते हैं कि पीयर-टू-पीयर | पीयर-टू-पीयर नेटवर्क में अन्य साथियों से प्राप्त डेटा ब्लॉकचेन को अप्रकाशित और अपरिवर्तित प्राप्त होता है, और यहां तक ​​​​कि यह जांचने के लिए भी कि अन्य सहकर्मी झूठ नहीं बोलते हैं और नकली ब्लॉक नहीं भेजते हैं।

हैश ट्री का उपयोग हैश-आधारित क्रिप्टोग्राफी में किया जाता है। हैश ट्री का उपयोग इंटरप्लेनेटरी फ़ाइल सिस्टम (आईपीएफएस), Btrfs  और ZFS फाइल सिस्टम में भी किया जाता है (डेटा क्षरण का मुकाबला करने के लिए ); वह (सॉफ़्टवेयर) प्रोटोकॉल;  अपाचे लहर  प्रोटोकॉल; Git (सॉफ़्टवेयर) और अस्थिर वितरित पुनरीक्षण नियंत्रण प्रणाली; ताहो-एलएएफएस बैकअप सिस्टम; ज़ेरोनेट;  Bitcoin  और Ethereum पीयर-टू-पीयर नेटवर्क; प्रमाणपत्र पारदर्शिता ढांचा; निक्स पैकेज मैनेजर और जीएनयू गुइक्स जैसे वंशज; और कई NoSQL सिस्टम जैसे Apache Cassandra, Riak, और Dynamo (भंडारण प्रणाली)। विश्वसनीय कंप्यूटिंग सिस्टम में हैश ट्री का उपयोग करने के सुझाव दिए गए हैं। सातोशी नाकामोतो द्वारा मर्कल ट्रीज़ का प्रारंभिक बिटकॉइन कार्यान्वयन हैश फ़ंक्शन के संपीड़न चरण को अत्यधिक डिग्री पर लागू करता है, जिसे फास्ट मर्कल ट्रीज़ का उपयोग करके कम किया जाता है।

अवलोकन
हैश ट्री हैश फंकशन का एक बाइनरी वृक्ष  है जिसमें पत्तियां (यानी, लीफ नोड्स, जिन्हें कभी-कभी लीफ भी कहा जाता है) डेटा ब्लॉकचेन में हैश हैं, उदाहरण के लिए, एक फ़ाइल या फ़ाइलों का सेट। पेड़ में आगे की ओर नोड्स उनके संबंधित बच्चों के हैश हैं। उदाहरण के लिए, उपरोक्त चित्र में हैश 0, हैश 0-0 और हैश 0-1 के संयोजन को हैश करने का परिणाम है। अर्थात, हैश 0 = हैश( हैश 0-0 + हैश 0-1 ) जहां + संयोजन को दर्शाता है।

अधिकांश हैश ट्री कार्यान्वयन बाइनरी हैं (प्रत्येक नोड के नीचे दो चाइल्ड नोड्स) लेकिन वे प्रत्येक नोड के तहत कई और चाइल्ड नोड्स का भी उपयोग कर सकते हैं।

आमतौर पर, हैशिंग के लिए SHA-2 जैसे क्रिप्टोग्राफ़िक हैश फ़ंक्शन का उपयोग किया जाता है। यदि हैश ट्री को केवल अनजाने क्षति से बचाने की आवश्यकता है, तो चक्रीय अतिरेक जांच जैसे असुरक्षित अंततः,  का उपयोग किया जा सकता है।

हैश ट्री के शीर्ष में एक शीर्ष हैश (या रूट हैश या मास्टर हैश) होता है। पी2पी नेटवर्क पर किसी फ़ाइल को डाउनलोड करने से पहले, ज्यादातर मामलों में शीर्ष हैश किसी विश्वसनीय स्रोत से प्राप्त किया जाता है, उदाहरण के लिए किसी मित्र या किसी वेब साइट से जिसे डाउनलोड करने के लिए फ़ाइलों की अच्छी अनुशंसाओं के लिए जाना जाता है। जब शीर्ष हैश उपलब्ध होता है, तो हैश ट्री किसी भी गैर-भरोसेमंद स्रोत से प्राप्त किया जा सकता है, जैसे कि पी2पी नेटवर्क में कोई भी सहकर्मी। फिर, प्राप्त हैश ट्री को विश्वसनीय शीर्ष हैश के विरुद्ध जांचा जाता है, और यदि हैश ट्री क्षतिग्रस्त या नकली है, तो किसी अन्य स्रोत से एक और हैश ट्री की कोशिश की जाएगी जब तक कि प्रोग्राम को शीर्ष हैश से मेल खाने वाला एक नहीं मिल जाता। हैश सूची से मुख्य अंतर यह है कि हैश ट्री की एक शाखा को एक समय में डाउनलोड किया जा सकता है और प्रत्येक शाखा की अखंडता की तुरंत जांच की जा सकती है, भले ही पूरा पेड़ अभी तक उपलब्ध नहीं है। उदाहरण के लिए, चित्र में, यदि पेड़ में पहले से ही हैश 0-0 और हैश 1 है तो डेटा ब्लॉक एल2 की अखंडता को तुरंत सत्यापित किया जा सकता है, डेटा ब्लॉक को हैश करके और परिणाम को हैश 0-0 और फिर हैश 1 और अंत में संयोजित करके। शीर्ष हैश के साथ परिणाम की तुलना करना। इसी तरह, डेटा ब्लॉक L3 की अखंडता को सत्यापित किया जा सकता है यदि पेड़ में पहले से ही हैश 1-1 और हैश 0 है। यह एक फायदा हो सकता है क्योंकि यह फ़ाइलों को बहुत छोटे डेटा ब्लॉक में विभाजित करने में कुशल है ताकि केवल छोटे ब्लॉक ही हों यदि वे क्षतिग्रस्त हो जाते हैं तो पुनः डाउनलोड करें। यदि हैश की गई फ़ाइल बड़ी है, तो ऐसी हैश सूची या हैश श्रृंखला काफी बड़ी हो जाती है। लेकिन अगर यह एक पेड़ है, तो एक छोटी शाखा को जल्दी से डाउनलोड किया जा सकता है, शाखा की अखंडता की जांच की जा सकती है, और फिर डेटा ब्लॉक की डाउनलोडिंग शुरू हो सकती है।

दूसरा प्रीइमेज हमला
मर्कल हैश रूट पेड़ की गहराई को इंगित नहीं करता है, एक दूसरे-प्रीइमेज हमले को सक्षम करता है जिसमें एक हमलावर मूल के अलावा एक दस्तावेज़ बनाता है जिसमें समान मर्कल हैश रूट होता है। उपरोक्त उदाहरण के लिए, एक हमलावर दो डेटा ब्लॉक वाला एक नया दस्तावेज़ बना सकता है, जहां पहला हैश 0-0 + हैश 0-1 है, और दूसरा हैश 1-0 + हैश 1-1 है। सर्टिफिकेट ट्रांसपेरेंसी में एक सरल समाधान परिभाषित किया गया है: लीफ नोड हैश की गणना करते समय, एक 0x00 बाइट को हैश डेटा से जोड़ा जाता है, जबकि 0x01 को आंतरिक नोड हैश की गणना करते समय जोड़ा जाता है। हैश ट्री आकार को सीमित करना कुछ लिंक्ड टाइमस्टैम्पिंग#प्रमाणित सुरक्षा की एक शर्त है, और कुछ प्रमाणों को सख्त बनाने में मदद करता है। कुछ कार्यान्वयन हैश से पहले हैश ट्री गहराई उपसर्गों का उपयोग करके पेड़ की गहराई को सीमित करते हैं, इसलिए किसी भी निकाली गई हैश श्रृंखला को केवल तभी वैध माना जाता है जब उपसर्ग प्रत्येक चरण में घटता है और पत्ती तक पहुंचने पर भी सकारात्मक होता है।

टाइगर ट्री हैश
टाइगर ट्री हैश, हैश ट्री का व्यापक रूप से उपयोग किया जाने वाला रूप है। यह एक बाइनरी हैश ट्री (प्रत्येक नोड के नीचे दो चाइल्ड नोड्स) का उपयोग करता है, आमतौर पर इसका डेटा ब्लॉक आकार 1024 बाइट्स होता है और टाइगर (हैश फ़ंक्शन) का उपयोग करता है। टाइगर ट्री हैश का उपयोग ग्नुटेला में किया जाता है, Gnutella2, और डायरेक्ट कनेक्ट (फ़ाइल शेयरिंग) पीयर-टू-पीयर फ़ाइल शेयरिंग प्रोटोकॉल और फ़ेक्स जैसे फ़ाइल साझाकरण अनुप्रयोगों में, BearShare,  limewire , शेयराज़ा, डी.सी.प्लसप्लस|डीसी++ और gtk-gnutella.

यह भी देखें

 * बाइनरी ट्री
 * ब्लॉकचेन
 * वितरित [[हैश तालिका]]
 * हैश तालिका
 * हैश ट्राई
 * लिंक्ड टाइमस्टैम्पिंग
 * मूलांक वृक्ष

अग्रिम पठन

 * – explains both the hash tree structure and the use of it to handle many one-time signatures
 * Tree Hash EXchange format (THEX) – a detailed description of Tiger trees

बाहरी संबंध

 * A C implementation of a dynamically re-sizeable binary SHA-256 hash tree (Merkle tree)
 * Merkle tree implementation in Java
 * Tiger Tree Hash (TTH) source code in C#, by Gil Schmidt
 * Tiger Tree Hash (TTH) implementations in C and Java
 * RHash, an open source command-line tool, which can calculate TTH and magnet links with TTH