Implémentation en langage C d'un processus électoral par scrutin numérique reposant sur la technologie de la blockchain. Le projet couvre la génération de clés (chiffrement asymétrique type RSA), la signature électronique, le hachage SHA-256, la preuve de travail (proof of work) et la construction/validation d'une chaîne de blocs.
Ce projet académique simule l'organisation d'un vote électronique sécurisé à l'aide d'une blockchain. Chaque électeur possède une paire de clés (publique/privée) ; les votes sont signés, hachés, puis regroupés dans des blocs minés par preuve de travail et chaînés entre eux. Le projet inclut également des mesures de performance (test de primalité, exponentiation modulaire, coût du minage) exploitables avec Gnuplot.
- Arithmétique modulaire et test de primalité (
primalite) - Génération de clés asymétriques (
generate,manipulation_cle) - Signature et vérification électronique (
signature) - Hachage SHA-256 (
hash, via OpenSSL) - Création et manipulation de blocs et de l'arbre de blocs (
block,block_tree) - Preuve de travail (proof of work) et mesure de sa difficulté
- Processus de vote complet de bout en bout (
processus_vote,simulation)
Demo-Blockchain/
├── Code/
│ ├── main.c # Démo : génération de clés, primalité
│ ├── main2.c # Démo : clés + signature
│ ├── main_test.c # Test complet (blocs, hash, vote…)
│ ├── simulation.c # Simulation complète du processus de vote
│ ├── performance.c # Mesures de perf. (exponentiation modulaire)
│ ├── proof_of_work_performance.c # Mesures de perf. de la preuve de travail
│ ├── SHA-256_test.c # Test isolé du hachage SHA-256
│ ├── primalite.{c,h} # Test de primalité, arithmétique modulaire
│ ├── generate.{c,h} # Génération de nombres premiers / clés
│ ├── manipulation_cle.{c,h} # Manipulation des clés
│ ├── signature.{c,h} # Signature électronique
│ ├── hash.{c,h} # Fonctions de hachage
│ ├── block.{c,h} # Structure d'un bloc
│ ├── block_tree.{c,h} # Arbre / chaîne de blocs
│ ├── generate_data.{c,h} # Génération de données de test
│ ├── import_data.{c,h} # Import de données
│ └── processus_vote.{c,h} # Orchestration du vote
├── Gnuplot (Graphes)/ # Scripts, données et images de performance
│ ├── image/ # performance.png, pow_performance.png
│ └── texte/ # Données brutes (.txt) pour tracé
├── Rapport Projet.pdf # Documentation détaillée du projet
├── LICENSE
└── README.md
- Un compilateur C (gcc recommandé)
- OpenSSL (bibliothèque de développement) — requis pour le SHA-256 (
#include <openssl/sha.h>) - La bibliothèque mathématique standard (
-lm) - (Optionnel) Gnuplot pour reproduire les graphes de performance
sudo apt-get update
sudo apt-get install gcc libssl-dev gnuplotmacOS (Homebrew)
brew install openssl gnuplot
# Selon votre installation, vous devrez préciser les chemins d'OpenSSL au moment de la compilation
# (ex. -I$(brew --prefix openssl)/include -L$(brew --prefix openssl)/lib)
⚠️ Correction par rapport à l'ancienne documentation : le dépôt ne contient pas de Makefile. La compilation se fait manuellement avecgcc(voir ci-dessous). De plus, OpenSSL est indispensable pour tous les programmes manipulant des blocs — cette dépendance n'était pas mentionnée auparavant.
# 1. Cloner le dépôt
git clone https://github.com/KyroFrCode/Demo-Blockchain.git
# 2. Se placer dans le dossier du code
cd Demo-Blockchain/Code/Chaque programme se compile en incluant les modules dont il dépend, puis en liant -lm (maths) et -lcrypto (OpenSSL).
gcc main.c generate.c primalite.c manipulation_cle.c signature.c -lm -o main
./maingcc main2.c primalite.c generate.c manipulation_cle.c signature.c -lm -lcrypto -o main2
./main2gcc main_test.c block.c block_tree.c generate.c generate_data.c hash.c \
import_data.c manipulation_cle.c primalite.c processus_vote.c signature.c \
-lm -lcrypto -o main_test
./main_testgcc simulation.c processus_vote.c block.c block_tree.c generate.c generate_data.c \
hash.c import_data.c manipulation_cle.c primalite.c signature.c \
-lm -lcrypto -o simulation
./simulation💡 Astuce : pour tout compiler d'un coup, vous pouvez adapter :
gcc <main_choisi>.c $(ls *.c | grep -vE 'main|simulation|performance|SHA-256_test|proof_of_work') -lm -lcrypto -o programmeCréer un vrai
Makefileserait une amélioration bienvenue pour ce projet.
Les programmes performance.c et proof_of_work_performance.c produisent des données de mesure exploitées avec Gnuplot. Les résultats déjà générés sont disponibles dans Gnuplot (Graphes)/ :
image/performance.png— comparaison des méthodes d'exponentiation modulaire (naïve vs rapide)image/pow_performance.png— coût de la preuve de travail selon la difficulté
Le fichier Rapport Projet.pdf décrit en détail les algorithmes, les structures de données et les choix d'implémentation.
Distribué sous licence GNU GPL v3 (voir le fichier LICENSE).