RSA mit maple < Maple < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 18:47 So 25.02.2007 | Autor: | LeonL |
Aufgabe | In meine Facharbeit zur Kryptologie bearbeite ich unter anderem das RSA-verfahren um dies zu vervollständigen wollte ich es mit maple als Anwendungsbeispiel hinzufügen. |
Es hat auch alles recht gut geklappt bis ich auf einmal Probleme bekommen hab und auch nach langen Recherchen nicht mehr wusste wie es weitergehen könnte. Ich habe letztendlich hier einen Artikel zu dem Thema gefunden, wollte eigentlich dort meine Frage stellen dies ging aber irgendswie nicht. https://matheraum.de/read?t=206523 . Leider konnte ich, da ich nicht so maple-bewandert bin mit einigen Begirffen nichts anfangen. Ich hoffe mir kann geholfen werden hier sind schon mal meine ersten Ergebnisse mit dem Fehler.
> restart:
> p:=nextprime(5^13);
p := 1220703131
> q:=nextprime(3^15);
q := 14348909
> if p=q then ("p und q müssen sich unterscheiden") else print ("Ok") end if;
>
"Ok"
> N:=p*q;
N := 17515758142734079
> L:=(p-1)*(q-1);
L := 17515756907682040
> delete(p,q) ;
delete(1220703131, 14348909)
> delete(L);
delete(17515756907682040)
> e:=rand(3..L-2)();
e := 11378251899082949
> if igcd(e,L)>1 then error("e unbrauchbar") else print("OK") end if;
"OK"
> d:=1/e mod L;
d := 8667072330821589
> Zwischenprobe:=(d*e-1)/L; if type(Zwischenprobe,rational) then print("Probe OK") else error("Probe falsch") end if;
Zwischenprobe := 5630138207981699
"Probe OK"
> publickey:=[N,e];
publickey := [17515758142734079, 11378251899082949]
> secretkey:=[N,d];
secretkey := [17515758142734079, 8667072330821589]
> Klartext:="Hallo";
Klartext := "Hallo"
> y:=5125;
y := 5125
> x:=convert(Klartext,bytes);
x := [72, 97, 108, 108, 111]
> if (x)>=N then print("Nachricht zu lang!") else print("Text umgewandelt") end if;
Error, cannot evaluate boolean: 17515758142734079+[-72, -97, -108, -108, -111] <= 0
Um weiter Arbeiten zu können muss ich diesen Fehler beheben bin aber mittlerweile Ratlos außerdem fällt es mir dannach schwer die jeweiligen dinge zu kodieren und decodieren.
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Hi Leon,
ich habe mir den Code mal angesehen und mir fiel auf, dass du if (x)>=... geschrieben hast. Vermutlich meinst du die Anzahl der Elemente in der Byteliste x. Dann solltest du if nops(x)>=... schreiben.
Des weiteren weiß ich nicht, was die beiden Aufrufe der Funktion "delete()" bewirken sollen. Hast du diese Fkt. an anderer Stelle definiert? In der Hilfedatei von Maple 10 finde ich nichts Brauchbares dazu.
Na denn, gut's Nächtle,
Peter
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 17:36 Mo 26.02.2007 | Autor: | LeonL |
Schon einmal vielen Dank, das mit nops hat funktioniert.
Delete habe ich an der Stelle eingebracht um einfach die Werte zu löschen, da die nicht weiter gebraucht werden. Dies wollte ich in meiner Facharbeit einfach hinzufügen, um es so genau wie möglcih zu beschreiben, denn p und q können einem dritten zur Entschlüsselung dienen .Trotzdem habe ich jetzt Probleme bei der Codierung es klappt zwar mit einem Zahlenwert .......
> message:=1234567890;
>
message := 1234567890
> verschlüsseln:=power(message,e) mod N;
verschlüsseln := 6564184656086515
> entschlüsseln:=power(verschlüsseln,d) mod N;
entschlüsseln := 1234567890
sobald ich das aber mit meinem umgewandelten Klartext versuche bekomme ich Probleme und erlange zu keinem Ergebnis....
> Klartext:="Hallo";
>
Klartext := "Hallo"
> x:= convert(Klartext, 'bytes');
x := [72, 97, 108, 108, 111]
> if nops(klarbytes)>=N then print("Nachricht zu lang!") else print("Text umgewandelt") end if;
"Text umgewandelt"
> verschlüsseln:=power(x,e) mod N;
verschlüsseln := power([72, 97, 108, 108, 111], 11378251899082949)
Ich habe das alles auch schon mit dem Programm Mupad durchgeführt dort erwies sich eigentlich alles als wesentlich einfacher und hier reichte auch der Befehl verschlüsseln:= powermod(x, e, N) aus aber bei maple kommen nur probleme auf, da wir aber im Unterricht uns nur mit Maple befassen wollte ich dieses auch in meiner Facharbeit verwenden.
Schon einmal vielen dank für weitere Hilfen.
|
|
|
|
|
Hallo,
du schreibst aber nicht, ob jetzt eine Fehlermeldung kommt oder nicht...
Na ja, den älteren Beitrag zu Maple-RSA hast du ja schon gefunden. Du hättest ruhig reinschauen können, auch wenn er auf den ersten Blick kompliziert erscheint. Dort habe ich nämlich u.a. die map-Funktion benutzt. Sie ist dafür da, Funktionen auf ganze Listen anzuwenden.
Wenn also f eine Funktion mit einem skalaren Argument ist, dann kannst du sie per map(f, [1,2,3,4,5]); auf eine ganze Liste (also einen ganzen Klartext z.B.) anwenden.
Gruß
Martin
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 16:14 Di 27.02.2007 | Autor: | LeonL |
Hallo nocheinmal vielen Dank.
Also eine Fehlermeldung habe ich auch nicht erhalten nur maple gibt keinen festen Ausdruck an, der zum entschlüsseln benötigt wird.
Ich habe mich mit dem älteren beitrag schon genauer befasst, konnte aber leider nur recht wenig damit anfangen, da der Ausdruck map mich einfach verwirrt und ich es nicht hinbekommen ihn anzuwenden.
Tut mir leid wenn ich schon bei so etwas versage aber ich kenne mich mit maple leider nur bedingt aus. Ich weiss einfach nicht wie ich den befehl auf meine jetzige ausarbeitung anwenden kann.
Schon mal vielen dank für weitere hilfen und ich möchte mich nochmal für meine geringen Kentnisse entschuldigen.
|
|
|
|
|
Hallo,
genug entschuldigt ;) Es war nicht so gemeint. Ich dachte nur, vielleicht entdeckst du ja wertvolle Tipps...
Aber zuerst etwas anderes:
Die Funktion delete gibt es bei Maple gar nicht. Die betreffende Zeile hat überhaupt keine Wirkung! Was du meinst ist unassign. Hier muss aber das Argument in einzelne Anführungsstriche gestellt werden. Wenn du also den Wert der Variablen a löscghen willst, musst du eingeben:
unassign('a');
Übrigens ist das Löschen an dieser Stelle falsch, da du den Wert von L nachher noch beim rand-Aufruf brauchst.
Zum eigentlichen Thema (map):
Versuch es mal mit:
verschlüsseln:=map (xx -> power(xx,e) mod N, x);
Hier wird die anonyme Funktion "xx -> power(xx,e) mod N" auf jeden Eintrag von x angewandt. Ich denke, das hast du gesucht. In Maple kann man eben nicht gleich alles vektorwertig rechnen.
Gruß
Martin
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 09:56 Mi 28.02.2007 | Autor: | Martin243 |
Hallo,
für die Teilbarkeit von a durch b kannst du in Maple eine der folgenden Beziehungen nutzen:
lcm(a,b) = a (kleinstes gemeinsames Vielfaches)
gcd(a,b) = b (größter gemeinsamer Teiler)
a mod b = 0 (Modulo-Division)
Gruß
Martin
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 17:01 Mi 28.02.2007 | Autor: | LeonL |
danke,
aber ich suche eher einen festen Begriff und keine "Rechenform", möchte halt einfach rational ersetzen.
> Zwischenprobe:=(d*e-1)/L; if type(Zwischenprobe,rational) then print("Probe OK") else error("Probe falsch") end if;
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 03:09 Mi 07.03.2007 | Autor: | Peter_Pein |
Hi,
du meinst, dass Zwischenprobe ganzzahlig sein soll?
Dann verwende type(Zwischenprobe, integer).
Oder falls Zp eine positive ganze Zahl sein soll:
type(Zp, posint)
Gruß, Peter
|
|
|
|