Die modulare Exponentiation spielt allgemein in der Kryptografie eine große Rolle. Im RSA-Verfahren beispielsweise besteht die Chiffrierung in der Berechnung von me mod n. Hierbei sind m, e und n sehr große Zahlen (typischerweise 512 oder 1024 Bit lang).
Um me mod n zu berechnen, sind zum Glück nicht e Multiplikationen von m mit sich selbst erforderlich. Schon bei einer Länge von e von nur 50 Bit wären dies eine Billiarde Multiplikationen. Tatsächlich genügen weniger als 2 log(e) Multiplikationen, also weniger als 100 bei einem 50-Bit-Exponenten.
Für die schnelle modulare Exponentiation (square and multiply) gibt es eine iterative Implementierung unter Benutzung der Binärdarstellung des Exponenten,
Am einfachsten ist die im Folgenden dargestellte rekursive Implementierung; in diesem Fall wird die Binärdarstellung des Exponenten nicht explizit benötigt.
Ausgehend von der Beobachtung, dass z.B. m13 dargestellt werden kann als
m13 = m12 · m
und m12 als
m12 = (m6)2
lassen sich folgende Rekursionsformeln für die Berechnung von me mit e ∈ ℕ0 aufstellen:
me = | ![]() |
|
Das folgende Python-Programm stellt eine mögliche Implementierung dieser Rekursionsformeln für die modulare Exponentiation dar.
Eine entsprechende Implementierung in der funktionalen Programmiersprache Haskell ist die folgende:
Weiter mit: [Modulare Exponentiation iterativ] [Primzahltest] oder [up]