Voto elettronico remoto

Il ritrovo della comunità dove confrontarsi e discutere sulle notizie dal mondo dell'informatica, di Ubuntu e di tutto quello che la riguarda, novità, pettegolezzi e quant'altro.
Avatar utente
feroce_maria_bumerlo
Prode Principiante
Messaggi: 65
Iscrizione: lunedì 3 marzo 2008, 15:12

Voto elettronico remoto

Messaggio da feroce_maria_bumerlo »

Chiedo nuovamente il vostro consiglio, stavolta per creare una piattaforma di voto elettronico.

Sempre per conto della grande associazione di volontariato di cui faccio parte, stavo cercando un sistema per evitare costosi e logisticamente complicati spostamenti ogni qual volta bisogna votare per una certa determinazione. Diciamo che c'è allo stato attuale tutta una serie di decisioni che vengono prese da un migliaio di persone sparse letteralmente in tutta italia e che sono costrette, ogni due anni, a concentarsi in una unica città (con costi altissimi, viaggio+pernottamento+vitto). Se invece trovassimo una soluzione tecnologicamente soddisfacente, si parlerebbe addirittura di estendere il voto "elettronico" a tutti i soci, raggiungendo così una utenza potenziale di centinaia di miglia di persone.

Ho cercato in giro, ma sinora tutte le soluzioni prevedono o complicate "scansioni" o l'uso di macchine equipaggiate con software specifici all'interno di un seggio elettorale fisico.

Ora io vi chiedo: esiste secondo voi il modo di creare una procedura VIA WEB che consenta di avere una procedura di voto elettronico che sia contemporaneamente capace di garantire l'anonimato del voto e impedisca a chi gestisce la struttura di manomettere i risultati senza lasciare traccia?

Ecco i requisiti funzionali del software che mi vengono in mente:

1) Voto anonimo nel contenuto
2) Voto unico (una persona non deve poter votare due volte)
3) Possibilità di verifica da parte del singolo elettore che il proprio voto sia stato computato
4) Possibilità di verifica da parte di un ente di garanzia che il risultato non sia stato manomesso

Qualche idea?
Avatar utente
Luka7
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 559
Iscrizione: mercoledì 22 agosto 2007, 19:37

Re: Voto elettronico remoto

Messaggio da Luka7 »

Non conosco piattaforme di voto e quindi non posso consigliarti, ma parlando a livello teorico non credo sia facilmente possibile avere un voto anonimo senza che NESSUNO possa sapere cosa hai votato.

Il fatto che il voto debba poter essere verificato immagino voglia dire che deve essere possibile fare un "riconteggio": quindi deve rimanere traccia dei voti espressi. Questo implica che non e' possibile usare la criptazione solo a livello di trasporto dati (SSL, ad esempio) per poi distruggere i dati una volta conteggiati: i dati stessi devono essere criptati.

L'idea che mi viene in mente richiede l'utilizzo di un sistema di criptazione e firma a chiave pubblica e privata (ad esempio GnuPG).
Posto che il server abbia una chiave privata (magari anche relativa solo alla singola votazione) e distribuisca l'equivalente chiave pubblica ai votanti questi potrebbero criptare il loro voto in modo che solo il server possa decriptarlo e "utilizzarlo". In questo modo e' anche possibile archiviare i dati senza che nessuno (tranne il server) sia in grado di interpretarli.

Se poi anche ogni votante ha una chiave privata e il server possiede l'equivalente chiave pubblica, il voto puo' essere firmato da ogni votante con la sua chiave privata, in modo che il server possa determinare se il voto che ha ricevuto e' stato contraffatto (verificando se i dati ricevuti combaciano con la firma e con la chiave pubblica).

Tuttavia questo sistema lascia aperta una falla: chiunque ha accesso al server (sia anche solo l'amministratore di sistema) puo' avere accesso alla chiave privata del server e usarla per decriptare i voti degli utenti e vederli (violando quindi l'anonimato).

Non mi e' venuto in mente nessun modo veramente sicuro per evitare che chi abbia accesso fisico al server non sia in grado di accedere ai voti. Si potrebbe non salvare la chiave su disco ma tenerla nella memoria temporanea del programma, col rischio pero' che vada persa in caso di blackout e che quindi tutti i voti risultino illeggibili. Si potrebbe criptare anche la chiave privata, ma questo a sua volta pone il problema di dove salvare la chiave con cui e' stata criptata.

Probabilmente ci sara' un sistema che implementa le tecniche sopra descritte, tuttavia non saprei indirizzarti su nessun software in particolare.
Avatar utente
feroce_maria_bumerlo
Prode Principiante
Messaggi: 65
Iscrizione: lunedì 3 marzo 2008, 15:12

Re: Voto elettronico remoto

Messaggio da feroce_maria_bumerlo »

Innanzitutto grazie della risposta,

avevo intuito che la soluzione (ammesso che ci sia date le premesse che ci eravamo posti) passasse per la composizione di crittografia simmetrica ed asimmetrica. Ho letto con interesse la tua disamina; ti riporto un primo abbozzo di ciò che mi è venuto in mente:

1) Ogni utente ha una password propria ed un id univoco. La password non è presete nel db degli "aventi diritto al voto", viene acquisita nella ram e ne è comparato solo l'hash MD5 al momento del login.
2) L'utente accede alla pagina per votare: se il suo id è fra quelli che hanno già votato viene buttato fuori, altrimenti
3) Procedura di voto: per semplificare immaginiamo che la votazione sia una specie di referendum in cui si vota solo "Sì" o "NO". L'utente vota e a questo punto il browser invia dei dati al DB, dove avremo:

Tabella "ELETTORI" (come il tabellone nelle elezioni politiche)

|ID elettore| hash md5 della password| ha votato/non ha votato
(tutto in chiaro, sono dati di pubblico dominio)

Tabella "VOTI" (come lo scatolone con dentro le schede elettorali)

|ID ELETORE criptato AES con chiave LA SUA PASSWORD | voto espresso|  
(ciascuno potrà controllare che esiste la riga con il proprio voto interrogando il DB. A schemo coparirà un codice che sarà il testo  "ID ELETTORE CRIPTATO CON AES con chiave LA SUA PASSWORD| VOTO ESPRESSO" il tutto criptato con la chiave segreta del server. )

Ciò lascia aperta (almeno) una voragine: chi mi assicura che il voto espresso non sia stato modificato a manina dentro alla cella  dall'amministratore di sistema? Se fosse solo Criptato con la chiave pubblica del server sarebbe illegibile, certo, ma non "incopiabile". Potrei copiare il valore "valido" di una cella precedente in una cella successiva dal diverso vaolre. A questo punto non vedo come "firmare come valido" il voto.
Ultima modifica di feroce_maria_bumerlo il lunedì 25 ottobre 2010, 17:34, modificato 1 volta in totale.
Avatar utente
freax
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 501
Iscrizione: sabato 7 aprile 2007, 10:13

Re: Voto elettronico remoto

Messaggio da freax »

a ) non puoi mai avere la certezza che a quel codice/password/chiave/quellochetipare corrisponda la X persona assegnata
b ) l'md5 è reversibile , in uno scenario moderno è al massimo usato per fare il checksum delle iso e dei file in generale
c ) un voto a distanza è una cosa senza senso , senza contare che dopo poco tempo farebbe perdere "appeal" alla causa dell'organizzazione/ente/associazione connessa .
http://www.noao.edu/image_gallery/
http://antwrp.gsfc.nasa.gov/apod/astropix.html

Pensare non è essere d'accordo o in disaccordo: questo è votare. ( Robert Frost )
Avatar utente
Luka7
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 559
Iscrizione: mercoledì 22 agosto 2007, 19:37

Re: Voto elettronico remoto

Messaggio da Luka7 »

Forse allora non ho capito cosa intendi per verifica che il risultato non e' stato manomesso.

La tua soluzione non permette di sapere se le righe nella tabella VOTI sono veramente quelle dell'utente o se sono state aggiunte da qualcun altro.

Mettiamo che l'amministratore del sistema segni che un certo numero di righe nella tabella ELETTORI ha votato, e aggiunga altrettante righe nella tabella VOTI con la votazione che preferisce e mettendo dei valori casuali nella colonna criptata. Il sistema non puo' controllare se quei voti sono autentici. Lo potrebbe fare solo se conoscesse tutte le password degli utenti (che pero' ovviamente non sa').

Semplificando un po' le tabelle (ma complicando forse un po' il processo di criptazione) si puo' assegnare ad ogni utente una chiave privata, e la corrispettiva chiave pubblica viene registrata in una colonna nella tabella ELETTORI (e magari anche in un archivio cartaceo, per accertarsi che il database non venga manomesso).
Ora si puo' integrare la tabella VOTI nella tabella elettori, invertendo la tabella voti: si memorizza in chiaro il nome dell'elettore ma si cripta il suo voto. Inoltre si aggiunge un'ulteriore colonna che e' una firma dell'utente (fatta con la chiave pubblica) sull'autenticita' del voto.

Riassumendo, questo e' il procedimento:

Database:
ID - Password (hash) - Voto (criptato, eventualmente vuoto se non ha votato) - Firma

Per esprimere un voto:
Si effettua il login (in cui la password viene inviata al server, hashata e confrontata con l'hash memorizzato.
Se la colonna Voto e' vuota si puo' procedere alla votazione.
Durante la votazione l'utente esprime il voto, lo cripta in qualche modo (AES o chiave privata del server) e lo firma.
Invia tutto al server in modo che il server riesca a scoprire il voto (in chiaro) dell'utente ma lo mantenga in memoria RAM, salvando sul disco solo la versione criptata e la firma.

Verifica del voto:
Per ogni utente che ha votato (e che quindi ha una colonna Voto non vuota) si verifica che il voto criptato corrisponda alla firma relativa, e poi si procede a decriptare il voto per vedere che valore ha.

Anche questo sistema ha delle falle: l'amministratore del sistema potrebbe (in base a quale sistema viene usato per criptare i voti) essere in gradi di decriptarli e violare l'anonimato. Tuttavia mi pare un "rischio" minore rispetto alla possibilita' di modificare i voti.
Avatar utente
feroce_maria_bumerlo
Prode Principiante
Messaggi: 65
Iscrizione: lunedì 3 marzo 2008, 15:12

Re: Voto elettronico remoto

Messaggio da feroce_maria_bumerlo »

freax ha scritto: a ) non puoi mai avere la certezza che a quel codice/password/chiave/quellochetipare corrisponda la X persona assegnata
Beh, il mai assoluto è una cosa che alla prova dei fatti non ci interessa. Quello che ci interessa è una ragionevole certezza che la persona cui è stato assegnato il codice generato casualmente non veda usurpato il suo voto da qualcuno che gli ha sgamato la password perché ne conosce la data di nascita. Voglio dire, anche l'INPS ti fa vedere il dettaglio contributivo dopo trafila di richiesta/verifica identità/assegnazione password. A noi basterebbe una cosa del genere, senza reinventare la ruota.
freax ha scritto: b ) l'md5 è reversibile , in uno scenario moderno è al massimo usato per fare il checksum delle iso e dei file in generale
Per ignoranza avevo detto md5, non sapevo della reversibilità. Sapevo di alcune collisioni a determinate, e rarissime, condizioni. Comunque, se non md5, andrebbe bene un qualsiasi sistema di criptazione "one way".
[/quote]
freax ha scritto: c ) un voto a distanza è una cosa senza senso , senza contare che dopo poco tempo farebbe perdere "appeal" alla causa dell'organizzazione/ente/associazione connessa .
Questa non l'ho capita. L'associazione persegue un suo scopo e per questo usa dei fondi a favore di categorie di persone vulnerabili. Di tanto in tanto prende delle decisioni al suo interno o rinnova le sue cariche: per fare queste operazioni "interne" spende una certa cifra che, se risparmiata, aumenterebbe il budget destinato ai bisognosi. La gente che non fa parte dell'associazione manco viene a sapere quando ci sono le elezioni, e non avrebbe neanche motivo di saperlo. Non ha senso che noi finanziamo alitalia e l'hotel *** anziché gli alluvionati del Pakistan.
Avatar utente
feroce_maria_bumerlo
Prode Principiante
Messaggi: 65
Iscrizione: lunedì 3 marzo 2008, 15:12

Re: Voto elettronico remoto

Messaggio da feroce_maria_bumerlo »

Luka7 ha scritto:
Riassumendo, questo e' il procedimento:

Database:
ID - Password (hash) - Voto (criptato, eventualmente vuoto se non ha votato) - Firma

Per esprimere un voto:
Si effettua il login (in cui la password viene inviata al server, hashata e confrontata con l'hash memorizzato.
Se la colonna Voto e' vuota si puo' procedere alla votazione.
Durante la votazione l'utente esprime il voto, lo cripta in qualche modo (AES o chiave privata del server) e lo firma.
Invia tutto al server in modo che il server riesca a scoprire il voto (in chiaro) dell'utente ma lo mantenga in memoria RAM, salvando sul disco solo la versione criptata e la firma.

Verifica del voto:
Per ogni utente che ha votato (e che quindi ha una colonna Voto non vuota) si verifica che il voto criptato corrisponda alla firma relativa, e poi si procede a decriptare il voto per vedere che valore ha.

Anche questo sistema ha delle falle: l'amministratore del sistema potrebbe (in base a quale sistema viene usato per criptare i voti) essere in gradi di decriptarli e violare l'anonimato. Tuttavia mi pare un "rischio" minore rispetto alla possibilita' di modificare i voti.
Scusa se magari ti faccio delle domande sciocche, non sono un tecnico: mantenere tutto in memoria RAM non mi pare accettabile non essendo replicabli i dati in caso di crash o di down del server.

Un dato può essere contemporaneamente criptato e firmato? Il server decripterebbe i voti con quale sistema? Chiavi pubbliche degli utenti, conservate in una tabella del db?

Sulla parte finale, concordo con te: alla fine di qualcuno ci si deve fidare; si potrebbe comporre una equipe di amministratori (ad esempio, tre) che si controllano l'un l'laltro e garantiscono verso terzi.
Avatar utente
Luka7
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 559
Iscrizione: mercoledì 22 agosto 2007, 19:37

Re: Voto elettronico remoto

Messaggio da Luka7 »

Mi spiego meglio riguardo al mantenere il voto in RAM:
Quando l'utente vota invia al server il suo voto criptato in un modo che il server riesca a decriptarlo (usando AES con una chiave prestabilita, magari anche generata sul momento, oppure usando una chiave pubblica di cui il server ha quella privata).
Il server decripta momentaneamente (in RAM) il voto criptato in modo da averlo in chiaro e poter incrementare il contatore corrispondente. Una volta fatto cio' il voto in chiaro viene eliminato e il voto criptato e il contatore vengono salvati su disco.
In questo modo il blackout puo' fare danni solo se avviene nell'istante esatto in cui l'utente sta votando, ma questo accadrebbe con qualsiasi sistema.

Non ho mai provato a firmare un contenuto criptato, ma non vedo nessun motivo per cui non si possa fare.
Scrivi risposta

Ritorna a “Bar Ubuntu”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 5 ospiti