Aufgabe | Einfacher Code (Passwortschutz) |
Verwendete Konstruktionen | Eingabe, Ausgabe, Modulo, Schleife |
function
pass(x)
{
var n1
= 7; /*fest, natürlich sonst mehrstellig*/
var n2
= 13; /*fest, natürlich sonst mehrstellig*/
var code
= 9; /*wird aus der PIN und n1 und n2 berechnet:
code = PIN*n1 mod n2*/
if(((x*n1)%n2)==code)
{return 1}
else {return 0};
}
Die Lösung ist natürlich ganz einfach: Wenn code = PIN * n1
gilt ist PIN = code / n1.
Nun müssen wir nur 1/7 berechnen, allerdings mod 13.
L * 7 = 1 mod 13 wird durch 7^11 gelöst (kleiner Fermat´scher
Satz: 7^(13-1) = 1 mod 13 )
7 ^ 11 = 1977326743 = 2 mod 13. (na klar: 2 * 7 =
14 = 1 mod 13)
Die Lösung ist also PIN = code * 1/n1 = 9 * 2 = 18 = 5 mod 13
Aufgabe | Einfacher Code (Passwortschutz) |
Verwendete Konstruktionen | Eingabe, Ausgabe, Modulo, Schleife |
function
pass2(x)
{
var n1
= 207; /*fest, natürlich sonst größer*/
var n2
= 851; /*Produkt zweier Primzahlen,
fest,natürlich sonst größer */
var code
= 322; /*wird aus der PIN und n1 und n2 berechnet:
code = PIN*n1 mod n2*/
if(((x*n1)%n2)==code)
{return 1}
else {return 0};
}
Die Lösung ist nicht ganz so einfach: Wir müssen wieder 1/n1
bestimmen.
Nun ist der richtige Exponent für ein Primzahlprodukt p1*p2 aber
nicht p1*p2 - 1, sondern (p1-1)*(p2-1), wir müssen also die Primzahlzerlegung
kennen.
Der wichtige Sicherheitsfaktor ist also, daß man zwar recht leicht
zwei Primzahlen multiplizieren kann, daß es aber nicht so leicht
ist, aus dem Produkt von zwei Primzahlen die Faktoren zu ermitteln.
Hier ists noch relativ einfach: 851 = 37 * 23, also ist der Exponent,
mit dem wir die Inverse bestimmen 36*22= 792.
Wenn Sie nun noch 207^ 792 mod 851 bestimmt haben, ist die PIN geknackt.
Die Lösung ist PIN = 55.