Autor: Omer Shlomovits, ZenGo.
Schema de semnătură cu prag (TSS) este un primitiv criptografic care permite generarea distribuită a cheilor și semnăturilor. Introducerea TSS în clientul blockchain este o nouă paradigmă care oferă numeroase avantaje, în special în ceea ce privește securitatea. Într-un sens mai larg, TSS poate redefini designul sistemelor de gestionare a cheilor (cum ar fi portofelele de criptomonede) și poate oferi suport nativ pentru utilizările DeFi. Cu toate acestea, TSS, ca tehnologie emergentă, prezintă și anumite riscuri și limitări.
Această lucrare va detalia conceptele de bază ale TSS, avantajele potențiale pe care le aduce în domeniul blockchain-ului, metodele de implementare în clientul blockchain și diferențele sale față de schema de partajare a secretului Shamir și semnătura multiplă. De asemenea, vom explora diferitele modalități de a utiliza TSS pentru gestionarea distribuită a cheilor și vom discuta riscurile și limitările asociate.
Puterea criptografiei
Pentru a înțelege conceptul TSS, trebuie să stăpânim mai întâi câteva cunoștințe de bază despre criptografie. Încă din anii 1970, din ce în ce mai multe sisteme de internet (cum ar fi TLS și PGP) au început să utilizeze tehnica de criptografie asimetrică, cunoscută și sub numele de criptografie cu cheie publică (PKC). PKC se bazează pe două chei: cheia publică și cheia privată. Cheia publică este deschisă, oricine o poate publica și utiliza, în timp ce cheia privată este secretul esențial care protejează securitatea sistemului.
Criptografia și semnăturile digitale sunt două dintre principalele aplicații ale PKC. Aceste două tehnici depind de trei algoritmi: mai întâi generarea perechii de chei privată-publică, apoi generarea cifrului/semnăturii și, în final, procesul de decriptare/verificare. De exemplu, în cazul semnăturilor digitale, algoritmul de semnătură folosește cheia privată, cunoscută doar de proprietar, pentru a genera o semnătură unică, pe care o atașează mesajului. Ulterior, oricine deține cheia publică poate verifica autenticitatea și corectitudinea semnăturii.
Blockchain
Fără îndoială, blockchain-ul este o tehnologie puternică cu un potențial imens, oferind un strat de consens pentru organizarea și înregistrarea evenimentelor. Această infrastructură oferă utilizatorilor posibilitatea de a construi economii descentralizate și chiar guverne descentralizate. Surprinzător, criptografia esențială necesară pentru a rula un blockchain de bază poate fi realizată doar prin semnături digitale. În blockchain, cheia privată reprezintă identitatea, iar semnătura este o declarație sau o revendicare publică a identității. Blockchain-ul asigură autenticitatea și corectitudinea semnăturilor prin ordonarea acestor declarații și validarea lor conform unui set de reguli.
Comparativ cu tehnologiile tradiționale de criptografie utilizate în blockchain, criptografia modernă a introdus multe realizări palpitante, cum ar fi dovezile cu zero cunoștințe, criptografia omomorfă și calculul multi-part. În ultimii 10 ani, cercetările în domeniul blockchain-ului au avansat semnificativ dezvoltarea criptografiei aplicate, realizând progrese notabile în aceste domenii și în multe altele.
Această lucrare se va concentra asupra uneia dintre aceste progrese, și anume schema de semnătură cu prag (TSS) sigură și eficientă.
MPC și schema de semnătură cu prag (TSS)
Calculul multi-part (MPC) este o ramură a criptografiei, iar originile sale se pot trasa înapoi cu aproximativ 40 de ani la cercetarea fundamentală a lui Andrew C. Yao. MPC se concentrează pe faptul că un grup de părți care nu se încred în mod reciproc pot calcula împreună rezultatul unei funcții fără a-și divulga informațiile de intrare.
De exemplu, să presupunem că n angajați ai unei companii doresc să știe cine are cel mai mare salariu, dar nu doresc să își dezvăluie salariile reale. În acest scenariu, fiecare angajat își introduce salariul, iar ieșirea finală este numele angajatului cu cel mai mare salariu. Prin MPC, acest calcul poate fi realizat fără a expune informațiile salariale ale angajaților.
Cele două caracteristici fundamentale ale MPC sunt corectitudinea și confidențialitatea:
Corectitudine: ieșirea algoritmului este rezultatul corect așteptat.
Confidențialitate: datele de intrare ale oricărei părți participante nu vor fi divulgate altor părți.
Vom utiliza tehnologia MPC pentru a calcula semnături digitale într-un mod distribuit și vom explora cum să aplicăm caracteristicile menționate anterior în procesul de semnare. Așa cum s-a menționat anterior, semnarea este de obicei împărțită în trei pași:
Generarea cheilor: primul pas este cel mai complex din întregul proces. Acest pas necesită generarea unei chei publice, utilizată pentru a valida semnăturile ulterioare. De asemenea, este necesar să se genereze un „fragment secret” independent pentru fiecare parte participantă. În ceea ce privește corectitudinea și confidențialitatea, această funcție va produce aceeași cheie publică pentru toate părțile participante, în timp ce va genera fragmente secrete diferite pentru fiecare parte, asigurând astfel: (1) confidențialitate: datele fragmentelor secrete nu vor fi divulgate între părți și (2) corectitudine: cheia publică este rezultatul calculului funcției tuturor fragmentelor secrete.
Semnarea: acest pas implică o funcție de generare a semnăturii. Datele de intrare ale părților sunt fragmentele lor secrete, provenind din ieșirea pasului anterior (generarea distribuită a cheilor). Există, de asemenea, o intrare publică bine cunoscută, și anume mesajul care trebuie semnat. Ieșirea este semnătura digitală, iar confidențialitatea asigură că, pe parcursul întregului proces de calcul, fragmentele secrete nu vor fi divulgate.
Verificare: algoritmul de verificare este consistent cu metodele tradiționale. Pentru a asigura compatibilitatea cu un sistem de semnare unică, oricine deține cheia publică poate verifica și confirma semnătura, acesta fiind și sarcina principală a nodurilor de validare în blockchain.
Schema de semnătură cu prag (TSS) este numele pe care l-am dat combinației între generarea distribuită a cheilor (DKG) și procesul de semnare distribuit.
Combinarea TSS cu blockchain-ul
O modalitate intuitivă de a adopta TSS în blockchain este de a modifica clientul blockchain pentru a genera chei și semnături prin tehnologia TSS. Aici, „clientul blockchain” se referă la un set de comenzi executate de noduri.
Pentru a explica în detaliu, să începem prin a descrie cum se creează o nouă adresă în designul tradițional al blockchain-ului. Pe scurt, mai întâi se generează o cheie privată, apoi se calculează cheia publică pe baza cheii private, iar în final se deduce adresa blockchain din cheia publică.
În modul TSS, cheia publică este calculată de n părți participante, fiecare deținând doar un fragment secret al cheii private (și fragmentele nu se vor divulga între ele). Putem deduce adresa din cheia publică în același mod ca și în sistemele tradiționale, astfel încât metoda de generare a adresei să nu fie restricționată de blockchain. Avantajul acestei metode este că fiecare parte deține doar o parte din cheia privată, astfel încât cheia privată nu mai este o sursă de puncte unice de eșec.
Semnarea tranzacțiilor poate fi realizată și într-un mod similar. Diferența constă în faptul că nu se mai folosește cheia privată pentru semnătura unilaterală, ci se generează o semnătură distribuită prin cooperarea mai multor părți. Astfel, atâta timp cât un număr suficient de părți acționează cu bună credință, se poate produce o semnătură validă, realizând astfel tranziția de la calculul local (puncte unice de eșec) la calculul interactiv.
Merită menționat că generarea distribuită a cheilor poate susține diferite tipuri de structuri de acces: modelul general „t din n” poate asigura că, chiar și în cazul a până la t eșecuri arbitrare, se pot efectua în continuare operații legate de chei în siguranță.
TSS și semnăturile multiple
Unele blockchain-uri oferă funcționalitatea TSS ca parte integrată sau programabilă a software-ului, de obicei numită semnătură multiplă. Pentru a înțelege mai bine diferențele dintre cele două, semnătura multiplă poate fi considerată ca TSS la nivelul aplicației blockchain.
Cu alte cuvinte, semnătura multiplă și TSS urmăresc în esență obiective similare, dar TSS folosește tehnologia criptografică off-chain, în timp ce semnătura multiplă are loc on-chain. Totuși, blockchain-ul are nevoie de o metodă specifică pentru a codifica semnătura multiplă, ceea ce poate afecta confidențialitatea, deoarece structura de acces (numărul semnatarilor) va fi expusă pe blockchain. În plus, costul tranzacțiilor cu semnătură multiplă este mai mare, deoarece informațiile fiecărui semnatar trebuie transmise pe blockchain.
În TSS, detaliile semnatarilor sunt încorporate în tranzacțiile obișnuite, reducând astfel costurile și protejând confidențialitatea. Pe de altă parte, semnătura multiplă poate fi realizată prin metode non-interactive, economisind astfel complexitatea de a rula un strat de comunicare complicat între diferiți semnatari.
Principala diferență dintre cele două este că semnătura multiplă este specifică blockchain-ului, necesitând implementare separată pentru fiecare blockchain și, în unele cazuri, poate să nu fie deloc suportată. În contrast, TSS este complet bazat pe criptografie și va fi întotdeauna suportat. Pentru a înțelege mai bine diferențele dintre cele două, consultați acest link.
TSS și schema de partajare a secretului Shamir
Schema de partajare a secretului Shamir (SSSS) oferă o metodă de stocare distribuită a cheii private, permițând dispersarea acesteia în mai multe locații atunci când cheia privată este în stare statică. SSSS și TSS au două diferențe principale:
Generarea cheilor: în SSSS, un rol numit „distribuitor” (dealer) este responsabil pentru generarea fragmentelor secrete ale cheii private. Distribuitorul generează cheia privată completă într-o singură locație și o împarte în mai multe fragmente secrete, pe care le distribuie în diferite locații. În TSS, nu există un distribuitor, deoarece întregul proces este distribuit, iar cheia privată completă nu este niciodată generată într-o singură locație.
Semnarea: în SSSS, părțile trebuie să reconstruiască mai întâi cheia privată completă pentru a finaliza semnătura, ceea ce duce la riscuri de puncte unice de eșec de fiecare dată când se semnează. În TSS, procesul de semnare se desfășoară într-un mod distribuit, fără a fi necesară reconstrucția fragmentelor secrete.
Prin urmare, în schema TSS, cheia privată nu va apărea niciodată într-o singură locație pe parcursul întregii sale durate de viață, sporind semnificativ securitatea sistemului.
Portofel cu prag
Portofelul bazat pe tehnologia TSS este ușor diferit de portofelul tradițional de criptomonedă. Portofelele tradiționale determină în mod determinist adresa portofelului prin generarea de cuvinte de recuperare. Utilizatorii pot folosi această structură deterministă ierarhică (HD): 1) pentru a obține cheia privată corespunzătoare adresei portofelului și a semna tranzacțiile; 2) pentru a recupera toate cheile portofelului prin intermediul cuvintelor de recuperare.
Mecanismul de funcționare al portofelului cu prag este mai complex. Deși suportă și generarea structurii HD, acest proces necesită calcul distribuit, similar cu un alt protocol MPC. Părțile participante trebuie să decidă împreună care va fi următoarea cheie utilizată. Cu alte cuvinte, fiecare parte are propriile cuvinte de recuperare. Aceste cuvinte de recuperare sunt generate separat și nu sunt combinate, astfel încât nicio parte nu poate deduce singură cheia privată completă din propriile sale cuvinte de recuperare.
În plus, portofelul bazat pe TSS dispune de o caracteristică de securitate puternică, și anume capacitatea de a schimba cheia privată fără a modifica cheia publică și adresa blockchain. Schimbarea cheii private, cunoscută și sub numele de partajare activă a secretului, este un alt protocol MPC, care utilizează vechile fragmente secrete ca intrare pentru a genera un set complet nou de fragmente secrete. Fragmentele secrete vechi pot fi șterse, iar noile fragmente pot continua să fie utilizate.
Această arhitectură introduce o dimensiune temporală în securitatea portofelului cu prag, ceea ce înseamnă că un atacator trebuie să se afle în același timp în mai multe locații pentru a reuși să atace portofelul. Chiar și în cazul tentativelor de falsificare a semnăturii, fragmentele secrete obținute de atacator înainte și după schimbarea cheii private nu pot fi combinate pentru a forma cheia completă, neavând un impact suplimentar asupra securității.
Cu toate acestea, o limitare a acestor portofele este că nu suportă cuvinte de recuperare, ceea ce le face incompatibile cu sistemele de portofele cu cheie unică. De aceea, este deosebit de important să se clarifice cine deține fragmentele secrete.
Arhitecturile posibile includ următoarele:
TSS externalizat: utilizatorul își externalizează calculul către „n” servere. Generarea, gestionarea și semnarea cheilor vor fi externalizate eficient către furnizorii de servicii, care nu sunt deținători ai activelor, dar obțin un anumit beneficiu prin oferirea de garanții de securitate.
Cooperare între dispozitive: utilizatorul rulează TSS între dispozitivele pe care le deține. De exemplu, dispozitivele IoT, dispozitivele mobile și laptopurile colaborează.
Mod mixt: unele părți sunt controlate de furnizori externi de servicii, în timp ce altele funcționează pe dispozitivele deținute de utilizator, completând împreună calculul TSS.
Prima modalitate reduce sarcina de calcul TSS pe clientul utilizatorului, dar furnizorii de servicii ar putea colabora pentru a fura activele utilizatorului (deși se presupune de obicei că un număr suficient de furnizori de servicii nu vor fi compromiși simultan, această posibilitate nu este exclusă).
A doua modalitate oferă utilizatorului control total, dar necesită ca mai multe dispozitive să participe online la calculul TSS, ceea ce complică operațiunile de tranzacționare.
A treia modalitate îmbină cele două, permițând utilizatorului să finalizeze tranzacțiile într-un mod simplu și eficient, asigurând în același timp că tranzacțiile nu pot fi finalizate fără autorizarea utilizatorului.
TSS și contractele inteligente
De-a lungul anilor, cercetătorii au explorat numeroase utilizări ale semnăturilor digitale, dintre care unele au devenit tehnologii cheie indispensabile. Așa cum s-a menționat anterior, TSS este un primitiv criptografic care poate îmbunătăți semnificativ securitatea. În scenariul blockchain, soluțiile criptografice bazate pe TSS pot înlocui multe funcții tradiționale. De exemplu, aplicațiile descentralizate, soluțiile de scalare Layer 2, schimburile atomice, mixarea monedelor, moștenirea etc. pot fi implementate prin intermediul cadrului TSS. Aceasta permite ca operațiunile de contracte inteligente on-chain, care au costuri și riscuri ridicate, să fie treptat înlocuite cu soluții mai economice și fiabile.
De exemplu, mixerele multi-hop utilizează ingenios semnăturile bipartite pentru a oferi o rețea de plăți mai sigură și mai privată, care poate servi drept alternativă la rețeaua Lightning a Bitcoin. ShareLock ar putea fi cea mai economică soluție de mixare on-chain pe Ethereum, bazată pe validarea semnăturii cu prag.
Riscuri
În ultimii ani, utilizarea TSS a crescut treptat. Cu toate acestea, ca tehnologie relativ nouă, aceasta se confruntă încă cu anumite limitări și probleme potențiale. Comparativ cu tehnologiile tradiționale de criptografie cu cheie publică, protocolul TSS este mai complex și nu a fost încă supus unei „testări pe teren” extinse. De obicei, TSS necesită ipoteze criptografice suplimentare în comparație cu semnăturile digitale simple, iar aceste ipoteze ar putea să nu fie suficient de robuste, introducând vectori de atac criptografic care nu au fost prezentați în schemele tradiționale (consultați prezentările relevante de la Conferința Breaking Bitcoin 2019). Pentru a implementa TSS în siguranță în sistem, este recomandat să căutați sprijin din partea inginerilor de securitate și experților în criptografie.
Pe partea pozitivă, datorită contribuțiilor comunității în continuă creștere, revizuirilor de către colegi, auditurilor de cod și optimizărilor algoritmice, aplicațiile TSS existente și emergente devin din ce în ce mai mature.
Concluzie
Această lucrare a prezentat conceptele de bază ale schemei de semnătură cu prag (TSS), un primitiv criptografic cu un potențial imens, care promite să schimbe modul în care interacționăm cu blockchain-ul.
Deoarece această lucrare nu a abordat TSS ECDSA cu prag care poate fi aplicat în BNB Chain și Bitcoin, cititorii interesați pot consulta lucrările recente de mai jos. În plus, dacă doriți să încercați unele aplicații TSS, puteți verifica codul sursă open-source al portofelului bipartit BNB Chain aici sau utilizați portofelul ZenGo, care este un portofel bipartit non-gestionar BNB Chain bazat pe un mod mixt.
Lectură suplimentară:
Schema de semnătură ECDSA bipartită sigură și eficientă
Schema ECDSA multi-part sigură și eficientă, care suportă generarea practică distribuită a cheilor și aplicațiile de custodie a criptomonedelor
ECDSA bipartită bazată pe sistemul de dovezi hash și instanțele sale eficiente
ECDSA cu prag multi-part în configurații de dezinformare eficiente
ECDSA cu prag bipartit sigur bazat pe ipoteza ECDSA
ECDSA cu prag bazat pe ipoteza ECDSA: exemple multiple