प्रमुख मजकुराकडे जा
Change page

Web3 गुप्त स्टोरेजची व्याख्या

पृष्ठ अखेरचे अद्यतन: २१ ऑक्टोबर, २०२५

तुमचा ॲप Ethereum वर काम करण्यासाठी, तुम्ही web3.js लायब्ररीद्वारे प्रदान केलेला web3 ऑब्जेक्ट वापरू शकता. आतल्या बाजूला ते RPC कॉलद्वारे स्थानिक नोडशी संवाद साधते. web3 (opens in a new tab) कोणत्याही Ethereum नोडसोबत काम करते जे 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 */
सर्व दाखवा

हे दस्तऐवज Web3 गुप्त स्टोरेज व्याख्येच्या आवृत्ती 3 चे वर्णन करते.

व्याख्या

फाईलचे प्रत्यक्ष एन्कोडिंग आणि डीकोडिंग आवृत्ती 1 पासून मोठ्या प्रमाणात अपरिवर्तित आहे, फक्त क्रिप्टो अल्गोरिदम आता AES-128-CBC पर्यंत मर्यादित नाही (AES-128-CTR ही आता किमान आवश्यकता आहे). बहुतेक अर्थ/अल्गोरिदम आवृत्ती 1 प्रमाणेच आहेत, mac वगळता, जे ciphertext सह साधित की च्या दुसऱ्या-डावीकडील 16 बाइट्सच्या एकत्रिकरणाचे SHA3 (keccak-256) म्हणून दिले जाते.

गुप्त की फाइल्स थेट ~/.web3/keystore (Unix-सारख्या प्रणालींसाठी) आणि ~/AppData/Web3/keystore (Windows साठी) मध्ये साठवल्या जातात. त्यांना कोणतेही नाव दिले जाऊ शकते, परंतु एक चांगला संकेत म्हणजे <uuid>.json, जिथे <uuid> हा गुप्त की ला दिलेला 128-बिट UUID आहे (गुप्त की च्या ॲड्रेससाठी गोपनीयता-संरक्षक प्रॉक्सी).

अशा सर्व फाइल्सना एक संबंधित पासवर्ड असतो. दिलेल्या .json फाइलची गुप्त की मिळवण्यासाठी, प्रथम फाइलची एन्क्रिप्शन की मिळवा; हे फाइलचा पासवर्ड घेऊन आणि kdf की द्वारे वर्णन केल्यानुसार की डेरिवेशन फंक्शनमधून पास करून केले जाते. KDF फंक्शनसाठी KDF-अवलंबित स्थिर आणि डायनॅमिक पॅरामीटर्सचे वर्णन kdfparams की मध्ये केले आहे.

PBKDF2 ला सर्व किमान-अनुरूप अंमलबजावणीद्वारे समर्थित करणे आवश्यक आहे, जे खालीलप्रमाणे दर्शविले आहे:

  • kdf: pbkdf2

PBKDF2 साठी, kdfparams मध्ये समाविष्ट आहे:

  • prf: hmac-sha256 असणे आवश्यक आहे (भविष्यात वाढवले जाऊ शकते);
  • c: पुनरावृत्तींची संख्या;
  • salt: PBKDF ला पास केलेला सॉल्ट;
  • dklen: साधित की साठी लांबी. >= 32 असणे आवश्यक आहे.

एकदा फाईलची की मिळवल्यानंतर, MAC च्या डेरिवेशनद्वारे त्याची पडताळणी केली पाहिजे. MAC ची गणना साधित की च्या दुसऱ्या-डावीकडील 16 बाइट्स आणि ciphertext की च्या सामग्रीच्या एकत्रिकरणाने तयार झालेल्या बाइट ॲरेच्या SHA3 (keccak-256) हॅश म्हणून केली पाहिजे, म्हणजे:

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

(जिथे ++ हा कॉनकेटिनेशन ऑपरेटर आहे)

या मूल्याची तुलना mac की च्या सामग्रीशी केली पाहिजे; जर ते वेगळे असतील, तर पर्यायी पासवर्डची विनंती केली पाहिजे (किंवा ऑपरेशन रद्द केले पाहिजे).

फाईलच्या कीची पडताळणी केल्यानंतर, सिफर टेक्स्ट (ciphertext की फाईलमध्ये) cipher की द्वारे निर्दिष्ट सिमेट्रिक एन्क्रिप्शन अल्गोरिदम वापरून आणि cipherparams की द्वारे पॅरामेटराइज करून डिक्रिप्ट केले जाऊ शकते. जर साधित की चा आकार आणि अल्गोरिदमच्या कीचा आकार जुळत नसेल, तर साधित की चे शून्य पॅडेड, उजवीकडील बाइट्स अल्गोरिदमची की म्हणून वापरले पाहिजेत.

सर्व किमान-अनुरूप अंमलबजावणीने AES-128-CTR अल्गोरिदमला समर्थन दिले पाहिजे, जे खालीलप्रमाणे दर्शविले आहे:

  • cipher: aes-128-ctr

हे सिफर खालील पॅरामीटर्स घेते, जे cipherparams की साठी की म्हणून दिले जातात:

  • 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

AES-128-CTR आणि 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 मधील अनेक विसंगती दूर करते. थोडक्यात ते खालीलप्रमाणे आहेत:

  • कॅपिटलायझेशन अयोग्य आणि विसंगत आहे (scrypt लोअरकेस, Kdf मिक्स्ड-केस, MAC अप्परकेस).
  • ॲड्रेस अनावश्यक आहे आणि गोपनीयतेशी तडजोड करतो.
  • 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++ अंमलबजावणी होती. त्यातील सर्व आवश्यक गोष्टी अपरिवर्तित आहेत.

हा लेख उपयुक्त होता का?