In questo articolo, spiegheremo che cos'è il TSS, quali sono i potenziali vantaggi che porta nel campo della blockchain, come può essere implementato in un client blockchain, come si paragona agli schemi Shamir Secret Sharing e Multisig, quali sono le diverse modalità d'uso per la gestione di chiavi distribuite e infine i rischi e i limiti.
Il potere della crittografia
Blockchain
In questo articolo, ci concentreremo su una sola di queste innovazioni: efficient secure threshold signature (TSS).
La MPC e il threshold signature scheme (TSS)
La computazione a parti multiple (MPC) è un ramo della crittografia che ha avuto iniio con il lavoro essenziale di Andrew C. Yao, quasi 40 anni fa. Nella MPC, un gruppo di parti che non si fidano l'una dell'altra cercano di computare collettivamente una funzione sui loro input, mantenendo questi input privati.
Per fare un esempio, supponiamo che n impiegati di una compagnia vogliono sapere chi viene pagato di più senza però rivelare lo stipendio effettivo di ciascuno. In questo caso gli input privati sono gli stipendi e l'output sarà il nome dell'impiegato con lo stipendio più alto. Eseguire questa computazione usando la MPC permette di tenere nascosto ogni singolo stipendio durante il calcolo.
Le due proprietà principali della MPC sono correttezza e privacy:
Correttezza: l'otput prodotto da un algoritmo è corretto (come previsto).
Privacy: i dati di input segreti che appartengono a una delle parti non vengono rivelati alle altre parti.
Utilizzeremo la MPC per computare una firma digitale in modo distribuito. Vediamo come le proprietà sopra descritte possono essere applicate alle firme. Ricorca che, per le firme, abbiamo tre fasi distinte:
Generazione della Chiave: la prima fase è anche la più complessa. Dobbiamo generare una chiave che sarà pubblica e usata per verificare le future firme. Tuttavia, dobbiamo anche generare un segreto individuale per ciascuna parte, che chiameremo un secret share. In termini di correttezza e privacy diremmo che la funzione produrrà la stessa chiave pubblica per tutte le parti, e un secret share differente per ciascuna, di modo che: (1) privacy: nessun dato all'interno del secret share viene diffuso tra le parti, e (2) correttezza: la chiave pubblica è una funzione dei secret share.
Firma: questa fase comporta una funzione di generazione della firma. L'iinput di ciascuna parte sarà il suo secret share, creato come output della fase precedente (generazione della chiave distribuita). C'è anche un input pubblico conosciuto da tutti, ovvero il messaggio che deve essere firmato. L'output sarà una firma digitale, e la proprietà della privacy garantisce che nessun secret share è stato rivelato durante la computazione.
- Verifica: l'algoritmo di verifica rimane uguale all'impostazione classica. Per essere compatibile con le firme della chiave singola, chiunque sia a conoscenza della chiave pubblica dovrebbe essere in grado di verificare e convalidare le firme. Questo è esattamente ciò che fanno i nodi validatori della blockchain.
Threshold signature scheme (TSS) è il nome con cui indichiamo questa composizione di generazione di chiave distribuita (DKG) e firma distribuita di un threshold signature scheme.
Combinare il TSS con la blockchain
Per spiegare il processo in maniera più dettagliata, inizieremo descrivendo brevemente come i nuovi indirizzi vengono creati nel design blockchain classico. In poche parole, possiamo creare un nuovo indirizzo generando una chiave privata e in seguito computare la chiave pubblica da quella privata. Infine, l'indirizzo pubblico è derivato dalla chiave pubblica.
Ora, usando il TSS, avremmo un insieme di n parti che computano collettivamente la chiave pubblica, ciascuna in possesso di un secret share della chiave privata (gli share individuali non vengono rivelati alle altre parti). Dalla chiave pubblica, possiamo derivare l'indirizzo pubblico nello stesso modo usato all'interno del sistema tradizionale, rendendo la blockchain indifferente al modo in cui è stato generato. Il vantaggio è che la chiave privata non è più un singolo punto di errore in quanto ogni parte ne possiede solo una parte.
Lo stesso può essere applicando nella firma delle transazioni. In questo caso, invece di una singola parte che firma con la propria chiave privata, eseguiamo una generazioni di firma distribuita tra diverse parti. Quindi ogni parte può produrre una firma valida purchè un numero sufficiente di parti agisce onestamente. Ancora una volta ci siamo spostati da una computazione locale (singolo punto di errore) a una interattiva.
E' importante sottolineare che la generazione di chiave distribuita può essere effettuata in modo da consentire diverse tipologie di strutture di accesso: l'impostazione generale “t out of n” sarà in grado di resistere fino a t errori arbitrari in operazioni legate alla chiave privata, senza compromettere la sicurezza.
TSS vs. Multisig
In altre parole, sia la multisig che il TSS cercano essenzialmente di raggiungere obiettivi simili, ma il TSS utilizza crittografia off-chain, mentre la multisig avviene on-chain. Tuttavia, la blockchain ha bisogno di un modo per codificare la multisig, che potrebbe danneggiare la privacy in quando la struttura di accesso (numero di firmatari) è esposta sulla blockchain. Il costo di una transazione multisig è più alto perchè anche l'informazione sui diversi firmatari deve essere comunicata alla blockchain.
Nel TSS, i dettagli dei firmatari sono contenuti in una transazione regolare, riducendo i costi e mantenendo la privacy. D'altra parte, la multisg può essere non interattiva, fattore che risparmia il disturbo di operare un complesso livello di comunicazione tra i diversi firmatari.
TSS vs. Shamir secret sharing scheme
Shamir secret sharing scheme (SSSS) fornisce un metodo per archiviare la chiave privata in maniera distribuita per fare in modo che quando la chiave privata è a riposo è conservata in più posizioni. Ci sono due differenza tra SSSS e TSS:
Generazione di Chiave: nel SSSS, c'è una singola parte chiamata “dealer” che ha la responsabilità di generare i secret share della chiave privata. Questo significa che, al momento della Generazione di Chiave, la chiave privata viene generata in una singola posizione e in seguito distribuita dal dealer a diverse posizioni. Nel TSS, non esiste un dealer in quanto il suo ruolo è distribuito per fare in modo che la chiave privata intera non si trovi mai in una singola posizione.
Firma: nel SSSS, le parti devono ricostruire la chiave privata intera per firmare, fase che risulta nuovamente in un singolo punto di errore ogni volta che serve una firma. Nel TSS, la firma viene prodotta in modo distribuito senza mai ricostruire i secret share.
Come possiamo vedere, nel TSS la chiave privata (che rappresenta la sicurezza del sistema) non è mai in una posizione singola nel corso della sua intera durata.
Threshold wallet
In un threshold wallet, le cose sono più complicate. Anche se è possibile generare una struttura HD, la sua generazione deve essere computata in maniera distribuita, come un altro protocollo MPC. Le parti devono decidere collettivamente quale sarà la prossima chiave da usare. In altre parole, ciascuna parte avrà una sua seed phrase. Le seed phrase vengono generate in modo separato e non sono mai combinate, quindi una parte da sola non può derivare le chiavi private dal suo seed.
Gli wallet basati su TSS possiedono anche un'importante funzione di sicurezza, ovvero consentono la rotazione delle chiavi private senza cambiare chiave pubblica e indirizzo blockchain corrispondenti. La rotazione della chiave privata, conosciuta anche come proactive secret sharing, è un altro protocollo MPC che riceve i secret share come input e produce un nuovo set di secret share come output. I vecchi secret share possono essere cancellati e i nuovi usati allo stesso modo.
Una tale struttura aggiunge una dimensione temporarale alla sicurezza, il che significa che un attaccante deve trovarsi in più posizioni allo stesso tempo per attaccare un threshold wallet. Combinare i secret share prima e dopo la rotazione non darà all'attaccante più potere se sta cercando di falsificare una firma.
Uno svantaggio di questo tipo di wallet è che la mancanza di seed phrase lo rende incompatibile con i sistemi wallet a chiave singola. Quindi, è importante considerare quali parti saranno in possesso dei secret share.
Esistono diverse possibili architetture:
Outsourcing TSS: l'utente consente a “n” server di eseguire la computazione per conto suo. Esternalizzando generazione di chiave, gestione e firma a fornitori di servizi che non sono proprietari degli asset ma forniscono un livello di sicurezza in cambio di un qualche incentivo.
Usare diversi dispositivi: L'utente eseguirà il TSS tra i dispositivi che possiede. Per esempio - una parte sarà qualche dispositivo IoT, un'altra parte lo smartphone dell'utente, un'altra parte il suo laptop, e così via.
Ibrido: il TSS verrà operato in modo che alcune parti sono controllate da fornitori di servizi esterni e alcune parti attive su dispositivi di proprietà dell'utente.
Il primo metodo alleggerisce il lato client dell'utente della pesante computazione TSS. Tuttavia, i fornitori di servizi potrebbero colludere (supponiamo che un numero sufficiente non venga attaccato allo stesso tempo, ma in pratica potrebbe succedere) e rubare gli asset dell'utente.
Il secondo metodo garantisce all'utente controllo totale ma rende complesso l'effettuare transazioni, in quanto sono necessari diversi dispositivi online per partecipare alla computazione TSS.
La terza opzione è considerata la migliore di entrambi in quanto fornisce all'utente un metodo facile e veloce per effettuare transazioni senza dover rinunciare alla necessità della sua autorizzazione.
TSS e smart contract
Rischi
In chiusura
In questo articolo, abbiamo introdotto le basi del threshold signature scheme (TSS), un'affascinante primitiva crittografica con il potenziale di cambiare in modo significativo l'uso della blockchain.
Letture consigliate: