L’esercizio del voto è uno dei pilastri fondanti di un processo democratico e partecipato ma dopo oltre vent’anni di informatizzazione di massa il voto digitale è ancora oggetto di dibattito acceso e in alcuni casi, come testimoniato da recenti fatti di cronaca, oggetto del contendere all’interno di importanti organizzazioni nazionali.
Come è successo in molti altri aspetti della nostra vita la pandemia e il distanziamento sociale hanno riacceso il dibattito dovendo rinnovare cariche di natura elettiva che non potevano essere prorogate indefinitamente ma i cui processi elettorali sarebbero risultati complicati durante il susseguirsi dei vari lockdown.
Democrazia digitale, l’Italia è pronta? La “lezione” dello scontro Rousseau-M5S
Nelle Università le cariche elettive sono numerose e in un Ateneo come l’Università di Pisa con molti studenti fuori sede, l’organizzazione di un seggio elettorale in presenza poneva problemi anche per assicurare l’effettiva partecipazione dell’elettorato attivo al voto. Quando mi è stato posto il problema di supportare il voto a distanza (il sistema in uso era già digitale ma da postazioni in presenza) ho colto l’occasione per rivedere la mia conoscenza in materia e sviluppare un sistema Open Source chiamato Eligere a supporto del processo elettorale.
Va però sottolineato che sono disponibili soluzioni sia commerciali online che open source: è sempre difficile dire se implementare un nuovo sistema è la scelta giusta, a volte il riuso può essere più garantista, ma allo stesso tempo partire da zero consente un approccio più sartoriale.
In ogni caso a un anno circa dalla mia decisione di implementare un sistema è possibile fare il punto con oltre 50.000 voti espressi attraverso la piattaforma e numerose riflessioni dovute all’implementazione del sistema end-to-end cercando continuamente un equilibrio tra usabilità e sicurezza capace sia di garantire integrità e riservatezza nel voto che un’accessibilità da un’ampia platea di piattaforme.
La crittografia non è tutto
Come tutti gli informatici che si sono formati negli anni ’90 sono stato condizionato dalla nascita dei protocolli crittografici e conseguentemente dal mitico testo di Bruce Schneier “Applied Cryptography”, punto di partenza per chiunque fosse attratto dalla sicurezza informatica in un mondo in cui Internet si stava diffondendo rapidamente. La visione della sicurezza che quel libro forniva era quella di una proprietà matematica che poteva essere quasi dimostrata, indicando implicitamente come insicuri i sistemi mal implementati o che non facessero uso di crittografia. Sebbene sia un pilastro della società digitale, la crittografia è solo uno degli ingredienti di un sistema sicuro, e successivamente lo stesso Bruce Schneier nel libro “Secrets and Lies: Digital Security in a Networked World” (la cui prima edizione è del 2000) si scusava per questa visione puramente matematica data pochi anni prima indicando come la sicurezza di un sistema dipenda da vari fattori che includono i processi e gli uomini, e quindi cercare di ridurre tutto ad una mera equazione matematica era semplicemente una pia illusione.
Anche nei sistemi elettorali digitali la crittografia è un ingrediente essenziale per garantire proprietà essenziali del sistema, ma non va commesso l’errore di considerarlo l’unico aspetto rilevante del sistema. In effetti questo errore l’ho commesso proprio quando ho deciso di sviluppare Eligere, avendo appena letto della libreria ElectionGuard annunciata da Microsoft nel marzo 2020 come contributo Open Source al progetto di digital democracy e che aveva visto un’applicazione di prova in un collegio elettorale americano. La libreria da un punto di vista matematico mi ha convinto (anche grazie alle dimostrazioni di Zero Knowledge che la accompagnavano) ed ho pensato che in fondo, avendo una libreria Open Source che faceva la parte “difficile” sviluppare attorno un po’ di codice per usarla non avrebbe dovuto essere troppo complesso; non avevo idea di quanto mi sbagliassi.
Un buon sistema di voto digitale
È conoscenza comune che un buon sistema di voto in un processo democratico debba essere caratterizzato dalle seguenti proprietà:
- Il voto deve essere segreto
- L’espressione del voto deve essere riservata (quando lo si esprime lo si fa in assenza di condizionamenti esterni)
- Il voto non deve poter essere alterato
- I voti devono essere espressi dai soli membri del cosiddetto “elettorato attivo”, ovvero tutti gli aventi diritto al voto per un particolare collegio elettorale
- L’urna contenente i voti deve garantire che non si possano né sostituire né osservare mentre i seggi sono aperti
- Le schede utilizzate devono corrispondere agli elettori che hanno esercitato il diritto di voto al fine di evitare che schede “aggiuntive” siano state inserite nell’urna
Tutti noi abbiamo avuto esperienza di questi aspetti nei seggi elettorali fisici dove cabine metalliche, urne sigillate, matite indelebili, timbri e registri cercano di garantire queste proprietà essenziali ad assicurare che tutti e soli gli elettori aventi diritto possano esprimere la propria volontà in assenza di condizionamenti esterni. In Italia, poi, l’attenzione alla sicurezza elettorale è assoluta, forse perché i brogli reali o presunti sono sempre dietro l’angolo e spesso il semplice fatto che nelle elezioni Americane è previsto il voto postale è sufficiente a provocare manifestazioni di stupore senza riflettere sul fatto che in continenti non densamente popolati oltre alla sicurezza è necessario preoccuparsi del diritto di tutti di prendere parte al processo (come evidenziato nelle elezioni presidenziali americane conclusesi pochi mesi fa).
Nel mondo digitale vi sono regole completamente differenti e la necessità di “fidarsi” di apparati e software rende un sistema di voto elettronico decisamente più difficile da realizzare garantendo quelle proprietà che i sistemi cartacei difendono da ormai lungo tempo. In effetti la prima sfida del digitale è legata al fatto che l’informazione si altera semplicemente e non esiste il concetto di originale essendo sempre possibile duplicare esattamente un’informazione che il sistema può osservare in ogni momento all’interno della sua memoria. L’uso della crittografia si è reso necessario quindi per garantire che i voti nell’urna non possano essere letti prima dello spoglio (informazione che potrebbe alterare il corso di un’elezione e per differenza rivelare il contenuto di un voto espresso) né alterati per cambiare il risultato finale.
Vi sono tecniche crittografiche (El Gamal ad esempio) usate per realizzare urne che possono essere aperte in presenza di più chiavi crittografiche affidate a dei garanti che consentano l’apertura dell’urna e lo spoglio solo quando previsto dalla procedura elettorale. I sistemi di voto open source Helios Voting e ElectionGuard fanno uso di queste tecniche per assicurare l’integrità e la riservatezza dell’urna.
Il fatto che l’urna sia sigillata, integra, e si possa verificare che contenga quantomeno il numero di voti che contiene sia lo stesso degli elettori è già un enorme passo avanti nella realizzazione di un sistema di voto digitale; ma non è sufficiente a garantire le proprietà che tutti ci aspettiamo da un sistema di voto, e l’implementazione del sistema Eligere mi ha costretto a guardare con attenzione a tutti gli aspetti che sono necessari per assicurare che un voto arrivi integro e in modo anonimo all’interno dell’urna.
Alcuni sistemi supportano la funzione di “anti-coercizione” consentendo ad un elettore di ripetere il voto per un certo lasso di tempo, al prezzo di mantenere l’associazione all’interno del sistema, seppur indiretta, tra voto ed elettore, al fine di garantire che se un elettore è costretto ad un particolare voto può successivamente cambiare idea quando non osservato da chi lo ha forzato. Ma anche in questo caso si tratta di trovare il giusto equilibrio tra principi importanti al fine del processo elettorale.
Un anonimato identificabile
Il processo elettorale delle democrazie moderne porta con sé l’ossimoro inevitabile anonimo e identifcabile: gli elettori devono essere identificabili per assicurare che abbiano diritto di esercitare il voto, ma allo stesso tempo il loro voto deve essere anonimo per garantire che non vi siano ripercussioni dovute al particolare orientamento elettorale. È questa contraddizione che spesso alimenta le discussioni attorno alle elezioni, con elettori che cercano di rendere riconoscibile il proprio voto per compiacere qualcuno e organizzazioni che cercano di verificare che i voti seguano un orientamento preordinato.
La contraddizione di identificazione e voto anonimo è, se possibile, ancor più amplificata dai sistemi digitali che per loro natura tracciano tutte le operazioni e chi le compie. Troppo spesso nei sistemi di voto digitali ci si affida a processi di “fiducia” del sistema sentendo la necessità di dover dare qualcosa per buono senza pensare che le potenziali vulnerabilità sono molteplici e non semplicemente limitate agli aspetti di protezione del dato.
Poiché Eligere partiva da un’urna sicura mi sono preoccupato di fornire un’implementazione che garantisse al meglio l’anonimato nel voto pur assicurando una procedura di verifica dell’appartenenza dell’elettore a uno o più collegi elettorali con un’identificazione anche a distanza di ciascun elettore che non sia interamente basata sul possesso di credenziali di voto che possono essere sempre rubate.
La soluzione trovata è stata quella di realizzare due sistemi distinti: l’Election System (ES) e il Voting System (VS). Il primo si occupa di custodire il database con le liste elettorali, identificare digitalmente l’elettore e supportare il processo di identificazione (anche a distanza mediante una videocall) da parte della commissione di seggio che riconosce un codice OTP che l’elettore deve inserire a riprova dell’avvenuta identificazione; il secondo non effettua alcuna autenticazione e si limita a “fidarsi” di biglietti (ovviamente crittografati) che il web browser dell’elettore riceve dall’election system e fornisce al voting system come garanzia del fatto che si ha titolo a votare per un determinato collegio elettorale. Se il biglietto è valido e non è già stato usato il voting system genera la scheda elettorale e non appena riceve il biglietto e il voto li separa immediatamente inserendo il voto nell’apposita urna e memorizzando il biglietto come già usato. Il sistema notifica all’election system il fatto che il voto associato ad un particolare biglietto è stato espresso; sarà compito di quest’ultimo associare il biglietto all’elettore e quindi registrare il voto avvenuto.
In questo schema due sistemi completamente indipendenti interagiscono per mezzo di una API Web, e se i due sistemi sono amministrativamente isolati e indipendenti (in particolare gli amministratori non possono accedere ad entrambi i log dei Web server con gli indirizzi IP) garantisce l’espressione del voto capace di rispettare sia i requisiti di identificazione che di espressione anonima del voto.
L’importanza di un codice sorgente comprensibile
Se l’Open Source è stato spesso terreno di confronto ideologico e spesso ambiguo, confondendo il libero uso con l’uso gratuito, è sicuramente un aspetto importante nei processi di democrazia digitale. Solo l’ispezione del codice sorgente, unita a processi capaci di assicurare che la versione ispezionata sia effettivamente quella in esecuzione, può creare quel patto sociale che richiede un processo elettorale virtuoso. Processi di certificazione soffrono infatti del difetto di osservare il sistema solo in un certo momento, ovvero quello in cui il codice viene ispezionato dal certificatore.
Ma come spesso dico ai miei studenti la disponibilità dei sorgenti non è di per sé sinonimo di trasparenza, è possibile adottare pattern di programmazione che rendano il codice più difficile da comprendere vanificando la sua disponibilità a causa della riduzione della platea che lo può leggere.
Consapevole di queste criticità, ho intrapreso lo sviluppo di Eligere con un’attenzione all’uso di librerie e tecniche il più possibile standard, favorendo pattern di programmazione dichiarativa (ovvero il codice dichiara cosa serve invece di implementare la procedura che effettua la computazione necessaria) e l’uso di librerie di ampio uso e tecniche di scaffolding (generazione automatica di codice).
Ho cercato anche di ridurre le interazioni tra i vari componenti del sistema evitando che attraverso l’interazione sia possibile, magari con tecniche di machine learning, trarre informazione che non sia esplicitamente voluta. Ad esempio, la scheda che il sistema invia al Web browser dell’elettore contiene tutte le informazioni sui candidati in modo che si possa presentare un’interfaccia all’utente la cui interazione non viene vista dal server se non al termine quando biglietto e voto espresso sono noti, nascondendo eventuali informazioni che si possono dedurre durante il processo di scelta che può coinvolgere ricerche e cambio di idea.
Gli aspetti non funzionali del sistema sono stati volutamente mantenuti scarni, evitando di complicare il sorgente con codice dedicato alla visualizzazione e che può nascondere al suo interno vulnerabilità o comportamenti indesiderati.
Verifica e certificazione
Quando si comincia un percorso ci si guarda intorno e si seguono percorsi già seguiti da sistemi affini o analoghi a quello che si sta sviluppando. Quando ho affrontato il problema della verifica e della certificazione del codice sorgente di Eligere ho scoperto che non vi sono percorsi ben definiti, e ci si appella ad uffici come, ad esempio, quello del garante o dell’AgID per ottenere una certificazione della correttezza del sistema. Ma come mi ha fatto notare un illustre personaggio nel panorama della sicurezza nazionale queste agenzie non hanno nessuna funzione di certificazione e pertanto possono esprimere pareri che però non corrispondono a processi specifici con una funzione di certificazione attribuita che preveda anche il compito di verifica ed eventualmente sanzionatorio.
La verifica del codice può essere effettuata con tecniche standard sia per gli aspetti di sicurezza che di riservatezza, ma i protocolli di compilazione e messa in esecuzione del sistema sono essenziali a garantire che il codice in esecuzione sia effettivamente quello pubblicato, e tecnologie come quella dei container possono sicuramente contribuire alla realizzazione di processi più facili da definire e garantire.
(Le mie) conclusioni
Il percorso che mi ha portato allo sviluppo di Eligere, e il suo impiego in numerosi collegi elettorali (alle dimostrazioni di Zero Knowledge) mi ha permesso di osservare con attenzione il processo elettorale apprezzando tutte le tensioni tra diritti contrastanti che un voto deve tutelare. In questo periodo di pandemia si è deciso di sacrificare una rigida interpretazione di identificazione e di segreto dell’urna per favorire la partecipazione anche in un momento di distanziamento sociale. Abbiamo verificato che è possibile identificare oltre 6000 elettori in meno di 10 giorni e non rinunciare ad un riconoscimento visivo dell’elettore senza dover delegare all’uso esclusivo di un’identità digitale l’identificazione dell’elettore.
Nelle elezioni vale un principio affine a quello che domina la cybersecurity: la sicurezza di un sistema deve essere commisurata al valore che protegge. Le decisioni se in presenza o a distanza, se richiedere obbligatoriamente l’identificazione visiva o meno, e molte altre sono più o meno appropriate a seconda del collegio e dell’elettorato coinvolto, ed è bene che siano scelte condivise dalla comunità democratica.
Sicuramente continuerò a lavorare al sistema perché ritengo che la democrazia digitale sia un aspetto spesso sottovalutato ma centrale, e dove contributi da parte di tutti debbano essere più che benvenuti. E il processo di sviluppo aperto è forse quello più adatto a garantire tutti seppur con tutti i suoi limiti.
Sicuramente ho scoperto, soffermandomi a riflettere, che vi sono molti aspetti con cui realizziamo e mettiamo in esecuzione sistemi importanti alla vita democratica sono spesso sottovalutati nella promessa che la crittografia risolverà tutti i problemi.