Comment c’est construit

Écrit pour le responsable qui devra en répondre devant un comité. Chaque affirmation ici est vérifiable à l’écran ou dans le code source.

Les noms et les votes ne sont jamais au même endroit

C’est toute la conception. Votre registre et votre urne sont deux ensembles distincts, et aucune colonne de l’un ou de l’autre ne pourrait les relier — ce n’est pas une autorisation que l’on pourrait accorder, ni un réglage que l’on pourrait changer. La jointure n’existe pas.

Pourquoi c’est construit ainsi plutôt que verrouillé

Une autorisation peut être accordée par un administrateur déterminé, par une décision de justice ou par erreur. Une colonne qui n’a jamais été créée ne le peut pas. Si quelqu’un dérobait cette nuit toute la base de données, il détiendrait les noms de vos membres et un tas de bulletins non attribuables, et aucun effort ne permettrait de les apparier.

Ce qui se passe quand un membre vote

  1. Il ouvre son lien ou saisit son code. Nous le vérifions par empreinte à clé — le code lui-même n’est pas conservé, il n’y a donc rien à consulter ni à divulguer.
  2. Le registre enregistre que le code de ce membre a été utilisé. Il n’enregistre rien de ses choix.
  3. Le bulletin entre dans l’urne sous une nouvelle référence aléatoire, l’heure étant arrondie afin que l’ordre des votes ne puisse pas être rapproché de l’ordre d’utilisation des codes.
  4. Les deux écritures ont lieu ensemble, et rien nulle part ne les relie. Le membre voit sa référence une seule fois, et aucune copie n’en est conservée.

Ce qui est chiffré, et comment

Des algorithmes nommés plutôt que le mot « chiffré », car « chiffré » seul ne vous apprend rien.

QuoiComment
Tout ce qui circule HTTPS (TLS) sur chaque page et chaque formulaire, avec HSTS. La connexion à la base de données passe par le réseau privé de l’hébergeur et est chiffrée en transit.
Les codes de vote Jamais conservés. Nous gardons un HMAC-SHA-256 de chaque code sous un poivre secret détenu dans l’environnement de l’application, et non dans la base — une base dérobée ne livre donc aucun code utilisable. Chaque code est constitué de deux secrets aléatoires indépendants : 128 bits derrière le lien, 80 bits derrière le code saisi.
Les mots de passe des responsables scrypt, avec N=32768, r=8, p=1 et un sel propre à chaque mot de passe. Auxquels s’ajoute un code à six chiffres de votre application d’authentification à chaque connexion.
Les secrets de service conservés AES-256-GCM avec une clé dérivée par HKDF d’un secret de déploiement. Cela couvre les jetons des fournisseurs de messagerie et les identifiants que votre association nous confie.
Le registre de ce qui a été fait Une chaîne d’empreintes SHA-256 : chaque événement porte l’empreinte du précédent, de sorte que modifier ou supprimer une entrée brise toutes les empreintes suivantes. La chaîne est vérifiée à l’écran et sa tête est publiée avec le résultat.

Les données au repos résident sur le PostgreSQL géré et chiffré de l’hébergeur, et toute sauvegarde reste dans la même région.

Où cela s’exécute

L’application et la base de données s’exécutent toutes deux à Francfort, dans l’Union européenne. Il n’y a pas d’autre région, pas de réplique ailleurs, et aucun service d’analyse ou de publicité sur aucune page — aucune requête du navigateur d’un votant ne quitte donc l’UE.

Si votre association envoie ses codes par e-mail via ce service, les messages sont confiés à un prestataire de messagerie pour l’acheminement ; si vous préférez l’éviter, choisissez les lettres imprimées ou votre propre serveur de messagerie lors de la configuration.

Deux responsables, ou rien

Les contrôles qui comptent sont appliqués par la base de données, non par un écran. Un responsable demande, un autre approuve. La base refuse s’il s’agit de la même personne, et chaque demande et chaque approbation sont inscrites dans la chaîne d’empreintes avec le motif indiqué.

Lancer une élection, la clore avant terme, publier le résultat, remplacer le code perdu d’un membre, produire une liste de codes actifs et purger les enregistrements : chacune de ces actions en exige deux.

Ce que nous ne collectons pas

Non pas « ce que nous n’utilisons pas » : ce n’est pas collecté du tout, et dans la plupart des cas c’est structurellement impossible à collecter.

  • Aucune adresse IP ni empreinte de navigateur n’est conservée avec un bulletin. La limitation de débit utilise une empreinte à clé de courte durée, jamais associée à un bulletin.
  • Aucun suivi d’ouverture ni de clic dans les e-mails. Un traceur de clics ferait transiter les codes de vos membres par le journal de redirection d’un tiers.
  • Aucune analyse d’audience, aucune publicité, aucun rejeu de session, aucun script ni police tiers. La politique de sécurité de la page interdit de charger quoi que ce soit d’ailleurs, cela ne peut donc pas être ajouté par inadvertance.
  • Aucun cookie sur le parcours de vote, hormis un jeton qui protège le formulaire et, si le visiteur change de langue, la langue choisie. Ni l’un ni l’autre n’identifie qui que ce soit.
  • Aucun code de vote en clair après l’envoi — ni dans la base, ni dans les journaux, ni dans les exports. Un test le vérifie.

Protection des données

Votre association est responsable du traitement : elle décide qui figure au registre et pourquoi, et c’est elle qui est en relation avec vos membres. Ce service est un sous-traitant agissant sur vos instructions, et ne traite de données personnelles que pour organiser les élections que vous configurez. Votre politique de confidentialité doit désigner votre association comme responsable du traitement et indiquer où les données sont hébergées.

Les droits de vos membres

  • L’accès, la rectification et l’effacement s’appliquent au registre : un membre peut demander à vos responsables ce qui est conservé à son sujet et le faire corriger ou supprimer.
  • Ces droits ne peuvent pas s’appliquer à un bulletin déposé, car aucun bulletin n’est rattaché à une personne. Cela mérite d’être écrit dans votre politique de confidentialité : c’est une garantie, et cela évite une demande à laquelle il serait impossible de répondre.
  • Un membre peut toujours vérifier que son propre bulletin a été compté, grâce à la référence qui lui a été affichée, sans révéler à quiconque pour qui il a voté.

Durées de conservation

Rien n’est supprimé automatiquement. Votre association définit sa politique de conservation et l’applique, ce qui est le bon sens : il ne nous appartient pas de détruire discrètement vos archives électorales à échéance. Voici ce qui existe et peut être conservé ou supprimé.

QuoiCombien de temps
Les codes de vote en clairJamais conservés. Ils n’existent que dans le message ou la lettre en cours de production.
Les jeux d’impression et fichiers de publipostageÉcrits sur disque à votre demande, et à vous de les supprimer une fois l’envoi effectué. Chacun porte une note le rappelant.
Le registre : noms et coordonnéesConservé jusqu’à ce que votre association le supprime. Supprimez-le une fois le délai de contestation écoulé ; vos statuts ou votre politique de confidentialité doivent fixer la date.
Les bulletins anonymes et le résultat scelléConservés comme archives électorales de votre association. Ils ne contiennent aucune donnée personnelle : il n’y a généralement pas lieu de les supprimer.
Le journal d’auditConservé aussi longtemps que les archives électorales. Il nomme les responsables et leurs actes, jamais le vote de quiconque.

Purger les enregistrements d’une élection est elle-même une action à deux responsables : personne ne peut effacer seul et discrètement les traces d’une élection.

Ce contre quoi cela ne vous protège pas

Si un membre confie son code à quelqu’un d’autre, cette personne peut voter à sa place. Un code est un secret confié à la poste ou à une boîte mail : c’est le prix à payer pour ne pas imposer de comptes aux membres.

Si l’ordinateur ou la messagerie d’un responsable est compromis, un attaquant voit votre registre. Il ne peut toujours pas voir pour qui l’on a voté, et il ne peut pas agir seul : tout ce qui compte exige un second responsable.

Ce service n’a pas fait l’objet d’un audit de sécurité externe. Ce qui est publié, ce sont les éléments sur lesquels repose un résultat : tous les bulletins anonymes, les empreintes des fichiers et l’outil de recomptage indépendant, avec son mode d’emploi — afin que vous, ou une personne de confiance, puissiez vérifier n’importe quel résultat même sans accès au code source.

Nous ne pourrons jamais vous dire pour qui un membre donné a voté, quelle que soit la manière dont la question est posée et quel qu’en soit l’auteur. Ce n’est pas une politique sur laquelle nous pourrions changer d’avis.

Une autre question ?

Les plus courantes, pour les membres comme pour les comités, sont réunies sur une seule page.

Vérifier un résultat Questions fréquentes