Sunday, August 24, 2025

Quand les maths comptent les voix


Mini-démo à la calculatrice : l’informatique n’est qu’un support. La sécurité vient des mathématiques et de schémas de cryptographie publics (comme Paillier) : on peut additionner des bulletins chiffrés sans jamais les ouvrir, puis vérifier le résultat — tout est régi par des propriétés mathématiques, pas par la confiance dans un logiciel, entit
é ou un individu.

Démo Paillier (2 candidats, 5 électeurs, 1 message encrypté par vote)

⚠️ Démonstration seulement. Nous utilisons des nombres minuscules et un même paramètre r=1 pour que chacun suive facilement. 

L’idée en quelques secondes

Chaque électeur chiffre un nombre :

  • AM=1

  • BM=6

  • M=6 (on choisit la base B=6 car il y a 5 électeurs, donc B=V+1)
    On multiplie tous les chiffrés, on décrypte un seul total et on lit le résultat en base 6 :
    #A=Mtotmod6\#A = M_{\text{tot}} \bmod 6, #B=Mtot/6\#B=\lfloor M_{\text{tot}}/6 \rfloor.


Paramètres mini (communs)

  • p=3, q=17p=3,\ q=17n=pq=51n=pq=51, n2=2601n^2=2601

  • λ=lcm(p1,q1)=16\lambda=\mathrm{lcm}(p-1,q-1)=16

  • g=n+1=52g=n+1=52

  • u=gλmodn2=5216mod2601=817u=g^{\lambda}\bmod n^2=52^{16}\bmod 2601=817

  • L(u)=(u1)/n=(8171)/51=16L(u)=(u-1)/n=(817-1)/51=16

  • μ=L(u)1modn=16\mu=L(u)^{-1}\bmod n=16 (car 16161(mod51)16\cdot16\equiv1\pmod{51})

Clé publique (n,g)=(51,52)(n,g)=(51,52)Secret (pour la démo) (λ,μ)=(16,16)(\lambda,\mu)=(16,16)


Chiffrer un bulletin (avec r=1r=1)

Formule Paillier :

c  =  gMrn modn2.c \;=\; g^{M}\cdot r^{\,n}\ \bmod n^2.

Ici on fixe r=1r=1 pour tout le monde, donc rn=1r^{n}=1 et simplement :

  • Vote A (M=1M=1) → cA=521mod2601=52c_A = 52^{1}\bmod2601 = \mathbf{52}

  • Vote B (M=6M=6) → cB=526mod2601=307c_B = 52^{6}\bmod2601 = \mathbf{307}

Important (démo) : comme rr est fixe, un chiffré individuel révèle le choix (52 vs 307). Pour la démonstration, ne publiez pas les chiffrés individuels ; montrez seulement le produit et le décryptage final.


Addition homomorphe (sans ouvrir les bulletins)

On multiplie tous les chiffrés :

C  =  i=15ci  mod2601.C \;=\; \prod_{i=1}^{5} c_i \;\bmod 2601.

Avec r=1r=1, cela revient à C=52Mimod2601C = 52^{\sum M_i}\bmod2601.

Exemple concret (5 votes : A, B, A, B, A)

Encodez : 1,6,1,6,11, 6, 1, 6, 1.
Somme : Mi=15\sum M_i = 15.
Produit : C=5215mod2601=766C = 52^{15}\bmod2601 = \mathbf{766}.


Décrypter un seul total

Formule Paillier :

Mtot  =  L ⁣(Cλmodn2)μmodn,L(x)=x1n.M_{\text{tot}} \;=\; L\!\big(C^{\lambda}\bmod n^2\big)\cdot \mu \bmod n,\quad L(x)=\frac{x-1}{n}.

Calculez :

  • C16mod2601=1837C^{16}\bmod2601 = 1837

  • L=(18371)/51=36L=(1837-1)/51=36

  • Mtot=3616mod51=15M_{\text{tot}} = 36\cdot16 \bmod 51 = \mathbf{15}

Lecture en base 6 :
#A=15mod6=3\#A = 15 \bmod 6 = \mathbf{3}, #B=15/6=2\#B=\lfloor 15/6 \rfloor = \mathbf{2}.
Résultat final : A = 3, B = 2 — sans avoir ouvert un seul bulletin.


Pourquoi ça marche (en une phrase)

Paillier est additif homomorphe : multiplier des chiffrés revient à additionner les messages. En encodant deux compteurs dans un seul nombre (base 6), on récupère les scores à la fin — et on ne déchiffre qu’un agrégat.


Note « vraie vie »

  • Dans un vrai système, chaque bulletin utilise un rr aléatoire et différent pour garantir la confidentialité (IND-CPA).

  • On déchiffre uniquement les agrégats, idéalement via une clé à seuil (plusieurs autorités doivent collaborer pour dechiffrer les résultats).

  • On ajoute des preuves zéro-connaissance pour certifier qu’un bulletin est bien formé (un seul choix, bonne circonscription, etc.) sans révéler le vote.


No comments:

Post a Comment