Un exemple d'une communication entre un agent alice et un agent bob où alice doit prouver à bob qu'elle connait x mais sans révéler la valeur de x.
Pour ce faire, nous utilisons:
- loi des exposants
- des fonctions non-réversible
NB: x**y
est x à la puissance y en Python (et non pas x^y, qui est bitwise XOR!)
x**a * x**b = x**(a+b)
et
(x**a)**b = x**(a*b)
facile à calculée, il est difficile de trouver la variable d'entrée puisque la valeur vient d'un restant d'une division i.e. modulo
f(x) = g ** x % p
où
- g est une constante connue de alice et bob
- p est un nombre premier connu de alice et bob
- x est le secret que seul alice connait
Nous lançons un processus par agent avec une communication par deux canaux nommés (type FIFO), un de alice vers bob et un de bob vers alice.
terminal 1:
$ python3 alice.py
créé ./zkp.alice.fifo
r=510 x=83
g=240 p=320902338832813374930143536447 fx=223780349919490882457807813796, fr=295709063760314061456845428928
notification du pair de la fin de session
terminal 2:
$ python3 bob.py
créé ./zkp.bob.fifo
g=240 p=320902338832813374930143536447 fx=223780349919490882457807813796, fr=295709063760314061456845428928
le pair connait le secret de x