Szerző: Omer Shlomovits, ZenGo.
A Threshold-aláírási rendszer (Threshold Signature Scheme – TSS) egy kriptográfiai primitív, amely megosztott kulcsgenerálást és aláírást tesz lehetővé. A TSS használata a blokklánckliensekben új dimenziót jelent, amely számos előnyt nyújthat, különösen a biztonság szempontjából. A tágabb értelemben a TSS befolyásolhatja a kulcskezelő rendszerek (például a kripto tárcák) tervezését, és utat nyithat a natív DeFi használati esetek támogatásához. Ezzel együtt a TSS még mindig egy új technológia, így a kockázatokat és korlátokat is figyelembe kell venni.
Ebben a cikkben áttekintjük, mi az a TSS, milyen potenciális előnyöket biztosít a blokklánctérben, hogyan lehet telepíteni egy blokklánckliensre, milyen előnyei és hátrányai vannak a Shamir titkos megosztással és a Multisiggel szemben, milyen különböző módokon használható a TSS az elosztott kulcskezelésre, és végül megvitatjuk a TSS kockázatait és korlátait.
A kriptográfia ereje
A TSS megértéséhez először némi kriptográfiai alapismeretre van szükség. Az 1970-es évek óta egyre több internetes rendszer (például a TLS és a PGP) alkalmazott aszimmetrikus kriptográfiát, amelyet nyilvános kulcsú kriptográfiának (Public Key Cryptography – PKC) is neveznek. A PKC két kulcsot használ: egy nyilvános és egy privát kulcsot. Míg a nyilvános kulcs nem titok, és bárki bárkivel közölheti és használhatja, a privátkulcs titkos információ, amely a rendszer biztonságát adja.
A titkosítás és a digitális aláírás a PKC két leggyakoribb felhasználási módja. A titkosító és a digitális aláírási rendszerek egyaránt egy három algoritmusból álló eszköztárra támaszkodnak. Az első a privát/nyilvános kulcspár generálása, a második a titkosított szöveg/aláírás generálása, a harmadik pedig a visszafejtés/ellenőrzés folyamata. Ami a digitális aláírásokat illeti, az aláíró algoritmus az egyedi aláírás létrehozásához a privátkulcsot igényli, amelyet csak a tulajdonosa ismer. A aláírást a rendszer egy adott üzenethez csatolja úgy, hogy a nyilvános kulcs birtokában bárki képes ellenőrizni annak hitelességét és helyességét.
Blokklánc
Nem kétséges, hogy a blokklánc egy nagyon erőteljes technológia. A blokklánc egy konszenzusréteget biztosít, amely szervezi és rögzíti az eseményeket. Ez az infrastruktúra potenciális hatalmat ad nekünk, felhasználóknak, hogy decentralizált gazdaságokat vagy akár decentralizált kormányokat építsünk. Talán meglepő, de egy egyszerű blokklánc működéséhez szükséges kriptográfia alapjának megteremtéséhez elég a digitális aláírás. A blokklánc kontextusában a privátkulcsok identitásokat képviselnek, míg egy aláírás egy identitás által tett nyilvános nyilatkozat vagy állítás. A blokklánc rendezi a nyilatkozatokat, és egy szabálykészletnek megfelelően validálja őket, amely többek között azt biztosítja, hogy az aláírások meghamisíthatatlanok és helyesek.
A blokkláncban alkalmazott klasszikusabb titkosítással ellentétben a modern titkosítási eszköztár lenyűgöző varázstrükköket tartalmaz: ilyenek a zéróismeretes bizonyítás, a homomorf titkosítás és a többrésztvevős számítás, hogy csak néhányat említsünk. Ahogy az elmúlt évtizedben láthattuk, a blokklánckutatás a fenti témakörökben megvalósult közelmúltbeli áttörésekkel és más fejleményekkel rendkívüli mértékben előrevitte az alkalmazott kriptográfiát.
Ebben a cikkben az egyik ilyen áttörést ismertetjük: a hatékony, biztonságos Threshold-aláírásokat (TSS).
Az MPC és a Threshold-aláírási rendszer (TSS)
A többrésztvevős számítás (MPC) a kriptográfia egy ága, amely Andrew C. Yao úttörő munkájával kezdődött, közel 40 évvel ezelőtt. A MPC során egymás iránt bizalmatlan felek csoportja próbál közösen kiszámítani egy függvényt a bemeneti adataik alapján, miközben a bemeneti adatokat elrejtik egymás elől.
Példaként tegyük fel, hogy egy cég n számú alkalmazottja szeretné megtudni, ki keres a legtöbbet, méghozzá anélkül, hogy felfednék egymás előtt a tényleges fizetésüket. Ebben az esetben a bizalmas bemeneti adatok a fizetések, a kimenet pedig annak az alkalmazottnak a neve lesz, akinek a legmagasabb a fizetése. Ha ezt a számítást MPC segítségével végezzük, akkor egyetlen béradat sem szivárog ki a számítás során.
A MPC két fő tulajdonsága a helyesség és a bizalmas adatok védelme:
Helyesség: az algoritmus helyes kimeneti adatot ad (ahogy elvárjuk).
Bizalmas adatok védelme: a felek birtokában lévő titkos bemeneti adatok nem szivárognak ki a többi félhez.
A digitális aláírás elosztott kiszámításához MPC-t fogunk használni. Nézzük meg, hogyan alkalmazhatók a fenti tulajdonságok az aláírásokra. Ne feledjük, hogy az aláírások esetében három lépés van:
Kulcsgenerálás: az első lépés egyben a legösszetettebb is. Generálnunk kell egy kulcsot, amely nyilvános lesz, és a jövőbeli aláírások ellenőrzésére használják. De generálnunk kell minden félnek egy egyedi titkot is, amelyet úgy nevezünk majd, hogy titkos kulcsrész. Ami a helyességet és a bizalmas adatokat illeti, azt mondjuk, hogy a függvény ugyanazt a nyilvános kulcsot adja vissza minden félnek, továbbá a többitől eltérő titkos kulcsrészt minden egyes félnek úgy, hogy: (1) bizalmas adatok védelme: a felek titkos kulcsrésze nem szivárog ki a többi félhez, és (2) helyesség: a nyilvános kulcs a titkos kulcsrészek függvénye.
Aláírás: ez a lépés egy aláírás-generáló funkciót foglal magában. Mindegyik fél bemeneti adatként a titkos kulcsrészét adja, amely az előző lépés (az elosztottkulcs-generálás) kimeneteként jött létre. Van egy nyilvános bemeneti adat is, amely mindenki számára ismert, mégpedig az aláírandó üzenet. A kimenet egy digitális aláírás lesz, és a bizalmas adatok védelme biztosítja, hogy a számítás során ne szivárogjanak ki a titkos kulcsrészek.
Ellenőrzés: az ellenőrzési algoritmus ugyanaz, mint a klasszikus felállásban. Ahhoz, hogy az egykulcsos aláírásokkal kompatibilis legyen a rendszer, az kell, hogy bárki, aki ismeri a nyilvános kulcsot, képes legyen ellenőrizni és validálni az aláírásokat. A blokkláncvalidáló csomópontok pontosan ezt teszik.
A Threshold-aláírási rendszer (TSS) a megosztott kulcsgenerálás (DKG) és az elosztott aláírás fent leírt kompozíciójára utaló név.
A TSS és a blokkláncok kombinálása
A TSS blokkláncon belüli természetes hasznosítási módja az, ha úgy módosítunk egy blokkláncklienst, hogy az a kulcsokat és az aláírásokat TSS segítségével generálja. Itt a blokklánckliens kifejezés a parancsoknak azt a halmazát jelenti, amelyeket egy teljes csomópont végrehajt. A gyakorlatban a TSS technológia azt teszi lehetővé, hogy az összes privátkulcsra vonatkozó parancsot elosztott számításokkal helyettesítsük.
A részletesebb magyarázat érdekében először röviden leírjuk, hogyan jönnek létre új címek a klasszikus blokkláncdizájn szerint. Egyszerűen fogalmazva: új címet egy privátkulcs generálásával hozhatunk létre, majd a rendszer a privátkulcsból számítja ki a nyilvános kulcsot. Végül pedig a nyilvános kulcsból létrehozza a blokklánccímet.
Most a TSS segítségével tetszőleges számú (a továbbiakban: „n”) fél közösen kiszámítja a nyilvános kulcsot, és mindegyikük a privátkulcs titkos kulcsrészét birtokolja (az egyes kulcsrészeket nem közlik a többi féllel). A nyilvános kulcsból ugyanúgy levezethetjük a címet, mint a hagyományos rendszerben, így a cím létrehozásának módja blokkláncfüggetlen. Az előny az, hogy a privátkulcs már nem egy rendszerkritikus hibapont, mert minden fél csak egy részét birtokolja.
Ugyanez elvégezhető a tranzakciók aláírásakor. Ebben az esetben, ahelyett, hogy egyetlen fél írna alá a privátkulcsával, egy elosztott aláírás-generálást hajtunk végre több fél között. Tehát minden fél tud érvényes aláírást produkálni, amennyiben elegen vannak közöttük, akik becsületesen járnak el. A helyi számításról (rendszerkritikus meghibásodási pont) ezzel ismét interaktív megoldásra váltottunk.
Fontos megemlíteni, hogy a megosztott kulcsgenerálás olyan módon végezhető el, amely lehetővé teszi különböző típusú hozzáférési struktúrák alkalmazását: a privátkulcsokkal kapcsolatos műveletek során az általános „t az n-ből” beállítás képes ellenállni legfeljebb t tetszőleges hibának, anélkül, hogy az veszélyeztetné a biztonságot.
TSS vs. Multisig
Néhány blokklánc beépített vagy programozható TSS-funkciót kínál a szoftver részeként. A funkció neve multisig vagy multi-signature. A különbségek mélyebb megértéséhez a blokklánc alkalmazásrétegében található TSS-ként is tekinthetünk a multisigre.
Más szóval a multisig és a TSS lényegében hasonló célokat próbál elérni, de a TSS off-chain kriptográfiát használ, míg a multisig on-chain funkció. Azonban a blokkláncnak valahogy kódolnia kell a multisig tranzakciót, ami árthat a személyes adatok védelmének, mivel a hozzáférési struktúra (az aláírók száma) látható a blokkláncon. A multisig tranzakció költsége azért magasabb, mert a különböző aláírók információját is kommunikálni kell a blokkláncon.
TSS esetén a aláírók adatait a rendszer egy külsőre hétköznapi tranzakcióba ágyazza be, csökkentve a költségeket, és megőrizve az adatok bizalmas jellegét. A Multisig ellenben lehet nem interaktív, amivel megspórolható a különböző aláírók közötti bonyolult kommunikációs réteg fenntartásával járó nyűg.
A fő különbség az, hogy a multisig blokkláncspecifikus, és minden blokklánc esetében újra kell implementálni, bizonyos esetekben pedig egyáltalán nem támogatott. A TSS viszont tisztán kriptográfiára támaszkodik, így a támogatás mindig lehetséges. Egy nagyszerű cikk a különbségek illusztrációjával itt olvasható.
TSS vs. Shamir titkos megosztás rendszer
A Shamir titkos megosztás rendszer (SSSS) lehetőséget biztosít a privátkulcs elosztott tárolására, így míg a privátkulcs inaktív , több helyen tárolják. Az SSSS és a TSS között két különbség van:
Kulcsgenerálás: az SSSS-ben van egy fél, „az elosztó”, aki a privátkulcs titkos kulcsrészeinek generálását végzi. Ez azt jelenti, hogy a kulcsgenerálás időpontjában a privátkulcs egyetlen helyen jön létre, majd az elosztó elosztja azt a különböző helyekre. A TSS-ben nincs elosztó, mivel a szerepe úgy van szétosztva, hogy a teljes privátkulcs soha nem jelenik meg egy és ugyanazon a helyen.
Aláírás: az SSSS-ben a feleknek teljesen rekonstruálniuk kell a privátkulcsot az aláíráshoz, ami minden alkalommal rendszerkritikus hibapontot eredményez, amikor aláírásra van szükség. A TSS-ben a digitális aláírás elosztott módon történik anélkül, hogy valaha is újra összeállítanák a titkos kulcsrészeket.
Ahogy látható, a TSS-ben a privátkulcs (amely a rendszer biztonságát képviseli) az egész élettartama alatt soha nincs egy és ugyanazon a helyen.
Threshold-tárcák
A TSS technológián alapuló tárca egy kicsit más, mint a hagyományos kriptovaluta-tárcák. Egy hagyományos tárca általában egy helyreállító kifejezést generál, és ezt használja a címek determinisztikus előállításához. A felhasználó később ezt a hierarchikus determinisztikus (HD-) struktúrát használhatja: 1) a tárcacímekhez tartozó privátkulcsok elérésére és tranzakciók aláírására, valamint 2) az összes tárcakulcs helyreállítására a seed phrase segítségével.
A Threshold-tárcában a dolgok kicsit bonyolultabbak. Bár egy HD-struktúra generálása itt is lehetséges, annak létrehozását elosztott módon kell kiszámítani, másik MPC-protokollként. A feleknek közösen kell dönteniük arról, hogy mi a következő kulcs, amit használni fognak. Más szóval minden félnek meglesz a saját helyreállító kifejezése. A rendszer elkülönítva generálja a helyreállító kifejezéseket, és soha nem egyesíti őket, így egy fél sem tudja egyedül levezetni a privátkulcsokat a saját helyreállító kifejezéséből.
A TSS-alapú tárcák szintén rendelkeznek egy remek biztonsági funkcióval, amely anélkül teszi lehetővé a privátkulcs rotációját, hogy megváltozna a hozzá tartozó nyilvános kulcs és blokklánccím. A privátkulcs-rotáció – más néven proaktív titkos megosztás – egy újabb MPC-protokoll, amely a titkos kulcsrészeket veszi bemenetként, és új titkos kulcsrészkészletet ad eredményül. A régi titkos kulcsrészek törölhetők, és az újakat ugyanúgy lehet használni.
Ez a struktúra idődimenziót ad a biztonsághoz, vagyis a támadónak egyszerre több helyen kell lennie ahhoz, hogy támadja a Threshold-tárcát. A rotáció előtti és utáni titkos kulcsrészek kombinálása nem ad extra hatalmat a támadónak az aláírás hamisításához.
Az ilyen típusú tárca hátránya, hogy a helyreállító kifejezés hiánya miatt nem kompatibilis az egykulcsos tárcarendszerekkel. Ezért fontos figyelembe venni, hogy mely felek birtokolják a titkos kulcsrészeket.
Lehetséges architektúrából van választék:
A TSS kiszervezése: a felhasználó „n” szervert bíz meg, hogy elvégezze a számításokat. Ezzel valójában olyan szolgáltatókhoz szervezi ki a kulcsgenerálást, -kezelést és az aláírást, akik nem tulajdonosai az eszköznek, de némi ellenszolgáltatásért cserébe biztonsági réteget nyújtanak.
A több eszköz használata: A felhasználó a birtokában lévő eszközök között futtatja a TSS-t. Az egyik fél lehet például egy IoT-eszköz, a másik fél meg a felhasználó mobilja, a harmadik fél pedig a laptopja stb.
Hibrid: A TSS úgy működik majd, hogy egyes feleket külső szolgáltatók irányítanak, míg más felek felhasználótulajdonú eszközökön futnak.
Az első módszer leveszi a nehéz TSS-számítások terhét a felhasználókliensről. Viszont a szolgáltatók összejátszhatnak (feltételezzük, nem lesz elég olyan szolgáltató, akiket egyszerre támadnak meg, de a gyakorlatban ez előfordulhat), és ellophatják a felhasználó eszközeit.
A második módszer teljes körű irányítást biztosít a felhasználó számára, de megnehezíti a tranzakciók végrehajtását, mivel több online eszközre van szükség a TSS-számítás elvégzéséhez.
A harmadik lehetőség ötvözi az előnyöket, mivel a felhasználónak könnyű és gyors módot biztosít a tranzakciók végrehajtására anélkül, hogy el kellene fogadnia a felhasználói engedély nélküli tranzakciók végrehajtását.
A TSS és az okosszerződések
Az évek során a kutatók számos felhasználási lehetőséget találtak a digitális aláírások számára, és ezek közül néhány egyáltalán nem nyilvánvaló. A fent említett TSS egy kriptográfiai alapelem, amely jelentősen növelheti a biztonságot. A blokkláncok kontextusában elmondható, hogy sok funkció helyettesíthető TSS-alapú kriptográfiával. Decentralizált alkalmazások (DAppok), 2. rétegű (Layer2) skálázási megoldások, atomic swap, keverés, öröklés és még sok más építhető egy TSS-keretrendszerre. Ez végül lehetővé tenné, hogy a drága és kockázatos on-chain okosszerződés-műveleteket olcsóbb és megbízhatóbb alternatívák váltsák fel.
Néhány konkrét példa: A Multi-Hop Locks ügyesen használja a kétszereplős aláírásokat, és a biztonságosabb és védettebb fizetésicsatorna-hálózatával a Bitcoin Lightning hálózat alternatívájaként szolgálhat. A ShareLock valószínűleg a legolcsóbb on-chain keverési megoldás az Ethereum hálózatán, amely egyetlen Threshold-aláírás ellenőrzésén alapul.
Kockázatok
Az elmúlt néhány évben a TSS-implementációk száma jelentős növekedést mutatott. Ugyanakkor mivel viszonylag új technológia, még mindig vannak korlátok és aggályok vele kapcsolatban. A klasszikus nyilvános kulcsú kriptográfiához képest a TSS-protokollok nagyon összetettek lehetnek, és még nem tekinthetők „harcedzett” megoldásnak. Az egyszerű digitális aláírásokkal szemben a TSS általában további, gyengébb kriptográfiai feltételezéseket igényel. Ennek eredményeként olyan kriptográfiai támadási vektorok bukkannak fel, amelyek a hagyományos felállásokban nem léteztek (lásd ezt a prezentációt a 2019-es Breaking Bitcoin Konferenciáról). Alkalmazásvédelmi mérnökök és alkalmazott kriptográfusok segíthetnek biztonságosan telepíteni a TSS-protokollt a rendszerekben.
Pozitívum, hogy a meglévő és új implementációk a minőségi hozzájárulások, a peer review-k, az auditok és az algoritmikus teljesítményjavítások növekedése miatt egyre erősebbé válnak.
Záró gondolatok
Ebben a cikkben bemutattuk a Threshold-aláírási rendszer (TSS) alapjait, amely egy lenyűgöző kriptográfiai alapelem, és jelentősen átalakíthatja azt, ahogy a blokkláncot használjuk.
Mivel ez a cikk nem tárgyalta a BNB Chain és a Bitcoin hálózatán használható Threshold ECDSA-t, az érdeklődőknek ajánljuk figyelmébe a nemrégiben megjelent tanulmányok lenti listáját. Ha pedig szeretnél kipróbálni néhány TSS-implementációt, akkor itt találsz egy kódot a kétrésztvevős BNB Chain tárcához, vagy próbáld ki a ZenGo tárcát, amely a hibrid módszert alkalmazza a letétkezelő nélküli, kétrésztvevős BNB Chain tárca biztosításához.
További olvasnivaló: