Threshold Signatures uitgelegd

Delen
Copied to clipboard!
Threshold Signatures uitgelegd
Luister naar het artikel
00:00 / 00:00

Auteur: Omer Shlomovits, ZenGo.

Threshold Signature Scheme (TSS) is een cryptografische primitive voor het genereren en ondertekenen van distributed keys. Het gebruik van TSS in blockchain-clients is een nieuw paradigma dat tal van voordelen kan bieden, vooral op het gebied van beveiliging. In bredere zin kan TSS het ontwerp van key management systemen (zoals crypto wallets) beïnvloeden en het voortouw nemen voor native ondersteuning in DeFi use cases. Dat gezegd hebbende, TSS is een nieuwe technologie, dus de risico's en beperkingen moeten goed overwogen worden.

In dit artikel behandelen we wat een TSS is, wat de mogelijke voordelen zijn voor de blockchain, hoe het kan worden geïmplementeerd in een blockchain, hoe het kan worden vergeleken met Shamir secret sharing en Multisig. Wat zijn de verschillende manieren om TSS te gebruiken voor een distributed key management en tenslotte bespreken we de risico's en beperkingen.

De kracht van cryptografie

Om te begrijpen wat TSS is hebben we eerst wat basiskennis van cryptografie nodig. Sinds de jaren zeventig gebruiken steeds meer internet systemen (zoals TLS en PGP) asymmetrische cryptografie, ook bekend als Public key cryptography (PKC). PKC maakt gebruik van twee soort sleutels: één openbaar en één privé. Hoewel de openbare sleutel geen geheim is en door iedereen kan worden gepubliceerd en gebruikt, is de privésleutel een stukje geheime informatie die de beveiliging van het systeem vertegenwoordigt.

Encryptie en digitale handtekeningen zijn de twee meest voorkomende toepassingen voor PKC. Zowel encryptie- als digitale handtekeningen zijn afhankelijk van drie algoritmen. Ten eerste het genereren van private en publieke sleutelparen, het tweede is het genereren van een cijfertekst/handtekening en ten derde is er een proces van decodering/verificatie. Met betrekking tot digitale handtekeningen vereist het ondertekende algoritme dat de persoonlijke sleutel, die alleen bekend is bij de eigenaar, een unieke handtekening produceert. De handtekening is aan een bepaald bericht toegevoegd op een manier dat iedereen die de openbare sleutel bezit, de authenticiteit en juistheid ervan kan verifiëren.


Blockchain

Er is geen twijfel dat blockchain een zeer krachtige technologie is. Het biedt een consensus laag die evenementen organiseert en registreert. Een dergelijke infrastructuur geeft ons, de gebruikers, potentiële macht om gedecentraliseerde economieën en zelfs regeringen op te bouwen. Verrassend genoeg kan de cryptografie die nodig is om een standaard blockchain te draaien, uitsluitend op digitale handtekeningen worden gebaseerd. In de context van een blockchain vertegenwoordigen de privésleutels identiteiten, terwijl een handtekening een openbare verklaring of claim van een identiteit is. De blockchain rangschikt de verklaringen en valideert ze volgens een aantal regels, die er onder andere voor zorgen dat de handtekeningen correct zijn.

In tegenstelling tot de meer klassieke cryptografie die in de blockchain wordt gebruikt, bevat de moderne cryptografische toolbox een aantal geweldige magic tricks: zero-knowledge proofs, homomorphic encryption en multi-party berekening, om er maar een paar te noemen. Zoals we het afgelopen decennium hebben gezien, heeft blockchain-onderzoek met toepassingen in de cryptografie enorme stappen gemaakt, met recente doorbraken in al het hier boven benoemde en nog veel meer. 

In dit artikel zullen we ons concentreren op een enkele dergelijke doorbraak: "efficient secure threshold signatures" (TSS).


MPC en de threshold signature scheme (TSS)

Multi-party computation (MPC) is een tak van cryptografie die begon met het baanbrekende werk van Andrew C. Yao, bijna 40 jaar geleden. In MPC proberen een aantal partijen die elkaar niet vertrouwen gezamenlijk een functie over hun invoer te berekenen, terwijl de invoer privé blijft. 

Laten we als voorbeeld nemen dat een werknemers van een bedrijf wil weten wie het meest wordt betaald, maar zonder dat het werkelijke salaris aan elkaar bekend wordt gemaakt. Hier zijn de privé-inputs "salarissen" en de output de naam van de werknemer met het hoogste salaris. Als we deze berekening uitvoeren met MPC, wordt geen enkel detail over het salaris gedeeld tijdens de berekeningen. 

De twee belangrijkste eigenschappen van MPC zijn juistheid en privacy:

  • Juistheid: de output geproduceerd door een algoritme is correct (zoals verwacht).

  • Privacy: de geheime invoergegevens die een partij bewaart, kan niet met andere partijen worden gedeeld.

We zullen MPC gebruiken om een digitale handtekening op een gedistribueerde manier te berekenen. Laten we eens kijken hoe de bovenstaande eigenschappen kunnen worden toegepast op handtekeningen. Voor handtekeningen zijn er drie stappen nodig: 

  • Key Generation: de eerste stap is ook de meest complexe. We moeten een sleutel genereren die openbaar is en wordt gebruikt om toekomstige handtekeningen te verifiëren. Maar we moeten ook voor elke partij een afzonderlijk geheim genereren, dat we een  geheim aandeel zullen noemen. In termen van juistheid en privacy zeggen we dat de functie dezelfde publieke sleutel zal leveren voor alle partijen, en een ander geheim deel voor elk van deze partijen dat: (1) privacy: geen geheime gegevens tussen de partijen worden uitgelekt en (2) juistheid: de public key is een functie van de geheime aandeel.

  • Ondertekening: deze stap omvat een functie voor het genereren van handtekeningen. De input van elke partij is zijn geheime aandeel, gemaakt als output van de vorige stap (gedistribueerde sleutelgeneratie). Er is ook openbare input voor iedereen bekend, dat is het te ondertekenen bericht. De output zal een digitale handtekening zijn en de eigenschap van privacy zorgt ervoor dat er geen geheim aandeel wordt gedeeld tijdens de berekening.

  • Verificatie: het verificatie-algoritme blijft zoals het is in de klassieke setting. Om compatibel te zijn met handtekeningen met een enkele sleutel, moet iedereen met kennis van de openbare sleutel de handtekeningen kunnen verifiëren en valideren. Dit is precies wat blockchain-validerende nodes doen.

Threshold signature scheme (TSS) is de naam die we geven aan deze samenstelling van distributed key generation (DKG) en gedistribueerde ondertekening van een threshold signature schema.


TSS combineren met blockchains

De natuurlijke manier waarop TSS in een blockchain kan worden gebruikt, is door een blockchain-client te wijzigen om sleutels en handtekeningen te genereren met behulp van TSS. Hier gebruiken we de term blockchain-client om te verwijzen naar de set opdrachten die worden uitgevoerd door een volledig node. In de praktijk stelt de TSS-technologie ons in staat om alle commando's met betrekking tot de private key te vervangen door gedistribueerde berekeningen.

Om het in meer detail uit te leggen, beginnen we met een korte beschrijving van hoe nieuwe adressen worden gemaakt op het klassieke blockchain-ontwerp.  Eenvoudig gezegd kunnen we een nieuw adres maken door een private key te genereren en vervolgens de public key te berekenen op basis van de private key. Ten slotte wordt het public address afgeleid van de public key.

Nu zouden we met behulp van TSS een reeks van gemeenschappelijke partijen hebben die de publieke sleutel gezamenlijk berekenen, en elke partij heeft een geheim aandeel van de private key (de individuele aandelen worden niet met de andere partijen gedeeld). Van de public key kunnen we het public address op dezelfde manier afleiden als in het traditionele systeem, waardoor de blockchain agnostisch wordt voor hoe het adres wordt gegenereerd. Het voordeel is dat de private key niet langer een punt is dat voor problemen kan zorgen omdat elke partij er slechts één deel van heeft. 

Hetzelfde kan worden gedaan bij het ondertekenen van transacties. In dit geval voeren we in plaats van dat een enkele partij met zijn private key ondertekent, een distributed signature generation tussen meerdere partijen. Zo kan elke partij een geldige handtekening produceren zolang er genoeg van hen zijn die eerlijk handelen. Opnieuw zijn we overgegaan van een lokale berekening (single point of failure) naar een interactieve berekening.

Het is belangrijk om te vermelden dat het genereren van distributed keys kan worden gedaan op een manier die verschillende soorten toegangsstructuren mogelijk maakt: de algemene instelling is bestand tegen willekeurige storingen in bewerkingen met private keys, zonder de veiligheid in gevaar te brengen.


TSS vs. Multisig

Sommige blockchains bieden TSS-functionaliteit als een ingebouwd of programmeerbaar onderdeel van de software. We noemen deze functionaliteit multisig of multi-signature. Om de verschillen beter te begrijpen, kunnen we multisig zien als een TSS in de toepassingslaag van de blockchain.

Anders gezegd, zowel multisig als TSS proberen in wezen vergelijkbare doelen te bereiken, maar TSS gebruikt cryptografie off-chain, terwijl multisig on-chain gebeurt. De blockchain heeft echter een manier nodig om multisig te coderen, wat de privacy kan schaden omdat de toegangsstructuur (aantal signers) zichtbaar is op de blockchain. De kosten van een multisig-transactie zijn hoger omdat de informatie over de verschillende signers ook op de blockchain moet worden gecommuniceerd.

In TSS worden de details van de signers’ samengevoegd tot een regulier ogende transactie, waardoor de kosten worden verlaagd en de privacy wordt gehandhaafd. Aan de andere kant kan multisig niet-interactief zijn, wat de problemen van het besturen van een complexe communicatielaag tussen de verschillende signers bespaart.

Het belangrijkste verschil is dat multisig blockchain-specifiek is en voor elke blockchain opnieuw moet worden geïmplementeerd en in sommige gevallen helemaal niet wordt ondersteund. Omgekeerd vertrouwt TSS op pure cryptografie, dus ondersteuning is altijd mogelijk. Een geweldig artikel met illustraties over de verschillen is hier te vinden.


TSS vs. Shamir secret sharing scheme

Het Shamir secret sharing-schema (SSSS) biedt een manier om de private key op een gedistribueerde manier op te slaan, zodat de private key in rust is ,maar op meerdere locaties is opgeslagen. Er zijn twee verschillen tussen SSSS en TSS:

  • Key Generation: in SSSS is er één partij genaamd “ de dealer ” die verantwoordelijk is voor het genereren van de geheime private key aandelen. Dit betekent dat de sleutel bij het genereren van de sleutel op één locatie wordt gegenereerd en vervolgens door de dealer wordt gedistribueerd naar de verschillende locaties. In TSS is er geen dealer, omdat zijn rol zodanig wordt gedistribueerd dat de volledige private key zich nooit op één locatie bevindt.

  • Ondertekening: in SSSS moeten de partijen de volledige private key reconstrueren om te ondertekenen, wat kan resulteren in een enkel punt van mislukking telkens wanneer een handtekening nodig is. In TSS gebeurt de ondertekening op een gedistribueerde manier zonder ooit de het geheime aandeel te reconstrueren.

Zoals we kunnen zien, bevindt de private key (die de beveiliging van het systeem vertegenwoordigt) zich in TSS gedurende de gehele levensduur nooit op één locatie.


Threshold wallets

Een wallet op basis van TSS-technologie is anders dan traditionele cryptocurrency wallets. Doorgaans genereert een conventionele wallet een seed-frase en gebruikt deze om de adressen deterministisch af te leiden. De gebruiker kan later deze hiërarchische deterministische (HD) structuur gebruiken om 1) de private keys te bereiken die overeenkomen met de public addresses van de portefeuille en daarmee transacties te ondertekenen, en 2) om alle portefeuille sleutels te herstellen met behulp van de seed-frase.

In een threshold wallet zijn dingen complexer. Hoewel het mogelijk is om een HD-structuur te genereren, moet de generatie ervan op een verdeelde manier worden berekend, als een ander MPC-protocol. De partijen moeten gezamenlijk beslissen wat de volgende key is die moet worden gebruikt. Met andere woorden, elke partij heeft een eigen seed phrase. De seed phrases worden afzonderlijk gegenereerd en nooit gecombineerd, zodat alleen een partij de private keys kan’t afleiden uit de seed.

TSS-gebaseerde wallets hebben ook een leuke beveiligingsfunctie, de rotatie van private keys mogelijk maakt zonder de bijbehorende openbare sleutel en blockchain-adres te wijzigen. Private key rotatie, ook bekend als proactief geheim delen, is nog een ander MPC-protocol dat de geheime aandelen als invoer neemt en een nieuwe reeks geheime aandelen uitvoert. De oude geheime aandelen kunnen worden verwijderd en de nieuwe kunnen op dezelfde manier worden gebruikt.

Een dergelijke structuur voegt een tijdsdimensie toe aan de beveiliging, wat betekent dat een aanvaller zich op meerdere locaties tegelijkertijd moet bevinden om een threshold wallet aan te vallen. Het combineren van geheime shares vóór rotatie en na de rotatie geeft de aanvaller geen extra kracht als hij een handtekening wil vervalsen. 

Een nadeel van dit type wallet is dat het ontbreken van een seed-frase het incompatibel maakt met single-key wallet. Het is dus belangrijk om te overwegen welke partijen de geheime aandelen zullen houden.

Er zijn een paar mogelijke architecturen:

  • TSS uitbesteden: de gebruiker laat “n“ servers de berekening namens hen uitvoeren. Effectief het genereren, beheren en ondertekenen van keys uitbesteden aan serviceproviders die niet de eigenaren van de activa zijn, maar een beveiligingslaag bieden in ruil voor enige stimulans.

  • Meerdere apparaten gebruiken: de gebruiker voert de TSS uit tussen de apparaten die hij bezit. Een partij zal bijvoorbeeld een IoT-apparaat zijn, een andere partij zal een mobiel zijn, een andere partij hun laptop, enzovoort.

  • Hybride: TSS wordt zodanig uitgevoerd dat sommige partijen worden beheerd door externe serviceproviders en sommige partijen op apparaten die eigendom zijn van gebruikers.

De eerste methode ontlast de zware TSS-berekening van de client-kant van de gebruiker. Aan de andere kant kunnen de serviceproviders samenspannen (we nemen aan dat genoeg ervan niet tegelijkertijd worden aangevallen, maar in de praktijk kunnen ze dat wel) en de activa van de gebruiker stelen.

De tweede methode geeft de gebruiker volledige controle, maar maakt het lastig om transacties uit te voeren omdat u meerdere apparaten nodig hebt om online te gaan en de TSS-berekening te gebruiken.

De derde optie wordt beschouwd als de beste van twee werelden omdat het de gebruiker een gemakkelijke en snelle manier biedt om transacties uit te voeren, maar zonder concessies te doen aan transacties zonder de autorisatie van de gebruiker.


TSS en smart contracts 

In de loop der jaren hebben onderzoekers veel toepassingen voor digitale handtekeningen gevonden, en sommige zijn verrassend niet triviaal. Zoals gezegd is TSS een cryptografische primitief die de beveiliging aanzienlijk kan verhogen. In de context van blockchains kunnen we zeggen dat veel functionaliteiten kunnen worden vervangen door op TSS gebaseerde cryptografie. Gedecentraliseerde toepassingen, laag 2 schaaloplossingen, atomaire swaps, mixen, overerving en nog veel meer kunnen bovenop een TSS-framework worden gebouwd. Hierdoor zouden uiteindelijk dure en risicovolle on-chain smart contract activiteiten kunnen worden vervangen door goedkopere en betrouwbaardere alternatieven.

Om een paar concrete voorbeelden te geven: Multi-Hop Locks maakt op een slimme manier gebruik van handtekeningen van twee partijen en kan worden gebruikt als alternatief voor het Bitcoin lightning network met een veiliger en privé-betaalkanaalnetwerk. ShareLock is waarschijnlijk de goedkoopste on-chain mengoplossing voor Ethereum, gebaseerd op verificatie van een enkele threshold signature.


Risico's

In de afgelopen jaren was er een aanzienlijke toename van TSS-implementaties. Als een relatief nieuwe technologie heeft het echter nog enkele beperkingen en zorgen. In vergelijking met klassieke openbare keycryptografie kunnen TSS-protocollen erg complex zijn en moeten ze nog worden “getest“. TSS vereist meestal aanvullende, zwakkere, cryptografische aannames in vergelijking met eenvoudige digitale handtekeningen. Als gevolg hiervan worden nu cryptografische aanvalsvectoren ontdekt die niet in traditionele opstellingen bestonden (zie presentatie van Breaking Bitcoin Conference 2019). Beveiligingsingenieurs en toegepaste cryptografen kunnen helpen bij het veilig implementeren van TSS in uw systeem.


Tot slot

In dit artikel hebben we de basisprincipes van het threshold signature scheme (TSS) geïntroduceerd, een fascinerende cryptografische primitief die het potentieel heeft om de manier waarop we blockchain gebruiken aanzienlijk te veranderen.

Omdat in dit artikel de drempel ECDSA niet is besproken die kan worden gebruikt in Binance Chain en Bitcoin, kunnen geïnteresseerden verwijzen naar de volgende lijst met recente artikelen. Als u wilt spelen met enkele TSS implementaties, kunt u een code vinden voor two-party Binance Chain wallet hier of probeer ZenGo-Wallet, die gebruik maakt van de hybride methode om een niet-hechte two-party Binance Chain wallet aanbied.


Meer lezen:

Loading