A Bitcoin létrehozása – Privát kulcsok és egyenlegek

Az alábbi cikk egy fejezet Yan Pritzker – A Bitcoin létrehozása című könyvének magyar fordításából. A tartalomjegyzéket és az ingyen letölthető változatot ide kattintva éred el.

***

Ki tudunk találni egy privát kulcsot?

Rá tudunk-e jönni találgatással egy adott címhez tartozó privát kulcsra, hogy így elkölthessük a rajta lévő coinokat? Milyen esélyeink vannak? Már említettük, hogy a kulcsok 256 bites számok. Minden bit két értéket vehet fel, nulla, vagy egyes. Minden bitet elképzelhetünk érmefeldobásként, vagy fej, vagy írás. Ha 1-bites kulcsunk van, akkor kétesélyes a játék, kettőből egyszer ki fogjuk találni.

Egy kis alapfokú matematika van a történetben, ebből tudjuk, hogy egy adott esemény többszöri ismétlődésének az esélye az egyedi megtörténések szorzata. Ha tehát az érmedobásnál ½ az esélyünk, hogy fej lesz, akkor az egymás után kétszer fej esélye ½ szorozva ½, tehát ¼, máshogyan megfogalmazva 1 a 4-hez.

Ha nyolcszor egymás után szeretnénk fejet dobni, akkor annak az esélye 28, tehát 1 a 256-hoz.

Egy rendszámtábla hat karakterből áll, betűkből és számokból. Van 26 betű és 10 szám, öszesen 36 karakter. Mivel pedig hat kell, ezért 366 különböző változat lehetséges, így az esélyed, hogy kitaláld az én kocsim rendszámát, 1 a két milliárdhoz.

Egy bankkártya-szám 16 számból áll. Mindegyik 10 különböző számjegy lehet, tehát 1016 változatból tudnád kitalálni az én kártyaszámomat. Ez 1 a 10 kvadrillióhoz esélyt jelent.

A Föld bolygón 1050 atom van. Ha én kiválasztom az egyiket, hasraütés-szerűen, az esélyed, hogy kitaláld, melyikre gondolok, 1 a 1.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000-hoz.

A privát kulcsok 256 bitesek, ez 2256 vagy nagyjából 1077, tehát az 1 után még 77 nulla. Ekkora esélyeid vannak, ha az egész univerzumban szeretnél megtalálni egyetlen egy atomot, vagy megnyerni a lottó fődíját, kilencszer egymás után. Az esély 1 a majdnem végtelenhez.

Mi a helyzet akkor, ha van egy szuperszámítógépünk? Annak könnyebb dolga lenne? Erről egy Reddit bejegyzésben értekezett valaki, főleg technikai szempontból megközelítve, de az utolsó bekezdése nagyjából segít elképzelni, mennyire lenne könnyű dolga:

„Szóval, ha szó szerint az egész Föld bolygót használhatnád számítógépes winchesterként, atomonként 1 bájt adatot tárolva, csillagokat használva energiaforrásként, és nagyjából másodpercenként egy billió kulcsot lejegyezve, 37 kvadrilliárd, 1027 darab Földre lenne szükséged, amelyhez 237 milliárd Nap energiája kellene, és még így is 3,6717 nonilliárd, 1057 évig tartana leírni az összes lehetséges kulcsot.”
U/PSBLAKE az R/BITCOIN subredditen

Gyakorlatilag lehetetlen kitalálni valakinek a privát kulcsát. Ráadásul a lehetséges bitcoin-címek száma annyira nagy, hogy a javaslatok szerint érdemes minden egyes tranzakcióhoz új címet generálnunk magunknak. Ez olyan, mintha egyetlen bankszámla helyett több ezer, vagy akár több millió bankszámlád lenne, minden, valaha fogadott vagy indított tranzakciódhoz egy új.

Elsőre zavarónak gondolhatod, hogy a privát kulcsokat csak a nagy számok törvénye védi. De ahogyan az előbb olvashattad, azok a számok tényleg nagyok, és sokkal nagyobb biztonságot nyújtanak, mint a bankok által egy központi szerveren tárolt felhasználónevek és jelszavak, a hackerek számára kiszolgáltatva.

Az egyenlegek követése

Van még egy dolog, amelyet eddig nem tisztáztunk le az előző fejezetekben. A főkönyvünkben valójában nincsenek egyenlegek. A Bitcoin ehelyett az UTXO, Unspent Transaction Outputs, azaz nagyjából az „elköltetlen tranzakció-kimeneteket” jelentő módszert használja. A tranzakció-kimenet azokat a coinokat jelenti, amelyeket megkaptál, függetlenül attól, hogy másvalaki utalta neked, vagy te bányásztad, és a coinbase tranzakcióval kerültek hozzád.

A hagyományos pénzekkel ellentétben, amelyek meghatározott címletekben, például 10 cent, negyed dollár, és hasonló formában léteznek, a bitcoin százmillió alegységre bontható, ezeket az alkotó tiszteletére satoshinak nevezzük. Emiatt attól függően, hogy mekkora összeget kaptál, fel kell osztanod az egyenleged, ha kevesebbet küldenél valakinek, vagy össze kell vonnod más címmel, ha többet akarsz utalni. Ugyanez pénzérmékkel úgy nézne ki, mintha a nagyobb összeg küldéséhez összeolvasztanád a fém érméket, és úgy adnád oda valakinek. Ezeket a technikai részleteket a tárcaprogramok automatikusan kezelik a háttérben, így felhasználóként nekünk csak annyi a dolgunk, hogy megadjuk a küldeni kívánt mennyiséget.

Mondjuk, hogy Alice címén 1 bitcoin van. 0,3 bitcoint akar elküldeni Bobnak. Létrehoz egy tranzakciót, amely megmutatja, hogy a saját címe 1 bitcoin UTXO-t tartalmaz, mint input, és ehhez jön két output, az egyik egy új bitcoin UTXO 0,3 bitcoinról, Bob címére, a második pedig egy másik, szintén új bitcoin UTXO 0,7 bitcoinról, vissza a saját címére. Ez a 0,7 bitcoin „visszajáró” mehet a saját, eredeti címére, de biztonsági okokból egy teljesen új címre is küldheti, amelyet a tárcája hozott létre, automatikusan, menet közben.

Ha nem a pontos küldendő mennyiséget tartalmazza az UTXO, akkor a tárca szétbontja az egyenleget, hogy a megfelelő UTXO küldhető legyen. Ugyanígy, több UTXO is kombinálható egyetlen nagyobb, új UTXO-ban.

Nincs rá mód, hogy a láncon beazonosítsuk, hogy kihez melyik cím tartozik. Ehhez ismerni kell a címhez tartozó privát kulcsot, és azt hozzá kell rendelni egy valós személyhez. Az UTXO megoldás egy kiváló módját jelenti a magánszféra védelmének, mivel minden alkalommal, mikor a coinok mozognak, új címet generálhatunk. Emiatt előfordulhat, hogy ha valaki sokszor végez tranzakciót, több száz, vagy akár több ezer bitcoin-címmel is rendelkezhet. Ezeket a tárcaprogramok kezelik nekünk, így nem kell foglalkoznunk a technikai részletekkel.

Ha meg szeretnénk nézni egy adott bitcoin-cím egyenlegét, akkor össze kell adnunk minden ahhoz tartozó UTXO-t. Az UTXO-k mennyisége növekszik, ha az emberek egy címről küldenek többre, és csökken, ha több címről gyűjtik össze egyetlenre a coinokat.

Az UTXO nagy segítség a dupla költés ellenőrzésében is, hiszen minden UTXO kizárólag egyszer használható fel. Nem kell ismernünk az adott bitcoin-cím teljes tranzakciós történetét, elég csak a küldendő UTXO adatait megvizsgálni.

Az UTXO-kat tömegesen létre is tudjuk hozni, illetve elhasználni, ha olyan komplex tranzakciókat indítunk, amelyek különböző inputokat és outputokat kombinálják. Ez teszi lehetővé a CoinJoin[1] működését, amely egy coin-mixer, ahol több résztvevő működik együtt, hogy egyetlen közös bitcoin-tranzakcióban tömörítsenek számos inputot és outputot, elrejtve ezzel az eredeti UTXO-k tranzakciós történetét. Ezeknek a megoldásoknak a népszerűsége egyre növekszik, és fontosak is a magánszféra védelmében, valamint a felcserélhetőség, angolul fungibility miatt. Ez utóbbi fogalom arra vonatkozik, hogy egy bitcoin egyenlő egy másik bitcoinnal, egymással felcserélhetők. Így lehet megoldani, hogy adott bitcoinok nem lesznek véglegesen „piszkosként” megbélyegezve csak azért, mert egyszer valamikor törvénytelen célra használták fel azokat.


[1] https://en.bitcoin.it/wiki/CoinJoin

1 thought on “A Bitcoin létrehozása – Privát kulcsok és egyenlegek

Comments are closed.