Mekkora esélye van annak, hogy valaki Bitcoint találjon?

Tavaly októberben értekeztem hosszabban az egyik legnépszerűbb Bitcoin körüli tévhitről: A kvantumszámítógépek fenyegetéséről. Most találtam egy igen látványos levezetést, ami kapcsán időszerűnek éreztem elővenni a másik igen népszerű témát: Nevezetesen, hogy vajon mekkora esélye van egy balanceszal rendelkező address privát kulcsának eltalálására? Közismert tény, hogy a privát kulcs->publikus kulcs->address transzformáció lépései között lényegében csak matematikai műveletsor van (ECDSA+2SHA256 és a végére még egy RIPEMD-160), tehát a megfelelő erőforrások bevetésével akár találomra el is lehet kezdeni végigpróbálgatni az összes lehetséges privát kulcsot mondván előbb-utóbb csak belefutunk egy olyan publikus kulcsba, ami mögött vagyon is található. Mivel a Bitcoin címek 256 biten képződnek, így a teljes címtartomány is 256 biten képződik. Jelenleg az UTXO táblázat 53.417.437 db tételt tartalmaz, tehát ennyi addressen van legalább egy morzsányi bitcoin.

A következő ábra azt mutatja be, hogy mekkora az eséllyel lehet beletrafálni egy értéket is tartalmazó privát kulcsba véletlenszerű próbálgatással, szemben mekkora esélye van a powerball nevű amerikai lottó megnyerésének. (5+1-et húznak 1-69-ig). A teljes powerball nyerési esélye egyébként lényegesen alacsonyabb a hazai ötös lottónál (utóbbiban kb 44 millió variáció nyerhet, az amerikai példában viszont 292 millió kombináció játszik).

Folytatás…

Soha nem lesz 21 millió Bitcoin…

Temérdek szörnyűséggel teli ez a mai nap… Nem elég, hogy le kellett zárnom a lightning network nodeom összes csatornáját (pedig már 30 aktív csatorna volt!!!) egy memleak hiba és a wallet inkompatibilitása miatt… ráadásul a csatornák nagy részét csak forcedben tudtam lezárni, így egy napot várhatok hogy át tudjam menteni a csilingelő satoshijaimat… Ráadásul még petyatrader haverom is ágynak esett az influencia miatt, ami nem kicsit veti vissza a közös projektünket. (Ezúton jobbulást neki!) Szóval mindezen szörnyűségek mellett ma még azt is megtudtam potom 1,5 hónap késéssel, hogy egy sajnálatos programhiba miatt alapjaiban omlott összes Satoshi Nakamoto álma a 21 millió bitcoinról… Soha, de tényleg soha nem lesz 21 millió bitcoin…

A történet egészen tavaly december 30-ig vezethető vissza, amikor is az egyik pool (elvileg talán az AntPool… nem jártam utána pontosabban), úgy döntött, hogy csak szeretne jól járni az akkor éppen bejelentett rootstock mainnet indításból és gyors hackelésben összerakták a merged mining kódjukat… Na álljunk meg egy pillanatra. Mi az a rootstock és mi az a merged mining?

A Rootstock az egyik első sidechain implementáció, ami a Bitcoin skálázási problémáit hivatott megoldani a Blockstream által felvázolt sidechain technológián keresztül. Ennek ugye az a lényege, hogy a Bitcoin hálózatból ideiglenesen lehet lockolni bizonyos mennyiségű Bitcoint, ami ezáltal felszabadul a Rootstock (RSK) hálózaton, ahol a 10 másodperces blocking time és a 400+ tps (tx/s) átlagos tranzakciós sebességgel jelentős sebességre fogja kapcsolni a hálózat. Ráadásul mindezt egy turing-completed smart contract engine keretei között, amivel a Bitcoin hálózaton is elérhetővé válik az Ethereum szintű okosszerződés rendszer.

A rootstock egy külön blokklánc, amin bányászat útján keletkeznek a blokkok és ezáltal maguk az SBTC tokenek is. Ám a bányászat nem függetlenül történik, szeparált infrastruktúrán, hanem hivatalosan a Bitcoin bányászati eszközök végzik egyben a rootstock validálást is, aminek a lényege, hogy a keletkező Bitcoin blockok jutalom tranzakciójába (coinbase reward), bekerül egy “rootstock commitment” is. Ezen rootstock commitmenten keresztül igazolja azt a rootstock (és egyben Bitcoin) bányász, hogy valóban elvégezte azt a bizonyos munkát, ami miatt a kibányászott BTC reward mellett jogosult az SBTC (SuperBTC = Rootstock token) rewardra is. Ideális esetben ez így néz ki egy a slushpool által létrehozott Bitcoin blokk esetén:

P2PKH    
OP_DUP OP_HASH160 7c154ed1dc59609e3d26abb2df2ea3d587cd8c41 OP_EQUALVERIFY OP_CHECKSIG
NULL_DATA   
OP_RETURN 52534b424c4f434b3ade73c1b2601b0ac63bb3c28fcff64a5eed722ed711f95e88a8d90897b9ef2204
(decoded)
NULL_DATA   
OP_RETURN aa21a9ed5fe56b84c28ea18b3e8948b3bc708f148c01695f38962f9044b3e19bf411145f
(commitment hash) 5fe56b84c28ea18b3e8948b3bc708f148c01695f38962f9044b3e19bf411145f

Az első output maga a coinbase reward bitcoin address, a másik az a bizonyos rootstock commitment, a harmadik pedig a tavaly szeptember óta minden coinbase rewardban szereplő “segwit commitment” üzenet, amivel jelzi a bányász, hogy ez a blokk bizony SegWit módban készült. A rootstock commitment-et dekódolva eléggé nyilvánvalóvá válik az összefüggés: “RSKBLOCK:??_ ?;?????J^????u?????????”

Kis technikai kitérő után vissza is térnék a fájdalmas felismeréshez, nevezetesen, hogy miért is nem lesz soha 21.000.000 db Bitcoin: A fent említett napon a kérdéses pool elkészítette az első olyan blokkját, amibe be is rakta az első rootstock commitmentjét, sajnálatos módon azonban sikerült egy teljesen értelmezhetetlen coinbase tranzakciót összerakniuk (01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1203dea707055a478cb801b80100006ea50000ffffffff0100000000000000002952534b424c4f434b3addbf517adf8ffd4bca7751505b39c9013a0d1fd479fc4e901b39dd57b347c62400000000), amit ha meg is próbálnánk visszafejteni, akkor is csak ennyit látnánk benne:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 OP_INVALIDOPCODE OP_INVALIDOPCODE OP_INVALIDOPCODE OP_INVALIDOPCODE 03dea707055a478cb801b80100006ea50000 OP_INVALIDOPCODE OP_INVALIDOPCODE OP_INVALIDOPCODE OP_INVALIDOPCODE 0 0 0 0 0 0 0 0 52534b424c4f434b3addbf517adf8ffd4bca7751505b39c9013a0d1fd479fc4e901b39dd57b347c624 0 0 0 0

Az egy tranzakciókra jutó OP_INVALIDOPCODE-ok aránya kifejezetten magasra sikerült ebben a bugos tranzakcióban és bár ott van benne a coinbase reward address (34PADg1QBRD8311BojmwMzu7xUEBYKia4M), de az oda került coinbase rewardot (12,5 BTC) bizony soha senki nem fogja tudni felhasználni… Akkori árfolyamon közel negyedmillió dollárt sikerült elégetniük a hiba miatt. Természetesen a tranzakció végén ott árvátlankodik a vétkes commitment tag is: “RSKBLOCK:Y?QzByKEwQP[9E:OyüN9YW?G?$”

A történt konklúziói egyrészt: van ám abban némi logika, hogy ha egy mód van rá, akkor ne éles környezetben teszteljünk. Pláne, ha a teszthez több ezer dollárnyi áramot kell elégetni és a hibás futtatás okán potom negyed millió dollárt bukunk. Másrészt pedig, hogy innentől sajnos módosítani kell az összes szakirodalmat: A Bitcoin láncon sajnos csak 20.999.987,5 bitcoin fog keletkezni. Ezt a számot tessék innentől megjegyezni és hangoztatni…

//PLETYKA MODE IS ACTIVATED: Amikor az ember azt gondolná, hogy ennél nagyobb sokk már nem érheti a napra, akkor jön az ultimate kill bill scene: A kriptoszubkult bűzölgő pöcegödréből előszivárgott a “Bitmain Antminer F3” ASIC miner híre, amiről egyelőre keveset lehet tudni (legfőképpen azt sem, hogy egyáltalán tényleg létezik-e ilyen gép), de a lényege, hogy három ASIC chipet körberaktak 1Gb-os DDR3 memóriákkal, amelyekből egy kiszerelésben 72Gb-ot erőszakoltak bele egy-egy masinába. Az F-es széria (ha valaha is létezni fog…), akkor a memory heavy/DAG orientált algoritmusok esetén fog szédületes teljesítményt produkálni, lásd pl Ethereum bányászat. Egyes (egyébként nem bizonyított) becslések szerint  650MH/s-re lesz képes az ASIC mindösszesen 750W energiafelvétel mellett, mindezt a szokásos 2500-3000 dolláros áron. Ha tényleg elkészül egy ilyen gép (állítólag idén Q2/Q3 körül várható), akkor ez alapjaiban fogja átrajzolni a bányász piacot, ami megint jó időre a GPU bányászat végét jelentheti (pont úgy, mint 2013-ban az Bitcoin, majd nem sokkal később a Litecoin esetén…)