Le Threshold Signature Spiegate
Home
Articoli
Le Threshold Signature Spiegate

Le Threshold Signature Spiegate

Avanzato
Pubblicato Jul 21, 2019Aggiornato Apr 29, 2021
12m
Il Threshold Signature Scheme (TSS) è una primitiva crittografica per la generazione di chiavi e la firma distribuite. L'utilizzo di TSS in client blockchain è un nuovo paradigma che può fornire numerosi benefici, soprattutto in termini di sicurezza. In senso più ampio, il TSS può influenzare il design di sistemi per la gestione di chiavi (come i crypto wallet) e aprire la strada per il supporto nativo in casi d'uso della DeFi. Detto questo, il TSS è ancora una tecnologia agli inizi, quindi anche i rischi e i limiti devono essere presi in considerazione.

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

Per comprendere il TSS, è necessaria una conoscenza di base della crittografia. Dagli anni 70, sempre più sistemi Internet (come TLS e PGP) hanno iniziato ad utilizzare crittografia asimmetrica, conosciuta anche con il nome di Crittografia a chiave pubblica (PKC). La PKC utilizza due chiavi: una pubblica e una privata. Mentre la chiave pubblica può essere distribuita e usata da chiunque, la chiave privata è un'informazione segreta che rappresenta la sicurezza del sistema.
La Cifratura e le firme digitali sono due degli utilizzi più comuni della PKC. Sia gli schemi di cifratura che quelli di firma digitale si basano su gruppi di tre algoritmi. Il primo è la generazione della coppia di chiave pubblica e privata, il secondo è la generazione di un testo cifrato/firma, e il terzo è il processo di decodifica/verifica. Per quanto riguarda le firme digitali, l'algoritmo di firma richiede la chiave privata, che è nota solo al suo proprietario, per produrre una firma unica. La firma viene allegata a un determinato messaggio di modo che chiunque abbia la chiave pubblica sarà in grado di verificarne l'autenticità e la correttezza.


Blockchain

Non c'è dubbio che la blockchain sia una tecnologia molto potente. Fornisce un livello di consenso che organizza e registra eventi. Una tale infrastruttura offre agli utenti una potenzialità per costruire economie e persino governi decentralizzati. Stranamente, la crittografia necessaria per eseguire una blockchain molto semplice può essere basata interamente sulle firme digitali. Nel contesto della blockchain, le chiavi private rappresentano identità, mentre una firma è una dichiarazione o una richiesta pubblica effettuata da un'identità. La blockchain ordinerà le dichiarazioni e le convaliderà in base a un insieme di regole, che garantiscono, tra le altre cose, che le firme siano non falsificabili e corrette.
In contrasto con la crittografia più classica utilizzata nella blockchain, la crittografia moderna include alcuni trucchi magici impressionanti: prove a conoscenza zero, cifratura omomorfica, computazione a parti multiple, per citarne alcuni. Come abbiamo osservato nell'ultimo decennio, la ricerca nel campo della blockchain ha spinto in modo incredibile la crittografia applicata, con progressi e innovazioni in tutte le tecnologie citate e tante altre. 

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

Il modo naturale in cui il TSS può essere applicato nella blockchain è modificando un client blockchain in modo che generi chiavi e firme usano il TSS. In questo contesto, usiamo il termine client blockchain per fare rierimento all'insieme di comandi eseguiti da un full node. In pratica, la tecnologia TSS ci permette di rimpiazzare tutti i comandi relativi alla chiave privata con computazioni distribuite.

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

Alcune blockchain offrono funzionalità TSS come parte integrata o programmabile del software. Chiamiamo questa funzionalità multisig o multi-signature. Per comprendere meglio le differenze, possiamo vedere una multisig come un TSS nel livello di applicazione della blockchain.

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.

L'emento di divergenza principale è che la multisig è blockchain-specific e deve essere re-implementata per ogni blockchain, e in alcuni casi, non è supportata. Invece, il TSS si basa su pura crittografia, quindi il supporto è sempre possibile. Un ottimo articolo che illustra le differenze tra i due modelli può essere consultato qui.


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

Uno wallet basato su tecnologia TSS è un po' diverso dagli wallet per criptovalute tradizionali. In genere, uno wallet tradizionale genera una seed phrase e la usa per derivare gli indirizzi in modo deterministico. L'utente può in seguito usare questa struttura gerarchica e deterministica (HD) per 1) raggiungere le chiavi private che corrispondono agli indirizzi pubblici dello wallet e usarle per firmare le transazioni, e 2) recuperare tutte le chiavi dello wallet usando la seed phrase.

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 

Negli anni, i ricercatori hanno trovato molte applicazioni per le firme digitali, e alcune sono sorprendentemente importanti. Come già menzioanto, il TSS è una primitiva crittografica che può migliorare notevolmente la sicurezza. Nel contesto delle blockchain, potremmo dire che molte funzionalità possono essere sostituite con crittografia basata su TSS. Applicazioni decentralizzate, soluzioni di scaling layer 2, atomic swap, mixing, eredità e tanto altro può essere costruito all'interno di un contesto TSS. Questo consentirebbe eventualmente di sostituire le costose e rischiose operazioni smart contract on-chain con alternative più economiche e affidabili.
Per dare alcuni esempi concreti: Multi-Hop Locks utilizza firme a due parti in modo intelligente e può essere usato come alternativa al lightning network di Bitcoin con un network di canali di pagamento più sicuro e privato. ShareLock è probabilmente la soluzione di mixing on-chain più economica per Ethereum, basata sulla verifica di threshold signature singole.


Rischi

Negli ultimi anni, si è verificato un aumento significativo nelle implementazioni di TSS. Tuttavia, essendo una tecnologia relativamente nuova, presenta ancora alcuni limiti e dubbi. Rispetto alla classica crittografia a chiave pubblica, i protocolli TSS possono essere molto complessi e non sono ancora stati testati a fondo. In genere, il TSS richiede presupposti crittografici aggiuntivi e più deboli rispetto alle semplici firme digitali. Di conseguenza, si stanno scoprendo vettori di attacco crittografici che non esistevano nelle impostazioni tradizionali (vedi questa presentazione da Breaking Bitcoin Conference 2019). Gli ingegneri di sicurezza e i crittografi applicati possono assistere nell'implementazione sicura di TSS nel tuo sistema.


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.

Dato che questo articolo non ha parlato del Threshol ECDSA che può essere usato in Binance Chain e Bitcoin, gli interessati possono consultare la seguente lista di testi recenti. Inoltre, se vuoi testare alcune implementazioni TS puoi trovare un codice per un wallet Binance Chain a due parti qui oppure provare ZenGo wallet, che utilizza il metodo ibrido per fornire uno wallet Binance Chain a due parti senza custodia.


Letture consigliate: