A place to cache linked articles (think custom and personal wayback machine)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.html 16KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. <!doctype html><!-- This is a valid HTML5 document. -->
  2. <!-- Screen readers, SEO, extensions and so on. -->
  3. <html lang="fr">
  4. <!-- Has to be within the first 1024 bytes, hence before the `title` element
  5. See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
  6. <meta charset="utf-8">
  7. <!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
  8. <!-- The viewport meta is quite crowded and we are responsible for that.
  9. See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
  10. <meta name="viewport" content="width=device-width,initial-scale=1">
  11. <!-- Required to make a valid HTML5 document. -->
  12. <title>Considérations générales sur le vote en ligne (archive) — David Larlet</title>
  13. <meta name="description" content="Publication mise en cache pour en conserver une trace.">
  14. <!-- That good ol' feed, subscribe :). -->
  15. <link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
  16. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  17. <link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
  18. <link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
  19. <link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
  20. <link rel="manifest" href="/static/david/icons2/site.webmanifest">
  21. <link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
  22. <link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
  23. <meta name="msapplication-TileColor" content="#f7f7f7">
  24. <meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
  25. <meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
  26. <meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
  27. <!-- Documented, feel free to shoot an email. -->
  28. <link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
  29. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  30. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  31. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  32. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  33. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  34. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  35. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  36. <script>
  37. function toggleTheme(themeName) {
  38. document.documentElement.classList.toggle(
  39. 'forced-dark',
  40. themeName === 'dark'
  41. )
  42. document.documentElement.classList.toggle(
  43. 'forced-light',
  44. themeName === 'light'
  45. )
  46. }
  47. const selectedTheme = localStorage.getItem('theme')
  48. if (selectedTheme !== 'undefined') {
  49. toggleTheme(selectedTheme)
  50. }
  51. </script>
  52. <meta name="robots" content="noindex, nofollow">
  53. <meta content="origin-when-cross-origin" name="referrer">
  54. <!-- Canonical URL for SEO purposes -->
  55. <link rel="canonical" href="https://voter.cliss21.org/consid%C3%A9rations-g%C3%A9n%C3%A9rales-sur-le-vote-en-ligne/">
  56. <body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">
  57. <article>
  58. <header>
  59. <h1>Considérations générales sur le vote en ligne</h1>
  60. </header>
  61. <nav>
  62. <p class="center">
  63. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  64. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  65. </svg> Accueil</a> •
  66. <a href="https://voter.cliss21.org/consid%C3%A9rations-g%C3%A9n%C3%A9rales-sur-le-vote-en-ligne/" title="Lien vers le contenu original">Source originale</a>
  67. </p>
  68. </nav>
  69. <hr>
  70. <p>Il nous semble important de préciser ici que <b>GvoT</b> est une solution de vote en ligne et que, à ce titre, il faut être conscient des limites d’un tel outil.</p>
  71. <p>A fortiori, <b>GvoT</b> est conçu pour des besoins typiques d’un contexte de prises de décisions formelles. Le caractère d’urgence et de force majeur que nous impose la crise du COVID19 pourrait sembler justifier quelques libertés prises avec la forme d’un scrutin. Après tout, pourrait on se dire, « <i>papier ou électronique, quelle différence cela fait pour les participants au vote ?</i> »</p>
  72. <p>Néanmoins il se trouve qu’un scrutin électronique n’a pas les propriétés d’un scrutin à bulletin secret dans une urne transparente et il faut en être conscient. À ce titre, il n’offre pas du tout les mêmes garanties (voir par exemple l’<a href="https://wiki.april.org/w/Discussion_vote_%C3%A9lectronique">excellente synthèse</a> de l’<a href="https://april.org/">April</a> sur le sujet). Le fait que <b>GvoT</b> soit un logiciel libre ne protège pas de tous les risques de manipulation.</p>
  73. <h2>Difficultés techniques</h2>
  74. <h3>Compromis contrôlabilité/traçabilité</h3>
  75. <p>La nature d’un scrutin en ligne est différente de celui impliquant une urne physique. En particulier, il n’existe aucune méthode connue permettant à la fois :</p>
  76. <ul><li>Le <b>contrôle</b> du scrutin par les participant⋅e⋅s (vérifier que ce tous les votes sont pris en compte et seulement eux).</li><li>La <b>non-traçabilité</b> du scrutin (préservation de l’anonymat des participant⋅e⋅s).</li></ul>
  77. <p>En l’état de l’art, cette aporie est un problème théorique ouvert qui ne possède pas à notre connaissance de solution technologique (y compris à base de chiffrement et/ou autre blockchain).</p>
  78. <p>Le chiffrement n’est pas une solution, notamment car il ne protège pas contre le bourrage d’urnes. Contrôler un scrutin ne se limite pas à ce que je contrôle que mon expression est prise en compte. Cela implique aussi de contrôler que l’expression de chacun et seulement elle est prise en compte.</p>
  79. <p>La conséquence est qu'en cas de réclamation, la seule manière possible d’établir les faits est d’ouvrir le scrutin afin que <b>chacun</b> puisse <b>contrôler</b> que <b>tous les votes</b> sont pris en compte et <b>seulement eux</b>. Cela s’apparenterait à « rejouer » le scrutin, à main levée.</p>
  80. <p>L’ouverture du scrutin doit donc pouvoir être demandée à l’organisateur⋅ice. L’intégralité des personnes devraient alors recevoir un accès à l’intégralité des données propres au scrutin concerné.</p>
  81. <h3>Dépendance à la technologie email</h3>
  82. <p>Pour des raisons de rapidité d’organisation et d’interopérabilité, l’envoi des pouvoirs se fera par courriel.</p>
  83. <p>Un hébergeur de <b>GvoT</b> devrait s’engager à une obligation de moyen pour permettre au mieux la délivrance des pouvoirs aux adresses destinataires par courriel.</p>
  84. <p>Néanmoins, du fait de la nature décentralisée des protocoles de courriels et de la difficulté majeure de vérifier des identités en ligne :</p>
  85. <ul><li>Les hébergeurs ne peuvent garantir que les courriels seront <b>présentés</b> aux personnes jugées légitimes. Hors de notre périmètre, nous ne contrôlons pas que le courriel atterrit dans le dossier des courriels à lire en urgence.</li><li>Les hébergeurs ne peuvent garantir que les courriels envoyés <b>seront lus</b> par les personnes jugées légitimes. Hors de notre périmètre nous ne contrôlons pas que les personnes relèvent la bonne boite.</li><li>Les hébergeurs ne peuvent garantir que les courriels envoyés seront lus <b>par les seules personnes</b> jugées légitimes. Rien n’empêche les fuites d’information et donc la fuite des pouvoirs.</li></ul>
  86. <h2>Conseils aux usagers</h2>
  87. <p>La coopérative Cliss XXI reconnaît la nature particulièrement sensible des données et des résultats d’un scrutin d’assemblée générale, de modification de statut ou d’un règlement intérieur.</p>
  88. <p>À ce titre elle insiste sur ce qui fait la bonne tenue d’un scrutin à travers 3 axes : ouverture, transparence et neutralité.</p>
  89. <p>Ouverture car le logiciel est libre. Transparence des pratiques et reconnaissance des limitations existantes. Neutralité par déontologie, en tant que prestataire technique d’hébergement tel que défini par la loi sur la confiance en l’économie numérique (LCEN).</p>
  90. <h3>Ouverture</h3>
  91. <p><b>GvoT</b> est un logiciel libre : sous licence <a href="https://forge.cliss21.org/cliss21/gvot/src/branch/master/LICENSE">GNU Affero GPL</a>. Une disposition spéciale de cette licence est que tout utilisateur⋅ice du logiciel est en droit d’obtenir une copie de son code source avec les permissions usuelles du logiciel libre (droits d’usage, d’étude, de modification, de redistribution).</p>
  92. <p>Le code du logiciel est disponible sur la <a href="https://forge.cliss21.org/cliss21/gvot">forge de Cliss XXI</a> .</p>
  93. <p>Un hébergeur de <b>GvoT</b> devrait s’engager sur l’honneur à ce que le code utilisé pour le vote soit celui publié et librement auditable par ailleurs.</p>
  94. <p>Un hébergeur de <b>GvoT</b> devrait s’engager sur l’honneur à ce que l’accès aux données du vote NE SOIT accessible à aucune autre application que la présente plateforme hébergée ainsi que le socle technique qui la porte.</p>
  95. <p>La procédure de vote et d’administration du vote sur le site web devrait être protégée par le chiffrement <b>TLS</b> en vigueur au moment du vote (TLS version 1.2 ou 1.3 au moment du COVID19). Il s’agit d’un standard international recommandé et conforme aux préconisations de l’ANSSI.</p>
  96. <h3>Transparence</h3>
  97. <p>Un hébergeur de <b>GvoT</b> devrait reconnaître les limites technologiques et déontologiques qui affectent le vote en ligne pour un scrutin à bulletin secret.</p>
  98. <p>Un hébergeur de <b>GvoT</b> devrait s’engager sur l’honneur à ce que les données du scrutin soient recueillies dans le seul but décrit en introduction du scrutin. En conséquence ces données ainsi que celles recueillies dans le cadre du vote ne seraient pas utilisées à d’autres fins ni transmises à un tiers.</p>
  99. <p>Un hébergeur de <b>GvoT</b> devrait s’engager sur l’honneur en accord avec l’organisateur, à ce que ces données <b>soient détruites</b> une fois le scrutin passé, et dans tous les cas au plus tard un certain nombre de jours après la fin de la tenue du scrutin.</p>
  100. <p>Dans tous les cas, les participant⋅e⋅s disposent d’un droit d’accès, de modification, de rectification et de suppression des données les concernant (loi « Informatique et Liberté » du 6 janvier 1978).</p>
  101. <p>Un hébergeur de <b>GvoT</b> devrait s’engager sur l’honneur à ne pas cacher la détection d’un comportement anormal s’il était détecté (piratage, fuite accidentelle d’informations, etc.).</p>
  102. <h3>Neutralité</h3>
  103. <p>Un hébergeur de <b>GvoT</b> devrait s’engager à une obligation de moyens pour permettre la tenue du scrutin dans les meilleurs conditions.</p>
  104. <p>Cela implique, de façon non exhaustive à :</p>
  105. <ul><li>suivre l’expédition des courriels d’annonce,</li><li>veiller à la disponibilité de la plateforme aux heures ouvrées pendant la durée du scrutin,</li><li>répondre aux demandes d’assistance des utilisateur⋅ices.</li></ul>
  106. <p>Un moyen d’accéder à l’assistance devrait être précisée sur la plateforme de vote ainsi que dans chaque courriel expédié aux participant⋅e⋅s.</p>
  107. <p>Un hébergeur de <b>GvoT</b> devrait s’engager sur l’honneur à ne procéder à aucune intervention qui soit de nature à biaiser l’issue du scrutin. Les éventuelles interventions se feront uniquement sous la forme d’une assistance avec une éventuelle intervention qui sera strictement proportionnée à la demande de la personne assistée dans le vote.</p>
  108. <p>En cas d’intervention impliquant les données du scrutin, un journal des interventions devrait être tenu avec soin.</p>
  109. </article>
  110. <hr>
  111. <footer>
  112. <p>
  113. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  114. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  115. </svg> Accueil</a> •
  116. <a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
  117. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
  118. </svg> Suivre</a> •
  119. <a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
  120. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
  121. </svg> Pro</a> •
  122. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
  123. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
  124. </svg> Email</a> •
  125. <abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
  126. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
  127. </svg> Légal</abbr>
  128. </p>
  129. <template id="theme-selector">
  130. <form>
  131. <fieldset>
  132. <legend><svg class="icon icon-brightness-contrast">
  133. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
  134. </svg> Thème</legend>
  135. <label>
  136. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  137. </label>
  138. <label>
  139. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  140. </label>
  141. <label>
  142. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  143. </label>
  144. </fieldset>
  145. </form>
  146. </template>
  147. </footer>
  148. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  149. <script>
  150. function loadThemeForm(templateName) {
  151. const themeSelectorTemplate = document.querySelector(templateName)
  152. const form = themeSelectorTemplate.content.firstElementChild
  153. themeSelectorTemplate.replaceWith(form)
  154. form.addEventListener('change', (e) => {
  155. const chosenColorScheme = e.target.value
  156. localStorage.setItem('theme', chosenColorScheme)
  157. toggleTheme(chosenColorScheme)
  158. })
  159. const selectedTheme = localStorage.getItem('theme')
  160. if (selectedTheme && selectedTheme !== 'undefined') {
  161. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  162. }
  163. }
  164. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  165. window.addEventListener('load', () => {
  166. let hasDarkRules = false
  167. for (const styleSheet of Array.from(document.styleSheets)) {
  168. let mediaRules = []
  169. for (const cssRule of styleSheet.cssRules) {
  170. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  171. continue
  172. }
  173. // WARNING: Safari does not have/supports `conditionText`.
  174. if (cssRule.conditionText) {
  175. if (cssRule.conditionText !== prefersColorSchemeDark) {
  176. continue
  177. }
  178. } else {
  179. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  180. continue
  181. }
  182. }
  183. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  184. }
  185. // WARNING: do not try to insert a Rule to a styleSheet you are
  186. // currently iterating on, otherwise the browser will be stuck
  187. // in a infinite loop…
  188. for (const mediaRule of mediaRules) {
  189. styleSheet.insertRule(mediaRule.cssText)
  190. hasDarkRules = true
  191. }
  192. }
  193. if (hasDarkRules) {
  194. loadThemeForm('#theme-selector')
  195. }
  196. })
  197. </script>
  198. </body>
  199. </html>