29 / 736BIP39

BIP 39

वॉलेट के बैकअप शब्द कैसे बनते हैं

रिकवरी शब्दों का उद्देश्य यह है कि मूल डिवाइस खराब होने पर भी आप वॉलेट तक दोबारा पहुँच सकें। BIP39 बताता है कि ये शब्द कैसे बनते हैं और अनुकूल वॉलेट इनसे अपनी कुंजियों का आधार कैसे दोबारा निकालता है। रिकवरी में इस्तेमाल की गई passphrase और वॉलेट की सेटिंग भी मायने रखती हैं।

BIP39 यादृच्छिक डेटा को रिकवरी शब्दों, जिन्हें Seed Phrase कहा जाता है, में बदलने का मानक है। इन शब्दों और वैकल्पिक passphrase, यानी एक अतिरिक्त गुप्त जानकारी, से वॉलेट सीड निकालता है: कुंजियाँ बनाने का शुरुआती डेटा। इससे बिटकॉइन तक पहुँच का बैकअप रखा जा सकता है; शब्दों में स्वयं कॉइन या भुगतान का इतिहास नहीं रखा होता।

ऐलिस BIP39 इस्तेमाल करने वाला वॉलेट बनाती है और उसके निर्देशों के अनुसार रिकवरी शब्द सुरक्षित रूप से लिख लेती है। कुछ समय बाद उसका फ़ोन खराब हो जाता है। इससे बिटकॉइन नेटवर्क से गायब नहीं हुए; उसने वह डिवाइस खोया है जिसमें भुगतान पर हस्ताक्षर करने वाली कुंजियाँ थीं। किसी भरोसेमंद नए डिवाइस पर वह अनुकूल वॉलेट की रिकवरी सुविधा इस्तेमाल कर सकती है। वही शब्द उसी क्रम में और, यदि इस्तेमाल की थी, वही passphrase देने पर वही सीड बनता है। आगे की प्रक्रियाएँ उससे आवश्यक निजी कुंजियाँ फिर बनाती हैं और वॉलेट Bitcoin नेटवर्क में भुगतान खोज लेता है। यह ऐसा खाता नहीं है जिसका पासवर्ड सहायता टीम रीसेट कर दे। ऐलिस ने passphrase इस्तेमाल की थी तो वह भी चाहिए; पुराने फ़ोन का PIN उसकी जगह नहीं ले सकता। रिकवरी के बाद शेष राशि शून्य दिखने का मतलब हमेशा कॉइन खो जाना नहीं होता: शब्दों और passphrase के साथ सही खाता और रिकवरी सेटिंग भी जाँचनी चाहिए। इसलिए बड़ी राशि रखने से पहले पूरी प्रक्रिया सत्यापित करना उपयोगी है। [1] [5] [13] [14]

कंप्यूटर डेटा की लंबी लिखावट की तुलना में शब्दों को लिखना और जाँचना इंसानों के लिए आसान है। Marek Palatinus, Pavol Rusnak, Aaron Voisine और Sean Bowe ने कंप्यूटर से बनी यादृच्छिकता को ऐसे रूप में बदलने का तरीका सुझाया जिसे हाथ से आसानी से उतारा जा सके। प्रस्ताव पर 10 सितंबर 2013 की तारीख है और विनिर्देश में उसकी स्थिति Deployed है। शब्द अच्छी गुणवत्ता वाले यादृच्छिक इनपुट से बनने चाहिए; उन्हें अपनी पसंदीदा पंक्ति के आधार पर खुद न गढ़ें। ऐसे Brainwallet में गोपनीय जानकारी मनुष्य ने खुद चुनी होती है, इसलिए किसी हमलावर के लिए उसका अनुमान लगाना आसान हो सकता है। Bitcoin नोड BIP39 की जाँच नहीं करते: वे लेनदेन और ब्लॉक सत्यापित करते हैं, यह नहीं कि वॉलेट ने अपनी कुंजियाँ कैसे बनाई थीं। [1]

अच्छा लिखा हुआ बैकअप तभी उपयोगी है जब उससे वॉलेट बहाल किया जा सके। महत्वपूर्ण धन रखने से पहले किसी भरोसेमंद डिवाइस पर निर्माता की सुझाई रिकवरी प्रक्रिया जाँच लें। शब्दों के सटीक क्रम के साथ आवश्यक passphrase, वॉलेट की जानकारी और जरूरत पड़ने पर डेरिवेशन या हस्ताक्षर सेटिंग भी सुरक्षित रखें। सामान्य एकल-हस्ताक्षर वाले वॉलेट में संपूर्ण बैकअप और आवश्यक passphrase रखने वाला व्यक्ति मूल डिवाइस के बिना भी कुंजियाँ निकाल सकता है; Multisig में अन्य आवश्यक कुंजियाँ भी चाहिए और उसके तय नियमों का पालन भी करना होता है। फ़ोटो, क्लाउड कॉपी, प्रिंटर या क्लिपबोर्ड का इतिहास इस गोपनीय जानकारी को दूसरे लोगों और सेवाओं तक पहुँचा सकता है। कागज़ और धातु की अलग-अलग भौतिक सीमाएँ हैं; कोई सामग्री अपने आप चोरी को नहीं रोकती। [9] [13] [14]

अनुकूलता के लिए BIP39 अंग्रेज़ी शब्दसूची की मज़बूत सिफारिश करता है, क्योंकि कई वॉलेट दूसरी सूचियों का समर्थन नहीं करते। अनुवाद किए हुए बैकअप से मूल वॉलेट बहाल नहीं होता, क्योंकि डेरिवेशन में स्वयं वाक्यांश इनपुट बनता है। दूसरे सिस्टमों पर भी ध्यान दें। Electrum अपने मूल बैकअप के लिए अलग संस्करण-निर्धारण प्रक्रिया इस्तेमाल करता है; मिलते-जुलते शब्द होने से वह अपने आप BIP39 नहीं बन जाता। SLIP39 एक अलग प्रारूप है, जिसकी अपनी 1 024 शब्दों की सूची और रिकवरी के लिए आवश्यक हिस्सों की संख्या के नियम हैं। यह केवल BIP39 बैकअप को टुकड़ों में काटना नहीं है। 24 शब्दों को कुछ लिफ़ाफ़ों में बाँट देने से Shamir Secret Sharing नहीं बनता और आपकी सुरक्षा तथा रिकवरी की संभावना उलटे कम हो सकती है। बैकअप का वास्तविक प्रारूप जानना हमेशा जरूरी है। [1] [11] [12]

शुरुआत एंट्रॉपी से होती है, यानी ENT = 128, 160, 192, 224 या 256 बिट लंबा यादृच्छिक डेटा। इसके साथ चेकसम जोड़ा जाता है: मूल डेटा के SHA-256 परिणाम के पहले CS = ENT/32 बिट। पूरे परिणाम को 11-11 बिट के समूहों में बाँटा जाता है और हर समूह एक शब्द तय करता है। इसलिए MS = (ENT+CS)/11 से ठीक 12, 15, 18, 21 या 24 शब्द मिलते हैं। बारह शब्द 128 बिट यादृच्छिकता और 4 जाँच बिट दर्शाते हैं; इसलिए सभी 132 बिट स्वतंत्र रहस्य नहीं हैं। 24 शब्दों में यह 256+8 बिट होता है। बैकअप पर भरोसे की शुरुआत यादृच्छिक संख्या जनरेटर से होती है, इस बात से नहीं कि शब्द कितने अनोखे दिखते हैं। [1]

हर 11-बिट समूह 2 048 शब्दों की क्रमबद्ध सूची से एक शब्द चुनता है। इसलिए पहला शब्द पहली निजी कुंजी नहीं है: सभी शब्द मिलकर मूल डेटा और उसका चेकसम लिखते हैं। अंग्रेज़ी सूची में शब्दों को अलग पहचानने के लिए पहले चार अक्षर पर्याप्त हैं। लेकिन यह हर भाषा पर लागू नियम नहीं है, न ही रिकवरी के समय बैकअप को अपनी मर्ज़ी से छोटा करने का निर्देश। क्रम बदलना, पर्यायवाची रखना या अनुवाद करना इनपुट डेटा को बदल देता है। कभी चेकसम अमान्य हो जाता है, तो कभी कोई दूसरा वैध बैकअप बन जाता है। इसलिए शब्दों की ठीक लिखावट और क्रम दोनों सुरक्षित रखना आवश्यक है। [1] [2]

कंप्यूटर को यह पता होना चाहिए कि उसे वास्तव में कौन-से अक्षर मिले हैं। BIP39 बैकअप वाक्यांश और passphrase दोनों के लिए पहले Unicode NFKD नॉर्मलाइज़ेशन और फिर UTF-8 एन्कोडिंग निर्धारित करता है। NFKD कुछ अलग-अलग लिखावटों को एक रूप में लाता है, उदाहरण के लिए कुछ उच्चारण-चिह्न वाले अक्षरों को उनके घटकों में बाँटता है। इस तरह दो अलग लिखावटें नॉर्मलाइज़ेशन के बाद एक ही परिणाम दे सकती हैं, लेकिन केवल दिखने में समान होना इसकी गारंटी नहीं है। शब्दों का क्रम, खाली स्थान और passphrase के अक्षर फिर भी मायने रखते हैं। नॉर्मलाइज़ेशन का दूसरा तरीका रिकवरी के समय अलग सीड निकाल सकता है। संदर्भ कार्यान्वयन और सार्वजनिक परीक्षण वेक्टर यह जाँचने में मदद करते हैं कि प्रोग्राम निर्धारित प्रक्रिया का पालन करता है या नहीं। [1] [3] [4]

PBKDF2 फ़ंक्शन को दो अलग इनपुट मिलते हैं। password इनपुट में वास्तविक बैकअप शब्द आते हैं। दूसरा इनपुट salt कहलाता है; यह क्रिप्टोग्राफ़िक गणना का एक अतिरिक्त पैरामीटर है। इसमें अक्षरशः “mnemonic” लिखा जाता है और उसके ठीक बाद, बिना किसी विभाजक के, passphrase जोड़ दी जाती है। वास्तविक बैकअप शब्द यहाँ दोबारा नहीं डाले जाते। दोनों इनपुट पर NFKD नॉर्मलाइज़ेशन किया जाता है और उन्हें UTF-8 में एन्कोड किया जाता है। BIP39 में HMAC-SHA512, 2 048 पुनरावृत्तियाँ और 512 बिट यानी 64 बाइट का परिणाम निर्धारित है। Passphrase न होने पर भी salt “mnemonic” ही रहता है; खाली केवल passphrase होती है। यह गणना शब्दों को डिक्रिप्ट करना नहीं है और कोई नई स्वतंत्र यादृच्छिकता भी नहीं बनाती। इसलिए शब्द लीक हो जाने पर केवल पुनरावृत्तियाँ आसानी से अनुमान लगाई जा सकने वाली passphrase की रक्षा नहीं करतीं। [1] [10]

BIP39 का काम 64-बाइट सीड पर पूरा हो जाता है। अगला मानक, BIP32, सामान्यतः स्थिर कुंजी “Bitcoin seed” के साथ HMAC-SHA512 का उपयोग करके इस सीड से मुख्य निजी कुंजी और 32-बाइट chain code निकालता है। chain code अतिरिक्त डेटा है, जिसका उपयोग कुंजी के साथ मिलकर आगे की कुंजियाँ बनाने में होता है। इन्हीं दोनों से कुंजियों का वृक्ष बनता है। BIP44, BIP49, BIP84 और BIP86 जैसे नियम अलग-अलग डेरिवेशन पथ और स्क्रिप्ट के प्रकार निर्धारित करते हैं। इसलिए रिकवरी में सही शब्द और passphrase डालने के बावजूद शून्य शेष राशि दिख सकती है, यदि प्रोग्राम किसी दूसरे खाते, शाखा या पते के प्रकार को खोज रहा हो। gap limit भी महत्वपूर्ण है: यह बताती है कि खोज के दौरान लगातार कितने अप्रयुक्त पते मिलने तक प्रोग्राम खोज जारी रखेगा। मूल वॉलेट का नाम, खाते की जानकारी, डेरिवेशन पथ या Output Descriptor ऐसी जानकारी पूरी कर सकते हैं जो केवल शब्दों में नहीं होती। [5] [6] [7] [8] [9] [14]

Passphrase सीड निकालने के लिए एक अतिरिक्त गुप्त इनपुट है। यह डिवाइस का PIN नहीं है और BIP39 यह नहीं बता सकता कि आपने गलत passphrase दर्ज की है: वह किसी दूसरे मान के लिए भी परिणाम निकाल देगा। ऐसी टाइपिंग की गलती जो नॉर्मलाइज़ किए गए इनपुट को बदल दे, आम तौर पर दूसरे वॉलेट तक पहुँचाती है, जहाँ आपको अपनी राशि नहीं दिखेगी। इसके उलट, अलग लिखावटों से NFKD का परिणाम समान हो तो सीड भी समान निकलेगा। जिसे बैकअप शब्द और इच्छित वॉलेट की पहचान करने वाली जानकारी मिल जाए, वह passphrase के संभावित विकल्प ऑफ़लाइन आज़मा सकता है। यदि आप passphrase इस्तेमाल करते हैं, तो वह पर्याप्त मज़बूत होनी चाहिए, उसे भरोसेमंद तरीके से दर्ज करना चाहिए और उसका अपना विश्वसनीय बैकअप होना चाहिए। अलग रखने का उद्देश्य दोनों के एक साथ चोरी होने का जोखिम घटाना है, उसे ऐसा रहस्य बनाना नहीं जो आपके साथ हमेशा के लिए खो जाए। [1] [13]

चेकसम टाइपिंग की गलतियाँ पकड़ने में मदद करता है, लेकिन यह साबित नहीं करता कि बैकअप किसका है या वह सुरक्षित तरीके से बना था। 12 शब्दों में चेकसम 4 बिट और 24 शब्दों में 8 बिट का होता है। इसलिए संबंधित सूची से समान संभावना के साथ यादृच्छिक रूप से चुने गए शब्दों का क्रम क्रमशः 1/16 और 1/256 संभावना से जाँच में पास हो जाएगा। कई गलतियाँ पकड़ी जाती हैं, सभी नहीं; चेकसम स्वयं उन्हें ठीक भी नहीं करता। हमलावर वैध चेकसम वाला दूसरा बैकअप बना सकता है। विनिर्देश मेल न खाने पर चेतावनी देना आवश्यक बताता है और शब्दों की जाँच को सीड निकालने की प्रक्रिया से अलग रखता है। इसलिए अमान्य चेकसम की समस्या मूल वॉलेट और उसके प्रारूप के अनुसार सुलझाएँ, वास्तविक बैकअप किसी इंटरनेट जाँच उपकरण में डालकर नहीं। [1]

उदाहरण · BIP39

शब्द, चेकसम और सीड

BIP39 128 बिट एंट्रॉपी के साथ 4 बिट चेकसम जोड़ता है। बने हुए 132 बिट को 11-11 बिट के 12 समूहों में बाँटा जाता है, जो सूची से शब्द चुनते हैं। इसके बाद बैकअप शब्द PBKDF2-HMAC-SHA512 के लिए password इनपुट बनते हैं; salt अक्षरशः उपसर्ग “mnemonic” और इस्तेमाल की गई passphrase से बनता है। NFKD नॉर्मलाइज़ेशन और UTF-8 एन्कोडिंग के बाद 2 048 पुनरावृत्तियों से 512-बिट सीड निकाला जाता है। चेकसम यादृच्छिकता नहीं जोड़ता।

पूरी तस्वीर के लिए इस प्रविष्टि के साथ यह भी पढ़ें Seed Phrase, HD Wallet, BIP39 passphrase, Trezor, Bitcoin, BIP39 checksum. इस प्रविष्टि का उल्लेख यहाँ भी है Seed Phrase, HD Wallet, Cold Storage, BIP (Bitcoin Improvement Proposal).

01क्या BIP 39 Bitcoin के सहमति नियमों का हिस्सा है?

नहीं। यह यादृच्छिकता को लिखने और सीड निकालने के लिए वॉलेटों की एक पद्धति है। Bitcoin नोड लेनदेन और ब्लॉक सत्यापित करते हैं, बिना यह जाने कि कुंजियाँ BIP 39 से बनी थीं या नहीं।

02क्या 12 या 24 शब्दों का हर वाक्यांश BIP 39 के अनुकूल होता है?

नहीं। केवल शब्दों की संख्या पर्याप्त नहीं है: शब्दसूची और क्रम, चेकसम, NFKD नॉर्मलाइज़ेशन और सीड निकालने का तरीका मेल खाना चाहिए। मूल वॉलेट बहाल करने के लिए सही passphrase भी चाहिए, यदि वह इस्तेमाल की गई थी, साथ ही संबंधित डेरिवेशन पथ और स्क्रिप्ट के प्रकार।

DOC · 001BIP 39 — Mnemonic code for generating deterministic keysविनिर्देश DOC · 002BIP 39 official wordlistsविनिर्देश DOC · 003Trezor python-mnemonic reference implementationप्राथमिक स्रोत DOC · 004BIP 39 official test vectorsप्राथमिक स्रोत DOC · 005BIP 32 — Hierarchical deterministic walletsविनिर्देश DOC · 006BIP 44 — Multi-account hierarchyविनिर्देश DOC · 007BIP 84 — Native SegWit derivationविनिर्देश DOC · 008BIP 86 — Single-key Taproot derivationविनिर्देश DOC · 009BIP 380 — Output script descriptorsविनिर्देश DOC · 010RFC 8018 — PBKDF2विनिर्देश DOC · 011Electrum documentation — seed version systemदस्तावेज़ DOC · 012SLIP 39 — Shamir's Secret-Sharing for Mnemonic Codesविनिर्देश DOC · 013Trezor — passphrases and hidden walletsदस्तावेज़ DOC · 014Bitcoin Core — Output descriptorsदस्तावेज़
समीक्षा की गई: स्रोत पहले · यह निवेश सलाह नहीं है