Web3 ரகசிய சேமிப்பக வரையறை
பக்கம் கடைசியாகப் புதுப்பிக்கப்பட்டது: 21 அக்டோபர், 2025
Ethereum இல் உங்கள் பயன்பாட்டைச் செயல்பட வைக்க, web3.js நூலகத்தால் வழங்கப்படும் web3 ஆப்ஜெக்ட்டைப் பயன்படுத்தலாம். உள்ளமைவாக இது RPC அழைப்புகள் மூலம் உள்ளூர் முனையுடன் (node) தொடர்பு கொள்கிறது. web3 (opens in a new tab) ஆனது RPC அடுக்கை வெளிப்படுத்தும் எந்தவொரு Ethereum முனையுடனும் வேலை செய்யும்.
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 தவறான விசைக்கோப்பு */அனைத்தையும் காட்டுஇது Web3 ரகசிய சேமிப்பக வரையறையின் பதிப்பு 3 ஐ ஆவணப்படுத்துகிறது.
வரையறை
கிரிப்டோ அல்காரிதம் இனி AES-128-CBC ஆக நிலையாக இல்லை (AES-128-CTR இப்போது குறைந்தபட்ச தேவையாகும்) என்பதைத் தவிர, கோப்பின் உண்மையான குறியாக்கம் (encoding) மற்றும் குறிவிலக்கம் (decoding) பதிப்பு 1 இலிருந்து பெருமளவில் மாறாமல் உள்ளது. mac ஐத் தவிர, பெரும்பாலான அர்த்தங்கள்/அல்காரிதம்கள் பதிப்பு 1 ஐப் போலவே உள்ளன, இது பெறப்பட்ட திறவுகோலின் (derived key) இடதுபுறத்திலிருந்து இரண்டாவது 16 பைட்டுகளின் இணைப்புகளின் SHA3 (keccak-256) ஆக முழு ciphertext உடன் வழங்கப்படுகிறது.
ரகசிய திறவுகோல் கோப்புகள் நேரடியாக ~/.web3/keystore (Unix போன்ற கணினிகளுக்கு) மற்றும் ~/AppData/Web3/keystore (Windows-க்கு) ஆகியவற்றில் சேமிக்கப்படும். அவற்றுக்கு எந்தப் பெயரும் சூட்டப்படலாம், ஆனால் ஒரு நல்ல மரபு <uuid>.json ஆகும், இதில் <uuid> என்பது ரகசிய திறவுகோலுக்கு வழங்கப்படும் 128-பிட் UUID ஆகும் (ரகசிய திறவுகோலின் முகவரிக்கான தனியுரிமையைப் பாதுகாக்கும் ப்ராக்ஸி).
அத்தகைய கோப்புகள் அனைத்தும் தொடர்புடைய கடவுச்சொல்லைக் கொண்டுள்ளன. கொடுக்கப்பட்ட .json கோப்பின் ரகசிய திறவுகோலைப் பெற, முதலில் கோப்பின் குறியாக்க திறவுகோலைப் பெற வேண்டும்; கோப்பின் கடவுச்சொல்லை எடுத்து, kdf திறவுகோலால் விவரிக்கப்பட்டுள்ளபடி ஒரு திறவுகோல் பெறுதல் சார்பு (key derivation function) மூலம் அதை அனுப்புவதன் மூலம் இது செய்யப்படுகிறது. KDF சார்புக்கான KDF-சார்ந்த நிலையான மற்றும் மாறும் அளவுருக்கள் kdfparams திறவுகோலில் விவரிக்கப்பட்டுள்ளன.
PBKDF2 அனைத்து குறைந்தபட்ச-இணக்கமான செயலாக்கங்களாலும் ஆதரிக்கப்பட வேண்டும், இது பின்வருமாறு குறிக்கப்படுகிறது:
kdf:pbkdf2
PBKDF2-க்கு, kdfparams பின்வருவனவற்றை உள்ளடக்கியது:
prf:hmac-sha256ஆக இருக்க வேண்டும் (எதிர்காலத்தில் நீட்டிக்கப்படலாம்);c: மறுசெய்கைகளின் (iterations) எண்ணிக்கை;salt: PBKDF-க்கு அனுப்பப்பட்ட சால்ட் (salt);dklen: பெறப்பட்ட திறவுகோலின் நீளம். >= 32 ஆக இருக்க வேண்டும்.
கோப்பின் திறவுகோல் பெறப்பட்டவுடன், அது MAC இன் பெறுதல் மூலம் சரிபார்க்கப்பட வேண்டும். பெறப்பட்ட திறவுகோலின் இடதுபுறத்திலிருந்து இரண்டாவது 16 பைட்டுகளின் இணைப்புகளாக ciphertext திறவுகோலின் உள்ளடக்கங்களுடன் உருவாக்கப்பட்ட பைட் வரிசையின் SHA3 (keccak-256) ஹாஷாக MAC கணக்கிடப்பட வேண்டும், அதாவது:
1KECCAK(DK[16..31] ++ <ciphertext>)(இங்கு ++ என்பது இணைப்பு ஆபரேட்டர்)
இந்த மதிப்பு mac திறவுகோலின் உள்ளடக்கங்களுடன் ஒப்பிடப்பட வேண்டும்; அவை வேறுபட்டால், மாற்று கடவுச்சொல் கோரப்பட வேண்டும் (அல்லது செயல்பாடு ரத்து செய்யப்பட வேண்டும்).
கோப்பின் திறவுகோல் சரிபார்க்கப்பட்ட பிறகு, சைஃபர் உரை (கோப்பில் உள்ள ciphertext திறவுகோல்) cipher திறவுகோலால் குறிப்பிடப்பட்ட மற்றும் cipherparams திறவுகோல் மூலம் அளவுருவாக்கப்பட்ட சமச்சீர் குறியாக்க அல்காரிதத்தைப் பயன்படுத்தி குறிவிலக்கப்படலாம் (decrypted). பெறப்பட்ட திறவுகோல் அளவு மற்றும் அல்காரிதத்தின் திறவுகோல் அளவு பொருந்தவில்லை என்றால், பெறப்பட்ட திறவுகோலின் பூஜ்ஜியத்தால் நிரப்பப்பட்ட, வலதுபுற பைட்டுகள் அல்காரிதத்திற்கான திறவுகோலாகப் பயன்படுத்தப்பட வேண்டும்.
அனைத்து குறைந்தபட்ச-இணக்கமான செயலாக்கங்களும் AES-128-CTR அல்காரிதத்தை ஆதரிக்க வேண்டும், இது பின்வருமாறு குறிக்கப்படுகிறது:
cipher: aes-128-ctr
இந்த சைஃபர் பின்வரும் அளவுருக்களை எடுத்துக்கொள்கிறது, அவை cipherparams திறவுகோலுக்கான திறவுகோல்களாக வழங்கப்படுகின்றன:
iv: சைஃபருக்கான 128-பிட் துவக்க வெக்டார் (initialisation vector).
சைஃபருக்கான திறவுகோல் என்பது பெறப்பட்ட திறவுகோலின் இடதுபுற 16 பைட்டுகள் ஆகும், அதாவது DK[0..15]
ஒரு ரகசிய திறவுகோலின் உருவாக்கம்/குறியாக்கம் அடிப்படையில் இந்த வழிமுறைகளின் தலைகீழாக இருக்க வேண்டும். uuid, salt மற்றும் iv ஆகியவை உண்மையில் சீரற்றவை (random) என்பதை உறுதிப்படுத்தவும்.
பதிப்பின் "கடினமான" அடையாளங்காட்டியாகச் செயல்பட வேண்டிய 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}அனைத்தையும் காட்டுஇடைநிலைகள் (Intermediates):
Derived key: f06d69cdc7da0faffb1008270bca38f5e31891a3a773950e6d0fea48a7188551
MAC Body: e31891a3a773950e6d0fea48a71885515318b4d5bcd28de64ee5559e671353e16f075ecae9f99c7a79a38af5f869aa46
MAC: 517ead924a9d0dc3124507e3393d175ce3ff7c1e96529c6c555ce9e51205e9b2
Cipher key: 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}அனைத்தையும் காட்டுஇடைநிலைகள் (Intermediates):
Derived key: 7446f59ecc301d2d79bc3302650d8a5cedc185ccbb4bf3ca1ebd2c163eaa6c2d
MAC Body: edc185ccbb4bf3ca1ebd2c163eaa6c2ddd8a1132cf57db67c038c6763afe2cbe6ea1949a86abc5843f8ca656ebbb1ea2
MAC: 337aeb86505d2d0bb620effe57f18381377d67d76dac1090626aa5cd20886a7c
Cipher key: 7446f59ecc301d2d79bc3302650d8a5c
பதிப்பு 1 இலிருந்து மாற்றங்கள்
இந்த பதிப்பு இங்கே (opens in a new tab) வெளியிடப்பட்ட பதிப்பு 1 இல் உள்ள பல முரண்பாடுகளை சரிசெய்கிறது. சுருக்கமாக இவை:
- பெரிய எழுத்துக்களின் பயன்பாடு (Capitalisation) நியாயமற்றது மற்றும் சீரற்றது (scrypt சிறிய எழுத்து, Kdf கலப்பு-எழுத்து, MAC பெரிய எழுத்து).
- முகவரி தேவையற்றது மற்றும் தனியுரிமையை சமரசம் செய்கிறது.
Saltஎன்பது இயல்பாகவே திறவுகோல் பெறுதல் சார்பின் (key derivation function) ஒரு அளவுருவாகும், மேலும் இது பொதுவாக கிரிப்டோவுடன் அல்லாமல் அதனுடன் தொடர்புடையதாக இருக்க வேண்டும்.- SaltLen தேவையற்றது (அதை Salt இலிருந்து பெறவும்).
- திறவுகோல் பெறுதல் சார்பு கொடுக்கப்பட்டுள்ளது, இருப்பினும் கிரிப்டோ அல்காரிதம் கடினமாக குறிப்பிடப்பட்டுள்ளது.
Versionஎன்பது இயல்பாகவே எண்ணியல் (numeric) ஆனால் இது ஒரு சரமாக (string) உள்ளது (ஒரு சரத்துடன் கட்டமைக்கப்பட்ட பதிப்பு சாத்தியமாகும், ஆனால் அரிதாகவே மாறும் உள்ளமைவு கோப்பு வடிவத்திற்கு இது எல்லைக்கு அப்பாற்பட்டதாகக் கருதப்படலாம்).KDFமற்றும்cipherஆகியவை கருத்தியல் ரீதியாக உடன்பிறப்பு கருத்துக்கள், இருப்பினும் அவை வித்தியாசமாக ஒழுங்கமைக்கப்பட்டுள்ளன.MACஆனது இடைவெளி அறியாத (whitespace agnostic) தரவுத் துண்டு மூலம் கணக்கிடப்படுகிறது(!)
முன்பு இணைக்கப்பட்ட பக்கத்தில் கொடுக்கப்பட்டுள்ள உதாரணத்திற்கு செயல்பாட்டு ரீதியாக சமமான பின்வரும் கோப்பை வழங்க வடிவத்தில் மாற்றங்கள் செய்யப்பட்டுள்ளன:
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++ செயலாக்கமாகும். அனைத்து அத்தியாவசியங்களும் அதிலிருந்து மாறாமல் உள்ளன.