Fiat-Shamir-Verfahren, Zero-Knowldge-Protokoll
Kryptographie mit MuPAD,
Prof. Dr.Dörte Haftendorn, Okt.99, Nov 02
-----------------------------------------------------------------------------------
Anton will Berta davon überzeugen, dass er ein Geheimnis s kennt,
ohne dass Berta irgendetwas von dem Geheimnis erfährt.
Schlüsselerzeugung:
Anton wählt zwei große Primzahlen p und q und bildet ihr Produkt n.
Er teilt v und n öffentlich mit und behält s als sein Geheimnis.
Anwendungsphase:
Anton wählt r teilerfremd zu n und berechnet x
repeat
rd:= random(2..n): r:=rd():
until gcd(n,r)=1 end_repeat:r;
x:=powermod(r,2,n); //A sendet x an B.
rd:= random(0..1): b:=rd():b; //B sendet 0 oder 1 an A
if b=0 then y:=r else y:=modp(r*s,n)end_if; // A sendet y an B
test:=powermod(y,2,n);
if b=0 then if test=x then erg:="ok": else erg:="Quark": end_if:
else if test=modp(x*v,n) then erg:="ok": else erg:="Quark": end_if:
end_if:
erg;
teste:=proc()
local rd,r,x,test,b,y,erg;
begin
repeat
rd:= random(2..n): r:=rd():
until gcd(n,r)=1 end_repeat:r;
x:=powermod(r,2,n); //A sendet x an B.
rd:= random(0..1): b:=rd():b; //B sendet 0 oder 1 an A
if b=0 then y:=r else y:=modp(r*s,n)end_if; // A sendet y an B
test:=powermod(y,2,n);
if b=0 then
if test=x then erg:="ok": else erg:="Quark": end_if:
else if test=modp(x*v,n) then erg:="ok": else erg:="Quark":end_if:
end_if:
return ([b,test,erg]);
end_proc: