Konsensus lohkoketjuissa
Johdanto
Tämän kirjoituksen tarkoituksena on tuottaa kattava ja ymmärrettävä tietopaketti konsensuksen käsitteestä lohkoketjujen yhteydessä. Konsensusta käsitellään paitsi sen määritelmän, myös sen merkityksen ja luomisen kannalta. Kirjoituksessa käsitellään tekniikkaa hyvin pintapuolisesti ja pitäydytään periaatteiden selventämisessä. Teksti on tarkoitettu maallikon ymmärrettäväksi, ei tekniseksi raportiksi. Jonkinlainen peruskäsitys lohkoketjujen ideasta kuitenkin vaaditaan tekstin ymmärtämiseksi.
Kirjoitus on alunperin laadittu keväällä 2020 osana lohkoketjukurssia. Totesin, että on sääli jättää se pöytälaatikkoon, kun asia selkeästi askarruttaa monia ihmisiä.
Lohkoketjut yleisesti
Lohkoketjut ovat olleet jo mielenkiintoa herättävä sana jo kohta kymmenen vuotta. Hyvin harva asiasta puhuva kuitenkaan tietää mistä varsinaisesti on kysymys ja tämä on ollut jo jonkin aikaa huumorin lähde (kuva 1).(1)
Lohkoketju on hajautettu tietokanta ja pahat kielet kutsuvat sitä ”vain hitaaksi tietokannaksi”. Lohkoketjussa on kuitenkin paljon mielenkiintoisia ominaisuuksia, joiden takia se tietyissä olosuhteissa kannattaa ottaa käyttöön.
Lohkoketju muodostuu nimensä mukaisesti lohkoista, joissa on aina viite edelliseen lohkoon. Tällä tavoin lohkoista muodostuu katkeamaton ketju ja lohkoja seuraamalla voi aina päästä aivan ensimmäiseen lohkoon saakka. Jokaisessa lohkossa on tietty määrä dataa. Datan lisäksi lohkoon kirjataan edellisen lohkon hash-koodi, eli tarkistussumma. Jokaiselle lohkolle lasketaan oma tarkistussummansa, jossa pitää olla tietty aloitussekvenssi. Tällaisen tietynmuotoisen tarkistussumman löytäminen on erittäin työlästä ja siksi etsijät eli ”louhijat” palkitaan etsimistyöstä. Kun lohko on saatu valmiiksi, se ei muutu enää milloinkaan.
Bitcoinin lohkoketjuun merkitään eri lompakkojen väliset kaupat siten, että kirjaukseen tulee mukaan rahan lähettäjä, vastaanottaja ja rahan ”sarjanumero”. Jokaisella bitcoinilla on oma ”sarjanumeronsa”, joten niillä käytyä kauppaa voidaan seurata lohkoketjusarjaa seuraamalla. (Kuva 2)(2) Rahalla täytyy luomisensa jälkeen olla jokin omistaja ja omistajuuksia voidaan seurata helposti paikasta toiseen. Lompakot ovat anonyymejä, mutta jossain vaiheessa ihmiset haluavat nostaa bitcoininsa käteiseksi ja silloin kaupasta jää jälki, joka voidaan potentiaalisesti yhdistää oikeaan ihmiseen.
Lohkojen muodostamisessa on kuitenkin muutama potentiaalinen ongelma. Pahantahtoinen ihminen voisi väärentää lohkoketjuun transaktioita ja siirtää toisten omistuksessa olevia kolikoita omaan hallintaansa. Jos tällainen väärennetty lohko jää ketjuun, on sen sisältämiä transaktioita mahdotonta muuttaa myöhemmin. Toinen mahdollinen ongelma tulee siitä, että lohkoketjujen oikeaa muotoa oleva tarkistussumma voidaan usein muodostaa useammalla eri tavalla, eikä ”oikeaa tapaa” ole. Tämä tarkoittaa sitä, että lohkoketju voi haarautua kahdeksi erilaiseksi haaraksi. Jokainen tarkistussumma lasketaan mukaan seuraavaan tarkistussummaan, joten seuraava tarkistussumma tulee olemaan erilainen kahdelle erilaiselle edeltävälle tarkistussummalle. Mikäli lohkoketjun annettaisiin haarautua, lopputuloksena olisi lopulta lohkoketjun sijaan lohkopensas. Pensaan kahdessa eri haarassa sama kolikko voisi olla yhtä aikaa kahdella eri omistajalla. Transaktioita ei voitaisi siis suorittaa enää näiden kahden haaran välillä laisinkaan. Jotta lohkoketju saadaan pidettyä ketjuna pensaan sijaan ja jotta lohkoketjun pahantahtoinen manipulointi saadaan estettyä, täytyy jokaisessa haarautumiskohdassa päästä jollakin tavalla yksimielisyyteen siitä, kumpaa haaraa lähdetään seuraamaan ja kumpi hylätään.(3) Tätä päätöstä kutsutaan konsensuksen saavuttamiseksi.
Viestin muuttumattomuus
Viestin muuttumattomuuden ongelmaa on pohdittu pitkään ja yksi vanhimmista tähän liittyvistä esimerkeistä on Byzantine General problem, eli bysanttilaisten kenraalien ongelma. Ongelma esiteltiin vuonna 1982 (4) ja perustuu siihen, että miten voimme olla varmoja siitä, että lähettämäämme viestiä ei muokata sen jälkeen, kun olemme sen lähettäneet. Klassinen bysanttikenraaliongelma esitetään kenraaleiden ohjeistamisena. Kenraalit ovat piirittämässä linnaa ja heidän tulisi hyökätä koordinoidusti yhtä aikaa. Jos kenraaleille lähetetään viesti, voidaan viestinviejä kaapata ja viesti voidaan muokata vaikka vetäytymiskäskyksi. Kenraalit voivat myös itse muokata käskyjä ja lähettää vääränlaisia käskyjä eteenpäin. Kaikkien kenraalien tulisi olla yhtä mieltä, eli saavuttaa konsensus siitä miten he toimivat.
Ongelmaan on useita erilaisia ratkaisuja. Yleensä ratkaisu sisältää jonkin algoritmin, jonka mukaan lasketaan tietyn muotoinen tarkistussumma käskylle. Tarkistussumma voidaan toimittaa etukäteen tai se voidaan vaatia tietyn muotoiseksi. Seuraavassa käsiteltävät lohkoketjun konsensus-menetelmät ovat kaikki hieman erilaisia ratkaisuja tähän samaan ongelmaan.
Konsensus lohkoketjussa
Konsensus sanana tulee latinasta, com- "yhdessä, jonkun kanssa" ja sentire "tuntea". (5) Sanalla tarkoitetaan nykyään yksimielisyyttä jostakin asiasta.(6)
Koska koko lohkoketju toimii koneellisesti ilman tulkinnanvaraa, on konsensus saavutettava jollakin ennalta sovitulla tavalla. Yleisimmät konsensus-algoritmit ovat konsensus tehdyn työmäärän kautta (proof of work, PoW) ja konsensus omistusosuuksiin perustuen (proof of stake, PoS). Muita konsensus-algoritmeja ovat demokraattisempi Delegated Proof-of-Stake (DPoS), tilankäyttöön perustuva konsensus (Proof of Capacity, PoC) ja kolikkojen tuhoamiseen perustuva konsensus (Proof of Burn, PoB).(7)
Proof of Work -konsensus
Proof of Work perustuu laskentatehon määrään. Koska vaaditun muotoisen tarkistussumman laskenta kuluttaa valtavasti energiaa ja vaatii paljon prosessoriaikaa, ei yksittäinen toimija periaatteessa voi yksin päättää mitä lohkoon kirjoitetaan. Jos kaksi eri louhijaa päätyisi oikeaa muotoa olevaan tarkistussummaan yhtä aikaa (pensaan muodostumisen vaara), konsensus asetetaan ennen pitkää enemmän laskentatehoa keräävän ketjun puolelle.(8)
Joku valtiollinen hyökkääjä voisi periaatteessa saada kerättyä itselleen riittävän määrän resursseja, jotta voisi saada ”ylivoiman” muihin louhijoihin nähden. Tämä hyökkäys on nimeltään ”51 % attack”(9) ja sen idea esitetään kuvassa 3 (10). Jos hyökkääjällä olisi riittävästi resursseja, se voisi luoda oman lohkon, jossa olisi sen itse keksimiään transaktioita. Hyökkääjä voisi koittaa esimerkiksi siirtää valtavan määrän kolikoita omaan lompakkoonsa. Jos hyökkääjä onnistuisi laskemaan tälle lohkolle tarkistussumman ennen kaikkia muita, se voisi onnistua liittämään sen lohkoketjuun. Jos kaikki muut 49 % laskisivat erilaisen (oikeita transaktioita sisältävän) lohkon, ketju haaroittuisi. Seuraavaa lohkoa ryhdyttäisiin laskemaan välittömästi tämän jälkeen ja enemmän laskentatehoa omaava pystyisi lisäämään omaan ketjuunsa lohkoja toista nopeammin. PoW-järjestelmissä konsensus tapahtuu haaroittumisen jälkeen siten, että pidempi ketju hyväksytään ja lyhyemmät hylätään.(6) Tämä hyökkäys on mahdollista PoW-konsensus-järjestelmää käyttävissä lohkoketjuissa, kuten Bitcoin ja Lite-coin.
PoW-algoritmin suurin vahvuus on myös sen suurin heikkous. Suuri laskentatyö kuluttaa valtavan määrän sähköä. 2018 ilmestyneen tutkimuksen(11) mukaan Bitcoinin louhintatyö kulutti suurin piirtein saman sähkömäärän kuin koko Tanska. Tutkimuksen mukaan Bitcoinin, Ethereumin, Litecoinin ja Moneron louhimisessa kulutettiin vuosien 2016-2018 aikana keskimäärin 17 MJ, 7 MJ, 7 MJ ja 14 MJ energiaa jokaista louhittua dollarin arvoa kohti. Artikkelin kirjoittajat huomauttavat, että kuparin, kullan ja platinan louhimisella kaivoksista kulutetaan vähemmän energiaa ansaittua dollaria kohti. Kryptolouhinta vastaa siis aivan oikeaa louhintaa energiankulutukseltaan.
Proof of Stake -konsensus
PoS-järjestelmässä seuraavan lohkon tuottaja valitaan arpomalla. Tämän jälkeen lohko validoidaan ”Bysanttikenraali”-algoritmeilla, jossa useat varmistajat päätyvät yksimielisyyteen lohkon sisällöstä. PoS-validaattorit riskeeraavat osan omista kolikoistaan validointiprosessissa, jokainen kolikko toimii myös arpalippuna. Mitä enemmän riskeeraat, sitä todennäköisemmin pääset validaattoriksi. Jos he hyväksyvät vääränlaisen lohkon, he menettävät kolikkonsa. Oikeasta validoinnista myös palkitaan transaktiomaksujen muodossa. Palkkiota tai omia riskeerattuja kolikoitaan ei saa heti takaisin. Ne vapautetaan vasta jonkin ajan kuluttua, kun voidaan olla varmoja, ettei lohko-ketjuun ole piilotettu mitään yllättävää.(12, 13) PoS-konsensuksen ideae selitetään kuvassa 4. (14)
King ja Nadal esittelivät 2012 Proof of Stake -konsensuksen, jolla yritettiin paikata PoW:n energiankulutuksesta tulevia ongelmia tiettyjen turvallisuusuhkien lisäksi.(15) Tässä järjestelmässä PoW-työmäärä korvattiin kolikko-ikä -käsitteellä, jonka Satoshi Nakamoto esitteli jo vuonna 2010 ja sitä käytet-tiin bitcoinien transaktioiden priorisointiin. Kolikkoiän idea on yksinkertainen. Jos Marja saa tänään 10 kolikkoa ja hän pitää niitä 50 päivää, hänellä on 10*50 = 500 ”kolikkopäivää”. Tälle tietylle määrälle ja pitoajalle voidaan asettaa arvo, jolla saa suuremman todennäköisyyden päästä validaattoriksi.
Eri lohkoketjusysteemeissä on erilaisia tapoja valita validaattorit. Joissakin järjestelmissä validaattorit pysyvät samoina koko ajan, joissakin ne arvotaan tietyin väliajoin. (11)
Delegated Proof of Stake
Tässä konsensus-algoritmissa validaattorit äänestetään käyttäjien keskuudesta. Jokainen saa äänestää omaa suosikkiaan tai voi antaa omat äänensä jollekin toiselle käytettäväksi. Muuten tämä toimii hyvin samankaltaisesti kuin PoS-konsensuskin. (16)
Proof of Capacity
Proof of capacity (PoC) on konsensusmekanismi, joka käyttää kovalevy-tilaa laskentatehon sijaan louhintaoikeuksista päättämiseksi. PoW vaatii paljon energiaa ja PoS-järjestelmät kannustavat mieluummin säilömään kolikoita käyttämisen sijaan. (17)
PoC-järjestelmä toimii siten, että erilaisia mahdollisia tarkistussummia säilötään käyttäjien kovalevyillä jo ennen kuin lohkoa on muodostettu. Mitä enemmän tallennustilaa, sitä enemmän näitä tarkistussummia voidaan tallentaa. Jos käyttäjän kovalevyllä oleva tarkistussumma vastaa muodostetun lohkon tarkistussummaa, hän saa tallentaa sen ketjuun ja saa pitää transaktiokulut.
Proof of Burn, PoB
Proof of Burn perustuu käyttäjien tuhoamistaan kolikoista saaminsa oikeuksiin kirjoittaa seuraava ketjun lohko. PoB:ta sanotaan PoW:ksi, mutta ilman energiantuhlausta. Menetelmän keksijä Iain Stewart selvensi järjestelmää vertaamalla PoW-menetelmässä laitteiden ostoon tuhottuja dollareita tuhotuilla kolikoilla ostettuihin virtuaalisiin louhintalaitteistoihin. Mitä enemmän kolikoita on tuhottu, sitä suurempi virtuaalinen louhintalaitteisto hänellä on käytössään. Tuhottujen kolikoiden tuoma louhinta-arvo vähenee ajan myötä ihan niin kuin louhintalaitteistoihin tuhlattujen rahojenkin arvo vähenisi. (18)
Yhteenveto
Vaikka tämä teksti ei ehkä ollutkaan kaiken kattava opas lohkoketjujen konsensuksen ymmärtämisen kannalta, se toivon mukaan selvensi vähän mistä tarve konsensukselle tuleee ja miten eri konsensusmekanismit toimivat.
Lähteet
- Dilbert-sarjakuva Blockchainista https://hackernoon.com/demystifying-blockchains-8d364872ea4a Luettu 20.3.2020
- Reid, F., & Harrigan, M. (2013). An analysis of anonymity in the bitcoin system. In Security and privacy in social networks (pp. 197-223). Springer, New York, NY.
- Castor, A. A. (2017). Guide to Blockchain Consensus Protocols.
- Lamport, L., Shostak, R., & Pease, M. (2019). The Byzantine generals problem. In Concurrency: the Works of Leslie Lamport (pp. 203-226).
- Konsensus-sanan etymologia https://www.etymonline.com/word/consensus Luettu 20.3.2020
- Konsensus-sanan merkitys https://www.merriam-webster.com/dictionary/consensus Luettu 20.3.2020
- Erilaisia konsensus-algoritmeja https://www.investopedia.com/terms/c/consensus-mechanism-cryptocurrency.asp Luettu 20.3.2020
- Spirakis, P., & Tsigas, P. (Eds.). (2017). Stabilization, Safety, and Security of Distrib-uted Systems: 19th International Symposium, SSS 2017, Boston, MA, USA, November 5–8, 2017, Proceedings (Vol. 10616). Springer.
- Asiaa 51 % hyökkäyksestä https://www.investopedia.com/terms/1/51-attack.asp Lu-ettu 23.3.2020
- Kuva 51 % -hyökkäyksestä https://cointelegraph.com/explained/proof-of-work-explained Luettu 20.3.2020
- Krause, M. J., & Tolaymat, T. (2018). Quantification of energy and carbon costs for mining cryptocurrencies. Nature Sustainability, 1(11), 711-718.
- Proof of Stake- selitys https://dapp.review/article/181/Understanding-Blockchain-Fundamentals-Part-2-Proof-of-Work-Proof-of-Stake Luettu 21.3.2020
- Proof of Stake -selitys ja -kuva https://cryptographics.info/cryptographics/blockchain/consensus-mechanisms/proof-stake/ Luettu 21.3.2020
- Kuva muokattu lähteestä https://cryptographics.info/cryptographics/blockchain/consensus-mechanisms/proof-stake/ Luettu 21.3.2020
- King, S., & Nadal, S. (2012). Ppcoin: Peer-to-peer crypto-currency with proof-of-stake. self-published paper, August, 19.
- DPoS-algoritmit https://en.bitcoin.it/wiki/Delegated_proof_of_stake Luettu 21.3.2020
- PoC-mekanismi https://www.investopedia.com/terms/p/proof-capacity-cryptocurrency.asp Luettu 21.3.2020
- Proof of Burn-mekanismin selitys https://www.investopedia.com/terms/p/proof-burn-cryptocurrency.asp Luettu 21.3.2020
Kommentit
Lähetä kommentti