Autori: Omer Shlomovits, ZenGo.

Lo schema di firma a soglia (TSS) è un primitivo crittografico che permette la generazione distribuita di chiavi e firme. Introdurre TSS nei client della blockchain rappresenta un nuovo paradigma che porta numerosi vantaggi, con prestazioni di sicurezza particolarmente notevoli. In termini ampi, TSS può ridefinire la progettazione dei sistemi di gestione delle chiavi (come i portafogli di criptovalute) e fornire supporto nativo per casi d'uso DeFi. Tuttavia, come tecnologia emergente, TSS presenta anche rischi e limitazioni.

Questo articolo esplorerà i concetti di base del TSS, i potenziali vantaggi per il settore blockchain, i metodi di implementazione nei client della blockchain e le differenze rispetto alla condivisione segreta di Shamir e alla multi-sig. Inoltre, esamineremo i diversi modi di utilizzare TSS per la gestione distribuita delle chiavi e discuteremo i rischi e le limitazioni correlate.


Il potere della crittografia

Per capire il concetto di TSS, dobbiamo prima acquisire alcune nozioni di base sulla crittografia. Fin dagli anni '70, un numero crescente di sistemi internet (come TLS e PGP) ha iniziato a utilizzare tecniche di crittografia asimmetrica, note anche come crittografia a chiave pubblica (PKC). La PKC si basa su due chiavi: una chiave pubblica e una chiave privata. La chiave pubblica è pubblica e chiunque può pubblicarla e utilizzarla, mentre la chiave privata è il segreto vitale per la sicurezza del sistema.

La crittografia e le firme digitali sono due delle principali applicazioni della PKC. Entrambe queste tecnologie si basano su tre algoritmi: prima genera una coppia di chiavi privata e pubblica, poi genera il testo cifrato/firma e infine il processo di decrittazione/verifica. Prendendo come esempio la firma digitale, l'algoritmo di firma utilizza la chiave privata, di cui solo il proprietario è a conoscenza, per generare una firma unica, che viene allegata al messaggio. Successivamente, chiunque possieda la chiave pubblica può verificare l'autenticità e l'accuratezza di quella firma.


Blockchain

Senza dubbio, la blockchain è una tecnologia potente e promettente che fornisce uno strato di consenso per organizzare e registrare eventi. Questa infrastruttura consente agli utenti di costruire un'economia decentralizzata, persino un governo decentralizzato. Inaspettatamente, la crittografia di base necessaria per far funzionare una blockchain fondamentale può essere realizzata semplicemente utilizzando le firme digitali. Nella blockchain, la chiave privata rappresenta l'identità, mentre la firma è la dichiarazione o affermazione pubblica dell'identità. La blockchain garantisce l'inconfutabilità e l'accuratezza delle firme ordinando queste dichiarazioni e verificandole secondo un insieme di regole.

Rispetto alle tecnologie crittografiche tradizionali utilizzate nella blockchain, la crittografia moderna ha introdotto molte nuove scoperte entusiasmanti, come le prove a conoscenza zero, la crittografia omomorfica e il calcolo multi-partitico. Negli ultimi 10 anni, la ricerca sulla blockchain ha notevolmente spinto lo sviluppo della crittografia applicata, portando a significativi progressi in questi e altri ambiti.

Questo articolo si concentrerà su una di queste scoperte, ovvero lo schema di firma a soglia (TSS) sicuro ed efficiente.


MPC e schema di firma a soglia (TSS)

Il calcolo multi-partitico (MPC) è un ramo della crittografia le cui origini risalgono a circa 40 anni fa con la pionieristica ricerca di Andrew C. Yao. Il cuore dell'MPC è consentire a un gruppo di parti non fidate di calcolare congiuntamente il risultato di una funzione senza rivelare le proprie informazioni di input.

Ad esempio, supponiamo che n dipendenti di un'azienda vogliano sapere chi ha il salario più alto, ma non vogliono rivelare i propri salari effettivi. In questo scenario, l'input di ciascun dipendente è il proprio salario, mentre l'output finale è il nome del dipendente con il salario più alto. Attraverso l'MPC, questo calcolo può essere completato senza esporre alcuna informazione sul salario dei dipendenti.

Le due principali caratteristiche fondamentali dell'MPC sono correttezza e privacy:

  • Correttezza: l'output dell'algoritmo è il risultato corretto atteso.

  • Privacy: I dati di input di qualsiasi parte coinvolta non saranno divulgati ad altre parti.

Utilizzeremo la tecnologia MPC per calcolare in modo distribuito le firme digitali e esploreremo come applicare le caratteristiche sopra menzionate nel processo di firma. Come già accennato, la firma è generalmente suddivisa in tre passaggi:

  • Generazione della chiave: il primo passo è il più complesso dell'intero processo. Questo passaggio richiede la generazione di una chiave pubblica, utilizzata per verificare le firme successive. Inoltre, è necessario generare una "frammento segreto" indipendente per ciascuna parte coinvolta. In termini di correttezza e privacy, questa funzione restituirà a tutte le parti coinvolte la stessa chiave pubblica, mentre genererà diversi frammenti segreti per ciascuna parte, garantendo: (1) Privacy: i dati del frammento segreto non saranno divulgati tra le parti e (2) Correttezza: la chiave pubblica è il risultato del calcolo della funzione di tutti i frammenti segreti.

  • Firma: questo passaggio implica la funzione di generazione della firma. Gli input delle parti sono i loro frammenti segreti, derivati dall'output del passaggio precedente (generazione della chiave distribuita). Inoltre, c'è un input pubblico ben noto, ovvero il messaggio da firmare. L'output è la firma digitale, mentre la privacy garantisce che durante tutto il processo di calcolo, i frammenti segreti non vengano divulgati.

  • Verifica: l'algoritmo di verifica rimane coerente con i metodi tradizionali. Per garantire la compatibilità con un singolo schema di firma, chiunque abbia accesso alla chiave pubblica può verificare e confermare la firma, il che rappresenta il compito centrale eseguito dai nodi di verifica della blockchain.

Lo schema di firma a soglia (TSS) è il nome dato alla combinazione di generazione della chiave distribuita (DKG) e il processo di firma distribuita.


Combinare TSS con la blockchain

Un modo intuitivo per adottare TSS nella blockchain è modificare il client della blockchain affinché generi chiavi e firme tramite la tecnologia TSS. Qui, il "client della blockchain" si riferisce a un insieme di comandi eseguiti da nodi completi. Nella pratica, TSS può sostituire tutti i comandi relativi alla chiave privata con calcoli distribuiti.

Per illustrare in dettaglio, iniziamo con una breve introduzione su come vengono creati nuovi indirizzi nel design tradizionale della blockchain. In parole semplici, si genera prima la chiave privata, poi si calcola la chiave pubblica in base alla chiave privata, e infine si deduce l'indirizzo della blockchain dalla chiave pubblica.

In modalità TSS, la chiave pubblica è calcolata congiuntamente da n parti, ciascuna delle quali detiene solo un frammento segreto della chiave privata (e i frammenti non si divulgano tra loro). Possiamo dedurre l'indirizzo dalla chiave pubblica nello stesso modo in cui lo faremmo con i sistemi tradizionali, in modo che il metodo di generazione dell'indirizzo non sia limitato dalla blockchain. Il vantaggio di questo metodo è che ciascuna parte detiene solo una parte della chiave privata, quindi la chiave privata non è più una fonte di guasto singolo.

Le firme delle transazioni possono essere eseguite in modo simile. La differenza è che non si utilizza più una chiave privata per la firma unilaterale, ma si genera una firma distribuita attraverso la cooperazione di più parti. Pertanto, finché ci sono abbastanza parti che agiscono onestamente, è possibile produrre una firma valida, realizzando così la transizione dal calcolo locale (guasto singolo) al calcolo interattivo.

Vale la pena notare che la generazione distribuita delle chiavi può supportare diversi tipi di strutture di accesso: il comune modello "t di n" può garantire che, anche in caso di fino a t guasti arbitrari, sia comunque possibile eseguire operazioni relative alle chiavi in modo sicuro.


TSS e firma multi-sig

Alcune blockchain offrono le funzionalità TSS come parte integrata o programmabile del software, comunemente chiamate multi-sig. Per comprendere meglio le differenze, si può considerare la multi-sig come un TSS a livello di applicazione della blockchain.

In altre parole, sia la multi-sig che il TSS stanno essenzialmente perseguendo obiettivi simili, ma il TSS utilizza tecnologie crittografiche off-chain, mentre la multi-sig avviene on-chain. Tuttavia, la blockchain richiede un approccio specifico per codificare le multi-sig, il che potrebbe influire sulla privacy, poiché la struttura di accesso (numero di firmatari) verrebbe esposta sulla blockchain. Inoltre, le transazioni multi-sig comportano costi relativamente elevati, poiché le informazioni di ciascun firmatario devono essere trasmesse alla blockchain.

In TSS, i dettagli dei firmatari sono incorporati all'interno delle transazioni regolari, riducendo così i costi e proteggendo la privacy. D'altra parte, la multi-sig può essere realizzata attraverso metodi non interattivi, evitando la complessità della comunicazione tra i diversi firmatari.

La principale differenza tra i due è che la multi-sig è specifica per la blockchain e deve essere implementata separatamente per ciascuna blockchain, e in alcune blockchain potrebbe non essere affatto supportata. Al contrario, il TSS è completamente basato sulla crittografia e sarà sempre supportato. Per ulteriori informazioni sulle differenze tra i due, consultare qui.


TSS e lo schema di condivisione segreta di Shamir

Lo schema di condivisione segreta di Shamir (SSSS) offre un modo per memorizzare distribuitamente la chiave privata, consentendo di distribuirla in più posizioni mentre è inattiva. SSSS e TSS differiscono principalmente in due modi:

  • Generazione della chiave: in SSSS, un ruolo chiamato "distributore" è responsabile della generazione dei frammenti segreti della chiave privata. Il distributore genera la chiave privata completa in un'unica posizione e la suddivide in più frammenti segreti, che vengono quindi distribuiti in posizioni diverse. In TSS, non esiste un distributore, poiché l'intero processo è distribuito e la chiave privata completa non viene mai generata in un'unica posizione.

  • Firma: in SSSS, le parti devono prima ricostruire la chiave privata completa per completare la firma, il che comporta il rischio di guasto singolo ogni volta che si firma. In TSS, il processo di firma viene completato in modo distribuito senza la necessità di ricostruire i frammenti segreti.

Pertanto, nello schema TSS, la chiave privata non appare mai in un'unica posizione durante l'intero ciclo di vita, migliorando significativamente la sicurezza del sistema.


Portafoglio a soglia

I portafogli basati sulla tecnologia TSS differiscono leggermente dai tradizionali portafogli di criptovalute. I portafogli tradizionali di solito derivano in modo deterministico l'indirizzo del portafoglio generando una frase mnemonica. Gli utenti possono utilizzare questa struttura di determinismo gerarchico (HD): 1) ottenere la chiave privata corrispondente all'indirizzo del portafoglio e firmare transazioni; 2) ripristinare tutte le chiavi del portafoglio tramite la frase mnemonica.

Il meccanismo operativo del portafoglio a soglia è più complesso. Sebbene supporti anche la generazione di una struttura HD, questo processo deve essere eseguito in modo distribuito, simile a un altro protocollo MPC. Le parti devono decidere congiuntamente quale chiave utilizzare successivamente. In altre parole, ciascuna parte ha la propria frase mnemonica indipendente. Queste frasi mnemoniche sono generate separatamente e non vengono combinate, quindi nessuna parte può derivare da sola la chiave privata completa dalla propria frase mnemonica.

Inoltre, i portafogli basati su TSS hanno una potente funzione di sicurezza che consente la rotazione della chiave privata senza dover modificare la chiave pubblica e l'indirizzo della blockchain. La rotazione della chiave privata, nota anche come condivisione attiva del segreto, è un altro protocollo MPC che utilizza i vecchi frammenti segreti come input per generare un insieme completamente nuovo di frammenti segreti. I vecchi frammenti segreti possono essere eliminati, mentre i nuovi frammenti possono continuare a essere utilizzati.

Questa architettura introduce una dimensione temporale nella sicurezza del portafoglio a soglia, il che significa che un attaccante deve apparire contemporaneamente in più posizioni per poter attaccare con successo il portafoglio. Anche se tentassero di falsificare una firma, i frammenti segreti ottenuti dall'attaccante prima e dopo la rotazione della chiave privata non possono essere combinati per formare la chiave completa, quindi non rappresentano una minaccia aggiuntiva per la sicurezza.

Tuttavia, una limitazione di tali portafogli è che non supportano le frasi mnemoniche, rendendoli incompatibili con i sistemi di portafoglio a chiave singola. Pertanto, è particolarmente importante chiarire quali parti detengono i frammenti segreti.

Le architetture possibili includono le seguenti:

  • TSS esternalizzato: gli utenti delegano il calcolo a "n" server. La generazione, gestione e firma delle chiavi vengono efficacemente esternalizzate a fornitori di servizi, che non sono i proprietari degli asset, ma ottengono un certo ritorno fornendo garanzie di sicurezza.

  • Collaborazione multi-dispositivo: gli utenti eseguono TSS tra i dispositivi che possiedono. Ad esempio, dispositivi IoT, dispositivi mobili e laptop collaborano.

  • Modalità mista: alcune parti sono controllate da fornitori di servizi esterni, mentre altre operano sui dispositivi di proprietà dell'utente, completando insieme il calcolo TSS.

Il primo metodo allevia il carico di calcolo TSS sul client dell'utente, ma i fornitori di servizi potrebbero colludere per rubare gli asset dell'utente (anche se di solito si presume che un numero sufficiente di fornitori di servizi non sarà compromesso contemporaneamente, non si esclude questa possibilità).

Il secondo metodo offre agli utenti il pieno controllo, ma richiede che più dispositivi siano online per partecipare al calcolo TSS, rendendo le operazioni di transazione più complesse.

Il terzo metodo bilancia entrambi, consentendo agli utenti di completare le transazioni in modo semplice ed efficiente, garantendo che le transazioni non possano essere completate senza l'autorizzazione dell'utente.


TSS e contratti intelligenti

Negli ultimi anni, i ricercatori hanno esplorato molteplici usi delle firme digitali, alcuni dei quali sono diventati tecnologie chiave indispensabili. Come già accennato, TSS è un primitivo crittografico che può migliorare significativamente la sicurezza. Nel contesto blockchain, le soluzioni crittografiche basate su TSS possono sostituire molte funzionalità tradizionali. Ad esempio, le applicazioni decentralizzate, le soluzioni di scalabilità Layer 2, gli scambi atomici, il mixing e l'eredità possono essere implementati attraverso il framework TSS. Questo ha portato a una graduale sostituzione delle operazioni di contratto intelligente on-chain, caratterizzate da costi e rischi più elevati, con soluzioni più economiche e affidabili.

Ad esempio, il multi-hop lock fornisce una rete di pagamento più sicura e privata utilizzando astutamente le firme di due parti, come alternativa alla Lightning Network di Bitcoin. ShareLock potrebbe essere la soluzione di mixing on-chain più economica su Ethereum, basata sulla verifica della firma a soglia.


Rischi

Negli ultimi anni, l'applicazione del TSS è aumentata gradualmente. Tuttavia, come tecnologia relativamente nuova, presenta ancora alcune limitazioni e potenziali problemi. Rispetto alle tradizionali tecnologie di crittografia a chiave pubblica, il protocollo TSS è più complesso e non è stato ampiamente "testato sul campo". Di solito, a differenza delle semplici firme digitali, il TSS richiede assunzioni crittografiche aggiuntive, che potrebbero non essere abbastanza solide, introducendo vettori di attacco crittografici non presenti nelle soluzioni tradizionali (si veda il relativo documento presentato alla Breaking Bitcoin Conference del 2019). Per implementare TSS in modo sicuro all'interno di un sistema, si consiglia di cercare il supporto di ingegneri della sicurezza e esperti di crittografia.

Dal lato positivo, grazie al crescente contributo della comunità, alla revisione tra pari, agli audit del codice e all'ottimizzazione degli algoritmi, le applicazioni TSS esistenti e emergenti stanno diventando sempre più mature.


Conclusione

Questo articolo ha presentato i concetti di base dello schema di firma a soglia (TSS), un primitivo crittografico di grande potenziale, in grado di cambiare il modo in cui interagiamo con la blockchain.

Poiché questo articolo non ha trattato il TSS ECDSA applicabile a BNB Chain e Bitcoin, i lettori interessati possono consultare i seguenti articoli più recenti. Inoltre, se desiderate provare alcune applicazioni TSS, potete controllare il codice sorgente open source del portafoglio BNB Chain a due parti qui, oppure utilizzare il portafoglio ZenGo, che è un portafoglio a due parti non custodito su BNB Chain che utilizza una modalità mista.


Approfondimenti:

  • Schema di firma ECDSA sicuro ed efficiente a due parti

  • Schema ECDSA multi-partitico sicuro ed efficiente, supporta la generazione distribuita di chiavi pratiche e applicazioni di custodia di criptovalute

  • ECDSA a due parti basato su un sistema di prova di hash e la sua instanziazione efficiente

  • ECDSA a soglia multi-partitica con impostazioni di disaccoppiamento efficienti

  • ECDSA a soglia sicura a due parti basata su assunzioni ECDSA

  • ECDSA a soglia basata su assunzioni ECDSA: diversi casi d'uso