Il voto per delega.
L’esigenza che motiva l’operazione D: un elettore, o un mandatario che ha votato per conto di terzi, dimostra a posteriori come è stata espressa una scheda.
Dimostrare che una scheda pubblicata è la propria senza rivelare la chiave segreta, ma rivelando il proprio voto: l’operazione D di cryptoVote e la busta cvproof/1 che la trasporta.
Questa pagina specifica la prova di voto degli strumenti pubblici: che cosa stabilisce, chi può produrla, il flusso con nonce, la busta scambiata campo per campo e la sua verifica. È volutamente esplicita sulle conseguenze: una prova consegnata è una divulgazione del voto, verificabile da chiunque e irrevocabile.
Protocollo v1
Una scheda pubblicata reca un’immagine di chiave legata all’elezione, mai un’identità. La prova collega tale immagine di chiave a una chiave pubblica, e dunque a chi detiene la chiave segreta corrispondente.
∃ x : P = x·G e I = x·B B = H_p(domain ‖ len(election_id) ‖ election_id ‖ P)
Ristretto255, Blake2b-512. B è la base da cui la scheda ricava la propria immagine di chiave: la stessa chiave segreta produce un’immagine di chiave diversa in ogni elezione.
Produrre una prova richiede la chiave segreta dell’elettore. Nessuno può quindi provare la scheda di un elettore al suo posto, né contro la sua volontà.
L’esigenza che motiva l’operazione D: un elettore, o un mandatario che ha votato per conto di terzi, dimostra a posteriori come è stata espressa una scheda.
Tre ruoli, tre chiamate cryptoVote. Il nonce è generato da chi richiede la prova, mai dall’elettore.
Il nonce è integrato nella sfida della prova: questa non può essere né precalcolata né riprodotta con un altro nonce, il che garantisce al richiedente che è stata prodotta per la sua richiesta. Resta però verificabile pubblicamente: chiunque detenga la coppia (nonce, prova) può convincerne chiunque altro. Non è una prova a verificatore designato, e nulla ne riserva la portata al solo richiedente.
Un unico oggetto JSON UTF-8, il solo formato di scambio che gli strumenti producono o accettano. Riguarda soltanto l’elettore e il richiedente: nessun parser lato server, nessuna conservazione.
version
stringa letterale
election
UUID
public_key
pk_<64 esadecimali>_<8 esadecimali>
key_image
ki_<64 esadecimali>_<8 esadecimali>
nonce
nonce_<64 esadecimali>_<8 esadecimali>
proof
own_<128 esadecimali>_<8 esadecimali>
{
"version": "cvproof/1",
"election": "1f0c9b6e-4d2a-4c8e-9b7a-3e5f6a7b8c9d",
"public_key": "pk_0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef_a1b2c3d4",
"key_image": "ki_fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210_0badc0de",
"nonce": "nonce_00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff_5eed5eed",
"proof": "own_0f1e2d3c4b5a69780f1e2d3c4b5a69780f1e2d3c4b5a69780f1e2d3c4b5a69780f1e2d3c4b5a69780f1e2d3c4b5a69780f1e2d3c4b5a69780f1e2d3c4b5a6978_c0ffee00"
}
Valori illustrativi: forme e lunghezze esatte, ma motivi e checksum fittizi. Questa busta non supera la verifica.
La procedura per chi riceve una busta. Una prova valida, da sola, dice: questa chiave pubblica possiede questa immagine di chiave. Soltanto il confronto con il registro la trasforma in: questo elettore ha depositato questa scheda pubblicata.
La prova standardizza una ricevuta che era già dimostrabile. Non è una funzione di riservatezza, e i suoi effetti sono definitivi.
Gli strumenti pubblici di prova di voto implementano questa specifica: generare un nonce, provare il proprio voto, verificare una prova. Senza account né impostazioni, sono sempre disponibili; in pratica la verifica presuppone un’elezione chiusa con registro pubblicato, anche se la crittografia non dipende dal ciclo di vita dell’elezione.