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

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,195 @@
---
title: "Web3 গোপন সংগ্রহস্থল সংজ্ঞা"
description: "web3 গোপন সংগ্রহস্থলের জন্য আনুষ্ঠানিক সংজ্ঞা"
lang: bn
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` ছাড়া, যা ডিরাইভড কী-এর দ্বিতীয়-বামদিকের 16 বাইটের সাথে সম্পূর্ণ `ciphertext`-এর কনক্যাটেনেশনের SHA3 (keccak-256) হিসাবে দেওয়া হয়েছে।

গোপন কী ফাইলগুলি সরাসরি `~/.web3/keystore` (ইউনিক্স-সদৃশ সিস্টেমের জন্য) এবং `~/AppData/Web3/keystore` (উইন্ডোজের জন্য) এখানে সংরক্ষণ করা হয়। তাদের যেকোনো নাম দেওয়া যেতে পারে, কিন্তু একটি ভাল প্রথা হলো `<uuid>.json`, যেখানে `<uuid>` হলো গোপন কী-কে দেওয়া 128-বিট UUID (গোপন কী-এর ঠিকানার জন্য একটি গোপনীয়তা-সংরক্ষণকারী প্রক্সি)।

এই ধরনের সমস্ত ফাইলের একটি সংশ্লিষ্ট পাসওয়ার্ড থাকে। একটি প্রদত্ত `.json` ফাইলের গোপন কী ডিরাইভ করার জন্য, প্রথমে ফাইলটির এনক্রিপশন কী ডিরাইভ করুন; এটি করা হয় ফাইলটির পাসওয়ার্ড নিয়ে এবং `kdf` কী দ্বারা বর্ণিত একটি কী ডিরাইভেশন ফাংশনের মধ্যে দিয়ে পাস করিয়ে। KDF ফাংশনের জন্য KDF-নির্ভর স্ট্যাটিক এবং ডাইনামিক প্যারামিটারগুলি `kdfparams` কী-তে বর্ণনা করা আছে।

ন্যূনতম-সম্মত সমস্ত ইমপ্লিমেন্টেশন দ্বারা PBKDF2 অবশ্যই সমর্থিত হতে হবে, যা বোঝানো হয়েছে:

- `kdf`: `pbkdf2`

PBKDF2-এর জন্য, kdfparams-এর মধ্যে অন্তর্ভুক্ত:

- `prf`: অবশ্যই `hmac-sha256` হতে হবে (ভবিষ্যতে প্রসারিত হতে পারে);
- `c`: পুনরাবৃত্তির সংখ্যা;
- `salt`: PBKDF-এ পাস করা সল্ট;
- `dklen`: ডিরাইভড কী-এর জন্য দৈর্ঘ্য। অবশ্যই >= 32 হতে হবে।

একবার ফাইলটির কী ডিরাইভ করা হয়ে গেলে, MAC-এর ডিরাইভেশনের মাধ্যমে এটি যাচাই করা উচিত। ডিরাইভড কী-এর দ্বিতীয়-বামদিকের 16 বাইটের সাথে `ciphertext` কী-এর বিষয়বস্তুর কনক্যাটেনেশন দ্বারা গঠিত বাইট অ্যারের SHA3 (keccak-256) হ্যাস হিসাবে MAC-কে গণনা করা উচিত, অর্থাৎ:

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

(যেখানে `++` হল কনক্যাটেনেশন অপারেটর)

এই মানটি `mac` কী-এর বিষয়বস্তুর সাথে তুলনা করা উচিত; যদি তারা ভিন্ন হয়, একটি বিকল্প পাসওয়ার্ড অনুরোধ করা উচিত (বা অপারেশনটি বাতিল করা উচিত)।

ফাইলটির কী যাচাই করার পরে, `cipher` কী দ্বারা নির্দিষ্ট করা এবং `cipherparams` কী-এর মাধ্যমে প্যারামিটারাইজ করা সিমেট্রিক এনক্রিপশন অ্যালগরিদম ব্যবহার করে সাইফার টেক্সট (ফাইলে থাকা `ciphertext` কী) ডিক্রিপ্ট করা যেতে পারে। যদি ডিরাইভড কী-এর আকার এবং অ্যালগরিদমের কী-এর আকার মেলানো না যায়, তাহলে ডিরাইভড কী-এর শূন্য প্যাডযুক্ত, ডানদিকের বাইটগুলি অ্যালগরিদমের কী হিসাবে ব্যবহার করা উচিত।

ন্যূনতম-সম্মত সমস্ত ইমপ্লিমেন্টেশন দ্বারা অবশ্যই AES-128-CTR অ্যালগরিদম সমর্থিত হতে হবে, যা বোঝানো হয়েছে:

- `cipher: aes-128-ctr`

এই সাইফারটি নিম্নলিখিত প্যারামিটারগুলি গ্রহণ করে, যা cipherparams কী-এর কী হিসাবে দেওয়া হয়েছে:

- `iv`: সাইফারের জন্য 128-বিট ইনিশিয়ালাইজেশন ভেক্টর।

সাইফারের জন্য কী হলো ডিরাইভড কী-এর বামদিকের 16 বাইট, অর্থাৎ `DK[0..15]`

একটি গোপন কী-এর তৈরি/এনক্রিপশন মূলত এই নির্দেশাবলীর বিপরীত হওয়া উচিত। নিশ্চিত করুন যে `uuid`, `salt` এবং `iv` প্রকৃতপক্ষে র‍্যান্ডম।

`version` ফিল্ড ছাড়াও, যা সংস্করণের একটি "হার্ড" শনাক্তকারী হিসাবে কাজ করা উচিত, ইমপ্লিমেন্টেশনগুলি ফরম্যাটের ছোটখাটো, নন-ব্রেকিং পরিবর্তনগুলি ট্র্যাক করার জন্য `minorversion`-ও ব্যবহার করতে পারে।

## টেস্ট ভেক্টর {#test-vectors}

বিবরণ:

- `Address`: `008aeeda4d805471df9b2a5b0f38a0c3bcba786b`
- `ICAP`: `XE542A5PZHH8PYIZUBEJEO0MFWRAPPIL67`
- `UUID`: `3198bc9c-6672-5ab3-d9954942343ae5b6`
- `Password`: `testpassword`
- `Secret`: `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