Prouver qu'on connaît une clé secrète
Le protocole d'identification de Schnorr
Comment convaincre quelqu'un que vous connaissez un mot de passe sans le prononcer ? C'est exactement ce que résout le protocole d'identification de Schnorr, publié en 1989.
Le décor mathématique
On travaille dans un groupe où le logarithme discret est difficile : on se donne un générateur g et un grand ordre premier. Chacun possède une paire de clés :
- une clé privée
x, un nombre secret ; - une clé publique
y = g^x, diffusée librement.
Calculer y à partir de x est facile. Faire l'inverse — retrouver x à partir de y — est le problème du logarithme discret, hors de portée pour de grands paramètres. C'est la même asymétrie qui protège RSA, mais fondée sur un autre problème difficile.
Le prouveur (appelons-le Pierre) veut convaincre le vérifieur (Valérie) qu'il connaît le x correspondant à y, sans révéler x.
Les trois échanges
Le protocole tient en trois messages, un schéma qu'on appelle engagement – défi – réponse.
Pierre (connaît x) Valérie (connaît y)
------------------ -------------------
1. choisit un aléa r
calcule t = g^r
--- t ---> (engagement)
2. choisit un défi
aléatoire c
<--- c ---
3. calcule s = r + c*x
--- s --->
vérifie que
g^s = t * y^c ?
Détaillons chaque étape :
- Engagement. Pierre tire un nombre aléatoire
r(un nonce), calculet = g^ret envoiet. Il s'engage surrsans le dévoiler. - Défi. Valérie tire un nombre aléatoire
cet l'envoie. Elle ne sait rien encore. - Réponse. Pierre calcule
s = r + c*xet l'envoie.
La vérification
Valérie accepte si et seulement si :
g^s = t * y^c
Vérifions que l'égalité tient quand Pierre est honnête. On remplace s par r + c*x :
g^s = g^(r + c*x) = g^r * g^(c*x) = g^r * (g^x)^c = t * y^c
L'égalité est bien satisfaite. Pierre n'a jamais envoyé x. Il a seulement envoyé t (qui masque r) et s (qui mélange r et x). La clé secrète reste invisible.
Pourquoi un tricheur échoue
Imaginez Marc, qui ne connaît pas x. Il peut envoyer un t quelconque, mais il devra ensuite produire un s tel que g^s = t * y^c, pour un c qu'il ne connaît pas encore au moment de choisir t. Sans x, il est coincé : soit il triche sur t en pariant sur un c, soit il échoue à la vérification. Nous verrons à la leçon suivante pourquoi ce piège est solide.
En résumé
Schnorr permet de prouver la connaissance d'une clé privée x par trois échanges — engagement t = g^r, défi c, réponse s = r + c*x — validés par l'unique test g^s = t * y^c. Le secret n'est jamais transmis, seulement démontré.

