‘Selfish mining’ elv a gyakorlatban

A tegnapi cikk kapcsán előkerült a 51% attack és a double spending gyakorlati kérdésköre. Ennek kapcsán gondoltam edukációs célzattal bemutatom az egyik legismertebb módszer lényegét, amit anno 2013-ban még Emin Gun Sirer és Ittay Eyal publikált “Majority is not Enough: Bitcoin Mining is Vulnerable” címmel.

Nézzük az egész témát a gyakorlatban. Ugye így épülnek szépen sorjában a blokkok:

A blokkokat különböző minerek/poolok hozzák létre, majd egyszer csak az egyik pool úgy dönt, hogy double spendelni akar. Ekkor az egyik pool úgy dönt, hogy végrehajt egy 51% attackot. Ehhez persze nem árt, ha az összes hashing power jóval több mint 50%-ával rendelkeznek, de szigorúan matematikai alapon erre úgy egyébként 33,3% is elég, ha a difficulty adjustment nem azonnal reagálja le a fő láncon történő hash elvonódást.

A “Selfish miner” (pirossal jelölt blokkok) elkezd gyártani egy blokkot (piros #1-es), miközben a többi miner gyárt egy blokkot az eredeti #0-ás után. A Selfish miner blokkja persze hamarabb készül el, hiszen több hashing powerrel rendelkezik. Ennek okán a selfish miner lánca lenne a hosszabb lánc, ami miatt a kék #1-es el sem készülhetne, azonban:

A Selfish miner NEM propagálja a blokkot, hanem megtartja azt magának. Így az összes többi miner valójában azt hiszi, hogy az eredeti (kék) lánc a leghosszabb.

Ezt követően a Selfish miner elkészít még egy blokkot (piros #2), mire a többi bányász is propagálja az elkészült (kék #1) blokkját. Itt a támadó már pontosan tudja, hogy olyan mennyiségű hashing power van a kezében, amivel stabilan meg tudja csinálni a támadást. Ekkor:

A támadó előveszi a meglévő – a támadásra félrerakott – coinjait és a főláncon beküldi azt az egyik tőzsdére, majd a továbbra is rejtve bányászott láncon (piros) ugyanazt elküldi egy másik tőzsdére. A rejtett (piros) láncról továbbra sem tud senki a Selfish mineren kívül, mivel ezek a blokkok nem kerülnek propagálásra a hálózat felé!

Ezen a ponton a Selfish minernek tovább kell gyártania a blokkokat a piros láncon, míg a főláncon (kék) megvárja, hogy megtörténjen a 20 confirmation, amíg az exchange elkölthetővé teszi a beküldött coinokat. Amikor ez megtörténik, akkor azonnal eladja a coinokat és az ellenértéket valamilyen gyorsan kiküldhető formában, lehetőleg privacy coinok (zcash, monero, stb.) formájában kimenti a tőzsdéről. Megvárja, amíg a kiküldés is confirmálódik, majd fogja magát és elkezdi szépen lassan propagálni a piros lánc blokkjait:

A propagálás végére a nodeok azt fogják látni, hogy megjelent egy újabb lánc, ami sokkal hosszabb, tehát ezt követően mindenki dropolja az eredeti kék láncot és folytatják a felfedett selfish miner által gyártott láncot. Amint a második láncot elkezdik folytatni a rendes bányászok is valójában nem csak, hogy megtörténik ugyanannak a coin mennyiségnek az elküldése egy másik exchangere (xchg#2), de egyből meg is kapja a 20 confirmation-t, tehát azonnal el is költhető lesz a másik láncon és másik exchangen ugyanaz a coin, ami alig néhány blokkal korábban egyszer már elköltöttek a korábbi (kék) láncon. Természetesen ezt a támadó azonnal el is költi/átváltja.

Hogy ki járt rosszul az egésszel? Természetesen az első exchange (XCHG#1), hiszen a longest chainen valójában meg sem történt az az esemény, amikor beküldésre került hozzá egy adat coin és mégis el lett adva az. Tehát összességében  olyan coinokat adott el, ami valójában sosem kerül az exchangere. Itt nyilván az exchange a lehető leggyorsabban megpróbálja értesíteni a fejlesztőcsapatot és a többi exchanget is. Ám ennek reakcióideje akár extrém hosszú is lehet, így szinte biztos, hogy a támadó minden gond nélkül véghez tudja vinni a támadást és az eladásokat, hiszen valójában a második exchange (XCHG#2) jogosan birtokolta az eladásra került coinokat, mivel az ő általa ismert leghosszabb chainen tényleg hozzá kerültek a coinok.

Persze az exchangek több módon is próbálkoznak védekezni ezen támadás ellen. Pl többször is elfordult már, hogy ha egy kriptopénzből hirtelen tűnik el nagy mennyiségű hashing power, akkor az adott algo összes coinjánál felemelik a confirmation-t. Legutóbb pont a héten bekövetkezett zencash támadásnál emelték fel a tőzsdék 20-ról 120-ra a minimum confirmationt. Hogy mit érnek el ezzel? Nyilván időt nyernek, mely idő alatt esetleg ki tudják hámozni, hogy melyik addressen történt double spending, ehhez persze nagyon hatékony együttműködés szükséges az exchangek között, ami centralizált exchangek esetén még talán létezhet is, de az egyre inkább erősödő decentralizált exchange és atomic swap megoldások tükrében ezen támadások valószínűsége sokkal inkább fog növekedni.

Hogy mi erre a megoldás és ‘ha ennyire bugos, akkor egyáltalán miért nem javítják meg…’ típusú kérdésekre az egyezményes válasz: Nem minden arany ami fénylik. Aki minority hash powerrel rendelkező crypto-t bányászik vagy akár csak tart az legyen felkészülve arra, hogy ilyen támadások bármikor bekövetkezhetnek. Aki pedig szeretné magát ettől megóvni, annak:

  • csak majority hash powerrel bányászott PoW coinokat használj. (Bitcoin, Ethereum, LTC, Zcash, Monero, stb.)
  • vagy használj olyan altcoinokat, amikben a konszenzus egyéb módon (pl. PoS, DPoS) van elérve és van is mögötte akkora mennyiségű validity stake, ami alapján feltételezhető, hogy mindenki tisztességes.

 

 

Bookmark the permalink.

11 Comments

  1. Nem hiába kezdenek feljönni a 0x (Ethereum) alapú PoW Coin-ok. Még mindig sokkal biztonságosabb az egyik legnagyobb PoW networkon saját PoW algót futatni mint bármilyen saját P2P megoldást.

    P.S: Az egész mining maga hülyeség, régen kitért már abból a mederből ahol még tényleg az egyenlő elosztást / biztonságot hivatott megoldani. Lényegében már egyiket se nagyon tudja 🙂

  2. Igen, a visszatartott publikálással végrehajtott double spend attack egy valódi veszély -az exchangek számára.
    Én mint felhasználó ebből nem sokat veszek észre függetlenül attól hogy minority vagy majority coin-t használok. A támadás az exchanget éri, és nem érinti az ÉN tranzakcióimat. Ha az exchange túléli a támadást, akkor lenyeli a veszteséget. Ha meg nem éli túl, becsődöl, de akkor minden felhasználó megszívja, függetlenül attól hogy a felhasználó minority vagy majority coinnal üzletelt az exchange-n.

    • …Illetve ez csak a direkt veszteség, de van indirekt is, mégpedig a megtámadott coin árfolyama bizalomveszés miatt bezuhan, és ha ebben tartod a pénzed akkor árfolyamveszeséget szenvedsz el.

      • A bizalomvesztésnek számos negatív hatása lehet, ami nem csak az exchangeknek okozhat DIREKT kárt. Ha pl a dev team rosszul reagálja le a támadást (pl. nem csinál semmit…), akkor olyan szintű bizalomvesztés is bekövetkezhet, ami miatt az egész lánc értéke totálisan nullára íródik le. ez innentől nem csak az exchangek problémája, hanem az adott coin ökoszisztémájának minden szereplője elszenvedi.

    • Itt a gond, hogy az emberek mindig csak a saját Coinukig látnak, de valójában ha valaki bukik a networkon akkor mindenki bukik. Ha egy networkon nincs annyi bizalom, hogy egy Decentralizált Exchange akadálymentesen menjen mert folyamatos rogue blockok keletkezhetnek akkor az a Blockchain 0$-t ér.

      És jelenleg pont itt tartunk, hónapok óta állóvíz az egész Cryptopiac, cserébe azért a Scammerek és az MLM ügynökön böszen b****át az embereket akik ezért inkább negatívan csalódnak a blockchainben és végső soron ezt mindenki megszívja.

      • Mindazon túl, hogy egyébként tényleg látszólagosan állóvíz a piac, hiszen nincs 2 hetente “itt az újabb ATH!!!!” post, azért ezen az állóvízen brutálisan sokan brutálisan sokat keresnek. Arról nem beszélve, hogy olyan technológiák poppolnak ki a semmiből, amik fontos alapján fogják képezni egy újabb potenciális hegymenetnek.

  3. Szia, Csaba,
    biztosan sokan szívesen vennék ha egy – akár rövid cikk erejéig kitérnél a feltörekvő, viszonylag friss kínai coinok rövid- és hosszú távú jövőjéről , életképességéről, hatásairól, Vechain, Ontology, Iconx. köszönjük eddigi blogjaid

  4. Vagy arról, hogy az EOS start mekkora drámába kezd torkolni. Elöszőr a Go / No Go bal****kodás most pedig a 15% Vote akar nagyon lassan összejönni.

    https://eosauthority.com/voting

    Mert az emberek nem mernek szavazni. Hardware wallet vagy valami biztonságos megoldás pedig nincs. Sakk-matt 😀

Szólj hozzá: