वॉलेट इंटीग्रेशन
Unlukey क्लाइंट SDK को अपने वॉलेट में इंटीग्रेट करें, ताकि उपयोगकर्ताओं को तब चेतावनी दी जा सके जब उनका रिकवरी फ़्रेज़ किसी ज्ञात कमज़ोर सीड-जनरेशन भेद्यता से बना हो।
यह SDK coinspect/unlukey
रिपॉज़िटरी में प्रकाशित है।
जांच कैसे काम करती है
- वॉलेट रिकवरी फ़्रेज़ से BIP-39 एन्ट्रॉपी प्राप्त करता है।
- क्लाइंट SDK उस एन्ट्रॉपी को SHA-256 से हैश करता है और परिणामी हैश का एक छोटा प्रीफ़िक्स लेता है।
- यह स्टैटिक होस्टिंग से केवल उस प्रीफ़िक्स से मेल खाने वाला डेटासेट बकेट डाउनलोड करता है।
- यह उस बकेट की प्रविष्टियों के साथ शेष हैश बाइट्स की स्थानीय रूप से तुलना करता है।
प्रीफ़िक्स कई संभावित कुंजियों को एक ही बकेट में समूहित करता है (k-अज्ञातता)। स्टैटिक होस्टिंग प्रदाता को केवल यह पता चलता है कि कौन-सा बकेट माँगा गया था, न कि जाँची जा रही पूरी कुंजी या मिलान हुआ या नहीं।
डेटासेट एन्ट्रॉपी की लंबाई के अनुसार अलग किए गए हैं: एक 128-बिट (12-शब्द) एन्ट्रॉपी के लिए और एक 256-बिट (24-शब्द) एन्ट्रॉपी के लिए। क्लाइंट स्वतः सही डेटासेट चुन लेता है।
इंस्टॉल करें
npm install @unlukey/client
(जब तक पैकेज प्रकाशित नहीं होता, इसे सीधे रिपॉज़िटरी से इंस्टॉल करें:
npm install github:coinspect/unlukey#path:client।)
बुनियादी उपयोग
import { check } from '@unlukey/client'
import { mnemonicToEntropy } from '@scure/bip39'
import { wordlist } from '@scure/bip39/wordlists/english'
const entropy = mnemonicToEntropy(secretRecoveryPhrase, wordlist)
const { vulnerable } = await check(entropy)
if (vulnerable) {
// उपयोगकर्ता को चेतावनी दें: यह रिकवरी फ़्रेज़ किसी ज्ञात कमज़ोर सीड से
// मेल खाता है और फंड को नए वॉलेट में स्थानांतरित किया जाना चाहिए।
}
लुकअप लॉजिक क्लाइंट-साइड पर चलता है। रिकवरी फ़्रेज़ और एन्ट्रॉपी कभी भी
डिवाइस से बाहर नहीं जाते; केवल एन्ट्रॉपी हैश का एक प्रीफ़िक्स डेटासेट होस्ट
को भेजा जाता है। entropy एक Uint8Array है और इसकी लंबाई होनी चाहिए:
- 16 बाइट्स, 12-शब्द वाले mnemonics के लिए, या
- 32 बाइट्स, 24-शब्द वाले mnemonics के लिए।
परिणाम को समझना
check() { vulnerable, key, prefix, bucketPath, reason? } लौटाता है:
-
vulnerable: true— एन्ट्रॉपी किसी ज्ञात कमज़ोर सीड उम्मीदवार से मेल खाती है। उपयोगकर्ता से कहें कि वह अपना फंड सुरक्षित रैंडमनेस से बने एक नए वॉलेट में स्थानांतरित करे। -
vulnerable: false— कोई मिलान नहीं मिला। इससे यह साबित नहीं होता कि रिकवरी फ़्रेज़ सुरक्षित है; इसका मतलब केवल इतना है कि यह Unlukey के मौजूदा डेटासेट में किसी उम्मीदवार से मेल नहीं खाता। कवरेज लगातार बढ़ रही है; देखें रोडमैप।
reason इंटीग्रेशन को डीबग करने के लिए निदान जानकारी देता है। यह
vulnerable के अर्थ को नहीं बदलता।
जांच कब चलाएं
जब कोई उपयोगकर्ता किसी मौजूदा रिकवरी फ़्रेज़ को इम्पोर्ट करे, और वॉलेट ने BIP-39 एन्ट्रॉपी प्राप्त कर ली हो, तभी यह जांच चलाएं।
कस्टम होस्टिंग
डिफ़ॉल्ट रूप से, क्लाइंट Unlukey के सार्वजनिक डेटासेट होस्ट से बकेट लाता
है। किसी दूसरे डेटासेट होस्ट, जैसे अपने खुद के CDN का उपयोग करने के लिए,
check() को एक अलग बेस URL दें:
const result = await check(
entropy,
'https://your-cdn.example.com/unlukey-datasets'
)
डेटासेट बकेट कैसे फ़ेच किए जाते हैं, इस पर पूरा नियंत्रण पाने के लिए,
checkWith(entropy, readBucket) का उपयोग करें और अपना खुद का
readBucket(bits, prefixHex) इम्प्लीमेंटेशन दें। SDK रिपॉज़िटरी में
client/index.js
देखें।
स्थानीय रूप से टेस्ट करना
SDK रिपॉज़िटरी की CLI, UI बनाए बिना इंटीग्रेशन टेस्ट करने के लिए उपयोगी है:
node client/cli.js --remote 72039ecb02a3c880d4249e4b206933945a4f3a76ebaab26fa14e47a24e0f907e
# VULNERABLE
स्थानीय सैंपल डेटासेट बनाने और उसके विरुद्ध क्लाइंट टेस्ट करने के लिए SDK रिपॉज़िटरी का README देखें।