I servizi di computazione distribuita per le operazioni sensibili che richiedono l’input di più parti per essere validate si stanno diffondendo sempre di più, anche attraverso l’istituzione di nuove startup che si dedicano a queste innovazioni. Tra queste computazioni distribuite troviamo in primis il multi-party computation, che renderà le applicazioni su blockchain, come le cripto valute, ancora più distribuite e, dunque, ancora più sicure. Vediamo perché.
Come funzionano le transazioni nel Bitcoin
La bellezza della blockchain sta nel fatto che sia possibile scambiare su Internet delle informazioni in maniera concisa e pubblica. Tutte le informazioni inerenti ad una certa transazione sono permanenti e localizzate in un unico “luogo”, ovvero in un unico blocco della blockchain stessa. Una volta che una tale transazione viene messa nella blockchain, questa, grazie alla crittografia, risulta essere poi irreversibile, ovvero non c’è modo di negare che la suddetta transazione sia avvenuta.
Questo vale anche per le cripto valute e, in particolare, per il Bitcoin, dove le transazioni sono prettamente di tipo pecuniario. Le transazioni vengono validate da chi le esegue attraverso una procedura di firma digitale, che autentica la transazione stessa. Per firma digitale si intende quella primitiva crittografica che permette al firmatario di usare la sua chiave segreta per computare una stringa (detta, appunto, firma) associata alla transazione stessa. Tale firma garantisce autenticità, integrità e impedisce che il firmatario ripudi di aver firmato quella data transazione. In questo senso, la firma è irreversibile. Ciò significa anche che dei soldi rubati e transati non potranno poi essere ritornati ed è per questo che le cripto valute sono così attrattive per i cyber criminali.
Come nella vita di tutti i giorni, bisogna dunque fare molta attenzione a dove si appone la propria firma. Nel contesto della crittografia e, dunque della blockchain e delle cripto valute, questo significa di prestare molta attenzione a come e dove viene protetta la chiave privata che si utilizza per validare una transazione.
Che cosa è un wallet deterministico
Dato che per ogni transazione serve una chiave privata che la validi e quindi un posto sicuro dove stoccarla, quello che succede per il Bitcoin e altre simili cripto valute è che tali chiavi private vengono generate deterministicamente. Si parte da un seed segreto e da quest’ultimo vengono generate in maniera deterministica le chiavi private usate per firmare le transazioni e, dunque, ottenere un portafoglio (wallet) di Bitcoin. La generazione delle chiavi si dice deterministica perché gli algoritmi usati sono tali che per lo stesso seed in input vengono date come output le stesse chiavi private. Si parla dunque di “deterministic wallet”. Tra i protocolli per la generazione di chiavi private per Bitcoin più usati troviamo BIP 32 e BIP 44.
È chiaro dunque che il problema di proteggere la chiave privata che valida una transazione si riduce al problema di proteggere il seed segreto che l’ha generata. Inoltre, l’accesso o la perdita di tale seed segreto significa compromettere l’intero wallet deterministico generato dalle chiavi private figlie del seed stesso.
Multi-party computation e protezione del wallet
Come salvaguardare il seed segreto e, di riflesso, il wallet? È proprio il multi-party computation a darci una via d’uscita. In questo framework, il seed segreto iniziale non si deve mai trovare salvato in un unico device. Ciò non significa che più copie dello stesso seed debbano essere messe in più device, perché l’accesso a uno di questi device darebbe comunque la possibilità di ottenere il controllo sull’intero wallet. Invece, quello che il paradigma del multi-party computation impone è che il seed segreto venga frammentato in modo tale che da nessun frammento ci si possa ricondurre al seed stesso. Servono tutti quanti i frammenti generati per poter generare le chiavi private a dunque l’accesso a ciascuno dei dispositivi su cui tali frammenti sono stati stoccati. Ecco dunque spiegato perché si parla di “multi-party”, perché più parti sono coinvolte nella protezione del seed segreto.
L’avere i frammenti non è però sufficiente. Bisogna infatti riuscire a ricreare, a partire dai frammenti stessi, lo stesso wallet che si crea, attraverso BIP 32 e BIP 44, a partire dal seed segreto. In altre parole, serve riconciliare in maniera sensata tali frammenti in modo da poter generare le stesse chiavi private che il seed segreto avrebbe generato. Entra in gioco dunque il secondo fattore del multi-party computation, ovvero la parte relativa al “computing”.
I protocolli di multi-party computation prevedono che i dispositivi su cui vengono salvati i frammenti del seed segreto siano anche dotati di una certa potenza di calcolo. Infatti quello che succede è che che gli algoritmi BIP 32 e BIP 44 vengono effettuati su ogni singolo frammento in maniera indipendente da ogni singolo device. In pratica, attraverso BIP 32 e BIP 44, si generano, a partire dai frammenti, delle chiavi private figlie che altro non sono che i corrispettivi frammenti delle chiavi pubbliche che sarebbero dovuti essere generati dal seed segreto. In pratica, da dei frammenti di seed si ottengono i frammenti delle corrispondenti chiavi private. Dunque per ogni chiave privata figlia del seed si generano tanti frammenti quanti erano i frammenti del seed segreto iniziale. Infine, è possibile validare una transazione perché il protocollo di firma digitale viene integrato sempre in maniera distribuita (ovvero in maniera multi-party) all’interno degli algoritmi BIP 32 e BIP 44 di derivazione di chiavi.
Ecco che dunque che con il multi-party computation è possibile smembrare gli algoritmi deterministici di derivazione delle chiavi (BIP 32 e BIP 44) e di firma digitale su più device indipendenti agenti su frammenti del seed segreto iniziale in modo che a validare una transazione ci siano più di un ente. Essendo tale operazione di firma distribuita si evita lo scenario del single-point-of-failure, garantendo in ultima analisi più robustezza e sicurezza.
Gli impatti sul mondo dell’industria
Adesso che abbiamo chiarito in che modo il multi-party computaion aumenta la sicurezza dei wallet e delle cripto valute, cerchiamo di capire come mai si parla proprio ora di multi-party computation. Questa primitiva crittografica non è infatti un’idea per nulla recente. Introdotta da Yao nel 1986 per il two-party computation (ovvero per il caso specifico in cui le parti in gioco siano soltanto due) e poi generalizzato da Goldreich, Michali e Widgerson per ogni numero di partecipanti subito dopo, il multi-party computation è rimasta per più di tre decenni un ambito della crittografia puramente teorico e relegato allo studio accademico. Basti pensare al Dilemma dei due milionari, l’esempio di two-party computation con cui lo stesso Yao ha spiegato per la prima volta l’utilizzo del multi-party computation nel suo articolo. Il Dilemma diceva infatti che questa tecnica avrebbe risolto la situazione in cui due milionari volevano capire chi dei due fosse il più ricco senza però rivelare all’altro il montante effettivo nei propri conti in banca.
Una grande spinta all’entrata del multi-party computation (e del distributed computing in generale) nel mondo dell’industria l’ha data certamente l’emergere dei paradigmi di computazione distribuiti quali la blockchain, da una parte, e, più in generale, lo sviluppo tecnologico dei dispositivi ed apparecchi elettronici di uso quotidiano. Finalmente, infatti, ci si è potuti confrontare davvero con piccoli dispositivi dotati di potere computazionale (smart watch, lavatrici, smartphone). Trend come l’IoT hanno reso possibile di pensare a use-case quotidiani in cui dispositivi remoti in comunicazione tra di loro prendano parte al computo di alcuni algoritmi al fine di dare all’utente un servizio IoT attraverso, ad esempio, un’applicazione scaricata sullo smartphone.
Nel caso più specifico del multi-party computation applicato alle cripto valute e, in particolare, come detto sopra, al Bitcoin, tale sviluppo tecnologico ha reso effettivamente possibile il fatto di poter frammentare il seed segreto con cui creare una firma digitale su più dispositivi appartenenti ad un utente e di poterli poi fare lavorare in sincronia in modo da poter così validare da più punti un’unica transazione.
Conclusione
Il potere computazionale degli smart device e la interconnessione hanno permesso la realizzazione pratica di protocolli di multi-party computation che, tra le varie applicazioni possibili, permettono di validare le transazioni su blockchain in maniera distribuita e privata, aumentandone la sicurezza. Promotori della fuoriuscita del multi-party computation dal mondo prettamente accademico sono i crittografi stessi con la fondazione di spin-off universitari che commercializzano tale soluzione.