Schnorr Signature निजी कुंजी उजागर किए बिना किसी खास संदेश को डिजिटल रूप से मंजूर करने का तरीका है। वॉलेट उस गुप्त कुंजी से हस्ताक्षर बनाता है; दूसरे लोग संबंधित सार्वजनिक कुंजी से उसे जाँच सकते हैं। Bitcoin में हस्ताक्षर सिक्के खर्च करने का अधिकार साबित करने में मदद करता है, लेकिन ट्रांज़ैक्शन की बाकी जाँचों की जगह नहीं लेता। Taproot के साथ इस्तेमाल होने वाला Bitcoin संस्करण BIP340 तय करता है।
ऐलिस बॉब को बिटकॉइन भेजना चाहती है। वॉलेट बिटकॉइन पाने और भेजने वाला ऐप या उपकरण है। वॉलेट लेनदेन बनाता है और चुने हुए हस्ताक्षर मोड के अनुसार आवश्यक डेटा पर निजी कुंजी से हस्ताक्षर करता है। इसके बाद नोड हस्ताक्षर और खर्च की बाकी सभी शर्तें जाँचता है। नोड ऐसा प्रोग्राम है जो लेनदेन और ब्लॉक की जाँच करता है और नेटवर्क के दूसरे सहभागियों से संपर्क रखता है। केवल वैध हस्ताक्षर से ऐलिस की आधिकारिक पहचान, सही प्राप्तकर्ता या पर्याप्त बिना खर्च किए गए धन की मौजूदगी साबित नहीं होती; ये अलग प्रश्न हैं। हस्ताक्षर किया हुआ भुगतान भी अनजाने में हुई गलती हो सकता है। [5] [3] [10] [11]
Pieter Wuille, Jonas Nick और Tim Ruffing का BIP340, Bitcoin के Schnorr हस्ताक्षर को सटीक रूप से परिभाषित करता है। BIP341 इसे Taproot के खर्च संबंधी नियमों में शामिल करता है, जो 2021 में Bitcoin के मुख्य नेटवर्क (Mainnet) के ब्लॉक 709632 पर सक्रिय हुए। ब्लॉक लेनदेन का एक समूह है, जो साझा इतिहास में जोड़ा जाता है। यहाँ दो स्तर हैं: हस्ताक्षर का एल्गोरिदम और खर्च की शर्तें। पुराने आउटपुट और SegWit v0 अब भी ECDSA, यानी पहले से इस्तेमाल हो रहे हस्ताक्षर एल्गोरिदम का उपयोग करते हैं; इस बदलाव ने उनके पुराने हस्ताक्षर पीछे से बदल नहीं दिए। [1] [2] [11]
बाइट डेटा की मात्रा मापने की एक सामान्य इकाई है। Bitcoin संस्करण secp256k1 दीर्घवृत्तीय वक्र का उपयोग करता है। यह कुंजियों और हस्ताक्षरों की गणना के लिए एक गणितीय संरचना है। BIP340 हस्ताक्षर के लिए 64 बाइट का निश्चित आकार तय करता है। सार्वजनिक कुंजी को x निर्देशांक के 32 बाइट के रूप में लिखा जाता है। x-only का अर्थ कोई सुरक्षा जाँच छोड़ देना नहीं है। नियम यह भी स्पष्ट करते हैं कि जाँच करने वाला वक्र के किस बिंदु का उपयोग करेगा। छोटा और सटीक रूप से परिभाषित प्रारूप सॉफ्टवेयर का काम आसान करता है, लेकिन इन दो संख्याओं से पूरे लेनदेन का आकार नहीं पता चलता। [1] [12]
वॉलेट किसी अस्पष्ट “मैं सहमत हूँ” पर हस्ताक्षर नहीं करता। sighash मोड तय करता है कि ट्रांज़ैक्शन के किन डेटा से हस्ताक्षर वाला संदेश बनेगा। SIGHASH_DEFAULT, SIGHASH_ALL की तरह सभी इनपुट और आउटपुट की जानकारी सुरक्षित करता है: पहले मिले कौन से सिक्के खर्च हो रहे हैं और खर्च की किन शर्तों के साथ नई रकम बन रही है। शामिल डेटा बदलने पर हस्ताक्षर अमान्य हो जाता है। इसका अर्थ हर बाइट, जैसे दूसरे हस्ताक्षरों पर हस्ताक्षर करना नहीं है। दूसरे अनुमत मोड का दायरा अलग होता है। हस्ताक्षर 64 बाइट का है; डिफॉल्ट से अलग मोड में प्रकार बताने वाला एक बाइट जुड़ता है और यह भाग 65 बाइट का हो जाता है। यह पूरे इनपुट या ट्रांज़ैक्शन का आकार नहीं है। [2]
हस्ताक्षर करते समय एक गुप्त nonce मान बनता है। एक ही कुंजी के साथ अलग संदेशों पर इसका दोबारा उपयोग निजी कुंजी उजागर कर सकता है। इसलिए BIP340 nonce निकालने की विधि सटीक रूप से बताता है और कार्यान्वयन की अतिरिक्त सुरक्षा के लिए सहायक यादृच्छिक डेटा सुझाता है। उपयोगकर्ता nonce खुद नहीं बनाता और उसे बैकअप में नहीं लिखता। इसका प्रबंधन परखी हुई हस्ताक्षर लाइब्रेरी करती है; यहाँ मनमाना प्रयोग सही क्रिप्टोग्राफी को भी निष्प्रभावी कर सकता है। [1] [9]
Schnorr हस्ताक्षर की गणितीय संरचना ऐसे प्रोटोकॉल संभव बनाती है जिनमें कई लोग एक संदेश पर सहमत होकर संयुक्त हस्ताक्षर बनाते हैं। BIP327 के अनुसार MuSig2 इसका एक उदाहरण है। इस प्रोटोकॉल के मूल रूप में चुने हुए समूह के हर सदस्य का योगदान ज़रूरी है। इसमें समन्वय, कुंजियों का सही प्रबंधन और nonce के लिए अपनी सुरक्षित प्रक्रिया चाहिए। पहले से बने मनमाने हस्ताक्षरों को जोड़ देना पर्याप्त नहीं है। किसी वॉलेट में Schnorr Signature का समर्थन होना अपने आप यह नहीं बताता कि वह इस तरह का सहयोग भी कर सकता है। [8]
Taproot खर्च के अलग रास्ते देता है। key path में नेटवर्क आउटपुट में दर्ज सार्वजनिक कुंजी के लिए हस्ताक्षर जाँचता है। वह कुंजी एक व्यक्ति या सहयोग करने वाले समूह का प्रतिनिधित्व कर सकती है। script path में चुनी स्क्रिप्ट दिखाई जाती है, यानी वह प्रोग्राम जिसकी शर्तें भुगतान को पूरी करनी हैं। Tapscript, Taproot में इस्तेमाल होने वाली इस स्क्रिप्ट भाषा का रूप है। उसका OP_CHECKSIGADD निर्देश एक हस्ताक्षर जाँचता है और सही होने पर चलती गिनती में एक जोड़ता है। इसे दोहराकर कई अलग हस्ताक्षर जाँचे जा सकते हैं और आवश्यक संख्या पूरी होने की पुष्टि की जा सकती है। यह स्क्रिप्ट आधारित Multisig एक संयुक्त हस्ताक्षर से अलग तरीका है। किसी वॉलेट के लिए जानें कि किसका सहयोग चाहिए, क्या सार्वजनिक होगा और कुंजी खोने पर कौन सा बहाली का रास्ता बचेगा। [7] [2]
बिना किसी केंद्रीय निर्णायक के नेटवर्क में ऐसा नहीं होना चाहिए कि बाइट को अलग ढंग से पढ़ने के कारण एक नोड हस्ताक्षर स्वीकार करे और दूसरा अस्वीकार। इसलिए BIP340 वैध कुंजियों, हस्ताक्षरों और जाँच की प्रक्रिया को विस्तार से तय करता है। यह batch verification भी संभव बनाता है, यानी गणना बचाने के लिए कई हस्ताक्षर एक साथ जाँचना। इससे ब्लॉकचेन पर उनके रिकॉर्ड दोबारा नहीं लिखे जाते और अलग लेनदेन इनपुट के हस्ताक्षर एक नहीं हो जाते। [1]
संयुक्त key-path हस्ताक्षर एक कुंजी के हस्ताक्षर जैसा दिख सकता है। इसलिए केवल हस्ताक्षर से यह जरूरी नहीं पता चले कि कितने लोगों ने सहमति दी। फिर भी रकम, इनपुट और आउटपुट के संबंध तथा लेनदेन का समय आम तौर पर देखा जा सकता है। Schnorr Signature भुगतान को एन्क्रिप्ट नहीं करता। गोपनीयता Taproot के इस्तेमाल, वॉलेट के व्यवहार और भुगतान की परिस्थितियों पर भी निर्भर करती है। [2] [3]
सामान्य उपयोगकर्ता के लिए ऐसा वॉलेट जरूरी है जो प्राप्तकर्ता, रकम और शुल्क सही दिखाए तथा भरोसेमंद बहाली दे। डेवलपर को इसके अलावा BIP340 का सटीक समर्थन, परीक्षण वेक्टर, nonce का प्रबंधन और विफलता के समय व्यवहार जाँचना चाहिए। एल्गोरिदम का नाम पूरे उत्पाद की गारंटी नहीं है। libsecp256k1 जैसी अच्छी लाइब्रेरी क्रिप्टोग्राफी की गणना करती है, लेकिन वह इंसान की जगह यह तय नहीं कर सकती कि स्क्रीन पर दिखा भुगतान सच में मंजूर करना चाहिए या नहीं। [4] [9] [6]
पूरी तस्वीर के लिए इस प्रविष्टि के साथ यह भी पढ़ें Taproot, MuSig2, Multisig, Bitcoin Script. इस प्रविष्टि का उल्लेख यहाँ भी है SHA-256, Opcode, MuSig2, Nostr.