मर्कल ट्री

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

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

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

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

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

सातोशी नाकामोतो द्वारा मर्कल ट्रीज़ का प्रारंभिक बिटकॉइन कार्यान्वयन हैश फ़ंक्शन के संपीड़न चरण को अत्यधिक डिग्री तक लागू करता है, जिसे तेज़ मर्कल ट्रीज़ का उपयोग करके कम किया जाता है।

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

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

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

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

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

दूसरा प्रीइमेज अटैक
मर्कल हैश रूट ट्री की गहराई को इंगित नहीं करता है, जिससे दूसरे-प्रीइमेज अटैक्स को सक्षम किया जा सकता है जिसमें अटैकर रुट के अलावा डॉक्यूमेंट बनाता है जिसमें समान मर्कल हैश रूट होता है। उपरोक्त उदाहरण के लिए, अटैकर दो डेटा ब्लॉक वाला एक नया डॉक्यूमेंट बना सकता है, जहां पहला हैश 0-0 + हैश 0-1 है, और दूसरा हैश 1-0 + हैश 1-1 है।

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

टाइगर ट्री हैश
टाइगर ट्री हैश, हैश ट्री का व्यापक रूप से उपयोग किया जाने वाला रूप है। यह एक बाइनरी हैश ट्री (प्रत्येक नोड के नीचे दो चाइल्ड नोड्स) का उपयोग करता है, सामान्यतः डेटा ब्लॉक का आकार 1024 बाइट्स होता है और टाइगर हैश का उपयोग करता है।

टाइगर ट्री हैश का उपयोग ग्नुटेला, ग्नुटेला2, और डायरेक्ट कनेक्ट पी2पी फ़ाइल शेयरिंग प्रोटोकॉल और फ़ेक्स, बियरशेयर, लाइमवायर, शेयराज़ा, डीसी++ और जीटीके-ग्नुटेला जैसे फ़ाइल शेयरिंग अनुप्रयोगों में किया जाता है।

यह भी देखें

 * बाइनरी ट्री
 * ब्लॉकचेन
 * डिस्ट्रिब्यूटेड हैश टेबल
 * हैश टेबल
 * हैश ट्राई
 * लिंक्ड टाइमस्टैम्पिंग
 * रेडिक्स ट्री

अग्रिम पठन

 * – 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