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:

/tracciati_di_voto/tracciato_votazione_[CODICE]/blockchain/

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
Blocco #0
Genesis Block
prev: 0000...0000
Blocco #1
Voto #1
prev: a7b3...f921
Blocco #2
Voto #2
prev: c4d8...e512

Ogni blocco e collegato al precedente tramite hash crittografico

Come funziona il processo di voto

1
Espressione del voto

Il votante accede con il suo token univoco e esprime le proprie preferenze

2
Creazione del blocco

Il sistema crea un nuovo blocco contenente i dati del voto e il timestamp

3
Calcolo dell'hash

Viene calcolato l'hash SHA-512 che include il riferimento al blocco precedente

4
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 campo data del 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"
}
Genesis Block

È 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.

Calcolo dell'hash

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"
}
Concatenamento in azione

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.

previousHash completo (128 caratteri): 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"
}
Fine della catena

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.

Come viene calcolato l'hash SHA-512 di ogni blocco

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.

Perché SHA-512? SHA-512 produce un hash di 128 caratteri esadecimali (512 bit). La probabilità di due input diversi che producono lo stesso hash (collisione) è circa 1 su 2256 — un numero superiore agli atomi dell'universo osservabile. È lo stesso standard usato in ambito bancario e nelle comunicazioni militari.

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.

Cosa succederebbe se qualcuno tentasse di modificare un voto?
  1. L'hash del blocco modificato cambierebbe completamente
  2. Il blocco successivo conterrebbe un previousHash che non corrisponde piu
  3. L'intera catena risulterebbe "spezzata" e la manipolazione sarebbe immediatamente rilevabile
  4. 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.

block_N-1 IL TUO VOTO block_N+1
🔍

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.

17ffdbb7bc10db4809013ebacdb987b96f493044dd79193f9164f585674a0ab895202ca4e99687923ada311675e18aba966bf1d3f4ad200b76f939eba3e578e8

Cosa succede se un voto viene alterato?

La catena di hash rende ogni manomissione automaticamente rilevabile da chiunque abbia ricevuto l'email di conferma.

1
Votazione in corso — tutto regolare

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.

2
Ipotesi: un blocco viene alterato da "manine cattive"

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).

3
La catena si spezza automaticamente

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.

4
Tutti i votanti successivi ricevono un errore di validazione

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.

5
La votazione è automaticamente invalidata

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):

f8e9d0c1b2a3948576c4d8e512a7b3c4d5e6f7921f8e9d0c1b2a3948576c4d8e512a7b3c4d5e6f7921...

Concatenato al blocco precedente:

prev: a7b3c4d5e6f7921...

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 verifica

L'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