Siden starten af Bitcoin i 2008, som et peer-to-peer elektronisk pengesystem, er der blevet oprettet mange andre kryptovalutaer, hver med en særlig mekanisme. Men en ting, som næsten alle kryptovalutaer har til fælles, er blockchain, som er kerneelementet i deres arkitektur.
Med få undtagelser er blockchains bevidst designet til at være decentraliserede og fungerer som en digital hovedbog, der vedligeholdes af et distribueret netværk af computerknudepunkter. Af denne grund gjorde blockchain-teknologien det muligt at skabe tillidsløse økonomiske systemer, hvor gennemsigtige og pålidelige finansielle transaktioner kunne udføres uden behov for mellemmænd. Kryptovalutaer er ved at blive vedtaget som et levedygtigt alternativ til traditionelle bank- og betalingssystemer, som er stærkt afhængige af tillid.
Som de fleste distribuerede computersystemer skal deltagerne i et kryptovaluta-netværk regelmæssigt blive enige om den aktuelle tilstand af blockchainen, og det er det, vi kalder konsensusopnåelse. At opnå konsensus på distribuerede netværk på en sikker og effektiv måde er imidlertid langt fra en let opgave.
Så, hvordan kan et distribueret netværk af computerknuder blive enige om en beslutning, hvis nogle af knuderne sandsynligvis vil fejle eller handle uærligt? Dette er det grundlæggende spørgsmål i det såkaldte Byzantine Generals’ problem, som har givet anledning til begrebet Byzantine fault tolerance.
Hvad er Byzantine Generals’ problem?
Med få ord blev det byzantinske generalsproblem i 1982 udtænkt som et logisk dilemma, der illustrerer, hvordan en gruppe byzantinske generaler kan have kommunikationsproblemer, når de forsøger at blive enige om deres næste træk.
Dilemmaet forudsætter, at hver general har sin egen hær, og at hver gruppe befinder sig forskellige steder omkring den by, de har til hensigt at angribe. Generalerne skal blive enige om enten at angribe eller trække sig tilbage. Det er ligegyldigt, om de angriber eller trækker sig tilbage, så længe alle generalerne når til enighed, dvs, blive enige om en fælles beslutning for at kunne udføre den koordineret.
Derfor kan vi overveje følgende krav:
- Hver general skal beslutte: angribe eller trække sig tilbage (ja eller nej);
- Når beslutningen er truffet, kan den ikke ændres;
- Alle generaler skal blive enige om den samme beslutning og udføre den synkront.
De førnævnte kommunikationsproblemer hænger sammen med, at en general kun kan kommunikere med en anden gennem meddelelser, som fremsendes af en kurer. Derfor er den centrale udfordring i det byzantinske generalproblem, at beskederne på en eller anden måde kan blive forsinket, ødelagt eller gå tabt.
Dertil kommer, at selv hvis det lykkes at få leveret en besked, kan en eller flere generaler vælge (af en eller anden grund) at handle ondsindet og sende en falsk besked for at forvirre de andre generaler, hvilket fører til en total fiasko.
Hvis vi anvender dilemmaet i forbindelse med blockchains, repræsenterer hver general en netværksknude, og knuderne skal nå til enighed om systemets aktuelle tilstand. Sagt på en anden måde skal flertallet af deltagerne i et distribueret netværk være enige og udføre den samme handling for at undgå fuldstændig fiasko.
Der er derfor den eneste måde at opnå konsensus i disse typer distribuerede systemer på ved at have mindst ⅔ eller flere pålidelige og ærlige netværksknuder. Det betyder, at hvis størstedelen af netværket beslutter sig for at handle ondsindet, er systemet modtageligt for fejl og angreb (som f.eks. 51%-angrebet).
Byzantinsk fejltolerance (BFT)
Med få ord er byzantinsk fejltolerance (BFT) den egenskab ved et system, der er i stand til at modstå den klasse af fejl, der er afledt af Byzantine Generals’ Problem. Det betyder, at et BFT-system er i stand til at fortsætte med at fungere, selv om nogle af knuderne svigter eller opfører sig ondsindet.
Der er mere end én mulig løsning på Byzantine Generals’ Problem og derfor flere måder at opbygge et BFT-system på. Ligeledes er der forskellige tilgange til, hvordan en blockchain kan opnå Byzantinsk fejltolerance, og dette fører os til de såkaldte konsensusalgoritmer.
Blockchain-konsensusalgoritmer
Vi kan definere en konsensusalgoritme som den mekanisme, hvormed et blockchain-netværk opnår konsensus. De mest almindelige implementeringer er Proof of Work (PoW) og Proof of Stake (PoS). Men lad os tage Bitcoin-sagen som et eksempel.
Mens Bitcoin-protokollen foreskriver systemets primære regler, er PoW-konsensusalgoritmen det, der definerer, hvordan disse regler vil blive fulgt for at nå konsensus (f.eks. under verifikation og validering af transaktioner).
Men selv om konceptet Proof of Work er ældre end kryptovalutaer, udviklede Satoshi Nakamoto en modificeret version af det som en algoritme, der gjorde det muligt at skabe Bitcoin som et BFT-system.
Og bemærk, at PoW-algoritmen ikke er 100 % tolerant over for Byzantine-fejl, men på grund af den omkostningstunge mineproces og de underliggende kryptografiske teknikker har PoW vist sig at være en af de mest sikre og pålidelige implementeringer til blockchain-netværk. I den forstand betragtes Proof of Work-konsensusalgoritmen, der er designet af Satoshi Nakamoto, af mange som en af de mest geniale løsninger på de byzantinske fejl.
Sluttanker
Det byzantinske generalproblem er et spændende dilemma, der i sidste ende gav anledning til BFT-systemerne, som i vid udstrækning anvendes i forskellige scenarier. Ud over blockchain-industrien omfatter nogle få anvendelsestilfælde af BFT-systemer luftfart, rumfart og kernekraftindustrien.
I kryptovalutakonteksten er det afgørende for ethvert blockchain-økosystem at have en effektiv netværkskommunikation sammen med en god konsensusmekanisme. Sikring af disse systemer er en løbende indsats, og de eksisterende konsensusalgoritmer har endnu ikke overvundet nogle få begrænsninger (såsom skalerbarhed). Ikke desto mindre er PoW og PoS meget interessante tilgange som BFT-systemer, og de potentielle anvendelser inspirerer helt sikkert til udbredt innovation.