Vada al contenuto
Condorcet.vote Alpha
← Documentazione tecnica

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

Formato comune

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.
Ricevuta di voto · .condorcet_receipt

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.
version stringa
Sempre condorcet-receipt/1.
election UUID
L’identificativo dell’elezione, parametro della firma. Accettato in maiuscolo in lettura, sempre riscritto in minuscolo.
ring stringa non vuota
L’identificativo (UUID) dell’anello sotto cui la scheda è stata firmata, come pubblicato nel registro.
ring_digest ring_…
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_id UUID
Il Suo identificativo di elettore, l’unico identificativo pubblicato che La riguarda.
public_key pk_…
La Sua chiave pubblica, membro dell’anello.
secret_key sk_…
La Sua chiave segreta, quella che ha firmato la scheda.
ballot.signed_payload stringa (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.signature blsag_…
La firma ad anello della scheda.
ballot.key_image ki_…
L’immagine di chiave della scheda, specifica di questa elezione: l’identificativo pubblico della Sua scheda nel registro.
public/docs/voter-files.example_label · recu-vote-0c2e7e2a.condorcet_receipt
{
    "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.

Chiave privata · .condorcet_private_key

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.
version stringa
Sempre condorcet-private-key/1.
public_key pk_…
La chiave pubblica, quella trasmessa alla piattaforma al deposito.
secret_key sk_…
La chiave segreta, generata nel Suo browser e mai trasmessa.
public/docs/voter-files.example_label · condorcet-vote-a1b2c3d4.condorcet_private_key
{
    "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.

Segreti

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.
Cosa rivela una prova di voto