Hogyan hozhatunk létre Ethereum pénztárca címet privát kulcsból

Az első cikk a sorozat, mi generált egy bitcoin privát kulcs: 60cf347dbc59d31c1358c8e5cf5e45b822ab85b79cb32a9f3d98184779a9efc2.

Itt ezt a kulcsot fogjuk használni a nyilvános cím, majd az adott privát kulcs Ethereum pénztárca címének megszerzéséhez.

A Bitcoin pénztárca címének létrehozása a magánkulcsból kissé bonyolult. Itt sokkal egyszerűbb lesz a folyamat. Egy hash függvényt kell alkalmaznunk a nyilvános kulcs megszerzéséhez, egy másikat pedig a cím megszerzéséhez.

Tehát kezdjük.

Nyilvános kulcs

Ez a rész szinte megegyezik azzal, amit a Bitcoin cikkében tárgyaltunk, így ha ezt elolvassa, akkor kihagyhatja (hacsak nem szükséges frissítés).

Az első dolog, amit meg kell tennünk, az az, hogy az ECDSA-t vagy az elliptikus görbe digitális aláírás algoritmust alkalmazzuk a privát kulcsunkra. Az elliptikus görbe az a görbe, amelyet az és y² = x³ + ax + ba választott egyenlet határoz meg . Az ilyen görbéknek egész családja van, amelyeket széles körben ismernek és használnak. A Bitcoin a secp256k1 görbét használja . Ha többet szeretne megtudni az elliptikus görbe rejtjelezésről, erre a cikkre utalok.ab

Az Ethereum ugyanazt az elliptikus görbét használja, secp256k1 , így a nyilvános kulcs megszerzésének folyamata mindkét kriptovalutában azonos.

Az ECDSA alkalmazásával a magánkulcsra egy 64 bájtos egész számot kapunk, amely két 32 bájtos egész szám, amelyek együttesen összefűzve az elliptikus görbe pontjának X és Y értékét képviselik.

Példánkra kaptuk 1e7bcc70c72770dbb72fea022e8a6d07f814d2ebe4de9ae3f7af75bf706902a7b73ff919898c836396a6b0c96812c3213b99372050853bd1678da0ead14487d7.

A Pythonban így néz ki:

private_key_bytes = codecs.decode(private_key, ‘hex’) # Get ECDSA public key key = ecdsa.SigningKey.from_string(private_key_bytes, curve=ecdsa.SECP256k1).verifying_key key_bytes = key.to_string() key_hex = codecs.encode(key_bytes, ‘hex’)

Megjegyzés: amint a fenti kódból is látszik, egy módszert használtam a ecdsamodulból, és ezzel dekódoltam a privát kulcsot codecs. Ez inkább a Pythonra és kevésbé magára az algoritmusra vonatkozik, de elmagyarázom, mit teszünk itt az esetleges zavarok eltávolítása érdekében.

A Pythonban legalább két osztály létezik, amelyek megtarthatják a magán- és a nyilvános kulcsokat: „str” és „byte”. Az első egy karakterlánc, a második pedig egy bájt tömb. A Python kriptográfiai módszerei egy „bájt” osztállyal működnek, bevitelnek tekintve azt eredményül adják vissza.

Most van egy kis fogás: mondjuk egy karakterlánc 4f3cnem egyenlő a bájt tömbvel 4f3c. Inkább egyenlő a bájt tömb két elemmel, O&lt ;. És ezt teszi a t he codecs.decode módszer: átalakítja a karakterláncot bájt tömbgé. Ez ugyanaz lesz minden kriptográfiai manipuláció esetében, amelyet ebben a cikkben fogunk végrehajtani.

Pénztárca címe

Miután megszereztük a nyilvános kulcsot, kiszámolhatjuk a címet. Most, a Bitcointól eltérően, az Ethereum ugyanazokkal a címekkel rendelkezik mind a fő, mind az összes teszthálózaton. A felhasználók megadják azt a hálózatot, amelyet később használni akarnak a folyamat során, amikor tranzakciót hajtanak végre és aláírnak.

Ahhoz, hogy címet hozzunk létre a nyilvános kulcsból, csak annyit kell tennünk, hogy alkalmazzuk a Keccak-256-ot a kulcsra, majd vesszük az eredmény utolsó 20 bájtját. És ez az. Nincs más hash funkció, nincs Base58 vagy bármilyen más konverzió. Az egyetlen dolog, amire szükséged van, a "0x" hozzáadása a cím elejéhez.

Itt van a Python kód:

public_key_bytes = codecs.decode(public_key, ‘hex’) keccak_hash = keccak.new(digest_bits=256) keccak_hash.update(public_key_bytes) keccak_digest = keccak_hash.hexdigest() # Take the last 20 bytes wallet_len = 40 wallet = ‘0x’ + keccak_digest[-wallet_len:]

Ellenőrző összeg

Most, amint emlékszel, a Bitcoin létrehozza az ellenőrző összeget a nyilvános kulcs kivonatolásával és az eredmény első 4 bájtjának felvételével. Ez minden Bitcoin-címre igaz, így az ellenőrző összegű bájtok hozzáadása nélkül nem kaphatja meg az érvényes címet.

Az Ethereumban a dolgok nem így működnek. Kezdetben nem voltak ellenőrző összegű mechanizmusok a kulcs integritásának ellenőrzésére. 2016-ban azonban Vitalik Buterin bevezett egy ellenőrző összegű mechanizmust, amelyet azóta a pénztárcák és a pénzváltók is átvettek.

Ellenőrző összeg hozzáadása az Ethereum pénztárca címéhez megkülönbözteti a kis- és nagybetűket.

Először meg kell szereznie a cím Keccak-256 kivonatát. Vegye figyelembe, hogy ezt a címet a hash függvénynek kell átadni az 0xalkatrész nélkül .

Másodszor, ismétli a kezdeti cím karaktereit. Ha a kivonat i- edik bájtja nagyobb vagy egyenlő 8-val, akkor az i- edik cím karakterét nagybetűvé alakítja , különben kisbetűvel hagyja.

Végül hozzáadjuk 0xa kapott karakterlánc elejéhez. Az ellenőrző összeg címe megegyezik az eredetivel, ha figyelmen kívül hagyja az esetet. De a nagybetűkkel bárki ellenőrizheti, hogy a cím valóban érvényes-e. Az ellenőrző összeg ellenőrzésének algoritmusát az itt linkelt oldalon találja meg.

Amint a javaslatban olvashatja, ennek az ellenőrző összegű rendszernek

"Címenként átlagosan 15 ellenőrző bit lesz, és annak nettó valószínűsége, hogy egy véletlenszerűen létrehozott cím, ha hibásan beírja, véletlenül átmegy egy ellenőrzésen, 0,0247%."

És itt van a kód az ellenőrző összeg hozzáadásához az Ethereum címhez:

checksum = ‘0x’ # Remove ‘0x’ from the address address = address[2:] address_byte_array = address.encode(‘utf-8’) keccak_hash = keccak.new(digest_bits=256) keccak_hash.update(address_byte_array) keccak_digest = keccak_hash.hexdigest() for i in range(len(address)): address_char = address[i] keccak_char = keccak_digest[i] if int(keccak_char, 16) >= 8: checksum += address_char.upper() else: checksum += str(address_char)

Következtetés

Mint láthatja, az Ethereum címének létrehozása sokkal egyszerűbb, mint a Bitcoin esetében. Mindössze annyit kell tennünk, hogy alkalmazzuk az ECDSA-t a nyilvános kulcsra, majd alkalmazzuk a Keccak-256-ot, és végül vegyük ki a hash utolsó 20 bájtját.

Ha játszani akarsz a kóddal, közzétettem a GitHub adattárban.

Tanfolyamot készítek a kriptopénzekről itt a freeCodeCamp News oldalon. Az első rész a blokklánc részletes leírása.

Véletlenszerű gondolatokat is közzéteszek a titkosítással kapcsolatban a Twitteren, ezért érdemes megnézni.