Författare: Omer Shlomovits, ZenGo.
Threshold Signature Scheme (TSS) är en kryptografisk primitiv för generering och signering av distribuerade nycklar. Användningen av TSS i blockkedjeklienter är ett nytt paradigm som kan ge många fördelar, särskilt när det gäller säkerhet. I en bredare mening kan TSS påverka utformningen av nyckelhanteringssystem (såsom kryptoplånböcker) och bana väg för inbyggt stöd i DeFi-användningsområden . Med det sagt är TSS fortfarande en ny teknik, så riskerna och begränsningarna bör också beaktas.
I den här artikeln kommer vi att gå igenom vad en TSS är, vilka de potentiella fördelarna det ger blockkedjeutrymmet, hur det kan implementeras i en blockkedjeklient, hur det kan jämföras med Shamir hemlig delning och Multisig, vilka de olika sätten att använda TSS är för distribuerad nyckelhantering och slutligen diskuterar vi riskerna och begränsningarna.
Kraften i kryptografi
För att förstå TSS behöver vi först lite grundläggande kunskaper om kryptografi. Sedan 1970-talet har fler och fler internetsystem (som TLS och PGP) använt asymmetrisk kryptografi, vilket också kallas kryptering med offentlig nyckel (Public Key Cryptography/PKC). PKC använder två nycklar: en offentlig och en privat. Även om den offentliga nyckeln inte är någon hemlighet och kan publiceras och användas av vem som helst, är den privata nyckeln en del av hemlig information som representerar systemets säkerhet.
Kryptering och digitala signaturer är de två vanligaste användningsområdena för PKC. Både kryptering och digitala signaturer förlitar sig på uppsättningar av tre algoritmer. Den första är genereringen av det privata och offentliga nyckelparet, den andra är genereringen av en chiffertext/signatur och den tredje är processen för dekryptering/verifiering. När det gäller digitala signaturer kräver signeringsalgoritmen att den privata nyckeln, som endast ägaren känner till, producerar en unik signatur. Signaturen bifogas till ett givet meddelande på ett sätt så att alla som har den offentliga nyckeln kan verifiera dess äkthet och korrekthet.
Blockkedja
Det råder ingen tvekan om att blockkedjan är en mycket kraftfull teknik. Den ger ett konsensuslager som organiserar och registrerar händelser. En sådan infrastruktur ger oss, användarna, potentiell makt att bygga decentraliserade ekonomier och till och med regeringar. Överraskande nog kan kryptografin som behövs för att köra en grundläggande blockkedja enbart baseras på digitala signaturer. I kontexten för en blockkedja representerar de privata nycklarna identiteter, medan en signatur är ett offentligt uttalande eller anspråk som görs av en identitet. Blockkedjan deklarerar och validerar dem enligt en uppsättning regler, som bland annat säkerställer att signaturerna inte kan förfalskas och är korrekta.
I motsats till den mer klassiska kryptografin som används i blockkedjan innehåller den moderna kryptografiska verktygslådan några fantastiska magiska trick: nollkunskapsbevis, homomorfisk kryptering och flerpartsberäkning, för att nämna några. Som vi har sett under det senaste decenniet har blockkedjeforskningen drivit på tillämpad kryptografi enormt, med de senaste genombrotten inom allt ovanstående och mycket mer.
I den här artikeln kommer vi att fokusera på ett enda sådant genombrott: effektiva säkra tröskelsignaturer (TSS).
MPC och systemet för tröskelsignatur (TSS)
Flerpartsberäkning (MPC) är en gren av kryptografi som började med Andrew C. Yaos banbrytande arbete för nästan 40 år sedan. I MPC försöker en uppsättning parter som inte litar på varandra att gemensamt beräkna en funktion över sina indata samtidigt som dessa indata hålls privata.
Som ett exempel kan vi säga att n anställda på ett företag vill veta vem som får mest betalt, utan att avslöja för varandra sin faktiska lön. I det här fallet är de privata lönerna indata, och utdata är namnet på den anställde med högst lön. Genom att utföra denna beräkning genom MPC säkerställer vi att inte en enda lön läcker ut under processen.
De två huvudegenskaperna hos MPC är korrekthet och integritet:
Korrekthet: utdata som produceras av en algoritm är korrekta (som förväntat).
Integritet: de hemliga indata som en part har skulle inte läcka till de andra parterna.
Vi använder MPC för att beräkna en digital signatur på ett distribuerat sätt. Låt oss se hur ovanstående egenskaper kan tillämpas på signaturer. Kom ihåg att vi har tre steg för underskrifter:
Nyckelgenerering: det första steget är också det mest komplexa. Vi måste generera en nyckel som är offentlig och används för att verifiera framtida signaturer. Men vi måste också skapa en individuell hemlighet för varje part, som vi kallar en hemlig delning. Vad gäller korrekthet och integritet sägs det att funktionen kommer att producera samma publika nyckel för alla parter och en "hemlig andel" för var och en av dem, så: (1) integritet: ingen data kommer att läcka mellan parterna i de "hemliga andelarna" och (2) korrekthet: den publika nyckeln är en funktion av de "hemliga andelarna".
Signering: Detta steg involverar en signaturgenereringsfunktion. Indata från varje part kommer att vara dess hemliga resurs, skapad som utdata från föregående steg (distribuerad nyckelgenerering). Det finns också synpunkter från allmänheten som alla känner till, vilket är det budskap som ska undertecknas. Utdata kommer att vara en digital signatur och integritetsegenskapen säkerställer att inga läckor för hemliga andelar inträffar under beräkningen.
Verifiering: verifieringsalgoritmen förblir som den är i den klassiska inställningen. För att vara kompatibel med signaturer med en enda nyckel bör alla med kunskap om den offentliga nyckeln kunna verifiera och validera signaturerna. Det är precis vad blockkedjevaliderande noder gör.
Threshold Signature Scheme (TSS) är det namn vi ger den här sammansättningen av distribuerad nyckelgenerering (DKG) och distribuerad signering, ett tröskelsignaturschema.
Kombinera TSS med blockkedjor
Det naturliga sättet på vilket TSS kan användas i en blockkedja är genom att ändra en blockkedjeklient till att generera nycklar och signaturer med hjälp av TSS. Här använder vi termen blockkedjeklient för att hänvisa till den uppsättning kommandon som utförs av en fullständig nod. I praktiken gör TSS-tekniken det möjligt för oss att ersätta alla privata nyckelrelaterade kommandon med distribuerade beräkningar.
För att förklara det mer i detalj börjar vi med att kort beskriva hur nya adresser skapas på den klassiska blockkedjedesignen. Enkelt uttryckt kan vi skapa en ny adress genom att generera en privat nyckel och sedan beräkna den offentliga nyckeln från den privata nyckeln. Slutligen härleds blockkedjeadressen från den offentliga nyckeln.
Nu, med hjälp av TSS, skulle vi ha en uppsättning n parter som gemensamt beräknar den offentliga nyckeln, där var och en innehar en hemlig andel av den privata nyckeln (de enskilda aktierna avslöjas inte för de andra parterna). Från den offentliga nyckeln kan vi härleda adressen på samma sätt som i det traditionella systemet, vilket gör blockkedjan oberoende av hur adressen genereras. Fördelen är att den privata nyckeln inte längre är en enda felpunkt, eftersom varje part bara har en del av den.
Samma sak kan göras när du signerar transaktioner. I det här fallet kör vi en distribuerad signaturgenerering mellan flera parter i stället för att en enda part signerar med sin privata nyckel. Så varje part kan producera en giltig signatur så länge tillräckligt många av dem agerar ärligt. Återigen gick vi från lokal beräkning (enskild felpunkter) till en interaktiv.
Det är viktigt att nämna att den distribuerade nyckelgenereringen kan göras på ett sätt som tillåter olika typer av åtkomststrukturer: den allmänna "t av n"-inställningen kommer att kunna motstå upp till t godtyckliga fel i privata nyckelrelaterade operationer, utan att kompromissa med säkerheten.
TSS jämfört med Multisig
Vissa blockkedjor erbjuder TSS-funktionalitet som en inbyggd eller programmerbar del av programvaran. Vi kallar denna funktionalitet för multisig eller multi-signatur. För att bättre förstå skillnaderna kan vi titta på multisig som en TSS i blockkedjans applikationslager.
Med andra ord försöker både multisig och TSS i huvudsak uppnå liknande mål, men TSS använder kryptografi utanför kedjan, medan multisig sker på kedjan. Blockkedjan behöver dock ett sätt att koda multisig, vilket kan skada integriteten eftersom åtkomststrukturen (antalet signerare) exponeras på blockkedjan. Kostnaden för en multisig-transaktion är högre, eftersom informationen om de olika undertecknarna också måste kommuniceras på blockkedjan.
I TSS viks undertecknarnas uppgifter in i en transaktion som ser regelbunden ut, vilket minskar kostnaderna och upprätthåller integriteten. Å andra sidan kan multisig vara icke-interaktiv, vilket eliminerar besväret med att köra ett komplext kommunikationslager mellan de olika undertecknarna.
Den största skillnaden är att multisig är blockkedjespecifik och måste implementeras på nytt för varje blockkedja och i vissa fall stöds den inte alls. Omvänt förlitar sig TSS på ren kryptografi, så support är alltid möjlig. En bra artikel med illustrationer om skillnaderna finns här.
TSS jämfört med Shamir secret sharing scheme
Shamir Secret Sharing Scheme (SSSS) tillhandahåller ett sätt att lagra den privata nyckeln på ett distribuerat sätt så att medan den privata nyckeln lagras vilande på flera platser. Det finns två skillnader mellan SSSS och TSS:
Nyckelgenerering: i SSSS finns det en enda part som kallas "återförsäljaren" som ansvarar för att generera de privata nyckelhemliga aktierna. Det betyder att vid tidpunkten för nyckelgenerering genereras den privata nyckeln på en enda plats och distribueras sedan av återförsäljaren till de olika platserna. I TSS finns det ingen återförsäljare eftersom dess roll är fördelad så att hela den privata nyckeln aldrig finns på en enda plats.
Signering: i SSSS måste parterna rekonstruera hela den privata nyckeln för att kunna signera, vilket återigen resulterar i en enda felpunkt varje gång en signatur behövs. I TSS görs signeringen på ett distribuerat sätt utan att någonsin rekonstruera de hemliga resurserna.
Som vi kan se i TSS är den privata nyckeln (som representerar systemets säkerhet) aldrig på en enda plats under hela dess livstid.
Plånböcker med tröskel
En plånbok baserad på TSS-teknik är lite annorlunda än traditionella kryptovalutaplånböcker. Vanligtvis genererar en konventionell plånbok en hemlig fras och använder den för att deterministiskt härleda adresserna. Användaren kan senare använda denna hierarkiska deterministiska (HD) struktur för att 1) nå de privata nycklarna som motsvarar plånboksadresserna och signera transaktioner med dem, och 2) för att återställa alla plånboksnycklar med hjälp av den hemliga frasen.
I en tröskelplånbok är saker och ting mer komplexa. Även om det är möjligt att generera en HD-struktur måste dess generering beräknas på ett distribuerat sätt, som ett annat MPC-protokoll. Parterna måste gemensamt bestämma vilken nyckel som ska användas härnäst. Med andra ord kommer varje part att ha sin egen hemliga fras. De hemliga fraserna genereras separat och kombineras aldrig, så att en part inte ensam kan härleda de privata nycklarna från dess fras.
TSS-baserade plånböcker har också en trevlig säkerhetsfunktion, som möjliggör rotation av privat nyckel utan att ändra motsvarande offentliga nyckel och blockkedjeadress. Rotation av privata nycklar, även kallat proaktiv delning av hemligheter, är ännu ett MPC-protokoll som tar de hemliga resurserna som indata och matar ut en ny uppsättning hemliga resurser. De gamla hemliga resurserna kan tas bort och de nya kan användas på samma sätt.
En sådan struktur lägger till en tidsdimension till säkerheten, vilket innebär att en angripare måste befinna sig på flera platser samtidigt för att attackera en tröskelplånbok. Att kombinera hemliga resurser före rotationen och efter rotationen ger angriparen ingen extra kraft om de vill förfalska en signatur.
En nackdel med den här typen av plånbok är att avsaknaden av en hemlig fras gör den inkompatibel med plånbokssystem med en enda nyckel. Så det är viktigt att överväga vilka parter som kommer att inneha de hemliga aktierna.
Det finns några möjliga arkitekturer:
Outsourcing av TSS: användaren låter "n"-servrar köra beräkningen för deras räkning. Effektiv outsourcing av nyckelgenerering, hantering och signering till tjänsteleverantörer som inte är ägare till tillgångarna men som tillhandahåller ett säkerhetslager i utbyte mot ett visst incitament.
Använda flera enheter: användaren kör TSS mellan de enheter som de äger. Till exempel – en part kommer att vara någon IoT-enhet, en annan part kommer att vara användarens mobil, en annan part deras bärbara dator och så vidare.
Hybrid: TSS kommer att köras så att vissa parter kontrolleras av externa tjänsteleverantörer och vissa parter körs på användarägda enheter.
Den första metoden avlastar den tunga TSS-beräkningen från användarens klientsida. Å andra sidan kan tjänsteleverantörerna samarbeta (vi antar att tillräckligt många av dem inte attackeras samtidigt, men i praktiken kan de göra det) och stjäla användarens tillgångar.
Den andra metoden ger användaren full kontroll men gör det besvärligt att genomföra transaktioner eftersom du behöver flera enheter för att gå online och engagera dig i TSS-beräkningen.
Det tredje alternativet anses vara det bästa av två världar eftersom det ger användaren ett enkelt och snabbt sätt att genomföra transaktioner men utan att kompromissa med att få transaktioner gjorda utan användarens tillstånd.
TSS och smarta kontrakt
Under årens lopp har forskare hittat många användningsområden för digitala signaturer och vissa är förvånansvärt icke-triviala. Som nämnts tidigare är TSS en kryptografisk primitiv som kan öka säkerheten avsevärt. När det gäller blockkedjor kan vi säga att många funktioner kan ersättas med TSS-baserad kryptografi. Decentraliserade applikationer, lager 2-skalningslösningar, Atomic Swaps, blandning, arv och mycket mer kan byggas ovanpå ett TSS-ramverk. Detta skulle så småningom göra det möjligt att ersätta dyra och riskfyllda smarta kontraktsoperationer i kedjan med billigare och mer pålitliga alternativ.
För att ge några konkreta exempel: Multi-Hop Locks använder sig av tvåpartssignaturer på ett smart sätt och kan användas som ett alternativ till Bitcoin lightning-nätverk med ett säkrare och mer privat betalningskanalnätverk. ShareLock är förmodligen den billigaste blandningslösningen på kedjan för Ethereum, baserat på verifiering av en enda tröskelsignatur.
Risker
Under de senaste åren har det skett en betydande ökning av TSS-implementeringar. Eftersom det är en relativt ny teknik har den dock fortfarande vissa begränsningar och problem. Jämfört med klassisk kryptering med offentlig nyckel kan TSS-protokoll vara mycket komplexa och har ännu inte "testats". Vanligtvis kräver TSS ytterligare, svagare, kryptografiska antaganden jämfört med enkla digitala signaturer. Som ett resultat av detta upptäcks nu kryptografiska attackvektorer som inte fanns i traditionella konfigurationer (se den här presentationen från Breaking Bitcoin Conference 2019). Säkerhetsingenjörer och tillämpade kryptografer kan hjälpa till att på ett säkert sätt distribuera TSS i ditt system.
På den positiva sidan blir befintliga och nya implementeringar starkare på grund av en ökning av kvalitetsbidrag, kollegiala granskningar, revisioner och algoritmiska prestandaförbättringar.
Sammanfattningsvis
I den här artikeln introducerade vi grunderna i tröskelsignatursystemet (TSS), som är en fascinerande kryptografisk primitiv som har potential att avsevärt förändra hur vi använder blockkedjan.
Eftersom den här artikeln inte diskuterade Threshold ECDSA som kan användas i Binance Chain och Bitcoin, kan de som är intresserade hänvisa till följande lista över de senaste artiklarna. Om du vill leka med vissa TSS-implementeringar kan du också hitta en kod för tvåparts-Binance Chain-plånbok här eller prova ZenGo-plånboken, som använder hybridmetoden för att tillhandahålla en icke-förvarande tvåpartsplånbok för Binance Chain.
Mer information: