Blockchain

S rozvojem kryptoměn, zejména pak Bitcoinu, došlo k vývoji nového způsobu distribuovaného uchovávání informací, který byl pojmenován blockchain (v češtině bločenka). Jedná se o zcela nový princip umožňující revoluci nejen ve finančnictví, protože umožňuje uchování libovolné informace. Je to distribuovaná databáze bloků, jejíž (alespoň částečnou) kopii mají všichni účastníci a v určitých intervalech (během vkládání bloků) se shodují na jejím aktuálním stavu. Právě decentralizace těchto dat a shoda nad jejich platností bez nutnosti existence autority jsou důvody, proč je blockchain ideální pro kryptoměny, protože minimalizuje možnost jedné autority ovládat stav blockchainu a tím i trhu. Navíc jsou jednotlivé bloky v databázi uchovávány chronologicky a jakmile je blok jednou do blockchainu vložen, nelze jej jednoduše modifikovat. To je zajištěno pomocí řetězení bloků (odtud anglické „chain“), kde každý blok je závislý na všech předchozích. Vzhledem k těmto vlastnostem a tomu, že mezi uzly podílejícími se na tvorbě blockchainu není nutná žádná zvláštní důvěra, zaujala tato technologie nejedno odvětví.

Jak blockchain funguje?

Technologie blockchainu je založena na několika principech, jejichž kombinace zajišťuje jeho unikátní vlastnosti. Jedná se o použití asymetrické kryptografie, hashování (vytváření digitálních otisků), peer to peer (P2P) sítí a většinové shody.

Asymetrická kryptografie

Základem asymetrické kryptografie je existence dvou klíčů pro každého uživatele – soukromého a veřejného, a operace, kterou lze jednoduše provést za pomoci jednoho z klíčů a reverzovat pomocí druhého. Musí být výpočetně náročné pomocí veřejného klíče tuto operaci reverzovat a odvodit z něj klíč soukromý. Vhodných operací dnes známe několik. Například problém batohu, násobení velkých prvočísel, a operace nad eliptickými křivkami.

Digitální podpis

V případě blockchainu je použit takzvaný digitální podpis, který zajišťuje autentičnost libovolné zprávy. Zpráva je zašifrována pomocí soukromého klíče a kdokoli se znalostí klíče veřejného ji může dešifrovat. Tím lze ověřit, že zpráva byla zašifrována soukromým klíčem, který zná pouze vlastník, čímž je potvrzena autentičnost. Veškerá data (transakce) v rámci blockchainu jsou podepsána a je tedy ověřitelné, kdo tato data vytvořil.

Hashování

Hashování (v češtině tvorba otisků) je proces tvorby řetězců o fixní délce z libovolně velkého bloku dat. Vytvořené hashe (otisky) musí být pro stejná data vždy totožné a nesmí být možné z tohoto hashe odvodit původní data. Zároveň lze hash použít pro zajištění integrity dat, protože při libovolné změně dat dojde i ke změně jejich hashe.

Řetězení pomocí otisků

U blockchainu slouží hashování k zřetězení bloků díky tomu, že každý blok obsahuje hash předchozího. To zaručuje návaznost bloků, protože v případě změny libovolného bloku přestanou odpovídat hashe uložené v následujících blocích. Pro změnu libovolného bloku by tedy bylo nutné přepočítat i všechny následující bloky.

Peer to Peer

Vizualizace P2P sítě Pro propojení uzlů používá blockchain peer to peer (P2P) síť. Tyto sítě zajišťují virtuální propojení rovnocenných uzlů nad internetovou sítí. Každý z uzlů si udržuje přehled přilehlých uzlů v této síti a je schopen zasílat zprávy libovolnému jinému uzlu bez nutnosti libovolného centrálního prvku, který by tuto síť spravoval. U blockchainu jsou v této síti všechny uzly, které jej využívají a pomocí této sítě se šíří veškeré transakce i bloky, které tyto transakce zapouzdřují.

Většinová shoda

Hlavním pilířem fungování blockchainu je shoda na jeho aktuálním stavu (konsenzus) v definovaných časech. V těchto časech dochází k tvorbě nového bloku těžaři, což je označení pro uzly, které tyto bloky vytváří. Jakmile těžař nový blok vytvoří, rozdistribuuje jej všem ostatním uzlům. Tyto uzly jej ověří a začlení do své kopie blockchainu, čímž je blok akceptován. Akceptování bloku tento uzel vyjádří tím, že příští blok vytváří již nad tímto akceptovaným blokem, což lze ověřit díky zřetězení bloků. Pokud se k uzlu dostanou současně dva validní bloky, udržuje uzel dvě alternativy pro pokračování blockchainu do té doby, dokud nebude schopen rozhodnout, která z nich je platná. Platnou alternativu určí při vkládání následujících bloků podle toho, který vznikající blockchain je delší.

Shoda na delším řetězci

Vytváření bloků

Kterýkoli uzel se může zapojit do vytváření nového bloku a tím se stanou tzv. těžařem (miner), což je souhrnné označení pro uzly účastnící se procesu tvorby blockchainu. Pro vytvoření nového bloku nejprve těžař shromáždí data, která mají být v novém bloku zahrnuta (v případě bitcoinu se jedná o finanční transakce). Výběr dat je ponechán na uzlu, který blok vytváří, ale předpokládá se, že zahrne veškerá nová data vzniklá od posledního bloku. Poté vytvoří hlavičku bloku s metadaty, jako je například časová značka a hash předchozího bloku.

Protože takto může blok vytvořit kterýkoli těžař, musí být ověřeno, že data zahrnutá do bloku jsou validní a zamezeno některému těžaři či skupině těžařů ovládnout blockchain tím, že budou vydávat většinu bloků. Validita dat je ověřována každým uzlem před zahrnutím nového bloku do jeho blockchainu a bloky s chybnými daty jsou vyřazeny. Zajištění nezávislosti blockchainu je náročnější a v současnosti se používají dva přístupy – proof of work a proof of stake.

Proof of work

Proof of work (důkaz o odvedení práce) zamezuje ovládnutí blockchainu tím, že uměle navyšuje obtížnost vytvoření nového bloku. Tento mechanismus byl popsán již v původním návrhu blockchainu pro bitcoin a je dnes nejpoužívanější a nejvíce ověřený. Princip je založen na tom, že těžaři musí pro vytvoření bloku vyřešit určitý problém. Řešení v sobě spojuje výpočetně náročnou činnost a prvek náhody, a musí být jednoduše ověřitelné jakmile jej někdo nalezne. Pro vytvoření bloku spolu tedy těžaři soutěží a pokud nějaký těžař uspěje (vyřeší daný problém), rozešle svůj blok obsahující i řešení všem ostatním, kteří jej mohou snadno ověřit a začlenit do svého blockchainu. Pro ovládnutí blockchainu by musel útočník disponovat výkonem poloviny všech uzlů v P2P síti, což by mu zajistilo šanci na vítězství v této soutěži u většiny bloků a díky tomu ovlivňování toho, která data budou v blockchainu zahrnuta.

Fungování \

Příklad vhodného problému, používaného u Bitcoinu, je nalezení hashe s určitými vlastnostmi. Do hlavičky je přidáno náhodné číslo (nonce), čímž se změní podoba výsledného hashe. Těžaři tedy musí pro zkompletování bloku zvolit toto náhodné číslo, spočítat hash bloku a pokud neodpovídá požadovaným vlastnostem, tuto práci opakovat dokud nezvolí takové číslo, aby hash vyhovoval. Pro ostatní uzly je snadné spočítat hash, pokud již znají toto náhodné číslo, a ověřit jeho vlastnosti, ale díky vlastnostem hashovacích funkcí je nemožné toto číslo vypočítat ze zvoleného hashe. Bitcoin používá jako vlastnost porovnání velikosti výsledného hashe (budeme-li jej považovat za velké číslo) s hodnotou nastavitelného prahu. Díky ovlivňování hodnoty prahu lze ovládat obtížnost problému.

Proof of stake

Mechanismus proof of work má řadu neduhů, zejména pak závislost na výpočetně náročném problému, což vede k velké energetické náročnosti blockchainů založených nad ním. Proto jsou vymýšleny alternativní způsoby, často označované jako virtuální těžení, a nejslibnější se zdá být mechanismus proof of stake (důkaz vkladem).

Při proof of stake mohou účastníci určitou část aktiv (u kryptoměn to jsou právě mince) uzamknout jako vklad, čímž se stanou ověřovateli (validators) a tato aktiva jsou pak použita pro rozhodování, kdo bude mít právo vytvořit následující blok. Ověřovatelé hlasují, kdo bude mít právo vytvořit následující blok, přičemž váha hlasu může záviset jak na výši vkladu tak i na době, po kterou je aktivum uzamknuto. Zvolený ověřovatel pak může vytvořit následující blok.

Pro ovládnutí blockchainu postaveného nad proof of stake by musel útočník vlastnit nadpoloviční většinu veškerých aktiv v tomto blockchainu. Protože však hodnota aktiv by rostla s poptávkou po nich, shromáždit toto množství je velice obtížné.

Co s růstem blockchainu?

Blockchain je tvořen neustále přibývajícím počtem bloků. Vzhledem k tomu, že je blockchain uchováván v kopii na každém uzlu, je každý uzel nucen vyhrazovat uchovávání blockchainu stále větší prostor. Protože jednou ze základních vlastností blockchainu je zpětná auditovatelnost, nelze žádné bloky z blockchainu uvolnit pro snížení tohoto dopadu.

Pro omezení dopadu tohoto růstu se používá oddělení hlaviček blockchainu od samotných dat a řetězení pouze těchto hlaviček. Pokud jsou bloky tvořeny pouze hlavičkami, minimalizuje to přírustky a tím i prostorovou náročnost blockchainu. Samotná data však musí být v systému stále dostupná pro audit a zároveň musí být jednoznačně svázána s hlavičkou bloku, kam patří. Pro toto svázání se používá speciální datové struktury – merkle tree – do které jsou data ukládána a do samotné hlavičky a blockchainu se ukládá pouze kořen tohoto stromu. Vlastnosti této datové struktury zajišťují jednoznačné přiřazení dat k jednotlivým blokům. Uzly musí uchovávat veškeré hlavičky blockchainu, ale stará data mohou být uvolněna. Díky tomu nemusí některé uzly obsahovat veškerá data z blockchainu, nemůže se však stát, aby nějaká data byla uvolněna z celé P2P sítě. Nový uzel připojující se do sítě musí vždy získat kompletní blockchain se všemy daty, aby mohl provést jeho audit.

Smart contract

Smart contract (chytrá smlouva) je předpis posloupnosti kroků, které se mají vykonat, dojde-li k naplnění nějaké podmínky. Jedná se tedy o jednoduchý program, zapsaný v podporovaném jazyce, který je vždy vykonán při každém ověřování bloku na každém uzlu blockchainové P2P sítě. Díky tomu, že tato smlouva je uložena v blockchainu, není možné ji upravit (a porušit) a může v ní být například ustanoveno, za jaké podmínky budou vložená aktiva vrácena původnímu majiteli nebo naopak posloupnost akcí po přijetí zprávy. Protože při ověřování validity dat (transakce) musí být ověřeny i prerekvizity, dochází k vykonávání tohoto kódu opakovaně.