I sistemi di voto tradizionali sono in circolazione da molto tempo. L’idea è semplice, ci sono persone che stanno vicino alle urne, la gente vota e alla fine queste persone devono contare tutto e vedere l’affluenza alle urne. C’è anche il voto per corrispondenza, il che significa che si riceve una busta, si vota e poi la si rispedisce. Ma entrambi i sistemi possono essere influenzati da terzi e non sono affidabili. I voti possono essere facilmente alterati o eliminati a porte chiuse. Non solo, anche il trasporto dei voti non è sicuro, perché qualcuno può accedervi o alcuni di essi possono andare persi. Inoltre, le persone devono viaggiare e perdere tempo solo per andare a votare. Molti di loro non lo fanno, ed è per questo che le percentuali di voto sono oggi piuttosto basse, almeno se confrontate con quelle di un decennio o due anni fa. Inoltre, il sistema di voto tradizionale è costoso. Richiede molto denaro investito nelle infrastrutture.

Il voto elettronico (e-voting) ha lo scopo di facilitare il processo garantendo al contempo sicurezza e privacy. Permette alle persone di votare in qualsiasi momento e da qualsiasi parte del mondo. Questo incoraggia le persone a esprimere la propria opinione e quindi aumenta il tasso di partecipazione. Inoltre, elimina i costi delle infrastrutture fisiche.

Lo sviluppo di un protocollo di voto sicuro non è banale. Il seguente lavoro si avvale della natura immutabile e libera da commissioni del Tangle. Inoltre, il Masked Authenticated Messaging, uno dei moduli più potenti dello IOTA, fornisce la base per una trasmissione sicura dei dati [1].

Requisiti

Un protocollo di voto elettronico è accettabile se sono soddisfatti i seguenti requisiti [2]:

Riservatezza

La scheda elettorale deve essere trattata in modo confidenziale. Nessuno, nemmeno le autorità elettorali possono collegare una scheda elettorale all’elettore che da il proprio voto. Inoltre, un sistema di voto deve essere resistente alla coercizione e non permettere a nessuno di dimostrare che è stato votato in un determinato modo.

Integrità

Per ottenere l’integrità, deve essere impossibile alterare o eliminare un voto. Inoltre, si deve garantire che nel conteggio siano inclusi solo i voti validi.

Autenticazione

Il protocollo deve prevedere un meccanismo di autenticazione per garantire che solo gli elettori aventi diritto di voto siano autorizzati a votare. Pertanto, un elettore deve avere una qualche forma di legittimità per autenticarsi durante il voto. Inoltre, l’idea di “un elettore, un voto” deve essere preservata.

Verificabilità

Esistono due categorie di verificabilità: individuale ed universale.
La verificabilità individuale, come indica il nome, permette ad un individuo di verificare che il voto è stato ricevuto correttamente e fa parte del conteggio finale. La verificabilità universale significa che chiunque può verificare che l’elezione è stata eseguita correttamente e che tutti i voti sono stati contati correttamente. Per ottenere la verificabilità universale, i risultati e le schede raccolte sono pubblicate per la visione pubblica.

Alcuni requisiti sembrano contraddittori, ma è possibile creare un sistema che soddisfi ogni aspetto. Esistono diverse tecniche crittografiche per soddisfare i requisiti. Possono essere raggruppati in tre tipi:

  • crittografia omomorfa
  • reti miste
  • firme cieche

Nella crittografia omomorfa, alcune operazioni matematiche (e.g. l’aggiunta) possono essere eseguite direttamente su testi cifrati. Per motivi di sicurezza, sono richieste prove a conoscenza zero (zero-knowledge proofs).

Nel modello di reti miste (mix-net), i voti vengono mescolati per nascondere il rapporto tra l’elettore ed il suo voto. Dal momento che ci sono n mix, produce molte spese generali per il sistema.

Questo lavoro si concentra sulle firme cieche.

Firme cieche

La firma digitale è uno schema crittografico utilizzato per verificare la credibilità dei dati. Consente a chiunque di verificare la paternità e l’integrità di un messaggio utilizzando la chiave di verifica pubblica. Con le firme digitali, dovrebbe essere praticamente impossibile manipolare o falsificare una firma o generare un secondo messaggio per il quale questa firma risulti valida. Ciò presuppone che la chiave privata non possa essere calcolata né dalla firma né dalla chiave pubblica. Un’altra caratteristica importante è il non ripudio della firma. Se una firma è stata verificata con una chiave pubblica, ciò dovrebbe dimostrare che la firma è stata generata con la chiave privata corrispondente.

Una firma cieca, introdotta per la prima volta da David Chaum, è una forma di firma digitale in cui il messaggio viene nascosto prima di essere firmato. Pertanto, il firmatario non vede ciò che sta firmando. Le firme cieche erano e sono ampiamente utilizzate nei campi dell’e-cash.

Il protocollo fa uso di RSA. Si tratta di un algoritmo crittografico asimmetrico che può essere utilizzato sia per la crittografia che per la firma digitale. Utilizza una coppia di chiavi composta da una chiave privata usata per decifrare o firmare i dati ed una chiave pubblica usata per cifrare o verificare le firme. La chiave privata è segreta e non può essere calcolata a partire dalla chiave pubblica.

Ogni partecipante al sistema possiede una coppia di chiavi e quindi una chiave privata e una pubblica.

Immaginiamo che Alice voglia ricevere una firma cieca da Bob.
La procedura sarebbe la seguente:

  1. Alice prepara un messaggio m e lo codifica usando un valore casuale, il fattore occultante (blinding) r. Questo porta ad un messaggio codificato m’.
  2. Bob riceve m’. Dopo aver un’autorizzazione corretta, Bob è disposto a firmare m’ per Alice. Ne risulta la firma s’.
  3. Alice riceve s’ e rimuove il valore casuale r. Il risultato è s, una firma per il messaggio m, firmata da Bob.

La procedura di voto

L’ufficio elettorale dispone dei dati di tutti gli elettori. Questi dati contengono informazioni personali e la chiave pubblica che rappresenta l’utente. Questo è per il meccanismo di autenticazione per garantire che solo gli elettori idonei siano in grado di votare. Il processo di registrazione richiesto dovrebbe essere avviato dall’elettore con la consegna dei documenti legali e della chiave pubblica appropriata.

Per prevenire le frodi all’interno dell’istituzione, i voti firmati sono validi solo se sono stati firmati da n firmatari, n > 1. In altre parole: solo un firmatario del set deve essere onesto affinché la frode possa essere notata.

Immaginate che Alice voglia votare. La procedura sarebbe la seguente:

  1. Alice prepara la scheda elettorale b. b contiene il suo voto e un identificatore casuale e sicuro i. Questo identificatore aggiuntivo è necessario per riconoscere i doppi voti nel conteggio. Lei codifica b usando un valore casuale, il fattore di occultante r. Questo porta ad un messaggio codificato b’.
  2. L’ufficio elettorale riceve b’. Tutti i firmatari verificano se l’elettore ha diritto di voto. Dopo aver ottenuto l’autorizzazione, ogni firmatario firmerà b’ . Il risultato è la firma sn’ dove n sta per il rispettivo firmatario.
  3. Alice riceve sn’ e rimuove il valore casuale r. Il risultato è sn, una firma per b, firmata da n.
  4. Alice prepara il suo messaggio contenente b e sn. Per impedire a chiunque di leggere il voto prima della fine delle elezioni, il messaggio deve essere crittografato. Utilizzando le chiavi pubbliche dei firmatari, Alice incapsula il messaggio in n livelli di crittografia, analoghi ai livelli di una cipolla. Solo con l’aiuto di tutti i firmatari n un messaggio potrebbe essere decifrato prematuramente. Dopo la cifratura, Alice pubblica il messaggio nel canale MAM fornito dall’ufficio elettorale.
  5. L’elezione termina quando l’uficio elettorale pubblica il segnale di fine. Anche in questo caso, il messaggio deve essere firmato da n firmatari per evitare la chiusura anticipata. Inoltre, tutte le chiavi private dei firmatari saranno pubblicati.

Per ridurre il rischio di coercizione o corruzione, potrebbe essere utilizzata un’ulteriore randomizzazione nello schema di firma [3]. Inoltre, servizi come TOR o VPN dovrebbero essere usati per mascherare l’indirizzo IP dell’elettore. Per massimizzare la sicurezza, sarebbe appropriata una cascata di tecnologie che migliorano la privacy, ad esempio VPN su TOR. Nel caso in cui il nodo di uscita TOR sia malevolo, i pacchetti rimangono criptati.

La natura immutabile del Tangle rende possibile la verificabilità universale. Chiunque abbia accesso al flusso di voto può seguirlo e calcolare il conteggio. L’algoritmo richiesto in pseudocodice:

let C be the election channel
let K be the hash set containing the public keys of all signers
let m be a message containing the identifier, vote and signatures
let H be the hash set containing all seen identifiers
let vᵪ be the vote count for candiate ᵪ
let validate(m,pkᵪ) be the message validation, where pkᵪ stands for the public key of signer ᵪ
let terminate(m) mark the ending of the election
for each m in C do
    valid ← true
    for each k in K do
        if not validate(m,k)
           valid ← false
           break
    if not valid
       continue
    if terminate(m)
       return vᵪ
    if m ∉ H
       H ← H ⊎ m
       vᵪ ← vᵪ + 1

Implementazione

Il repository può essere trovato qui su GitHub per Java. Lo schema di firma cieca è già implementato. Inoltre, i flussi MAML [4] sono già operativi e saranno utilizzati per la trasmissione sicura dei dati. Se lo si desidera, questo può essere modificato in seguito in MAM. Il passo successivo è quello di combinare lo schema di firma cieca con i flussi MAML.

Conclusioni

Utilizzando abbastanza matematica per risolvere il problema, è possibile creare un sistema che soddisfi ogni aspetto di un protocollo di voto. Grazie alla natura immutabile del Tangle, è possibile ottenere una vera verificabilità.

Se avete delle domande, Samuel sarà felice di rispondervi. Potete inviargli una mail ([email protected]) o trovarlo su Discord (Samuel Rufinatscha#2769).

Se vuoi mostrare un po’ d’amore, una donazione è sempre ben apprezzata.

XMODERJMHXHPVCMQTZKLOOZAUCAKLTWMVPYSDEHBCEJZRUIUKTTQIDHDAUHNKWHSDCGFPRILWMATDFABWPXCNWGNGWGNGW

[1] https://blog.iota.org/introducing-masked-authenticated-messaging-e55c1822d50e

[2] R. Cramer, “Multi-Authority Secret-Ballot Elections with Linear Works.” 72–83, 1996.

3] https://ac.els-cdn.com/S089812211000043X/1-s2.0-S089812211000043X-main.pdf?_tid=571d00fd-55d6-4222-9e21-1ee9aa95bf04&acdnat=1543789263_a5df5df5d928ba212d81ba8dce47f78d40d.

[4] https://medium.com/@samuel.rufinatscha/mam-lite-a-more-flexible-messaging-protocol-for-iota-562fdd318e1d


Il testo originale in lingua inglese si trova qui: https://medium.com/@samuel.rufinatscha/e-voting-on-the-tangle-e293d13552a1


È possibile supportarmi su Patreon https://www.patreon.com/antonionardella

Per ulteriori informazioni in italiano o tedesco trovate i miei contatti a questa pagina.
Se avete trovato utile la mia libera traduzione, accetto volentieri delle donazioni 😉

IOTA:
QOQJDKYIZYKWASNNILZHDCTWDM9RZXZV9DUJFDRFWKRYPRMTYPEXDIVMHVRCNXRSBIJCJYMJ9EZ9USHHWKEVEOSOZB
BTC:
1BFgqtMC2nfRxPRge5Db3gkYK7kDwWRF79

Non garantisco nulla e mi libero da ogni responsabilità.


Also published on Medium.