[Cocorico] avancement du 16/11/2016

Bonjour,

le projet « Cocorico » (la plateforme de vote) avance à vive allure, notamment en raison de son utilisation pour le 1er tour de LaPrimaire.org qui s’est terminé le 6/11 ! Un article plus détaillé sur le déroulement de ce premir tour sera publié par la suite (comprendre : quand j’aurais eu le temps de l’écrire). Voilà déjà un récapitulatif sommaire des changements apportés depuis le 6/10.

Merci à Thibauld pour son travail d’intégration/test dans LaPrimaire.org.

Les résultats de ce premier tour sont disponibles ici :

1. Passage à l’échelle

De grosses portions du code ont été réécrites pour répondre à des problèmes de performance/passage à l’échelle. Notamment le service qui gère l’enregistrement des bulletins de vote dans la blockchain (cf 7.).

Au final, le 1er tour aura permis d’effectuer 53 000 votes, soit presque 160 000 transactions blockchain. C’est l’équivalent de 3 jours complets de fonctionnement mondial de la blockchain Ethereum. Ce qui classe très probablement ce 1er tour dans le top des plus « grosses » applications blockchain réalisées à ce jour.

2. Cache entre l’API Web et la blockchain

Une fois le vote terminé, la récupération des résultats et l’exploration de l’urne numérique était relativement lente/couteuse : chercher/trouver/récupérer plusieurs milliers de transactions blockchain a chaque affichage de page s’est révélè être trop couteux.

Un système de cache a été mis en place pour éviter que chaque chargement de page de résultat aille interroger directement la blockchain.

Ce cache ne concerne que la lecture des données de la blockchain une fois le vote terminé.

3. Modération automatique

Plusieurs attaques ont été constatées pendant le déroulement du 1er tour de LaPrimaire.org. Je ne rentrerais pas dans les détails ici, mais pour faire simple :

  • deux vecteurs d’attaque ont été décelés dans l’API Web, notamment pour tenter de forger de fausses identités, probablement dans le but de bourrer les urnes;
  • un autre, plus générique, a été décelé dans des tentatives de bruteforce pour se connecter aux serveurs en tant qu’administrateur ;
  • enfin, il y’a également eu des tentatives de vol de mon compte Facebook ou d’autres comptes (Dropbox, email) des organisateurs de LaPrimaire.org.

Bien qu’aucune de ces attaques n’aie à priori réussie, elles représentaient un risque inutile et, surtout, utilisaient énormément de ressources. Certaines IPs avaient par exemple tenté plusieurs dizaines de millier d’authentifications invalides…

Un système de modération automatisée a été mis en place pour couper le traffic venant d’adresses IP « suspicieuses ». La documentation correspondante est ici.

Il est également possible de blacklister/whitelister manuellement des adresses IP via l’interface d’admin.

4. Gestion du temps de vie des sessions

Pour des raisons de sécurité, les utilisateurs avaient 10 minutes pour voter. Au delà de cette limite, leur jeton d’identité n’était plus valide. Ce cas précis n’était pas géré dans l’interface, et un vote effectué avec un jeton d’identité périmé - bien que n’étant jamais enregistré - faisait entrer l’application Web dans un état dégénéré.

Cela a également provoqué un certain nombre de faux positifs de modération automatisée, et certains utilisateurs (une infime minorité) ont été blacklistés à tort (ils ont ensuite été dé-blacklistés à la main).

Pour éviter ces deux problèmes, l’application Web détecte maintenant que le jeton d’identité est périmé et prévient l’utilisateur qu’il n’a pas/plus le droit de voter.

5. Support d’Opéra

Opéra est maintenant supporté en version 41.

6. Rotation des fichiers de log

Les fichiers de logs sont aujourd’hui archivés jour par jour, pour éviter d’avoir des fichiers de log de plusieurs Go (pendant le 1er tour, certains fichiers de log ont atteints plus de 30Go).

7. Réécriture complète du service d’enregistrement des bulletins sur la blockchain

En cas de plantage, l’implémentation précédente du service d’enregistrement des bulletins de vote sur la blockchain n’était pas très résiliente. Par exemple, les bulletins en cours de traitement lors du plantage avaient de forte chance de ne pas être traités correctement lorsque le service récupérait/redémarrait (un certain nombre de sécurités étant en place, ça ne pouvait pas donner lieu à un double vote mais plutot à des bulletins bloqués).

Une infime minorité de bulletins sont concernés (ça a relativement peu planté vu que je ne dormais quasiment pas pour tout mettre sur pause au moindre problème :slight_smile:). Mais, au delà d’un plantage éventuel, il était primordial de pouvoir redémarrer ce service (après une mise à jour par exemple) sans avoir ce genre de soucis.

Le traitement de chaque bulletin de vote est maintenant divisé en étapes bien séparées et indépendantes, et lorsque le service redémarre il peut reprendre à l’étape correspondante pour chaque bulletin.

8. Réécriture en ES6

Le code de l’API Web et des services a été entièrement réécrit en EcmaScript6, un standard JavaScript plus moderne, pour une meilleure lisibilité/maintenabilité.

A votre disposition si vous avez des questions !

11 « J'aime »

Merci beaucoup pour cette com au petit oignons encore une fois. J’ai pas de question car j’ai pas tout lu mais déjà un gros merci.

Merci Jean-Marc, c’est vraiment super ce que tu as fait avec l’équipe de la Primaire.
J’ai trouvé l’utilisation du « jugement majoritaire » particulièrement osée et pertinente (même si aucun rapport avec cocorico) !

Pour le 2nd tour, tout le process lié au jugement majoritaire sera géré par Cocorico.

2 « J'aime »

ambiance pour les attaques ! Ca va ?
Merci beaucoup pour ton point d’avancement. Pas tout compris. Mais ça a l’air top.
Des news de france connect ?
J’espère qu’on aura le plaisir de se voir bientôt en chair et en os ;-).
Bon Strasbourg !

On verra au hackathon demain :slight_smile:

1 « J'aime »

Tu peux nous en dire plus sur ce hackathon de demain ?

http://opendemocracynow.net/hackathons/hackathon5

1 « J'aime »

Je suggère à tous de passer par l’expérience de vote, sur la forme, et aussi sur le fond (tirage au sort, jugement majoritaire).
Une question : à un moment ma connexion étant trop lente (en campagne en zone blanche), j’ai interrompu mon vote, et je me suis reconnecte avec le même log in envoyé par sms une heure apres.
QUESTION La j’ai eu l’impression d’un certain cafouillage, est-ce qu’on peut voter en plusieurs fois ou ca pose des pbs de sécurité?
En cas de tentative de hack, peut-on identifier les sources?

Je pense que tu fait parti de l’infime minorité des personnes qui ont rencontré ce genre de soucis. Ton histoire ressemble à ce qui est expliqué dans les points 4 et 7 du premier post.

Ca pose le problème de la qualité de la connexion (en milieu rural notamment).
Pour gérer ce type de vote, et les imprévus qui vont avec, combien de personnes ressources minimum?
Aussi pas tout compris sur le dépouillement. Doit-il etre confié à plusieurs personnes validateurs repérés selon l’usage blockchain?

Non. Il y’a plusieurs niveaux de vérification.
Le seul moyen de voter deux fois, c’est d’avoir deux identités.

Dans le cas de LaPrimaire.org, on peut avoir deux identités avec 2 emails, 2 cartes SIMs, 2 IPs, etc…

On log les IPs et on les blackliste en cas d’un trop grand nombre de tentatives.
Pour LaPrimaire.org, il y’a eu 450+ IPs « suspicieuses » dont 20 blacklistées.

Bonjour Jean-Marc

Concernant le premier tour de LaPrimaire.org, j’aimerais pouvoir consulter le détail des votes par votant (5 votes par votant normalement), comment puis-je trouver ces données ?

Merci !

Ca me semble assez facile pour certains quand même : adresse professionnelle, téléphone pro, ordi + smartphone pour les IP …
Après ce n’est pas la majorité des gens et sur une grande échelle ça ne doit pas jouer bcp mais c’est vrai qu’un autre système serait quand même bien.

La procédure étant anonyme, on ne sait pas mettre en relation un utilisateur, le fait d’avoir voté et le bulletin de vote lui même. C’est rendu encore plus dur par le fait que chaque votant faisait 5 votes, et qu’on ne peut donc pas faire à posteriori la différence entre 5 votants qui votent une fois ou 1 votant qui vote 5 fois.

Il est donc impossible d’avoir les « votes par votant ». Mais c’est donc une bonne chose.

On peut par contre consulter la liste des bulletins de vote par candidat. Liberté à LaPrimaire.org de diffuser cette information qui leur a été rendue disponible.

Pour le 2nd tour, le processus de jugement majoritaire sera complètement intégré dans Cocorico : les votants ne feront plus 5 votes, mais un seul vote ou ils noteront les 5 candidats. Donc on aura un bulletin de vote par votant, avec dans ce bulletin les notes données à chacun des 5 candidats. Cela permettra de pouvoir faire une analyse statistique de la répartition des notes/votant.

Je ne sais pas si LaPrimaire.org communiquera sur leur analyse sur ce point. Mais je sais que l’impact n’est à priori pas significatif.

C’est là ou FranceConnect apporte de meilleures garanties.

2 « J'aime »

Si je comprends bien, on ne sait pas combien de votants ont voté 1 fois, combien ont voté 5 fois… ni même s’il y en a qui ont voté 50 ou 500 fois, c’est grave non ?

Dans l’article, democratech précise : « S’agissant des 5% restant votants (votes issus de citoyens qui n’ont pas voté 5 fois), leurs votes sont équitablement repartis entre les 12 candidat(e)s. » Confirmez-vous qu’il s’agit d’un mensonge et qu’en réalité personne ne peut le savoir ?

Merci !

Ca n’est pas par ce Cocorico ne permet pas à posteriori de faire la différence entre 1 personne qui vote 5 fois et 5 personnes qui votent 1 fois que 1) LaPrimaire.org ne fait pas la différence (et en l’occurrence, ils le font et c’est expliqué dans leur article) et 2) une personne peut voter « 50 ou 500 fois ».

Non. Ca n’est pas du tout un mensonge. LaPrimaire.org sait « qui » a voté sur quel vote (/candidat) et peut donc s’assurer que tous les candidats ont reçu le même nombre de votes.

Encore une fois, le fait de ne pas faire « au moins 5 votes » et le fait de bourrer les urnes d’un vote avec plusieurs bulletins sont deux choses complètement différentes.

Donc on sait :

  • qu’il n’y a à priori pas eu de bourrage d’urne
  • combien de personnes ont voté pour chacun des candidats
  • qu’il y’a une différence négligeable dans le nombre de bulletins de vote par candidat

Ah désolé Jean-Marc, j’avais cru en lisant l’article de LaPrimaire que ce vote électronique était aussi transparent qu’un vote physique, donc pas qu’il reposait sur la bonne foi de l’organisateur. Et moi ce que j’y lis, c’est qu’on n’a pas eu le temps de mettre en place un mécanisme de sécurité, ce qui ne me rassure pas ; après, en tant que concepteur vous savez sans doute pourquoi il n’y a pas lieu de s’inquiéter mais, de mon point de vue extérieur, je regrette de ne pas avoir plus d’informations pour en juger.

Par exemple, on apprend que la génération des lots est dynamique. Ce que j’en comprends c’est que, en imaginant que LaPrimaire ait truqué le vote en initiant la blockchain avec, mettons, 200 votes en faveur d’une candidate, l’algorithme camouflerait automatiquement la triche. Dans ce scénario je n’aurais aucun moyen de détecter la fraude n’est-ce pas ?

Bien entendu, je ne dis pas ça pour accuser qui que ce soit mais simplement pour bien comprendre les limites du vote électronique comparé au vote physique. Donc merci beaucoup pour vos précisions !

1 « J'aime »

La répartition statistique des votes n’a rien à voir avec de la sécurité. Et il n’y a pas de confiance à avoir dans les organisateurs, mais dans les maths. Si effectivement les candidats ont reçu le même nombre de vote (à une marge négligeable prêt) et que le résultats n’ont pas été affectés, alors où est le problème ?

Tous les chiffres nécessaires au fait de prouver que cet impact est négligeable étant disponibles, il serait plus simple de vérifier les calculs des organisateurs avant d’évoquer une fraude/faille sans aucune preuve. Et j’espère que des gens vont effectivement faire ce travail correctement :slight_smile:

Il serait donc tout aussi possible d’avoir triché avec 1000 bulletins dont 800 sont en défaveur de 4 candidats et 200 en faveur du 5ème. Donc le système de création des lots n’est pas en cause.

Le fait que chaque votant soit effectivement un humain réel et unique l’est. C’est pour ça qu’il faut utiliser FranceConnect, et qu’il est regrettable à la fois que l’on n’y ai pas encore accès (mais des initiatives réussies telles que LaPrimaire.org vont faciliter cet accès) et que ses détracteurs commencent à se rentre compte des vrais problèmes et de leurs priorités.

LaPrimaire.org a d’ailleurs prévu de donner accès à la page d’inspection de l’urne numérique avec la possibilité de vérifier son bulletin avec la preuve de vote. Mais comme c’est la première fois qu’un tel système en place, il n’est pas exclu qu’il y’ai des bugs et des faux positifs.

Tu es plus en train de chercher les limites d’une organisation avec 2 volontaires bénévoles que les limites du vote en ligne lui même :slight_smile:. Ni LaPrimaire.org ni moi-même ne considérons que le 1er tour est représentatif de ce qu’on a de mieux en stock ou de ce qu’il est possible de faire de mieux dans l’absolu. On a pas nécessairement eu le temps de faire tout ce qu’on voulait faire, et on travaille pour que le 2nd tour soit plus proche de l’état de l’art.

Et les inquiétudes que tu formules pourraient d’ailleurs également être opposées au vote papier, comme le rappelle l’article posté ci-dessus.

Les données peuvent être erronées : c’est pour ça qu’il y’a les preuves de vote.
Mais combien les ont téléchargées ?
Combien iront les vérifier lorsque ça sera possible ?
Comment faire la différence entre le fait que les gens ne le fassent pas par ce que c’est nouveau et qu’ils ne comprennent pas encore l’intérêt, et le fait qu’il y’a effectivement eu un problème de « sécurité » ?

Je pense qu’une fois le système de vote en ligne officiellement en place, il faudra plusieurs années pour que les gens se l’approprient et qu’un tel système de vérification apporte les garanties escomptées. Mais c’est un problème d’acculturation plus qu’un problème technique. Et j’espère - naïvement peut-être - que les énergies de chacun seront utilisées à bon escient en contribuant à cet acculturation plutôt qu’à remettre en cause sans un minimum de rigueur la science qu’il y a derrière.

Aujourd’hui, il est beaucoup trop tôt pour affirmer ce qui marche et ce qui ne marche pas.
C’est pour ça qu’il faut expérimenter, et c’est ce qu’a permis LaPrimaire.org et ils ont pris un risque énorme. Et que la critique, si elle se veut constructive et utile, doit selon moi se faire avec le même effort de rigueur que les travaux menés jusqu’ici. Par exemple, la construction pseudo-aléatoire des lots de candidats du 1er tour fait l’objet d’un papier de recherche qui sera bientôt publié. Et j’espère qu’il en sera de même pour tous les autres aspects de ce vote.

Collectivement, nous devons donc être suffisamment rigoureux et pragmatiques pour demander plus qu’un post de quelques lignes sur ce forum avant de remettre en cause tout le travail technique fait depuis 1 an. Ca n’est pas un jugement sur le contenu lui même, mais sur la méthode qui doit impérativement rester scientifique.

Je ne remets pas en cause qu’il existe des doutes légitimes (j’en ai moi même sur tout un tas d’autres aspects de ce qui a été fait). Je dis juste qu’un doute légitime n’est pas nécessairement un doute raisonnable, et qu’un doute raisonnable n’est lui même pas suffisant pour faire avancer le problème. J’estime que la vérification du travail effectué doit se faire avec autant - si ce n’est plus - de rigueur que ledit travail si nous voulons qu’elle soit utile. Et je ne doute pas que chacun ici veuille qu’elle soit utile :slight_smile:

8 « J'aime »

Bonjour @Jean-Marc_Le_Roux, est-ce que vous pouvez publier les 32 685 bulletins de vote du 2e tour de LaPrimaire.org ?