Fichiers du votant
Les deux fichiers qu'un votant peut garder : le reçu de vote et la clé privée de vote. Leur contenu champ par champ, ce qu'ils permettent de vérifier, et ce qui doit rester secret.
Tous deux sont construits dans votre navigateur et n'existent que si vous les téléchargez : la plateforme ne les reçoit pas, ne les stocke pas et ne les envoie jamais. Tous deux contiennent votre clé secrète.
Protocole v1
Deux enveloppes JSON, les mêmes règles.
Le reçu et la clé privée suivent les mêmes conventions, lues et écrites par la bibliothèque voter-artifacts du site de vote. La validité cryptographique des valeurs (somme de contrôle, appartenance à la courbe) relève de CryptoVote, pas du lecteur de l'enveloppe.
- Un objet JSON UTF-8. Chaque fichier est un unique objet JSON, écrit sur une seule ligne, sans espaces. Les exemples de cette page sont indentés pour la lecture.
- Une version en tête. Le champ version nomme l'enveloppe et sa version. Un lecteur doit la vérifier et refuser toute autre valeur.
- Des valeurs préfixées, jamais d'hexa nu. Chaque valeur cryptographique est la chaîne canonique <étiquette>_<hexa>_<somme de contrôle> émise par CryptoVote, recopiée telle quelle. Une valeur hexa sans préfixe est refusée.
- Une somme de contrôle contre les fautes de frappe. 4 octets de BLAKE3 (8 caractères hexa), étiquette incluse : une valeur mal recopiée, ou un pk_ collé à la place d'un ki_, est détectée aussitôt. Ce n'est pas une garantie de sécurité : l'authenticité vient de la seule signature en anneau.
- Champs inconnus ignorés. Un lecteur doit ignorer les champs qu'il ne connaît pas, pour rester compatible avec une évolution du format ; il ne les réécrit pas.
Les étiquettes
-
pk_32 octets · 64 caractères hexa - Clé publique : celle qui figure dans l'anneau.
-
sk_32 octets · 64 caractères hexa - Clé secrète : celle qui signe. Ne doit jamais être divulguée.
-
ki_32 octets · 64 caractères hexa - Image de clé : l'identifiant public d'un bulletin, propre à une élection.
-
ring_32 octets · 64 caractères hexa - Empreinte d'anneau : l'empreinte canonique de l'ensemble des clés d'un anneau, indépendante de leur ordre.
-
blsag_32 × (1 + taille de l'anneau) octets - Signature en anneau bLSAG : 38 464 caractères hexa pour un anneau de 600 clés.
Le reçu, délivré une fois le bulletin accepté.
Votre copie personnelle du bulletin que vous avez déposé, de l'anneau sous lequel vous l'avez signé et de la clé qui l'a signé : de quoi retrouver et vérifier vous-même votre bulletin dans le registre public.
Quand, et entre quelles mains
- Après acceptation seulement. Le reçu n'apparaît sur la page de vote qu'une fois votre bulletin accepté par le serveur. Il est affiché une seule fois ; son téléchargement est facultatif.
- Construit dans votre navigateur. La page le compose à partir de la clé secrète restée en mémoire depuis la signature. Il n'est jamais envoyé par e-mail (l'e-mail de confirmation atteste seulement votre participation) et jamais stocké par la plateforme.
- Impossible à réémettre. La plateforme ne détient plus votre clé secrète et ne peut donc pas reconstruire le reçu. Sur la page, les valeurs sensibles sont masquées derrière des boutons « afficher » et « copier » ; « masquer les détails » les efface de l'écran pour de bon, et la clé secrète s'efface d'elle-même après un délai fixe. Copiez ou téléchargez le reçu avant.
Ce qu'il permet
- Retrouver votre bulletin. Saisissez ballot.key_image dans la recherche du registre public de l'élection, y compris avant sa publication par lot, puis comparez le bulletin publié à signed_payload, octet pour octet.
- Vérifier votre anneau. Comparez ring_digest à l'empreinte que le registre publie pour l'anneau ring. Une différence signifie que vous avez signé sous un autre anneau que celui publié.
- Vérifier votre ligne d'émargement. voter_id désigne votre ligne du registre d'émargement : nombre de distributions de clé, mention « a voté ».
- Revérifier la signature hors ligne. signed_payload, signature, l'identifiant de l'élection et les clés publiques de l'anneau suffisent pour revérifier la signature, sans la plateforme.
- Produire une preuve de vote. L'outil Preuve de vote lit le reçu et en reprend la clé secrète, l'élection et l'image de clé.
-
versionchaîne - Toujours condorcet-receipt/1.
-
electionUUID - L'identifiant de l'élection, paramètre de la signature. Accepté en majuscules à la lecture, toujours réécrit en minuscules.
-
ringchaîne non vide - L'identifiant (UUID) de l'anneau sous lequel le bulletin a été signé, tel que publié dans le registre.
-
ring_digestring_… - L'empreinte de cet anneau, calculée par votre navigateur à partir des clés qu'il a reçues. Le serveur n'en fournit jamais : une valeur envoyée avec l'anneau pourrait être ajustée avec lui.
-
voter_idUUID - Votre identifiant de votant, le seul identifiant publié vous concernant.
-
public_keypk_… - Votre clé publique, membre de l'anneau ring.
-
secret_keysk_… - Votre clé secrète, celle qui a signé le bulletin.
-
ballot.signed_payloadchaîne (JSON) - La charge utile signée, octet pour octet : la chaîne même qui a été signée et soumise au serveur. Elle se traite comme une chaîne opaque ; la réanalyser puis la réencoder casserait la comparaison avec le registre.
-
ballot.signatureblsag_… - La signature en anneau du bulletin.
-
ballot.key_imageki_… - L'image de clé du bulletin, propre à cette élection : l'identifiant public de votre bulletin dans le registre.
{
"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"
}
}
Valeurs fictives : sommes de contrôle non valides, signature réduite à sa longueur minimale. Le fichier proposé au téléchargement se nomme recu-vote- suivi des 8 premiers caractères de l'identifiant de l'élection.
La clé privée, téléchargée au dépôt de la clé.
Quand vous déposez vous-même votre clé, la paire de clés est générée dans votre navigateur. Ce fichier en est la sauvegarde : c'est lui qui vous permettra de voter.
Quand, et entre quelles mains
- Au dépôt d'une clé générée. Pendant la période de dépôt des clés d'une élection, ou celle d'un groupe d'élections, si vous choisissez de générer une clé. La paire est produite par CryptoVote dans votre navigateur.
- Seule la clé publique part. public_key est envoyée à la plateforme, qui la placera dans un anneau. La clé secrète est affichée une fois, copiable, et le fichier est construit dans votre navigateur.
- Sans élection ni groupe. Le fichier ne contient que la paire de clés : une même clé peut servir plusieurs élections indépendantes, l'image de clé étant propre à chaque élection au moment de la signature. Il est nommé d'après la clé elle-même, condorcet-vote- suivi de la somme de contrôle de public_key.
Ce qu'elle permet
- Voter. Sur la page de vote, collez la clé sk_… ou chargez le fichier : la page en dérive la clé publique et vérifie qu'elle figure dans l'anneau qui vous a été attribué.
- Déposer la même clé ailleurs. Lors d'un autre dépôt, chargez le fichier : la clé publique en est extraite dans le navigateur, la clé secrète ne quitte pas votre appareil.
- Retrouver votre bulletin, prouver votre vote. Avec la clé secrète et l'identifiant d'une élection, l'outil Preuve de vote recalcule votre image de clé, même sans reçu.
-
versionchaîne - Toujours condorcet-private-key/1.
-
public_keypk_… - La clé publique, celle transmise à la plateforme lors du dépôt.
-
secret_keysk_… - La clé secrète, générée dans votre navigateur et jamais transmise.
{
"version": "condorcet-private-key/1",
"public_key": "pk_0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef_a1b2c3d4",
"secret_key": "sk_fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210_d4c3b2a1"
}
Valeurs fictives, sommes de contrôle non valides. Aucun champ election ni groupe : un ancien fichier portant un champ election informatif reste lisible, ce champ étant ignoré.
Ce qui doit rester secret, et pourquoi.
Les deux fichiers portent votre clé secrète. Gardez-les comme un mot de passe : hors de portée des autres, mais sans les perdre.
Les risques, sans détour
- La clé secrète révèle votre vote. Elle permet de recalculer votre image de clé pour n'importe quelle élection, donc de retrouver vos bulletins publiés, rétroactivement, dans chaque élection où elle a servi, et de produire en votre nom une preuve de vote.
- La clé secrète signe. Elle produit une signature valide dans tout anneau qui contient votre clé publique. La plateforme n'accepte un bulletin que par votre lien de vote, et un seul par votant.
- Le reçu révèle votre vote à qui le lit. Il met côte à côte votre identifiant de votant et votre bulletin. Il est prouvable par conception : le protocole privilégie la vérifiabilité individuelle et n'offre donc pas de résistance à la coercition. Ne le montrez qu'à qui vous choisissez de révéler votre vote.
- Une clé perdue, c'est un vote perdu. Une clé déposée n'a aucune clé de secours côté serveur : une fois l'élection ouverte, la perdre revient à ne pas voter. Tant que la période de dépôt des clés est ouverte, vous pouvez déposer une nouvelle clé à la place, pour les élections dont les anneaux ne sont pas encore constitués.
- Un reçu perdu n'est pas réémis. Votre bulletin reste compté. Si vous avez gardé votre clé secrète, elle suffit à recalculer votre image de clé et à retrouver votre bulletin.
Ce que la plateforme ne voit jamais
- Vos fichiers. Le reçu et la clé privée sont écrits et téléchargés dans votre navigateur ; ils ne transitent jamais par nos serveurs.
- Une clé secrète que vous avez générée. Générée dans votre navigateur, elle n'est jamais transmise. Charger un fichier de clé lors d'un dépôt n'en envoie que la clé publique.
- Une clé distribuée, après votre vote. Dans le mode par défaut, la plateforme génère la clé et la conserve chiffrée ; elle l'efface de sa base au moment de vous la remettre, puis de son cache temporaire au moment du vote. Elle ne peut donc plus reconstruire votre reçu.
- Le lien entre votre clé et votre bulletin. Votre clé publique figure dans l'anneau publié et votre bulletin dans le registre public ; seule la clé secrète permet de les relier.
Voir aussi
- Bulletin signé Le bulletin tel que le votant le signe : charge utile, signature en anneau, image de clé, condensé d'anneau.
- Registre public Ce que chaque élection publie, indépendamment de son transport : définition, anneaux, émargement, bulletins.
- Preuve de vote L'enveloppe cvproof/1 : prouver, à sa seule initiative, qu'un bulletin publié est le sien, ce qui révèle son vote.