मुख्य सामग्री पर जाएँ
Change page

वेब3 सिक्रेट स्टोरेज की परिभाषा

पेज का अंतिम अपडेट: 21 अक्टूबर 2025

एथेरियम पर अपने ऐप को काम करने के लिए, आप web3.js लाइब्रेरी द्वारा प्रदान किए गए वेब3 ऑब्जेक्ट का उपयोग कर सकते हैं। हुड के तहत यह आरपीसी कॉल के माध्यम से एक स्थानीय नोड से संचार करता है। web3 (opens in a new tab) किसी भी एथेरियम नोड के साथ काम करता है जो एक RPC लेयर को उजागर करता है।

web3 में eth ऑब्जेक्ट शामिल है - web3.eth।

1var fs = require("fs")
2var recognizer = require("ethereum-keyfile-recognizer")
3
4fs.readFile("keyfile.json", (err, data) => {
5 var json = JSON.parse(data)
6 var result = recognizer(json)
7})
8
9/** परिणाम
10 * [ 'web3', 3 ] web3 (v3) कीफ़ाइल
11 * [ 'ethersale', undefined ] Ethersale कीफ़ाइल
12 * null अमान्य कीफ़ाइल
13 */
सभी दिखाएँ

यह वेब3 सीक्रेट स्टोरेज डेफ़िनिशन के संस्करण 3 का दस्तावेज़ है।

परिभाषा

फ़ाइल की वास्तविक एन्कोडिंग और डिकोडिंग संस्करण 1 से काफी हद तक अपरिवर्तित रहती है, सिवाय इसके कि क्रिप्टो एल्गोरिथ्म अब AES-128-CBC (AES-128-CTR अब न्यूनतम आवश्यकता है) के लिए तय नहीं है। अधिकांश अर्थ/एल्गोरिदम संस्करण 1 के समान हैं, mac को छोड़कर, जिसे पूर्ण ciphertext के साथ व्युत्पन्न कुंजी के दूसरे-सबसे-बाएँ 16 बाइट्स के संयोजन के SHA3 (keccak-256) के रूप में दिया जाता है।

गुप्त कुंजी फ़ाइलें सीधे ~/.web3/keystore (यूनिक्स-जैसे सिस्टम के लिए) और ~/AppData/Web3/keystore (विंडोज के लिए) में संग्रहीत की जाती हैं। उन्हें कुछ भी नाम दिया जा सकता है, लेकिन एक अच्छा कन्वेंशन <uuid>.json है, जहाँ <uuid> गुप्त कुंजी को दी गई 128-बिट UUID है (गुप्त कुंजी के पते के लिए एक गोपनीयता-संरक्षण प्रॉक्सी)।

ऐसी सभी फाइलों में एक संबद्ध पासवर्ड होता है। किसी दी गई .json फ़ाइल की गुप्त कुंजी प्राप्त करने के लिए, पहले फ़ाइल की एन्क्रिप्शन कुंजी प्राप्त करें; यह फ़ाइल का पासवर्ड लेने और इसे kdf कुंजी द्वारा वर्णित एक कुंजी व्युत्पत्ति फ़ंक्शन के माध्यम से पारित करके किया जाता है। KDF फ़ंक्शन के लिए KDF-निर्भर स्थिर और डायनामिक पैरामीटर kdfparams कुंजी में वर्णित हैं।

PBKDF2 को सभी न्यूनतम-अनुपालन कार्यान्वयन द्वारा समर्थित किया जाना चाहिए, हालांकि निरूपित:

  • kdf: pbkdf2

For PBKDF2, the kdfparams include:

  • prf: hmac-sha256 होना चाहिए (भविष्य में बढ़ाया जा सकता है);
  • c: पुनरावृत्तियों की संख्या;
  • salt: PBKDF को दिया गया साल्ट;
  • dklen: व्युत्पन्न कुंजी के लिए लंबाई। >= 32 होना चाहिए।

एक बार फ़ाइल की कुंजी प्राप्त हो जाने के बाद, इसे मैक की व्युत्पत्ति के माध्यम से सत्यापित किया जाना चाहिए। MAC की गणना बाइट ऐरे के SHA3 (keccak-256) हैश के रूप में की जानी चाहिए, जो ciphertext कुंजी की सामग्री के साथ व्युत्पन्न कुंजी के दूसरे-सबसे-बाएँ 16 बाइट्स के संयोजन के रूप में बनती है, यानी:

1KECCAK(DK[16..31] ++ <ciphertext>)

(जहाँ ++ संयोजन ऑपरेटर है)

इस मान की तुलना mac कुंजी की सामग्री से की जानी चाहिए; यदि वे अलग हैं, तो एक वैकल्पिक पासवर्ड का अनुरोध किया जाना चाहिए (या ऑपरेशन रद्द कर दिया जाना चाहिए)।

फ़ाइल की कुंजी सत्यापित हो जाने के बाद, सिफर टेक्स्ट (फ़ाइल में ciphertext कुंजी) को cipher कुंजी द्वारा निर्दिष्ट सममित एन्क्रिप्शन एल्गोरिदम का उपयोग करके और cipherparams कुंजी के माध्यम से पैरामीटर करके डिक्रिप्ट किया जा सकता है। यदि व्युत्पन्न कुंजी आकार और एल्गोरिथ्म का कुंजी आकार बेमेल है, तो व्युत्पन्न कुंजी के शून्य गद्देदार, सबसे दाएं बाइट्स का उपयोग एल्गोरिथ्म की कुंजी के रूप में किया जाना चाहिए।

सभी न्यूनतम-अनुपालन कार्यान्वयन को AES-128-CTR एल्गोरिथम का समर्थन करना चाहिए, जिसे निम्न के माध्यम से दर्शाया गया है:

  • cipher: aes-128-ctr

यह सिफर निम्नलिखित पैरामीटर लेता है, जिसे सिफरपरम कुंजी की कुंजी के रूप में दिया गया है:

  • iv: सिफर के लिए 128-बिट आरंभीकरण वेक्टर।

सिफर के लिए कुंजी व्युत्पन्न कुंजी के सबसे बाएँ 16 बाइट्स है, यानी, DK[0..15]

एक गुप्त कुंजी का निर्माण/एन्क्रिप्शन अनिवार्य रूप से इन निर्देशों के विपरीत होना चाहिए। सुनिश्चित करें कि uuid, salt और iv वास्तव में यादृच्छिक हैं।

version फ़ील्ड के अलावा, जिसे संस्करण के "हार्ड" पहचानकर्ता के रूप में कार्य करना चाहिए, कार्यान्वयन प्रारूप में छोटे, गैर-ब्रेकिंग परिवर्तनों को ट्रैक करने के लिए minorversion का भी उपयोग कर सकते हैं।

टेस्ट वेक्टर्स

विवरण

  • पता: 008aeeda4d805471df9b2a5b0f38a0c3bcba786b
  • ICAP: XE542A5PZHH8PYIZUBEJEO0MFWRAPPIL67
  • UUID: 3198bc9c-6672-5ab3-d9954942343ae5b6
  • पासवर्ड: testpassword
  • गुप्त: 7a28b5ba57c53603b0b07b56bba752f7784bf506fa95edc395f5cf6c7514fe9d

PBKDF2-SHA-256

AES-128-CTR और PBKDF2-SHA-256 का उपयोग करके टेस्ट वेक्टर:

~/.web3/keystore/3198bc9c-6672-5ab3-d9954942343ae5b6.json की फ़ाइल सामग्री:

1{
2 "crypto": {
3 "cipher": "aes-128-ctr",
4 "cipherparams": {
5 "iv": "6087dab2f9fdbbfaddc31a909735c1e6"
6 },
7 "ciphertext": "5318b4d5bcd28de64ee5559e671353e16f075ecae9f99c7a79a38af5f869aa46",
8 "kdf": "pbkdf2",
9 "kdfparams": {
10 "c": 262144,
11 "dklen": 32,
12 "prf": "hmac-sha256",
13 "salt": "ae3cd4e7013836a3df6bd7241b12db061dbe2c6785853cce422d148a624ce0bd"
14 },
15 "mac": "517ead924a9d0dc3124507e3393d175ce3ff7c1e96529c6c555ce9e51205e9b2"
16 },
17 "id": "3198bc9c-6672-5ab3-d995-4942343ae5b6",
18 "version": 3
19}
सभी दिखाएँ

मध्यवर्ती:

व्युत्पन्न कुंजी: f06d69cdc7da0faffb1008270bca38f5e31891a3a773950e6d0fea48a7188551 MAC बॉडी: e31891a3a773950e6d0fea48a71885515318b4d5bcd28de64ee5559e671353e16f075ecae9f99c7a79a38af5f869aa46 MAC: 517ead924a9d0dc3124507e3393d175ce3ff7c1e96529c6c555ce9e51205e9b2 सिफर कुंजी: f06d69cdc7da0faffb1008270bca38f5

Scrypt

Test vector using AES-128-CTR and Scrypt:

1{
2 "crypto": {
3 "cipher": "aes-128-ctr",
4 "cipherparams": {
5 "iv": "740770fce12ce862af21264dab25f1da"
6 },
7 "ciphertext": "dd8a1132cf57db67c038c6763afe2cbe6ea1949a86abc5843f8ca656ebbb1ea2",
8 "kdf": "scrypt",
9 "kdfparams": {
10 "dklen": 32,
11 "n": 262144,
12 "p": 1,
13 "r": 8,
14 "salt": "25710c2ccd7c610b24d068af83b959b7a0e5f40641f0c82daeb1345766191034"
15 },
16 "mac": "337aeb86505d2d0bb620effe57f18381377d67d76dac1090626aa5cd20886a7c"
17 },
18 "id": "3198bc9c-6672-5ab3-d995-4942343ae5b6",
19 "version": 3
20}
सभी दिखाएँ

मध्यवर्ती:

व्युत्पन्न कुंजी: 7446f59ecc301d2d79bc3302650d8a5cedc185ccbb4bf3ca1ebd2c163eaa6c2d MAC बॉडी: edc185ccbb4bf3ca1ebd2c163eaa6c2ddd8a1132cf57db67c038c6763afe2cbe6ea1949a86abc5843f8ca656ebbb1ea2 MAC: 337aeb86505d2d0bb620effe57f18381377d67d76dac1090626aa5cd20886a7c सिफर कुंजी: 7446f59ecc301d2d79bc3302650d8a5c

संस्करण 1 से परिवर्तन

यह संस्करण यहाँ (opens in a new tab) प्रकाशित संस्करण 1 के साथ कई विसंगतियों को ठीक करता है। संक्षेप में ये हैं:

  • पूंजीकरण अनुचित और असंगत है (स्क्रीप्ट लोअरकेस, केडीएफ मिश्रित-केस, मैक अपरकेस)।
  • अनावश्यक को संबोधित करें और गोपनीयता से समझौता करें।
  • Salt स्वाभाविक रूप से कुंजी व्युत्पत्ति फ़ंक्शन का एक पैरामीटर है और इसके साथ संबद्ध होने का हकदार है, न कि सामान्य रूप से क्रिप्टो के साथ।
  • SaltLen अनावश्यक (बस इसे Salt से प्राप्त करें)।
  • प्रमुख व्युत्पत्ति फ़ंक्शन दिया गया है, फिर भी क्रिप्टो एल्गोरिथ्म कठिन रूप से निर्दिष्ट है।
  • Version स्वाभाविक रूप से संख्यात्मक है फिर भी एक स्ट्रिंग है (स्ट्रक्चर्ड वर्जनिंग एक स्ट्रिंग के साथ संभव होगी, लेकिन इसे शायद ही कभी बदलते कॉन्फ़िगरेशन फ़ाइल प्रारूप के लिए दायरे से बाहर माना जा सकता है)।
  • KDF और cipher सैद्धांतिक रूप से सहोदर अवधारणाएं हैं फिर भी अलग-अलग व्यवस्थित हैं।
  • MAC की गणना डेटा के एक व्हाइटस्पेस एग्नोस्टिक भाग (!) के माध्यम से की जाती है।

निम्न फ़ाइल देने के लिए प्रारूप में परिवर्तन किए गए हैं, कार्यात्मक रूप से पहले लिंक किए गए पृष्ठ पर दिए गए उदाहरण के बराबर:

1{
2 "crypto": {
3 "cipher": "aes-128-cbc",
4 "ciphertext": "07533e172414bfa50e99dba4a0ce603f654ebfa1ff46277c3e0c577fdc87f6bb4e4fe16c5a94ce6ce14cfa069821ef9b",
5 "cipherparams": {
6 "iv": "16d67ba0ce5a339ff2f07951253e6ba8"
7 },
8 "kdf": "scrypt",
9 "kdfparams": {
10 "dklen": 32,
11 "n": 262144,
12 "p": 1,
13 "r": 8,
14 "salt": "06870e5e6a24e183a5c807bd1c43afd86d573f7db303ff4853d135cd0fd3fe91"
15 },
16 "mac": "8ccded24da2e99a11d48cda146f9cc8213eb423e2ea0d8427f41c3be414424dd",
17 "version": 1
18 },
19 "id": "0498f19a-59db-4d54-ac95-33901b4f1870",
20 "version": 2
21}
सभी दिखाएँ

संस्करण 2 से परिवर्तन

संस्करण 2 कई बग के साथ एक प्रारंभिक C ++ कार्यान्वयन था। सभी आवश्यक चीजें इससे अपरिवर्तित रहती हैं।

क्या यह लेख सहायक था?