Blockchain e voto elettronico: un passo avanti

Cristiano Paris
7 min readOct 25, 2017

--

EDIT: Questo articolo ha un seguito.

Di recente sono stato coinvolto in una discussione sulla fattibilità di uno schema di voto elettronico non-tracciabile basato su Blockchain.

La discussione si è ben presto polarizzata tra due fazioni contrapposte. Ma, in entrambe, ho notato una certa “ignoranza” su come le Blockchain funzionino realmente e sulla loro applicabilità in questo contesto specifico. Ho quindi deciso di scrivere questo articolo per provare a fare un po’ di chiarezza.

Tutto nasce dal recente referendum in Lombardia, nel quale, per la prima volta in Italia, il voto è stato espresso attraverso sistemi elettronici (tablet) collocati all’interno delle cabine di voto. In molti hanno messo in dubbio l’affidabilità di questo meccanismo, invocando scenari come il complotto, l’intrusione di malintenzionati ecc.

Ora, sebbene il tema generale del voto elettronico sia estremamente complesso, possiamo provare ad indagarne uno specifico aspetto, ovvero quello dell’eliminazione della terza parte fidata per il coordinamento delle operazioni — uno degli scenari di complotto.

In questo caso, il voto elettronico assomiglia molto a una moneta elettronica: il problema del double spending è infatti del tutto analogo a quello del double voting. Tuttavia, per il primo, esiste già una soluzione che non richiede la presenza di una terza parte fidata, le cosidette cryptomonete.

Si potrebbe pensare di riutilizzare la tecnologia della cryptomoneta di maggior successo — Bitcoin — per risolvere il problema del voto elettronico decentralizzato. E si potrebbe addirittura ipotizzare che il voto elettronico non sia niente di più di uno smart contract, implementabile sulla Blockchain di Ethereum, la seconda cryptomoneta per capitalizzazione.

Rispetto a Bitcoin ed Ethereum esiste però una rilevante differenza nel voto elettronico: queste due cryptomonete basano il proprio funzionamento sulla completa tracciabilità delle transazioni per rilevare i tentativi di frode (i.e. il double spending).

Tale caratteristica è infatti palesemente in conflitto con il requisito di non-tracciabilità del voto anonimo.

In altre parole:

  • il voto deve essere autenticabile, i.e. solo le persone autorizzate possono votare;
  • una persona autorizzata non può votare due volte (double voting);
  • il voto non deve essere collegabile alla persona che lo ha espresso.

In Bitcoin ed Ethereum è possibile implementare le prime due proprietà, ma non la terza. In pratica, si può solo implementare un meccanismo di voto palese.

Da una certo punto di vista possiamo pensare che Bitcoin ed Ethereum implementino uno schema simile a quello di una carta di credito (in cui le transazioni sono totalmente tracciabili), mentre a noi ne interessa uno simile al contante (non tracciabile).

Fortunatamente esistono tipologie di Blockchain che implementano proprio uno schema di contante. Nello specifico, Monero utilizza una Blockchain che può essere impiegata a questo scopo.

La differenze sostanziali tra Monero e Bitcoin sono due:

  • in Bitcoin è possibile trasferire qualsiasi quantitativo di moneta mentre in Monero i quantitativi trasferibili sono discreti e fissi (token), esattamente come le banconote in un portafogli;
  • in Monero una transazione contiene sempre più token provenienti da wallet diversi e i token trasferiti sono tutti uguali.

In Monero si realizza quindi un schema di mixing, in cui diverse transazioni, tutte rigorosamente identiche nell’importo, vengono miscelate tra loro per far perdere il tracciamento tra wallet sorgente e destinazione:

Un classico schema di mixing

A sinistra vediamo tre transazioni distinte tra loro, mentre a destra le stesse tre transazioni sono state “miscelate” per formare un’unica transazione. Per un osservatore esterno sarà impossibile collegare l’ingresso wi all’uscita wj della specifica transazione originale.

Notate che se i token avessero avuto colori differenti, la tracciabilità sarebbe stata mantenuta. Per questo motivo è indispensabile miscelare transazioni che abbiano tutte le stesso importo: in Monero questo requisito è più facile da rispettare perché i quantitativi trasferibili sono discreti e fissi e quindi è più probabile trovare transazioni analoghe che in Bitcoin, dove i quantitativi sono del tutto arbitrari.

In realtà, nel mondo Bitcoin i mixer non sono una novità. Su Internet e, soprattutto nella Darknet, è possibile rintracciare servizi di mixing che consentono di miscelare transazioni Bitcoin facendo perdere la tracciabilità delle singole operazioni. In Bitcoin però il mixer è una terza parte di cui dobbiamo fidarci: essa infatti conosce le transazioni originali e potrebbe essere in grado di ricostruire l’intero tracciamento — ed è per questo che chi vuole “ripulire” Bitcoin utilizza diversi sistemi di mixer in cascata, un po’ come si fa con i proxy.

Monero invece può fare a meno di fidarsi del mixer perché è il mittente che miscela le transazioni.

Per trasferire x token, la procedura seguita è semplice:

  • si scelgono a caso N>1 wallet che contengono esattamente x token;
  • si crea quindi una transazione che contiene gli N token in ingresso, trasferendone però soltanto x (invece di N·x).

Lo schema diventa quindi il seguente:

Lo schema di mixing Monero: a chi appartiene il token trasferito?

Il wallet w1, contrassegnato in rosso, è di proprietà del creatore della transazione ma per un osservatore esterno questo non sarà identificabile perché confuso con gli altri due nel trasferimento del token.

A questo punto, manca un ultimo elemento: la firma che rende autentica e legittima la transazione. Tuttavia, se il creatore della transazione apponesse realmente la propria firma, il wallet di sua proprietà sarebbe immediatamente identificabile.

Monero risolve questo problema con le cosidette firme di anello (ring signatures).

Mentre in uno schema di firma classico, il verificatore V controlla che la firma F corrisponda alla chiave pubblica P:

nelle firme di anello la relazione diventa:

Il verificatore V saprà che F appartiene a una delle chiavi pubbliche a destra, ma non saprà indicare esattamente a quale di esse.

Quindi, in Monero, la transazione viene firmata con una firma di anello. Colui che verificherà la transazione potrà controllare che, in effetti, uno dei proprietari dei wallet in input ha effettivamente firmato la transazione, ma non saprà indicare esattamente quale.

In questo modo però non è del tutto evitato il rischio di double spending, perché il creatore della transazione potrebbe replicare N volte questa stessa transazione, appropriandosi de facto dei token in input.

Monero supera questo ostacolo utilizzando una variante delle firme di anello che consentono di firmare una sola volta da ogni wallet. Questo fa si che i wallet non possano essere riutilizzati, una misura che è peraltro incoraggiata anche in Bitcoin.

A questo punto siamo pronti a implementare il nostro schema di voto elettronico non tracciabile.

Per semplicità supponiamo che il voto sia binario, ovvero che si possa scegliere tra due sole opzioni, A o B (ad es. in referendum, “favorevole” o “contrario”).

  • il votante crea due token nel proprio wallet, uno per A e l’altro per B — transazione analoga al reward del mining;
  • il votante crea poi un terzo token, Δ;
  • per esprimere il proprio voto, il votante crea una transazione miscelata in cui un token a scelta tra A e B, unitamente al token Δ, sono trasferiti a un wallet predefinito W che funge, in pratica, da urna.
  • a votazione conclusa, sarà sufficiente contare quanti token A e quanti token B sono presenti nel wallet W per conoscere l’esito della votazione.

Per funzionare lo schema ha bisogno che ciascun votante crei token A, B e Δ identici tra tutti i votanti. Ad es. chi apre la votazione, può dichiarare quali debbano essere tali token (nella pratica essi saranno delle semplici stringhe casuali univoche).

Questo schema ha le seguenti proprietà:

  • il votante non è rintracciabile perché si effettua il mixing delle transazioni di voto in stile Monero;
  • il votante (identificato dalla chiave pubblica) può votare una sola volta perché la Blockchain gli consentirà di creare i tre token A, B e Δ una sola volta; qualsiasi ulteriore transazione di creazione per gli stessi token sarebbe infatti ritenuta non valida dai miner;
  • il votante non può votare entrambe le opzioni perché ha a disposizione un solo token Δ.

Se non si fissa a priori la lista dei votanti, questo schema è tuttavia soggetto a Sybil attack . E’ quindi necessario compilare una lista delle persone ammesse al voto elencandone le rispettive chiavi pubbliche, che saranno le sole effettivamente conteggiate in fase di spoglio.

Questo schema ci fa comprendere come la tecnologia introdotta per la prima volta da Bitcoin — la Blockchain — vada ben oltre le applicazioni di cryptomoneta, rappresentando un’innovazione rilevante nel panorama tecnologico recente.

Nello specifico caso del voto elettronico, è ovvio che essa non è però sufficiente. Sebbene infatti prevenga uno degli scenari di complotto, quello dell’intromissione di malintenzionati e di conseguente compromissione del software di voto rimane un problema aperto.

Allo stato, quindi, il voto elettronico è ancora da considerarsi non affidabile, almeno nella sua accezione più ampia. Esistono tuttavia scenari più ristretti in cui lo schema descritto potrebbe essere utile e applicabile.

--

--

Cristiano Paris

Senior Cyber Security Expert at the European Central Bank