Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,195 @@
---
title: "Web3 गुप्त स्टोरेजची व्याख्या"
description: "web3 गुप्त स्टोरेजची औपचारिक व्याख्या"
lang: mr
sidebarDepth: 2
---

तुमचा ॲप Ethereum वर काम करण्यासाठी, तुम्ही web3.js लायब्ररीद्वारे प्रदान केलेला web3 ऑब्जेक्ट वापरू शकता. आतल्या बाजूला ते RPC कॉलद्वारे स्थानिक नोडशी संवाद साधते. [web3](https://github.com/ethereum/web3.js/) कोणत्याही Ethereum नोडसोबत काम करते जे RPC लेयर उघड करते.

`web3` मध्ये `eth` ऑब्जेक्ट आहे - web3.eth.

```js
var fs = require("fs")
var recognizer = require("ethereum-keyfile-recognizer")

fs.readFile("keyfile.json", (err, data) => {
var json = JSON.parse(data)
var result = recognizer(json)
})

/** परिणाम
* [ 'web3', 3 ] web3 (v3) कीफाइल
* [ 'ethersale', undefined ] Ethersale कीफाइल
* null अवैध कीफाइल
*/
```

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

## व्याख्या {#definition}

फाईलचे प्रत्यक्ष एन्कोडिंग आणि डीकोडिंग आवृत्ती 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) हॅश म्हणून केली पाहिजे, म्हणजे:

```js
KECCAK(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` देखील वापरू शकतात.

## चाचणी व्हेक्टर्स {#test-vectors}

तपशील:

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

### PBKDF2-SHA-256 {#PBKDF2-SHA-256}

`AES-128-CTR` आणि `PBKDF2-SHA-256` वापरून चाचणी व्हेक्टर:

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

```json
{
"crypto": {
"cipher": "aes-128-ctr",
"cipherparams": {
"iv": "6087dab2f9fdbbfaddc31a909735c1e6"
},
"ciphertext": "5318b4d5bcd28de64ee5559e671353e16f075ecae9f99c7a79a38af5f869aa46",
"kdf": "pbkdf2",
"kdfparams": {
"c": 262144,
"dklen": 32,
"prf": "hmac-sha256",
"salt": "ae3cd4e7013836a3df6bd7241b12db061dbe2c6785853cce422d148a624ce0bd"
},
"mac": "517ead924a9d0dc3124507e3393d175ce3ff7c1e96529c6c555ce9e51205e9b2"
},
"id": "3198bc9c-6672-5ab3-d995-4942343ae5b6",
"version": 3
}
```

**मध्यस्थ**:

`साधित की`: `f06d69cdc7da0faffb1008270bca38f5e31891a3a773950e6d0fea48a7188551`
`MAC बॉडी`: `e31891a3a773950e6d0fea48a71885515318b4d5bcd28de64ee5559e671353e16f075ecae9f99c7a79a38af5f869aa46`
`MAC`: `517ead924a9d0dc3124507e3393d175ce3ff7c1e96529c6c555ce9e51205e9b2`
`सिफर की`: `f06d69cdc7da0faffb1008270bca38f5`

### Scrypt {#scrypt}

AES-128-CTR आणि Scrypt वापरून चाचणी व्हेक्टर:

```json
{
"crypto": {
"cipher": "aes-128-ctr",
"cipherparams": {
"iv": "740770fce12ce862af21264dab25f1da"
},
"ciphertext": "dd8a1132cf57db67c038c6763afe2cbe6ea1949a86abc5843f8ca656ebbb1ea2",
"kdf": "scrypt",
"kdfparams": {
"dklen": 32,
"n": 262144,
"p": 1,
"r": 8,
"salt": "25710c2ccd7c610b24d068af83b959b7a0e5f40641f0c82daeb1345766191034"
},
"mac": "337aeb86505d2d0bb620effe57f18381377d67d76dac1090626aa5cd20886a7c"
},
"id": "3198bc9c-6672-5ab3-d995-4942343ae5b6",
"version": 3
}
```

**मध्यस्थ**:

`साधित की`: `7446f59ecc301d2d79bc3302650d8a5cedc185ccbb4bf3ca1ebd2c163eaa6c2d`
`MAC बॉडी`: `edc185ccbb4bf3ca1ebd2c163eaa6c2ddd8a1132cf57db67c038c6763afe2cbe6ea1949a86abc5843f8ca656ebbb1ea2`
`MAC`: `337aeb86505d2d0bb620effe57f18381377d67d76dac1090626aa5cd20886a7c`
`सिफर की`: `7446f59ecc301d2d79bc3302650d8a5c`

## आवृत्ती 1 मधील बदल {#alterations-from-v2}

ही आवृत्ती [येथे](https://github.com/ethereum/homestead-guide/blob/master/old-docs-for-reference/go-ethereum-wiki.rst/Passphrase-protected-key-store-spec.rst) प्रकाशित आवृत्ती 1 मधील अनेक विसंगती दूर करते. थोडक्यात ते खालीलप्रमाणे आहेत:

- कॅपिटलायझेशन अयोग्य आणि विसंगत आहे (scrypt लोअरकेस, Kdf मिक्स्ड-केस, MAC अप्परकेस).
- ॲड्रेस अनावश्यक आहे आणि गोपनीयतेशी तडजोड करतो.
- `Salt` हे मूलतः की डेरिवेशन फंक्शनचे एक पॅरामीटर आहे आणि ते त्याच्याशी संबंधित असले पाहिजे, सर्वसाधारणपणे क्रिप्टोशी नाही.
- _SaltLen_ अनावश्यक (फक्त Salt पासून मिळवा).
- की डेरिवेशन फंक्शन दिले आहे, तरीही क्रिप्टो अल्गोरिदम हार्ड स्पेसिफाइड आहे.
- `Version` हे मूलतः अंकीय आहे तरीही एक स्ट्रिंग आहे (स्ट्रिंगसह संरचित आवृत्ती शक्य आहे, परंतु क्वचितच बदलणाऱ्या कॉन्फिगरेशन फाइल स्वरूपासाठी कार्यक्षेत्राबाहेर मानले जाऊ शकते).
- `KDF` आणि `cipher` या संकल्पना काल्पनिकदृष्ट्या एकसारख्या आहेत तरीही त्या वेगवेगळ्या प्रकारे आयोजित केल्या आहेत.
- `MAC` ची गणना एका व्हाइटस्पेस अज्ञेयवादी डेटाच्या तुकड्याद्वारे केली जाते(!)

पूर्वी लिंक केलेल्या पृष्ठावरील उदाहरणाप्रमाणे कार्यात्मकदृष्ट्या समतुल्य असलेली खालील फाइल देण्यासाठी स्वरूपात बदल केले गेले आहेत:

```json
{
"crypto": {
"cipher": "aes-128-cbc",
"ciphertext": "07533e172414bfa50e99dba4a0ce603f654ebfa1ff46277c3e0c577fdc87f6bb4e4fe16c5a94ce6ce14cfa069821ef9b",
"cipherparams": {
"iv": "16d67ba0ce5a339ff2f07951253e6ba8"
},
"kdf": "scrypt",
"kdfparams": {
"dklen": 32,
"n": 262144,
"p": 1,
"r": 8,
"salt": "06870e5e6a24e183a5c807bd1c43afd86d573f7db303ff4853d135cd0fd3fe91"
},
"mac": "8ccded24da2e99a11d48cda146f9cc8213eb423e2ea0d8427f41c3be414424dd",
"version": 1
},
"id": "0498f19a-59db-4d54-ac95-33901b4f1870",
"version": 2
}
```

## आवृत्ती 2 मधील बदल {#alterations-from-v2}

आवृत्ती 2 ही अनेक बग्ससह एक सुरुवातीची C++ अंमलबजावणी होती. त्यातील सर्व आवश्यक गोष्टी अपरिवर्तित आहेत.
Loading
Loading