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ă, deci ar trebui luate în considerare și riscurile și limitările.
În acest articol, vom analiza ce este un TSS, care sunt avantajele potențiale pe care le aduce în spațiul blockchain, cum poate fi implementat într-un client blockchain, cum se compară cu fragmentele partajate de cheie secretă Shamir și Multisemnătură, care sunt diferitele modalități de a utiliza TSS pentru gestionarea cheilor distribuite și, în final, vom discuta riscurile și limitările.
Puterea criptografiei
Pentru a înțelege TSS, mai întâi avem nevoie de 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ă, care este cunoscută și sub numele de criptografie cu cheie publică (PKC). PKC utilizează două chei: una publică și una privată. În timp ce cheia publică nu este 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 două dintre cele mai comune cazuri de utilizare pentru PKC. Atât schemele de criptare, cât și cele de semnături digitale se bazează pe seturi de trei algoritmi. Primul este generarea perechii de chei private și publice, al doilea este generarea unui text cifrat/semnături și al treilea este procesul de decriptare/verificare. În ceea ce privește semnăturile digitale, algoritmul de semnare necesită ca cheia privată, care este cunoscută numai de proprietarul său, să producă o semnătură unică. Semnătura este atașată unui mesaj dat în așa fel încât oricine deține cheia publică să poată verifica autenticitatea și corectitudinea acestuia.
Blockchain
Nu există nicio îndoială că blockchainul este o tehnologie foarte puternică. Oferă un nivel de consens care organizează și înregistrează evenimentele. O astfel de infrastructură ne oferă nouă, utilizatorilor, puterea potențială de a construi economii descentralizate și chiar guverne. Destul de surprinzător, criptografia necesară pentru a rula un blockchain de bază se poate baza exclusiv pe semnături digitale. În contextul unui blockchain, cheile private reprezintă identități, în timp ce o semnătură este o instrucțiune sau o revendicare făcută de o identitate. Blockchainul va ordona instrucțiunile și le va valida conform unui set de reguli, care asigură, printre altele, că semnăturile nu pot fi falsificate și sunt corecte.
Spre deosebire de criptografia mai clasică utilizată în blockchain, setul de instrumente criptografice moderne include câteva trucuri magice minunate: Zero-Knowledge Proofs, criptare homomorfă și multi-party computation, printre altele. După cum am văzut în ultimul deceniu, cercetarea blockchain a împins foarte mult înainte criptografia aplicată, cu descoperiri recente în toate cele de mai sus și multe altele.
În acest articol, ne vom concentra pe o singură astfel de descoperire: semnăturile eficiente de prag securizat (TSS).
MPC și schema de semnătură de prag (TSS)
Multi-party computation (MPC) este o ramură a criptografiei, care a început cu lucrarea fundamentală a lui Andrew C. Yao, acum aproape 40 de ani. În MPC, un set de părți care nu au încredere una în cealaltă încearcă să calculeze împreună o funcție peste intrările lor, păstrând în același timp aceste intrări private.
De exemplu, să spunem că n angajați ai unei companii doresc să știe cine este plătit cel mai mult, dar fără a-și dezvălui reciproc salariul real. Aici, intrările private sunt salarii, iar ieșirea va fi numele angajatului cu cel mai mare salariu. Dacă facem acest calcul folosind MPC, nici măcar un singur salariu nu este dezvăluit în timpul calculului.
Cele două proprietăți principale ale MPC sunt corectitudinea și confidențialitatea:
Corectitudine: rezultatul produs de un algoritm este corect (așa cum era de așteptat).
Confidențialitate: datele de intrare secrete pe care o parte le deține nu sunt divulgate celorlalte 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 la semnături. Reamintim 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. Dar trebuie, de asemenea, să generăm un secret individual pentru fiecare parte, pe care îl vom numi un fragment partajat de cheie secretă. În ceea ce privește corectitudinea și confidențialitatea, spunem că funcția va oferi aceeași cheie publică tuturor părților și un fragment partajat de cheie secretă diferită pentru fiecare, astfel încât să obținem: (1) confidențialitate: nu se scurg date ale fragmentelor partajate de cheie secretă între părți și (2) corectitudine: cheia publică este o funcție a fragmentelor partajate de cheie secretă.
Semnare: Acest pas implică o funcție de generare a semnăturii. Intrarea fiecărei părți va fi fragmentul său partajat de cheie secretă, creat ca ieșire a pasului anterior (generarea cheii distribuite). Există, de asemenea, o intrare publică cunoscută tuturor, care este mesajul care trebuie semnat. Ieșirea va fi o semnătură digitală, iar proprietatea confidențialității asigură faptul că nu au loc scurgeri de fragmente partajate de cheie secretă secrete în timpul calculului.
Verificare: Algoritmul de verificare rămâne așa cum este în setarea clasică. Pentru a fi compatibil cu semnăturile cheie unice, 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ături de prag (TSS) este numele pe care îl dăm acestei compoziții de generare de chei distribuite (DKG) și semnare distribuită a unei scheme de semnături de prag.
Combinarea TSS cu blockchainurile
Modul natural în care TSS poate fi utilizat într-un blockchain este prin schimbarea unui client blockchain astfel încât să genereze chei și semnături utilizând 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 noi adrese în designul clasic al blockchainului. Pe scurt, 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 să calculeze în comun cheia publică, fiecare deținând un fragment partajat de cheie secretă privată (fragmentele individuale nu sunt dezvăluite celorlalte părți). Din cheia publică, putem deduce adresa în același mod ca în sistemul tradițional, făcând blockchainul agnostic față de modul în care este generată adresa. Avantajul este că cheia privată nu mai este un punct unic de eșec, deoarece fiecare parte deține doar un fragment 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ă, executăm o generare de semnături distribuite între mai multe părți. Astfel, fiecare parte poate produce o semnătură validă, atât timp cât suficient de multe dintre ele acționează cinstit. Din nou, am trecut de la calculul local (un 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 out of n” va putea rezista până la t eșecuri arbitrare în operațiunile legate de cheia privată, fără a compromite securitatea.
TSS vs. Multisemnătură
Unele blockchainuri oferă funcționalitatea TSS ca parte integrată sau programabilă a software-ului. Numim această funcționalitate multisig sau multisemnătură. Pentru a înțelege mai bine diferențele, ne putem gândi la multisig ca la un TSS în nivelul de aplicație al blockchainului.
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 se întâmplă on-chain. Cu toate acestea, blockchainul are nevoie de o modalitate de a codifica multisemnătura, ceea ce ar putea dăuna confidențialității, deoarece structura de acces (numărul de semnatari) este expusă pe blockchain. Costul unei tranzacții multisemnătură este mai mare, deoarece informațiile despre diferiți semnatari trebuie, de asemenea, comunicate pe blockchain.
În TSS, detaliile semnatarilor sunt împachetate într-o tranzacție cu aspect obișnuit, reducând costurile și menținând confidențialitatea. Pe de altă parte, multisemnătura poate fi non-interactivă, ceea ce elimină bătăile de cap date de rularea unui nivel complex de comunicare între diferiți semnatari.
Principala diferență este că multisemnătura este specifică blockchainului și trebuie să fie reimplementată pentru fiecare blockchain și, în unele cazuri, nu este acceptată deloc. În schimb, TSS se bazează pe criptografie pură, astfel că suportul este întotdeauna posibil. Un articol excelent cu ilustrații despre diferențe poate fi găsit aici.
TSS vs. Schema de fragmente partajate de cheie secretă Shamir
Schema de fragmente partajate de cheie secretă Shamir (Shamir secret sharing scheme, SSSS) oferă o modalitate de a stoca cheia privată într-o manieră distribuită, astfel încât, în timp ce cheia privată este în repaus, aceasta este stocată în mai multe locații. Există două diferențe între SSSS și TSS:
Generarea cheilor: În SSSS, există o singură parte numită „dealerul” care este responsabilă de generarea fragmentelor partajate de cheie secretă privată. Aceasta înseamnă că, în 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, rolul său fiind distribuit astfel încât cheia privată completă să nu se afle niciodată într-o singură locație.
Semnare: În SSSS, părțile trebuie să reconstruiască cheia privată completă pentru a semna, ceea ce duce, din nou, la un punct unic de eșec de fiecare dată când este necesară o semnătură. În TSS, semnarea se face într-un mod distribuit, fără a reconstrui vreodată fragmentele partajate de cheie secretă.
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 de criptomonede. De obicei, un portofel convențional generează o frază seed și o folosește pentru a obține în mod determinist adresele. Utilizatorul poate folosi ulterior această structură deterministă ierarhică (hierarchical deterministic, HD) pentru 1) a obține cheile private care corespund adreselor portofelului și a semna tranzacții cu acestea și 2) a recupera toate cheile portofelului folosind fraza seed.
Î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ă de comun acord care este următoarea cheie care va fi utilizată. Cu alte cuvinte, fiecare parte va avea o frază seed proprie. Frazele seed sunt generate separat și nu sunt combinate niciodată, astfel încât o singură parte să nu poată obține cheile private din seedul său.
Portofelele bazate pe TSS au, de asemenea, o caracteristică bună de securitate, care permite rotirea cheii private fără a schimba cheia publică și adresa blockchain corespunzătoare. Rotația cheilor private, cunoscută și sub numele de partajare proactivă a fragmentelor de cheie secretă, este un alt protocol MPC care ia fragmentele partajate de cheie secretă ca intrare și produce un nou set de fragmente partajate de cheie secretă. Vechile fragmente partajate de cheie secretă pot fi șterse, iar cele noi pot fi utilizate în același mod.
O astfel de structură adaugă o dimensiune temporală 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 fragmentelor partajate de cheie secretă înainte de rotație și după rotație nu va oferi atacatorului nicio putere suplimentară dacă dorește să falsifice o semnătură.
Un dezavantaj al acestui tip de portofel este că lipsa unei fraze seed îl face incompatibil cu sistemele de portofel cu o singură cheie. Deci, este important să luați în considerare care părți vor deține fragmentele partajate de cheie secretă.
Există câteva arhitecturi posibile:
Externalizarea TSS: Utilizatorul va permite unui număr de „n” servere să ruleze calculul în numele său. Externalizarea efectivă a generării, gestionării și semnării cheilor către furnizorii 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 laptopul și așa mai departe.
Hibrid: TSS va funcționa astfel încât unele părți să fie controlate de furnizori de servicii externi, iar unele părți să funcționeze pe dispozitive deținute de utilizator.
Prima metodă preia calculul TSS complex de la clientul utilizator. Pe de altă parte, furnizorii de servicii pot complota (presupunem că destui dintre ei nu sunt atacați în același timp, dar în practică, acest lucru este posibil) și fura activele utilizatorului.
A doua metodă oferă utilizatorului control deplin, dar îngreunează efectuarea tranzacțiilor, deoarece aveți nevoie de mai multe dispozitive pentru a vă conecta și a interacționa cu 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ă autorizarea utilizatorului.
TSS și contracte inteligente
De-a lungul anilor, cercetătorii au descoperit multiple utilizări ale semnăturilor digitale, iar unele sunt surprinzător de practice. După cum am menționat, TSS este o primitivă criptografică care poate îmbunătăți foarte mult securitatea. În contextul blockchainurilor, putem spune că multe funcționalități pot fi înlocuite cu criptografia bazată pe TSS. Aplicațiile descentralizate, soluțiile de scalare de nivel 2, atomic swaps, combinarea, moștenirea și multe altele pot fi construite pe un cadru TSS. Acest lucru ar permite în cele din urmă ca operațiunile de contracte inteligente on-chain costisitoare și riscante să fie înlocuite cu alternative mai ieftine și mai fiabile.
Pentru a da câteva exemple concrete: Multi-Hop Locks utilizează semnăturile a două părți într-un mod inteligent și poate fi folosit ca alternativă la Bitcoin Lightning Network cu o rețea de canale de plată mai sigură și mai privată. ShareLock este probabil cea mai ieftină soluție de combinare on-chain pentru Ethereum, bazată pe verificarea unei singure semnături de prag.
Riscuri
În ultimii doi ani, a existat o creștere semnificativă a implementărilor TSS. Cu toate acestea, ca o tehnologie relativ nouă, are încă unele limitări și preocupări. În comparație cu criptografia cu cheie publică clasică, protocoalele TSS pot fi foarte complexe și încă nu au fost „testate în luptă”. De obicei, TSS necesită ipoteze criptografice suplimentare, mai slabe, în comparație cu semnăturile digitale simple. Ca urmare, vectorii de atac criptografici care nu existau în configurațiile tradiționale sunt acum descoperiți (a se vedea această prezentare de la Breaking Bitcoin Conference 2019). Inginerii de securitate și criptografii aplicați vă pot ajuta să implementați în siguranță TSS în sistemul dvs.
Pe partea pozitivă, implementările existente și cele noi devin din ce în ce mai puternice, datorită unei creșteri a contribuțiilor la calitate, a evaluărilor inter pares, a auditurilor și a îmbunătățirii performanței algoritmice.
Gânduri de încheiere
În acest articol, am prezentat elementele de bază ale schemei de semnături de prag (TSS), care este o primitivă criptografică fascinantă, care are potențialul de a schimba semnificativ modul în care folosim blockchainul.
Deoarece acest articol nu a discutat Pragul ECDSA care poate fi utilizat în Binance Chain și Bitcoin, cei interesați pot consulta următoarea listă de lucrări recente. De asemenea, dacă doriți să vă jucați cu unele implementări TSS, puteți găsi un cod pentru portofelul Binance Chain cu două părți aici sau puteți încerca portofelul ZenGo, care utilizează metoda hibridă pentru a oferi un portofel Binance Chain cu două părți, fără custodie.
Materiale suplimentare: