Come si sarebbe potuto gestire il referendum in Lombardia

Ho visto i dibattiti che il voto elettronico lombardo ha scatenato e, anche se in ritardo, vorrei dire la mia.

Ovviamente, vi porterò la mia visione da studente di Cloud Computing e lavoratore part-time in una startup che costruisce “le blockchain” a Stoccolma.


Prima la critica

Innanzitutto sono d’accordo sulla riflessione dell’open source: se bisogna affidarsi ad una scatola chiusa di cui non si sa il funzionamento, tanto vale finirla in dittatura.

Inoltre questo impedisce ai cittadini di verificare il corretto funzionamento della macchina elettiva (che ovviamente deve essere chiaro al popolo).

Mi ha sorpreso lo sperpero di soldi pubblici per acquistare i tablet necessari alla votazione (ce n’era davvero bisogno o serviva a fare guadagnare qualcuno?).

Detto questo, ammettendo che la società fornitrice del software abbia voluto fare tutto nella massima buona fede, stiamo inserendo un single point of failure nel sistema a livello di software, in poche parole: se il software developer commette un errore nessuno ha la possibilità di metterci una pezza.

A livello di database sono riusciti ad evitare questo problema mantenendo i voti su chiavetta (non penso i tablet fossero connessi ad internet e perciò i voti non replicati da nessuna parte) risultato: se si fosse smarrita una chiavetta, si sarebbero smarriti i voti (e se fosse successo? O sbaglio e c’era qualche sistema di backup?).


Poi la proposta

Con la blockchain (se non sai in cosa consiste, qui c’é una breve guida in italiano e in inglese) tutti questi problemi si sarebbero potuti evitare grazie ad un contratto neanche troppo complicato (ad esempio in Ethereum).

  1. Un contratto é pubblico, pertanto chiunque può analizzarlo e contribuire a migliorarlo (ovviamente prima delle elezioni)
  2. Si può assicurare che una persona voti una sola volta, banalmente registrando la public key con il codice fiscale, ad esempio questo può essere fatto dallo scrutinatore
  3. Si può assicurare che abbiano votato solo persone italiane e con diritto di voto: lo scrutinatore aggiunge la public key del votante in un whitelist array all’interno del contratto
  4. Si può mantenere l’anonimato dei votanti (quando si vota non si mappa il voto con la public key del votante ma si aggiunge il voto ‘all’array del partito’ e nella transazione con un metodo di ecrecovery)
  5. É possibile mantenere il segreto fino ad una certa deadline. Nel caso delle elezioni Italiane é possibile votare sabato e domenica ma eseguire il calcolo solamente alle 0.01 di lunedì, garantendo fino a quel momento l’imparzialità delle elezioni.

In tutta onestà quest’ultimo punto non é così immediato da implementare: bisognerebbe creare una chiave asimmetrica (la chiamerò MattarellaKey), poi dividere in parti (esempio 3) la private key e distribuirla. Un’ipotesi potrebbe essere il capo dello stato, presidente del consiglio e ministro della difesa.

Ogni voto che viene inserito nella blockchain deve essere quindi cryptato asimmetricamente con la publicMattarellaKey e altri dati (esempio il seggio, l’ora e lo scrutinatore ) in modo da creare valori differenti e garantire anche il dubbio in caso di schiaccianti maggioranze altrimenti percettibili dai record uniformi che verrebbero generati.

Allo scoccare della mezzanotte questi attori sono abilitati ad immettere la propria parte di privateMattarellaKey nel sistema e, quindi, posso dare via alla decodificazione di tutti i voti.

A questo punto la blockchain partorirà una classifica dei partiti o del referendum.

Ovviamente in caso di ‘brogli’ la blockchain garantirà il risultato corretto grazie al suo meccanismo di consenso distribuito.


Infine, l’autocritica

Mi rendo conto che questa implementazione è poco più di un abbozzo e ha qualche buco qua e là, ma sicuramente sarebbe un sistema più trasparente ed economico (non servirebbero più strani tablet con improbabili distribuzioni linux).

Spero vi siate divertiti a leggere questa teoria, nel caso vogliate condividerla, fatelo.

Se avete un’opinione differente o pensate che la mia idea sia sbagliata, fatemelo sapere, ve ne sarò grato!