FR 3037702 A1 20161223 FR 1555704 A 20150622 INRIA 172_121885 BITBALLOT.FRD.docx 1 Machine de vote électronique et infrastructure comportant une telle machine L'invention concerne une machine de vote électronique. Par vote, on entend ici toute expression d'un voeu. Un vote peut concerner une élection au sens large ou un sondage. Le vote peut correspondre à la sélection d'un élément parmi un ensemble d'éléments possibles, ou à un élément librement exprimé. On connaît des systèmes de vote dit "en ligne", où les votants communiquent avec une machine qui agit à la manière d'un serveur pour voter. Par exemple, le serveur de vote peut prendre la forme d'une application web, exécutée sur un serveur web, à laquelle les votants accèdent par l'intermédiaire d'un navigateur. De tels systèmes sont largement utilisés aujourd'hui. Les systèmes de vote en ligne, et plus généralement les systèmes de vote électronique fonctionnant selon une organisation centralisée, sont peu efficaces lorsqu'il s'agit de garantir le secret des votes. Dans des systèmes de vote centralisés en effet, une même machine concentre l'ensemble des données de vote, c'est-à-dire les voeux exprimés par les votants et des données d'identification de ces votants. Techniquement, il est très compliqué dans ce cas de faire en sorte que les votes des participants ne puissent absolument pas être retrouvés, c'est-à-dire d'établir une relation entre l'identifiant d'un utilisateur et une sous-partie au moins des résultats du vote. On a proposé depuis quelques années déjà des systèmes de vote électronique fonctionnant selon une organisation décentralisée. Pour assurer la confidentialité des données, la plupart de ces systèmes mettent en oeuvre des procédés de chiffrement dits "homomorphiques". Ces procédés sont particulièrement coûteux en calculs. En pratique, ils sont réservés à des votes avec des participants peu nombreux, de l'ordre au plus de quelques dizaines. L'invention vise à améliorer la situation. 3037702 2 La machine de vote électronique proposée comprend de la mémoire pour stocker une liste rangée d'identifiants, et au moins un tableau de données en attente avec un pointeur vers un identifiant de la liste rangée d'identifiants, une interface de communication, une unité centrale d'ordinateur capable d'interaction avec la mémoire et l'interface de 5 communication pour exécuter une première fonction capable de traiter un message en vérifiant une première condition portant sur une comparaison d'un contenu dudit message aux identifiants de la liste rangée d'identifiants respectivement, et, le cas échéant, en complétant le tableau en attente avec des données du message relatives à un vote et une seconde fonction capable de traiter un message en vérifiant une seconde condition portant 10 sur une comparaison du contenu dudit message aux identifiants de la liste rangée d'identifiants, et, le cas échéant, en construisant un message avec l'identifiant de la liste vers lequel pointe le tableau en attente et certaines au moins des données du tableau en attente. La machine comprend en outre un contrôleur agencé pour émettre une requête à destination de machines de vote électronique homologues, la requête portant sur 15 l'identifiant vers lequel pointe le tableau en attente et appeler la première fonction avec chaque message de réponse, appeler la seconde fonction à chaque fois qu'une requête est reçue d'une machine de vote électronique homologue, et modifier conditionnellement le pointeur du tableau de données en attente vers un identifiant de la liste rangée de rang supérieur en fonction des données du tableau en attente. 20 La machine proposée assure à la fois un vote préservant l'anonymat de la source et un dépouillement du scrutin. Le dépouillement est peu coûteux en ressources machine, même dans le cas d'un scrutin impliquant un grand nombre de machines homologues. Le dépouillement converge rapidement, avec assez peu d'échanges de messages entre les 25 machines homologues en comparaison des procédés classiques. Le dépouillement conserve l'anonymat. On propose également une infrastructure de vote électronique comprenant plusieurs machines de vote homologues du type proposé précédemment. 30 On propose enfin un procédé de vote électronique comprenant les étapes suivantes : - stocker une liste rangée d'identifiants, et au moins un tableau de données en attente avec un pointeur vers un identifiant de la liste rangée d'identifiants ; 3037702 3 - recevoir une requête d'une machine de vote électronique, la requête portant sur l'identifiant vers lequel pointe le tableau en attente, - vérifier une condition portant sur une comparaison du contenu de la requête aux identifiants de la liste rangée d'identifiants, et, le cas échéant, construire un message en 5 réponse avec l'identifiant de la liste vers lequel pointe le tableau en attente et certaines au moins des données du tableau en attente, - modifier conditionnellement le pointeur du tableau de données en attente vers un identifiant de la liste rangée de rang supérieur en fonction des données du tableau en attente. 10 D'autres caractéristiques et avantages de l'invention apparaîtront à l'examen de la description ci-après, et des dessins annexés, sur lesquels : - La figure 1 représente un diagramme fonctionnel illustrant une infrastructure de vote 15 électronique dans un premier état de fonctionnement ; - La figure 2 représente un diagramme fonctionnel illustrant l'infrastructure de la figure 1 dans un second état de fonctionnement ; 20 - Les figures 3 à 6 représentent des diagrammes fonctionnels illustrant respectivement un contrôleur, un configurateur, un gestionnaire et un module de vote pour une infrastructure de vote électronique ; - La figure 7 représente un ordinogramme illustrant le fonctionnement d'une 25 infrastructure de vote électronique ; - La figure 8 représente un ordinogramme illustrant la mise en place d'un scrutin électronique ; 30 - La figure 9 représente un ordinogramme illustrant le fonctionnement d'un contrôleur d'infrastructure de vote électronique dans une phase de mise en place d'un scrutin ; 3037702 4 - La figure 10 représente un ordinogramme illustrant le fonctionnement d'un configurateur d'infrastructure de vote électronique dans une phase de mise en place d'un scrutin ; 5 - La figure 11 représente un ordinogramme illustrant le fonctionnement d'un gestionnaire d'infrastructure de vote électronique dans une phase de mise en place d'un scrutin ; - La figure 12 représente un ordinogramme illustrant le fonctionnement d'une machine de vote d'une infrastructure de vote électronique dans une phase de vote ; 10 - Les figures 13 et 14 représentent des ordinogrammes illustrant le fonctionnement d'une machine de vote d'une infrastructure de vote électronique dans une phase de dépouillement ; 15 - La figure 15 représente un schéma fonctionnel d'une fonction d'encapsulation pour une machine de vote d'une infrastructure de vote électronique ; et - La figure 16 représente un schéma fonctionnel d'une fonction de vérification pour une machine de vote d'une infrastructure de vote électronique. 20 Les dessins annexés contiennent des éléments de caractère certain et pourront par conséquent non seulement servir à compléter l'invention, mais aussi contribuer à sa définition, le cas échéant. 25 La figure 1 montre une infrastructure de vote électronique 1 dans un premier état de fonctionnement. Ce premier état de fonctionnement correspond à une phase d'établissement de l'infrastructure de vote électronique. L'infrastructure 1 est organisée sur une infrastructure de réseau informatique. Le réseau 30 informatique comprend des machines équipées d'éléments matériels et logiciels qui permettent aux machines de l'infrastructure 1 de communiquer les unes avec les autres. Ces communications s'opèrent selon un ou plusieurs protocoles réseau de niveau inférieur quelconques. 3037702 5 Les machines de l'infrastructure 1 communiquent entre elles selon un protocole de niveau supérieur qui permet des échanges de données entre les machines de l'infrastructure 1. 5 L'infrastructure 1 comprend au moins une machine formant un contrôleur 10. Le contrôleur 10 de l'infrastructure 1 organise les processus de vote électronique. Le contrôleur 10 initialise les processus de vote électronique. Le contrôleur 10 définit les processus de vote électronique et les lance. 10 La définition d'un processus de vote électronique comprend en particulier l'établissement d'une liste d'identifiants correspondant à des machines de l'infrastructure réseau autorisées à participer au vote, et de données relatives à l'objet du processus de vote. Contrairement aux systèmes classiques de vote électronique, toute machine de 15 l'infrastructure réseau peut fonctionner en tant que contrôleur 10. L'infrastructure 1 comprend en outre au moins une machine formant un configurateur 20. Le configurateur 20 est plus particulièrement actif dans la configuration d'une topologie pour l'infrastructure 1. Le configurateur 20 fournit à chaque machine de l'infrastructure 1 20 les données nécessaires à l'échange de données relatives au processus de vote. L'infrastructure 1 comprend encore au moins une machine formant un gestionnaire 30. Le gestionnaire 30 prend en charge l'organisation des machines de vote entre elles et la distribution de données de chiffrement. Il s'agit en particulier d'assurer une cohérence et 25 une distribution de clés de chiffrement correspondant à une structure arborescente. En variante, cette tâche peut être réalisée par une autre machine de l'infrastructure, en particulier le configurateur 20. Le contrôleur 10, le configurateur 20 et le gestionnaire 30 forment conjointement un 30 ensemble fonctionnel qui peut être vu comme un serveur dans l'infrastructure de vote électronique 1. 3037702 6 Ici, le contrôleur 10, le configurateur 20 et le gestionnaire 30 correspondent à des équipements, typiquement des unités centrales d'ordinateurs, physiquement distincts les uns des autres. On évite ainsi qu'un même équipement ne concentre toute l'information relative à l'infrastructure 1, aux processus de vote et aux machines de vote. Ceci améliore 5 la sécurité et la confidentialité. En variante, le contrôleur 10, le configurateur 20 et le gestionnaire 30 peuvent correspondre à un même équipement. L'infrastructure 1 comprend en outre une pluralité de machines de vote, par exemple une première machine de vote 42, une seconde machine de vote 44 et une énième machine de 10 vote 46. Ensemble, les machines de vote de l'infrastructure 1 forment un groupe 40 de machines de vote. 15 Les machines du groupe 40 sont capables de communiquer les unes avec les autres. À cette fin, l'infrastructure 1 comprend au moins une machine formant serveur de mise en relation, ou un traqueur 50. Le traqueur 50 maintient des adresses de machines de l'infrastructure de vote, en particulier leur adresse dans l'infrastructure réseau, par exemple une adresse de protocole internet, ou adresse "IP". 20 Le gestionnaire 30 et le configurateur 20 sont de préférence des tiers de confiance. Les machines de l'infrastructure de vote peuvent être reliées à un serveur de temps du réseau pour synchronisation. 25 La figure 2 montre l'infrastructure de vote électronique 1 dans un second état de fonctionnement. Ce second état de fonctionnement correspond à une phase de vote et de dépouillement. Dans ce second état de fonctionnement, le contrôleur 10, le configurateur 20 et le 30 gestionnaire 30 sont absents de l'infrastructure de vote 1. Ils sont inactifs durant la phase de vote et de dépouillement. De préférence, les machines correspondant au contrôleur 10, au configurateur 20 et/ou au gestionnaire 30 sont éteintes, ou du moins indisponibles au sein de l'infrastructure réseau. Ceci rend les données relatives au processus de vote en 3037702 7 cours, dont la liste des identifiants des machines de vote, inaccessibles depuis l'infrastructure réseau. Cela améliore considérablement la sûreté du processus en ce que les données les plus sensibles ne sont accessibles que pendant très peu de temps, uniquement à l'initialisation de l'infrastructure de vote. 5 Dans le second état de fonctionnement, l'infrastructure 1 comporte les machines de vote et le traqueur 50. Dans la mesure où le contrôleur 10, le configurateur 20 et le gestionnaire 30 ne sont pas 10 capables d'écouter les échanges de données à travers l'infrastructure de vote 1, ils peuvent être considérés comme des autorités de confiance. La figure 3 montre un module contrôleur 100 à usage par exemple pour le contrôleur 10 de l'infrastructure 1 de la figure 1. 15 Le module contrôleur 100 comprend un contrôleur principal 110 et une structure de stockage de données 120. Le contrôleur 110 est capable de lire, écrire et traiter des données dans la structure de stockage 120. La structure de stockage 120 maintient au moins temporairement un ensemble de données relatives aux scrutins, y compris des 20 éléments d'identification des votants et des données d'identification de vote. La structure de stockage 120 peut être organisée dans la mémoire vive d'un ordinateur, ou tout autre dispositif à mémoire volatile. Dans ce cas, les données relatives au scrutin en cours sont effacées à mise hors tension du module. Cette mise hors tension peut être programmée pour intervenir à l'issue de la phase d'établissement de l'infrastructure de vote. Cela évite 25 notamment qu'une liste des identifiants de vote ne soit piratée. Le module contrôleur 100 comprend en outre au moins une première interface de communication 140 qui peut être commandée par le contrôleur 110 pour communiquer avec les machines d'une infrastructure réseau, par exemple les machines de l'infrastructure 30 1 de la figure 1. 3037702 8 Optionnellement, le module contrôleur 100 comprend en outre une interface utilisateur 130 qui interagit avec le contrôleur principal 110. L'interface utilisateur 130 peut être de type graphique. 5 Le module contrôleur 100 peut être implémenté sous la forme d'un contrôleur logiciel du type connu sous le nom de "serveur Node.js" exécuté par une unité centrale d'ordinateur. La structure de stockage 120 peut être organisée dans la mémoire vive de l'ordinateur en question. 10 La figure 4 montre un module configurateur 200 à usage par exemple en tant que configurateur 20 de l'infrastructure 1 de la figure 1. Le module configurateur 200 comprend un contrôleur principal 210 et une structure de stockage 220 qui mémorise les données relatives à la fonction de configurateur. Le 15 contrôleur 210 peut lire, écrire et traiter les données dans la structure de stockage 220. De préférence, la structure de stockage 220 est organisée dans de la mémoire volatile. Ceci permet d'améliorer la sécurité du scrutin. Le module configurateur 200 comprend en outre une interface de communication 230 qui 20 peut être commandée par le contrôleur principal 210 pour émettre et recevoir des données au travers d'une infrastructure de vote électronique, par exemple l'infrastructure 1 de la figure 1. Le module configurateur 200 peut prendre la forme d'un serveur de type Node.js qui 25 s'exécute sur une unité centrale d'ordinateur. La structure de stockage 220 peut être organisée dans la mémoire vive de l'ordinateur en question. La figure 5 montre un module de gestion 300 qui peut être utilisé en tant que gestionnaire d'une infrastructure de vote électronique, par exemple le gestionnaire 30 de l'infrastructure 30 1 de la figure 1. Le module de gestion 300 comprend un contrôleur principal 310 et une structure de stockage de données 320 avec laquelle le contrôleur peut interagir, en particulier, pour 3037702 9 lire, écrire et traiter des données. La structure de stockage 320 est de préférence organisée dans de la mémoire volatile. Le module de gestion 300 comprend en outre une interface de communication 330 qui 5 peut être commandée par le contrôleur 310 pour échanger de données au travers d'une infrastructure de vote électronique, par exemple l'infrastructure 1 de la figure 1. Le module de gestion 300 peut être réalisé sous la forme d'un serveur Node.js qui s'exécute sur une unité centrale d'ordinateur. La structure de stockage 320 peut être 10 organisée dans la mémoire vive de cette unité centrale. La figure 6 montre un module de vote électronique 400 à usage par exemple en tant que machine de vote d'une infrastructure de vote électronique, par exemple une machine quelconque du groupe 40 de la figure 1. 15 Le module de vote 400 comprend un contrôleur 410 et une structure de stockage de données 420 avec laquelle le contrôleur principal 410 peut interagir pour lire, écrire et stocker des données. 20 Le module de vote 400 comprend en outre une interface utilisateur 430 qui interagit avec le contrôleur principal 410. L'interface utilisateur 430 peut être de type graphique. Le module de vote 400 comprend en outre une interface de communication 440 qui peut être commandée par le contrôleur principal 410 pour échanger des données à travers une 25 infrastructure de vote électronique, en particulier, l'infrastructure 1 de la figure 1. Le module de vote 400 peut être réalisé sous la forme d'une application javascript, par exemple utilisant une bibliothèque de fonctions de type connu sous le nom de "angular.js" exécuté sur une unité centrale d'ordinateur dans un navigateur internet. La structure de 30 stockage 420 peut être organisée dans la mémoire de stockage de cette unité centrale. Les modules contrôleur 100, configurateur 200, gestionnaire 300 et de vote 400 s'exécutent de préférence sur des machines distinctes de l'infrastructure réseau, comme 3037702 10 cela a été décrit en relation avec la figure 1. Les données sensibles sont distribuées. On diminue le risque qu'une attaque visant l'une de ces machines ne divulgue l'ensemble des données du processus de vote. 5 En variante, certains au moins de ces modules s'exécutent sur une même machine de l'infrastructure réseau. En particulier, une même machine peut fonctionner en tant que contrôleur, gestionnaire, configurateur et/ou machine de vote. Ceci est facilité par le fait que le contrôleur, le gestionnaire et le configurateur n'ont pas besoin d'être actifs une fois le scrutin lancé. 10 La figure 7 illustre différents modes opérationnels d'une infrastructure de vote, en particulier l'infrastructure 1 de la figure 1. Selon un premier mode opérationnel, représenté par le bloc 5, certains au moins des 15 éléments logiciels et matériels d'une infrastructure réseau coopèrent en vue d'organiser un scrutin de vote électronique. Cette opération concerne principalement une ou plusieurs machines de l'infrastructure qui vont agir à la manière d'un serveur d'infrastructure, par exemple l'ensemble formé du contrôleur 10, du configurateur 20 et du gestionnaire 30 de la figure 1. Elle implique une communication initiale entre le serveur d'infrastructure et 20 des équipements destinés à opérer en tant que machines de vote électronique, par exemple les machines du groupe 40 de la figure 1. Selon un second mode opérationnel, illustré par le bloc 7, chaque machine de vote reçoit l'expression d'un vote. Dans un processus de vote classique, l'opération 7 correspond à ce 25 que l'on appelle communément un scrutin ou un sondage. Le vote est purement local. Dans ce mode opérationnel, le serveur d'infrastructure est inactif. L'infrastructure correspond à l'infrastructure de la figure 2. Selon un troisième mode opérationnel, illustré par le bloc 9, les données relatives au 30 scrutin sont rassemblées. Ce mode opérationnel concerne principalement les machines de vote elles-mêmes, le cas échéant mises en relation les unes avec les autres grâce à une machine supplémentaire, par exemple le traqueur 50 de la figure 1. L'opération 9 3037702 11 correspond à ce que l'on appelle un dépouillement dans un scrutin classique. L'infrastructure correspond à l'infrastructure de la figure 2. La figure 8 détaille l'organisation d'un scrutin électronique, par exemple dans 5 l'infrastructure 1 de la figure 1. On établit d'abord des données de configuration relatives au scrutin, ce qui correspond au bloc 52. Les données de configuration comprennent des données relatives à l'objet du vote et des données relatives aux votants, en particulier leur identification dans l'infrastructure 10 de vote électronique. Il s'agit en particulier d'établir une liste d'identifiants de vote telle que chaque votant puisse être associé anonymement à un identifiant de vote. On organise ensuite une structure arborescente qui organise les identifiants de vote. Cela correspond au bloc 54. Dans cette structure arborescente, les machines de vote 15 correspondent aux feuilles d'un arbre n-aire. Entre chaque feuille de l'arbre et la racine de celui-ci se trouvent des noeuds identifiés qui relient différentes branches de l'arbre. On génère ensuite une collection de clés de chiffrement, ici de type symétrique, qui va être utilisée par les machines de vote principalement afin de vérifier et/ou dépouiller les votes. 20 Ceci correspond au bloc 56. La figure 9 illustre une fonction principale pour le contrôleur d'une infrastructure de vote électronique, par exemple le contrôleur 10 de la figure 1, dans un mode de fonctionnement correspondant à la mise en place d'un scrutin. 25 La fonction débute en une étape 900. À l'étape suivante 902, la fonction reçoit une chaîne de caractères SntcStrg correspondant à l'objet du vote exprimé en langage naturel. La chaîne SntcStrg peut être entrée par 30 l'utilisateur d'un contrôleur d'infrastructure, le cas échéant à travers une interface utilisateur, par exemple l'interface 130 de la figure 3, ou une requête de type REST. La chaîne SntcStrg peut correspondre à une question, par exemple. 3037702 12 À l'étape suivante 904, la fonction débute une structure de boucle en initialisant un compteur k à la valeur nulle. À l'étape suivante, étape 906, la fonction reçoit une chaîne de caractères Chce qui 5 correspond à l'expression, en langage naturel, d'une réponse possible à la question de l'étape 902. À l'étape suivante 908, la fonction crée un tableau indexé Answrs[..] dans lequel elle stocke la chaîne Chce de l'étape 906 en tant qu'élément d'index k. 10 À l'étape suivante 910, la fonction incrémente le compteur k, puis retourne à l'étape 906. Les étapes 906 à 910 sont répétées tant que la fonction reçoit des chaînes de caractères correspondant à des réponses possibles à la question qui fait l'objet du vote. Les étapes 904 à 910 correspondent à l'entrée d'un jeu de réponses possibles à la question entrée à 15 l'étape 902. Les étapes 904 à 910 sont optionnelles : le vote peut admettre des réponses libres à la question de l'étape 902. À l'étape suivante 912, la fonction débute une seconde structure de boucle en initialisant un compteur j à la valeur nulle. 20 À l'étape suivante 914, la fonction reçoit un identifiant de votant VtrPubld, par exemple sous la forme d'une chaîne de caractères. L'identifiant VtrPubld correspond à une donnée d'identification publique du votant : c'est sous cet identifiant que le votant est connu de l'organisateur du scrutin. Cet identifiant correspond par exemple à une référence de pièce 25 d'identité, une adresse de courrier électronique, un identifiant de réseau social, par exemple du type connu sous le nom de Facebook, ou même d'un pseudonyme choisi pour le scrutin. La fonction reçoit en outre une adresse VtrPubAdd avec l'identifiant de votant VtrPubld. L'adresse VtrPubAdd permet l'envoi de message pour le votant. L'adresse VtrPubAdd comprend par exemple une adresse de machine de vote, par exemple l'adresse 30 dans l'infrastructure réseau de l'une de la première machine de vote 42, la seconde machine de vote 44 et de la énième machine de vote 46, ou une adresse de courrier électronique. L'adresse VtrPubAdd est optionnelle dans la mesure où l'identifiant de votant VtrPubld peut être mis en relation avec une adresse utilisable pour l'envoi de 3037702 13 message, par exemple lorsque l'identifiant VtrPubld correspond lui-même à une adresse de courrier électronique. À l'étape suivante 916, la fonction mémorise l'identifiant VtrPubld reçu dans un tableau 5 VtrPub[..] en tant qu'élément d'index j. À l'étape suivante 918, la fonction incrémente le compteur j puis retourne à l'étape 914 tant que sont reçus des identifiants de votants, jusqu'à l'expiration d'une période temporelle ou à l'atteinte d'un quota de votants, ou jusqu'à réception d'une indication de fin de liste. La fonction passe ensuite à l'étape suivante 920. Il résulte de la succession des étapes 912 à 918 une liste d'identifiants publics de personnes autorisées à participer au scrutin, stockée dans le tableau VtrPub[..]. À l'étape 920, la fonction reçoit des paramètres relatifs au scrutin, en particulier à son début et à sa fin. Il s'agit par exemple de paramètres définissant une période temporelle de validité du scrutin. Ces paramètres temporels comprennent ici une date StrtDat de début de scrutin et une date EdDat de fin de scrutin. La fonction se termine à l'étape suivante 922. Les étapes 900 à 922 correspondent à la réception de données relatives à la définition d'un scrutin. Cette définition comprend une déclaration de vote, sous la forme de la chaîne 25 SntcStrg, une liste de réponses possibles à cette déclaration, ici rassemblées dans le tableau Answrs[..], une liste de personnes autorisées à participer au scrutin, ici rassemblées dans le tableau VtrPub[..], et une période de validité du scrutin, ici sous la forme d'une date StrtDat de début et d'une date EdDat de fin. 30 L'application décrite ici correspond à une élection classique. Selon l'application envisagée, qui peut être différente, la manière de définir le scrutin peut varier, en particulier en ce qui concerne les données des étapes 902 à 910. 10 15 20 3037702 14 La figure 10 illustre une fonction principale pour le configurateur d'une infrastructure de vote électronique, par exemple le contrôleur 20 de la figure 1, dans un mode de fonctionnement correspondant à une mise en place de cette infrastructure. 5 La fonction débute en une étape 1000. À l'étape suivante 1002, la fonction reçoit une liste d'identifiants de vote VtPvtld, par exemple rassemblés dans un tableau VtrPvt[..]. Le cardinal de la liste des identifiants de vote correspond à celui de la liste des identifiants de votants. À chaque identifiant de 10 votant VtrPubld correspond un identifiant de vote VtPvtld. Les identifiants VtPvtld identifient les votes et non les votants. Par exemple, chaque identifiant de vote VtPvtld résulte d'une fonction d'anonymisation appelée avec un identifiant de votant. Typiquement cette fonction peut être implémentée dans le contrôleur d'infrastructure, par exemple le contrôleur 10 de la figure 1. À titre d'exemple uniquement, chaque identifiant de vote 15 VtPvtld résulte d'une fonction de hachage, par exemple de type MD5, appelée sur le résultat de la concaténation d'un identifiant de votant VtrPubld et d'une clé privée respective, par exemple générée pour l'occasion. Dans le cas où l'infrastructure de vote gère plusieurs scrutins concomitamment, la fonction 20 peut en outre recevoir, à l'étape 1002, un identifiant de scrutin. La liste des identifiants de vote VtPvtld peut être transmise dans un message, typiquement adressé par le contrôleur d'infrastructure, par exemple le contrôleur 10 de la figure 1, au gestionnaire d'infrastructure, par exemple le gestionnaire 20 de la figure 1. 25 Le contrôleur et le gestionnaire d'infrastructure sont identifiés ici par leur adresse respective CtrlrAdd, ou CfgtrAdd, dans l'infrastructure réseau. À l'étape suivante 1004, la fonction génère une structure arborescente dont le nombre de 30 feuilles correspond au cardinal de la liste des identifiants de votant. Autrement dit, la structure arborescente comporte autant de feuilles que le scrutin comporte de votants. 3037702 15 La fonction génère une liste d'identifiants de noeuds, notés génériquement NodIdx i. Cette structure arborescente peut être stockée sous la forme d'une liste KTRE[..] de tableaux, dans laquelle chaque tableau met en relation un identifiant de noeud NodIdx i et une liste de noeuds enfants identifiés chacun par leur numéro d'index dans le tableau. 5 La structure arborescente de l'étape 1004 se rapproche de celle d'un arbre B+. Dans la mesure du possible, chaque noeud enfant correspond à un arbre menant à autant de feuilles que les autres noeuds enfants. 10 L'arbre comprend un nombre ChldNbr d'enfants et un nombre HghtNbr de niveaux, ou hauteur. Les nombres ChldNbr d'enfants et HgtNbr de niveaux sont tels que le nombre VtrNbr d'identifiants de votants : - soit strictement supérieur au nombre ChldNbr de noeuds élevé à une puissance correspondant au HgtNbr de rangs moins un ; 15 - soit inférieur ou égal au nombre ChldNbr de noeuds élevé à une puissance correspondant au HgtNbr. Les noeuds sont indexés. La racine correspond au noeud dont la valeur d'index est nulle. Chaque noeud peut être associé à une valeur d'index Nodldx, et ses noeuds enfants peuvent 20 être associés chacune à une valeur d'index respective de la forme NodIdx.Idx où Idx est un nombre entier inférieur ou égal au nombre ChldNbr moins un désignant un noeud enfant. De cette manière, chaque feuille de l'arbre peut être associée à une valeur d'index Lfldx de la forme i 1.i 2..i HgtNbr, où chaque élément i correspond à un nombre entier. Chaque feuille de l'arbre peut être associée à un nombre entier naturel LfNbr correspondant à la 25 traduction de la valeur d'index Lfldx, par exemple grâce à la fonction suivante : LfNbr := SUM(j:=1, j:=HgtNbr, (i_j-1)*k^( HgtNbr - j), Où SUMO est la fonction somme. Inversement, chaque nombre entier naturel correspondant à un identifiant de vote peut être 30 associé de manière unique à une valeur d'index désignant une feuille dans la structure arborescente. 3037702 16 De préférence, on fait en sorte de conserver l'équilibre de l'arbre en attribuant aux noeuds de plus bas niveau un même nombre de feuilles de l'arbre à k-1 feuilles près où le nombre k correspond au nombre normal de fils d'un noeud. Un des noeuds de l'arbre peut se retrouver avec 2k-1 feuilles. Le nombre k est fixé à la création. Plus le nombre k est grand, 5 moins les votes sont distinguables. Plus le nombre k est grand, plus le temps de dépouillement risque d'être long. Le nombre k est supérieur ou égal à 3. La formule suivante indique une relation entre des paramètres de la structure arborescente : HgtNbr=SUP(log^k(cardinal(VtPvtId))) 10 Celle formule indique que le nombre HgtNbr de niveaux de la structure arborescente correspond à la fonction entière par valeurs supérieures du logarithme décimal du nombre k que multiplie le nombre d'identifiants de vote. À l'étape suivante 1006, la fonction débute une structure de boucle en initialisant un 15 compteur k à la valeur nulle. À l'étape suivante 1008, la fonction associe une branche de la structure arborescente à chaque valeur d'identifiant de votant VtPvtld. Dans le cas où les noeuds sont indexés de la manière indiquée à l'étape 1004, la branche de la structure arborescente est désignée par la 20 valeur d'index du noeud parent de cette feuille. Par exemple, la fonction crée un tableau VBB[..] avec, en tant qu'élément d'index k, un tableau de deux éléments correspondant respectivement à : - un identifiant de vote, ici génériquement l'identifiant VtPvtId k pour l'identifiant d'index k dans le tableau ; 25 - une liste rangée d'identifiants de noeuds NodIdx i, les noeuds de la liste mettant en relation une feuille de l'arbre jusqu'à la racine de ce dernier. À chaque fois, un identifiant NodIdx i est en relation avec une valeur entière NodChldNbr i qui correspond au nombre de noeuds enfants du noeud considéré. Dans une variante de réalisation, chaque identifiant NodIdx i est associé à une valeur de clé de chiffrement respective NodKy 30 La liste des identifiants de noeuds est rangée de manière que l'ordre des noeuds corresponde au parcours d'une branche de l'arbre, d'une feuille à la racine. En 3037702 17 remplacement, ou en complément, chaque identifiant de noeud Nodldx peut être associé à une valeur indiquant le niveau du noeud dans la structure arborescente. À l'étape suivante 1010, la fonction incrémente le compteur k. 5 À l'étape suivante 1012, la fonction vérifie que le compteur k a atteint sa valeur finale, laquelle correspond au cardinal de la liste VtPvt[..] des identifiants de vote VtPvtld. Si oui, alors la fonction passe à l'étape suivante 1014. Sinon, la fonction retourne à l'étape 10 1008. À l'étape 1014, la fonction transmet une liste résultat laquelle correspond au tableau VBB[..]. Par exemple, les données du tableau VBB sont incluses dans un message adressé par le configurateur au contrôleur d'infrastructure. La fonction s'arrête à l'étape suivante 15 1016. Le contrôleur de l'infrastructure de vote électronique reçoit du configurateur une liste correspondant à la liste VBB des identifiants de vote, dans laquelle chaque identifiant de vote est associé à une liste rangée d'identifiants de noeuds. Le contrôleur transmet à 20 l'adresse associée de chaque identifiant de votant un message comportant la valeur d'identifiant de vote VtPvtld et la liste rangée d'identifiants de noeuds, le cas échéant accompagné des valeurs de clés NodKy et/ou des valeurs de nombre d'enfants NodChildNbr. Ces données sont récupérées sur les machines de vote VTR. 25 En variante, les valeurs de clés ne sont pas générées par le configurateur de l'infrastructure. Chaque machine de vote adresse la liste rangée des noeuds au gestionnaire 30 qui lui adresse en retour une liste de clés privées NodKy correspondant chacune à un noeud de la liste. Dans ce cas, les données transmises par le contrôleur comprennent une adresse du gestionnaire 30 dans le réseau de l'infrastructure. 30 La figure 11 illustre un exemple de fonction principale pour un gestionnaire d'infrastructure de vote, par exemple le gestionnaire 30 de la figure 1, dans un mode de fonctionnement correspondant à la mise en place d'un scrutin. 3037702 18 La fonction débute en une étape 1100. À l'étape suivante 1102, la fonction reçoit une liste rangée Brch[..] d'identifiants de noeuds. 5 La liste rangée Brch[..] est reçue dans un message adressé depuis une machine de vote de l'infrastructure au gestionnaire de l'infrastructure. La liste Brch[..] correspond à la liste des identifiants de noeuds reçue sur la machine de vote en question. À l'étape 1004, la fonction génère une valeur de clé privée pour chaque valeur d'identifiant 10 de noeud de la liste. La clé privée correspond à un algorithme de chiffrement asymétrique à usage dans l'infrastructure de vote. Les valeurs de clé sont notées génériquement NodKy_i. À l'étape suivante 1006, la fonction construit un message à destination de la machine de 15 vote désignée par l'adresse VtrAdd telle qu'elle a été reçue à l'étape 1002. Le message comprend une liste NodPvtKy[..] de valeurs clés privées, correspondant chacune à un identifiant de noeud de la liste Brch[..], et une liste Trckrs[..] d'adresses de serveurs de mise en relation, du type par exemple du traqueur 50 des figures 1 et 2. 20 La fonction se termine à l'étape suivante 1108. Chaque machine du groupe des machines de vote reçoit un message initial comprenant une clé de chiffrement propre à cette machine de vote. Ce message est reçu via un autre 25 medium de communication comme un courrier postal par exemple. La valeur de cette clé est noté génériquement PrsnKy i pour la machine de vote i. Le message initial comporte en outre une liste de serveurs de mise en relation, par exemple désignés par leur adresse respective TrckrAdd. Ici, le message initial est adressé à chaque machine du groupe de machines d'administration par un gestionnaire de l'infrastructure, par exemple le 30 gestionnaire 30 de la figure 1. L'envoi du message initial est de préférence commandé par un contrôleur de l'infrastructure, par exemple le contrôleur 10 de la figure 1. 3037702 19 Le premier message et le second message sont envoyés séparément, sur commande d'un contrôleur d'infrastructure, par exemple le contrôleur 10 de la figure 1. Une fois qu'une machine de vote a reçu le message initial, elle est capable de participer au 5 scrutin. Elle peut fonctionner selon le second mode opérationnel de l'infrastructure. La figure 12 illustre une fonction principale pour une machine de vote d'une infrastructure de vote électronique, par exemple l'une des machines VTR I, VTR 2 et VTR 3 de la figure 2, selon un mode opérationnel correspondant au déroulement d'un scrutin. La machine dispose d'une valeur d'identifiant de vote VtPvtld, d'une liste rangée d'identifiants de noeuds Brch[..], et, pour chaque identifiant de noeud Nodld de cette liste, d'une valeur entière NodChldNbr correspondant à un cardinal de noeud et d'une valeur de clé de chiffrement NodKy. La fonction débute par une étape 1200. À l'étape suivante 1202, la fonction reçoit un jeu de données Pl1Mat nécessaire au déroulement du scrutin. Ces données peuvent, dans leur ensemble, être vues comme du 20 matériel de vote. En particulier, ces données sont reçues grâce à un message d'une source de l'infrastructure. L'adresse de la source en question est mise à disposition de la machine de vote par un ou plusieurs serveurs de mise en relation, par exemple le traqueur 50 des figures 1 et 2. Les données en question peuvent être reçues sous une forme chiffrée par le contrôleur 10. Le message peut également provenir d'un configurateur de l'infrastructure 25 de vote. L'adresse de destination de ce message peut différer de l'adresse connue des traqueurs de l'infrastructure de vote. Par exemple, les traqueurs connaissent les adresses de protocole internet des machines de vote et le message en question est envoyé à une adresse de courrier électronique en relation avec l'identifiant de votant. 30 À l'étape suivante 1204, la fonction déchiffre le matériel de scrutin Pl1Mat à l'aide d'une clé de chiffrement PrsnKy i de la machine i. Cette clé peut être transmise par un autre medium comme un courrier postal par exemple. 10 15 3037702 20 À l'étape suivante 1206, la fonction commande une restitution de la question et des réponses possibles. À l'étape suivante 1208, la fonction reçoit l'expression d'un vote Chce, par exemple sous la 5 forme d'un choix ou, le cas échéant, d'une réponse libre. La fonction crée un tableau résultat Tlly[..] pour y stocker le résultat du vote. Par exemple, la dimension du tableau Tlly[..] correspond au nombre de réponses possibles à la question posée. Et la fonction stocke la valeur 1 (une) en tant qu'élément dont l'index correspond au choix de l'étape 1106. 10 À l'étape suivante 1210, la fonction génère une valeur de signature SignVal à l'aide de la clé de chiffrement NodKy associée à l'identifiant de noeud Nodld de plus bas niveau dans la liste Brch[..] et du résultat du vote de l'étape précédente, par exemple le tableau résultat Rslt[..]. 15 À l'étape 1212, la fonction construit un objet CrptBx d'encapsulation des résultats du vote. Un objet de type CrptBx peut être vu comme une urne électronique. Un objet CrptBx comprend, ou met en relation, une valeur d'identifiant CrptBxld, des 20 données de résultat de vote, par exemple sous la forme d'une liste CrptBxTlly[..], et une valeur de signature CrptBxSgn. Un objet de type CrptBx peut par exemple prendre la forme d'un triplet rassemblant ces trois éléments. À l'étape 1212, la fonction construit un objet de type CrptBx avec les données relatives au 25 résultat du vote du l'étape 1208. L'identifiant CrptBxld correspond à l'identifiant de noeud Nodld de plus bas niveau dans la liste Brch[..] de la machine de vote, typiquement le premier identifiant de cette liste. La liste CrptBxTlly[..] correspond à la liste Rslt[..]. La valeur CrptBxSgn correspond à la valeur de signature SignVal de l'étape 1210. 30 La fonction crée en outre localement un tableau CrtCrptBx[..] de données en attente comprenant une valeur CrtCrptBxld formant pointeur vers l'identifiant de noeud de plus bas niveau dans la liste Brch[..] de la machine de vote, et l'objet CrptBx qui vient d'être créé. 3037702 21 La fonction se termine à l'étape suivante 1214. Un vote en lui-même correspond à processus purement local, qui concerne une machine 5 de vote de l'infrastructure. Un vote ne nécessite aucune communication de la machine de vote en question avec les machines homologues de l'infrastructure de vote. Chaque vote résulte localement en la création d'un objet CrptBx et d'un tableau CrtCrptBx[..] contenant cet objet, mémorisé sur la machine de l'infrastructure où le vote a eu lieu. 10 La figure 13 illustre une première fonction pour une machine de vote quelconque d'une infrastructure de vote électronique selon le troisième mode opérationnel qui correspond au dépouillement des votes. La fonction débute en une étape 1300. 15 À l'étape suivante 1302, la fonction construit un message d'interrogation à destination d'au moins un traqueur de l'infrastructure de vote, par exemple le traqueur 50 de la figure 2. À l'étape suivante 1304, la fonction reçoit en réponse une liste VtrAdd[..] de machines 20 homologues de l'infrastructure de vote, par exemple certaines au moins des machines du groupe de machines 40 de la figure 2. Les machines sont identifiées par leur adresse sur l'infrastructure réseau. La liste VtrAdd [..] peut ne correspondre qu'à un sous-ensemble de machines de vote de l'infrastructure. Par exemple, les machines de la liste VtrAdd[..] sont sélectionnées aléatoirement parmi les adresses maintenues dans le traqueur ou le traqueur 25 en question ne maintient que les adresses de certaines des machines de vote de l'infrastructure. À l'étape suivante 1306, la fonction construit une requête sous la forme d'un message comportant ici une valeur NodldQry correspondant à un identifiant de noeud. Cette valeur 30 NodldQry correspond à un élément de la liste Brch[..]. Cette valeur correspond à l'élément de plus bas niveau inconnu de la liste Brch[..]. Dans un mode de réalisation cette valeur correspond à la valeur CrtCrptBxld. La fonction émet une requête à destination de 3037702 22 chacune des adresses de la liste VtrAdd[..]. En variante, la requête pourrait comprendre plusieurs identifiants de noeuds de la liste Brch[..]. À l'étape suivante 1308, la fonction traite une réponse reçue sous la forme d'un message 5 émis depuis l'une des adresses de la liste VtrAdd[..]. Le message comporte un objet de type CrptBx. L'identifiant CrptBxld correspond à l'un des identifiants de noeuds de la liste Brch[..] de la machine à l'origine de la réponse. Selon l'avancement de cette machine, l'identifiant CrptBxld peut correspondre : - à l'identifiant NodldQry du noeud demandé ; ou 10 - à un identifiant de noeud de niveau supérieur à l'identifiant NodldQry dans la liste Brch[..]. Dans ce dernier cas, l'objet CrptBx ne contient pas nécessairement la réponse attendue, c'est-à-dire un objet correspondant à l'identifiant NodldQry. À l'étape suivante 1310, la fonction vérifie la cohérence des données contenues dans l'objet CrptBx et, le cas échéant, traite ces données en intégrant l'objet CrptBx dans le tableau CrtCrptBx[..] en attente. La fonction peut appeler une sous-fonction de vérification. Les étapes 1308 et 1310 sont recommencées à chaque réception d'une réponse comportant un objet CrptBx. L'étape 1304 correspondant à l'interrogation d'un traqueur est renouvelée, par exemple à intervalles de temps réguliers. 25 La fonction se termine à l'étape suivante 1312. La figure 14 illustre une seconde fonction pour une machine de vote quelconque selon le troisième mode opérationnel. Cette seconde fonction traite les messages de type requête reçu par une machine de vote et provenant d'une machine de vote homologue de 30 l'infrastructure de vote électronique. La fonction débute en une étape 1400. 15 20 3037702 23 À l'étape suivante 1402, la fonction reçoit une requête sous la forme d'un message adressé par une machine de vote homologue de l'infrastructure de vote. La machine de vote émettrice est identifiée par une adresse de cette machine dans l'infrastructure réseau. Le message reçu comporte un identifiant de noeud NodldQry. 5 À l'étape suivante 1404, la fonction vérifie que l'identifiant NodldQry se trouve dans CrtCrptBx. Sinon la fonction s'arrête à l'étape 1408. Si oui, alors, à l'étape suivante 1406, la fonction adresse un message de réponse à la 10 machine émettrice. Dans une forme de réalisation, la fonction est agencée pour répondre de manière aléatoire au message reçu, en particulier selon un taux de réponse fixé en tant que paramètre, par exemple 80%. La fonction peut en outre maintenir une liste des machines émettrices et/ou des identifiant NodldQry demandés. Ceci permet en particulier à la fonction de ne plus répondre lorsqu'une même machine et/ou un même identifiant 15 NodldQry sont trop souvent demandés. Le message de réponse comprend au moins un objet CrptBx du tableau CrtCrptBx[..] en attente sur la machine de vote. Ici, la fonction adresse un unique objet CrptBx. Ceci permet d'améliorer encore la confidentialité du dépouillement. En variante, la fonction 20 pourrait renvoyer l'ensemble des objets de type CrptBx disponibles dans le tableau CrtCrptBx[..]. Selon l'état d'avancement de la machine de vote, c'est-à-dire de l'identifiant de la liste vers laquelle pointe la valeur CrtCrptBxld, l'objet CrptBx en réponse peut correspondre à 25 l'identifiant NodldQry ou à un identifiant supérieur dans la liste Brch[..]. Cet objet CrptBx ne contient pas nécessairement la réponse attendue par la machine à l'origine du message de requête. La fonction peut adresser une partie du tableau CrtCrptBx[..] qui correspond à un sur-ensemble de ce qui est demandé, à savoir l'identifiant NodldQry, éventuellement sans les données correspondant à l'identifiant NodldQry. Le contenu de la réponse peut 30 dépendre du résultat d'un tirage aléatoire implémenté par la fonction, en particulier lorsque la machine dispose de plusieurs objets CrptBx correspondant à l'identifiant NodldQry. La fonction se termine également à la suite de l'étape 1408. 3037702 24 En outre, à chaque fois qu'un message de réponse est reçu et vérifié, la machine de vote peut exécuter une fonction de mise à jour portant sur le tableau CrtCrptBx[..] en attente et les objets CrptBx qu'il contient. Cette fonction vérifie si le nombre de signatures 5 différentes contenues dans les objets CrptBx du tableau en attente CrtCrptBx[..] correspond à la valeur du cardinal associé à l'identifiant de noeud de la liste Brch[..] vers laquelle pointe la valeur CrtCrptBxld. Si oui, alors la fonction de mise à jour modifie la valeur de CrptCrpBxld pour qu'elle pointe vers l'identifiant de noeud de rang juste supérieur dans la liste Brch[..] de la machine de vote. Et la fonction crée un nouvel objet 10 de type CrptBx à partir des objets CrptBx du tableau en attente. Les anciens objets CrptBx sont remplacés par le nouveau. La fonction fait appel à une fonction d'agrégation qui met à jour la liste CrptBxTlly[..] du nouvel objet à partir des résultats de votes des anciens objets CprtBx correspondant à un noeud de rang inférieur dans la liste Brch[..] de la machine de vote. 15 La figure 15 illustre une fonction Bld() 1500 comme exemple de fonction d'agrégation d'objets CrptBx. La fonction Bld() 1500 reçoit en entrée plusieurs objets CrptBx. L'identifiant CrptBxld de 20 ces objets correspond à l'identifiant d'un même noeud de la liste Brch[..] de la machine de vote. La fonction Bld() 1500 comprend une sous-fonction de concaténation Cnct() 1502 qui est appelée avec les valeurs de signature CrptBxSgn des objets CrptBx. La fonction Cnct() 25 1502 délivre en sortie une valeur d'empreinte HshVal, ou de hachage, résultant de la concaténation de ces valeurs de signature. La fonction Bld() 1500 comprend une sous-fonction d'interrogation PrtO 1504. La fonction PrtO 1504 est appelée avec la valeur CrptBxld laquelle correspond à un 30 identifiant de noeud dans la liste Brch[..] de la machine de vote. La fonction PrtO délivre en sortie une valeur d'identifiant de noeud CrtNodld qui correspond au noeud de rang juste supérieur dans la liste Brch[..] au noeud identifié par la valeur CrptBxld. Par exemple, la 3037702 25 fonction Prt() renvoie l'identifiant du noeud qui suit le noeud identifié par la valeur CrptBxld dans la liste rangée Brch[..]. La fonction Bld() 1500 comprend encore une sous-fonction d'agrégation Mrg() 1506. La 5 fonction Mrg() 1506 est appelée avec les résultats de votes contenus dans les objets CrptBx reçus en entrée, en particulier leurs listes CrptBxTlly[..]. La fonction Mrg() 1506 établit des données consolidées à partir de ces listes CrptBxTlly[..] qu'elle stocke par exemple dans une nouvelle liste CrtTlly[..]. La consolidation peut dépendre de la nature du scrutin. Dans un mode de réalisation simple, la consolidation consiste à compter les 10 voix exprimées pour chacun des choix possibles. Dans ce cas, la fonction Mrg() additionne des vecteurs résultats. La fonction Bld() 1500 comprend une fonction de hachage Hsh() 1508, ou d'empreinte. La fonction Hsh() 1508 est appelée avec la valeur HshVal délivrée par la fonction Cnct() 15 1502, la valeur CrtNodld délivrée par la fonction Prt() 1504 et la liste CrtTlly[..] délivrée par la fonction Mrg() 1506. La fonction Hsh() 1508 délivre en sortie une seconde valeur d'empreinte HshVal2 résultant de l'application d'une fonction de hachage sur les données d'entrée. 20 La fonction Bld() 1500 comprend encore une fonction de chiffrement Crpt() 1510. La fonction Crpt() 1510 réalise un chiffrement à partir de valeurs d'entrée. La fonction Crpt() 1510 reçoit la valeur HshVal résultant de la fonction Cnct() 1502, l'identifiant de noeud correspondant aux identifiants CrptBxld et la valeur HshVal2 résultant de la fonction Hsh() 1508. La fonction Crpt() 1510 utilise comme clé de chiffrement la valeur associée à 25 l'identifiant de noeud correspondant à la valeur CrtNodld dans la liste Brch. La fonction Bld() 1500 comprend enfin une fonction d'encapsulation Bxg() 1512. La fonction Bxg() 1512 crée un objet de type CrptBx à partir des données qu'elle reçoit. La fonction Bxg() 1512 attribue au nouvel objet CrptBx : le résultat de la fonction Crpt() 30 1510 en tant que signature CrptBxSgn, la valeur de l'identifiant CrtNodld en tant que valeur CrptBxld et la liste CrtTlly[..] en tant que données de résultat CprtBxTlly1.1. La figure 16 illustre une fonction Vrf() de vérification d'un objet de type CrptBx. 3037702 26 La fonction Vrf() comprend une sous-fonction de désencapsulation Nbxg 1602, qui reçoit en entrée un objet de type CrptBx. Elle délivre en sortie les données contenues dans l'objet CrptBx, en particulier une valeur d'identifiant CrptBxld, une liste CrptBxTlly[..] de 5 résultats de vote, une valeur de signature CrptBxSgn. La fonction Vrf() comprend en outre une sous-fonction de déchiffrement Dcph 1604. La sous-fonction Dcph est appelée avec la valeur CrptBxSgn résultant de l'appel de la fonction Nbxg 1602, et une valeur de clé associée, dans la machine de vote, à l'identifiant 10 correspondant à la valeur d'identifiant CrptBxld. La fonction Dcph 1604 délivre une première valeur de signature HshVal qui devrait correspondre à la concaténation des valeurs de signature des objets CrptBx agrégés dans l'objet CrptBx vérifié, une seconde valeur de signature HshVal2 qui devrait correspondre à la seconde valeur d'empreinte HshVal2 décrite en relation avec la figure 15 et une valeur d'identifiant IdVal qui devrait 15 correspondre à un identifiant de noeud de la liste Brch[..]. La fonction Vrf() comprend aussi une sous-fonction d'empreinte Hsh() 1606 qui produit une valeur d'empreinte HshVal3 à partir de valeurs d'entrées. Ici, la fonction Hsh() 1606 est appelée avec la valeur d'identifiant CrptBxld, les données de résultat de vote 20 CrptBxTlly[..] et la première valeur d'empreinte HshVall résultant de la fonction Nbxg 1602. Il en résulte une troisième valeur d'empreinte HshVal3 par hachage. La fonction Vrf() comprend une sous-fonction de comparaison Cmpr() 1608. La fonction Cmpr() 1608 est appelée avec la valeur HshVal3 résultant de l'appel de la fonction Hsh() 25 1606 et la seconde valeur d'empreinte HshVal2 résultant de l'appel de la fonction Dcph(). La fonction Cmpr() 1608 délivre une valeur booléenne qui correspond à une comparaison de ces valeurs. La fonction Vrf() comprend une première sous-fonction de recherche Srchl() 1610. La 30 fonction Srchl() 1610 est appelée avec la valeur d'identifiant IdVal résultant de l'appel de la fonction Dcph() 1604 et la liste Brch[..] des identifiants de noeuds respectifs de la machine de vote. La fonction Srchl() 1610 retourne une valeur booléenne qui correspond à la présence ou non de la valeur d'identifiant IdVal dans la liste Brch[..]. 3037702 27 La fonction Vrf() comprend une seconde sous-fonction de recherche Srch2() 1612. La fonction Srch2() est appelée avec la valeur d'empreinte HshVall résultant de l'appel de la fonction Dcph() 1604 et une valeur d'empreinte CrrtHshVal correspondant à la 5 concaténation des valeurs de signature des objets CrptBx dans le tableau en attente. La fonction Srch2() retourne une valeur booléenne qui correspond à la présence ou non de la valeur d'empreinte du niveau correspondant à IdVal dans HshVal 1 . La fonction Srchl() 1610 est en outre agencée ici de manière que la valeur booléenne 10 qu'elle retourne corresponde au résultat de l'appel de la fonction Srch2() selon une table de vérité correspondant à une porte AND. La fonction Vrf() 1600 comprend enfin une fonction logique ND() 1614 qui délivre une valeur booléenne résultant de la comparaison de valeurs d'entrée selon une table de vérité 15 correspondant à une fonction AND. La fonction ND() 1614 est appelée avec la valeur booléenne BoolVali résultant de la fonction Cmpr() 1608 et la valeur booléenne BoolVal2 résultant de l'appel de la fonction Srchl() 1610. On vient de décrire une machine de vote électronique et une infrastructure de vote 20 électronique comprenant une telle machine. Celles-ci présentent les particularités suivantes : Ni le contrôleur, ni le configurateur, ni le gestionnaire de l'infrastructure ne sont actifs dans les modes opérationnels correspondant au scrutin et au dépouillement. La structure arborescente qui organise le dépouillement n'est jamais matérialisée : 25 une machine de vote ne possède que les identifiants correspondant à une branche de cet arbre. Le traqueur maintient une liste d'adresses correspondant aux noeuds qui ont, à un moment donné, participé au mécanisme de vote. Les machines correspondant aux nouveaux noeuds entrants peuvent se manifester auprès du traqueur. Ce dernier maintient 30 une liste ordonnée par date d'arrivée des noeuds. À chaque nouvelle connexion, le traqueur renvoie une sous-liste d'adresses à contacter. Par la suite, si une machine ne trouve plus de nouveaux votes à intégrer, elle peut recontacter le traqueur pour obtenir une nouvelle 3037702 28 sous-liste d'adresses afin de pouvoir relancer le mécanisme de recherche des valeurs de vote. Les données de vote sont rassemblées sous une forme désordonnée qui ne peut être mise en relation avec les machines de vote. 5 Lors du dépouillement, chaque machine de vote s'efforce de calculer des résultats partiels, correspondant chacun à un noeud de la structure arborescente, de la feuille à la racine de cet arbre. Pour ce faire, une machine de vote va chercher les données de vote auprès de machines homologues qui calculent des résultats partiels relatifs à des noeuds éventuellement différents (supérieurs). 10 L'équilibre de la structure arborescente diminue les capacités à distinguer entre les résultats correspondant à des branches différentes de l'arbre. Toute machine de l'infrastructure réseau peut définir et lancer un processus de vote électronique et non seulement le configurateur. L'infrastructure peut fonctionner sur la base de protocoles de communication 15 différents du protocole internet. En particulier des protocoles différents peuvent être utilisés pour la mise en place du scrutin et de son dépouillement. Une machine de vote pourrait répondre aux requêtes avec l'ensemble des objets CrptBx dont elle dispose, indépendamment du rang dans lequel se trouve la machine émettrice. 20 L'invention n'est pas limitée aux modes de réalisation décrits ci-avant à titre d'exemple uniquement. Elle englobe toutes les variantes que pourra envisager l'homme de l'art. REVENDICATIONS1. Machine de vote électronique du type comprenant : - de la mémoire (400) pour stocker une liste rangée d'identifiants, et au moins un tableau de données en attente avec un pointeur vers un identifiant de la liste rangée d'identifiants ; - une interface de communication (440) ; - une unité centrale d'ordinateur (410) capable d'interaction avec la mémoire (400) et l'interface de communication (440) pour exécuter : - une première fonction capable de traiter un message en vérifiant une première condition portant sur une comparaison d'un contenu dudit message aux identifiants de la liste rangée d'identifiants respectivement, et, le cas échéant, en complétant le tableau en attente avec des données du message relatives à un vote ; - une seconde fonction capable de traiter un message en vérifiant une seconde condition portant sur une comparaison du contenu dudit message aux identifiants de la liste rangée d'identifiants, et, le cas échéant, en construisant un message avec l'identifiant de la liste vers lequel pointe le tableau en attente et certaines au moins des données du tableau en attente ; - un contrôleur (410) agencé pour : - émettre une requête à destination de machines de vote électronique homologues, la requête portant sur l'identifiant vers lequel pointe le tableau en attente et appeler la première fonction avec chaque message de réponse, - appeler la seconde fonction à chaque fois qu'une requête est reçue d'une machine de vote électronique homologue, et - modifier conditionnellement le pointeur du tableau de données en attente vers un identifiant de la liste rangée de rang supérieur en fonction des données du tableau en attente. 2. Machine selon la revendication 1 dans laquelle les identifiants de la liste rangée désigne un noeud d'une structure arborescente, la liste correspondant à une partie au moins d'une branche de la structure arborescente. 3. Machine selon l'une des revendications 1 et 2, dans laquelle la première fonction complète le tableau de données en attente avec des données du message relatives à une 3037702 30 valeur de signature, la seconde fonction construit le message avec une valeur de signature, et le pointeur du tableau de données en attente est modifié en fonction d'un résultat d'un test portant sur les signatures contenues dans le tableau en attente. 5 4. Machine selon l'une des revendications précédentes, dans laquelle la mémoire stocke une collection de valeurs entières associées chacune à un identifiant respectif de la liste rangée d'identifiants, et le pointeur du tableau de données en attente est modifié en fonction d'un résultat d'un test portant sur la valeur entière associée à l'identifiant vers lequel pointe le tableau de données en attente. 10 5. Machine selon l'une des revendications précédentes, dans laquelle le contrôleur est agencé pour émettre une requête préalable à destination d'un serveur de mise en relation et émettre une requête à destination de certaines au moins des machines de vote électronique homologues correspondant à des adresses reçues du serveur de mise en relation. 15 6. Machine selon l'une des revendications précédentes, dans laquelle le tableau de données en attente maintient des données relatives à un vote effectué sur la machine. 7. Machine selon l'une des revendications précédentes, dans laquelle une partie au moins 20 des données du tableau en attente sont organisées en une liste d'objets numériques maintenant chacun une relation entre des données de résultat de vote et un identifiant de la liste rangée d'identifiants. 8. Machine selon la revendication 7, dans laquelle la seconde fonction construit ledit 25 message avec l'ensemble des objets numériques du tableau de données en attente. 9. Machine selon l'une des revendications précédentes, dans laquelle les identifiants de la liste rangée d'identifiants des objets numériques du tableau en attente sont de rang inférieur au rang de l'identifiant vers lequel pointe le tableau en attente. 30 10. Machine selon l'une des revendications précédentes, dans laquelle le contrôleur est agencé pour agréger les données de vote du tableau en attente à la modification du pointeur de ce tableau. 3037702 31 11. Infrastructure de vote électronique comprenant plusieurs machines de vote homologues selon l'une des revendications précédentes. 12. Infrastructure selon la revendication 11 comprenant un serveur de mise en relation 5 agencé pour, sur requête, retourner un jeu d'adresses correspondant à un sous-ensemble seulement des machines de vote homologues de l'infrastructure. 13. Infrastructure selon la revendication 12, dans laquelle le jeu d'adresses est sélectionné aléatoirement par les adresses des machines de vote homologues. 10 14. Procédé de vote électronique du type comprenant les étapes suivantes : - stocker une liste rangée d'identifiants, et au moins un tableau de données en attente avec un pointeur vers un identifiant de la liste rangée d'identifiants ; - émettre une requête à destination de machines de vote électronique homologues, la 15 requête portant sur l'identifiant vers lequel pointe le tableau en attente, - traiter au moins un message en réponse en vérifiant une condition portant sur une comparaison d'un contenu dudit message aux identifiants de la liste rangée d'identifiants respectivement, et, le cas échéant, en complétant le tableau en attente avec des données du message relatives à un vote, 20 - modifier conditionnellement le pointeur du tableau de données en attente vers un identifiant de la liste rangée de rang supérieur en fonction des données du tableau en attente. 15. Procédé de vote électronique du type comprenant les étapes suivantes : 25 - stocker une liste rangée d'identifiants, et au moins un tableau de données en attente avec un pointeur vers un identifiant de la liste rangée d'identifiants ; - recevoir une requête d'une machine de vote électronique, la requête portant sur l'identifiant vers lequel pointe le tableau en attente, - vérifier une condition portant sur une comparaison du contenu de la requête aux 30 identifiants de la liste rangée d'identifiants, et, le cas échéant, construire un message en réponse avec l'identifiant de la liste vers lequel pointe le tableau en attente et certaines au moins des données du tableau en attente, 3037702 32 - modifier conditionnellement le pointeur du tableau de données en attente vers un identifiant de la liste rangée de rang supérieur en fonction des données du tableau en attente.