Scrypta Polls System — Piattaforma blockchain di voto elettronico

Scrypta
6 min readMar 20, 2019

--

Studiando la possibile implementazione della blockchain nel voto online, il team di sviluppo di Scrypta ha sperimentato come questa tecnologia potrebbe risolvere i problemi fondamentali legati alla privacy, alla trasparenza e alla sicurezza. Da questo studio nasce il progetto “Scrypta Polls System”.

Il Minimal Viable Product è funzionante e operativo.

“Abbiamo realizzato una dApp, basata sulla tecnologia blockchain, che potrebbe rendere il sistema di voto più sicuro e trasparente”.

Come funziona

Grazie alla natura decentralizzata della blockchain, la correttezza della votazione può essere verificata da tutti i partecipanti al network. Tutti i dati relativi alla votazione non sono archiviati su server, ma in blocchi di informazioni sui computer di tutti i nodi della rete Scrypta. Per inquinarli, un hacker avrebbe bisogno di violare tutti i computer e ottenere l’accesso ai singoli nodi (set di dati).

Durante la sperimentazione tuttora in corso, si è cercato di dimostrare che si può votare e tracciare chi ha votato, senza poter però collegare un voto ad uno specifico votante. Tutto questo sfruttando una blockchain permissionless il cui block explorer è visibile ed ispezionabile da chiunque voglia.

La piattaforma è stata implementata con un elemento fondamentale: l’invio della “scheda” in forma anonima e la registrazione univoca degli utenti. Si è proceduto quindi nel seguente modo:

Il soggetto promotore, che chiameremo owner per comodità, crea un nuovo indirizzo, quello della votazione.

A questo punto effettuerà una transazione con i dati che inizializzano la votazione. Qui di seguito un esempio dell’oggetto che viene memorizzato:

pollData = {

name: ‘NOME DELLA VOTAZIONE’,

pubkey: ‘PUBKEY DELLA VOTAZIONE’,

privkey: ‘PRIVKEY DELLA VOTAZIONE’,

owner: ‘INDIRIZZO PUBBLICO OWNER’,

start_date: ‘DATA DI INIZIO’,

start_time: ‘ORA DI INIZIO’,

end_date: ‘DATA DI FINE’,

end_time: ‘ORA DI FINE’,

question: ‘DOMANDA DELLA VOTAZIONE’,

answers: ‘ARRAY DI RISPOSTE’

};

Come potete rilevare, sono necessari i dati pubblici relativi alla votazione, compresa la chiave privata dello stesso indirizzo. Questo per un puro scopo dimostrativo e per la volontà di creare un sistema realmente serverless. In alternativa la chiave privata risiederebbe nel dispositivo dell’owner.

Come vedremo in seguito, nonostante questa chiave privata sia in chiaro, il sistema è totalmente sicuro. Si potrà vedere una transazione di esempio a questo indirizzo: https://chainz.cryptoid.info/lyra/tx.dws?262865.htm.

Questa è la prima di una serie di transazioni che fanno riferimento allo stesso blocco 124565 https://chainz.cryptoid.info/lyra/block.dws?124565.htm.

Dopo aver inizializzato la votazione, ed aver quindi atteso che la rete processi il blocco contenente i dati (in media 1 minuto), la nostra votazione sarà disponibile in piattaforma. Da questo momento in poi gli utenti potranno richiedere l’autorizzazione di partecipare alla votazione.

Immaginiamo quindi un periodo intermedio tra la creazione della “Poll” e l’effettivo inizio della votazione in cui tutti gli utenti richiederanno di essere accettati.

In questo caso, ciò che avviene in background, è l’invio da parte dell’utente di una transazione all'indirizzo della votazione, usando il protocollo poll://AUTHREQUEST

Una transazione di questo tipo può essere analizzata a questo indirizzo: https://chainz.cryptoid.info/lyra/tx.dws?262891.htm.

Off-chain — il sistema memorizza anche la chiave pubblica RSA dell’utente (https://en.wikipedia.org/wiki/RSA_(cryptosystem)) che verrà utilizzata in fase di emissione della scheda di voto.

A questo punto sarà l’owner della votazione che avrà l’onere di autorizzare o meno gli indirizzi dei richiedenti.

Nel caso di votazioni pubbliche l’owner emetterà un’autorizzazione solo se, ad esempio, viene dimostrata fisicamente l’identità del richiedente (magari attraverso un documento o prassi KYC); oppure online, dimostrando (off-chain) che l’utente è chi dice di essere, inviando ad esempio una OTP ad una casella di posta certificata. O ancora, si potrebbero implementare tecniche di biometria comuni, come scansione dell’impronta digitale, etc…

Quando l’owner della votazione autorizza un utente a votare, invierà pubblicamente due diverse transazioni. Una all'indirizzo della votazione, usando il protocollo poll://AUTH, così da scrivere pubblicamente che l’indirizzo è stato autorizzato.

La seconda transazione invece è il risultato di un’operazione che avviene nel seguente schema:

  • Creazione di un nuovo indirizzo (coppia chiave pubblica e privata)
  • Encrypt dello stesso con la chiave pubblica RSA dell’utente
  • Scrittura del risultato da parte dell’indirizzo della votazione
  • Invio dei fondi necessari alla transazione di voto (0.002 LYRA in questo caso), che viene appunto effettuata dall’owner all'indirizzo della scheda di voto.

Da questo momento in poi si perdono le tracce specifiche tra utente e scheda di votazione. Di seguito rimandiamo ai link di esempio che dimostrano le due operazioni:

Come potete vedere è stato usato il protocollo poll://VOTECARD per identificare le schede voto. Non c’è effettivamente nessun legame tra l’indirizzo del votante e l’indirizzo della sua scheda di voto, in quanto vengono usate tecnologie differenti che, pur affiancate, non possono essere collegate in alcun modo.

Sarà quindi il solo utente a poter verificare se all'interno delle transazioni della votazione c’è la sua “scheda”. Il sistema riesce quindi, fino a qui, a:

  • indicizzare gli utenti;
  • autorizzarli su base singola;
  • affidargli una scheda univoca e totalmente scollegata dall'identità (sbloccabile solo dall'utente).

A questo punto all'utente non resterà che attendere il rilascio della sua scheda di voto e, non appena disponibile, usarla per la votazione. Se andiamo a ripercorrere la stessa transazione di esempio, vedremo che è stata impiegata in questa altra operazione: https://chainz.cryptoid.info/lyra/tx.dws?263000.htm.

Qui si può chiaramente notare che il protocollo usato è poll://VOTE:0 che identifica chiaramente la scelta dell’utente. Andando a ripercorrere gli input di questa transazione, vedremo che fanno riferimento a questo indirizzo: “LctPjsVtdmoQXBonWPTJv6DfvjH2Vyvwzy” che è l’owner della votazione, come si può ben evincere dalla prima transazione: https://chainz.cryptoid.info/lyra/tx.dws?262868.htm.

Non abbiamo alcun dubbio! Questo voto è stato sicuramente autorizzato dall’owner, in quanto è stato l’owner stesso a generare questa scheda di voto.

Anche l’utente potrà verificare che il proprio voto è stato conteggiato nel modo giusto, ripercorrendo all'inverso lo stesso procedimento:

  • Viene fatta la scansione dell’indirizzo da parte dell’utente.
  • L’utente effettua un decrypt delle schede di voto.
  • Non appena la scheda voto viene trovata, si ricerca la transazione in ingresso con il protocollo poll://VOTE:

L’utente avrà quindi trovato e verificato la corretta acquisizione del proprio voto.

Ogni utente potrà inoltre fare una scansione di tutte le transazioni in ingresso e contare in tempo reale i voti, e verificare l’effettiva validità degli stessi.

“Sembra siamo riusciti a trasportare il detto “Don’t trust, verify” anche in un caso d’uso “spinoso” come il sistema di voto. Chiaramente il nostro è solo un MVP che non potrebbe essere usato (allo stato attuale) come sistema di voto nazionale e pubblico, speriamo che il nostro lavoro sia di aiuto per chi, al governo, sta cercando soluzioni”.

Il codice sorgente dell’MVP è disponibile pubblicamente su Github al seguente link:

https://github.com/scryptachain/scrypta-polls

Invitiamo e consentiamo così ad appassionati di blockchain, tester o sostenitori dell’e-voting di verificare ed esaminare la tecnologia che sta alla base della nostra soluzione.

SCRYPTA - Archiving and VerificationWebsite: www.scryptachain.org
Block Explorer: https://chainz.cryptoid.info/lyra
Official Github: https://github.com/scryptachain
Twitter: https://twitter.com/scryptachain
Discord: https://discord.gg/mrVQvhB
Telegram: https://t.me/scryptachain_official
e-mail: info@scryptachain.org

--

--

Scrypta
Scrypta

No responses yet