RSA-Verfahren

Definition des Verfahrens

Siehe auch http://www.austromath.at/medienvielfalt/materialien/krypto/lernpfad/ -> Anwendung -> RSA - Flash Applet

rsa:=(Print[Style["\nRSA-Verfahren:",Bold, FontSize->15]];
p=Input["Alice wählt eine Primzahl:\np = "];
While[!PrimeQ[p],p=Input[Row[{"p = ",p, " ist keine Primzahl!\nAlice wählt eine Primzahl:\np = "}]]];
q=Input["Alice wählt eine weitere, von p verschiedene Primzahl:\nq = "];
While[!PrimeQ[q],q=Input[Row[{"q = ",q, " ist keine Primzahl!\nAlice wählt eine weitere, von p verschiedene Primzahl:\nq = "}]]];
While[p==q,q=Input[Row[{"q = ",q, " ist nicht von p = ",p," verschieden!\nAlice wählt eine weitere, von p verschiedene Primzahl:\nq = "}]]];
Print["\n   1.) Alice wählt die Primzahlen p = ",Style[p,Blue,Bold]," und q = ", Style[q,Blue,Bold],"."];
Print["   2.) Sie berechnet:\n          n = p*q = ",n=p q,"\n          m = (p-1)*(q-1) = ",m=(p-1)*(q-1)];
a=Input[Row[{"Alice wählt eine zu m = ",m," teilerfremde natürliche Zahl größer 1:\na = "}]];
While[!(IntegerQ[a]&&a>1),a=Input[Row[{"a = ", a," ist keine natürliche Zahl > 1!\nAlice wählt eine zu m = ",m," teilerfremde natürliche Zahl größer 1:\na = "}]]]
While[GCD[a,m]≠1,a=Input[Row[{"a = ", a," und m = ",m," sind nicht teilerfremd!\nAlice wählt eine zu m = ",m," teilerfremde Zahl:\na = "}]]];
Print["   3.) Alice wählt als eine zu m teilerfremde Zahl a = ",Style[a,Blue,Bold],"."];
Print["   4.) Alice gibt die Zahlen n = ",Style[n,RGBColor[0,0.5,0],Bold]," und a = ",Style[a,RGBColor[0,0.5,0],Bold]," als 'öffentlichen Schlüssel' bekannt."];
x = Input[Row[{"Bobs Nachricht, sein 'Klartext', der kleiner als n = ",n," sein muss, lautet:\nx = "}]];
While[!(IntegerQ[x] && x≥0),x = Input[Row[{"x = ",x," ist keine natürliche Zahl!\nBobs Nachricht, sein 'Klartext', der kleiner als n = ",n,"sein muss, lautet:\nx = "}]]];
While[x≥n,x = Input[Row[{"x = ",x," ist nicht kleiner als ",n,"!\nBobs Nachricht, sein 'Klartext', der kleiner als n = ",n," sein muss, lautet:\nx = "}]]];
Print["\n   5.) Bobs Nachricht, sein 'Klartext', lautet: x = ",Style[x,Red,Bold],"."];
Print["   6.) Bob verschlüsselt seine Nachricht gemäß y = (x^a)mod n = ",y=PowerMod[x,a,n],"."];
Print["   7.) Bob gibt den 'Geheimtext' y = ",Style[y,RGBColor[0,0.5,0],Bold]," öffentlich bekannt."];
Print["\n   8.) Alice ermittelt b = (a^(-1))mod m = ",b=PowerMod[a,-1,m],"."];
Print["   9.) Alice entschlüsselt Bobs Nachricht gemäß X = (y^b)mod n = ",(X=Mod[y^b,n];Style[X,Red,Bold]),"."];)

Anwendung des Verfahrens

rsa