முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
Change page

⁦Web3⁩ ரகசிய சேமிப்பக வரையறை

எத்திரியத்தில் உங்கள் பயன்பாட்டைச் செயல்பட வைக்க, Web3.js நிரலகம் வழங்கும் web3 பொருளை நீங்கள் பயன்படுத்தலாம். இது உட்புறமாக RPC அழைப்புகள் மூலம் உள்ளூர் கணுவுடன் தொடர்பு கொள்கிறது. web3 (opens in a new tab) ஆனது RPC அடுக்கை வெளிப்படுத்தும் எந்தவொரு எத்திரியம் கணுவுடனும் வேலை செய்கிறது.

web3 ஆனது eth பொருளைக் கொண்டுள்ளது - web3.eth.

இது Web3 ரகசிய சேமிப்பக வரையறையின் பதிப்பு 3-ஐ ஆவணப்படுத்துகிறது.

வரையறை

கோப்பின் உண்மையான குறியாக்கம் மற்றும் குறிவிலக்கம் ஆகியவை பதிப்பு 1-லிருந்து பெருமளவில் மாறாமல் உள்ளன, ஆனால் கிரிப்டோ அல்காரிதம் இனி AES-128-CBC ஆக நிலையாக இல்லை (தற்போது AES-128-CTR என்பது குறைந்தபட்ச தேவையாகும்). பெறப்பட்ட திறவுகோலின் இடதுபுறத்திலிருந்து இரண்டாவது 16 பைட்டுகளையும் முழுமையான ciphertext-ஐயும் இணைத்து உருவாக்கப்படும் SHA3 (கெக்காக்-256) ஆக வழங்கப்படும் mac-ஐத் தவிர, பெரும்பாலான அர்த்தங்கள்/அல்காரிதம்கள் பதிப்பு 1-ஐப் போலவே உள்ளன.

ரகசிய திறவுகோல் கோப்புகள் நேரடியாக ~/.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: மறுசெயல்களின் எண்ணிக்கை (number of iterations);
  • salt: PBKDF-க்கு அனுப்பப்படும் சால்ட் (salt);
  • dklen: பெறப்பட்ட திறவுகோலின் நீளம். >= 32 ஆக இருக்க வேண்டும்.

கோப்பின் திறவுகோல் பெறப்பட்டவுடன், அது MAC-ஐப் பெறுவதன் மூலம் சரிபார்க்கப்பட வேண்டும். பெறப்பட்ட திறவுகோலின் இடதுபுறத்திலிருந்து இரண்டாவது 16 பைட்டுகளையும் ciphertext திறவுகோலின் உள்ளடக்கங்களையும் இணைத்து உருவாக்கப்படும் பைட் வரிசையின் SHA3 (கெக்காக்-256) ஹாஷ் ஆக MAC கணக்கிடப்பட வேண்டும், அதாவது:

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

(இங்கு ++ என்பது இணைப்பு செயலி (concatenation operator) ஆகும்)

இந்த மதிப்பு mac திறவுகோலின் உள்ளடக்கங்களுடன் ஒப்பிடப்பட வேண்டும்; அவை வேறுபட்டால், மாற்று கடவுச்சொல் கோரப்பட வேண்டும் (அல்லது செயல்பாடு ரத்து செய்யப்பட வேண்டும்).

கோப்பின் திறவுகோல் சரிபார்க்கப்பட்ட பிறகு, cipher திறவுகோலால் குறிப்பிடப்பட்ட மற்றும் cipherparams திறவுகோல் மூலம் அளவுருவாக்கப்பட்ட சமச்சீர் குறியாக்க அல்காரிதத்தைப் பயன்படுத்தி மறைக்குறியீட்டு உரை (கோப்பில் உள்ள ciphertext திறவுகோல்) குறிவிலக்கப்படலாம். பெறப்பட்ட திறவுகோலின் அளவும் அல்காரிதத்தின் திறவுகோல் அளவும் பொருந்தவில்லை எனில், பெறப்பட்ட திறவுகோலின் வலதுபுறத்தில் உள்ள பூஜ்ஜியத்தால் நிரப்பப்பட்ட பைட்டுகள் அல்காரிதத்திற்கான திறவுகோலாகப் பயன்படுத்தப்பட வேண்டும்.

குறைந்தபட்ச இணக்கமான அனைத்து செயலாக்கங்களும் AES-128-CTR அல்காரிதத்தை ஆதரிக்க வேண்டும், இது பின்வருமாறு குறிக்கப்படுகிறது:

  • cipher: aes-128-ctr

இந்த மறைக்குறியீடு பின்வரும் அளவுருக்களை எடுத்துக்கொள்கிறது, இவை cipherparams திறவுகோலுக்கான திறவுகோல்களாக வழங்கப்படுகின்றன:

  • iv: மறைக்குறியீட்டிற்கான 128-பிட் துவக்க வெக்டார் (initialisation vector).

மறைக்குறியீட்டிற்கான திறவுகோல் என்பது பெறப்பட்ட திறவுகோலின் இடதுபுறத்தில் உள்ள 16 பைட்டுகள் ஆகும், அதாவது DK[0..15]

ஒரு ரகசிய திறவுகோலை உருவாக்குதல்/குறியாக்கம் செய்தல் என்பது அடிப்படையில் இந்த வழிமுறைகளின் தலைகீழ் செயலாக இருக்க வேண்டும். uuid, salt மற்றும் iv ஆகியவை உண்மையில் சீரற்ற முறையில் (random) இருப்பதை உறுதிசெய்யவும்.

பதிப்பின் "கடினமான" அடையாளங்காட்டியாகச் செயல்பட வேண்டிய version புலத்துடன் கூடுதலாக, வடிவமைப்பில் ஏற்படும் சிறிய, முறிவில்லாத மாற்றங்களைக் கண்காணிக்க செயலாக்கங்கள் minorversion-ஐயும் பயன்படுத்தலாம்.

சோதனை வெக்டார்கள்

விவரங்கள்:

  • Address: 008aeeda4d805471df9b2a5b0f38a0c3bcba786b
  • ICAP: XE542A5PZHH8PYIZUBEJEO0MFWRAPPIL67
  • UUID: 3198bc9c-6672-5ab3-d9954942343ae5b6
  • Password: testpassword
  • Secret: 7a28b5ba57c53603b0b07b56bba752f7784bf506fa95edc395f5cf6c7514fe9d

PBKDF2-SHA-256

AES-128-CTR மற்றும் PBKDF2-SHA-256-ஐப் பயன்படுத்தும் சோதனை வெக்டார்:

~/.web3/keystore/3198bc9c-6672-5ab3-d9954942343ae5b6.json-ன் கோப்பு உள்ளடக்கங்கள்:

இடைநிலைகள் (Intermediates):

Derived key: f06d69cdc7da0faffb1008270bca38f5e31891a3a773950e6d0fea48a7188551 MAC Body: e31891a3a773950e6d0fea48a71885515318b4d5bcd28de64ee5559e671353e16f075ecae9f99c7a79a38af5f869aa46 MAC: 517ead924a9d0dc3124507e3393d175ce3ff7c1e96529c6c555ce9e51205e9b2 Cipher key: f06d69cdc7da0faffb1008270bca38f5

Scrypt

AES-128-CTR மற்றும் Scrypt-ஐப் பயன்படுத்தும் சோதனை வெக்டார்:

இடைநிலைகள் (Intermediates):

Derived key: 7446f59ecc301d2d79bc3302650d8a5cedc185ccbb4bf3ca1ebd2c163eaa6c2d MAC Body: edc185ccbb4bf3ca1ebd2c163eaa6c2ddd8a1132cf57db67c038c6763afe2cbe6ea1949a86abc5843f8ca656ebbb1ea2 MAC: 337aeb86505d2d0bb620effe57f18381377d67d76dac1090626aa5cd20886a7c Cipher key: 7446f59ecc301d2d79bc3302650d8a5c

பதிப்பு 1-லிருந்து மாற்றங்கள்

இங்கே (opens in a new tab) வெளியிடப்பட்ட பதிப்பு 1-ல் இருந்த பல முரண்பாடுகளை இந்தப் பதிப்பு சரிசெய்கிறது. சுருக்கமாக அவை:

  • பெரிய எழுத்துக்களின் பயன்பாடு நியாயமற்றது மற்றும் சீரற்றது (scrypt சிறிய எழுத்து, Kdf கலப்பு எழுத்து, MAC பெரிய எழுத்து).
  • முகவரி தேவையற்றது மற்றும் தனியுரிமையை சமரசம் செய்கிறது.
  • Salt என்பது இயல்பாகவே திறவுகோல் பெறுதல் சார்பின் ஒரு அளவுருவாகும், மேலும் இது பொதுவாக கிரிப்டோவுடன் அல்லாமல் அதனுடன் தொடர்புடையதாக இருக்க வேண்டும்.
  • SaltLen தேவையற்றது (அதை Salt-லிருந்து பெறலாம்).
  • திறவுகோல் பெறுதல் சார்பு கொடுக்கப்பட்டுள்ளது, இருப்பினும் கிரிப்டோ அல்காரிதம் கடினமாக குறிப்பிடப்பட்டுள்ளது.
  • Version என்பது இயல்பாகவே எண்ணியல் சார்ந்தது, ஆனால் இது ஒரு சரமாக (string) உள்ளது (ஒரு சரத்தைக் கொண்டு கட்டமைக்கப்பட்ட பதிப்பாக்கம் சாத்தியமாகும், ஆனால் அரிதாகவே மாறும் உள்ளமைவு கோப்பு வடிவமைப்பிற்கு இது நோக்கத்திற்கு அப்பாற்பட்டதாகக் கருதப்படலாம்).
  • KDF மற்றும் cipher ஆகியவை கருத்தியல் ரீதியாக ஒத்த கருத்துகளாகும், ஆனால் அவை வித்தியாசமாக ஒழுங்கமைக்கப்பட்டுள்ளன.
  • MAC என்பது இடைவெளியைப் பொருட்படுத்தாத தரவின் மூலம் கணக்கிடப்படுகிறது(!)

முன்பு இணைக்கப்பட்ட பக்கத்தில் கொடுக்கப்பட்டுள்ள உதாரணத்திற்குச் சமமான செயல்பாட்டைக் கொண்ட பின்வரும் கோப்பை வழங்க, வடிவமைப்பில் மாற்றங்கள் செய்யப்பட்டுள்ளன:

பதிப்பு 2-லிருந்து மாற்றங்கள்

பதிப்பு 2 என்பது பல பிழைகளைக் கொண்ட ஆரம்பகால C++ செயலாக்கமாகும். அதிலிருந்து அனைத்து அத்தியாவசிய கூறுகளும் மாறாமல் உள்ளன.