Autor: Omer Shlomovits, ZenGo.
Threshold Signature Scheme (TSS) este o primitivă criptografică pentru generarea și semnarea cheilor distribuite. Utilizarea TSS în clienții blockchain este o nouă paradigmă care poate oferi numeroase beneficii, în special în ceea ce privește securitatea. În sens mai larg, TSS poate influența proiectarea sistemelor de management al cheilor (cum ar fi portofelele cripto) și poate deschide calea pentru suportul nativ în cazurile de utilizare DeFi. Acestea fiind spuse, TSS este încă o tehnologie nouă, așa că ar trebui luate în considerare și riscurile și limitările.
În acest articol, vom acoperi ce este un TSS, care sunt potențialele avantaje pe care le aduce spațiului blockchain, cum poate fi implementat într-un client blockchain, cum se compară cu Shamir secret sharing și Multisig, care sunt diferitele moduri de a folosiți TSS pentru managementul cheilor distribuite și, în final, discutăm despre riscuri și limitări.
Puterea criptografiei
Pentru a înțelege TSS, avem nevoie mai întâi de câteva cunoștințe de bază despre criptografie. Începând cu anii 1970, tot mai multe sisteme de Internet (cum ar fi TLS și PGP) au folosit criptografia asimetrică, cunoscută și sub numele de criptografie cu cheie publică (PKC). PKC folosește două chei: una publică și una privată. În timp ce cheia publică nu este un secret și poate fi publicată și utilizată de oricine, cheia privată este o informație secretă care reprezintă securitatea sistemului.
Criptarea și semnăturile digitale sunt cele mai comune două utilizări pentru PKC. Atât schemele de criptare, cât și cele de semnătură digitală se bazează pe seturi de trei algoritmi. Prima este generarea perechii de chei private și publice, a doua este generarea unui text cifrat/semnătură și al treilea este procesul de decriptare/verificare. În ceea ce privește semnăturile digitale, algoritmul de semnare necesită cheia privată, care este cunoscută doar de proprietarul său, pentru a produce o semnătură unică. Semnătura este atașată unui anumit mesaj astfel încât oricine care deține cheia publică va putea verifica autenticitatea și corectitudinea acestuia.
Blockchain
Nu există nicio îndoială că blockchain-ul este o tehnologie foarte puternică. Oferă un strat de consens care organizează și înregistrează evenimente. O astfel de infrastructură ne oferă nouă, utilizatorilor, putere potențială pentru a construi economii descentralizate și chiar guverne. În mod surprinzător, criptografia necesară pentru a rula un blockchain de bază se poate baza doar pe semnături digitale. În contextul unui blockchain, cheile private reprezintă identități, în timp ce o semnătură este o declarație publică sau o revendicare făcută de o identitate. Blockchain-ul va ordona declarațiile și le va valida după un set de reguli, care asigură, printre altele, că semnăturile sunt de nefalsificat și corecte.
Spre deosebire de criptografia mai clasică utilizată în blockchain, setul de instrumente criptografic modern include câteva trucuri magice minunate: dovezi fără cunoștințe, criptare homomorfă și calcul cu mai multe părți, pentru a numi câteva. După cum am văzut în ultimul deceniu, cercetarea blockchain a împins enorm de mult criptografia aplicată, cu descoperiri recente în toate cele de mai sus și multe altele.
În acest articol, ne vom concentra asupra unei singure astfel de descoperiri: semnături eficiente de prag sigure (TSS).
MPC și schema de semnătură de prag (TSS)
Multi-party calculation (MPC) este o ramură a criptografiei care a început cu munca fundamentală a lui Andrew C. Yao, acum aproape 40 de ani. În MPC, un set de părți care nu au încredere unul în celălalt încearcă să calculeze împreună o funcție asupra intrărilor lor, păstrând în același timp acele intrări private.
De exemplu, să spunem că n angajați ai unei companii doresc să știe cine este cel mai mult plătit, dar fără să-și dezvăluie reciproc salariul real. Aici inputurile private sunt salariile, iar rezultatul va fi numele angajatului cu cel mai mare salariu. Făcând acest calcul folosind MPC, obținem că nici măcar un singur salariu nu este scurs în timpul calculului.
Cele două proprietăți principale ale MPC sunt corectitudinea și confidențialitatea:
Corectitudine: rezultatul produs de un algoritm este corect (cum era de așteptat).
Confidențialitate: datele secrete de intrare pe care le deține o parte nu ar fi scurse către celelalte părți.
Vom folosi MPC pentru a calcula o semnătură digitală într-un mod distribuit. Să vedem cum pot fi aplicate proprietățile de mai sus semnăturilor. Amintiți-vă că, pentru semnături, avem trei pași:
Generarea cheilor: primul pas este și cel mai complex. Trebuie să generăm o cheie care va fi publică și utilizată pentru a verifica semnăturile viitoare. De asemenea, trebuie să generăm un secret individual pentru fiecare parte, pe care îl vom numi o partajare secretă. În ceea ce privește corectitudinea și confidențialitatea, spunem că funcția va scoate aceeași cheie publică tuturor părților și o partajare secretă diferită pentru fiecare, astfel încât: (1) confidențialitate: nu se scurg date secrete între părți și (2) corectitudine: cheia publică este o funcție a acțiunilor secrete.
Semnarea: acest pas implică o funcție de generare a semnăturii. Intrarea fiecărei părți va fi cota sa secretă, creată ca rezultat al pasului anterior (generarea cheii distribuite). Există, de asemenea, o contribuție publică cunoscută tuturor, care este mesajul care trebuie semnat. Rezultatul va fi o semnătură digitală, iar proprietatea confidențialității asigură că nu a avut loc nicio scurgere de acțiuni secrete în timpul calculului.
Verificare: algoritmul de verificare rămâne așa cum este în cadrul clasic. Pentru a fi compatibil cu semnăturile cu o singură cheie, toți cei care cunosc cheia publică ar trebui să poată verifica și valida semnăturile. Este exact ceea ce fac nodurile de validare blockchain.
Schema de semnătură de prag (TSS) este numele pe care o dăm acestei compoziții de generare de chei distribuite (DKG) și semnare distribuită o schemă de semnătură de prag.
Combinarea TSS cu blockchain-uri
Modul natural în care TSS poate fi folosit într-un blockchain este schimbarea unui client blockchain pentru a genera chei și semnături folosind TSS. Aici, folosim termenul de client blockchain pentru a ne referi la setul de comenzi executate de un nod complet. În practică, tehnologia TSS ne permite să înlocuim toate comenzile legate de cheia privată cu calcule distribuite.
Pentru a explica mai detaliat, începem prin a descrie pe scurt modul în care sunt create adrese noi în designul clasic blockchain. Mai simplu spus, putem crea o nouă adresă generând o cheie privată și apoi calculând cheia publică din cheia privată. În cele din urmă, adresa blockchain este derivată din cheia publică.
Acum, folosind TSS, am avea un set de n părți care calculează în comun cheia publică, fiecare deținând o cotă secretă a cheii private (parts-urile individuale nu sunt dezvăluite celorlalte părți). Din cheia publică, putem deriva adresa în același mod ca în sistemul tradițional, făcând blockchain-ul agnostic față de modul în care este generată adresa. Avantajul este că cheia privată nu mai este un singur punct de eșec, deoarece fiecare parte deține doar o parte din ea.
Același lucru se poate face și la semnarea tranzacțiilor. În acest caz, în loc ca o singură parte să semneze cu cheia sa privată, rulăm o generare de semnătură distribuită între mai multe părți. Așadar, fiecare parte poate produce o semnătură valabilă, atâta timp cât destui dintre ei acționează cinstit. Din nou am trecut de la calculul local (punct unic de eșec) la unul interactiv.
Este important de menționat că generarea cheii distribuite se poate face într-un mod care să permită diferite tipuri de structuri de acces: setarea generală „t din n” va putea rezista până la t eșecuri arbitrare în operațiunile legate de cheia privată, fără compromiterea securității.
TSS vs. Multisig
Unele blockchain-uri oferă funcționalitate TSS ca parte încorporată sau programabilă a software-ului. Numim această funcționalitate multisig sau multi-signature. Pentru a înțelege mai bine diferențele, putem privi multisig ca un TSS în stratul de aplicație al blockchain-ului.
Cu alte cuvinte, atât multisig, cât și TSS încearcă în esență să atingă obiective similare, dar TSS utilizează criptografia off-chain, în timp ce multisig are loc în lanț. Cu toate acestea, blockchain-ul are nevoie de o modalitate de a codifica multisig, ceea ce ar putea afecta confidențialitatea deoarece structura de acces (numărul de semnatari) este expusă pe blockchain. Costul unei tranzacții multisig este mai mare deoarece informațiile despre diferiții semnatari trebuie să fie comunicate și pe blockchain.
În TSS, detaliile semnatarilor sunt pliate într-o tranzacție cu aspect obișnuit, reducând costurile și menținând confidențialitatea. Pe de altă parte, multisig poate fi non-interactiv, ceea ce scutește problemele de a rula un strat complex de comunicare între diferiții semnatari.
Principalul punct de diferență este că multisig este specific blockchain-ului și trebuie reimplementat pentru fiecare blockchain și, în unele cazuri, nu este acceptat deloc. În schimb, TSS se bazează pe criptografie pură, astfel încât suportul este întotdeauna posibil. Un articol grozav cu ilustrații despre diferențe poate fi găsit aici.
Schema de partajare secretă TSS vs. Shamir
Schema de partajare secretă Shamir (SSSS) oferă o modalitate de a stoca cheia privată într-un mod distribuit, astfel încât, în timp ce cheia privată este în repaus, să fie stocată în mai multe locații. Există două diferențe între SSSS și TSS:
Generarea cheilor: în SSSS, există o singură parte numită „dealer” care este responsabilă de generarea acțiunilor secrete ale cheii private. Înseamnă că la momentul generării cheii, cheia privată este generată într-o singură locație și apoi distribuită de dealer în diferite locații. În TSS, nu există niciun dealer, deoarece rolul său este distribuit astfel încât cheia privată completă nu este niciodată într-o singură locație.
Semnarea: în SSSS, părțile trebuie să reconstruiască cheia privată completă pentru a semna, ceea ce duce din nou la un singur punct de eșec de fiecare dată când este nevoie de o semnătură. În TSS, semnarea se face într-un mod distribuit, fără a reconstrui vreodată acțiunile secrete.
După cum putem vedea, în TSS cheia privată (care reprezintă securitatea sistemului) nu se află niciodată într-o singură locație pe toată durata sa de viață.
Portofele de prag
Un portofel bazat pe tehnologia TSS este puțin diferit de portofelele tradiționale cu criptomonede. În mod obișnuit, un portofel convențional generează o expresie de bază și o folosește pentru a deriva în mod determinist adresele. Ulterior, utilizatorul poate folosi această structură ierarhică deterministă (HD) pentru a 1) să ajungă la cheile private care corespund adreselor portofelului și să semneze tranzacții cu acestea și 2) pentru a recupera toate cheile portofelului folosind fraza de bază.
Într-un portofel de prag, lucrurile sunt mai complexe. Deși este posibilă generarea unei structuri HD, generarea acesteia trebuie calculată într-o manieră distribuită, ca un alt protocol MPC. Părțile trebuie să decidă împreună care este următoarea cheie care va fi utilizată. Cu alte cuvinte, fiecare parte va avea o frază proprie. Frazele de bază sunt generate separat și nu sunt niciodată combinate, astfel încât o singură parte să nu poată obține cheile private din sămânța sa.
Portofelele bazate pe TSS au, de asemenea, o caracteristică de securitate plăcută, care permite rotația cheii private fără a schimba cheia publică și adresa blockchain corespunzătoare. Rotația cheilor private, cunoscută și sub denumirea de partajare proactivă a secretelor, este încă un alt protocol MPC care preia partajările secrete ca intrare și generează un nou set de partajări secrete. Vechile acțiuni secrete pot fi șterse, iar cele noi pot fi folosite în același mod.
O astfel de structură adaugă o dimensiune de timp securității, ceea ce înseamnă că un atacator trebuie să se afle în mai multe locații în același timp pentru a ataca un portofel de prag. Combinarea acțiunilor secrete înainte de rotație și după rotație nu va oferi atacatorului nicio putere suplimentară dacă dorește să falsească o semnătură.
Un dezavantaj al acestui tip de portofel este că lipsa unei fraze de bază îl face incompatibil cu sistemele de portofel cu o singură cheie. Prin urmare, este important să luăm în considerare ce părți vor deține acțiunile secrete.
Există câteva arhitecturi posibile:
Outsourcing TSS: utilizatorul va lăsa „n” servere să execute calculul în numele lor. Externalizarea efectivă a cheii de generare, gestionare și semnare către furnizori de servicii care nu sunt proprietarii activelor, dar oferă un nivel de securitate în schimbul unor stimulente.
Utilizarea mai multor dispozitive: utilizatorul va rula TSS între dispozitivele pe care le deține. De exemplu - o parte va fi un dispozitiv IoT, o altă parte va fi utilizatorul mobil, o altă parte va fi laptopul său și așa mai departe.
Hibrid: TSS va rula astfel încât unele părți să fie controlate de furnizori externi de servicii, iar unele părți să ruleze pe dispozitive deținute de utilizator.
Prima metodă descarcă calculele grele TSS din partea clientului utilizatorului. Pe de altă parte, furnizorii de servicii se pot înțelege (presupunem că destui dintre ei nu sunt atacați în același timp, dar, în practică, s-ar putea) și să fure activele utilizatorului.
A doua metodă oferă utilizatorului control deplin, dar face dificilă efectuarea tranzacțiilor, deoarece aveți nevoie de mai multe dispozitive pentru a intra online și a se angaja în calculul TSS.
A treia opțiune este considerată cea mai bună din ambele lumi, deoarece oferă utilizatorului o modalitate ușoară și rapidă de a efectua tranzacții, dar fără a compromite efectuarea tranzacțiilor fără autorizația utilizatorului.
TSS și contracte inteligente
De-a lungul anilor, cercetătorii au găsit multe utilizări pentru semnăturile digitale, iar unele sunt surprinzător de netriviale. După cum am menționat, TSS este o primitivă criptografică care poate crește foarte mult securitatea. În contextul blockchain-urilor, putem spune că multe funcționalități pot fi înlocuite cu criptografia bazată pe TSS. Pe un cadru TSS pot fi construite aplicații descentralizate, soluții de scalare de nivel 2, schimburi atomice, amestecare, moștenire și multe altele. Acest lucru ar permite în cele din urmă înlocuirea operațiunilor de contracte inteligente costisitoare și riscante în lanț cu alternative mai ieftine și mai fiabile.
Pentru a da câteva exemple concrete: Multi-Hop Locks folosește semnăturile din două părți într-un mod inteligent și poate fi folosit ca alternativă la rețeaua fulger Bitcoin cu o rețea de canale de plată mai sigură și privată. ShareLock este probabil cea mai ieftină soluție de amestecare în lanț pentru Ethereum, bazată pe verificarea semnăturii unui singur prag.
Riscuri
În ultimii doi ani, a existat o creștere semnificativă a implementărilor TSS. Cu toate acestea, ca tehnologie relativ nouă, are încă unele limitări și preocupări. În comparație cu criptografia clasică cu cheie publică, protocoalele TSS pot fi foarte complexe și încă nu au fost „testate în luptă”. De obicei, TSS necesită presupuneri criptografice suplimentare, mai slabe, comparativ cu semnăturile digitale simple. Drept urmare, vectorii de atac criptografic care nu existau în setările tradiționale sunt acum descoperiți (vezi această prezentare de la Breaking Bitcoin Conference 2019). Inginerii de securitate și criptografii aplicați pot ajuta la implementarea în siguranță a TSS în sistemul dumneavoastră.
Pe partea pozitivă, implementările existente și noi devin din ce în ce mai puternice datorită creșterii contribuțiilor la calitate, a evaluărilor inter pares, a auditurilor și a îmbunătățirilor performanței algoritmice.
Gânduri de închidere
În acest articol, am introdus elementele de bază ale schemei de semnătură de prag (TSS), care este o primitivă criptografică fascinantă care are potențialul de a schimba semnificativ modul în care folosim blockchain.
Deoarece acest articol nu a discutat despre Threshold ECDSA care poate fi utilizat în Binance Chain și Bitcoin, cei interesați se pot referi la următoarea listă de lucrări recente. De asemenea, dacă doriți să jucați cu unele implementări TSS, puteți găsi aici un cod pentru portofelul Binance Chain cu două părți sau încercați portofelul ZenGo, care utilizează metoda hibridă pentru a oferi un portofel Binance Chain fără custodie.
Lectură suplimentară:
Semnarea ECDSA rapidă și sigură de două părți
ECDSA rapid și sigur pentru mai multe părți, cu generare practică de chei distribuite și aplicații pentru custodia criptomonedelor
ECDSA cu două părți de la sistemele Hash Proof și instanțele eficiente
ECDSA de prag rapid pentru mai multe părți cu configurare rapidă fără încredere
Securizat pragul ECDSA cu două părți din ipotezele ECDSA
Pragul ECDSA din ipotezele ECDSA: cazul multipartid

