Ugrás a fő tartalomra
Change page

Kulcsok a proof-of-stake Ethereumban

Utolsó módosítás: @Satglow(opens in a new tab), 2024. április 11.

Az Ethereum a nyilvános-privát kulcspáron alapuló kriptográfia segítségével biztosítja a felhasználói eszközöket. A nyilvános kulcs az Ethereum-cím alapjául szolgál, tehát látható a nyilvánosság számára, és egyedi azonosítóként használják. A privát (vagy titkos) kulcshoz mindig csak a számla tulajdonosa férhet hozzá. A privát kulcsot tranzakciók és adatok aláírására használják, hogy a kriptográfia bizonyítani tudja, hogy a tulajdonos jóváhagyja az adott privát kulcs műveletét.

Az Ethereum kulcsait elliptikus görbe kriptográfiával(opens in a new tab) generálják.

Amikor azonban az Ethereum proof-of-work mechanizmusról proof-of-stake-re váltott, egy új típusú kulcs került az Ethereumba. Az eredeti kulcsok továbbra is pontosan ugyanúgy működnek, mint korábban – a számlákat biztosító elliptikus görbén alapuló kulcsok nem változtak. A felhasználóknak azonban új típusú kulcsra volt szükségük ahhoz, hogy részt vehessenek a proof-of-stake-ben az ETH letétbe helyezésével és a validátorok futtatásával. Ez az igény a skálázhatóság miatt érdekes, hogy a nagyszámú validátorok közötti üzenetekhez olyan kriptográfiai módszer legyen, amely könnyen aggregálható, így csökkenti a hálózati konszenzus kommunikációs igényét.

Ez az új típusú kulcs a Boneh-Lynn-Shacham (BLS) aláírási sémát használja(opens in a new tab). A BLS lehetővé teszi az aláírások nagyon hatékony aggregálását, ugyanakkor az aggregált egyedi validátorkulcsok visszafejtését is, és ideális a validátorok közötti műveletek kezelésére.

A validátorkulcsok két típusa

A proof-of-stake-re való átállás előtt az Ethereum-felhasználóknak csak egyetlen elliptikus görbén alapuló privát kulccsal volt hozzáférésük a pénzükhöz. A proof-of-stake bevezetésével az önálló letétbe helyezőknek szükségük volt egy validátorkulcsra és egy kivételi kulcsra is.

A validátorkulcs

A validátor aláírókulcs két elemből áll:

  • Validátor privát kulcs
  • Validátori nyilvános kulcs

A validátor privát kulcsának célja a láncon belül végrehajtott műveletek, például a blokkjavaslatok és a tanúsítások aláírása. Emiatt ezeket a kulcsokat egy „forró” tárcában kell tartani (mindig online és elérhető legyen).

Ennek a rugalmasságnak az az előnye, hogy a validátor aláírókulcsok gyorsan mozgathatók egyik eszközről a másikra, azonban ha elvesznek vagy ellopják azokat, a tolvaj többféleképpen is képes lehet visszaélni azokkal:

  • A validátort súlyos és kizárással járó büntetés éri:
    • Amikor blokkelőterjesztő, akkor két különböző Beacon blokkot javasol és ír alá ugyanarra a slotra
    • Tanúsítóként olyan tanúsítást hagy jóvá, amely „körbeölel” egy másikat
    • Tanúsítóként két eltérő tanúsítást ír alá ugyanarra a dologra
  • Önkéntes kilépésre kényszeríti, amely a validátor letétjét feloldja és a kivételi kulcs tulajdonosa hozzáfér az ETH-egyenleghez

A validátor nyilvános kulcsa szerepel a tranzakció adataiban, amikor egy felhasználó ETH-t fizet be a letéti szerződésbe. Ez az úgynevezett letéti adat, amely lehetővé teszi az Ethereum számára a validátor azonosítását.

Kivételi hitelesítő adatok

Minden validátor rendelkezik egy tulajdonsággal, amelyet visszavonási hitelesítő adatoknak neveznek. Ez a 32 bájtos mező vagy 0x00-val kezdődik, ami a BLS kivonási hitelesítő adatokat jelenti, vagy az eleje 0x01, ami a végrehajtási címre mutató hitelesítő adatokat jelenti.

A 0x00 BLS kulcsokkal rendelkező validátoroknak frissíteniük kell ezeket a hitelesítő adatokat, hogy azok egy végrehajtási címre mutassanak a többletegyenleg kifizetéséhez vagy a letétkivonáshoz. Ezt úgy lehet megtenni, hogy a kezdeti kulcsgenerálás során a letétbe helyezési adatokban megadunk egy végrehajtási címet, VAGY úgy, hogy a kivételi kulcsot egy későbbi időpontban felhasználjuk egy BLSToExecutionChange üzenet aláírására és továbbítására.

A kivételi kulcs

A kivételi kulcsra a kivételi hitelesítő adatok frissítéséhez van szükség, hogy azok egy végrehajtási címre mutassanak, ha a kezdeti befizetés során ezt nem állították be. Ez lehetővé teszi a felhasználók számára a többletegyenleg-kifizetések feldolgozásának elindítását, és a letétbe helyezett ETH teljes kivételét is.

Ahogy a validátorkulcsok, a kivételi kulcsok is két elemből állnak:

  • Kivételi privát kulcs
  • Kivételi nyilvános kulcs

Ennek a kulcsnak az elvesztése a kivételi hitelesítő adatok 0x01 típusra történő frissítése előtt a validátoregyenleghez való hozzáférés elvesztését jelenti. A validátor továbbra is aláírhatja a tanúsításokat és a blokkokat, mivel ezekhez a műveletekhez a validátor privát kulcsa szükséges, azonban a kivételi kulcsok elvesztése miatt erre igen kevés a motivációja.

A validátorkulcsok és az Ethereum-számlakulcsok szétválasztása lehetővé teszi, hogy egyetlen felhasználó több validátort is futtasson.

validátorkulcs ábrája

Kulcsok származtatása egy kulcsmondatból

Ha minden 32 ETH feltöltéséhez 2 független kulcsból álló új készletre lenne szükség, a kulcskezelés nehézkessé válna, különösen a több validátort futtató felhasználók számára. Ehelyett több validátorkulcsot lehet egyetlen titokból levezetni, és ennek a titoknak a tárolása lehetővé teszi a hozzáférést több validátorkulcshoz.

Az emlékeztető kódszó(opens in a new tab) és az útvonalak olyan kiemelkedő jellemzők, amelyekkel a felhasználók gyakran találkoznak, amikor hozzáférnek(opens in a new tab) a tárcájukhoz. Az emlékeztető kódszó egy szavakból álló sorozat, amely a privát kulcs kezdeti magjaként szolgál. További adatokkal kombinálva az emlékeztető kódszó egy „mesterkulcs” néven ismert hasht generál. Ezt úgy lehet elképzelni, mint egy fa gyökerét. Ebből a gyökérből hierarchikus útvonal segítségével elágazások vezethetők le, így a gyermek csomópontok a szülői csomópont hashjének és a fán belüli indexének kombinációjaként létezhetnek. Tekintse meg a BIP-32(opens in a new tab) és BIP-19(opens in a new tab) szabványokat az emlékeztetőkódszó-alapú kulcsgeneráláshoz.

Ezek az útvonalak a következőképpen néznek ki, ami ismerős lehet azoknak, akik már dolgoztak hardvertárcákkal:

1m/44'/60'/0'/0`

Az ebben az elérési útvonalban lévő perjelek a következőképpen választják el a privát kulcs összetevőit:

1master_key / purpose / coin_type / account / change / address_index

Ez a logika lehetővé teszi a felhasználók számára, hogy egyetlen emlékeztető kódszóhoz a lehető legtöbb validátort csatolják, mivel a fa gyökere közös lehet, és a differenciálás az elágazásokban történhet. A felhasználó az emlékeztető kódszóból tetszőleges számú kulcsot származtathat.

1 [m / 0]
2 /
3 /
4[m] - [m / 1]
5 \
6 \
7 [m / 2]

Az egyes ágakat / választja el egymástól, így m/2 azt jelenti, hogy a mesterkulccsal kezdjük, és a 2. ágat követjük. Az alábbi ábrán egyetlen emlékeztető kódszót használunk három kivételi kulcs tárolására, mindegyikhez két validátor tartozik.

validátorkulcs-logika

További olvasnivaló

Hasznosnak találta a cikket?