Autor: Omer Shlomovits, ZenGo.
Lävisignatuuriskeem (TSS – Threshold Signature Scheme) on hajusaks võtmeloomeks ja allkirjastamiseks ette nähtud krüptoprimitiiv. TSS-i kasutamine plokiahelaklientides on uus paradigma, millel võib eriti turbevaldkonnas olla palju eeliseid. Laiemas mõttes võib TSS mõjutada võtmehaldussüsteemide (nt krüptorahakottide) lahendust ja aidata kaasa omatoele detsentraliseeritud rahanduse kasutamisel. TSS on aga siiski veel uus tehnoloogia, seega tuleks arvesse võtta ka riske ja piiranguid.
Käesolevas artiklis on juttu sellest, mis on TSS, mis on selle võimalikud eelised plokiahelas, kuidas juurutada seda plokiahelakliendis, kuidas võrrelda seda Shamiri saladusejaostuse ja mitme allkirjaga kaitsega, millised on mitmesugused viisid TSS-i kasutamiseks hajusas võtmehalduses ning lõpuks arutleme riskide ja piirangute üle.
Krüptograafia on võimas
TSS-i mõistmiseks on kõigepealt vaja põhiteadmisi krüptograafiast. Alates 1970. aastatest on üha enam internetisüsteeme (nt TLS ja PGP) kasutanud asümmeetrilist krüptograafiat, mida nimetatakse ka avaliku võtme krüptograafiaks (PKC – public key cryptography). PKC kasutab kahte võtit: ühte avalikku ja ühte privaatset. Avalik võti pole saladus ja seda võivad avaldada ning kasutada kõik, ent privaatvõti on salajane teave, mis tagab süsteemi turvalisuse.
Krüptimine ja digitaalsed allkirjad on kõige levinumad PKC kasutusviisid. Nii krüptimise kui ka digitaalsete allkirjade skeemid tuginevad kolmele algoritmikomplektile. Esimene on privaat- ja avaliku võtme paari genereerimine, teine on krüptogrammi/allkirja genereerimine ja kolmas on dekrüptimine/kinnitamine. Digitaalsete allkirjade korral vajab allkirjastusalgoritm ainulaadse allkirja genereerimiseks privaatvõtit, mis on teada ainult omanikule. Allkiri on teatud kindlale teatele lisatud nii, et kõik avaliku võtme valdajad saavad selle autentsuse ja õigsuse kinnitada.
Plokiahel
Plokiahel on kahtlemata väga võimas tehnoloogia. Sellel on konsensuskiht, mis korraldab ja registreerib sündmusi. See taristu võimaldab kasutajatel luua detsentraliseeritud majandusi ja isegi valitsusi. Üllataval kombel saab põhilise plokiahela käitamiseks vajalik krüptograafia põhineda ainult digitaalsetel allkirjadel. Plokiahela kontekstis esindavad privaatvõtmed identiteete ja allkiri on identiteedi avalik avaldus või väide. Plokiahel korrastab avaldusi ja valideerib need reeglikomplekti kohaselt, mis tagab muu hulgas ka allkirjade mittevõltsitavuse ja õigsuse.
Erinevalt plokiahelas kasutatavast klassikalisest krüptograafiast on tänapäevases krüptimises ägedaid trikke: näiteks teadmise puudumise tõend, homomorfne krüptimine ja ühisarvutus. Viimasel kümnendil on plokiahela uurimine oluliselt edendanud rakenduslikku krüptograafiat, tuues kaasa hiljutised läbimurded kõigis eespool nimetatud valdkondades ja mujalgi.
Selles artiklis keskendume ühele sellisele läbimurdele, milleks on tõhusad turvalised lävisignatuurid (TSS).
MPC ja lävisignatuuriskeem (TSS)
Ühisarvutus (MPC – Multi-party computation) on krüptograafia haru, mis sai alguse Andrew C. Yao murrangulisest tööst peaaegu 40 aastat tagasi. MPC korral püüavad osapooled, kes üksteist ei usalda, arvutada koos välja oma sisendite funktsiooni, hoides sisendid privaatsena.
Oletagem, et ettevõttes soovivad n töötajat teada, kes saab kõige rohkem palka, aga seda ilma üksteisele oma tegelikku palganumbrit avaldamata. Siin on privaatsisendiks palgad ja väljundiks töötaja nimi, kelle palk on kõrgeim. Ühisarvutuse kasutamise korral ei tehta arvutuse käigus teatavaks ühtegi palganumbrit.
MPC põhiatribuudid on õigsus ja privaatsus.
Õigsus: algoritmi arvutatud väljund on õige (eelduspärane).
Privaatsus: ühe osapoole valduses olevaid salajasi sisendandmeid ei tehta teatavaks teistele osapooltele.
Arvutame MPC abil digitaalse allkirja hajusal viisil. Vaatame, kuidas eespool nimetatud atribuute saab rakendada allkirjadele. Meenutagem, et allkirjade korral tuleb läbida kolm etappi.
Võtme genereerimine: esimene etapp on ühtlasi kõige keerulisem. Vaja on genereerida võti, mis on avalik ja mida kasutatakse edaspidi allkirjade kinnitamiseks. Aga lisaks on kõigi osapoolte jaoks vaja genereerida ka eraldi saladus, mida nimetame salaosakuks. Ütleme, et õigsuse ja privaatsuse huvides väljastab funktsioon kõigile pooltele sama avaliku võtme ning igale poolele eraldi erineva salaosaku järgmiselt: (1) privaatsus – salaosakute andmeid ei tehta teistele pooltele teatavaks; (2) õigsus – avalik võti on salaosakute funktsioon.
Allkirjastamine: see etapp hõlmab allkirja genereerimise funktsiooni. Iga osapoole sisend on tema salaosak, mis on loodud eelmise etapi väljundina (hajus võtmeloome). On ka avalik sisend, mis on kõigile teada, nimelt allkirjastatav teade. Väljundiks on digitaalne allkiri ja privaatsusatribuut tagab, et arvutamisel pole tehtud salaosakuid teatavaks.
Kinnitamine: kinnitamisalgoritm on samasugune nagu klassikalisel kujul ikka. Ühe võtmega allkirjadega ühildumiseks peaksid kõik avalikku võtit kasutada oskavad pooled saama allkirju kinnitada ja valideerida. Just seda teevad plokiahela valideerimise sõlmed.
Hajusat võtmeloomet (DKG – distributed key generation) ja lävisignatuuriskeemi hajusat allkirjastamist nimetatakse koos lävisignatuuriskeemiks (TSS).
TSS-i kombineerimine plokiahelatega
Tavaline viis TSS-i plokiahelas kasutamiseks on muuta plokiahelaklienti, nii et see genereeriks TSS-i abil võtmeid ja allkirju. Praegusel juhul viitab plokiahelakliendi termin täieliku sõlme täidetavale käsukomplektile. Praktikas võimaldab TSS-i tehnoloogia meil asendada privaatvõtmega seotud käsud ühisarvutustega.
Selgitame seda üksikasjalikumalt, alustades lühidalt sellest, kuidas luuakse klassikalises plokiahelalahenduses uusi aadresse. Lihtsalt öeldes saame luua uue aadressi, genereerides privaatvõtme ja seejärel arvutades privaatvõtme põhjal avaliku võtme. Lõpuks tuletatakse avalikust võtmest plokiahela aadress.
TSS-i kasutades oleks meil n osapoolt, kes arvutavad ühiselt avalikku võtit, igaühel on privaatvõtme salaosak (neid üksikpoolte osakuid teistele osapooltele ei avaldata). Avaliku võtme põhjal saame aadressi tuletada samamoodi nagu traditsioonilises süsteemis, muutes plokiahela aadressi genereerimisest sõltumatuks. Eelis on see, et privaatvõti pole enam nõrk lüli, sest iga osapool valdab sellest vaid ühte osa.
Sama saab teha tehingute allkirjastamisel. Sellisel juhul kasutatakse ühe osapoole privaatvõtmega allkirjastamise asemel mitut osapoolt hõlmavat hajusat allkirjaloomet. Nii saab iga osapool luua kehtiva allkirja, kuni neist piisav osa tegutseb ausalt. Jällegi liikusime kohalikust arvutusest (nõrk lüli) interaktiivsesse arvutusse.
Tähtis on mainida, et hajus võtmeloome saab toimuda viisil, mis võimaldab mitmesuguseid juurdepääsustruktuure: üldseadistus „t n-ist” talub privaatvõtmega seotud toimingute korral kuni t mis tahes tõrget ilma turvet ohustamata.
TSS vs. mitme allkirjaga kaitse
Mõnel plokiahelal on sisseehitatud või tarkvara programmeeritava osana TSS-i funktsioonid. Seda funktsiooni nimetatakse mitme allkirjaga kaitseks ehk mitmikallkirjaks. Selleks et mõista erinevusi paremini, saame mitme allkirjaga kaitset vaadata kui plokiahela rakenduskihi TSS-i.
Teisisõnu püüavad nii mitme allkirjaga kaitse kui ka TSS saavutada põhimõtteliselt sarnaseid eesmärke, aga TSS kasutab plokiahelavälist krüptograafiat ja mitme allkirjaga kaitse töötab plokiahelas. Plokiahelal on siiski vaja võimalust mitme allkirjaga kaitset kodeerida, kuna see kaitse võib kahjustada privaatsust, sest juurdepääsustruktuur (allkirjastajate arv) on plokiahelas nähtav. Mitme allkirjaga kaitse tehingu hind on kõrgem, sest plokiahelas tuleb edastada ka erinevate allkirjastajate teave.
TSS-is on allkirjastajate andmed integreeritud tavalisse tehingusse, see vähendab kulusid ja säilitab privaatsuse. Teisest küljest võib mitme allkirjaga kaitse olla mitteinteraktiivne, sel juhul pole vaja kasutada erinevate allkirjastajate vahelist keerukat sidekihti.
Peamine erinevus on selles, et mitme allkirjaga kaitse on plokiahelakohane ja seda on iga plokiahela korral vaja uuesti juurutada ning mõnel juhul ei toetata seda üldse. TSS rajaneb seevastu puhtalt krüptograafial, seega on tugi alati tagatud. Siin on suurepärane artikkel, mis annab erinevustest ülevaate.
TSS vs. Shamiri saladusejaostuse skeem
Shamiri saladusejaostuse skeem (SSSS – Shamir secret sharing scheme) on viis privaatvõtme hajustalletuseks, nii et kui privaatvõti on puhkeolekus, siis talletatakse seda mitmes kohas. SSSS-i ja TSS-i vahel on kaks erinevust.
Võtme genereerimine: SSSS-is on üks osapool, keda nimetatakse diileriks, kelle ülesanne on genereerida privaatvõtme salaosakuid. See tähendab, et võtme genereerimise ajal luuakse privaatvõti ühes kohas ja seejärel hajutab diiler selle erinevatesse kohtadesse. TSS-is ei ole diilerit, sest roll on hajutatud nii, et kogu privaatvõti pole kunagi ühes kohas.
Allkirjastamine: SSSS-i korral peavad osapooled allkirjastamiseks kokku panema kogu privaatvõtme, see osutub iga kord, kui allkirja on vaja, jälle nõrgaks lüliks. TSS-is kasutatakse hajusat allkirjastamist, mille korral pole vaja salaosakuid uuesti kokku panna.
Nagu näha, siis pole privaatvõti (mis näitab süsteemi turvet) TSS-is kogu oma olelustsükli jooksul kunagi ühes kohas.
Lävepõhised rahakotid
TSS-i tehnoloogial põhinev rahakott on traditsioonilistest krüptorahakottidest veidi erinev. Tavaliselt genereerib rahakott seemnefraasi ja kasutab seda deterministlikult aadresside tuletamiseks. Kasutaja saab selle hierarhilise deterministliku (HD) struktuuri abil hiljem 1) juurde pääseda rahakoti aadressidele vastavatele privaatvõtmetele ja nende abil tehinguid allkirjastada ning 2) taastada seemnefraasi abil kõik rahakoti võtmed.
Lävepõhine rahakott on keerulisem. Ehkki HD-struktuuri loomine on võimalik, tuleb genereerida hajutatult nagu MPC protokolli korral. Osapooled peavad koos otsustama, millist võtit järgmisena kasutatakse. Teisisõnu on igal osapoolel oma seemnefraas. Seemnefraasid genereeritakse eraldi ja neid ei kombineerita, et üks osapool ei saaks privaatvõtmeid oma seemnefraasi põhjal tuletada.
TSS-il põhinevatel rahakottidel on lisaks hea turbefunktsioon, mis võimaldab privaatvõtme rotatsiooni ilma vastava avaliku võtme ja plokiahela aadressi muutmiseta. Privaatvõtme rotatsioon, mida nimetatakse ka ennetavaks saladusejaostuseks, on MPC protokoll, mis võtab sisendiks salaosakud ja genereerib uue komplekti salaosakuid. Vanad salaosakud saab kustutada ja uusi saab kasutada samamoodi.
Selline struktuur lisab turbele ajamõõtme, mis tähendab seda, et ründaja peab lävepõhise rahakoti ründamiseks olema ühel ajal mitmes kohas. Salaosakute kombineerimisest enne ja pärast rotatsiooni pole ründajale allkirja võltsimisel abi.
Sellist tüüpi rahakoti üks miinus on see, et kui seemnefraasi pole, siis see ühevõtmeliste rahakotisüsteemidega ei ühildu. Seega on tähtis arvestada, millised osapooled valdavad salaosakuid.
Võimalikud arhitektuurilahendused on järgmised.
TSS-i sisseostmine: kasutaja laseb n serveril enda eest arvutusi teha. Võtmete genereerimine, haldamine ja allkirjastamine ostetakse tõhusalt sisse teenuseosutajatelt, kellele varad ei kuulu, aga kes pakuvad tasu eest turbekihti.
Mitme seadme kasutamine: kasutaja käitab TSS-i mitmes talle kuuluvas seadmes. Näide: üks osapool on IoT-seade, teine osapool on kasutaja mobiiltelefon, kolmas osapool tema sülearvuti jne.
Hübriid: TSS töötab nii, et mõnda osapoolt juhivad välised teenuseosutajad ja mõned osapooled töötavad kasutajale kuuluvates seadmetes.
Esimene meetod võtab kasutaja klientseadmelt ära TSS-i suure arvutuskoormuse. Teisest küljest võivad teenuseosutajad teha omavahel kokkuleppe (eeldame, et piisavat osa neist samal ajal ei rünnata, aga see võib siiski juhtuda) ja varastada kasutaja vara.
Teine meetod annab kasutajale täieliku kontrolli, aga muudab tehingute tegemise vaevaliseks, sest veebis TSS-i arvutusega tegelemiseks on vaja mitut seadet.
Kolmandat valikut peetakse kuldseks keskteeks, sest kasutaja saab tehinguid teha hõlpsalt ja kiirelt ilma ohuta, et tehinguid tehtaks ilma kasutaja loata.
TSS ja nutilepingud
Aastate jooksul on uurijad digitaalsetele allkirjadele leidnud palju kasutusvõimalusi ning mõni neist on üllatavalt oluline. Nagu mainitud, on TSS krüptoprimitiiv, mis võib turvet märgatavalt suurendada. Plokiahelate kontekstis saab öelda, et paljud funktsioonid on asendatavad TSS-il põhineva krüptograafiaga. TSS-i raamistikule saab rajada detsentraliseeritud rakendusi, 2. kihi skaleerimislahendusi, aatomivahetusi, kombineerimise, päriluse ja palju muud. See võimaldaks lõpuks asendada kallid ja riskantsed plokiahelapõhised nutilepingutoimingud odavamate ja töökindlamate variantidega.
Mõned konkreetsed näited: mitme hopiga lukud kasutavad nutikalt kahe osapoole allkirju ja neid saab kasutada Bitcoini välkvõrgu asemel turvalisema ja privaatsema maksekanalivõrguna. ShareLock on tõenäoliselt odavaim Ethereumi plokiahelasisene kombineerimislahendus, mis põhineb ühe lävisignatuuri kinnitamisel.
Riskid
Viimase paari aasta jooksul on TSS-i kasutamine märkimisväärselt suurenenud. Kuna tegu on aga suhteliselt uue tehnoloogiaga, on sel siiski mõned piirangud ja murekohad. Võrreldes klassikalise avaliku võtme krüptograafiaga võivad TSS-i protokollid olla väga keerulised ja neid pole veel praktikas katsetatud. Tavaliselt vajab TSS lihtsate digitaalsete allkirjadega võrreldes täiendavaid ja nõrgemaid krüptograafilisi eeldusi. Seetõttu leitakse krüptograafilisi ründevektoreid, mida traditsioonilistel seadistustel polnud (vt 2019. aasta Breaking Bitcoin Conference’i esitlust). Turbetehnikud ja rakendusliku krüptograafia asjatundjad saavad aidata süsteemis TSS-i ohutult juurutada.
Positiivse poole pealt muutuvad olemasolevad ja uued juurutused tugevamaks tänu kvaliteetsetele kaastöödele, vastastikusele hindamisele, audititele ja algoritmi jõudluse suurendamisele.
Lõppmärkused
Selles artiklis andsime baasülevaate lävisignatuuriskeemist (TSS), mis on põnev krüptoprimitiiv ja võib märkimisväärselt muuta viisi, kuidas kasutame plokiahelat.
Kuna artiklis ei käsitletud lävepõhist ECDSA-d, mida saab kasutada Binance Chaini ja Bitcoini korral, soovitame huvilistel tutvuda järgmiste hiljutiste dokumentidega. Kui soovid veidi katsetada TSS-i juurutamist, siis siin on kahe osapoole Binance Chaini rahakoti kood. Või proovi ZenGo rahakotti, millel on mittehallatava kahe osapoole Binance Chaini rahakoti kasutamiseks hübriidmeetod.
Lisalugemist: