Le vote par mandat.
Le besoin qui motive l'opération D : un votant, ou un mandataire ayant voté pour le compte d'un tiers, démontre après coup comment un bulletin a été exprimé.
Démontrer qu'un bulletin publié est le sien, sans révéler sa clé secrète, mais en révélant son vote : l'opération D de cryptoVote et l'enveloppe cvproof/1 qui la transporte.
Cette page spécifie la preuve de vote des outils publics : ce qu'elle établit, qui peut la produire, le déroulé par nonce, l'enveloppe échangée champ par champ et sa vérification. Elle est volontairement explicite sur ses conséquences : une preuve remise est une divulgation de vote, vérifiable par tous et sans retour possible.
Protocole v1
Un bulletin publié porte une image de clé à portée d'élection, jamais une identité. La preuve relie cette image de clé à une clé publique, donc au détenteur de la clé secrète correspondante.
∃ x : P = x·G et I = x·B B = H_p(domain ‖ len(election_id) ‖ election_id ‖ P)
Ristretto255, Blake2b-512. B est la base dont le bulletin tire son image de clé : la même clé secrète donne une image de clé différente dans chaque élection.
Produire une preuve exige la clé secrète du votant. Personne ne peut donc prouver le bulletin d'un votant à sa place, ni contre sa volonté.
Le besoin qui motive l'opération D : un votant, ou un mandataire ayant voté pour le compte d'un tiers, démontre après coup comment un bulletin a été exprimé.
Trois rôles, trois appels cryptoVote. Le nonce est généré par celui qui demande la preuve, jamais par le votant.
Le nonce est intégré au défi de la preuve : elle ne peut être ni précalculée ni rejouée sous un autre nonce, ce qui garantit au demandeur qu'elle a été produite pour sa demande. Mais elle reste vérifiable publiquement : quiconque détient le couple (nonce, preuve) peut en convaincre n'importe qui d'autre. Ce n'est pas une preuve à vérifieur désigné, et rien n'en réserve la portée au seul demandeur.
Un unique objet JSON UTF-8, seul format d'échange que les outils produisent ou acceptent. Il ne concerne que le votant et le demandeur : aucun analyseur côté serveur, aucun stockage.
version
chaîne littérale
election
UUID
public_key
pk_<64 hexa>_<8 hexa>
key_image
ki_<64 hexa>_<8 hexa>
nonce
nonce_<64 hexa>_<8 hexa>
proof
own_<128 hexa>_<8 hexa>
{
"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"
}
Valeurs illustratives : formes et longueurs exactes, mais motifs et sommes de contrôle fictifs. Cette enveloppe ne se vérifie pas.
La procédure pour qui reçoit une enveloppe. Une preuve valide, seule, dit : cette clé publique possède cette image de clé. Seul le rapprochement avec le registre en fait : ce votant a déposé ce bulletin publié.
La preuve standardise un reçu qui était déjà prouvable. Ce n'est pas une fonction de confidentialité, et ses effets sont définitifs.
Les outils publics de preuve de vote implémentent cette spécification : générer un nonce, prouver son vote, vérifier une preuve. Sans compte ni réglage, ils sont toujours disponibles ; en pratique, la vérification suppose une élection close dont le registre est publié, même si la cryptographie ne dépend pas du cycle de vie de l'élection.