Web3 গোপন সংগ্রহস্থল সংজ্ঞা
পৃষ্ঠাটি সর্বশেষ আপডেট করা হয়েছে: ১৪ ফেব্রুয়ারী, ২০২৬
আপনার অ্যাপকে Ethereum-এ কাজ করানোর জন্য, আপনি web3.js লাইব্রেরি দ্বারা সরবরাহ করা web3 অবজেক্টটি ব্যবহার করতে পারেন। নেপথ্যে এটি RPC কলের মাধ্যমে একটি স্থানীয় নোডের সাথে যোগাযোগ করে। web3opens in a new tab যেকোনো Ethereum নোডের সাথে কাজ করে যা একটি RPC লেয়ার উন্মুক্ত করে।
web3-তে eth অবজেক্টটি রয়েছে - web3.eth।
1var fs = require("fs")2var recognizer = require("ethereum-keyfile-recognizer")34fs.readFile("keyfile.json", (err, data) => {5 var json = JSON.parse(data)6 var result = recognizer(json)7})89/** ফলাফল10 * [ 'web3', 3 ] web3 (v3) কীফাইল11 * [ 'ethersale', undefined ] Ethersale কীফাইল12 * null অবৈধ কীফাইল13 */সবকটি দেখুনএই ডকুমেন্টটি Web3 গোপন সংগ্রহস্থল সংজ্ঞার সংস্করণ 3 নথিভুক্ত করে।
সংজ্ঞা
ফাইলটির আসল এনকোডিং এবং ডিকোডিং সংস্করণ 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-কে গণনা করা উচিত, অর্থাৎ:
1KECCAK(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-ও ব্যবহার করতে পারে।
টেস্ট ভেক্টর
বিবরণ:
Address:008aeeda4d805471df9b2a5b0f38a0c3bcba786bICAP:XE542A5PZHH8PYIZUBEJEO0MFWRAPPIL67UUID:3198bc9c-6672-5ab3-d9954942343ae5b6Password:testpasswordSecret: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": 319}সবকটি দেখুনইন্টারমিডিয়েট:
ডিরাইভড কী: 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": 320}সবকটি দেখুনইন্টারমিডিয়েট:
ডিরাইভড কী: 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": 118 },19 "id": "0498f19a-59db-4d54-ac95-33901b4f1870",20 "version": 221}সবকটি দেখুনসংস্করণ 2 থেকে পরিবর্তন
সংস্করণ 2 ছিল একটি প্রাথমিক C++ ইমপ্লিমেন্টেশন যাতে বেশ কয়েকটি বাগ ছিল। এর থেকে সমস্ত অপরিহার্য বিষয় অপরিবর্তিত রয়েছে।