Retour aux projets

Referendum - Application de Vote Sécurisée

Durée

Toute la deuxième année de BUT 2 (Projet de fin d'année)

Équipe

Groupe de 4 étudiants

Mon Rôle

Product Owner & Développeur Cryptographie - Chiffrement ElGamal, Preuve Zero Knowledge, ChatBot IA et sécurisation des sockets

Technologies Utilisées

JavaJavaFXElGamalZero Knowledge ProofDeepSeek APICryptographieSocketsScrumGit
JavaJavaFXElGamalZero Knowledge ProofDeepSeek APICryptographieSocketsScrumGit

Captures d'écran

Referendum - Application de Vote Sécurisée - 1
Referendum - Application de Vote Sécurisée - 2
Referendum - Application de Vote Sécurisée - 3
Referendum - Application de Vote Sécurisée - 4
Referendum - Application de Vote Sécurisée - 5

Contexte

Referendum est le projet de fin de deuxième année de BUT Informatique. C'est le projet le plus structurant de la formation : il a duré toute l'année universitaire et a été mené avec la méthodologie Scrum dans des conditions proches du monde professionnel.

Le cas d'étude était une entreprise fictive qui avait besoin de faire voter ses employés de manière sécurisée. Notre mission était de concevoir et développer une application de vote complète, garantissant la confidentialité des votes, l'intégrité des résultats et l'authentification des votants.

Nous étions une équipe de 4 étudiants, et j'occupais le rôle de Product Owner. À ce titre, je gérais le backlog produit, priorisais les fonctionnalités, et faisais le lien entre les "besoins client" (définis par les enseignants) et l'équipe de développement. Mais j'avais aussi un rôle technique majeur : j'étais responsable de toute la partie cryptographie (chiffrement ElGamal, imposé par les professeurs), de la sécurisation des communications par sockets, de l'implémentation de la Preuve Zero Knowledge non-interactive pour la vérification des votes, et de la création d'un chatbot FAQ alimenté par l'API DeepSeek.

Le projet était découpé en plusieurs phases : des sprints avec des rendus réguliers, puis un nouveau contrat où nous devions améliorer davantage l'application, suivis de nouveaux sprints. Chaque phase comprenait des présentations orales devant un "client" (les enseignants), la rédaction de dossiers techniques, et des soutenances.

Objectifs

  1. 1.Application de vote sécurisée : Développer une application Java/JavaFX permettant de créer des scrutins, de voter de manière confidentielle, et de consulter les résultats de manière sécurisée.
  1. 2.Chiffrement ElGamal : Implémenter le protocole cryptographique ElGamal (imposé par les professeurs) pour garantir la confidentialité des votes. C'était ma partie principale dans l'équipe.
  1. 3.Preuve Zero Knowledge non-interactive : Garantir que chaque vote est bien 0 ou 1 (oui ou non) sans révéler la valeur du vote. Le projet intègre les fonctions createZKProof (création de la preuve côté client) et verifyZKProof (vérification côté serveur) pour valider les votes en un seul échange.
  1. 4.ChatBot FAQ (DeepSeek API) : Créer un chatbot intégré à l'application pour répondre aux questions fréquentes des utilisateurs. L'API DeepSeek est utilisée uniquement pour comprendre la question de l'utilisateur et fournir la réponse la plus pertinente parmi des réponses pré-préparées relatives à l'application.
  1. 5.Sécurisation des sockets : Mettre en place une communication client-serveur sécurisée via des sockets chiffrés, pour empêcher l'interception ou la manipulation des votes en transit.
  1. 6.Méthodologie Scrum : Travailler en sprints avec des rendus réguliers, des rétrospectives, un backlog priorisé, et des présentations client orales.
  1. 7.Documentation technique : Rédiger des dossiers techniques complets à chaque phase du projet (architecture, choix techniques, diagrammes UML, tests).

Approche Technique

Le projet a suivi la méthodologie Scrum sur toute l'année. En tant que Product Owner, j'organisais les sprint plannings, maintenais le backlog, et présentais les démos au "client" (les enseignants) à chaque fin de sprint. À la fin de chaque cycle, nous recevions un nouveau contrat avec des exigences supplémentaires, simulant l'évolution des besoins d'un vrai client.

Côté technique, l'application est développée en Java avec une interface JavaFX. Mon rôle technique principal était le chiffrement ElGamal - un système de cryptographie asymétrique à clé publique. Le principe : chaque vote est chiffré avec la clé publique du scrutin avant d'être envoyé au serveur. Seul le détenteur de la clé privée peut déchiffrer les votes à la clôture du scrutin. Cela garantit que personne - pas même le serveur - ne peut lire un vote individuel avant la fin du scrutin.

Preuve Zero Knowledge non-interactive : Pour garantir l'intégrité des votes, le projet intègre une preuve Zero Knowledge. L'objectif est de prouver côté serveur que le vote d'un client est bien "oui" ou "non" (0 ou 1), sans révéler lequel. Si un utilisateur tente de voter une valeur invalide (par exemple 10 ou un nombre négatif), le vote est rejeté. La preuve est non-interactive : un seul échange entre le client et le serveur suffit - l'envoi de la preuve avec le message chiffré. Côté client, la fonction createZKProof génère deux preuves (une vraie, une simulée) via des engagements cryptographiques, un haché SHA-256 et de l'arithmétique modulaire. Côté serveur, verifyZKProof recalcule les valeurs et vérifie que la somme des challenges correspond au haché. Si c'est le cas, la preuve est valide - le vote est bien 0 ou 1, sans que le serveur ne sache lequel.

ChatBot FAQ (DeepSeek API) : J'ai implémenté un chatbot FAQ intégré à l'application dont le but est de répondre aux questions fréquentes des utilisateurs. J'ai intégré l'API DeepSeek qui sert uniquement à comprendre la question de l'utilisateur pour lui fournir la réponse la plus pertinente parmi des réponses spécifiques pré-préparées, limitées aux questions relatives à l'application.

J'ai également sécurisé les communications par sockets entre le client et le serveur. Les échanges sont chiffrés pour empêcher toute interception (man-in-the-middle) ou manipulation des données en transit.

Le reste de l'équipe travaillait sur l'interface JavaFX, la gestion des utilisateurs, la base de données et la logique métier des scrutins. Nous faisions des revues de code régulières et utilisions Git pour la gestion du code source.

Architecture

Application Java client-serveur avec interface JavaFX :

  • Client JavaFX : Interface graphique pour la création de scrutins, le vote et la consultation des résultats.
  • Serveur Java : Gestion des scrutins, stockage des votes chiffrés, déchiffrement à la clôture.
  • Cryptographie ElGamal : Génération de clés (publique/privée), chiffrement des votes côté client, déchiffrement côté serveur à la clôture du scrutin.
  • Preuve Zero Knowledge : Fonctions createZKProof (client) et verifyZKProof (serveur) dans la librairie cryptographique pour valider que chaque vote est strictement 0 ou 1 sans révéler sa valeur.
  • ChatBot FAQ : Chatbot intégré utilisant l'API DeepSeek pour comprendre les questions utilisateurs et fournir des réponses pré-préparées relatives à l'application.
  • Sockets sécurisés : Communication client-serveur chiffrée pour protéger les échanges de données.
  • Méthodologie : Scrum avec sprints, backlog, rétrospectives, présentations client, dossiers techniques.

Compétences Développées

Cryptographie - ElGamal

Implémentation complète du protocole ElGamal : génération de clés asymétriques, chiffrement et déchiffrement des votes. Compréhension des fondements mathématiques (logarithme discret, arithmétique modulaire) et des enjeux de sécurité.

Preuve Zero Knowledge non-interactive

Vérification cryptographique que chaque vote est strictement 0 ou 1 sans révéler sa valeur. Preuve non-interactive en un seul échange via engagements cryptographiques, haché SHA-256 et arithmétique modulaire (fonctions createZKProof et verifyZKProof).

ChatBot IA (DeepSeek API)

Implémentation d'un chatbot FAQ intégré à l'application utilisant l'API DeepSeek pour comprendre les questions des utilisateurs et fournir des réponses pertinentes pré-préparées, limitées au contexte de l'application.

Sécurisation des sockets

Mise en place de communications client-serveur chiffrées via sockets Java, protection contre l'interception et la manipulation des données en transit.

Product Owner (Scrum)

Gestion du backlog produit, priorisation des fonctionnalités, organisation des sprints, présentations client orales, rédaction de dossiers techniques. Interface entre les besoins client et l'équipe de développement.

Java avancé & JavaFX

Développement d'une application desktop Java complète avec interface graphique JavaFX, gestion d'événements, et architecture client-serveur.

Extraits de Code

Chiffrement ElGamal avec grands nombres

java
Loading...

Implémentation du chiffrement asymétrique ElGamal en Java avec BigInteger pour les grands nombres. La génération de clés utilise un nombre premier p de 512+ bits, un générateur g, une clé privée x aléatoire et une clé publique h = g^x mod p. Le chiffrement génère un k éphémère, calcule c1 = g^k et c2 = m * h^k, garantissant la sécurité par la difficulté du logarithme discret.

Interface JavaFX avec gestion votes chiffrés

java
Loading...

Ce contrôleur JavaFX gère l'interface de vote chiffré. L'utilisateur sélectionne un candidat, le vote est converti en BigInteger puis chiffré avec ElGamal. Le texte chiffré (c1, c2) est affiché en hexadécimal et stocké en base de données. Seul l'administrateur avec la clé privée peut déchiffrer les résultats.

Résultats & Bilan

Le projet Referendum a été mené avec succès sur toute l'année universitaire :

  • Application de vote fonctionnelle et sécurisée : Création de scrutins, vote confidentiel avec chiffrement ElGamal, consultation des résultats après clôture, le tout via une interface JavaFX intuitive.
  • Cryptographie ElGamal opérationnelle : Le système de chiffrement asymétrique garantit que les votes sont illisibles en transit et en stockage, et ne sont déchiffrés qu'à la clôture du scrutin.
  • Preuve Zero Knowledge fonctionnelle : Vérification cryptographique que chaque vote est bien 0 ou 1 en un seul échange, sans compromettre la confidentialité du vote. Les votes invalides sont automatiquement rejetés par le serveur.
  • ChatBot FAQ opérationnel : Chatbot intégré utilisant l'API DeepSeek pour répondre aux questions fréquentes des utilisateurs de manière pertinente et contextuelle.
  • Communications sécurisées : Les échanges client-serveur via sockets sont chiffrés, empêchant toute interception.
  • Méthodologie Scrum respectée : Sprints réguliers, rendus, amélioration continue via les nouveaux contrats, présentations orales devant le client, et dossiers techniques complets à chaque phase.
  • Travail d'équipe structuré : Collaboration efficace à 4, avec des rôles clairs et une bonne répartition du travail.

Réflexion & Apprentissages

Le projet Referendum est celui qui m'a le plus apporté sur le plan professionnel pendant ma formation :

  1. 1.Le rôle de Product Owner m'a appris à voir un projet au-delà du code. Gérer un backlog, prioriser les fonctionnalités en fonction de la valeur métier, et présenter un produit à un client - ce sont des compétences que je n'aurais pas développées en restant uniquement développeur.
  1. 2.La cryptographie ElGamal et la Preuve Zero Knowledge m'ont confronté à un domaine que je ne connaissais pas du tout. Comprendre les fondements mathématiques (logarithme discret, arithmétique modulaire, SHA-256), implémenter un protocole de chiffrement asymétrique, et concevoir une preuve non-interactive garantissant l'intégrité des votes sans compromettre leur confidentialité m'a donné une vraie sensibilité à la cybersécurité et à la rigueur qu'elle exige.
  1. 3.Le chatbot IA avec DeepSeek m'a permis d'explorer l'intégration d'API d'intelligence artificielle dans une application concrète, en limitant l'IA à la compréhension de la question pour fournir des réponses pré-préparées pertinentes.
  1. 4.La durée du projet (toute l'année) m'a appris la gestion sur le long terme : maintenir la motivation, gérer la dette technique, et s'adapter aux changements de périmètre à chaque nouveau contrat. C'est très différent d'un projet de quelques semaines.
  1. 5.Les présentations orales et dossiers techniques m'ont forcé à structurer ma pensée et à expliquer des concepts complexes de manière accessible. C'est une compétence essentielle que le code seul ne développe pas.
Retour aux projets