Modulo und Potenzen - Algorithmen und RSA

Hallo zusammen!
Ich habe auf einem anderen Brett wegen der RSA verschlüsselung gepostet. Dabei geht es darum große Primzahlen mit Modulo- und Potenzrechnung zu verknüpfen, was dann eine fast unknackbare Verschlüssellung für Computersystem bietet.
Die Sache hat aber einen kleinen haken: 65 ^ 224429 gibt eine ganz schön große Zahl. Maple rechnet dies unter einer Sekunde immer mit dem gleichen Ergebnis aus (manche CAS-Systeme bringen divergierende Lösungen). Auch habe ich erfahren, dass bei eienr Zahl mit 30 Nullen eine Änderung um eins ignoriert wird. D.h. dem spiecher ist das egal. Aber die Leute die Maple und PGP programmiert haben, müssen dieses Problem auch irgendiwe in den Griff bekommen haben, die Frage ist nur wie.
Es ist immer folgendes zu berechnen: ( z ^ a ) mod ( b * c ) z ist beliebig, alle andern Zahlen sind große Primzahlen. En Rechenbeispiel:
( 65 ^ 73 ) mod ( 19 * 53 ) = 654
65 ^ 73 gibt eine ganz schön große Zahl. In der Praxis sind diese Zahlen noch größer. Es packt kein Rechner. Was kann man tun? 65 ^ 73, sowie 19 * 53 sind keine Zwischenergebnisse für Variablen, da alles in einem Term steht. Außerdem ist für die Modulorechnung nur die doppelte Länge des Divisors (glaube ich heißt so) von Interesse: 19 * 53 hat vier Stellen, das heißt die letzten acht Stellen von 65 ^ 73 genügen eigentlich schon zur Berechnung. Kann ich mit diesem Ansatz weitermachen, oder gibt es da andere (nachlesbare) Möglichkeiten, oder was soll ich tun?

Vielen Dank im Voraus.

Gruß Christian

Hallo Christian,

Was kann man tun? 65 ^ 73, sowie 19 * 53 sind keine
Zwischenergebnisse für Variablen…

du mußt die Potenz 65^73 nicht ausrechnen. Es geht einfacher. :wink:

Ganz analog zu ganzen und natürlichen Zahlen gibt es auch Rechenregeln, wenn du mit Resten, also mit Modulo rechnest. Für dich ist wichtig zu wissen, daß es egal ist, ob man erst eine Multiplikation und dann die Modulo-Funktion ausführt oder umgekehrt. Da du Potenzen mit natürlichen Zahlen kannst auf Multiplikation zurückführen, mußt du nur noch 73 Multiplikationen ausführen und jedes mal den Teilungsrest berechnen. Das geht mit Integern sehr, sehr schnell.

Das Stichwort lautet übrigens Restklassen (das ist die mathematische Bezeichnung für die Zahlenklassen, bei den Modulo mit im Spiel ist) und was du tun willst, ist die Multiplikation mit Restklassen.

Wenn a(m) das Ergebnis von „a modulo m“ bezeichnet, dann ist

a(m) * b(m) = (a*b) (m)

Beispiel:
(65^4) Mod (19*53) = (65^2 * 65^2) Mod (19*53) = 543

andererseits ist

( (65^2) Mod (19*53) ) * ( (65^2) Mod (19*53) ) = (197 * 197)

197*197 ist zwar nicht 543, aber Zahlen, bei denen bei der Modulo-Teilung der gleiche Rest übrigbleibt, werden bei Restklassen als gleich angesehen.

Anderes formuliert:
Nachdem der Teilungsrest bei JEDER Multiplikation ausgerechnet werden muß, muß man noch 197*197 mod (19*53) ausrechnen, was wiederum 543 ergibt.

Wirf doch mal einen Blick auf folgende Vortragsfolie im Netz:
http://www.mathematik.uni-osnabrueck.de/staff/phpage…

Die Folie stammt übrigens aus einem Vortrag über Kryptographie, wirf ruhig auch einen Blick auf den ganzen Vortrag: http://www.mathematik.uni-osnabrueck.de/staff/phpage…

Markus

Hallo Christian,

65 ^ 73 gibt eine ganz schön große Zahl. In der Praxis sind
diese Zahlen noch größer. Es packt kein Rechner. Was kann man
tun? 65 ^ 73, sowie 19 * 53 sind keine Zwischenergebnisse für
Variablen, da alles in einem Term steht.

Ob du diese Zwischenwerte in einer Variablen ablegst oder nicht, der Computer MUSS diesen Wert irgendwie SPEICHERN !!!

Ein (heutiger) Computer kann technisch immer nur 2 Werte miteinander verknüpfen. Das „Ding“ welches die (Rechen-)Operationen ausführt nenn sich ALU (Arithmetic Logog Unit) und besitzt zwei Eingänge und einen Ausgang.
Daraus ergibt sich folgender Ablauf:

  1. Wert A am einen Eingang der ALU anlegen (dazu muss dieser Wert in einem Register gespeichert werden; zwangsweise har dieses Register eine endliche Grösse).
  2. Wert B am anderen Eingang der ALU anlegen und der ALU mitteilen welche Operation ausgeführt werden soll.
  3. Das Resultat, am Ausgang der ALU, muss jetzt wieder irgendwo abgespeichert werden! Wenn dies ein Zwischenresultat ist, kann es direkt wieder an den einen Eingang der ALU angelegt werden.

Auch wenn du mit Papier und Bleistift rechnest, wird du immer Zwischenresultate abspeichern, entweder auf dem Papier oder im Kopf !!! Der Computer muss das auch tun.

MfG Peter(TOO)

Klasse! Danke! Super! Funktinert einfach nur!!! Vielen heißen Dank! Zwar ist die Geschwindigkeit noch nicht optimal, aber es funktioniert!!!
Ich wünsche dir noch einen guten Rutsch!!!

Gruß Christian

Halt, es ist ein Irrtum passiert, es funktioniert doch nicht. Due hast einen Exponenten gewählt, den man in Primfaktoren zerlegen kann. Und was wenn der Exponent auch schon ein Prim ist?

Gruß Christian