Cryptography Reference
In-Depth Information
Der Vollständigkeit halber sei auch der folgende Satz erwähnt.
Z n genau dann zyklisch, wen n
Satz 6.3.5 (Einheitengruppen). Es sei n ≥ 2 .Dannist
n =2 , n =4 , n = p r
p r für eine Primzahl p> 2 und ein r
oder n =2
·
1 gilt.
Ein Element a ∈ Z n heißt primitives Element modulo n , wenn es ein Erzeuger von
Z n ist. Der letzte Satz ist also ein hinreichendes und notwendiges Kriterium dafür, ob es
primitive Elemente modulo einer Zahl n gibt.
Schnelle Exponentiation und Erzeugertests
Häufig möchte man Potenzen eines gegebenen Gruppenelementes schnell berechnen: Bei
gegebenem g
0 möchte man also g n berechnen. Für große Zahlen n ist
der naive Ansatz, nämlich gn -mal zu multiplizieren, völlig unpraktikabel, da er n− 1
Multiplikationen benötigen würde. Glücklicherweise kommt man mit deutlich weniger
Multiplikationen aus. Dabei benutzt man die Idee des iterierten Quadrierens .Umzum
Beispiel g 2 500 zu berechnen, rechnet man einfach:
G und n
2
g 2 2
···
···
,
500-mal quadrieren
was lediglich 500 (statt 2 500
1 ) Multiplikationen benötigt, also log(2 500 ) viele. Diese
Idee kann man leicht auf Zahlen n erweitern, die keine Zweierpotenzen sind: Betrachten
wir dazu (die kleine Zahl) n =11 als Beispiel. Wir wollen also g 11 berechnen. Es ist
11 = 2 3 +2 1 +2 0 , also in Binärdarstellung (11) 2 = 1011 .Mit b = (11) 2 erhalten wir g 11 =
g 2 3
· g 2 0 = i =0 g b (3 −i ) · 2 i , wobei, wie üblich, b = b (0) b (1) b (2) b (3) ist. Um nun g 11
zu berechnen, könnte man also zunächst g i = g 2 i durch i -faches iteriertes Quadrieren für
alle i mit 0 ≤ i ≤ 3 berechnen und erhält dann mit g 0 ·
· g 2 1
g 3 das gewünschte Ergebnis g 11 .
Noch ezienter ist die Berechung allerdings, wenn man Ergebnisse bereits durchgeführter
Quadrierungen wiederverwendet, denn g i erhält man durch eine Quadrierung gemäß g i =
( g i− 1 ) 2 . Diese Idee ist in Algorithmus 6.1 umgesetzt, wobei
g 1 ·
·
dieuntereGaußklammer
bezeichnet; für eine reelle Zahl r ist also
r
=max
{
i
Z |
i
r
}
. Offensichtlich gilt:
Satz 6.3.6 (schnelle Exponentiation). Für eine Gruppe G führt Algorithmus 6.1, gegebe n
g
0 , O (log n ) Multiplikationen in G zur Berechnung von g n aus.
G und n
Kennt man die Ordnung einer (zyklischen) Gruppe und alle ihre Primteiler, so lässt
sich leicht feststellen, ob ein gegebenes Element ein Erzeuger der Gruppe ist. Ein entspre-
chendes Verfahren ist Algorithmus 6.2.
Satz 6.3.7 (schneller Erzeugertest). Für eine endliche Gruppe G mit Ordnung n führt
Algorithmus 6.2 O ((log n ) 2 ) Multiplikationen in G aus, um festzustellen, ob ein gegebenes
Element aus G Erzeuger von G ist.
Beweis. Die obere Schranke für die Komplexität des Algorithmus ergibt sich direkt aus
Satz 6.3.6 und der Tatsache, dass jede Zahl n nicht mehr als log n Primfaktoren hat. Um
die Korrekheit zu zeigen, sei n = |G|
und g ∈ G ein beliebiges Element.
Search WWH ::




Custom Search