Votes

Rédigé par Patrick Schleppi

Vote électronique

Aperçu

Le vote électronique permet de voter sur les trois rapports annuels, sur des questions ponctuelles, et tous les quatre ans sur les candidats au conseil d’administration (CA). Les votes en ligne sont déposés dans une urne virtuelle après avoir été cryptés par trois clés publiques. Ces clés sont préalablement générées par trois personnes de confiance qui ne doivent pas faire partie du CA ni de l’équipe informatique. Les clés privées pour le décryptage sont générées en même temps et conservées encryptées sur le site. On s’assure ainsi que personne ne peut récupérer les clés privées sur le site, mais en même temps on peut les vérifier au moment ou une des personnes de confiance donne sa clé pour dépouiller le vote. Pratiquement, pour le dépouillement, un mot de passe doit être communiqués au scrutateur par une des personnes de confiance. Le dépouillement lui-même est automatisé. Il produit d’une part un décompte des voix et d’autre part une liste des votes anonymisés ou chacun peut consulter son propre vote en le repérant par un code confidentiel.

Base de données

Le système de vote fonctionne avec une base de données comprenant 2 tables:

  1. candidats: cette table contient les données relatives aux candidats à l’élection au CA. Sa clé primaire est composée de l’année d’élection et du numéro de membre de chaque candidat. Les candidats d’élections précédentes peuvent donc rester dans cette table pour en garder un historique.
  2. votes: c’est la table dans laquelle les votes électroniques des membres sont enregistrés sous forme cryptée. On peut la considérer comme une urne virtuelle. Cette table est vidée avant chaque vote.

Paramètres annuels

Quelques paramètres varient d’année en année, comme par exemple la date de l’AG. Ces paramètres sont définis dans un fichier PHP: /www/vote/php/params/paramsXXXX.php, où XXXX représente l’année. C’est ici que le vote est activé (variable $voteouvert).

Générateur de clés

Cet utilitaire, genCles.php, accessible depuis la page des outils administratifs, doit être utilisé par les trois personnes de confiance avant le lancement du vote en ligne, car les votes seront cryptés par les clés publiques de ces trois personnes. Il faut demander à ces trois personnes de générer leur clé au moins 5 semaines avant l’AG. Chaque personne produira ainsi trois fichiers sur /CCCDynamic/RSA/ ; ces fichiers sont hors de l’espace http et protégés par des permissions 0600.
privkey_XXXX_membre.pem: clé privée qui permettra de décrypter les votes électroniques. Par exemple, privkey_2013_1355.pem pour la clé privée 2013 générée par Bernard Vieillard. Cette clé privée est cryptée par le mot de passe de cette personne de confiance.
pubkey_anneeXXXX_membre.pem: clé publique qui permettra de crypter les votes électroniques. Par exemple, pubkey_2013_1355.pem pour la clé publique 2013 générée par Bernard Vieillard. Cette clé publique, de par sa nature, n’est pas cryptée car elle doit être utilisée chaque fois qu’un vote électronique est saisi.
val_annee_membre.txt: est un fichier de vérification qui prouve que la clé privée de cette personne de confiance, en conjonction avec sa phrase de passe, peut décrypter une chaîne de caractères préalablement cryptée par sa clé publique. Ceci n’est que pour fins de documentation. Par exemple, val_2013_1355.txt pour Bernard Vieillard en 2013. Le fichier contient deux lignes, la première est le texte original en clair, et la deuxième, le texte crypté puis décrypté. Les deux lignes doivent être identiques.

Candidats

Les données des candidats doivent être entrées dans la table correspondante de la BD. Il n’y a pas d’interface spécifique pour cela et on utilise donc normalement phpMyAdmin par une fonction candidats() dans un script vote/php/candidats.php. La liste obtenue est dans l’ordre des numéros de membres. Pour l’afficher sur les bulletins de vote, il faut la mettre dans un ordre aléatoire pour éviter de favoriser certains candidats selon leur place, Ce tirage au sort est fait à 3 endroits: pour la présentation en ligne des candidats, pour le formulaire de vote en ligne et pour l’impression des documents de vote envoyés aux membres recevant l’Information Cent Cols (ICC) par la poste.

Programme de vote

Le vote lui-même est fait par le script /www/vote/php/index.php, qui réside dans un dossier exigeant un accès sécurisé (https) via une règle Rewrite dans un fichier .htaccess. Ce script fonctionne successivement selon 3 modes:
Dans le mode 1, il génère un ordre aléatoire des candidats (sauvegardé comme variable de session), il affiche des instructions et présente un bulletin de vote sous forme de formulaire à cocher
Dans le mode 2, il affiche les choix faits sous le mode 1 et permet soit de les corriger (en revenant au mode 1), soit de les confirmer (ce qui passe au mode 3)
Dans le mode 3, le vote est codé sous forme d’une chaîne de 0=abstention, 1=oui, 2=non, 3=nul pour les questions, de 0=non coché, 1=coché pour les candidats. Cette chaîne, précédée d’un code aléatoire de 16 lettres, est cryptée selon chacune des (3) clés présentes sur /CCCDynamic/RSA/  puis enregistré dans la table de vote de la BD. La page présente alors au membre le code confidentiel à 16 lettres qui, après le dépouillement, lui permettra de vérifier que son vote a bien été pris en compte.