File dell'elettore
I due file che un elettore può conservare: la ricevuta di voto e la chiave privata di voto. Il loro contenuto campo per campo, cosa permettono di verificare e cosa deve restare segreto.
Entrambi sono costruiti nel Suo browser ed esistono solo se Lei li scarica: la piattaforma non li riceve, non li conserva e non li invia mai. Entrambi contengono la Sua chiave segreta.
Protocollo v1
Due buste JSON, le stesse regole.
La ricevuta e la chiave privata seguono le stesse convenzioni, lette e scritte dalla libreria voter-artifacts del sito di voto. La validità crittografica dei valori (checksum, appartenenza alla curva) spetta a CryptoVote, non al lettore della busta.
- Un oggetto JSON UTF-8. Ogni file è un unico oggetto JSON, scritto su una sola riga, senza spazi. Gli esempi di questa pagina sono indentati per la lettura.
- Una versione in testa. Il campo version indica la busta e la sua versione. Un lettore deve verificarla e rifiutare qualsiasi altro valore.
- Valori con prefisso, mai esadecimale nudo. Ogni valore crittografico è la stringa canonica <etichetta>_<esadecimale>_<checksum> emessa da CryptoVote, riportata così com’è. Un valore esadecimale privo di prefisso viene rifiutato.
- Un checksum contro gli errori di battitura. 4 byte di BLAKE3 (8 caratteri esadecimali), etichetta inclusa: un valore ricopiato male, o un pk_ incollato al posto di un ki_, viene rilevato subito. Non è una garanzia di sicurezza: l’autenticità deriva soltanto dalla firma ad anello.
- Campi sconosciuti ignorati. Un lettore deve ignorare i campi che non conosce, per restare compatibile con un’evoluzione del formato; non li riscrive.
Le etichette
-
pk_32 byte · 64 caratteri esadecimali - Chiave pubblica: quella che figura nell’anello.
-
sk_32 byte · 64 caratteri esadecimali - Chiave segreta: quella che firma. Non deve mai essere divulgata.
-
ki_32 byte · 64 caratteri esadecimali - Immagine di chiave: l’identificativo pubblico di una scheda, specifico di un’elezione.
-
ring_32 byte · 64 caratteri esadecimali - Impronta dell’anello: l’impronta canonica dell’insieme delle chiavi di un anello, indipendente dal loro ordine.
-
blsag_32 × (1 + dimensione dell’anello) byte - Firma ad anello bLSAG: 38.464 caratteri esadecimali per un anello di 600 chiavi.
La ricevuta, rilasciata una volta accettata la scheda.
La Sua copia personale della scheda depositata, dell’anello sotto cui l’ha firmata e della chiave che l’ha firmata: quanto basta per ritrovare e verificare personalmente la Sua scheda nel registro pubblico.
Quando, e in quali mani
- Solo dopo l’accettazione. La ricevuta compare sulla pagina di voto solo dopo che il server ha accettato la Sua scheda. Viene mostrata una sola volta; il download è facoltativo.
- Costruita nel Suo browser. La pagina la compone a partire dalla chiave segreta rimasta in memoria dalla firma. Non viene mai inviata per e-mail (l’e-mail di conferma attesta soltanto la Sua partecipazione) né conservata dalla piattaforma.
- Non può essere riemessa. La piattaforma non detiene più la Sua chiave segreta e non può quindi ricostruire la ricevuta. Sulla pagina i valori sensibili sono nascosti dietro i pulsanti « mostra » e « copia »; « nascondi i dettagli » li cancella dallo schermo definitivamente, e la chiave segreta si cancella da sola dopo un intervallo prestabilito. Copi o scarichi prima la ricevuta.
Cosa permette
- Ritrovare la Sua scheda. Inserisca ballot.key_image nella ricerca del registro pubblico dell’elezione, anche prima della pubblicazione per lotto, poi confronti la scheda pubblicata con signed_payload, byte per byte.
- Verificare il Suo anello. Confronti ring_digest con l’impronta che il registro pubblica per l’anello indicato in ring. Una differenza significa che ha firmato sotto un anello diverso da quello pubblicato.
- Verificare la Sua riga nel registro delle presenze. voter_id indica la Sua riga nel registro delle presenze: numero di distribuzioni della chiave, indicazione « ha votato ».
- Riverificare la firma offline. signed_payload, signature, l’identificativo dell’elezione e le chiavi pubbliche dell’anello bastano per riverificare la firma, senza la piattaforma.
- Produrre una prova di voto. Lo strumento Prova di voto legge la ricevuta e ne riprende la chiave segreta, l’elezione e l’immagine di chiave.
-
versionstringa - Sempre condorcet-receipt/1.
-
electionUUID - L’identificativo dell’elezione, parametro della firma. Accettato in maiuscolo in lettura, sempre riscritto in minuscolo.
-
ringstringa non vuota - L’identificativo (UUID) dell’anello sotto cui la scheda è stata firmata, come pubblicato nel registro.
-
ring_digestring_… - L’impronta di quell’anello, calcolata dal Suo browser a partire dalle chiavi ricevute. Il server non ne fornisce mai una: un valore inviato insieme all’anello potrebbe essere adattato insieme a esso.
-
voter_idUUID - Il Suo identificativo di elettore, l’unico identificativo pubblicato che La riguarda.
-
public_keypk_… - La Sua chiave pubblica, membro dell’anello.
-
secret_keysk_… - La Sua chiave segreta, quella che ha firmato la scheda.
-
ballot.signed_payloadstringa (JSON) - Il payload firmato, byte per byte: la stringa stessa che è stata firmata e inviata al server. Va trattata come stringa opaca; analizzarla e ricodificarla impedirebbe il confronto con il registro.
-
ballot.signatureblsag_… - La firma ad anello della scheda.
-
ballot.key_imageki_… - L’immagine di chiave della scheda, specifica di questa elezione: l’identificativo pubblico della Sua scheda nel registro.
{
"version": "condorcet-receipt/1",
"election": "0c2e7e2a-5df3-4c0e-9d2b-3f6a8f0c9e21",
"ring": "7b1d4f90-2c3a-4e8b-a6d5-91f0e2c47a38",
"ring_digest": "ring_ffeeddccbbaa99887766554433221100ffeeddccbbaa99887766554433221100_8b7a6f5e",
"voter_id": "3e9a5c71-8d24-4b6f-b0e3-5a7c19d2f846",
"public_key": "pk_0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef_a1b2c3d4",
"secret_key": "sk_fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210_d4c3b2a1",
"ballot": {
"signed_payload": "{\"v\":1,\"election\":\"0c2e7e2a-5df3-4c0e-9d2b-3f6a8f0c9e21\",\"ballot\":\"Alice > Bob = Chloé\",\"weight\":1}",
"signature": "blsag_0a1b2c3d4e5f6a7b0a1b2c3d4e5f6a7b0a1b2c3d4e5f6a7b0a1b2c3d4e5f6a7b0a1b2c3d4e5f6a7b0a1b2c3d4e5f6a7b0a1b2c3d4e5f6a7b0a1b2c3d4e5f6a7b_e5f6a7b8",
"key_image": "ki_00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff_5e6f7a8b"
}
}
Valori fittizi: checksum non validi, firma ridotta alla lunghezza minima. Il file scaricato si chiama recu-vote- seguito dai primi 8 caratteri dell’identificativo dell’elezione.
La chiave privata, scaricata al deposito della chiave.
Quando Lei deposita la propria chiave, la coppia di chiavi viene generata nel Suo browser. Questo file ne è la copia di sicurezza: è ciò che Le permetterà di votare.
Quando, e in quali mani
- Al deposito di una chiave generata. Durante la periodo di deposito delle chiavi di un’elezione, o di un gruppo di elezioni, se sceglie di generare una chiave. CryptoVote produce la coppia nel Suo browser.
- Parte solo la chiave pubblica. public_key viene inviata alla piattaforma, che la collocherà in un anello. La chiave segreta viene mostrata una sola volta, copiabile, e il file è costruito nel Suo browser.
- Senza elezione né gruppo. Il file contiene solo la coppia di chiavi: la stessa chiave può servire più elezioni indipendenti, poiché l’immagine di chiave diventa specifica di ogni elezione al momento della firma. Prende il nome dalla chiave stessa, condorcet-vote- seguito dal checksum di public_key.
Cosa permette
- Votare. Sulla pagina di voto, incolli la chiave sk_… o carichi il file: la pagina ne deriva la chiave pubblica e verifica che figuri nell’anello che Le è stato assegnato.
- Depositare la stessa chiave altrove. In un altro deposito, carichi il file: la chiave pubblica viene estratta nel browser, e la chiave segreta non lascia il Suo dispositivo.
- Ritrovare la Sua scheda, provare il Suo voto. Con la chiave segreta e l’identificativo di un’elezione, lo strumento Prova di voto ricalcola la Sua immagine di chiave, anche senza ricevuta.
-
versionstringa - Sempre condorcet-private-key/1.
-
public_keypk_… - La chiave pubblica, quella trasmessa alla piattaforma al deposito.
-
secret_keysk_… - La chiave segreta, generata nel Suo browser e mai trasmessa.
{
"version": "condorcet-private-key/1",
"public_key": "pk_0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef_a1b2c3d4",
"secret_key": "sk_fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210_d4c3b2a1"
}
Valori fittizi, checksum non validi. Nessun campo election né gruppo: un file meno recente che riporta un campo election informativo resta leggibile, poiché tale campo viene ignorato.
Cosa deve restare segreto, e perché.
Entrambi i file contengono la Sua chiave segreta. Li custodisca come una password: fuori dalla portata altrui, ma senza perderli.
I rischi, senza giri di parole
- La chiave segreta rivela il Suo voto. Permette di ricalcolare la Sua immagine di chiave per qualsiasi elezione, quindi di ritrovare le Sue schede pubblicate, retroattivamente, in ogni elezione in cui è stata usata, e di produrre a Suo nome una prova di voto.
- La chiave segreta firma. Produce una firma valida in qualsiasi anello che contenga la Sua chiave pubblica. La piattaforma accetta una scheda solo tramite il Suo link di voto, e una sola per elettore.
- La ricevuta rivela il Suo voto a chi la legge. Affianca il Suo identificativo di elettore alla Sua scheda. È dimostrabile per costruzione: il protocollo privilegia la verificabilità individuale e non offre quindi resistenza alla coercizione. La mostri solo a chi sceglie di rivelare il Suo voto.
- Una chiave persa è un voto perso. Una chiave depositata non ha alcuna chiave di riserva lato server: una volta aperta l’elezione, perderla equivale a non votare. Finché la periodo di deposito delle chiavi è aperta, può depositare una nuova chiave al suo posto, per le elezioni i cui anelli non sono ancora costituiti.
- Una ricevuta persa non viene riemessa. La Sua scheda resta conteggiata. Se ha conservato la chiave segreta, questa basta per ricalcolare la Sua immagine di chiave e ritrovare la Sua scheda.
Cosa la piattaforma non vede mai
- I Suoi file. La ricevuta e la chiave privata sono scritte e scaricate nel Suo browser; non transitano mai dai nostri server.
- Una chiave segreta generata da Lei. Generata nel Suo browser, non viene mai trasmessa. Caricare un file di chiave in un deposito ne invia solo la chiave pubblica.
- Una chiave distribuita, dopo il Suo voto. Nella modalità predefinita, la piattaforma genera la chiave e la conserva cifrata; la cancella dal proprio database al momento di consegnargliela, poi dalla cache temporanea al momento del voto. Non può quindi più ricostruire la Sua ricevuta.
- Il legame tra la Sua chiave e la Sua scheda. La Sua chiave pubblica figura nell’anello pubblicato e la Sua scheda nel registro pubblico; solo la chiave segreta permette di collegarle.
Vedi anche
- Scheda firmata La scheda così come l'elettore la firma: payload firmato, firma ad anello, immagine di chiave, digest dell'anello.
- Registro pubblico Ciò che ogni elezione pubblica, indipendentemente dal mezzo di trasmissione: definizione, anelli, registro delle presenze, schede.
- Prova di voto La busta cvproof/1: dimostrare, di propria sola iniziativa, che una scheda pubblicata è la propria, il che rivela il voto.