top of page

KRYPTOKEISARIT

Blogi: Welcome
Blogi: Blog2
  • Writer's pictureDiligence dude

We DID it? –Iotan sharding ratkaisu ja hajautetut tunnisteet

Updated: May 5, 2020



Hiljattain IF:n ohjelmoija Hans Moog esitteli Iotan tulevaa sharding ratkaisua videohaastattelussa. Haastattelussa käydään ensin läpi Coordicide projektin perusteita ja tämän jälkeen esitellään keskeinen osuus Iotan sharding visiosta. Sharding on vielä tutkimusasteella, mutta testisimulaatioita päästään todennäköisesti näkemään testiverkossa vielä tämän vuoden puolella. Joka tapauksessa sharding ei tule olemaan osa Coordicide projektia, vaan toimiessaankin se otetaan käyttöön vasta Coordiciden jälkeen.



Lisäksi sharding ratkaisusta on tulossa niin ikään Hans Moogin blogisarja ja sarjan kaksi ensimmäistä osaa on jo luettavissa täältä: https://medium.com/@hans_94488


Mistä shardingissa on kyse? Suurimmassa osassa tämän hetkisistä DLT ratkaisuista verkon kaikki koneet hyväksyvät jokaisen tilisiirron tai verkkoon tallennettavan muutoksen (esim. data-transaktion). Tämä aiheuttaa väistämättä ylärajan verkkoon tallennettavien muutosten määrälle (tps = transaction per second). Vaikka järjestelmän konsensus olisi kuinka nopea, vain tietty määrä tilisiirtoja ehtii kulkea kaikille verkon koneille. Lisäksi mitä suurempi tps on, sitä nopeammin verkkoon tallennetun datan määrä kasvaa. Laitteilta vaaditaan siis yhä suurempaa tallennuskapasiteettia. Aikayksikössä käsiteltävien tilisiirtojen määrää voi kasvattaa vähentämällä verkon konsensukseen osallistuvien koneiden määrää, mutta silloin verkko on vähemmän hajautettu. Yksinkertaistetusti voi sanoa, ettei ole mahdollista tehdä rajattomasti skaalautuvaa hajautettua järjestelmää, mikäli jokainen verkon kone joutuu käsittelemään jokaisen tilisiirron.


Shardingissa verkko pilkotaan pienempiin osiin (=shard), ja jokainen osa käsittelee ja tallentaa omat tilisiirtonsa ja muodostaa niistä konsensuksen. Lisäksi vaaditaan tapa, millä dataa tai arvoa voi siirtää verkon osasta toiseen (=intershard communication). Mikäli verkko voidaan pilkkoa yhä pienempiin osiin, ja jokainen verkon osa huolehtii vain omista tilisiirroistaan, ei tilisiirtojen kokonaismäärälle aikayksikössä ole teoriassa ylärajaa.


Tämä yksinkertainen ajatus johtaa kuitenkin kahteen kohtalaisen vaikeaan ongelmaan:


1. Miten toteuttaa verkon eri osien välinen kommunikaatio?

2. Miten estää yksittäisen verkon osan turvallisuuden heikkeneminen?


Kohta 1 on helpompi ratkaista ja käytetty keino riippuu mm. protokollan rakenteesta ja konsensuksesta. Mikäli sama node seuraa sekä tilisiirtoa lähettävää, että vastaanottavaa osaa verkosta, voi node varmistua tilisiirron aitoudesta ilman erillistä mekanismia. Mm. Cardano on esittänyt keinon, millä kaksi PoW lohkoketjua voivat kommunikoida keskenään ilman että vastaanottava lohkoketju seuraa lähettävää lohkoketjua. Tässä ratkaisussa lähettävästä lohkoketjusta tiivistetään todistus, minkä väärentäminen vaatisi yhtä suuren laskentatyön kuin koko lähettävään lohkoketjuun on koko ketjun historian aikana suunnattu laskentatyötä.


Cardano on kehittänyt myös mekanismin millä kaksi PoS lohkoketjua voi kommunikoida keskenään. Tässä ratkaisussa lähettävän lohkoketju on linkitetty ketjun luomishetkestä vastaanottavaan lohkoketjuun seuraavalla tavalla: Lähettävän ketjun luomishetkellä on valittu paljon tokeneita omaavien nodejen ryhmä, mikä omaa mandaatin allekirjoittaa kyseisestä ketjusta vastaanottavaan ketjuun siirtyvät transaktiot. Tämä ryhmä muuttuu hallitusti lohkoketjun historian ajan, niin että tietyn hetken ryhmän kokoonpano valtuuttaa aina seuraavan mandaattia kantavan ryhmän suorittamaan tehtävää, ja tämä valtuutus tallennetaan myös vastaanottavaan ketjuun. (kts. yst. tarkemmin Cardano arvostelun Sidechain kohta). Iota ratkaisee osien välisen kommunikaation hyödyntämällä Tanglen perusrakennetta, mutta tästä myöhemmin lisää. Joka tapauksessa jo nykyisin on olemassa monia ratkaisuja verkon osien väliseen kommunikaatioon.


Kohta 2. on keskeinen syy minkä vuoksi sharding ongelmaa ei ole vielä täysin ratkaistu. Mikäli verko jaetaan osiin, ja sen osat suorittavan omat konsensuksensa, on verkon pienempi osa aina helpompi korruptoida kuin verkko mitä ei ole jaettu osiin. Mikäli verkko pohjaa PoW konsensuksen, hyökkääjä voi keskittää kaiken laskentatehonsa yksittäiseen osaan. Mikäli verkko on jaettu n osaan, on hyökkääjälle n kertaa helpompi vallata yksittäinen osa, kuin jakamaton verkko. PoS järjestelmässä taas hyökkääjä voi keskittää kaikki tokeninsa yksittäiseen verkon osaan ja saavuttaa verkon osassa enemmistön (ja tehdä esim. double-spend hyökkäyksen).


Tähän asti ollaan ajateltu, että ainoa tapa kiertää ongelma on yhdistää verkon osan konsensus koko järjestelmän konsensukseen. Tästä on kyse mm. Ethereumin Serenity projektissa. Tällaista systeemiä rakennettaessa huomataan kuitenkin pian, että järjestelmä muuttuu monimutkaiseksi suhteellisen nopeasti.


Aloitetaan koko verkon konsensuksesta. Tarvitaan jonkinlainen pääkonsensus mihin eri osien konsensukset liitetään. Tämän tulee olla erittäin vaikeasti murrettava, joten sitä pyörittävien nodejen tulisi olla mahdollisimman luotettavia. (Esim. PoS järjestelmässä suuren token omistuksen omaavia nodeja, joilla on lisäksi tokeneita panttina rangaistukseksi nodeille mitkä yrittävät poiketa konsensuksesta). Lisäksi tarvitaan pienempiä verkon osia jotka muodostavat omat konsensuksensa, mutta aika ajoin linkittävät nämä konsensukset pääkonsensukseen. (Esim. hash sen hetkisestä verkon tilasta siirretään osaksi pääkonsensusta). Kuitenkin mikäli hyökkääjällä on verkon osankin enemmistö (mikä on pieneksi pilkotussa verkossa kohtalaisen helppoa), hän voi luoda täysin absurdin virheellisen todistuksen verkon sen hetkisestä tilasta. Virheellinen todistus voidaan lähettää pääkonsensukseen ja näin rikkoa järjestelmä. Tarvitaan siis keino, millä verkon osan tietyn hetken tila voidaan luotettavasti siirtää osaksi pääkonsensusta. Tämä johtaa herkästi järjestelmään missä paikallinen (kohtalaisen epäluotettava) konsensus siirtyy asteittain aina suuremman ja suuremman varmistumisen tilaan ja lopuksi osaksi pääkonsensusta. Jokaisessa siirtymisessä tarvitaan yhä suurempaa luottamusta tarkistavilta tahoilta, mikä tarkoittaa joko suurempaa joukkoa nodeja, tai sitten käytetään suuremman pantin antaineiden nodejen ryhmää. Molemmat vaihtoehdot lisäävät järjestelmän kustannuksia.


Ratkaisuun liittyy myös muita hyökkäyskeinoja ja tarvitaan suuri määrä turvamekanismeja, jotta järjestelmää ei saada murretuksi. Ethereumissa validoija nodet jaetaan eri tehtäviin ja jokainen lisätty mekanismi ja vaihe vaatii erillistä laskentatyötä. PoS pohjaisissa järjestelmissä tämä tarkoittaa usein myös suurtaa määrä tokeneita sidottuna konsensuksen muodostamiseen. (Kts. yst. tarkemmin Ethereum arvostelun Serenity osuus.) Lopulta turvamekanismien monimutkaisuus voi asettaa omat rajoitteensa järjestelmän skaalautuvuudelle, ja loputtomasti skaalautuvaa järjestelmää on hyvin vaikea rakentaa. Esimerkiksi Ethereumin Serenityssä sharding myötäkin järjestelmän on arvioitu parhaimmillaan kykenevän suorittamaan (vain) noin 3000 tps.




Dynaaminen sharding

Kun luin ensimmäisen kerran Iotan sharding ratkaisusta, se tuntui lähes huijaukselta. Ratkaisun lähtökohta oli hyvin erilainen perinteiseen käsitykseen sharding-järjestelmistä.


Iotan sharding lähtee ajatuksesta, minkä mukaan verkon luotettavuus voidaan ajatella riippuvan sen käyttäjämääristä. Oletetaan että Iotan pääverkon luotettavus on tällä hetkellä X. Mikäli verkon käyttäjämäärät kaksinkertaistuvat, ei verkon luotettavuus ole suoranaisesti 2X (sillä suuremmissa verkoissa valta voi herkästi keskittyä), mutta se on silti selvästi suurempi kuin X. Eli mikäli verkon käyttäjämäärä kasvaa, vaaditaan suurempaa tps-nopeutta, mutta samalla verkon luotettavuus lisääntyy. Tällöin voidaan ajatella, että on ”varaa” jakaa verkko useampiin osiin, ilman että verkosta tulee epäluotettava. Ongelmaksi muodostuu kuitenkin, että verkon kuormitus vaihtelee DLT järjestelmissä suuresti. Ei riitä, että jaetun verkon osat kykenevät keskustelemaan keskenään, vaan verkon tulisi aina olla jaettu optimaaliseen määrään osia, niin että sen kuormitus ja luotettavuus olisivat tasapainossa.


Iota esittelee ns. dynaamisen sharding ratkaisun, minkä avulla verkko voi spontaanisti jakautua ja yhdistyä tilanteen mukaan, ja vielä eri nodeille eri tavalla. Tähän tarkoitukseen DAG antaa paremman mahdollisuuden kuin lohkoketju.


Järjestelmä toimii suurin piirtein seuraavalla tavalla. Tanglessa jokainen tilisiirto varmistaa kaksi edellistä tilisiirtoa ja muodostavat näin verkkomaisen rakenteen. Aiemmin on käytetty tiettyjä sääntöjä minkä mukaisesti nodejen tulisi valita tilisiirrot mihin uudella tilisiirrollaan linkittyvät, mutta nämä ovat olleet lähinnä suosituksia ja pyrkineet sujuvoittamaan verkkomaisen rakenteen muodostumista. Iotan sharding ratkaisussa jokainen tilisiirto saa uuden numeroarvon. Todennäköisesti numeroarvot tulevat olemaan 0 ja erittäin suuren luvun välillä, mutta jotta asiaa olisi helpompi hahmottaa, käytetään tässä esimerkissä kulma-asteita 0-360. Tähän mennessä Tangle on mielletty verkoksi mikä muodostaa nauhamaisen rakenteen, ja ”uutta nauhaa” syntyy sitä mukaa kun uusia transaktioita liitetään edellisiin.


Sharding ratkaisua voi hahmottaa kuvittelemalla, että tämä nauha on kanaverkko, ja kanaverkko taivutetaan ympyräksi kuin omenapuun runkoa suojatessa. Maata lähinnä olevat kanaverkon solmut kuvastavat vanhoja tilisiirtoja ja korkeimmalla olevat kanaverkon solmut ovat tuoreimpia tilisiirtoja. Kun halutaan liittää uusi tilisiirto verkkoon, sille valitaan tietty (kulma-aste)luku, sanotaan vaikka 36. Kulma-asteet hahmotetaan verkon keskeltä käsin katsottuna (eli omenapuun rungosta). Tilisiirto voi liittyä vain sellaiseen kohtaan verkkoa, että sen toiselle puolen jäävä tilisiirto on suurempi kuin 36 ja toiselle puolen jäävä tilisiirto on pienempi kuin 36. näin ollen uudet tilisiirrot järjestäytyvät kehälle automaattisesti astelukunsa mukaiseen järjestykseen ja samalla verkko muuttuu ”korkeammaksi”.


Alussa jokainen kone seuraa koko verkkoa, mutta kun verkon kuormitus kasvaa voi pienemmän resurssin omaavat laitteet siirtyä seuraamaan vain tiettyä sektoria verkosta esim. 30-90 asteen sektoria. Laitteiden seuraamat sektorit voivat mennä päällekkäin ja yksi laite voi myös seurata useampia sektoreita esim. 20-30 ja 115-160.


Mikäli laite A yrittää siirtää tilisiirron laitteelle B, mutta laite B ei seuraa laitteen A:n sektoria, täytyy laitteen A todistaa, että tilisiirto on tapahtunut ennen kuin B hyväksyy tilisiirron. Koska Tanglessa tilisiirto hyväksyy aina kaksi edellistä tilisiirtoa, tilisiirrot linkittyvät myös epäsuorasti toisiinsa. Kulkemalla ”kanaverkon” solmuja yläviistoon sisältyy ylemmän silmun todistukseen epäsuorasti alempien tilisiirtojen todistukset. Näin ollen A voi todistaa tilisiirron 1. tapahtuneen alla kuvatulla tavalla:





Laite A odottaa, että riittävän pitkä aika tilisiirrosta 1 on kulunut ja luo sitten tilisiirron 2, mikä epäsuorasti todistaa tilisiirron 1. tapahtuneen. Tilisiirto 2 on B:n sektorissa, joten B voi tilisiirron 2 kautta saada vakuutuksen tilisiiron 1 aitoudesta.


Mitä kauempana (aste)luvun perusteella kohdesektori on, sitä pidempi aika tarvitaan lohkojen väliselle kommunikaatiolle.


Yllä kuvattu tapa muodostaa Tangle-verkko mahdollistaa, että laitteet voivat aina seurata verkosta kapasiteettinsa mukaista osaa, ja vain niitä kohtia mistä ovat kiinnostuneita. On suunnitteilla, että osa verkon sektorinumeroista jaetaan maapallon kattavaksi geografiseksi verkoksi, niin että jokaista numeroa vastaa tietty maapallon sijainti. Tällöin laite voi seurata esimerkiksi sektoria mikä kattaa läntisen osan Lontoota. Suurin osa IoT-laitteiden toiminnasta on nimenomaan paikallista tiedon ja arvon vaihtoa. Lisäksi on kehitteillä erityisiä kolmannen osapuolen (mahdollisesti maksullisia) lisäpalveluita, millä arvon/datan siirto kauempaan lohkoon nopeasti on mahdollista.


Turvallisuus:

Alussa kaikki koneet seuraavat koko Tanglea, ja verkon turvallisuus on hyvä. Kun yhä suurempi määrä laitteita liittyy verkkoon, tps nopeus kasvaa, ja verkko alkaa jakaa kuormitustaan osiin, ensin niin että pienemmillä resursseilla varustetut laitteet alkavat seurata vain tiettyä osaa verkosta. Hiljalleen yhä suurempi osa laitteista siirtyy seuraamaan vaan tiettyjä sektoreita. Mikäli verkon kuormitus vähenisi nopeasti, silloin yksittäisten sektoreiden turvallisuus laskisi, mutta toisaalta laitteet kykenisivät seuraamaan yhä suurempaa osuutta verkosta ja laajempia sektoreita, jolloin yksittäistä aluetta seuraisi edelleen lähes yhtä suuri määrä laitteita ja turvallisuustaso ei pääse laskemaan liikaa.


Ratkaiseeko dynaaminen sharding siis koko sharding-ongelman? Yksistään se ei sitä tee. Mikäli ajatellaan että verkko on niin kovalla kuormituksella, että yksittäinen laite kykenisi seuraamaan vain 1/10 000 osaa verkosta, silloin tällaisella pienelläkin sektorilla olisi valtavasti laitteita. Kuitenkin verkossa olisi myös suuria toimijoita, joilla olisi suuri määrä kilpailtua resurssia. Nykyisessä sharding ehdotuksessa on tarkoituksena käyttää resurssina ns. paikallista manaa. Mana on yksinkertaistetusti noden omistamien tokenien määrä kerrottuna ajalla minkä node on tokeneita omistanut. Toisaalta mana myös hajoaa ajan saatossa, joten omistamalla tietyn määrän tokeneita mana ei kasva äärettömiin, vaan lähenee tiettyä raja-arvoa. Paikallista manaa käytettäessä, mikäli suuri toimija siirtäisi tokeninsa kaukaisesta sektorista toiseen, ei mana seuraisi mukana. Kuitenkin suurella toimijalla voisi edelleen olla yli 1/10 000 verkon tokeneista, ja keskittämällä nämä tokenit verkon pienelle sektorille, hän voisi saada ajan myötä riittävästi manaa ottaakseen sektorin haltuunsa. 10 000 sektoria/shardia ei siis ole realistinen. Toisaalta 10 sektoria tietyssä hetkessä on todennäköisesti hyvinkin realistista ja toimivaa.


Tässä kohtaa käytännöllisyys on hyvä ottaa mukaan arvioon. Nykyinen Coordicide ratkaisu pyrkii virallisesti yli 1000 tps lukuihin, mutta simulaatioissa on saavutettu jopa 10 000-20 000 lukuja. Toisaalta kehitteillä on myös mm. työnimellä ”tangle multiverse” kulkeva ratkaisu, ja sillä on simulaatioissa päästy jopa miljoonien tps-lukuihin. Yhdistämällä nykyinen Coordice ja sharding ratkaisu päästään siis ainakin 10 000 lukuihin, ja mahdollisesti jopa kymmeniin miljooniin tps. Visa käyttää noin 4000 tps, joten voidaan melkoisella varmuudella sanoa että Coordicide + sharding siirtää DLT verkkojen skaalautuvuus ongelman ainakin viisi vuotta eteenpäin. Toisaalta nykyisin ollaan kehittämässä mm. hajautettuja tunnisteita, mitkä voivat jatkossa mahdollistaa ylläkuvattuun shardin ratkaisuun yhdistettäessä käytännössä loputtoman määrän tilisiirtoja sekunnissa. Hajautetut tunnisteet vaativat kuitenkin standardien kehittämisen, ja infrastruktuurin muutoksen, mikä vie vuosia aikaa.





Hajautetut tunnisteet (Decentralized Identifier = DID)

DID yhdistää fyysisen tunnisteen ja digitaalisen identiteetin toisiinsa. DID voi olla mikä tahansa tunniste, esimerkiksi sormenjälki, laitteeseen upotettu mikrosiru, viivakoodi etc. Ajatuksena on että tunnisteeseen liitetään public ja private avain, ja tällä avaimella toimitaan virtuaaliverkoissa. Mikäli IoT laitteeseen liitetään pieni sirullinen tunniste, voidaan tunniste erottaa muusta piiristä niin ettei tunnistetta pääse ulkopuolelta lukemaan/varastamaan. Tunnisteen avulla laite voi allekirjoittaa tilisiirtoja tai dataa. Halutussa vaiheessa, esim. kun laite lähtee tehtaalta, tunniste aktivoidaan, ja tieto tunnisteesta siirtyy DLT verkkoon, jolloin edes tehdas ei pysty jälkeenpäin vaikuttamaan tunnisteeseen. Tällaisia järjestelmiä voidaan rakentaa lukuisia eri tunniste-metodeihin perustuen.


Lisäksi aiheeseen liittyy ns. trusted hardware, missä tietty osa piiriä voidaan erottaa omalle alueelleen sirusta niin ettei piirin toimintaa voida ulkopuolelta tarkkailla tai peukaloida. Mikäli trusted hardware sirun rajatulle alueelle ladataan luotettava ohjelma, sitä on erittäin vaikea hakkeroida ulkopuolelta. Vielä astetta pidemmälle menee ns. ASIC sirut, joita ei pysty jälkeenpäin edes uudelleen ohjelmoimaan, ja jotka suorittavat vain äärimmäisen optimoidusti sitä tehtävää mikä piirille on kirjoitettu. Kaikki nämä fyysisen maailman järjestelmät muodostavat yhdessä ekosysteemin, ja tämän järjestelmän perustuksille voidaan mahdollisesti tulevaisuudessa rakentaa myös DLT järjestelmien luotettavuutta.


Kuvittele että yllä kuvattu sharding järjestelmä perustuu DID, ja ei käytä manaa. Tällöin jotta tietyn verkon sektorin voisi korruptoida, pitäisi murtaa lukuisia erilaisia pieniä siruja, joiden autenttisuus on varmistettu valmistajan toimesta. Ei riittäisi, että hyökkääjä ostaisi valtavan määrän pieniä siruja ja laittaisi nämä toimimaan puolestaan, sillä sirun omistajakaan ei pysty muokkaamaan ASIC sirujen koodia. Trusted hardware siruja omistava voisi (mahdollisesti) korruptoida sirunsa ja hyökätä niiden avulla, mutta nämä muodostaisivat vain osan verkosta. Ulkopuoliselle hakkerille olisi vaikeaa hakkeroida niin ASIC, kuin trusted hardware sirujakin. Lisäksi olisi hyvin vaikeaa luoda tyhjästä identiteettejä (ns. sybil hyökkäys), sillä hajautetut tunnisteet linkittäisivät jokaisen identiteetin tiettyyn todelliseen tehtaalla valmistettuun siruun.


Voi siis olla, että hajautettujen DLT systeemien lopullisen turvan luovat lopulta fyysisen maailman innovaatiot ja infrastruktuurin muutokset. Sitä ennen voi olla vaihe missä Iotan sharding toimii yhtä aikaa sekä mana- että DID-pohjaisilla ratkaisuilla. Jotta DID infrastruktuuri pääsee kehittymään, vaaditaan standardeja, jotta nämä hyvin erilaiset tunnisteet saadaan keskustelemaan keskenään. Tällaisia standardeja ollaan parhaillaan luomassa, ja olisin hyvin yllättynyt, mikäli meillä ei viiden vuoden päästä olisi kyseistä standardia olemassa. Toisaalta on vaikea arvioida koska, ja kuinka varmasti DID yleistyy? Mikäli IoT ja DID yleistyvät, hyvin monenlaiset sharding ratkaisut tulevat toimimaan. Esim. Cardanon visioimat vierekkäiset lohkoketjut ovat tuolloin mahdollisia, ja takaavat periaatteessa loputtoman skaalautuvuuden. Kuitenkin tuollaisessakin maailmassa Iotan dynaaminen sharding omaa tiettyjä ominaisuuksia, minkä vuoksi se on parempi tapa jakaa verkko kuin muut tähän asti esitellyt:


1. verkon suorituskyky ja turvallisuus on helppo tasapainottaa

2. verkko sietää laajatkin kuormituksen vaihtelut

3. jokainen voi seurata sitä osaa verkosta mitä haluaa


Iotan sharding ei siis ratkaise sharding ongelmaa samalla tavoin kuin mitä Ethereum yrittää (=puhtaasti kryptografisesti). Mutta ilman DID järjestelmääkin, se pääsee todennäköisesti turvallisesti suurempaan tps lukuun kuin esim. Ethereumin Serenity. Sharding ratkaisujen käytännöllisyyttä voidaan hahmottaa arvioimalla kuinka suuren tps ne sallivat, kuinka paljon datan säilytystä tarvitaan ja kuinka kallis ratkaisu on. Jokaisessa näissä Iotan dynaaminen sharding on vahvempi kuin kilpailijoiden ratkaisut. Lisäksi mikäli DID jatkaa kehitystään, Iotan visio saattaa myös olla ns. lopullinen ratkaisu skaalautuvuus ongelmaan ja koko kryptotrilemmaan.






58 views0 comments
bottom of page