Autore: Omer Shlomovits, ZenGo.

Threshold Signature Scheme (TSS) è una primitiva crittografica per la generazione e la firma di chiavi distribuite. L’utilizzo del TSS nei client blockchain è un nuovo paradigma che può fornire numerosi vantaggi, soprattutto in termini di sicurezza. In senso più ampio, il TSS può influenzare la progettazione dei sistemi di gestione delle chiavi (come i portafogli crittografici) e aprire la strada al supporto nativo nei casi d’uso della DeFi. Detto questo, il TSS è ancora una nuova tecnologia, quindi è necessario considerare anche i rischi e le limitazioni.

In questo articolo tratteremo cos'è un TSS, quali sono i potenziali vantaggi che apporta allo spazio blockchain, come può essere implementato in un client blockchain, come si confronta con la condivisione segreta di Shamir e Multisig, quali sono i diversi modi per utilizzare TSS per la gestione delle chiavi distribuite e infine discutiamo dei rischi e delle limitazioni.


Il potere della crittografia

Per comprendere il TSS, abbiamo prima bisogno di alcune conoscenze di base della crittografia. Dagli anni '70, sempre più sistemi Internet (come TLS e PGP) hanno utilizzato la crittografia asimmetrica, nota anche come crittografia a chiave pubblica (PKC). PKC utilizza due chiavi: una pubblica e una privata. Mentre la chiave pubblica non è segreta e può essere pubblicata e utilizzata da chiunque, la chiave privata è un'informazione segreta che rappresenta la sicurezza del sistema.

La crittografia e le firme digitali sono i due usi più comuni per PKC. Sia gli schemi di crittografia che quelli di firma digitale si basano su gruppi di tre algoritmi. Il primo è la generazione della coppia di chiavi pubblica e privata, il secondo è la generazione di un testo cifrato/firma e il terzo è il processo di decrittografia/verifica. Per quanto riguarda le firme digitali, l'algoritmo di firma richiede che la chiave privata, nota solo al suo proprietario, produca una firma univoca. La firma viene allegata ad un determinato messaggio in modo che chiunque detenga la chiave pubblica possa 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 gli eventi. Una tale infrastruttura offre a noi utenti il ​​potere potenziale di costruire economie decentralizzate e persino governi. Abbastanza sorprendentemente, la crittografia necessaria per eseguire una blockchain di base può basarsi esclusivamente su firme digitali. Nel contesto di una blockchain, le chiavi private rappresentano identità mentre una firma è una dichiarazione pubblica o un'affermazione fatta da un'identità. La blockchain ordinerà le dichiarazioni e le convaliderà secondo una serie di regole che garantiscono, tra le altre cose, che le firme siano infalsificabili e corrette.

In contrasto con la crittografia più classica utilizzata nella blockchain, i moderni strumenti crittografici includono alcuni fantastici trucchi magici: prove a conoscenza zero, crittografia omomorfica e calcolo multipartitico, solo per citarne alcuni. Come abbiamo visto negli ultimi dieci anni, la ricerca blockchain ha dato un enorme impulso alla crittografia applicata, con recenti scoperte in tutto quanto sopra e molto altro ancora. 

In questo articolo, ci concentreremo su una di queste innovazioni: le firme efficienti con soglia sicura (TSS).


MPC e lo schema di firma della soglia (TSS)

La computazione multipartita (MPC) è una branca della crittografia iniziata con il lavoro fondamentale di Andrew C. Yao, quasi 40 anni fa. In MPC, un insieme di parti che non si fidano l’una dell’altra tentano di calcolare congiuntamente una funzione sui propri input mantenendo tali input privati. 

Ad esempio, supponiamo che n dipendenti di un'azienda vogliano sapere chi viene pagato di più, ma senza rivelare agli altri il loro stipendio effettivo. Qui gli input privati ​​sono gli stipendi e l'output sarà il nome del dipendente con lo stipendio più alto. Facendo questo calcolo utilizzando MPC otteniamo che durante il calcolo non viene trapelato nemmeno un singolo stipendio. 

Le due principali proprietà di MPC sono la correttezza e la privacy:

  • Correttezza: l'output prodotto da un algoritmo è corretto (come previsto).

  • Privacy: i dati di input segreti detenuti da una parte non verranno divulgati alle altre parti.

Utilizzeremo MPC per calcolare una firma digitale in modo distribuito. Vediamo come le proprietà di cui sopra possono essere applicate alle firme. Ricordiamo che, per le firme, abbiamo tre passaggi: 

  • Generazione delle chiavi: il primo passo è anche il più complesso. Dobbiamo generare una chiave che sarà pubblica e utilizzata per verificare le firme future. Dobbiamo però anche generare un segreto individuale per ciascuna parte, che chiameremo condivisione segreta. In termini di correttezza e privacy diciamo che la funzione fornirà la stessa chiave pubblica a tutte le parti e una condivisione segreta diversa per ciascuna in modo tale che: (1) privacy: nessun dato di condivisione segreta viene divulgato tra le parti e (2) correttezza: la chiave pubblica è una funzione delle condivisioni segrete.

  • Firma: questo passaggio prevede una funzione di generazione della firma. L'input di ciascuna parte sarà la sua quota segreta, creata come output del passaggio precedente (generazione di chiavi distribuite). Esiste anche un input pubblico noto a tutti, ovvero il messaggio da firmare. L'output sarà una firma digitale e la proprietà della privacy garantisce che durante il calcolo non si sia verificata alcuna fuga di condivisioni segrete.

  • Verifica: l'algoritmo di verifica rimane quello dell'impostazione classica. Per essere compatibili con le firme a 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 di convalida blockchain.

Schema di firma a soglia (TSS) è il nome che diamo a questa composizione di generazione di chiavi distribuite (DKG) e firma distribuita di uno schema di firma a soglia.


Combinazione di TSS con blockchain

Il modo naturale in cui TSS può essere utilizzato in una blockchain è modificando un client blockchain per generare chiavi e firme utilizzando TSS. Qui usiamo il termine client blockchain per riferirci all'insieme di comandi eseguiti da un nodo completo. In pratica, la tecnologia TSS ci consente di sostituire tutti i comandi relativi alla chiave privata con calcoli distribuiti.

Per spiegarlo più nel dettaglio, iniziamo descrivendo brevemente come vengono creati i nuovi indirizzi sul design classico della blockchain.  In poche parole, possiamo creare un nuovo indirizzo generando una chiave privata e quindi calcolando la chiave pubblica dalla chiave privata. Infine, l’indirizzo blockchain deriva dalla chiave pubblica.

Ora, utilizzando TSS, avremmo un insieme di n parti che calcolano congiuntamente la chiave pubblica, ciascuna con una quota segreta della chiave privata (le singole parti non vengono rivelate alle altre parti). Dalla chiave pubblica possiamo derivare l’indirizzo come nel sistema tradizionale, rendendo la blockchain indipendente dal modo in cui viene generato l’indirizzo. Il vantaggio è che la chiave privata non rappresenta più un singolo punto di guasto perché ciascuna parte ne detiene solo una parte. 

Lo stesso può essere fatto quando si firmano le transazioni. In questo caso, invece di una singola parte che firma con la propria chiave privata, eseguiamo una generazione di firma distribuita tra più parti. Quindi ciascuna parte può produrre una firma valida purché un numero sufficiente di loro agisca onestamente. Ancora una volta siamo passati dal calcolo locale (single point of Failure) a quello interattivo.

È importante ricordare che la generazione di chiavi distribuite può essere eseguita in modo da consentire diversi tipi di strutture di accesso: l'impostazione generale "t su n" sarà in grado di resistere fino a t guasti arbitrari nelle operazioni relative alla chiave privata, senza compromettere la sicurezza.


TSS contro Multisig

Alcune blockchain offrono funzionalità TSS come parte integrata o programmabile del software. Chiamiamo questa funzionalità multisig o multi-firma. Per comprendere meglio le differenze, possiamo considerare il multisig come un TSS nel livello applicativo della blockchain.

In altre parole, sia il multisig che il TSS stanno essenzialmente cercando di raggiungere obiettivi simili, ma TSS utilizza la crittografia off-chain, mentre il multisig avviene on-chain. Tuttavia, la blockchain ha bisogno di un modo per codificare il multisig, il che potrebbe danneggiare la privacy perché la struttura di accesso (numero di firmatari) è esposta sulla blockchain. Il costo di una transazione multisig è più alto perché anche le informazioni sui diversi firmatari devono essere comunicate sulla blockchain.

In TSS, i dettagli dei firmatari vengono inseriti in una transazione dall’aspetto regolare, riducendo i costi e mantenendo la privacy. D'altro canto, il multisig può essere non interattivo, il che evita il problema di gestire un livello di comunicazione complesso tra i diversi firmatari.

La principale differenza è che il multisig è specifico della blockchain e deve essere reimplementato per ogni blockchain e, in alcuni casi, non è affatto supportato. Al contrario, TSS si basa sulla crittografia pura, quindi il supporto è sempre possibile. Un ottimo articolo con illustrazioni sulle differenze può essere trovato qui.


Schema di condivisione segreta di TSS contro Shamir

Lo schema di condivisione segreta di Shamir (SSSS) fornisce un modo per archiviare la chiave privata in modo distribuito in modo tale che, mentre è inattiva, venga archiviata in più posizioni. Esistono due differenze tra SSSS e TSS:

  • Generazione della chiave: in SSSS, esiste un unico soggetto chiamato “il dealer” che è responsabile della generazione delle condivisioni segrete della chiave privata. Ciò significa che al momento della generazione della chiave, la chiave privata viene generata in un'unica posizione e quindi distribuita dal rivenditore alle diverse posizioni. In TSS non esiste un dealer poiché il suo ruolo è distribuito in modo tale che la chiave privata completa non si trovi mai in un'unica posizione.

  • Firma: in SSSS, le parti devono ricostruire l'intera chiave privata per poter firmare, il che si traduce nuovamente in un singolo punto di fallimento ogni volta che è necessaria una firma. In TSS la firma avviene in modo distribuito senza mai ricostruire le condivisioni segrete.

Come possiamo vedere, in TSS la chiave privata (che rappresenta la sicurezza del sistema) non si trova mai in un unico posto per tutta la sua vita.


Portafogli soglia

Un portafoglio basato sulla tecnologia TSS è leggermente diverso dai tradizionali portafogli di criptovaluta. In genere, un portafoglio convenzionale genera una frase seme e la utilizza per derivare deterministicamente gli indirizzi. L'utente può successivamente utilizzare questa struttura gerarchica deterministica (HD) per 1) raggiungere le chiavi private che corrispondono agli indirizzi del portafoglio e firmare transazioni con esse e 2) recuperare tutte le chiavi del portafoglio utilizzando la frase seed.

In un portafoglio a soglia, le cose sono più complesse. Sebbene sia possibile generare una struttura HD, la sua generazione deve essere calcolata in modo distribuito, come un altro protocollo MPC. Le parti devono decidere congiuntamente quale sarà la prossima chiave da utilizzare. In altre parole, ciascuna parte avrà una propria frase seme. Le frasi seed vengono generate separatamente e mai combinate in modo che una parte da sola non possa ricavare le chiavi private dal proprio seed.

I portafogli basati su TSS hanno anche una bella funzionalità di sicurezza, che consente la rotazione della chiave privata senza modificare la chiave pubblica e l'indirizzo blockchain corrispondenti. La rotazione delle chiavi private, nota anche come condivisione segreta proattiva, è ancora un altro protocollo MPC che accetta le condivisioni segrete come input e restituisce un nuovo set di condivisioni segrete. Le vecchie condivisioni segrete possono essere cancellate e quelle nuove possono essere utilizzate allo stesso modo.

Una struttura di questo tipo aggiunge una dimensione temporale alla sicurezza, il che significa che un utente malintenzionato deve trovarsi in più luoghi contemporaneamente per attaccare un portafoglio con soglia. La combinazione di condivisioni segrete prima e dopo la rotazione non darà all’attaccante alcun potere extra se vuole falsificare una firma. 

Uno svantaggio di questo tipo di portafoglio è che la mancanza di una frase seed lo rende incompatibile con i sistemi di portafoglio a chiave singola. Quindi è importante considerare quali parti deterranno le azioni segrete.

Esistono alcune architetture possibili:

  • Outsourcing TSS: l'utente lascerà che “n” server eseguano il calcolo per suo conto. Esternalizzare in modo efficace la generazione, la gestione e la firma delle chiavi a fornitori di servizi che non sono i proprietari delle risorse ma forniscono un livello di sicurezza in cambio di qualche incentivo.

  • Utilizzo di più dispositivi: l'utente eseguirà il TSS tra i dispositivi di sua proprietà. Ad esempio, una parte sarà un dispositivo IoT, un'altra parte sarà il dispositivo mobile dell'utente, un'altra parte sarà il suo laptop e così via.

  • Ibrido: TSS verrà eseguito in modo tale che alcune parti siano controllate da fornitori di servizi esterni e alcune parti vengano eseguite su dispositivi di proprietà dell'utente.

Il primo metodo scarica il pesante calcolo TSS dal lato client dell'utente. D’altro canto, i fornitori di servizi possono colludere (presumiamo che un numero sufficiente di loro non venga attaccato contemporaneamente, ma in pratica potrebbe farlo) e rubare le risorse dell’utente.

Il secondo metodo offre all’utente il pieno controllo ma rende complicato condurre le transazioni poiché sono necessari più dispositivi per andare online e impegnarsi con il calcolo TSS.

La terza opzione è considerata la migliore dei due mondi in quanto offre all'utente un modo semplice e veloce per condurre transazioni, ma senza compromettere l'esecuzione delle transazioni senza l'autorizzazione dell'utente.


TSS e contratti intelligenti 

Nel corso degli anni, i ricercatori hanno scoperto molti usi per le firme digitali e alcuni sono sorprendentemente non banali. Come accennato, TSS è una primitiva crittografica che può aumentare notevolmente la sicurezza. Nel contesto delle blockchain, possiamo dire che molte funzionalità possono essere sostituite con la crittografia basata su TSS. Applicazioni decentralizzate, soluzioni di scalabilità di livello 2, scambi atomici, miscelazione, ereditarietà e molto altro possono essere costruite su un framework TSS. Ciò consentirebbe alla fine di sostituire le costose e rischiose operazioni di contratto intelligente on-chain con alternative più economiche e affidabili.

Per fornire alcuni esempi concreti: Multi-Hop Locks utilizza le firme di due parti in modo intelligente e può essere utilizzato come alternativa alla rete Lightning Bitcoin con una rete di canali di pagamento più sicura e privata. ShareLock è probabilmente la soluzione di mixaggio on-chain più economica per Ethereum, basata sulla verifica di una firma a soglia singola.


Rischi

Negli ultimi due anni si è verificato un aumento significativo delle implementazioni TSS. Tuttavia, essendo una tecnologia relativamente nuova, presenta ancora alcune limitazioni e preoccupazioni. Rispetto alla classica crittografia a chiave pubblica, i protocolli TSS possono essere molto complessi e devono ancora essere “testati sul campo”. Di solito, il TSS richiede presupposti crittografici aggiuntivi, più deboli rispetto alle semplici firme digitali. Di conseguenza, ora vengono scoperti vettori di attacchi crittografici che non esistevano nelle configurazioni tradizionali (vedi questa presentazione della Breaking Bitcoin Conference 2019). Gli ingegneri della sicurezza e i crittografi applicati possono aiutarti a implementare in modo sicuro TSS nel tuo sistema.

L’aspetto positivo è che le implementazioni nuove e esistenti stanno diventando più forti grazie a un aumento dei contributi di qualità, delle revisioni tra pari, degli audit e dei miglioramenti delle prestazioni algoritmiche.


Pensieri conclusivi

In questo articolo, abbiamo introdotto le basi del Threshold Signature Scheme (TSS), un'affascinante primitiva crittografica che ha il potenziale per cambiare in modo significativo il modo in cui utilizziamo la blockchain.

Poiché questo articolo non tratta la soglia ECDSA che può essere utilizzata in Binance Chain e Bitcoin, gli interessati possono fare riferimento al seguente elenco di documenti recenti. Inoltre, se vuoi giocare con alcune implementazioni TSS puoi trovare un codice per il portafoglio Binance Chain a due parti qui o provare il portafoglio ZenGo, che utilizza il metodo ibrido per fornire un portafoglio Binance Chain a due parti non custodito.


Ulteriori letture:

  • Firma ECDSA bipartita rapida e sicura

  • ECDSA multipartitico rapido e sicuro con pratica generazione di chiavi distribuite e applicazioni per la custodia delle criptovalute

  • ECDSA a due parti da Hash Proof Systems e Efficient Instanziations

  • ECDSA con soglia multiparty rapida con configurazione Trustless rapida

  • Soglia ECDSA sicura a due parti dalle ipotesi ECDSA

  • Soglia ECDSA dalle ipotesi ECDSA: il caso multipartitico