Konsensusalgoritmit

Teemu Hyytiäinen
Lohkoketju Laboratorio
4 min readSep 5, 2018
Image: Pixabay

Keskitetyssä järjestelmässä yksi toimija ylläpitää järjestelmää. Lohkoketjuissa jokaisella osallistujalla on sananvaltaa, miten he ajattelevat tapahtumien kulkeneen. Konsensusalgoritmien tehtävä on luoda lohkoketjussa yhteisymmärrys, mitkä siirrot kuuluvat lohkoketjuun ja mitkä eivät. Konsensusalgoritmeissa käytetään erilaisia matemaattisia todistustapoja. Lisäksi peliteorian oppien mukaisesti käyttäjiä kannustetaan käyttäytymään järjestelmän kannalta oikein eli konsensuksen luontiin osallistuvia toimijoita palkitaan.

Bysantin kenraalin ongelma kuvaa haastetta yhteisymmärryksen luomista tilanteessa, jossa osa toimijoista on pahantahtoisia. Konsensusalgoritmien tehtävä on toimia tehokkaasti myös tilanteessa, jossa kaikki toimijat eivät halua yhteistä hyvää.

Konsensusalgoritmit ratkaisevat myös kaksinkertaisen käytön ongelman (double-spend problem). Kaksinkertaisen käytön ongelma on teknologinen ongelma. Esimerkiksi tilanne, jossa Alice lähettää Bobille musiikkitiedoston. Bob ei voi tietää onko Alicella edelleen kopio kyseisestä musiikkitiedostosta. Musiikkitiedostoesimerkissä tällä ei ole niin suurta merkitystä, mutta jos mietitään samaa tilannetta rahan kanssa, on tilanne ongelmainen. Konsensuksen ansiosta kaikki osapuolet tietävät rahakkeen siirtyessä lohkoketjussa toiselle osapuolelle, ettei lähettäjällä enää ole kyseistä rahaketta käytettävissä.

Seuraavaksi avataan muutamia erilaisia konsensusalgoritmeja lyhykäisyydessään.

Proof of Work

Ensimmäinen lohkoketjuissa käytetty konsensusalgoritmi on todistustyöstä eli Proof-of-Work (PoW), jossa hyödynnetään koneiden laskentatehoa uuden tiedon lisäämiseen ja yhteisen konsensuksen luomiseen. Louhinnassa yksittäiset koneet eli solmut käyttävät laskentatehoa ratkaistakseen eräänlaisen matemaattisen tehtävän. Tehtävää ei pysty ratkaisemaan laskemalla, vaan ratkaiseminen tapahtuu yrityksen ja erehdyksen kautta. Solmut kokeilevat vuoron perään erilaisia ratkaisuja, kunnes löytävät oikean ratkaisun. Kun solmu löytää oikean ratkaisun, se lähettää ratkaisunsa koko verkon tarkistettavaksi. Ratkaisun tarkistaminen on äärimmäisen nopeata. Tämän takia oikean ratkaisun löydyttyä sen oikeellisuus saadaan nopeasti varmistettua verkossa. Kun ratkaisu on todettu oikeaksi, lohko on louhittu ja lohkon louhija saa lohkosta mahdollisen lohkopalkkion, sekä lohkon sisältämät siirtomaksut itselleen. Tämän jälkeen solmut alkavat louhia seuraavaa lohkoa. Yksittäinen solmu voi käyttää louhintaan esimerkiksi näytönohjainta tai prosessoria. Mitä enemmän louhijalla on laskentatehoa käytettävissä, sitä todennäköisemmin hän löytää oikean ratkaisun ennen muita. PoW-konsensusalgoritmi luottaa siihen, että enemmistö solmuista on hyväntahtoisia ja hyväntahtoiseen toimintaa kannustetaan maksamalla lohkon louhijalle palkkio. Tilanteessa, jossa pahantahtoinen taho omistaa verkossa yli 50% laskentatehosta voidaan toteuttaa hyökkäys järjestelmää vastaan. Tätä hyökkäystä kutsutaan 51%-hyökkäykseksi. Pahantahtoinen taho voi lisätä vääriä lohkoja lohkoketjuun, koska hän tarkistaa sen oikeaksi. Isoissa lohkoketjuissa, joissa käytetään PoW-konsensusalgoritmia tämä kuitenkin vaatisi kohtuuttoman paljon laskentatehoa. Esimerkiksi Bitcoinin on todettu käyttävän enemmän laskentatehoa kuin 500 parasta supertietokonetta yhteensä. Jokainen voikin miettiä, kuinka haastavaa tämän kaltaisen järjestelmän kaappaaminen 51%-hyökkäyksellä olisi.

Proof of Stake

Proof-of-Stake (PoS) eli todistuspanoksesta-konsensusalgoritmissa ei käytetä laskentatehoa. Louhinta toteutetaan käyttämällä järjestelmän omaa rahaketta ja louhijat valitaan etukäteen. Käyttäjät, joilla on tarpeeksi rahakkeita voivat tulla valituiksi solmuksi. Toimiessaan solmuna, ja halutessaan louhia, käyttäjä tallettaa tietyn määrän rahakkeita. Tämän jälkeen kaikista halukkaista arvotaan louhijat. Kaiken tämän tapahduttua louhijat asettavat panoksensa erityiseen lompakkoon. Louhintaprosessi on melko yksinkertainen. Jokainen louhija louhii uudesta lohkosta hänen rahakkeitaan vastaavan määrän. Jos louhija omistaa 10% kaikista rahakkeista, hän louhii 10% uudesta lohkosta ja saa palkkioksi 10% kaikista siirtomaksuista.

PoS ratkaisee energiankulutusongelman, jonka PoW synnytti ja muun muassa Ethereum on siirtymässä PoS-konsensusalgortimiin. On kuitenkin huomioitava, että sama 51%-hyökkäys on mahdollista toteuttaa, sekä PoW:ssä että PoS:ssä. PoS:ssä hyökkäys voidaan toteuttaa, kun yksittäinen taho omistaa yli 50% kaikista rahakkeista. Isossa järjestelmässä on kuitenkin äärimmäisen kallista ostaa yli 50% kaikista rahakkeista. Lisäksi hyökkääjä ei välttämättä halua toteuttaa hyökkäystä. Hyökkäys todennäköisesti laskee rahakkeiden arvoa, koska käyttäjät eivät enää luota järjestelmään ja alkavat myymään rahakkeitaan. Tämä laskee myös hyökkääjän rahakkeiden arvoa.

Proof of Authority

Proof-of-Authority (PoA) perusteisessa verkossa siirtojen validointi tapahtuu siihen erikseen valittujen tahojen toimesta. Kyseisiä tahoja kutsutaan validaattoreiksi. Validaattorit pyörittävät sovellusta, joka mahdollistaa heidän kirjata siirrot lohkoon. Prosessi on automatisoitu, joten validaattoreiden ei tarvitse jatkuvasti seurata tietokoneensa toimintaa. Tietokoneiden täytyy kuitenkin olla käynnissä ja jatkuvassa toiminnassa, jotta ne pystyvät validoimaan ja kirjaamaan siirrot. Validaattoreiden koneiden häiritseminen voi siis häiritä järjestelmääkin. Onkin tärkeää valita useita validaattoreita PoA:han tai muuten toimintavarmuus kärsii.

Järjestelmän luoja antaa käyttäjille oikeuksia ryhtyä validaattoreiksi. Validaattorit saavat itselleen kaikki lohkopalkkiot ja siirtomaksut. Tämän insentiivin avulla validaattoreita kannustetaan toimimaan verkossa oikein. Jos paljastuu, että validaattori on toiminut virheellisesti, voidaan hänen validaattorin asemansa perua.

Proof of Weight

PoS-algoritmissä pohjimmainen ajatus on, että toimija, jolla on eniten rahakkeita, on paras todennäköisyys louhia lohko. Todistuspainosta eli Proof-of-Weight -algoritmissa (PoW) käytetään jotain muuta painoarvoa, jolla määritetään todennäköisyys lohkon louhinnalle. Proof-of-Space on yksi PoW:n implementaatio.

Proof of Space aka Proof of Capacity

Todistustilasta eli Proof-of-Space (PoSpace) käyttää tallennustilaa verifioimaan siirtoja lohkoketjussa. Tallennustilan käyttäessä näytönohjaimia ja prosessoreita huomattavasti vähemmän energiaa, on se PoW:ta energiaystävällisempi ratkaisu.

PoSpacessa on kolme osapuolta. Käyttäjä, todistaja ja verifioija. Käyttäjä käyttää lohkoketjua, eikä edes välttämättä tiedä käytettävästä konsensusalgoritmista. Todistaja on varannut tallennustilaa, jolla hän todistaa tietojen oikeellisuuden ja verifioija kirjaa todistajan todistamat siirrot lohkoon. Käytännössä todistuksen suorittaja lähettää verifioijalle todistuksen, että suorittaja on varannut pienen osan tallennustilastaan. Verifioinnin tulisi olla tehokasta ja tapahtua hyvin nopeasti. Lisäksi on tärkeätä, että todistaja ei pystyisi lähettämään todistusta ilman tallennustilan varaamista. Yksi tapa toteuttaa PoSpace on käyttää hard-to-pebble -graafeja. Verifioija pyytää todistajaa rakentamaan hard-to-pebble -graafin ja todistaja lähettää merkinnän, joka todistaa graafin luonnin.

Tangle

IOTA ei ole periaatteessa lohkoketju, mutta se toimii lohkoketjun tavoin julkisena tilikirjana. Se on esineiden internetin laitteille suunniteltu maksuverkko, jossa ei ole siirtomaksuja. Ilmaiset siirrot mahdollistavat mikromaksut esineiden internetin laitteiden välillä. Tangle on tekniikka, joka mahdollistaa IOTA:n toiminnan. Tangle on DAG eli suunnattu syklitön verkko (directed acylic graph). Verkossa jokainen siirto varmistaa aikaisempia siirtoja. Jokainen verkkoon lähetetty siirto tekee PoW:n tavoin työtä ja varmistaa kaksi aikaisempaa siirtoa. Periaatteessa lähettäjä siis maksaa siirtomaksunsa työllä. Alla olevasta kuvasta näkee, kuinka siirrot varmentavat aina kaksi aikaisempaa siirtoa.

Siirrot varmentavat aikaisempia siirtoja

Koska jokainen siirto varmentaa kaksi siirtoa, on Tangle erittäin skaalautuva. Teoriassa järjestelmä on sitä nopeampia, mitä enemmän siirtoja järjestelmässä tehdään.

Konsensus lohkoketjussa saadaan demokraattisesti kaikkien toimijoiden kesken. Erilaisten konsensusmekanismien joukosta voidaan valita omaan lohkoketjujärjestelmään parhaiten soveltuva mekanismi. Kaikissa konsensusmekanismeissa on sekä hyviä että huonoja puolia. Tästä syystä niitä kehitellään jatkuvasti paremmiksi ja pyritään luomaan toimintavarmempia ratkaisuja konsensuksen löytämiseen lohkoketjussa.

--

--