Die Montgomery-Multiplikation ist ein Verfahren zur modularen Multiplikation, bei dem nur in einer Vorbereitungsphase eine Reduktion modulo n erforderlich ist. Anschließend sind nur Multiplikationen und Additionen erforderlich sowie außerdem div- und mod-Operationen mit einer Zweierpotenz m. Bei binärer Zahlendarstellung sind aber diese beiden letzteren Operationen sehr einfach durch Bit-Operationen zu realisieren.
Es folgt die Implementierung in der Programmiersprache Java. In der Klasse Montgomery sind die Funktionen der Montgomery-Arithmetik zusammengefasst. Der Modul n wird im Konstruktor der Klasse übergeben. In der Funktion preprocess werden k und m = 2k ermittelt; ferner werden die Werte np = n' = -n-1 mod m und mm = m2 mod n vorausberechnet.
In der Funktion mred wird die Operation mod m wird durch bitweises Und mit den k Einsen von m-1 realisiert, die Operation div m durch Rechtsschieben um k Stellen.
Für die Berechnung des inversen Elements von n modulo der Zweierpotenz m = 2k wird die superschnelle Funktion inv verwendet. Die Zeitkomplexität der Funktion inv(n, k) beträgt O(log k) = O(log log m). Die etwas seltsame Reduktion modulo m in der return-Anweisung ist erforderlich, um ein nichtnegatives Ergebnis zu erzeugen.
Weiter mit: [Implementierung in Python] oder [up]