La certificazione dell’identità è inizialmente necessaria, dopo questa fase abbiamo un utente con delle credenziali e la possibilità di lasciare voti palesi (facile verifica, ma meno libertà da pressioni) o segreti (eventuali problemi di fiducia).
Le credenziali permettono di cambiare il voto durante la fase di votazione o anche controllarlo in seguito. Però, se il voto è segreto, potrebbe esserci onestà nei voti registrati per ciascuno, ma imbrogliare sui conteggi. Infatti, una persona può controllare solo il suo voto, non c’è una verifica d’insieme e quindi nei conteggi si potrebbe teoricamente imbrogliare.
Bisognerebbe riproporre la “verifica d’insieme” cercando di tener segrete le identità. Quel che mi viene in mente è questo:
Il conteggio non deve essere solo un numero, ma un elenco di hashcode, questi vengono prodotti usando l’identificativo di una votazione, l’identità di una persona che ha votato, un codice casuale e segreto generato per ogni votazione. In questo modo abbiamo un elenco di hashcode palesi in cui si vede come si è votato (es. 60 per il NO, 40 per il SI).
Finita la votazione, se la gente ci tiene a controllare e si fida poco, può accedere al sistema e validare il suo hashcode. Pubblicamente comparirà di fianco agli hashcode un simbolo “validato”, privatamente la singola persona vede se il suo hashcode pubblico corrisponde alla votazione che segretamente ha fatto (SI o NO). Se tutti validassero i loro hashcode, i conteggi essendo pubblicamente disponibili, non si potrebbero falsare. Inoltre, ciascuno controlla al tempo stesso che la propria preferenza è stata rispettata, quindi non si può imbrogliare nel registrare preferenze fasulle.
In questo modo, abbiamo affidabilità pubblicamente controllabile e segretezza del voto prima e dopo. Conteggi per forza onesti perché pubblicamente controllabili e preferenze correttamente registrate.
Se validare il proprio hashcode è noioso, potremmo avere programmi il cui codice sorgente è pubblicamente visibile e molto molto semplici, magari persino in JavaScript (facili da verificare), che alla fine della votazione validano l’hashcode in automatico e informano semplicemente l’utente della preferenza che è stata registrata, così che sa se corrisponde al vero o è scorretta.
Capiterà anche che ci siano persone che hanno votato male e non si sono resi conto o non si ricordano… ma saranno casi rarissimi. Quindi se meno dello 0,1% (o altra percentuale da scoprire sperimentalmente) dichiara che il suo voto è stato manipolato, possiamo ignorare il problema, se si supera quella percentuale si può sospettare qualcosa e fare ulteriori controlli a tutto il sistema (da persone esterne e diverse rispetto a quelle che attualmente gestivano il sistema).
Si potrebbe infine temere che in base alle credenziali inserite e agli indirizzi IP i server siano stati manomessi per presentare dati che privatamente fanno tornare i conti, ma pubblicamente comportano un imbroglio, ma una tale manomissione diventa tanto difficile da essere quasi impossibile, perché gli IP cambiano, si può accedere da altri amici, si possono fare controlli incrociati, incongruenze di questo tipo (anche 1 sola se ne trovasse) sarebbero molto più palesi e documentabili, di altri imbrogli meno sofisticati ed operati “dietro le quinte”.
L’ultimo problemaccio che mi viene in mente è che se chi ha votato per esempio SI, vede che ha perso, per creare problemi dichiara che il suo voto è stato manipolato, così che si arriva al 2% o più di dichiarazione di voti falsati, sperando di annullare la votazione. Per prevenire questo si deve evitare di annullare una votazione, ma semplicemente ricontrollare tutto il sistema. Inoltre, si potrebbe trovare una percentuale più alta che includa non solo i bassissimi errori in buona fede, ma anche questo atteggiamento disonesto, giusto per limitare di dover controllare tutto il sistema ogni volta…
Mi sembra un sistema comunque eccellente. Che ne pensate?