इथेरियम का पता सार्वजनिक कुंजी केकेकैक256 के अंतिम 20 बाइट्स है। सार्वजनिक कुंजी एल्गोरिदम secp256k1 है, वही बिटकोइन में उपयोग किया जाता है।
क्योंकि यह एक अण्डाकार वक्र एल्गोरिथम है, सार्वजनिक कुंजी एक (x, y) जोड़ी है जो अण्डाकार वक्र पर एक बिंदु से मेल खाती है।
सार्वजनिक कुंजी x और y का संयोजन है, और यही हम हैश लेते हैं।
कोड नीचे दिया गया है।
from ecpy.curves import Curve from ecpy.keys import ECPublicKey, ECPrivateKey from sha3 import keccak_256 private_key = 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 cv = Curve.get_curve('secp256k1') pv_key = ECPrivateKey(private_key, cv) pu_key = pv_key.get_public_key() # equivalent alternative for illustration: # concat_x_y = bytes.fromhex(hex(pu_key.Wx)[2:] + hex(pu_key.Wy)[2:]) concat_x_y = pu_key.Wxto_bytes(32, byteorder='big') + pu_key.Wyto_bytes(32, byteorder='big') eth_addr = '0x' + keccak_256(concat_x_y).digest()[-20:].hex() print('private key: ', hex(private_key)) print('eth_address: ', eth_addr)
ईसीपी लाइब्रेरी यहां https://github.com/cslashm/ECPy है। यह पुस्तकालय अजगर में अण्डाकार वक्र गणित को लागू करता है, इसलिए यह बिटकॉइन सी कार्यान्वयन के चारों ओर एक आवरण के रूप में तेज़ नहीं होगा, जिसका उपयोग कॉइनकर्व लाइब्रेरी द्वारा किया जाता है।
हालाँकि, अजगर कार्यान्वयन आपको सार्वजनिक कुंजी प्राप्त करने के लिए उपयोग किए जाने वाले अण्डाकार वक्र गणित को चरण दर चरण देखने की अनुमति देता है।
आप क्रूर बल के साथ एक एथेरियम वैनिटी पता उत्पन्न करने के लिए इस कोड का उपयोग कर सकते हैं, लेकिन सावधान रहें कि यदि आपकी यादृच्छिकता का स्रोत सुरक्षित नहीं है या अपर्याप्त यादृच्छिकता है, तो आप इसके समान हैक के शिकार हो सकते हैं।
आप किसी सिक्के को 256 बार पलट कर और अगर हेड है तो 1 और टेल है तो 0 लिख कर खुद एक निजी कुंजी से एथेरियम एड्रेस जेनरेट कर सकते हैं।
मान लीजिए कि आपको निम्नलिखित परिणाम मिलते हैं
result = b'1100001011001101010001001100101000001111101101111011001000110001101100011101101011010001011000101111100110010101001001101110111011001000100001010101111100001100100110010010111110110100000010011111100000110101001110000101100101011111001101010001100001000'
आप निम्न पायथन कोड का उपयोग करके इसे एक निजी कुंजी में बदल सकते हैं
# 2 means base 2 for binary private_key = hex(int(result, 2)) # private key is 0x1859a89941f6f646363b5a2c5f32a4ddd910abe19325f6813f06a70b2be6a308
फिर, उस निजी कुंजी को उपरोक्त अनुभाग से कोड में प्लग करें और आपने अपना पता अपनी यादृच्छिकता से उत्पन्न किया है।
16-पक्षीय पासा को 64 बार रोल करके और चरित्र द्वारा निर्मित हेक्स स्ट्रिंग को लिखकर एक ही चीज़ को तेज़ी से पूरा किया जा सकता है। ध्यान रखें कि अधिकांश पासों में शून्य संख्या का प्रतिनिधित्व नहीं होता है, इसलिए आपको प्रत्येक परिणाम से 1 घटाना होगा।
यदि आपके पास केवल पारंपरिक छह-पक्षीय हैं, तो आप बेस 6 में एक स्ट्रिंग लिख सकते हैं (प्रत्येक रोल से 1 घटाना न भूलें) और बाइनरी में आधार रूपांतरण करें। जब तक आपके पास अपनी निजी कुंजी के लिए कम से कम 256 बिट न हों तब तक आपको घुमाते रहना होगा। यदि आप यादृच्छिकता के बारे में विशेष रूप से पागल हैं, तो आप कैसीनो ग्रेड पासा का उपयोग कर सकते हैं।
पायथन के लिए बिल्ट-इन रैंडम नंबर लाइब्रेरी का उपयोग करते समय सावधान रहें। यह क्रिप्टोग्राफिक रूप से सुरक्षित होने का इरादा नहीं है। यदि आप विषय के लिए नए हैं तो हम अनुशंसा करते हैं कि आप क्रिप्टोग्राफ़िक रूप से सुरक्षित यादृच्छिकता से परिचित हों।
आम तौर पर, आप इस पद्धति का उपयोग करके एक हार्डवेयर वॉलेट को इनिशियलाइज़ नहीं कर सकते हैं क्योंकि वे जिस 24 शब्द रिकवरी वाक्यांश का उपयोग करते हैं वह लेन-देन पर हस्ताक्षर करने के लिए उपयोग की जाने वाली निजी कुंजी के समान नहीं है। 24 शब्द पुनर्प्राप्ति वाक्यांश का उपयोग विभिन्न प्रकार के क्रिप्टो वॉलेट के लिए कई निजी कुंजियों को प्राप्त करने के लिए किया जाता है।
वक्र योग दृश्यात्मक रूप से कैसा दिखता है, इसका वर्णन करने के लिए पहले से ही बहुत सारी सामग्री ऑनलाइन मौजूद है, इसलिए हम यहां निम्न स्तर पर इसका वर्णन करेंगे।
Secp256k1 अण्डाकार वक्र y^2 = x^3 + y (mod p) के आकार को परिभाषित करता है जहाँ p अभाज्य संख्या 115792089237316195423570985008687907853269984665640564039457584007908834671663
है
या 2^256 – 2^32 – 977
अभाज्य p को वक्र के क्रम से भ्रमित नहीं होना चाहिए। प्रत्येक मान 0 <n <p उपरोक्त समीकरण को संतुष्ट नहीं करता है। हालांकि, वक्र पर संचालन बंद होने की गारंटी है। अर्थात्, यदि दो मान्य बिंदुओं को जोड़ा या गुणा किया जाता है, तो परिणाम वक्र पर एक मान्य संख्या होगी।
Secp256k1 में अन्य महत्वपूर्ण पैरामीटर प्रारंभिक बिंदु जी है। चूंकि जी अंडाकार वक्र पर एक बिंदु है, यह 2-आयामी है और इसमें पैरामीटर हैं
x = 55066263022277343669578718895168534326250603453777594175500187360389116729240 y = 32670510020758816978083085130507043184471273380659243275938904335757337482424
जी देखने के लिए एक वैध बिंदु है, हम संख्याओं को पायथन में प्लग कर सकते हैं
x = 55066263022277343669578718895168534326250603453777594175500187360389116729240 y = 32670510020758816978083085130507043184471273380659243275938904335757337482424 p = 115792089237316195423570985008687907853269984665640564039457584007908834671663 assert pow(y, 2, p) == (pow(x, 3) + 7) % p
एक सार्वजनिक / निजी कुंजी जोड़ी बनाने के लिए, एक यादृच्छिक संख्या बनाई जाती है (यह गुप्त कुंजी है)। बिंदु G को स्वयं में s बार जोड़ा जाता है और नया बिंदु (x, y) सार्वजनिक कुंजी है। G से s प्राप्त करना संभव नहीं है।
G को अपने आप में s बार जोड़ना s * G को गुणा करने के समान है। वास्तव में, हम पुस्तकालय द्वारा प्रदान किए जा रहे कुछ सार को अलग करके इस ऑपरेशन को निचले स्तर पर देख सकते हैं।
from ecpy.curves import Curve from sha3 import keccak_256 private_key = 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 cv = Curve.get_curve('secp256k1') pu_key = private_key * cv.generator # just multiplying the private key by generator point (EC multiplication) concat_x_y = pu_key.x.to_bytes(32, byteorder='big') + pu_key.y.to_bytes(32, byteorder='big') eth_addr = '0x' + keccak_256(concat_x_y).digest()[-20:].hex() print('private key: ', hex(private_key)) print('eth_address: ', eth_addr)
सार्वजनिक कुंजी बस निजी कुंजी है जिसे secp256k1 अण्डाकार वक्र पर बिंदु G से गुणा किया जाता है। इतना ही।
आज ही हमारे उन्नत ब्लॉकचैन बूटकैम्प को देखें और एक ब्लॉकचेन डेवलपर बनें जो कठिन चीजों को जानता है जो अन्य कोडर नहीं जानते।
यहाँ भी प्रकाशित हुआ।