Hlavní navigace

Veřejné blockchainy pod útokem: jak se přepisuje historie

14. 4. 2021
Doba čtení: 10 minut

Sdílet

 Autor: markez / Depositphotos
Na konci minulého dílu jsme se zlehka dotkli nejzajímavějšího a nejobávanějšího druhu útoků na proof of stake blockchainy, nyní se do nich ponoříme naplno.

Koncepty distribuovaného konsenzu proof of work (PoW) a proof of stake (PoS) si nemohou být navzdory některým formálním podobnostem (pravidlo nejdelšího řetězce, které však zdaleka nemusí platit vždy, hashová časová razítka mezi bloky, nody, mineři nebo validátoři) vzdálenější. 

Právě z falešné podobnosti pramení enormní množství nedorozumění ohledně bezpečnosti (nebo nebezpečnosti) PoS sítí, a to v dobrém i ve zlém. V tomto textu se je pokusíme rozklíčovat. 

Long Range útoky pod lupou

Takzvané Long Range útoky (někdy také Alternative History nebo History Revision útoky) představují vedle externích hrozeb největšího strašáka PoS sítí. Může za to kombinace problému jménem Weak Subjectivity a fenoménu Costless Simulation. 

Kvůli nim jsou zde Long Range útoky mnohem reálnější hrozbou než u PoW sítí. Při Long Range útocích útočník vytvoří vlastní větev celého blockchainu (počínající Genesis blokem) a tu prosadí jako hlavní řetězec. Důvod, proč by se mohl útočník o něco takového pokoušet, je hlavně snaha o reorganizaci bloků či zvýšení odměny za validaci. Alternativní větev totiž samozřejmě může obsahovat od původního hlavního řetězce odlišné bloky nebo transakce.

Hlavním důvodem, proč je tento typ útoků na PoS sítích možný, je fenomén jménem Weak Subjectivity. Termín vychází ze „slepoty“ nových nebo dlouho odpojených nodů (online node tímto fenoménem netrpí), jež jsou nuceny rozhodovat, která větev blockchainu je hlavní. Když je nod do sítě zapojen, je si jistý pouze počátečním (genesis) blokem, protože o tom jediném panuje všeobecná shoda. Nod ale vedle něho obdrží také seznam všech aktuálně publikovaných větví daného blockchainu. V tomto stavu není schopný spolehlivě určit, který z chainů je ten správný.

Online nody tímto problémem netrpí, protože do určitého časového bodu vědí, o které větvi naposledy panovala shoda, že je hlavní. Jediný způsob, jak je přesvědčit k akceptování jiné větve, je, že se legitimním způsobem stane tou hlavní. Weak Subjectivity je problém, protože snapshot aktuálního stavu blockchainu může obsahovat velké množství větví.

U proof of work sítí podobný problém řeší pravidlo nejdelšího řetězce. Ten říká, že platný je vždy ten nejdelší, tj. ten s nejvíce podepsanými bloky. Vychází se přitom z předpokladu, že nejdelší řetězec, který se jinými slovy rovná největší kombinované obtížnosti, má za sebou nejvíce vynaložené energie (fyzických zdrojů) od minerů, a je tudíž nejlegitimnějším pokračováním původního blockchainu (tzv. Nakamotův konsensus). 

Ani tento systém není dokonalý (viz předchozí díly našeho miniseriálu), ale jedná se o chytrý způsob, jak rozlišit, kolik energie bylo do větve investováno. U proof of work sítí by odvození celého chainu až z genesis bloku vyžadovalo enormní množství hash power, navíc udržitelné po určitý čas. (Na tu se lze dívat také jako na výpočetní kapacitu napomáhající minerům naklonit si pravděpodobnost ve svůj prospěch.)

U PoS sítí si ale pouze s mechanismem nejdelšího řetězce pro vypořádání s fenoménem Weak Subjectivity nevystačíme, důvodem je fenomén jménem Costless Simulation. Ten nám zjednodušeně říká, že simulace nejdelšího chainu zde na rozdíl od PoW sítě moc energie nestojí. Není zde žádný (velký) energetický stake mimo systém, žádné pracné hádání nonce (náhodné nebo pseudonáhodné unikátní číslo, které slouží k autentizaci těžaře s právem k podpisu), kdy miner nejprve vezme hash předchozího bloku, přidá k ní blok s nově potvrzenými transakcemi a svůj tip na správnou nonci a aplikuje na tento balíček kryptografickou funkci. Ta pak vytvoří data hash, kterou následně ověřuje proti vzoru, a teprve pokud se mu během tohoto procesu podařilo zvítězit nad náhodou (uhádl správnou nonci), může podepsat blok a shrábnout odměnu.

PoS systémy namísto tohoto energeticky náročného procesu nechávají bezpečnost sítě na tzv. validátorech s významným podílem v systému a doufají, že právě to je bude dostatečně motivovat k poctivému chování, jinak o svůj podíl přijdou. V principu validátoři pouze vezmou balík transakcí z transakčního poolu, vloží je do bloku a publikují. Díky tomu je možné bez větších potíží a bez větší námahy vytvářet aktuální větve blockchainu (se stejnou délkou jako hlavní větev). 

Zatímco PoW totiž odměňuje hlasující uživatele sítě za to, že dělají správnou věc, u PoS se spoléhá spíše na to, že budou potrestáni, pokud udělají věc špatnou. U PoW systému musíte vynaložit vysoké náklady (čím vyšší, tím je síť bezpečnější), abyste získali v rámci systému kýženou odměnu, u PoS jsou naopak náklady na získání odměny nízké, ale systém tvrdě trestá za pokus o podvod. To však v praxi nestačí.

1. Jednoduché Long Range útoky

Představme si nyní, že máme blockchain s pouhými třemi validátory (Karel, Štěpán, Helena) s rovnocennými podíly. V běžném cyklu PoS protokolu každý z nich dostane stejnou šanci na zvolení pro validaci bloku. V naivní implementaci proof of stake protokolu, kdy nody neověřují časová razítka bloků, se Helena rozhodne provést Long Range útok a prosadit vlastní verzi blockchainu. Vytvoří tedy celou alternativní historii počínaje genesis blokem, forkne blockchain a začne razit vlastní větev. Helena nicméně ani na své větvi nemůže potvrzovat bloky rychleji než na skutečném hlavním chainu (kvůli informacím o validátorech obsažených v genesis bloku), což je pro ni problém, neboť potřebuje vytvořit chain s více bloky, který by mohla prosadit jako hlavní řetězec. Může nicméně udělat to, že zfalšuje časová razítka a bude si validovat dopředu, což také zkusí. Zfalšovat časová razítka na vlastní větvi Helena zvládne hravě, protože je zde jediným aktivním validátorem. Pokud nody nekontrolují platnost časových razítek, bude se pak Helenina větev jevit stejně platná jako skutečná hlavní a její útok může vyjít.

2. Posterior Corruption

Když podvrhnout časová razítka není možné (což v praxi skutečně většinou není), musí Helena vymyslet jiný způsob, jak přidat v daném časovém okně více bloků, než se nalézá v hlavním řetězci. Její šance na produkci bloku ale zůstávají stejné. Co teď? Jedna z možností je zapojit do toho bloky někoho jiného, třeba Štěpána. Dokud byl Štěpán aktivním validátorem, dával si dobrý pozor na své privátní klíče a byl samozřejmě zcela poctivý. Po 100 000 blocích si ale řekl, že už má jiné priority, a vybral svůj stake ze systému. Protože již nemá na systému žádný aktivní podíl, bezpečnost jeho starých (a tedy neplatných) privátních klíčů mu začala být lhostejná. Helena teď stojí před dvěma možnostmi – ukrást Štěpánovi staré privátní klíče, nebo jej „uplatit“ (motivovat) k účasti na útoku. 

Se Štěpánovými klíči sice už nelze podepisovat nové bloky, protože nejsou dále platné, ale stále s jejich pomocí může podepsat oněch 100 000 bloků, během nichž byl jako validátor aktivní, jenže tentokrát na svojí vlastní nové větvi. Tím Helena signifikantně zvýšila své šance předehnat platnou hlavní větev blockchainu. Variantou útoku je situace, kdy Helena přesvědčí Štěpána k aktivní účast na útoku, Štěpán je motivovaný tím, že vytvoří blok (a dostane odměnu) pokaždé, když je zvolený coby slot leader v Helenině větvi.

V daném případě samotné ověřování časových razítek příliš nepomůže, na pomoc ale může přispěchat mechanismus pohyblivých checkpointů starších bloků (přinášející centralizaci) a key-evolving kryptografie (neboli key-evolving podpisy).

3. Stake Bleeding –  král Long Range útoků a odbočka k Liveness Denial útoku

Poslední typ Long Range útoku představuje tzv. stake bleeding, který spočívá v okopírování transakce z poctivě udržovaného chainu do privátního blockchainu udržovaného útočníkem.

Helena opět vytvořila vlastní novou větev blockchainu, která začíná genesis blokem a aspiruje na to stát se hlavním chainem. Bojuje stále se stejným problémem, šance na to stát se slot leaderem na vlastní větvi nejsou větší než u hlavního chainu. Helena se proto rozhodne svoji privátně vytvářenou větev zatím nepublikovat a začne bojkotovat činnost hlavního chainu. Pokaždé, když ji na hlavním chainu systém zvolí coby slot leadera, nechá svoji pozici propadnout a odmítne ověřit blok. Protože její pozici nemůže v daném slotu převzít jiný validátor, nebude v daném okamžiku přidán žádný nový blok do hlavní větve blockchainu a Helena zvyšuje svoji šanci na prosazení vlastní větve jako hlavní.

Malá odbočka k Liveness Denial útoku

Helena si v tomto případě pomohla jiným druhem PoS útoku, tzv. Liveness Denial útokem, který spočívá v blokování plynulého běhu blockchainu tím, že validátor (nebo jejich skupina) odmítne přidávat nové bloky. Pokud se na takovém útoku podílí skupina validátorů s 34% podílem v síti, mohou síť dočasně zastavit nebo významně poškodit úroveň její bezpečnosti. Dopad takového útoku lze zmírnit automatickou rotací validátorského setu, jediná další efektivní obrana je pak již pouze hardfork, při kterém zpravidla rozhoduje o dalším osudu sítě tržní nebo sociální konsensus.

Nevýhodou stake bleeding útoku je, že Helena nedostává na hlavním chainu žádnou odměnu a její podíl v systému postupně klesá (za předpokladu, že ostatní validátoři bloky publikují a dostávají za to odměnu). Na Helenině vlastní větvi, kde je ona sama jediným validátorem, oproti tomu publikuje blok při každé možné příležitosti. Helena se v tomto případě nejspíš pokusí maximalizovat svůj podíl na vlastní větvi. To může udělat například tak, že zkopíruje transakce z hlavní větve a publikuje je také v té svojí. Dělá to, aby maximalizovala transakční poplatky, které za validaci může dostat, a postupně tak zvyšovala vlastní podíl na své větvi. Helena tak časem dospěje do bodu, kdy drží majoritu na vlastní větvi, a pokud není hlavní větev dostatečně chráněná proti Liveness Denial útoku, podaří se jí díky rychlejšímu růstu vlastní větve nahradit hlavní chain. Když dospěje do tohoto bodu, čeká ji již pouze publikování třešničky na dortu – poslední transakce, kde rozdělí nové podíly zbývajícím validátorům na hlavním chainu a publikuje svoji větev jako nový hlavní chain.  

Stake bleeding je jakýsi zlatý hřeb LR útoků a neexistuje proti němu jediná zcela samospasitelná obrana. Můžeme ale pomocí různých technik alespoň trochu snížit jeho dopad. Útěchou nám také může být fakt, že tento typ útoku vyžaduje ke svému úspěšnému provedení opravdu hodně času (počítáno na roky) a signifikantní podíl v síti (30 % a více). Jako dílčí obrana proti Stake Bleeding útoku se využívají například pohyblivé checkpointy starších bloků (používá je dnes většina PoS systémů), nebo takzvaného „pravidla hojnosti“, kdy se porovnává „hustota“ bloků v konfliktních větvích.   

Myšlenka pohyblivých checkpointů je celkem jednoduchá, klient nemůže reorganizovat historii bloků, které jsou starší než X (doplňte si podle pravidel konkrétního PoS blockchainu). Takové řešení je možné za určitou cenu, a tou je větší míra centralizace systému, který pohyblivé checkpointy používá.

Pár slov k Short Range útokům

Pohyblivé checkpointy také nezabrání opačnému typu útoku – Short Range (neboli Bribery Attack), kdy se útočník pokouší přepsat pouze historii bloků před checkpointem. Problém Short Range útoku nicméně spočívá v tom, že nikdo z validátorů nevydá přístup ke svým privátním klíčům bez patřičné protihodnoty. Útočník tak musí nakoupit více tokenů, než tvoří současná rozhodovací většina, čímž vlastně provádí klasický 51% útok. V praxi je něco takového navíc zpravidla nemožné, protože tolik tokenů na prodej obvykle na trhu k dispozici není.

Tip do článku - EBF spíkři 1

Perspektivní metody obrany, jejichž čas zatím ještě nepřišel

Velmi zajímavou mitigační techniku Long Range útoků do budoucna představují také takzvané key-evolving podpisy. Základní myšlenka je taková, že poté, co slot leader podepsal blok, dojde ke zničení (vývoji) platných klíčů takovým způsobem, že již není možné se vrátit k jejich starší verzi, kterou by bylo možné využít k podepsaní starších bloků v alternativní větvi blockchainu (není je možné spojit s alternativním genesis blokem). Zatím se ale jedná spíše o experimentální ideu vhodnou pro další zkoumání a v praxi se s ní nesetkáme. 

Aktivitu lze také útočníkovi znepříjemnit tím, že stejnou aktivitu, jakou používáme pro řetězení bloků – každý nový blok musí ve své hlavičce obsahovat platnou hash předchozího bloku – začneme používat pro jednotlivé transakce. Můžeme tím získat transakce asociované s konkrétním blokem v konkrétní větvi blockchainu. To je ale opět zatím téma spíše pro vědecké diskuze.

Autor článku

Externí spolupracovník serveru Lupa.cz a expert na blockchain a kryptoměny. Jako šéfredaktor v minulosti vedl ADASTRA Business Intelligence Magazine a server ITbiz.cz.