Questo approccio non funzionerebbe, dal momento che quando viene pubblicata la chiave segreta, chiunque ha votato cosa, sarebbe ancora disponibile.
Se desideri fornire un sistema di voto semplice, è meglio che gli elettori idonei ti forniscano una chiave. Questa chiave è generata in modo tale da poter verificare che sia una chiave di voto valida e non una chiave generata da un utente non autorizzato.
Una cosa per ottenere questo risultato è che viene generata una chiave privata casuale (curva ellittica). Questa chiave generata, chiamata Kr, viene convertita in una chiave pubblica (EC), Pr. Dopo questo, il tuo MAC Pr con una chiave segreta, Ks, ad esempio MAC (Pr, Ks) = V. V è un hash, che dovrebbe contenere una stringa di convalida segreta Vs. Questa stringa (Vs) dovrebbe essere uguale per tutti i voti, ma mantenuta segreta.
Se il risultato del MAC non contiene la stringa di convalida specificata, viene generata una nuova chiave privata. (ad esempio, pensate a "forzare brute" finché non appare una chiave privata con il valore di verifica valido, pensate "vanitygen" in bitcoin. Una parte dannosa non può farlo poiché non conosce la chiave MAC o quale dovrebbe essere la sottostringa del risultato. )
Ad esempio, in altre parole, Genera una chiave segreta Kr, come il MAC della corrispondente chiave pubblica combinata con una chiave MAC segreta, fornisce un risultato hash, che contiene una sottostringa segreta specifica.
Ripeti finché non vengono generate abbastanza chiavi segrete, quindi una chiave segreta per ciascun votante.
Quando è il momento di votare, dopo aver ottenuto un riconoscimento sicuro con il voto, consegnare all'elettore una delle chiavi segrete casuali. Controlla l'elettore in una lista, ad esempio in modo che non possa controllare più chiavi segrete. Questo può essere fatto online.
Il votante vota firmando il voto e pubblicandolo nel libro mastro pubblico.
Poiché la chiave pubblica non può essere collegata a un elettore, non è possibile collegare i voti agli elettori.
Il primo (valido) voto è ciò che conta, e quando l'elettore ha votato, è incoraggiato a pubblicare la sua chiave, possibile anonimamente, e / o mostrarla agli amici. La ragione per fare ciò è impedire che una chiave sia collegata a un voto post votante, il che impedisce la coercizione. Ciò impedisce anche che l'elettore provi ciò che ha votato, a qualcuno, perché avrebbe potuto semplicemente prendere la chiave dell'altro per dimostrare di aver votato "giusto" (quando in realtà ha votato "sbagliato").
In realtà, l'elettore può generare la sua chiave falsa, e pubblicare un voto falso, che non verrà conteggiato, usando questa chiave falsa, e quindi usare quel falso voto per "dimostrare" che ha votato "giusto" a un coercitivo . Il coercitore non può rilevare che il voto è falso Prima che le autorità pubblichino Ks e Vs.
Tuttavia, la pubblicazione deve essere ritardata in modo che tutti i nodi abbiano registrato il voto prima di pubblicare la chiave. Ovviamente l'elettore deve verificare che un paio di nodi casuali abbiano registrato correttamente il voto. La ragione di ciò è che se il voto viene trattenuto da uno o più nodi dannosi, è possibile modificare il voto utilizzando la chiave pubblicata. Ritardando la pubblicazione della chiave fino a quando i nodi non hanno pubblicato il voto, non è possibile modificare successivamente il voto.
Quando la votazione termina, le autorità pubblicano la chiave MAC segreta (Ks) e la sottostringa di convalida segreta (Vs).
Chiunque può ora calcolare i voti usando i registri pubblici. Il primo voto valido (il voto non valido potrebbe votare "cosa?" In un si / no voto) di ciascun tasto che riesce a convalidare il MAC con Ks e Vs, è un voto valido. Qualsiasi altro voto viene ignorato, ad esempio doppio voto o chiavi "generate in casa". Nessuno può imbrogliare il sistema di voto.
Se il numero di voti validi supera il numero di elettori idonei, i voti falsi sono stati inseriti da una parte malintenzionata che ha "accidentalmente" creato una chiave valida per caso o uno stato dannoso inserendo voti nel sistema.
Non si dovrebbe reagire a tali falsi voti a meno che non ci sia una chiamata ravvicinata, ad esempio c'è la possibilità che i voti falsi abbiano influito sul risultato. Un voto "sì / no" in cui il risultato è del 90% sì, tale voto non influenzerà il risultato a meno che non sia falso oltre il 40% dei voti.