Autore: Omer Shlomovits, ZenGo.

Threshold Signing Scheme (TSS) è uno schema crittografico primitivo per generare e firmare chiavi distribuite. L’utilizzo del TSS nei calcoli blockchain è un nuovo paradigma che può offrire molti vantaggi diversi soprattutto in termini di sicurezza. Cioè, il TSS può influenzare la progettazione dei sistemi di gestione delle chiavi (come i portafogli digitali) e aprire la strada al supporto locale nei casi d’uso della DeFi. Detto questo, il TSS è ancora una nuova tecnologia, quindi è necessario considerare anche i rischi e le limitazioni quando la si utilizza.

In questo articolo tratteremo cos'è TSS, quali potenziali vantaggi può apportare al campo blockchain, come può essere implementato nella blockchain del Cliente, come si confronta con la condivisione segreta di Shamir e Multisig, quali sono i diversi modi di utilizzare TSS. nella gestione delle chiavi distribuite e infine ne discutiamo i potenziali rischi e limiti.

Ruolo della crittografia

Per comprendere il TSS abbiamo prima bisogno di alcune conoscenze di base sulla crittografia. A partire dagli anni ’70, i sistemi Internet hanno utilizzato sempre più la crittografia asimmetrica (come TLS e PGP), 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 condivisa e utilizzata da chiunque, la chiave privata è un'informazione riservata che rappresenta la sicurezza del sistema e non può essere condivisa.

La crittografia e le firme digitali sono gli usi più comuni di PKC. Sia gli schemi di crittografia che quelli di firma digitale si basano su gruppi di tre algoritmi. La prima è la generazione della coppia di chiavi privata e pubblica, la seconda è la generazione del testo cifrato/firma e la terza è il processo di decrittazione/verifica. Per quanto riguarda le firme digitali: l'algoritmo di firma richiede che una chiave privata nota solo al suo proprietario crei una firma univoca. Una firma è allegata a un particolare messaggio in modo tale che chiunque detenga la chiave pubblica possa verificarne l'autenticità e l'autenticità.


Blockchain

Non c’è dubbio che la blockchain sia una tecnologia estremamente potente. Fornisce un livello di consenso che organizza e registra gli eventi. Tali infrastrutture offrono a noi utenti e persino ai governi il potere potenziale di costruire economie decentralizzate. Sorprendentemente, la crittografia necessaria per eseguire una semplice blockchain può basarsi solo sulle firme digitali. Nella blockchain, le chiavi private rappresentano le identità mentre le firme sono una dichiarazione pubblica o un'affermazione fatta da un'identità. La blockchain richiede e verifica i dati secondo una serie di regole che, tra molte altre cose, garantiscono che le firme siano indimenticabili e valide.

Gli strumenti di crittografia moderna includono alcuni fantastici trucchi magici a differenza della crittografia più classica utilizzata nella blockchain. Alcuni esempi di questi trucchi includono prove a conoscenza zero, crittografia omomorfica e calcolo multipartitico. Come abbiamo visto negli ultimi dieci anni, la ricerca sulla blockchain ha dato un notevole impulso alla crittografia applicata con sorprendenti recenti progressi nella conoscenza in tutto quanto sopra e molto altro ancora. 

In questo articolo, ci concentreremo su una delle scoperte più importanti, ovvero le firme a soglia sicura (TSS) efficaci.


MPC e lo schema di firma della soglia (TSS)

Il calcolo multipartito (MPC) è una branca della crittografia iniziata con il lavoro fondamentale di Andrew C. Yao quasi 40 anni fa. In MPC un gruppo di parti che non si fidano l'una dell'altra tenta di calcolare una funzione sui propri input mantenendo tali input privati. 

Ad esempio, supponiamo che un certo numero di dipendenti dell'azienda vogliano sapere chi viene pagato di più, ma senza rivelare reciprocamente il proprio stipendio effettivo. Qui l'input speciale è lo stipendio e gli imbarazzi saranno il nome del dipendente con lo stipendio più alto. Quando questo calcolo viene eseguito utilizzando MPC, il risultato è che durante il calcolo non viene trapelato nemmeno un singolo stipendio. 

Le due caratteristiche principali di MPC sono autenticità e privacy:

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

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

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

  • Generazione delle chiavi: il primo passo è anche il più complicato. Dobbiamo creare una chiave che sarà pubblica e utilizzata per verificare le firme future. Ma dobbiamo anche creare un segreto individuale per ciascuna parte partecipante che chiameremo condivisione segreta. Nel contesto della correttezza e della privacy diciamo che la funzione produrrà la stessa chiave pubblica per tutte le parti e una condivisione segreta diversa per entrambi i seguenti: (1) Privacy: nessun dato sulla condivisione segreta viene divulgato tra le due parti e ( 2) Correttezza: La chiave pubblica è una funzione delle condivisioni segrete.

  • Firma: questo passaggio include la funzione di creazione di una firma. Il contributo di ciascuna parte è la propria quota segreta, che viene generata come output del passaggio precedente (generazione di chiavi distribuite). Esiste anche un input generale noto a tutti che è il messaggio da firmare. L'output sarà una firma digitale e la funzionalità di privacy garantisce che durante il calcolo non si verifichi alcuna fuga di condivisioni segrete.

  • Verifica: l'algoritmo di verifica rimane lo stesso delle impostazioni classiche. Per essere compatibili con le firme delle chiavi individuali, chiunque sia a conoscenza della chiave pubblica deve essere in grado di verificare e autenticare le firme. Questo è esattamente ciò che fanno i nodi di verifica blockchain.

Lo schema di firma a soglia (TSS) è il nome che diamo alla combinazione di generazione di chiavi distribuite (DKG) e distribuzione della firma su uno schema di firma a soglia.


Combinazione di TSS e blockchain

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

Per spiegarlo più nel dettaglio inizieremo con una breve descrizione di come creare nuovi indirizzi su una struttura blockchain classica.  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 avremo un gruppo di parti che calcoleranno congiuntamente la chiave pubblica. Ciascuna parte partecipante detiene una parte segreta della chiave privata (le singole parti non vengono rivelate alle altre parti partecipanti). Utilizzando la chiave pubblica, possiamo ricavare l’indirizzo come nel sistema tradizionale, il che rende la blockchain in qualche modo neutrale nel modo in cui vengono generati gli indirizzi. Il vantaggio qui è che la chiave privata non è più un singolo punto di errore perché ciascuna parte ne conserva una parte. 

Lo stesso può essere fatto quando si firmano le transazioni. In questo caso, invece di firmare una parte con la propria chiave privata, eseguiamo un generatore di firma distribuito tra più parti. Anche ciascuna parte può produrre una firma valida purché un numero sufficiente di partecipanti agisca onestamente. Siamo passati nuovamente da un account locale (single point of Failure) a un account interattivo.

È importante notare che la generazione di chiavi distribuite può essere effettuata in modo da consentire diversi tipi di accesso alle stesse: una generica impostazione “t su n” sarà in grado di sopportare fino a t fallimenti arbitrari nelle operazioni relative alla chiave privata senza compromettere la sicurezza.


TSS contro Multisig

Alcune reti blockchain offrono funzionalità TSS come parte integrata o programmabile del software. Chiamiamo questa funzione multisig o multi-firma. Per comprendere meglio le differenze possiamo guardare al multisig come ad un TSS in fase di implementazione della blockchain.

In altre parole, sia multisig che TSS cercano sostanzialmente di raggiungere obiettivi simili, ma TSS utilizza la crittografia off-chain mentre multisig utilizza la crittografia on-chain. Tuttavia, la blockchain richiede un metodo per la crittografia multisig, che potrebbe compromettere la privacy poiché la struttura di accesso (numero di firmatari) è esposta sulla blockchain. Il costo di una transazione multisig è più alto perché anche le informazioni sui due siti diversi devono essere comunicate sulla blockchain.

In TSS, i dettagli dei firmatari vengono inseriti in una transazione regolare, che riduce i costi e preserva la privacy. Multisig, d'altro canto, può essere non interattivo, evitando il problema di gestire un livello di comunicazione complesso tra siti diversi.

La differenza principale è che il multisig blockchain deve essere reimplementato su ciascuna blockchain e in alcuni casi non è affatto supportato. Al contrario, TSS si basa sulla pura crittografia, quindi è sempre supportabile. Un ottimo articolo che illustra le differenze può essere trovato qui.


Schema di condivisione segreta di TSS contro Shamir

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

  • Generazione della chiave: in SSSS esiste una parte chiamata “il dealer” che è responsabile della creazione delle condivisioni segrete della chiave. Ciò significa che al momento della generazione della chiave, la chiave privata viene generata in un unico luogo e poi distribuita dal distributore nelle diverse località. Ma in TSS non esiste un distributore perché il suo ruolo è distribuito in modo tale che la chiave privata completa non si trova mai nello stesso posto.

  • Firma: in SSSS le parti devono ricostruire l'intera chiave privata per poter firmare, il che porta nuovamente a un singolo punto di errore ogni volta che è richiesta una firma. D'altra parte in TSS la firma viene eseguita in modo distribuito senza ricreare le condivisioni segrete.

Come vediamo in TSS, la chiave privata (che rappresenta la sicurezza del sistema) non è mai nello stesso posto per tutta la sua vita.


Governatore della soglia

Un portafoglio basato sulla tecnologia TSS è leggermente diverso dai tradizionali portafogli di criptovaluta. Un portafoglio tradizionale in genere crea una frase seme e la utilizza per derivare gli indirizzi in modo deterministico. L'utente può successivamente utilizzare la struttura gerarchica deterministica (HD) per 1) accedere alle chiavi private che corrispondono agli indirizzi del portafoglio e firmare transazioni con esse. 2) Per recuperare tutte le chiavi del portafoglio utilizzando la frase seed.

Nei portafogli a soglia le cose sono più complicate. Sebbene sia possibile creare un'architettura gerarchica deterministica (HD), la sua costruzione deve essere calcolata in modo distribuito come un altro protocollo MPC. Le parti coinvolte devono prendere una decisione congiunta su quale chiave verrà utilizzata successivamente. In altre parole, ciascuna parte avrà la propria dichiarazione iniziale. Le istruzioni seed vengono generate separatamente e non sono combinate in modo che nessuna delle parti possa dedurre da sola le chiavi private dall'istruzione seed.

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

Questa architettura aggiunge una dimensione temporale alla sicurezza, il che significa che un utente malintenzionato dovrebbe trovarsi in più luoghi contemporaneamente per tentare un attacco al portafoglio Threshold. La combinazione di condivisioni segrete pre-rotazione e post-rotazione non darebbe a un utente malintenzionato alcun potere aggiuntivo se volesse falsificare una firma. 

Lo svantaggio di questo tipo di portafoglio è la mancanza di una frase seed che lo rende incompatibile con i sistemi di portafoglio a chiave singola. Pertanto, è importante decidere quali parti manterranno la condivisione riservata.

Ci sono alcuni modi possibili come:

  • TSS Outsourcing: L'utente consentirà a “n” server di eseguire il calcolo per suo conto. Esternalizzare in modo efficace la creazione, 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à TSS sui dispositivi di sua proprietà. Ad esempio, una parte sarebbe un dispositivo IoT, un'altra parte sarebbe un utente di telefono cellulare, un'altra terza parte sarebbe un laptop e così via.

  • Sistemi ibridi: il TSS sarà gestito in modo tale che alcune parti siano controllate da fornitori di servizi esterni mentre altre parti funzionino sul proprio hardware.

Il primo metodo scarica il pesante calcolo TSS sul lato client dell'utente. D’altro canto, i fornitori di servizi possono colludere (supponiamo che un gran numero di loro non siano sotto attacco contemporaneamente, ma in pratica possono essere attaccati contemporaneamente) e rubare le risorse degli utenti.

Il secondo metodo offre all'utente il controllo completo ma rende complicato il processo di esecuzione delle transazioni poiché sono necessari più dispositivi per connettersi a Internet e partecipare all'account TSS.

La terza opzione è la migliore di entrambe in quanto offre all'utente un modo semplice e veloce per effettuare transazioni senza il compromesso di effettuare transazioni senza il permesso dell'utente.


TSS e contratti intelligenti 

Nel corso degli anni, i ricercatori hanno scoperto molti usi per le firme digitali, ma alcuni non sono sorprendenti. Come accennato in precedenza, TSS è una crittografia primitiva che può aumentare la sicurezza in modo significativo. Nel contesto della blockchain potremmo dire che molte funzioni possono essere sostituite dalla crittografia basata su TSS. Sul framework TSS è possibile creare applicazioni decentralizzate, soluzioni Layer 2 per scalabilità, atomic swap, shuffling, ereditarietà e molto altro. Ciò consentirà alla fine di sostituire le costose e rischiose operazioni di contratto intelligente 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 per scambiare la rete Lightning di Bitcoin con una rete di canali di pagamento più sicura e privata. ShareLock è probabilmente la soluzione di codifica blockchain di Ethereum più economica basata sulla verifica utilizzando una firma a soglia singola.


Rischi

Negli ultimi due anni si è registrato un aumento significativo delle richieste di TSS. Ma come ogni tecnologia relativamente nuova presenta ancora alcune limitazioni e preoccupazioni. Rispetto alla crittografia tradizionale a chiave pubblica, i protocolli TSS possono essere molto complessi e non sono stati ancora “testati in azione”. Il TSS di solito richiede presupposti crittografici aggiuntivi e più deboli rispetto alle semplici firme digitali. Di conseguenza, ora vengono rilevati vettori di attacchi crittografici che prima non esistevano nei contesti tradizionali (vedi questa presentazione della Breaking Bitcoin Conference 2019). Gli ingegneri della sicurezza e i crittografi delle applicazioni possono aiutarti a implementare TSS in modo sicuro nel tuo sistema.

L’aspetto positivo è che le applicazioni nuove e esistenti stanno diventando più forti grazie a maggiori contributi di qualità, revisioni tra pari, controlli incrociati e miglioramenti delle prestazioni computazionali utilizzando algoritmi.


Considerazioni conclusive

In questo articolo introduciamo le basi del Threshold Signature Scheme (TSS), una straordinaria primitiva di crittografia che ha il potenziale per cambiare radicalmente il modo in cui viene utilizzata la blockchain.

Poiché questo articolo non tratta la soglia ECDSA che può essere utilizzata su Binance Chain e Bitcoin, le persone interessate possono leggere gli articoli nell'elenco seguente. Inoltre, se vuoi provare alcune implementazioni TSS, puoi trovare il codice per un portafoglio Binance Chain a 2 parti qui o provare il portafoglio ZenGo che utilizza il metodo ibrido per fornire un portafoglio Binance Chain a 2 parti.


Lettura approfondita:

  • 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