Útoky hackerů na kryptoměny? Příběh virtuální měny Verge ukázal, jaká je realita

Příznivci kryptoměn často a s oblibou vyzdvihují zabezpečení kryptoměnových sítí. Zejména pak kryptoměny s komplikovanými protokoly mají být zárukou bezpečí. Jenže jak se v poslední době ukazuje, tak v jednoduchosti je síla. Kryptoměna Verge, která je typickým příkladem komplikovaného protokolu, se na začátku dubna a v polovině května stala terčem hackerských útoků. A její slabinou byla právě přílišná složitost protokolu.

Během 4. až 6. dubna 2018 došlo ke třem hackerským útokům. Každý z nich trval několik hodin a znemožňoval uživatelům Verge vytvářet platby. Mnohem větší průšvih byl ale to, že hackeři během útoků dokázali vygenerovat digitální mince Verge. Za každou vteřinu hackeři získali 1560 XVG, což při tehdejším kurzu dělalo asi 80 dolarů. Celkově hackeři vytvořili (nebo lépe řečeno padělali) miliony XVG v hodnotě přes milion dolarů. Jak se jim ale něco takového mohlo podařit?

Nezbytná teorie na úvod

Verge je kryptoměna, která se těží pomocí algoritmu Proof-of-work. PoW těžba je založena na ukládání transakcí do bloků, které se snaží dobrovolníci (těžaři) zkontrolovat a potvrdit. Těžař, který blok zpracuje jako první, dostane od systému odměnu. Tím je blok označen za vytěžený a začíná těžba nového bloku s novými transakcemi.

Systém má nastaveno, jak velká bude odměna za vytěžení bloku. Stejně tak je nastaveno, jak často by mělo k vytěžení bloku docházet (Verge má nastaveno 1 blok za 30 sekund). Pokud těžařský výpočetní výkon roste, začne se zkracovat doba pro vytěžení bloku. Systém to zaznamená a ihned zkomplikuje těžbu dalšího bloku tak, aby se čas vrátil do požadované normy. Stejně tak může systém těžbu zjednodušit, pokud se začne doba mezi vzniklými bloky prodlužovat.

Základ problému: Nejednotné časové známky

Hackeři zneužili toho, že při těžbě se každý blok označí časem, kdy byl vytvořen. V ideálním světě by po sobě vznikající bloky měly být chronologicky srovnané. Jenže v praxi se stává, že časové známky bloků nejsou postupné. Je to dáno tím, že informace se sítí šíří postupně, takže ke každému uživateli se dostanou v jiný okamžik. Sjednotit čas je kvůli nejednotnému toku informací pro decentralizované sítě prakticky nemožné. Z tohoto důvodu systém Verge toleroval těžařům až dvouhodinovou časovou odchylku. Místo aktuálního času tedy bylo možné vytvořený blok označit časem až o 120 minut posunutým.

Hackeři během útoku těžili bloky a označovali je falešnou časovou známkou. Místo aktuálního času používali čas o hodinu opožděný. Systém byl tedy přesvědčený, že zrovna vytěžené bloky vznikly už před hodinou. Nastal tedy problém, že systém nedokázal správně vyhodnotit, kdy skutečně vznikl poslední blok.

Zmatený systém útoku pomohl

Ačkoliv bloky neustále vznikaly, tak kvůli falešné časové známce byl systém přesvědčen, že poslední blok vznikl před hodinou. A začal rychle snižovat obtížnost těžby, aby se doba zkrátila na požadovaných 30 sekund.

Hackeři dokázali díky neustálému falšování časových známek zmást systém natolik, že obtížnost těžby klesla o 99,999… % (obtížnost klesla z 1393093 na 0.00024). Obtížnost byla tak nízká, že hackeři dokázali vytěžit nový blok (a získat od systému odměnu) každou sekundu. A systém byl kvůli falešným časovým známkám neustále přesvědčen, že poslední blok vznikl před hodinou.

Snížení obtížnosti ovšem byla jen polovina úspěchu. Tou druhou, stejně důležitou částí, byla izolace ostatních těžařů. Pokud by totiž hackeři pouze snížili obtížnost, tak by toho mohli využívat všichni těžaři. Bloky by tedy vznikaly rychleji, ale odměna by se dělila demokraticky mezi všechny těžaře. Hackeři ovšem dokázali ovládnout celou síť a stát se na dlouhou dobu jedinými těžaři. A to aniž by vlastnili nadpoloviční těžební výkon (obecně známé jako riziko 51% útoku).

Když méně znamená více

Při výpočtech používají počítače těžařů předem stanovený algoritmus (u Bitcoinu například SHA256). Verge ovšem těžařům dává na výběr hned z pěti algoritmů (Scrypt, X17, Lyra2rev2, myr-groestl, blake2s). To ovšem znamená, že u Verge existuje hned pět různých parametrů pro obtížnost těžby. Při útoku ovšem nedošlo ke snížení obtížnosti pro celou síť Verge (tj. pro všechny algoritmy), ale jen pro algoritmus Scrypt, jak se později ukázalo. Tím ze hry odpadly čtyři pětiny těžařů, kteří používali ostatní algoritmy. Těžba přes Scrypt se totiž stala úplně snadná, zatímco těžba přes ostatní algoritmy byla stále obtížná.

Aby hackeři ovládli síť, tak jin nyní stačilo vlastnit nadpoloviční výpočetní výkon mezi těžaři, kteří používali Scrypt. To znamená, že místo 50 % (potřeba k ovládnutí celé sítě) jim stačila pětina – 10 % (ovládnutí části těžařů s algoritmem Scrypt). Jenže výpočetní výkon hackerů byl pravděpodobně mnohem menší. Podle hrubých odhadů asi jen 0,4 %. Někteří to zdůvodňují tím, že použité algoritmy nejsou zcela rovnocenné a konkrétně útok přes Scrypt byl pro ovládnutí sítě mnohem levnější, než pro ostatní algoritmy. Zde už se ovšem jedná spíše o spekulace.

Závěrem

Krátké shrnutí na závěr. Falšování časových údajů bloků umožnilo dramaticky snížit obtížnost. Zacílení na nejvýhodnější algoritmus vyřadilo 80% všech těžařů, protože obtížnost u zbylých čtyř algoritmů se nesnížila. A k ovládnutí zbylých 20 % stačilo dočasně pronajmout těžební výkon nebo vlastnit dostatek silných ASIC čipů.

Byť tým vývojářů Verge po incidentu z dubna sliboval, že problém vyřeší, nestalo se tak. Přibližně o měsíc později se útok totiž opakoval a hackeři při něm získali dalších 35 milionů XVG. Zajímavé ale je, že ani jeden z útoků pro hodnotu Verge neznamenal zkázu. Spíše to vypadá, že investoři tyto zprávy úplně ignorovali. Hodnota Verge tak kopíruje trend Bitcoinu či dalších populárních kryptoměn bez ohledu na to, jaké trable zažívá.