E-Voting Developer 5bebad45b8 Initial commit: Complete e-voting system with cryptography
- FastAPI backend with JWT authentication
- ElGamal, RSA-PSS, ZK-proofs crypto modules
- HTML5/JS frontend SPA
- MariaDB database with 5 tables
- Docker Compose with 3 services (frontend, backend, mariadb)
- Comprehensive tests for cryptography
- Typst technical report (30+ pages)
- Makefile with development commands
2025-11-03 16:13:08 +01:00

402 lines
8.6 KiB
Markdown

# FAQ - Questions Fréquemment Posées
## 🚀 Installation & Démarrage
### Q: Par où commencer ?
**R:**
```bash
cd /home/paul/CIA/e-voting-system
./QUICKSTART.sh # Démarrage rapide
# Ou
make up # Démarrage avec make
```
### Q: Quels sont les prérequis ?
**R:**
- Docker 20.10+
- Docker Compose 1.29+
- Python 3.12 (optionnel, pour développement local)
- 4GB RAM minimum
- 2GB espace disque
### Q: Comment accéder à l'application ?
**R:**
- Frontend : http://localhost:3000
- API : http://localhost:8000
- Documentation API : http://localhost:8000/docs
### Q: Erreur "Port déjà utilisé" ?
**R:**
```bash
# Vérifier quel processus utilise le port
lsof -i :3000
# Modifier les ports dans .env ou libérer le port
# Puis redémarrer
docker-compose restart
```
---
## 🔐 Cryptographie
### Q: Comment fonctionne ElGamal ?
**R:** ElGamal est un chiffrement asymétrique basé sur le logarithme discret :
- **Clé publique** : $(p, g, h)$ où $h = g^x \bmod p$
- **Chiffrement** : $E(m) = (g^r \bmod p, m · h^r \bmod p)$
- **Propriété clé** : Additif homomorphe pour dépouillement sécurisé
Voir `rapport/main.typ` pour détails mathématiques.
### Q: Pourquoi ElGamal et pas Paillier ?
**R:** Pour ce prototype, ElGamal offre :
- Suffisant pour votes binaires (0 ou 1)
- Plus simple à comprendre
- Calcul plus rapide
Paillier serait meilleur pour :
- Votes multi-candidats complexes
- Opérations plus flexibles
### Q: Les signatures RSA-PSS sont-elles sûres ?
**R:** Oui, RSA-PSS avec :
- Taille clé : 2048 bits (protocole)
- Fonction de hash : SHA-256
- Salt aléatoire (probabiliste)
- Résistant aux attaques par timing
### Q: Comment les preuves ZK fonctionnent ?
**R:** Protocole Fiat-Shamir non-interactif :
1. Prouver qu'on connaît un secret
2. Sans le révéler
3. Utilisant un hash comme défi
Cas d'usage : prouver qu'un vote est valide sans le dévoiler.
---
## 🗳️ Processus de Vote
### Q: Comment assurer l'anonymat ?
**R:**
- Vote chiffré avec ElGamal
- Hash unique du bulletin
- Pas de lien entre voter et vote
- Résultats déchiffrés seulement après clôture
### Q: Peut-on voter deux fois ?
**R:** Non, protections multiples :
- Contrainte UNIQUE base de données (voter_id, election_id)
- Flag has_voted sur électeur
- Vérification backend
### Q: Peut-on modifier mon vote ?
**R:** Non :
- Vote chiffré immédiatement
- Hachage SHA-256 pour intégrité
- Stocké en base sécurisé
- Vérification avant dépouillement
### Q: Comment sont comptabilisés les votes ?
**R:**
1. Tous les votes restent chiffrés
2. Somme via propriété homomorphe ElGamal
3. Déchiffrement final du résultat
4. Publication sans détails individuels
---
## 🐳 Docker & Déploiement
### Q: Combien de conteneurs ?
**R:** 3 services :
- **frontend** : Port 3000 (HTML5 + JS)
- **backend** : Port 8000 (FastAPI)
- **mariadb** : Port 3306 (Données)
### Q: Comment sauvegarder la base de données ?
**R:**
```bash
docker-compose exec mariadb mysqldump -u evoting_user -p evoting_db > backup.sql
# Restaurer
docker-compose exec -T mariadb mysql -u evoting_user -p evoting_db < backup.sql
```
### Q: Puis-je déployer en production ?
**R:** Oui, mais appliquez ces recommandations :
1. **Secrets** :
```bash
export DB_PASSWORD=$(openssl rand -hex 16)
export SECRET_KEY=$(openssl rand -hex 32)
```
2. **HTTPS** : Configurez TLS/SSL
3. **CORS** : Restreindre les origines
```
CORS_ORIGINS="https://vote.company.com"
```
4. **Logs** : Centraliser (ELK, Loki)
5. **Monitoring** : Alertes (Prometheus)
Voir `DEPLOYMENT.md` pour détails.
### Q: Comment scaler horizontalement ?
**R:**
```yaml
# docker-compose.yml
backend:
deploy:
replicas: 3 # 3 instances backend
# Ajouter Load Balancer (Nginx)
nginx:
image: nginx:alpine
ports:
- "80:80"
# Config upstream les 3 backend
```
---
## 🧪 Tests & Développement
### Q: Comment lancer les tests ?
**R:**
```bash
make test # Tous les tests
make test -k test_elgamal # Tests spécifiques
make lint # Vérifier la qualité
make format # Formater le code
```
### Q: Comment développer localement ?
**R:**
```bash
make install # Installer Poetry
make dev # Backend en mode watch
# Frontend est servi par le conteneur Docker
```
### Q: Tests d'intégrité réussis ?
**R:** Tests présents :
- ✅ ElGamal encrypt/decrypt
- ✅ Homomorphic addition
- ✅ RSA signatures
- ✅ ZK proofs
- ✅ SHA-256 hashing
À développer :
- Backend API integration tests
- End-to-end voting flow
### Q: Comment contribuer ?
**R:** Voir `CONTRIBUTING.md` :
1. Fork le repo
2. Créer branche feature
3. Écrire tests
4. Faire PR sur dev
5. Review & merge
---
## 🔍 Troubleshooting
### Q: "Connection refused" au backend ?
**R:**
```bash
# Vérifier que le conteneur tourne
docker-compose ps
# Voir les logs
docker-compose logs backend
# Redémarrer
docker-compose restart backend
```
### Q: MariaDB ne démarre pas ?
**R:**
```bash
# Réinitialiser la BD
docker-compose down -v
docker-compose up -d
# Attendre 30s pour initialisation SQL
sleep 30
```
### Q: "Module not found" Python ?
**R:**
```bash
make install # Réinstaller
poetry install # Ou directement
# Vérifier l'env
poetry env info
```
### Q: Le Frontend n'affiche rien ?
**R:**
- Vérifier http://localhost:3000
- Vérifier les logs : `docker-compose logs frontend`
- Vérifier backend accessible : http://localhost:8000/health
### Q: Erreurs CORS ?
**R:**
```python
# Dans .env, ajouter
CORS_ORIGINS="http://localhost:3000"
# Redémarrer backend
docker-compose restart backend
```
---
## 📊 Performance
### Q: Combien de votes par seconde ?
**R:** Prototype :
- ~10 votes/sec (avec crypto)
- ElGamal encrypt : ~10ms
- BD insert : ~5ms
- Total : ~15ms/vote
Optimisations en prod :
- Pré-calcul exponentiations
- Connection pooling
- Indexes BD
### Q: Scalabilité ?
**R:**
- Horizontale : Ajouter backend replicas
- Verticale : Plus de CPU/RAM
- Limite réelle : BD (considérer sharding)
### Q: Déployer 100k électeurs ?
**R:** Oui, avec :
- 3+ replicas backend
- Pool conexiones 50+
- Indexes optimisés
- Éventuellement : Redis cache
---
## 🔐 Sécurité
### Q: Les données en transit sont-elles sécurisées ?
**R:**
- Votes chiffrés ElGamal avant envoi
- Tokens JWT avec signature
- HTTPS en production (obligatoire)
### Q: Peut-on compromettre le système ?
**R:** Menaces mitigées :
| Menace | Mitigation |
|--------|-----------|
| Modification votes | Chiffrement ElGamal |
| Révélation votes | Anonymat + ZK-proofs |
| Usurpation identité | JWT + bcrypt |
| Double vote | Contrainte unique BD |
| Révélation données | Audit logs |
### Q: Comment auditer le système ?
**R:**
- Journal complet : `audit_logs` table
- Traces IP/timestamp
- Vérification preuves ZK
- Vérification hashes
### Q: Mettre à jour les dépendances ?
**R:**
```bash
poetry update # Mettre à jour
poetry audit # Vérifier CVE
docker-compose build --no-cache # Rebuild images
```
---
## 📚 Documentation
### Q: Où trouver la documentation ?
**R:**
- **README.md** : Vue d'ensemble
- **PROJECT_SUMMARY.md** : Récapitulatif
- **QUICKSTART.sh** : Démarrage rapide
- **DEPLOYMENT.md** : Déploiement
- **ARCHITECTURE.md** : Système détaillé
- **CONTRIBUTING.md** : Contribution
- **rapport/main.typ** : Rapport complet (30+ pages)
### Q: Comment générer le PDF du rapport ?
**R:**
```bash
# Installer typst
cargo install typst-cli
# Compiler
typst compile rapport/main.typ rapport/main.pdf
```
### Q: Le rapport est où ?
**R:** Dans `rapport/main.typ` (Typst format)
- Spécifications techniques
- Fondamentaux cryptographiques
- Architecture
- Analyse de sécurité
- Tests et validation
---
## 🎯 Général
### Q: Durée du projet ?
**R:**
- Backend + Crypto : 40%
- Frontend : 20%
- Tests : 15%
- Documentation : 15%
- Déploiement : 10%
### Q: Peut-on réutiliser le code ?
**R:** Oui, licence MIT :
- Utilisez librement
- Modifiez comme vous voulez
- Attribution appréciée
### Q: Peut-on déployer en production réelle ?
**R:** Théoriquement oui, pratiquement :
- Besoin audit sécurité externe
- Besoin compliance légale
- Besoin scalabilité supérieure
- Considérer blockchain pour immuabilité
### Q: Existe-t-il des alternatives connues ?
**R:** Oui :
- Helios (MIT, basé ZK)
- Belenios (Française, blockchain)
- SpeediVote (Suisse)
- Voatz (USA)
### Q: Comment contribuer au projet ?
**R:**
1. Lire CONTRIBUTING.md
2. Cloner le repo
3. Créer branche feature
4. Écrire tests
5. Faire PR
---
**Merci d'utiliser e-Voting System !** 🗳️
Pour plus d'infos : https://github.com/...
Contact : support@...