Blockchain per Voto Elettronico
Ogni votante crea e alimenta la blockchain con il proprio voto
Immutabilità garantita • Crittografia SHA-512 • Verificabilità totale
La Blockchain creata e alimentata da ogni votante
In VotareIn.cloud, non esiste una blockchain pre-esistente: è il primo voto che crea il Genesis Block, e ogni voto successivo aggiunge un nuovo blocco alla catena.
Come funziona?
1. Primo voto = Genesis Block
Il primo votante che esprime il voto crea la blockchain con il blocco iniziale (Genesis Block). L'hash di questo blocco viene registrato nel database come punto di partenza della catena.
2. Ogni voto aggiunge un blocco
Ogni votante successivo crea un nuovo blocco contenente il proprio voto e il riferimento crittografico (previousHash) al blocco precedente, alimentando e rafforzando la catena.
3. Concatenazione automatica
Il sistema calcola automaticamente l'hash SHA-512 di ogni blocco e lo concatena al successivo, creando una catena inscindibile dove modificare un solo voto invaliderebbe l'intera blockchain.
4. Registro immutabile
Un blockchain_registry.json traccia tutti i blocchi creati, il loro hash e lo stato della catena, permettendo verifiche incrociate in qualsiasi momento.
Vantaggi della blockchain decentralizzata
- Immutabilità assoluta: una volta registrato, il voto non può essere modificato senza invalidare l'intera catena
- Trasparenza totale: ogni votante riceve l'hash del proprio blocco e può verificare il voto in autonomia
- Sicurezza crittografica: algoritmo SHA-512 a 512 bit per hash impossibili da falsificare
- Tracciabilità completa: cronologia di tutti i voti con timestamp e concatenazione verificabile
- Resistenza alla manomissione: modificare un blocco richiede ricalcolare tutti i blocchi successivi, operazione matematicamente impossibile
Anatomia tecnica della Blockchain
Ogni blocco salvato su file system contiene dati strutturati che garantiscono l'integrità del voto
La blockchain di VotareIn.cloud è salvata su file system nella directory:
Ogni voto genera:
-
block_0.json→ Genesis Block (primo voto) -
block_1.json→ Secondo voto -
block_N.json→ N-esimo voto -
blockchain_registry.json→ Registro completo
Visualizzazione della catena
Ogni blocco e collegato al precedente tramite hash crittografico
Come funziona il processo di voto
Espressione del voto
Il votante accede con il suo token univoco e esprime le proprie preferenze
Creazione del blocco
Il sistema crea un nuovo blocco contenente i dati del voto e il timestamp
Calcolo dell'hash
Viene calcolato l'hash SHA-512 che include il riferimento al blocco precedente
Conferma al votante
Il votante riceve l'hash del suo blocco per verificare il voto in qualsiasi momento
Anatomia di un blocco
Ogni blocco nella nostra blockchain contiene informazioni strutturate che garantiscono l'integrita e la tracciabilita del voto:
Indice (index)
Numero progressivo del blocco nella catena
Dati (data)
Timestamp del voto e preferenze espresse
Hash precedente (previousHash)
Riferimento crittografico al blocco precedente
Hash del blocco (hash)
Impronta digitale univoca calcolata con SHA-512
{
"index": 42,
"data": {
"timestamp": 1701532800,
"voti": {
"Approvazione bilancio 2024": "Favorevole",
"Elezione nuovo presidente": "Mario Rossi"
}
},
"previousHash": "a7b3c4d5e6f7...921",
"hash": "f8e9d0c1b2a3...512"
}
L'hash viene calcolato serializzando index, data e previousHash, poi applicando l'algoritmo SHA-512
Struttura reale della blockchain
Un esempio concreto con dati reali: la votazione y_wgTJF3lq — "Elezione di test Assemblea nr. 1"
Struttura delle cartelle
Per ogni votazione il sistema crea automaticamente una directory dedicata all'interno di /tracciati_di_voto/. Il nome della directory incorpora il codice univoco della votazione, che la identifica in modo univoco nel sistema.
All'interno si trovano due elementi principali:
- Il file di tracciato (riepilogo leggibile in JSON)
- La sottocartella
blockchain/con il registro e i singoli blocchi
In questa votazione di esempio hanno votato in 6 atti di voto (un blocco per ogni singola espressione di preferenza su tre quesiti distinti), generando una catena di 6 blocchi.
# Struttura della cartella per la votazione y_wgTJF3lq tracciati_di_voto/ └── tracciato_votazione_y_wgTJF3lq/ │ ├── tracciato_votazione_y_wgTJF3lq.json ← Riepilogo leggibile dei voti │ └── blockchain/ ├── blockchain_registry.json ← Registro master della catena ├── block_0.json ← Genesis Block (1° voto) ├── block_1.json ← 2° voto ├── block_2.json ← 3° voto ├── block_3.json ← 4° voto ├── block_4.json ← 5° voto └── block_5.json ← 6° voto (ultimo)
Il file di tracciato principale
Il file tracciato_votazione_y_wgTJF3lq.json è un riepilogo leggibile di tutti i voti espressi, aggiornato in tempo reale a ogni nuovo voto.
Per le votazioni segrete (come questa, dove voto_segreto: 1) i voti vengono registrati senza alcun dato identificativo del votante: si conosce solo il timestamp della data, la preferenza espressa e il tipo di voto. L'anonimato è strutturale.
La sua funzione è fornire una vista aggregata rapida, distinta dalla blockchain che costituisce la prova crittografica immutabile. Pensalo come un "sommario" leggibile da un umano, mentre la blockchain è la prova matematica.
{
"votazione": {
"id": 1,
"nome": "Elezione di test Assemblea nr. 1",
"codice": "y_wgTJF3lq",
"voto_segreto": 1 ← voto anonimo
},
"votanti": [
{
"timestamp_voto": "2026-02-17",
"tipo_voto": "segreto",
"voti": {
"Chi vuoi eleggere come Sindaco di Papaperopoli?": "Minni"
}
},
{
"timestamp_voto": "2026-02-17",
"tipo_voto": "segreto",
"voti": {
"Approvazione bilancio preventivo 2025/2026": "SI"
}
}
// ... altri 4 voti ...
],
"ultimo_aggiornamento": "2026-02-17 13:28:40"
}
Il registro della blockchain
Il file blockchain_registry.json è il registro master dell'intera catena. Non contiene i dati dei voti, ma ha il ruolo fondamentale di mappare ogni blocco con due hash distinti:
-
content_hash— hash SHA-512 calcolato solo sul campodatadel blocco (timestamp + voti). Verifica l'integrità del contenuto del voto. -
file_hash— hash SHA-512 dell'intero file JSON del blocco (inclusi index, previousHash, hash). Verifica che il file fisico su disco non sia stato alterato. -
timestamp/datetime— marcatura temporale Unix e leggibile del momento esatto di registrazione del blocco.
Grazie a questa doppia verifica, è possibile distinguere se una potenziale manomissione ha riguardato i dati del voto (content_hash diverso) o il file fisico nella sua interezza (file_hash diverso).
{
"blockchain_info": {
"votazione_id": 1,
"votazione_nome": "Elezione di test Assemblea nr. 1",
"codice_votazione": "y_wgTJF3lq",
"ultimo_aggiornamento": "2026-02-17 13:28:40",
"total_blocks": 6,
"algoritmo_hash": "sha512"
},
"blocks": [
{
"file": "block_0.json", "index": 0,
"content_hash": "17ffdbb7bc10db48...578e8",
"file_hash": "b09cea1ed792f173...490c04",
"timestamp": 1771323658, "datetime": "2026-02-17 11:20:58"
},
{
"file": "block_1.json", "index": 1,
"content_hash": "6b5cedf30622b0f8...20f991",
"file_hash": "47fda376f29b1aeb...1c0040",
"timestamp": 1771323673, "datetime": "2026-02-17 11:21:13"
},
{
"file": "block_2.json", "index": 2,
"content_hash": "538e7118aa948b40...4d0c0",
"file_hash": "2c1bfa9166709d26...800da",
"timestamp": 1771325119, "datetime": "2026-02-17 11:45:19"
}
// ... blocks 3–5 con la stessa struttura ...
]
}
I blocchi della catena — dati reali
Ogni blocco corrisponde a un singolo atto di voto. Di seguito la catena completa con i valori reali degli hash a 128 caratteri esadecimali (SHA-512).
{
"index": 0,
"data": {
"timestamp": 1771323658,
// → 2026-02-17 11:20:58
"voti": {
"Chi vuoi eleggere come
Sindaco di Papaperopoli?": "Minni"
}
},
"previousHash": "0",
"hash": "17ffdbb7bc10db4809013e
bacdb987b96f493044dd7919
3f9164f585674a0ab895202c
a4e99687923ada311675e18a
ba966bf1d3f4ad200b76f939
eba3e578e8"
}
È il primo blocco della catena: il suo previousHash è la stringa letterale "0" perché non esiste nessun blocco precedente. Il primo votante che esprime la propria preferenza crea la blockchain.
L'algoritmo SHA-512 viene applicato alla stringa:
"0" + '{"timestamp":1771323658,"voti":{"Chi vuoi...":"Minni"}}' + "0"
→ Produce l'hash a 128 caratteri:
17ffdbb7bc10db4809013ebacdb987b96f493044dd79193f9164f585674a0ab895202ca4e99687923ada311675e18aba966bf1d3f4ad200b76f939eba3e578e8
{
"index": 1,
"data": {
"timestamp": 1771323673,
// → 2026-02-17 11:21:13
"voti": {
"Chi vuoi eleggere come
Sindaco di Papaperopoli?": "Minni"
}
},
"previousHash": "17ffdbb7bc10db48
...eba3e578e8", ← hash block_0
"hash": "6b5cedf30622b0f8
...26f138b20f991"
}
Il previousHash di questo blocco è esattamente l'hash di block_0. Se qualcuno tentasse di alterare block_0.json, il suo hash cambierebbe e block_1 conterrebbe un previousHash che non corrisponde più — la catena risulterebbe immediatamente spezzata.
17ffdbb7bc10db4809013ebacdb987b96f493044dd79193f9164f585674a0ab895202ca4e99687923ada311675e18aba966bf1d3f4ad200b76f939eba3e578e8
{
"index": 2,
"data": {
"timestamp": 1771325119, // 2026-02-17 11:45:19 (24 minuti dopo block_1)
"voti": { "Approvazione bilancio preventivo 2025/2026": "SI" }
},
"previousHash": "6b5cedf30622b0f88983cc5ef699c183846a30c91b758b269d7754de53246930b217363f16aae85f17cc8ce64990309ff98943a5f2b2a248e7026f138b20f991",
"hash": "538e7118aa948b407ee5209d6ac9f7d9155d36db186d6b751a421dda39ee5e0aaf1db5b1ab8bd1b40c5ae1843d1686a04c8a4ef19463a329b6b85001c6d4d0c0"
}
Il quesito cambia rispetto ai blocchi 0 e 1: si tratta di un voto su un secondo punto all'ordine del giorno. Ogni blocco registra esattamente il quesito e la preferenza di quel singolo atto di voto.
{
"index": 3,
"data": {
"timestamp": 1771325133, // 2026-02-17 11:45:33 (14 secondi dopo block_2)
"voti": { "Approvazione bilancio preventivo 2025/2026": "SI" }
},
"previousHash": "538e7118aa948b407ee5209d6ac9f7d9155d36db186d6b751a421dda39ee5e0aaf1db5b1ab8bd1b40c5ae1843d1686a04c8a4ef19463a329b6b85001c6d4d0c0",
"hash": "6d072e18f3af0e259a334f174568147caf80b05334ba050e7616f409bd2b33b60cbde9fe3eda00447f4f973940885673243e12fc7476b696c2785db8895ffd29"
}
Nonostante voti e quesito siano identici a block_2, l'hash è completamente diverso. Il motivo: index è 3 (non 2) e previousHash è diverso. SHA-512 è estremamente sensibile: anche un singolo carattere diverso in input produce un hash totalmente diverso.
{
"index": 4,
"data": {
"timestamp": 1771331287, // 2026-02-17 13:28:07 (quasi 2 ore dopo block_3)
"voti": { "Candidati al consiglio direttivo": "Qui" }
},
"previousHash": "6d072e18f3af0e259a334f174568147caf80b05334ba050e7616f409bd2b33b60cbde9fe3eda00447f4f973940885673243e12fc7476b696c2785db8895ffd29",
"hash": "463098da9f8f979009b0b526d70eaf18ee0d4cdf855fffe68f768f962fd5af911065746de3b79d648d1b6fc56df90cdd30bc73c87b57fa58cfd2a41ab18d8956"
}
{
"index": 5,
"data": {
"timestamp": 1771331320, // 2026-02-17 13:28:40
"voti": { "Candidati al consiglio direttivo": "Qui" }
},
"previousHash": "463098da9f8f979009b0b526d70eaf18ee0d4cdf855fffe68f768f962fd5af911065746de3b79d648d1b6fc56df90cdd30bc73c87b57fa58cfd2a41ab18d8956",
"hash": "a9fc1b6fe17e0bdbb5a4fc9a47c7a6bdd922534499de69a000bd06dd8e27169aec66d52addd8133de4ee3c7dad66053771ff0703f94f1e8004e59db5d1b83286"
}
Questo è l'ultimo blocco. Il suo hash (a9fc1b6f...83286) è registrato nel blockchain_registry.json come punto terminale verificabile. Se in futuro venisse espresso un nuovo voto, il suo previousHash sarebbe esattamente questo valore.
L'hash di ogni blocco è il risultato dell'applicazione di SHA-512 a una stringa ottenuta concatenando tre elementi:
// Calcolo in PHP — funzione logVotazione() $stringa = $index . json_encode($data) . $previousHash; $hash = hash('sha512', $stringa);
index
La posizione del blocco nella catena (0, 1, 2…). Garantisce che due voti identici espressi in momenti diversi producano hash completamente diversi, anche se il contenuto del voto è lo stesso (come block_2 e block_3 in questo esempio).
data
Il payload del voto: timestamp Unix (secondo esatto della votazione) + oggetto voti con le coppie quesito→risposta. È il cuore informativo del blocco ed è serializzato con json_encode() prima dell'hashing.
previousHash
L'hash del blocco precedente (oppure la stringa "0" per il Genesis Block). Rende ogni blocco dipendente da tutti quelli che lo precedono: modificare qualsiasi blocco invalida l'intera catena successiva.
Perche il voto e immutabile e sicuro?
Hash crittografico
Ogni blocco ha un'impronta digitale unica (hash SHA-512). Anche la minima modifica ai dati produce un hash completamente diverso, rendendo evidente qualsiasi tentativo di manomissione.
Concatenazione
Ogni blocco contiene l'hash del blocco precedente. Se qualcuno modificasse un voto, l'hash cambierebbe e tutti i blocchi successivi risulterebbero invalidi, "spezzando" la catena.
File immutabili
I blocchi vengono salvati con permessi di sola lettura. Un registro centralizzato (blockchain_registry) traccia tutti i blocchi e i loro hash per verifiche incrociate.
- L'hash del blocco modificato cambierebbe completamente
- Il blocco successivo conterrebbe un
previousHashche non corrisponde piu - L'intera catena risulterebbe "spezzata" e la manipolazione sarebbe immediatamente rilevabile
- Il registro della blockchain segnalerebbe l'incongruenza durante qualsiasi verifica
La blockchain è pubblica: ogni votante è al tempo stesso un contribuente e un guardiano
In VotareIn.cloud la blockchain non appartiene al gestore della piattaforma: è distribuita tra tutti i votanti. Ogni persona che esprime il voto accresce la catena aggiungendo un nuovo blocco e, ricevendo via email la propria prova crittografica, ne diventa custode e verificatore permanente.
Il votante accresce la blockchain
Esprimendo il voto, il sistema genera automaticamente un nuovo blocco e lo aggiunge alla catena. Il votante è il costruttore della blockchain: senza i voti non esiste catena, e ogni voto la rende più lunga e più robusta.
Il votante verifica la blockchain
Immediatamente dopo il voto, ricevi via email l'hash SHA-512 del tuo blocco. Questo codice è la tua prova personale e permanente: puoi usarlo per verificare in qualsiasi momento — anche anni dopo la votazione — che il tuo voto sia integro e intatto nella catena.
Cosa succede se un voto viene alterato?
La catena di hash rende ogni manomissione automaticamente rilevabile da chiunque abbia ricevuto l'email di conferma.
I blocchi si concatenano correttamente. Ogni votante riceve l'email con il proprio hash. La catena è integra: ogni previousHash corrisponde esattamente all'hash del blocco precedente.
Qualcuno modifica il contenuto di block_2.json — ad esempio cambia la risposta da "SI" a "NO". Poiché i dati cambiano, anche l'hash SHA-512 del blocco cambia completamente (effetto valanga di SHA-512).
block_3.json contiene un previousHash che puntava all'hash originale di block_2. Ma ora l'hash di block_2 è diverso. Il sistema rileva che il previousHash di block_3 non corrisponde più all'hash reale del blocco precedente: la catena risulta spezzata a partire da quel punto.
Ogni votante che inserisce il proprio hash nell'apposita pagina di verifica ottiene un errore: il blocco che segue block_2 riporta un previousHash non valido. La manomissione è immediatamente evidente a chiunque tenti di validare il proprio voto, anche mesi dopo la chiusura della votazione.
Una blockchain con catena spezzata è, per definizione, non più valida. Non occorre un'autorità centrale che "dichiari" la frode: la matematica stessa lo dichiara. Basta che un solo votante esegua la verifica del suo hash per rilevare l'incongruenza e renderla pubblica.
Non serve fidarsi della piattaforma.
Basta conservare la propria email di conferma.
Finché almeno un votante ha conservato la sua email con l'hash del blocco, qualsiasi tentativo di manomissione può essere dimostrato matematicamente, in modo autonomo, senza intermediari. La blockchain di VotareIn.cloud è pubblica perché è distribuita tra tutti i suoi partecipanti.
Email di conferma con prova crittografica
Immediatamente dopo il voto, ricevi un'email automatica con i dettagli tecnici della tua registrazione sulla blockchain
Cosa contiene l'email:
-
Hash SHA-512 del tuo blocco
Un codice univoco di 128 caratteri esadecimali che identifica in modo inequivocabile il tuo voto nella blockchain -
Hash del blocco precedente (previousHash)
Prova della concatenazione: il tuo blocco è matematicamente legato al voto precedente nella catena -
Numero progressivo del blocco (index)
La posizione esatta del tuo voto nella blockchain (es: blocco #42 su 150 totali) -
Timestamp di registrazione
Data e ora esatta di creazione del blocco, immutabile e verificabile -
Link di verifica personale
URL diretto per controllare in qualsiasi momento che il tuo voto sia integro e concatenato correttamente
Email di conferma blockchain
Oggetto: ✅ Voto registrato nella Blockchain - Assemblea Soci 2024
Gentile Mario Rossi,
Il tuo voto è stato registrato con successo nella blockchain immutabile di VotareIn.cloud.
Dettagli del blocco:
Blocco #: 42
Timestamp: 2024-02-13 14:35:22
Votazione: Assemblea Soci 2024
Hash del tuo blocco (SHA-512):
Concatenato al blocco precedente:
Grazie alla concatenazione crittografica, modificare il tuo voto invaliderebbe automaticamente tutti i blocchi successivi, rendendo la manomissione impossibile.
Verifica il tuo voto
Hai l'hash del tuo voto? Verifica in tempo reale che sia presente nella blockchain e che non sia stato alterato.
Vai alla verificaL'algoritmo SHA-512
VotareIn.cloud utilizza l'algoritmo SHA-512 (Secure Hash Algorithm 512-bit) per calcolare gli hash dei blocchi. Ecco perche e una scelta sicura:
512 bit di output
Produce un hash di 128 caratteri esadecimali, rendendo le collisioni statisticamente impossibili.
Effetto valanga
Anche cambiando un solo carattere nell'input, l'hash risultante e completamente diverso.
Irreversibile
E impossibile risalire ai dati originali partendo dall'hash (funzione unidirezionale).
Standard riconosciuto
Algoritmo approvato dal NIST, utilizzato in applicazioni governative e finanziarie.
Votazioni sicure con tecnologia blockchain
Inizia oggi a organizzare votazioni trasparenti e verificabili