Autor: Omer Shlomovits, ZenGo.

Threshold Signing Scheme (TSS) este o schemă primitivă criptografică pentru generarea și semnarea cheilor distribuite. Utilizarea TSS în calculele blockchain este o nouă paradigmă care poate oferi multe beneficii diferite, în special în ceea ce privește securitatea. Adică, TSS poate influența proiectarea sistemelor de management cheie (cum ar fi portofelele digitale) și poate conduce domeniul pentru suport local în cazurile de utilizare DeFi. Acestea fiind spuse, acest TSS este încă o tehnologie nouă, astfel încât riscurile și limitările trebuie luate în considerare atunci când îl utilizați.

În acest articol, vom acoperi ce este TSS, ce avantaje potențiale poate aduce domeniului blockchain, cum poate fi implementat în blockchain-ul Client, cum se compară cu Shamir secret sharing și Multisig, care sunt diferitele moduri de a utiliza TSS în managementul cheilor distribuite și, în final, discutăm despre riscurile și limitările potențiale ale acesteia.

Rolul criptării

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, sistemele de internet au folosit din ce în ce mai multă criptare asimetrică (cum ar fi TLS și PGP), care este cunoscută și sub numele de criptare cu cheie publică (PKC). PKC folosește două chei: una publică și una privată. În timp ce cheia publică nu este secretă și poate fi partajată și utilizată de oricine, cheia privată este o informație confidențială care reprezintă securitatea sistemului și nu poate fi partajată.

Criptarea și semnăturile digitale sunt cele mai frecvente utilizări ale 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 textului cifrat/semnături și a treia este procesul de decriptare/verificare. În ceea ce privește semnăturile digitale: algoritmul de semnătură necesită ca o cheie privată care este cunoscută doar de proprietarul acesteia să creeze o semnătură unică. O semnătură este atașată unui anumit mesaj în așa fel încât oricine deține cheia publică poate verifica autenticitatea și autenticitatea acesteia.


Blockchain

Nu există nicio îndoială că blockchain este o tehnologie extrem de puternică. Oferă un strat de consens care organizează și înregistrează evenimente. O astfel de infrastructură ne oferă utilizatorilor și chiar guvernelor potențiala putere de a construi economii descentralizate. În mod surprinzător, criptarea necesară pentru a rula un blockchain simplu se poate baza doar pe semnături digitale. În blockchain, cheile private reprezintă identități, în timp ce semnăturile sunt o declarație publică sau o revendicare făcută de o identitate. Blockchain-ul solicită și verifică datele conform unui set de reguli care asigură, printre multe altele, că semnăturile sunt de nefalsificat și valide.

Setul de instrumente de criptografie modernă include câteva trucuri magice, spre deosebire de criptografia mai clasică folosită în blockchain. Câteva exemple ale acestor trucuri includ dovezi cu cunoștințe zero, criptografie homomorfă și calcule cu mai multe părți. După cum am văzut în ultimul deceniu, cercetarea blockchain a împins dramatic criptografia aplicată cu progrese recente surprinzătoare în cunoștințe în toate cele de mai sus și multe altele. 

În acest articol, ne vom concentra asupra uneia dintre descoperiri, care este semnăturile efective de prag sigure (TSS).


MPC și schema de semnătură de prag (TSS)

Multiparty 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 grup de părți care nu au încredere unul în celălalt încearcă să calculeze o funcție peste intrările lor, păstrând acele intrări private. 

De exemplu, să presupunem că un număr de angajați ai companiei doresc să știe cine este plătit mai mult, dar fără să-și dezvăluie reciproc salariul real. Aici inputul special este salariile, iar jena va fi numele angajatului cu cel mai mare salariu. Când acest calcul este efectuat folosind MPC, rezultatul este că nici măcar un singur salariu nu este scurs în timpul calculului. 

Cele două caracteristici principale ale MPC sunt autenticitatea și confidențialitatea:

  • Corectitudine: Ieșirea generată de un algoritm este corectă (cum era de așteptat).

  • Confidențialitate: Datele confidențiale de intrare deținute de o parte nu vor fi divulgate altor părți.

Vom folosi MPC pentru a calcula semnătura digitală într-o manieră distribuită. Să vedem cum pot fi aplicate proprietățile de mai sus semnăturilor. Pentru semnături, avem trei pași: 

  • Generarea cheilor: primul pas este și cel mai complicat. Trebuie să creăm o cheie care va fi publică și utilizată pentru a verifica semnăturile viitoare. Dar, de asemenea, trebuie să creăm un secret individual pentru fiecare parte participantă, pe care îl vom numi secret comun. În contextul corectitudinii și confidențialității, spunem că funcția va scoate aceeași cheie publică pentru toate părțile și o partajare secretă diferită pentru ambele următoarele: (1) Confidențialitate: Nu există date despre partajarea secretă între cele două părți și ( 2) Corectitudine: Cheia publică este o funcție a acțiunilor secrete.

  • Semnătura: Acest pas include funcția de a crea o semnătură. Contribuția fiecărei părți este cota lor secretă, care este generată ca rezultat de la pasul anterior (generarea cheii distribuite). Există, de asemenea, o intrare generală cunoscută de toată lumea, care este mesajul care trebuie semnat. Rezultatul va fi o semnătură digitală, iar caracteristica de confidențialitate asigură că nu are loc nicio scurgere de acțiuni secrete în timpul calculului.

  • Verificare: Algoritmul de verificare rămâne același ca în setările clasice. Pentru a fi compatibil cu semnăturile individuale ale cheilor, toți cei care cunosc cheia publică trebuie să poată verifica și autentifica semnăturile. Este exact ceea ce fac nodurile de verificare blockchain.

Schema de semnătură de prag (TSS) este numele pe care o dăm combinației de generare de chei distribuite (DKG) și distribuție de semnătură pe o schemă de semnătură de prag.


Combinând TSS și blockchain

Modul natural în care TSS poate fi utilizat într-un blockchain este schimbarea clientului blockchain pentru a genera chei și semnături folosind TSS. Aici folosim termenul client pentru a ne referi la un set de comenzi care sunt executate de un nod complet. În aplicarea practică, tehnologia TSS ne permite să înlocuim toate comenzile legate de cheia privată cu calcule distribuite.

Pentru a explica acest lucru mai detaliat, vom începe cu o descriere rapidă a modului de a crea adrese noi pe o structură 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, vom avea un grup de părți care calculează în comun cheia publică. Fiecare parte participantă deține o parte secretă a cheii private (partsurile individuale nu sunt dezvăluite celorlalte părți participante). Folosind cheia publică, putem deriva adresa în același mod ca în sistemul tradițional, ceea ce face ca blockchain-ul să fie oarecum neutru în modul în care sunt generate adresele. Avantajul aici este că cheia privată nu mai este un singur punct de eșec, deoarece fiecare parte păstrează o parte din ea. 

Același lucru se poate face și la semnarea tranzacțiilor. În acest caz, în loc ca o parte să semneze cu cheia sa privată, rulăm un generator de semnături distribuit între mai multe părți. Chiar și fiecare parte poate produce o semnătură validă atâta timp cât destui participanți acționează cinstit. Ne-am mutat din nou de la un cont local (punct unic de eșec) la un cont interactiv.

Este important de reținut că generarea cheilor distribuite se poate face într-un mod care să permită diferite tipuri de acces la acestea: o setare generică „t din n” va putea rezista până la t eșecuri arbitrare în operațiunile legate de cheie privată fără a compromite securitatea.


TSS vs. Multisig

Unele rețele blockchain oferă funcționalitate TSS ca parte încorporată sau programabilă a software-ului. Numim această funcție multisig sau multi-signature. Pentru a înțelege mai bine diferențele, putem privi multisig ca un TSS în faza de implementare a blockchain-ului.

Cu alte cuvinte, atât multisig cât și TSS încearcă practic să atingă obiective similare, dar TSS utilizează criptarea off-chain, în timp ce multisig folosește on-chain. Cu toate acestea, blockchain-ul necesită o metodă de criptare multisig, care poate compromite 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 de pe cele două site-uri diferite trebuie comunicate și pe blockchain.

În TSS, detaliile semnatarilor sunt pliate într-o tranzacție obișnuită, ceea ce reduce costurile și menține confidențialitatea. Multisig, pe de altă parte, poate fi non-interactiv, ceea ce salvează problema rulării unui strat complex de comunicare între diferite site-uri.

Principalul punct de diferență este că blockchain multisig trebuie reimplementat pe fiecare blockchain și, în unele cazuri, nu este acceptat deloc. În schimb, TSS se bazează pe criptare pură, deci este întotdeauna acceptabil. Un articol grozav care prezintă diferențele poate fi găsit aici.


Schema de partajare secretă TSS vs. Shamir

Schema de partajare secretă Shamir (SSSS) oferă o modalitate distribuită de stocare a cheii private. În timp ce cheia privată este stocată, este stocată în mai multe locații. Există două diferențe între SSSS și TSS:

  • Generarea cheii: În SSSS există o parte numită „dealer” care este responsabilă pentru crearea acțiunilor secrete ale cheii. Aceasta înseamnă că, în momentul generării cheii, cheia privată este generată într-un singur loc și apoi distribuită de către distribuitor în diferite locații. Dar în TSS nu există un distribuitor, deoarece rolul său este distribuit astfel încât cheia privată completă nu este niciodată într-un singur loc.

  • 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 necesară o semnătură. Pe de altă parte, în TSS semnarea se face într-o manieră distribuită fără a recrea acțiunile secrete.

După cum vedem în TSS, cheia privată (reprezentând securitatea sistemului) nu este niciodată într-un singur loc de-a lungul vieții sale.


Guvernator de prag

Un portofel construit pe tehnologia TSS este puțin diferit de portofelele tradiționale cu criptomonede. Un portofel tradițional creează de obicei o expresie de bază și o folosește pentru a obține adrese în mod determinist. Ulterior, utilizatorul poate utiliza structura ierarhică deterministă (HD) pentru a 1) accesa cheile private care corespund adreselor portofelului și semnează tranzacții cu acestea. 2) Pentru a recupera toate cheile portofelului folosind fraza de bază.

În portofelele de prag lucrurile sunt mai complicate. Deși este posibil să se creeze o arhitectură ierarhică deterministă (HD), construcția acesteia trebuie calculată într-o manieră distribuită ca un alt protocol MPC. Părțile implicate trebuie să ia o decizie comună cu privire la cheia care va fi utilizată în continuare. Cu alte cuvinte, fiecare parte va avea propria sa declarație inițială. Declarațiile seed sunt generate separat și nu sunt combinate, astfel încât niciuna dintre părți să nu poată deduce singură cheile private din declarația seed.

Portofelele bazate pe TSS au, de asemenea, o caracteristică de securitate drăguță care permite rotirea cheii private fără a modifica cheia publică și adresa blockchain corespunzătoare. Rotația cheii private, cunoscută și sub denumirea de Partajare secretă proactivă, este un alt protocol MPC care preia partajări secrete ca intrare și emite un nou set de partajări secrete. Partajările secrete vechi pot fi șterse, iar acțiunile noi pot fi, de asemenea, folosite în același mod.

Această arhitectură adaugă o dimensiune temporală securității, ceea ce înseamnă că un atacator ar trebui să se afle în mai multe locații în același timp pentru a încerca un hack de portofel Threshold. Combinarea acțiunilor secrete pre-rotire și post-rotire nu ar oferi unui atacator nicio putere suplimentară dacă ar dori să falsifice o semnătură. 

Dezavantajul acestui tip de portofel este lipsa unei fraze semințe care îl face incompatibil cu sistemele de portofel cu o singură cheie. Prin urmare, este important să decideți care părți vor păstra partajarea confidențială.

Există câteva moduri posibile, cum ar fi:

  • Outsourcing TSS: utilizatorul va permite „n” servere să execute calculul în numele său. Externalizează în mod eficient crearea, gestionarea și semnarea cheilor 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 pe dispozitivele pe care le deține. De exemplu, o parte ar fi un dispozitiv IoT, o altă parte ar fi un utilizator de telefon mobil, o altă terță parte ar fi un laptop și așa mai departe.

  • Sisteme hibride: TSS va fi operat astfel încât unele părți să fie controlate de furnizori externi de servicii, în timp ce unele părți rulează pe propriul hardware.

Prima metodă descarcă calculele grele TSS din partea clientului utilizatorului. Pe de altă parte, furnizorii de servicii se pot înțelege (presupunem că un număr mare dintre ei nu sunt atacați în același timp, dar în practică pot fi atacați în același timp) și fura activele utilizatorilor.

A doua metodă oferă utilizatorului control complet, dar face procesul de tranzacție greoi deoarece aveți nevoie de mai multe dispozitive pentru a vă conecta la Internet și a participa la contul TSS.

A treia opțiune este cea mai bună dintre ambele opțiuni, deoarece oferă utilizatorului o modalitate ușoară și rapidă de a face tranzacții fără compromisul de a efectua tranzacții fără permisiunea utilizatorului.


TSS și contracte inteligente 

De-a lungul anilor, cercetătorii au găsit multe utilizări pentru semnăturile digitale, dar unele nu sunt surprinzătoare. După cum am menționat mai devreme, TSS este o criptare primitivă care poate crește securitatea într-un mod semnificativ. În contextul blockchain-ului am putea spune că multe funcții pot fi înlocuite cu criptografia bazată pe TSS. Aplicațiile descentralizate, soluțiile de nivel 2 pentru scalare, schimburi atomice, amestecare, moștenire și multe altele pot fi construite pe cadrul TSS. Acest lucru va permite în cele din urmă înlocuirea operațiunilor de contracte inteligente costisitoare și riscante cu alternative mai ieftine și mai fiabile.

Pentru a da câteva exemple concrete: Multi-Hop Locks folosește semnături cu două părți într-un mod inteligent și poate fi folosit pentru a schimba rețeaua fulger a Bitcoin cu o rețea de canale de plată mai sigură și privată. ShareLock este probabil cea mai ieftină soluție de codificare Ethereum blockchain construită pe verificare folosind o singură semnătură de prag.


Riscuri

În ultimii doi ani, a existat o creștere semnificativă a aplicațiilor TSS. Dar, ca orice tehnologie relativ nouă, are încă unele limitări și preocupări. În comparație cu criptografia tradițională cu cheie publică, protocoalele TSS pot fi foarte complexe și nu au fost încă „testate în acțiune”. TSS necesită de obicei presupuneri criptografice suplimentare, mai slabe, în comparație cu semnăturile digitale simple. Drept urmare, sunt acum detectați vectori de atac criptografic care nu existau înainte în setările tradiționale (vezi această prezentare de la Breaking Bitcoin Conference 2019). Inginerii de securitate și criptografii aplicați pot ajuta la implementarea TSS în siguranță în sistemul dvs.

Pe partea pozitivă, aplicațiile existente și noi devin din ce în ce mai puternice datorită contribuțiilor sporite de calitate, evaluărilor inter pares, verificării încrucișate și îmbunătățirii performanței de calcul folosind algoritmi.


Gânduri de încheiere

În acest articol, vă prezentăm elementele de bază ale Threshold Signature Scheme (TSS), o primitivă criptografică uimitoare care are potențialul de a schimba dramatic modul în care este utilizat blockchain-ul.

Deoarece acest articol nu a discutat despre Threshold ECDSA care poate fi utilizat pe Binance Chain și Bitcoin, persoanele interesate pot citi articolele din următoarea listă. De asemenea, dacă doriți să încercați câteva implementări TSS, puteți găsi aici codul pentru un portofel Binance Chain bipartit sau încercați portofelul ZenGo care utilizează metoda hibridă de furnizare a unui portofel Binance Chain cu două părți.


Lectură aprofundată:

  • 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 bipartit 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 bipartit ECDSA din ipotezele ECDSA

  • Pragul ECDSA din ipotezele ECDSA: cazul cu mai multe partide