‘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.

 

 

Mekkora növekedési pálya van a Bitcoinban?

Tegnap volt szerencsém a Bitcoin Budapest által szervezett Bitcoin Drinkup rendezvényen eszmét cserélnem a hazai $crypto közösség néhány prominensebb tagjával, akikkel sok egyéb téma között két nagyon fontos és szerintem kurrens téma is előkerült, ezek pedig a: hogyan kellene definiálni a Bitcoint és mekkor növekedési pálya van benne? A két kérdést erősen összefügg, hiszen a növekedési pálya erősen függ a definíciótól. A tegnapi diskurzus egyrészt azért osztom meg a blogon, mert szerintem mások számára is érdekes lehet a konklúzió, másrészt érdekel, hogy az olvasókban hogyan manifesztálódik ezen kérdésekre a válasz.

A Bitcoin definíciója kapcsán a pénz (currency) és az árucikk (commodity) között lamentáltunk hosszan, a növekedési pálya alapján pedig nemes egyszerűséggel a nagyságrendi növekedéseket és azok lehetséges hatását vizsgáltuk. Akinek nincs kedve az egész okfejtést végig olvasni, azoknak TLDR: Függetlenül a most folyó scaling debate-től a Bitcoin jövője az, hogy commodity termék legyen, onchain tranzakcióval ezzel már soha nem fogunk sört vásárolni a csaposnál. A növekedési pálya kapcsán pedig a 10x-t mindenki reálisnak tartotta, az ennél nagyobb növekedés már komoly constrainteket generált sokakban. (Az egész az én lazán bedobott 1000x-es hasraütésemből indult ki.)

Folytatás…

Csupa jó hír így vasárnapra (NEO, BTC, LTC, ADX, MCO és LISK kapcsán)

Mai témák: NEO roadmap és újdonságok, BTC-BCH bányász csiki-csuki, rocketjumpoló kicsi altok (ADX, MCO, LISK).

Kezdem is a lelkületemhez legközelebb álló NEO-val… francokat: BTC-BCH csiki-csukival:

Hajnali 4:30 körül megtörént a difficulty adjustment a Bitcoin Cash láncon: 291G-ig ugrott a nehézségi szint. Mondjuk ez sokkal kevesebb mint amit én számoltam, de mentségemre szolgáljon, hogy nem nagyon tudok számolni. Az előző ciklusból már tudhatjuk, hogy erről a difficulyról kerek 30 óra alatt tudják leimádkozni a nehézségi szinten 89G-re. Bár ez valószínűleg ide már nem lesz elég köszönhetően a folyamatos BCH árfolyam gyengülésnek.

Ha leviszik további 1-2 ciklussal 60G körülre, akkor újra mehetnek át a bányászok kaszálni. Apró kitérőként megemlítem, hogy amennyiben tényleg leviszik 60G alá, akkor újra profitábilissá válnak a régi S1 és S3 antminerek is. (Ennek majd még pontosabban utána fogok számolni, de saccra kijön). Szóval én is lelkesen előkapartam a sufiból a két jó öreg S1-es bányászhangyámat ami anno rajtam ragadt a BTC farmból. Ma életet lehellek beléjük. Aki hasonlóképpen akar tenni, annak érdemes ezt megcsinálni még ma, mivel a legjobban közvetlenül a difficulty adjustment után lehet haszálni ezekkel a masinákkal amíg még nem ugranak át a nagy poolok (ez kb 3-4 órás időablak a EDA diff drop után). Holnap beszámolok ezzel kapcsolatos tapaszatalaimról. (ha lesznek…)

Na de nézzük a BTC láncot: A csiki-csuki ( == bányászok DARI szerinti profitábilisebb láncra ugrálása) egyelőre nem nagyon regette meg a BTC-t.  Perpillanat hatalmas tempóval darálják le a bányászok a mempool hátralékot. Alig 12 óra alatt ledarálták a mempoolban felgyűlt unconfirmed tx-ek több mint 60%-át, bár ehhez kellett egy tegnap délutáni iszonyatosan mákos időszak is, amikor több poolnál is egyszerre ütött be a hashing luck. Ami a jó hír: a jelenlegi tempóban haladva a mempoolból az összes 10sat/B feletti tétel ki fog ürülni az újabb miner láncváltásig, ami a rossz hír, hogy még így is fog maradni baromi nagy hátralék a 0-5 sat/B közötti tartományban. Ezek szokás szerint tele vannak pakolva óriás tranzakciókkal (olyan tranzakciók amikben néhány satoshit küldenek több ezer inputról vagy outputra). Ugye ezekre a tx-ekre mondja a /r/bitcoin oldal, hogy ezek a “bigger blockosok által spammelt zsaroló tételek”, velük szemben a /r/btc oldal pedig azt, hogy ez aljas rágalom és nincs itt semmi látnivaló és miért nincs már aktiválva a 2x… Én meg ugye inkább kussolok a saját ezirányú véleményem kapcsán, mielőtt újra vasvillára leszek tűzve.

Folytatás…

748 Sol/sec Zcash (equihash) teljesítmény egy GTX 1080 Ti kártyából

A korábbi Zcash cikkben már említettem, hogy egy eléggé ütött-kopott gamer géppel (4 éves szerzeményem) fogtam neki a Zcash bányászatnak. Hírtelen ötlettől vezérelve és némi költés/megtérülés számítás, plusz némi internetes utánajárás után úgy döntöttem, hogy megnézem mit lehet most kihozni a piacon elérhető legjobb nVidia asztali GPU-ból. Ez egyébként a Nvidia Geforce GTX 1080 Ti-ből a ROG STRIX verzió, amire rápakoltak 11Gb memóriát. A beruházás nem volt olcsó, ennyiből vetten anno a bitcoin ASIC minereimet is, viszont az előzetes kalkulációk alapján, ha tudja hozni a kártya az elvárásokat, akkor legkésőbb 4 hónapon belül visszatermeli a saját árát. Az eredményt már ellőttem a címben (748 Sol/s), de álljon itt akkor a screenshot is az első körös mérésekről:

Folytatás…

Zcash (ZEC) – praktikus tanácsok bányászathoz

Néhány éve követem a cryptocurrency bányász közösségeket és időszakosan bele-bele ugrok egy-egy konkrét coin farmolásába is. Most éppen a Zcash van a soron – akinek nem mond semmit a Zcash (ZEC), annak erről részletes cikk: [link], amivel kapcsolatban megosztanék néhány friss és nem annyira friss tapasztalatot.

Egyrészt a Zcash erősen ASIC mining ellen védett algoritmus, így várhatóan hosszú távon védett a folyamatos bányász erőforrás leértékelődéstől. Erről a témáról az előző cikkben már részletesen írtam, de gyakorlati szempontból azt prognosztizálom, hogy azok a bányász gépek, amik MA képesek profittal termelni, azok legalább egy évig képesek is lesznek ezt hozni. Optimális körülmények között ez akár még több ideig is fennállhat. A bányászati felezési idő a Zcash kapcsán is 4 év, hasonlóan a bitcoinhoz. (felezési idő: Az a pont amikortól már csak fele annyi jutalom jár egy block kibányászásáért). A jó hír, hogy a Zcash kapcsán még csak az első félévnél tartunk. 

Gyors kitekintés arról hogy mi is a bányászat: Ha most találkozol először ezzel a kifejezéssel, akkor minden bizonnyal értetlenül állsz az előtt, hogy mi is ez és miért is lehet ebből (crypto) pénzt keresni. A legtöbb crpyto pénz esetén maga a fizetőeszköz (legyen az akár bitcoin, LTC vagy akár Zcash) a bányász tevékenységért cserébe kerül ‘kifizetésre’ a bányászoknak. Ez az egyetlen módja annak, hogy új coin keletkezzen. Ezt kvázi fogadjátok úgy el mint a pénznyomtatást. A bányászok a munkájukért cserébe teljesen új addig ki nem adott cryptopénzt kapnak. A bányászat egy nagyon bonyolult számításigényes művelet, amit ráadásul egy algoritmus folyamatosan képes bonyolultabbá vagy éppen egyszerűbbé tenni, függően attól, hogy éppen mennyi aktív bányász van és mekkora sebeséggel tudnak bányászni. Ez az algoritmus szabályozza, hogy közel azonos ideig tartson egy block bányászata ma és egy év múlva is. A bányászat nem feltétlenül egy hobbi, amiért a munkaállomásunk erőforrásait csutkán kihajtva (crpyto) pénzt kapunk. Valójában ez a folyamat a tranzakciók hitelesítésében játszik szerepet. Nagyjából 2,5 percenként kerül kiadásra egy-egy újabb blokk, ami tartalmazza az éppen futó ZEC tranzakciókat is. Tehát a bányászok valójában a tranzakciók hitelesítésével foglalkoznak. A hitelesítés során kerül eldöntésre, hogy a Zcash blockchainből éppen utalni kíván darabka valóban a küldő tulajdonában van-e és jogosan rendelkezik felette. Ez kvázi azonos folyamat mint amit a bankod végez amikor egy utalásodnál elvégzi a fedezet vizsgálatot. Ahogy a bankszámlád teljes tartalmát nem tudod gyorsan elküldeni kétszer két különböző helyre (ezzel új pénzt generálva), ugyanígy nem tudod ezt eljátszani a blockchainben található Zcash coinokkal sem. Ezen folyamatot a bányászok biztosítják. 

Folytatás…